# Orion Protocol SDK # Install ```console npm i @orionprotocol/sdk ``` # Usage ## High level methods ### Easy start ```ts import "dotenv/config"; import { initOrionUnit } from "@orionprotocol/sdk"; import { Wallet } from "ethers"; const chain = process.env.CHAINID; // 0x56 const env = process.env.ENV; // production const privateKey = process.env.PRIVATE_KEY; // 0x... if (!chain) throw new Error("CHAINID is required"); if (!env) throw new Error("ENV is required"); if (!privateKey) throw new Error("PRIVATE_KEY is required"); const wallet = new Wallet(privateKey); // OrionUnit is chain-in-environment abstraction const orionUnit = initOrionUnit(chain, env); orionUnit.exchange.deposit({ amount: 2.5, asset: "ORN", signer: wallet, }); orionUnit.exchange.withdraw({ amount: 435.275, asset: "USDT", signer: wallet, }); // Make market swap orionUnit.exchange .swapMarket({ type: "exactSpend", assetIn: "ORN", assetOut: "USDT", feeAsset: "ORN", amount: 23.89045345, slippagePercent: 1, signer: wallet, options: { logger: console.log, // Set it to true if you want the issues associated with // the lack of allowance to be automatically corrected autoApprove: true, }, }) .then(console.log); ``` ## Low level methods ### Get historical price ```ts const candles = await orionUnit.priceFeed.getCandles( "ORN-USDT", 1650287678, // interval start 1650374078, // interval end "5m", // interval "all" // exchange ); ``` ### Using contracts ```ts import { contracts } from "@orionprotocol/sdk"; const exchangeContract = contracts.Exchange__factory.connect( exchangeContractAddress, orionUnit.provider ); const erc20Contract = contracts.ERC20__factory.connect( tokenAddress, orionUnit.provider ); const governanceContract = contracts.OrionGovernance__factory.connect( governanceAddress, orionUnit.provider ); const orionVoting = contracts.OrionVoting__factory.connect( votingContractAddress, orionUnit.provider ); ``` ### Get tradable pairs ```ts const pairsList = await orionUnit.orionAggregator.getPairsList(); ``` ### Get swap info ```ts const swapInfo = await orionUnit.orionAggregator.getSwapInfo( // Use 'exactSpend' when 'amount' is how much you want spend. Use 'exactReceive' otherwise type: 'exactSpend', assetIn: 'ORN', assetOut: 'USDT', amount: 6.23453457, ); ``` ### Place order in Orion Aggregator ```ts const { orderId } = await orionUnit.orionAggregator.placeOrder( { senderAddress: '0x61eed69c0d112c690fd6f44bb621357b89fbe67f', matcherAddress: '0xfbcad2c3a90fbd94c335fbdf8e22573456da7f68', baseAsset: '0xf223eca06261145b3287a0fefd8cfad371c7eb34', quoteAsset: '0xcb2951e90d8dcf16e1fa84ac0c83f48906d6a744', matcherFeeAsset: '0xf223eca06261145b3287a0fefd8cfad371c7eb34', amount: 500000000 price: 334600000, matcherFee: '29296395', // Orion Fee + Network Fee nonce: 1650345051276 expiration: 1652850651276 buySide: 0, isPersonalSign: false, // https://docs.metamask.io/guide/signing-data.html#a-brief-history }, false // Place in internal orderbook ) ``` ### Orion Aggregator WebSocket Available subscriptions: ```ts ASSET_PAIRS_CONFIG_UPDATES_SUBSCRIBE = 'apcus', AGGREGATED_ORDER_BOOK_UPDATES_SUBSCRIBE = 'aobus', ADDRESS_UPDATES_SUBSCRIBE = 'aus', // Orders history, balances info BROKER_TRADABLE_ATOMIC_SWAP_ASSETS_BALANCE_UPDATES_SUBSCRIBE = 'btasabus', SWAP_SUBSCRIBE = 'ss', // Swap info updates ``` Example: ```ts import { services } from "@orionprotocol/sdk"; import { v4 as uuidv4 } from "uuid"; const swapRequestId = uuidv4(); orionUnit.orionAggregator.ws.subscribe( services.orionAggregator.ws.SubscriptionType.SWAP_SUBSCRIBE, { payload: { d: swapRequestId, // generated by client i: assetIn, // asset in o: assetOut, // asset out e: true, // true when type of swap is exactSpend, can be omitted (true by default) a: 5.62345343, // amount }, // Handle data update in your way callback: (swapInfo) => { switch (swapInfo.kind) { case "exactSpend": console.log(swapInfo.availableAmountOut); break; case "exactReceive": console.log(swapInfo.availableAmountOut); break; } }, } ); ```