Attention! For the correct work of the SDK, you need to update the package to the latest version and follow updated instructions below.
npm install @orionprotocol/orion-trading-sdk
getWalletBalance(ticker)
Parameter | Type | Required | Description |
---|---|---|---|
ticker | string | no | empty ticker field return balance for all tokens |
@return token balance on wallet (uint)
createOrder({...params})
Parameter | Type | Required | Description |
---|---|---|---|
fromCurrency | string | yes | token symbol |
toCurrency | string | yes | token symbol |
side | string | yes | 'buy' or 'sell' |
price | number | yes | any number |
amount | number | yes | any number |
priceDeviation | number | yes | it's percents, 0 < priceDeviation < 50 |
needWithdraw | boolean | no | false by default, feature in process |
chainPrices | object | no |
chainPrices is optional (use it if you already knew prices):
Parameter | Type | Required | Description |
---|---|---|---|
gasWei | string | yes | gas price in wei |
baseAsset | string/number | yes | aka 'fromCurrency' |
networkAsset | string/number | yes | |
feeAsset | string/number | yes |
@return prepared and signed order
sendOrder(order, isCreateInternalOrder)
Parameter | Type | Required | Description |
---|---|---|---|
order | object | yes | Order object from createOrder() |
isCreateInternalOrder | boolean | no | Execution only in the internal order book; false by default |
@return orderId
cancelOrder(orderId)
Parameter | Type | Required | Description |
---|---|---|---|
orderId | string | yes |
@return orderId of cancelled order
getOrderById(orderId, owner)
Parameter | Type | Required | Description |
---|---|---|---|
orderId | string | yes | |
owner | string | no | by default owner address is a current wallet address |
@return order with requested id
getTradeHistory({...options})
Parameter | Type | Required | Description |
---|---|---|---|
baseAsset | string | no | token address |
quoteAsset | string | no | token address |
startTime | number | no | |
endTime | number | no | |
limit | number | no | default 1000 |
@return list of orders
getContractBalance(ticker)
Parameter | Type | Required | Description |
---|---|---|---|
ticker | string | no | empty ticker field return balance for all tokens |
@return token balance on smart contract (bignumber)
deposit(token, amount)
Parameter | Type | Required | Description |
---|---|---|---|
token | string | yes | |
amount | string | yes |
@return transaction hash
withdraw(token, amount)
Parameter | Type | Required | Description |
---|---|---|---|
token | string | yes | |
amount | string | yes |
@return transaction hash
priceFeedAll()
- no params
@return subscriber for all tickers price feed
priceFeedTicker(ticker)
Parameter | Type | Required | Description |
---|---|---|---|
ticker | string | yes |
@return subscriber for specific ticker price feed
orderBooks(pair)
Parameter | Type | Required | Description |
---|---|---|---|
pair | string | yes |
@return subscriber for orderbooks
Important note! you should always wrap your async functions in a try-catch block, so you could handle errors in a right way.
try {
// place here your async functions
/* Example
const chain = new Chain(privateKey, networkParams)
await chain.init() // get blockchain info
*/
} catch(error) {
// handle errors
}
First step: Create base Chain instance
import { Chain, Constants } from '@orionprotocol/orion-trading-sdk'
// Set params for Chain constructor
const privateKey = 'your_private_key'
// in Constants.NETWORK you should choose mode (MAIN | TEST) and then chain (BSC | ETH)
const networkParams = Constants.NETWORK.TEST.BSC
// By default networkParams is NETWORK.TEST.BSC
try {
const chain = new Chain(privateKey, networkParams)
await chain.init() // get blockchain info
} catch (error) {
// handle error
}
In examples below we hide try-catch blocks, because they are wrappers. But you should always use them.
Now you ready to go.
(previous steps are required)
Get wallet balance:
const walletBalance = await chain.getWalletBalance('ORN') // by ticker
const walletBalanceSummary = await chain.getWalletBalance() // summary
/*
Example:
{ ORN: '13890000000000' } // uint
*/
For further operations, network tokens are required to pay for transactions, as well as tokens for deposit / withdrawal / exchange.
Deposit token:
import { Exchange } from '@orionprotocol/orion-trading-sdk'
const exchange = new Exchange(chain)
const deposit = await exchange.deposit('ORN', '10')
// Should return transaction object
Get smart contract balance:
const contractBalance = await exchange.getContractBalance('ORN') // by ticker
const contractBalanceSummary = await exchange.getContractBalance() // summary
/*
Example:
{
ORN: {
total: [BigNumber],
locked: [BigNumber],
available: [BigNumber]
}
}
*/
Withdraw token:
const withdraw = await exchange.withdraw('ORN', '10')
// Should return transaction object
Creating, sending, canceling orders and getting info
import { OrionAggregator } from '@orionprotocol/orion-trading-sdk'
orionAggregator = new OrionAggregator(chain)
// There is no need to call deprecated method orionAggregator.init() now,
// module is ready to use. But this method is left for backward compatibility.
Create, sign and send order to OrionAggregator:
// create order
const order = {
fromCurrency: 'ORN',
toCurrency: 'DAI',
feeCurrency: 'ORN', // available fee tokens you can find in chain.tokensFee
side: 'sell', // 'buy' or 'sell'
price: 12,
amount: 10,
priceDeviation: 1, // it's percents: 0 < priceDeviation < 50
// 'chainPrices' is optional, use it when prices are already known
// to increase request speed
chainPrices: {
networkAsset: 57, // // 'networkAsset' price against ORN
baseAsset: 1, // 'fromCurrency' price against ORN
feeAsset: 1, // 'feeCurrency' price against ORN
gasWei: '10000000000'
}
}
// create and sign order
const signedOrder = await orionAggregator.createOrder(order)
// send order
const sentOrderResponse = await orionAggregator.sendOrder(signedOrder)
// Should return order id if successful
Cancel order:
const orderCancelation = await orionAggregator.cancelOrder(sentOrderResponse.orderId)
// Should return order id if cancelation is successful
Get orders history/status:
// getTradeHistory returns list of orders
const history = await orionAggregator.getTradeHistory()
// getOrderById returns order object
const order = await orionAggregator.getOrderById(sentOrderResponse.orderId)
// const status = order.status
Create WS instance:
import { WS, Constants } from '@orionprotocol/orion-trading-sdk'
// Create ws instance
// in Constants.ORION_WS you should choose mode (MAIN | TEST) and then chain (BSC | ETH)
const wsUrl = Constants.ORION_WS.TEST.BSC
// wsUrl by default is ORION_WS.TEST.BSC
const ws = new WS(wsUrl)
// There is no need to call deprecated method ws.init() now,
// module is ready to use. But this method is left for backward compatibility.
To subscribe to the price feed:
// Subscribe for all tickers
const subscriberForAll = ws.priceFeedAll()
// Subscribe for specified ticker
const subscriberForTicker = ws.priceFeedTicker('ORN-USDT')
subscriberForAll.on('message', (message) => {
// do something with message data
});
subscriberForTicker.on('message', (message) => {
// do something with message data
});
// Unsubscribe
subscriberForAll.close()
subscriberForTicker.close()
To subscribe to the orderbooks:
// Subscribe for orderbooks
const subscriberForOrderbooks = ws.orderBooks('ORN-USDT')
subscriberForOrderbooks.on('message', (message) => {
// do something with message data
});
// Unsubscribe
subscriberForOrderbooks.close()
To run the tests, follow these steps. You must have at least node v10 installed.
Clone repository
git clone https://github.com/orionprotocol/trading-sdk
Move into the trading-sdk working directory
cd trading-sdk/
Install dependencies
npm install
Run tests
npm run test
You should see output with all test passed