rain-sdk-v2 1.2.1 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -14
- package/dist/Rain.d.ts +14 -1
- package/dist/Rain.js +6 -2
- package/dist/abi/CreateMarketAbi.d.ts +1190 -87
- package/dist/abi/CreateMarketAbi.js +2 -1
- package/dist/abi/MarketsAbi.d.ts +91 -1
- package/dist/abi/MarketsAbi.js +3 -1
- package/dist/config/environments.d.ts +10 -1
- package/dist/config/environments.js +24 -14
- package/dist/markets/getOptionClaimed.d.ts +7 -0
- package/dist/markets/getOptionClaimed.js +17 -0
- package/dist/tx/CreateMarket/buildCreateMarketRawTx.js +3 -3
- package/dist/tx/buildAddLiquidityRawTx.js +26 -3
- package/dist/tx/buildEnterOptionRawTx.js +21 -3
- package/dist/tx/buildRemoveLiquidityRawTx.d.ts +3 -1
- package/dist/tx/buildRemoveLiquidityRawTx.js +24 -4
- package/dist/tx/types.d.ts +12 -0
- package/dist/types.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ import { arbitrum } from 'viem/chains';
|
|
|
23
23
|
|
|
24
24
|
// Initialize SDK
|
|
25
25
|
const rain = new Rain({
|
|
26
|
-
environment: 'development', // 'development' | 'stage'
|
|
26
|
+
environment: 'development', // 'development' | 'stage' | 'production'
|
|
27
27
|
rpcUrl: 'https://arb1.arbitrum.io/rpc', // optional, uses random public RPC if omitted
|
|
28
28
|
});
|
|
29
29
|
|
|
@@ -56,7 +56,7 @@ const rain = new Rain(config?: RainCoreConfig);
|
|
|
56
56
|
|
|
57
57
|
| Parameter | Type | Default | Description |
|
|
58
58
|
|-----------|------|---------|-------------|
|
|
59
|
-
| `environment` | `'development' \| 'stage'` | `'development'` | Target environment |
|
|
59
|
+
| `environment` | `'development' \| 'stage' \| 'production'` | `'development'` | Target environment |
|
|
60
60
|
| `rpcUrl` | `string` | Random public RPC | Custom Arbitrum RPC URL |
|
|
61
61
|
| `apiUrl` | `string` | From environment | Custom API URL |
|
|
62
62
|
|
|
@@ -151,9 +151,10 @@ const txs = await rain.buildCreateMarketTx({
|
|
|
151
151
|
startTime: BigInt(Math.floor(Date.now() / 1000) + 120), // 2 min from now
|
|
152
152
|
endTime: BigInt(Math.floor(Date.now() / 1000) + 86400), // 24h from now
|
|
153
153
|
no_of_options: 2n,
|
|
154
|
-
disputeTimer:
|
|
154
|
+
disputeTimer: 259200, // oracle end time duration in seconds (e.g. 259200 = 3 days)
|
|
155
155
|
inputAmountWei: parseUnits('10', 6), // 10 USDT
|
|
156
156
|
barValues: [50, 50], // probability distribution (0-100, sums to 100)
|
|
157
|
+
initialYesPrices: [500000000000000000n, 500000000000000000n], // optional, 1e18 scale (50% = 5e17)
|
|
157
158
|
baseToken: config.tokens.usdt.address, // USDT
|
|
158
159
|
tradingModel: TradingModel.AMM, // AMM = 0, OrderBook = 1
|
|
159
160
|
marketImage: 'https://cdn.example.com/market-image.png',
|
|
@@ -183,7 +184,9 @@ const txsRain = await rain.buildCreateMarketTx({
|
|
|
183
184
|
| `endTime` | `bigint` | Unix timestamp (seconds) |
|
|
184
185
|
| `no_of_options` | `bigint` | Number of options |
|
|
185
186
|
| `inputAmountWei` | `bigint` | Initial liquidity in base token wei |
|
|
187
|
+
| `disputeTimer` | `number` | Oracle end time duration in seconds (e.g. 259200 = 3 days). Auto-set from environment config |
|
|
186
188
|
| `barValues` | `number[]` | Probability distribution (0-100 scale) |
|
|
189
|
+
| `initialYesPrices` | `bigint[]` | *(Optional)* Initial Yes prices per option in 1e18 scale (e.g. `500000000000000000n` = 50%). Defaults to 50% per option |
|
|
187
190
|
| `baseToken` | `0x${string}` | Base token address (USDT or RAIN) |
|
|
188
191
|
| `tradingModel` | `TradingModel` | `AMM (0)` or `OrderBook (1)` |
|
|
189
192
|
| `marketImage` | `string` | Market image URL (required) |
|
|
@@ -194,7 +197,7 @@ const txsRain = await rain.buildCreateMarketTx({
|
|
|
194
197
|
|
|
195
198
|
#### `buildEnterOptionTx(params): Promise<RawTransaction[]>`
|
|
196
199
|
|
|
197
|
-
Buy shares of an option (AMM trade). Automatically reads the market's base token, checks allowance,
|
|
200
|
+
Buy shares of an option (AMM trade). Automatically reads the market's base token, checks allowance, includes approval TX if needed, and calculates slippage protection via on-chain `getEntryShares`.
|
|
198
201
|
|
|
199
202
|
```typescript
|
|
200
203
|
const txs = await rain.buildEnterOptionTx({
|
|
@@ -203,6 +206,8 @@ const txs = await rain.buildEnterOptionTx({
|
|
|
203
206
|
optionSide: OptionSide.Yes, // Yes = 1, No = 2
|
|
204
207
|
buyAmountInWei: parseUnits('5', 6), // 5 USDT (or parseUnits('5', 18) for RAIN)
|
|
205
208
|
walletAddress: '0x...', // user's wallet address
|
|
209
|
+
slippageTolerance: 5n, // optional, default 5% — percentage tolerance for minSharesOut
|
|
210
|
+
deadline: 600n, // optional, default 600 (10 min) — duration in seconds
|
|
206
211
|
});
|
|
207
212
|
// Returns [approveTx?, enterOptionTx]
|
|
208
213
|
```
|
|
@@ -214,8 +219,11 @@ const txs = await rain.buildEnterOptionTx({
|
|
|
214
219
|
| `optionSide` | `OptionSide` | `Yes (1)` or `No (2)` |
|
|
215
220
|
| `buyAmountInWei` | `bigint` | Amount in base token wei |
|
|
216
221
|
| `walletAddress` | `0x${string}` | User's wallet address (for allowance check) |
|
|
222
|
+
| `minSharesOut` | `bigint` | *(Optional)* Minimum shares to receive. Auto-calculated from `getEntryShares` with slippage if not set |
|
|
223
|
+
| `slippageTolerance` | `bigint` | *(Optional)* Slippage percentage (e.g. `5n` = 5%). Default: 5% |
|
|
224
|
+
| `deadline` | `bigint` | *(Optional)* Duration in seconds (e.g. `600n` = 10 min). Default: 600 |
|
|
217
225
|
|
|
218
|
-
> **Note:** Approval is handled automatically. The SDK reads `baseToken` from the market contract and checks allowance before building transactions.
|
|
226
|
+
> **Note:** Approval is handled automatically. The SDK reads `baseToken` from the market contract and checks allowance before building transactions. Slippage protection is auto-calculated: the SDK calls `getEntryShares` on-chain to get expected shares, then applies the slippage tolerance.
|
|
219
227
|
|
|
220
228
|
---
|
|
221
229
|
|
|
@@ -257,7 +265,7 @@ const tx = rain.buildMergeTx({
|
|
|
257
265
|
|
|
258
266
|
#### `buildAddLiquidityTx(params): Promise<RawTransaction[]>`
|
|
259
267
|
|
|
260
|
-
Add liquidity to a specific option. Automatically checks allowance
|
|
268
|
+
Add liquidity to a specific option. Automatically checks allowance, includes approval TX if needed, and calculates slippage protection from on-chain AMM reserves.
|
|
261
269
|
|
|
262
270
|
```typescript
|
|
263
271
|
const txs = await rain.buildAddLiquidityTx({
|
|
@@ -265,15 +273,28 @@ const txs = await rain.buildAddLiquidityTx({
|
|
|
265
273
|
option: 1n,
|
|
266
274
|
totalAmountInWei: parseUnits('10', 6), // 10 USDT
|
|
267
275
|
walletAddress: '0x...', // user's wallet address
|
|
276
|
+
slippageTolerance: 5n, // optional, default 5%
|
|
277
|
+
deadline: 600n, // optional, default 600 (10 min) — duration in seconds
|
|
268
278
|
});
|
|
269
279
|
// Returns [approveTx?, addLiquidityTx]
|
|
270
280
|
```
|
|
271
281
|
|
|
272
|
-
|
|
282
|
+
| Parameter | Type | Description |
|
|
283
|
+
|-----------|------|-------------|
|
|
284
|
+
| `marketContractAddress` | `0x${string}` | Market contract address |
|
|
285
|
+
| `option` | `bigint` | Option index (1-based) |
|
|
286
|
+
| `totalAmountInWei` | `bigint` | Amount in base token wei |
|
|
287
|
+
| `walletAddress` | `0x${string}` | User's wallet address (for allowance check) |
|
|
288
|
+
| `minYesToDeposit` | `bigint` | *(Optional)* Min yes tokens to deposit. Auto-calculated from reserves if not set |
|
|
289
|
+
| `minNoToDeposit` | `bigint` | *(Optional)* Min no tokens to deposit. Auto-calculated from reserves if not set |
|
|
290
|
+
| `slippageTolerance` | `bigint` | *(Optional)* Slippage percentage (e.g. `5n` = 5%). Default: 5% |
|
|
291
|
+
| `deadline` | `bigint` | *(Optional)* Duration in seconds (e.g. `600n` = 10 min). Default: 600 |
|
|
273
292
|
|
|
274
|
-
|
|
293
|
+
> **Note:** Approval is handled automatically. Slippage protection is auto-calculated from `ammYesReserve`/`ammNoReserve` proportionally.
|
|
275
294
|
|
|
276
|
-
|
|
295
|
+
#### `buildRemoveLiquidityTx(params: RemoveLiquidityTxParams): Promise<RawTransaction>`
|
|
296
|
+
|
|
297
|
+
Remove liquidity by burning LP shares. Automatically calculates slippage protection via on-chain `getRemovedLiquidity`.
|
|
277
298
|
|
|
278
299
|
```typescript
|
|
279
300
|
const lpShares = await rain.getUserOptionLPShares({
|
|
@@ -282,13 +303,25 @@ const lpShares = await rain.getUserOptionLPShares({
|
|
|
282
303
|
userAddress: '0x...',
|
|
283
304
|
});
|
|
284
305
|
|
|
285
|
-
const tx = rain.buildRemoveLiquidityTx({
|
|
306
|
+
const tx = await rain.buildRemoveLiquidityTx({
|
|
286
307
|
marketContractAddress: '0x...',
|
|
287
308
|
option: 1n,
|
|
288
309
|
lpShares, // raw LP shares amount
|
|
310
|
+
slippageTolerance: 5n, // optional, default 5%
|
|
311
|
+
deadline: 600n, // optional, default 600 (10 min) — duration in seconds
|
|
289
312
|
});
|
|
290
313
|
```
|
|
291
314
|
|
|
315
|
+
| Parameter | Type | Description |
|
|
316
|
+
|-----------|------|-------------|
|
|
317
|
+
| `marketContractAddress` | `0x${string}` | Market contract address |
|
|
318
|
+
| `option` | `bigint` | Option index (1-based) |
|
|
319
|
+
| `lpShares` | `bigint` | LP shares to remove |
|
|
320
|
+
| `minYesOut` | `bigint` | *(Optional)* Min yes tokens to receive. Auto-calculated from `getRemovedLiquidity` if not set |
|
|
321
|
+
| `minNoOut` | `bigint` | *(Optional)* Min no tokens to receive. Auto-calculated if not set |
|
|
322
|
+
| `slippageTolerance` | `bigint` | *(Optional)* Slippage percentage (e.g. `5n` = 5%). Default: 5% |
|
|
323
|
+
| `deadline` | `bigint` | *(Optional)* Duration in seconds (e.g. `600n` = 10 min). Default: 600 |
|
|
324
|
+
|
|
292
325
|
---
|
|
293
326
|
|
|
294
327
|
### Order Book
|
|
@@ -484,6 +517,19 @@ const yesShares = await rain.getUserOptionShares({
|
|
|
484
517
|
});
|
|
485
518
|
```
|
|
486
519
|
|
|
520
|
+
### `getOptionClaimed(params): Promise<boolean>`
|
|
521
|
+
|
|
522
|
+
Check if a user has already claimed winnings for a specific option.
|
|
523
|
+
|
|
524
|
+
```typescript
|
|
525
|
+
const claimed = await rain.getOptionClaimed({
|
|
526
|
+
marketContractAddress: '0x...',
|
|
527
|
+
option: 1n,
|
|
528
|
+
userAddress: '0x...',
|
|
529
|
+
});
|
|
530
|
+
// true if already claimed, false otherwise
|
|
531
|
+
```
|
|
532
|
+
|
|
487
533
|
### `getDynamicPayout(params): Promise<bigint[]>`
|
|
488
534
|
|
|
489
535
|
Get the dynamic payout amounts for a user on a specific option. Returns an array of payout values per side.
|
|
@@ -659,8 +705,9 @@ enum OptionSide {
|
|
|
659
705
|
|
|
660
706
|
| Environment | API | Factory | USDT | RAIN |
|
|
661
707
|
|-------------|-----|---------|------|------|
|
|
662
|
-
| `development` | `https://dev2-api.rain.one` | `
|
|
663
|
-
| `stage` | `https://stg2-api.rain.one` | `
|
|
708
|
+
| `development` | `https://dev2-api.rain.one` | `0xbbDd...f02f` | 6 decimals | 18 decimals |
|
|
709
|
+
| `stage` | `https://stg2-api.rain.one` | `0x16cc...628d` | 6 decimals | 18 decimals |
|
|
710
|
+
| `production` | `https://prod2-api.rain.one` | `0x38B3...C677` | 6 decimals | 18 decimals |
|
|
664
711
|
|
|
665
712
|
### Supported Tokens
|
|
666
713
|
|
|
@@ -672,7 +719,7 @@ const config = rain.getEnvironmentConfig();
|
|
|
672
719
|
// USDT
|
|
673
720
|
config.tokens.usdt.address // Token contract address
|
|
674
721
|
config.tokens.usdt.decimals // 6
|
|
675
|
-
config.tokens.usdt.symbol // "USDTm" (dev) or "USD₮0" (stage)
|
|
722
|
+
config.tokens.usdt.symbol // "USDTm" (dev) or "USD₮0" (stage/production)
|
|
676
723
|
|
|
677
724
|
// RAIN
|
|
678
725
|
config.tokens.rain.address // Token contract address
|
|
@@ -692,7 +739,8 @@ config.tokens.rain.symbol // "RAIN"
|
|
|
692
739
|
5. Wait for endTime to pass
|
|
693
740
|
6. Close Pool (buildClosePoolAITx / buildClosePoolManualTx)
|
|
694
741
|
7. Calculate Winner (buildCalculateWinnerTx)
|
|
695
|
-
8.
|
|
742
|
+
8. Check if claimed (getOptionClaimed) — optional
|
|
743
|
+
9. Claim (buildClaimTx)
|
|
696
744
|
```
|
|
697
745
|
|
|
698
746
|
If disputed:
|
package/dist/Rain.d.ts
CHANGED
|
@@ -26,7 +26,7 @@ export declare class Rain {
|
|
|
26
26
|
buildAddLiquidityTx(params: AddLiquidityTxParams & {
|
|
27
27
|
walletAddress: `0x${string}`;
|
|
28
28
|
}): Promise<RawTransaction[]>;
|
|
29
|
-
buildRemoveLiquidityTx(params: RemoveLiquidityTxParams): RawTransaction
|
|
29
|
+
buildRemoveLiquidityTx(params: RemoveLiquidityTxParams): Promise<RawTransaction>;
|
|
30
30
|
getUserOptionLPShares(params: {
|
|
31
31
|
marketContractAddress: `0x${string}`;
|
|
32
32
|
option: bigint;
|
|
@@ -44,6 +44,11 @@ export declare class Rain {
|
|
|
44
44
|
optionSide: number;
|
|
45
45
|
userAddress: `0x${string}`;
|
|
46
46
|
}): Promise<bigint>;
|
|
47
|
+
getOptionClaimed(params: {
|
|
48
|
+
marketContractAddress: `0x${string}`;
|
|
49
|
+
option: bigint;
|
|
50
|
+
userAddress: `0x${string}`;
|
|
51
|
+
}): Promise<boolean>;
|
|
47
52
|
getDynamicPayout(params: {
|
|
48
53
|
marketContractAddress: `0x${string}`;
|
|
49
54
|
userAddress: `0x${string}`;
|
|
@@ -127,6 +132,14 @@ export declare class Rain {
|
|
|
127
132
|
readonly usdt: import("./config/environments.js").TokenConfig;
|
|
128
133
|
readonly rain: import("./config/environments.js").TokenConfig;
|
|
129
134
|
};
|
|
135
|
+
} | {
|
|
136
|
+
readonly apiUrl: "https://prod2-api.rain.one";
|
|
137
|
+
readonly market_factory_address: `0x${string}`;
|
|
138
|
+
readonly dispute_initial_timer: number;
|
|
139
|
+
readonly tokens: {
|
|
140
|
+
readonly usdt: import("./config/environments.js").TokenConfig;
|
|
141
|
+
readonly rain: import("./config/environments.js").TokenConfig;
|
|
142
|
+
};
|
|
130
143
|
};
|
|
131
144
|
private cfg;
|
|
132
145
|
findUserByWalletAddress(params: {
|
package/dist/Rain.js
CHANGED
|
@@ -18,6 +18,7 @@ import { getUserOptionLPShares } from './markets/getUserOptionLPShares.js';
|
|
|
18
18
|
import { getUserOptionShares } from './markets/getUserOptionShares.js';
|
|
19
19
|
import { getDynamicPayout } from './markets/getDynamicPayout.js';
|
|
20
20
|
import { getUserSharesInEscrow } from './markets/getUserSharesInEscrow.js';
|
|
21
|
+
import { getOptionClaimed } from './markets/getOptionClaimed.js';
|
|
21
22
|
import { createPublicClient, http, parseAbi } from 'viem';
|
|
22
23
|
import { arbitrum } from 'viem/chains';
|
|
23
24
|
import * as usersApi from './api/users.js';
|
|
@@ -106,8 +107,8 @@ export class Rain {
|
|
|
106
107
|
async buildAddLiquidityTx(params) {
|
|
107
108
|
return buildAddLiquidityRawTx({ ...params, rpcUrl: this.rpcUrl });
|
|
108
109
|
}
|
|
109
|
-
buildRemoveLiquidityTx(params) {
|
|
110
|
-
return buildRemoveLiquidityRawTx(params);
|
|
110
|
+
async buildRemoveLiquidityTx(params) {
|
|
111
|
+
return buildRemoveLiquidityRawTx({ ...params, rpcUrl: this.rpcUrl });
|
|
111
112
|
}
|
|
112
113
|
async getUserOptionLPShares(params) {
|
|
113
114
|
return getUserOptionLPShares({ ...params, rpcUrl: this.rpcUrl });
|
|
@@ -118,6 +119,9 @@ export class Rain {
|
|
|
118
119
|
async getUserSharesInEscrow(params) {
|
|
119
120
|
return getUserSharesInEscrow({ ...params, rpcUrl: this.rpcUrl });
|
|
120
121
|
}
|
|
122
|
+
async getOptionClaimed(params) {
|
|
123
|
+
return getOptionClaimed({ ...params, rpcUrl: this.rpcUrl });
|
|
124
|
+
}
|
|
121
125
|
async getDynamicPayout(params) {
|
|
122
126
|
return getDynamicPayout({ ...params, rpcUrl: this.rpcUrl });
|
|
123
127
|
}
|