@rholabs/rho-sdk
Version:
Rho Protocol SDK
313 lines (211 loc) • 5.47 kB
Markdown
# 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
```