# @rholabs/rho-sdk

> Rho Protocol SDK

Latest version **0.4.0-alpha11** (published 2024-12-09) · MIT license · 0 weekly downloads

## Install

```sh
npm install @rholabs/rho-sdk
pnpm add @rholabs/rho-sdk
yarn add @rholabs/rho-sdk
bun add @rholabs/rho-sdk
```

## Health

**Score 40/100 (D)** — status: maintenance-mode.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads; pre 1.0.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.4.0-alpha11 |
| Published | 2024-12-09 |
| First published | 2023-11-29 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 3 |
| Unpacked size | 5.5 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Artem Kolodko |
| Maintainers | kantefier, rotnes, artem-rholabs, gamzaliev, artemkolodko |
| Keywords | npm, javascript, typescript, esm, cjs, nodejs, commonjs, ecmascript, beginner, example, demonstration |

## Links

- npm: https://www.npmjs.com/package/@rholabs/rho-sdk
- npm.io page: https://npm.io/package/@rholabs/rho-sdk

## Dependencies (3)

- [axios](https://npm.io/package/axios.md) ^1.5.0
- [dotenv](https://npm.io/package/dotenv.md) ^16.3.1
- [ethers](https://npm.io/package/ethers.md) ^6.9.0

## Alternatives

- [@openai/codex-sdk](https://npm.io/package/@openai/codex-sdk.md) — 731.4K weekly downloads
- [babel-plugin-transform-react-jsx](https://npm.io/package/babel-plugin-transform-react-jsx.md) — 565.0K weekly downloads
- [babel-helper-remove-or-void](https://npm.io/package/babel-helper-remove-or-void.md) — 508.5K weekly downloads
- [@pnpm/store-controller-types](https://npm.io/package/@pnpm/store-controller-types.md) — 186.9K weekly downloads
- [react-native-signature-canvas](https://npm.io/package/react-native-signature-canvas.md) — 155.6K weekly downloads

## Recent versions

- 0.4.0-alpha11 (latest) — 2024-12-09
- 0.4.0-alpha10 — 2024-10-21
- 0.4.0-alpha9 — 2024-10-18
- 0.4.0-alpha8 — 2024-10-14
- 0.4.0-alpha7 — 2024-10-08
- 0.4.0-alpha5 — 2024-10-04
- 0.4.0-alpha4 — 2024-10-04
- 0.4.0-alpha3 — 2024-10-04
- 0.4.0-alpha2 — 2024-10-03
- 0.4.0-alpha1 — 2024-09-25
- 0.3.8 — 2024-08-08
- 0.3.7 — 2024-05-31
- 0.3.6 — 2024-05-23
- 0.3.5 — 2024-05-20
- 0.3.4 — 2024-05-16
- … 34 more at https://npm.io/package/@rholabs/rho-sdk/versions

## README

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

---
_Source: https://npm.io/package/@rholabs/rho-sdk · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
