npm package: @rholabs/rho-sdk
Description: Rho Protocol SDK
Author: Artem Kolodko
Latest version: 0.4.0-alpha11

# 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
```