UNPKG

@rholabs/rho-sdk

Version:

Rho Protocol SDK

313 lines (211 loc) 5.47 kB
# Rho Protocol SDK ## Installation ```shell npm install @rholabs/rho-sdk ``` ## Getting Started Create Rho SDK with testnet configuration: ```shell import RhoSDK from '@rholabs/rho-sdk'; const rhoSDK = new RhoSDK({ network: 'testnet' }); ``` **RhoSDKParams**: `Object` (optional) ```typescript export type RhoSDKNetwork = 'mainnet' | 'testnet' | 'custom' export interface RhoSDKParams { network?: RhoSDKNetwork routerAddress?: string viewAddress?: string quoterAddress?: string rpcUrl?: string oracleServiceUrl?: string privateKey?: string provider?: JsonRpcProvider | BrowserProvider signer?: JsonRpcSigner } ``` ## API Reference ```shell getActiveMarketIds(offset, limit) ``` Get active market ids **Parameters** 1. `offset` - `Number` (optional) 2. `limit` - `Number` (optional) **Returns** `String[]` --- ```shell getActiveMarkets({ oraclePackages, offset, limit }) ``` Get active markets **Parameters** 1. `oraclePackages` - `OraclePackages[]` (optional) 2. `offset` - `Number` (optional) 3. `limit` - `Number` (optional) **Returns** `MarketInfo[]` --- ```shell getPortfolio({ userAddress, oraclePackages, offset, limit }) ``` Get user portfolio **Parameters** 1. `userAddress` - `String` 2. `oraclePackages` - `OraclePackages[]` (optional) 3. `offset` - `Number` (optional) 4. `limit` - `Number` (optional) **Returns** `MarketPortfolio[]` --- ```shell getTradeQuote({ marketId, futureId, notional, userAddress, oraclePackages? }) ``` Get trade quote **Parameters** 1. `marketId` - `String` 2. `futureId` - `String` 3. `notional` - `BigInt` 4. `userAddress` - `String` 5. `oraclePackages` - `OraclePackages[]` (optional) **Returns** `TradeQuote` --- ```shell getLiquidityProvisionQuote({ marketId, futureId, notional, operation, lowerBound, upperBound, userAddress, oraclePackages? }) ``` Get liquidity provision quote **Parameters** 1. `marketId` - `String` 2. `futureId` - `String` 3. `notional` - `BigInt` 4. `operation` - `LiquidityOperation` 5. `lowerBound` - `String` 6. `upperBound` - `String` 7. `userAddress` - `String` 8. `oraclePackages` - `OraclePackages[]` (optional) **Returns** `LiquidityQuote` --- ```shell executeTrade({ marketId, futureId, notional, riskDirection, futureRateLimit, collateral, deadlineTimestamp, settleMaturedPositions?, oraclePackages? }) ``` Execute trade **Parameters** 1. `marketId` - `String` 2. `futureId` - `String` 3. `notional` - `BigInt` 4. `riskDirection` - `RiskDirection` 5. `futureRateLimit` - `BigInt` 6. `collateral` - `BigInt` 7. `deadline` - `Number` (optional, Date.now() + 5 _ 60 _ 1000) 8. `settleMaturedPositions` - `Boolean` (optional, true) 9. `oraclePackages` - `OraclePackages[]` (optional) **Returns** `TransactionReceipt` --- ```shell deposit({ marketId, recipientAddress, amount, settleMaturedPositions?, oraclePackages? }) ``` Deposit **Parameters** 1. `marketId` - `String` 2. `recipientAddress` - `String` 3. `amount` - `BigInt` 4. `settleMaturedPositions` - `Boolean` (optional) 5. `oraclePackages` - `OraclePackages[]` (optional) **Returns** `TransactionReceipt` --- ```shell withdraw({ marketId, amount, settleMaturedPositions?, oraclePackages? }) ``` Withdraw **Parameters** 1. `marketId` - `String` 2. `amount` - `BigInt` 3. `settleMaturedPositions` - `Boolean` (optional, true) 4. `oraclePackages` - `OraclePackages[]` (optional) **Returns** `TransactionReceipt` --- ```shell provideLiquidity({ marketId, futureId, notional, collateral, lowerBound, upperBound, deadlineTimestamp?, settleMaturedPositions?, oraclePackages? }) ``` Provide liquidity **Parameters** 1. `marketId` - `String` 2. `futureId` - `String` 3. `notional` - `BigInt` 4. `collateral` - `BigInt` 5. `lowerBound` - `String` 6. `upperBound` - `String` 7. `deadline` - `Number` (optional, Date.now() + 5 _ 60 _ 1000) 8. `settleMaturedPositions` - `Boolean` (optional, true) 9. `oraclePackages` - `OraclePackages[]` (optional) **Returns** `TransactionReceipt` --- ```shell removeLiquidity({ marketId, futureId, notional, collateral, lowerBound, upperBound, deadlineTimestamp?, settleMaturedPositions?, oraclePackages? }) ``` Remove liquidity **Parameters** 1. `marketId` - `String` 2. `futureId` - `String` 3. `notional` - `BigInt` 4. `collateral` - `BigInt` 5. `lowerBound` - `String` 6. `upperBound` - `String` 7. `deadline` - `Number` 8. `settleMaturedPositions` - `Boolean` (optional, Date.now() + 5 _ 60 _ 1000) 9. `oraclePackages` - `OraclePackages[]` (optional) **Returns** `TransactionReceipt` --- ## Using in browser / Node.Js ### Basic configuration (read only) ```shell import RhoSDK from '@rholabs/rho-sdk'; const rhoSDK = new RhoSDK({ network: 'testnet' }) ``` ### Node.JS ```shell import RhoSDK from '@rholabs/rho-sdk'; const rhoSDK = new RhoSDK({ network: 'testnet', privateKey: '<PRIVATE_KEY>' }) ``` ### Using with Metamask ``` if (window.ethereum) { const provider = new ethers.BrowserProvider(window.ethereum) await provider.send("eth_requestAccounts", []) const signer = await provider.getSigner() const sdk = new RhoSDK({ network: 'testnet', signer }) const markets = await sdk.getActiveMarkets() } ``` ### Testing Create `.env` file: ``` TEST_PRIVATE_KEY=12345 ``` and run the tests: ``` yarn test ``` ### Publishing ``` npm login ``` 1. Bump version in package.json 2. Build package ``` yarn build ``` 3. Publish ``` npm publish --access public ```