jaspervault_cli 1.0.23 → 1.0.25
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 +12 -4
- package/dist/src/commands/deposit.d.ts +4 -4
- package/dist/src/commands/deposit.js +134 -121
- package/dist/src/commands/deposit.js.map +1 -1
- package/dist/src/commands/order.js +20 -34
- package/dist/src/commands/order.js.map +1 -1
- package/dist/src/services/order-signer.d.ts +15 -0
- package/dist/src/services/order-signer.js +79 -0
- package/dist/src/services/order-signer.js.map +1 -1
- package/dist/src/services/quote-center.d.ts +33 -0
- package/dist/src/services/quote-center.js +79 -0
- package/dist/src/services/quote-center.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# JasperVault CLI
|
|
1
|
+
# JasperVault CLI
|
|
2
2
|
|
|
3
3
|
Trade perpetuals on JasperVault through AI conversation. Install this CLI and connect your AI assistant (OpenClaw, Cursor, Claude Code) — then just talk to place orders, set take-profits, and manage positions without touching the command line.
|
|
4
4
|
|
|
@@ -85,9 +85,9 @@ All configuration is done via environment variables. For most users, **no config
|
|
|
85
85
|
| `JV_JASPERVAULT_RPC_URL` | No | JasperVault chain RPC URL override | built-in |
|
|
86
86
|
| `JV_SUBGRAPH_URL` | No | Subgraph endpoint override | built-in per network |
|
|
87
87
|
| `WC_PROJECT_ID` | No | WalletConnect Cloud project ID (get one at [cloud.reown.com](https://cloud.reown.com)) | — |
|
|
88
|
-
| `PRIVATE_KEY` | No* | EOA wallet private key;
|
|
88
|
+
| `PRIVATE_KEY` | No* | EOA wallet private key; when set, `deposit` and `vault init` execute directly without WalletConnect | — |
|
|
89
89
|
|
|
90
|
-
\* Not required when using the WalletConnect flow (`vault setup`, `deposit
|
|
90
|
+
\* Not required when using the WalletConnect flow (`vault setup`, `deposit`).
|
|
91
91
|
|
|
92
92
|
### Connecting to a Different Environment
|
|
93
93
|
|
|
@@ -111,7 +111,15 @@ To deposit tokens from Base to JasperVault, tell OpenClaw:
|
|
|
111
111
|
|
|
112
112
|
> **"Deposit 100 JUSDC into my vault"**
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
Or run it directly:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
jv deposit --token jusdc --amount 100 --pretty
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
The CLI auto-detects how to sign:
|
|
121
|
+
- **`PRIVATE_KEY` set** → signs and sends the transaction directly
|
|
122
|
+
- **No `PRIVATE_KEY`** → displays a WalletConnect QR code; scan with your mobile wallet to approve on your phone
|
|
115
123
|
|
|
116
124
|
---
|
|
117
125
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
import {
|
|
2
|
+
import type { Provider } from 'ethers';
|
|
3
3
|
import type { WarpTokenConfig } from '../services/chain-config.js';
|
|
4
4
|
export interface UnsignedTx {
|
|
5
5
|
to: string;
|
|
@@ -26,7 +26,7 @@ export interface DepositTxInfo {
|
|
|
26
26
|
/**
|
|
27
27
|
* Compute vault address from vault factory (read-only).
|
|
28
28
|
*/
|
|
29
|
-
export declare function computeVaultAddress(provider:
|
|
29
|
+
export declare function computeVaultAddress(provider: Provider, vaultFactoryAddress: string, ownerAddress: string, vaultIndex: number): Promise<string>;
|
|
30
30
|
/**
|
|
31
31
|
* Build approve tx calldata for ERC20.
|
|
32
32
|
*/
|
|
@@ -42,7 +42,7 @@ export declare function buildDepositTransactions(warpConfig: WarpTokenConfig, re
|
|
|
42
42
|
/**
|
|
43
43
|
* Check balances and allowance for deposit (read-only).
|
|
44
44
|
*/
|
|
45
|
-
export declare function checkDepositBalances(baseProvider:
|
|
45
|
+
export declare function checkDepositBalances(baseProvider: Provider, walletAddress: string, warpConfig: WarpTokenConfig, amountWei: bigint): Promise<{
|
|
46
46
|
underlyingBalance: bigint;
|
|
47
47
|
warpBalance: bigint;
|
|
48
48
|
allowance: bigint;
|
|
@@ -52,7 +52,7 @@ export declare function checkDepositBalances(baseProvider: ethers.Provider, wall
|
|
|
52
52
|
/**
|
|
53
53
|
* Poll for token arrival on JasperVault chain.
|
|
54
54
|
*/
|
|
55
|
-
export declare function pollForDepositArrival(jaspervaultProvider:
|
|
55
|
+
export declare function pollForDepositArrival(jaspervaultProvider: Provider, destWarpRouterAddress: string, recipient: string, initialBalance: bigint, timeoutMs?: number): Promise<{
|
|
56
56
|
arrived: boolean;
|
|
57
57
|
arrivalTimeMs?: number;
|
|
58
58
|
}>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Contract, Interface, JsonRpcProvider, MaxUint256, Wallet, parseUnits, zeroPadValue, } from 'ethers';
|
|
2
2
|
import { printJson, exitWithError, EXIT_CODES } from '../utils/output.js';
|
|
3
3
|
import { getWarpConfig, getBaseRpcUrl, getJaspervaultRpcUrl, getNetworkConfig, } from '../services/chain-config.js';
|
|
4
|
+
import { initWcAndConnect, startHeartbeat } from './connect.js';
|
|
4
5
|
const ERC20_ABI = [
|
|
5
6
|
'function balanceOf(address account) external view returns (uint256)',
|
|
6
7
|
'function allowance(address owner, address spender) external view returns (uint256)',
|
|
@@ -22,7 +23,7 @@ const POLL_INTERVAL_MS = 1000;
|
|
|
22
23
|
* Compute vault address from vault factory (read-only).
|
|
23
24
|
*/
|
|
24
25
|
export async function computeVaultAddress(provider, vaultFactoryAddress, ownerAddress, vaultIndex) {
|
|
25
|
-
const iface = new
|
|
26
|
+
const iface = new Interface(VAULT_FACTORY_ABI);
|
|
26
27
|
const data = iface.encodeFunctionData('getAddress', [ownerAddress, BigInt(vaultIndex)]);
|
|
27
28
|
const result = await provider.call({ to: vaultFactoryAddress, data });
|
|
28
29
|
const decoded = iface.decodeFunctionResult('getAddress', result);
|
|
@@ -32,15 +33,15 @@ export async function computeVaultAddress(provider, vaultFactoryAddress, ownerAd
|
|
|
32
33
|
* Build approve tx calldata for ERC20.
|
|
33
34
|
*/
|
|
34
35
|
export function buildApproveCalldata(spender, amountWei) {
|
|
35
|
-
const iface = new
|
|
36
|
+
const iface = new Interface(ERC20_ABI);
|
|
36
37
|
return iface.encodeFunctionData('approve', [spender, amountWei]);
|
|
37
38
|
}
|
|
38
39
|
/**
|
|
39
40
|
* Build transferRemote tx calldata for Hyperlane Warp.
|
|
40
41
|
*/
|
|
41
42
|
export function buildTransferRemoteCalldata(destinationDomain, recipient, amountWei) {
|
|
42
|
-
const iface = new
|
|
43
|
-
const recipientBytes32 =
|
|
43
|
+
const iface = new Interface(HYP_ERC20_ABI);
|
|
44
|
+
const recipientBytes32 = zeroPadValue(recipient, 32);
|
|
44
45
|
return iface.encodeFunctionData('transferRemote', [
|
|
45
46
|
destinationDomain,
|
|
46
47
|
recipientBytes32,
|
|
@@ -60,7 +61,7 @@ export function buildDepositTransactions(warpConfig, recipient, amountWei, needs
|
|
|
60
61
|
required: true,
|
|
61
62
|
tx: {
|
|
62
63
|
to: warpConfig.base.underlyingToken,
|
|
63
|
-
data: buildApproveCalldata(warpConfig.base.warpRouter,
|
|
64
|
+
data: buildApproveCalldata(warpConfig.base.warpRouter, MaxUint256),
|
|
64
65
|
value: '0x0',
|
|
65
66
|
chainId: chainIdHex,
|
|
66
67
|
},
|
|
@@ -83,8 +84,8 @@ export function buildDepositTransactions(warpConfig, recipient, amountWei, needs
|
|
|
83
84
|
* Check balances and allowance for deposit (read-only).
|
|
84
85
|
*/
|
|
85
86
|
export async function checkDepositBalances(baseProvider, walletAddress, warpConfig, amountWei) {
|
|
86
|
-
const underlyingToken = new
|
|
87
|
-
const warpRouter = new
|
|
87
|
+
const underlyingToken = new Contract(warpConfig.base.underlyingToken, ERC20_ABI, baseProvider);
|
|
88
|
+
const warpRouter = new Contract(warpConfig.base.warpRouter, HYP_ERC20_ABI, baseProvider);
|
|
88
89
|
const [underlyingBalance, warpBalance, allowance] = await Promise.all([
|
|
89
90
|
underlyingToken.balanceOf(walletAddress),
|
|
90
91
|
warpRouter.balanceOf(walletAddress),
|
|
@@ -98,7 +99,7 @@ export async function checkDepositBalances(baseProvider, walletAddress, warpConf
|
|
|
98
99
|
* Poll for token arrival on JasperVault chain.
|
|
99
100
|
*/
|
|
100
101
|
export async function pollForDepositArrival(jaspervaultProvider, destWarpRouterAddress, recipient, initialBalance, timeoutMs = POLL_TIMEOUT_MS) {
|
|
101
|
-
const destWarpRouter = new
|
|
102
|
+
const destWarpRouter = new Contract(destWarpRouterAddress, ERC20_ABI, jaspervaultProvider);
|
|
102
103
|
const pollStart = Date.now();
|
|
103
104
|
while (Date.now() - pollStart < timeoutMs) {
|
|
104
105
|
try {
|
|
@@ -114,148 +115,160 @@ export async function pollForDepositArrival(jaspervaultProvider, destWarpRouterA
|
|
|
114
115
|
}
|
|
115
116
|
return { arrived: false };
|
|
116
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Send a transaction via WalletConnect and wait for on-chain confirmation.
|
|
120
|
+
*/
|
|
121
|
+
async function sendWcTransaction(client, session, walletAddress, to, data, baseProvider, phase, heartbeatMsg) {
|
|
122
|
+
const heartbeat = startHeartbeat(phase, heartbeatMsg);
|
|
123
|
+
let txHash;
|
|
124
|
+
try {
|
|
125
|
+
txHash = (await client.request({
|
|
126
|
+
topic: session.topic,
|
|
127
|
+
chainId: `eip155:${BASE_CHAIN_ID}`,
|
|
128
|
+
request: {
|
|
129
|
+
method: 'eth_sendTransaction',
|
|
130
|
+
params: [{
|
|
131
|
+
from: walletAddress,
|
|
132
|
+
to,
|
|
133
|
+
data,
|
|
134
|
+
value: '0x0',
|
|
135
|
+
}],
|
|
136
|
+
},
|
|
137
|
+
}));
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
heartbeat.stop();
|
|
141
|
+
throw new Error(`Transaction rejected or failed: ${err.message}`);
|
|
142
|
+
}
|
|
143
|
+
heartbeat.stop();
|
|
144
|
+
await baseProvider.waitForTransaction(txHash, 1);
|
|
145
|
+
return txHash;
|
|
146
|
+
}
|
|
117
147
|
export function registerDepositCommand(program) {
|
|
118
|
-
|
|
148
|
+
program
|
|
119
149
|
.command('deposit')
|
|
120
|
-
.description('Deposit tokens
|
|
121
|
-
deposit
|
|
122
|
-
.command('info')
|
|
123
|
-
.description('Output unsigned tx data for WalletConnect (approve + transferRemote)')
|
|
124
|
-
.requiredOption('--wallet <address>', 'User EOA wallet address (from WalletConnect)')
|
|
150
|
+
.description('Deposit tokens from Base to JasperVault (auto-detects PRIVATE_KEY or WalletConnect)')
|
|
125
151
|
.requiredOption('--token <symbol>', 'Token: jbtc | jusdc | cbbtc | usdc')
|
|
126
|
-
.requiredOption('--amount <value>', 'Amount in human-readable units, e.g. "
|
|
127
|
-
.option('--network <name>', 'Network for vault address computation', 'jaspervault')
|
|
128
|
-
.option('--vault-index <n>', 'Vault index for computing recipient', '1')
|
|
129
|
-
.option('--pretty', 'Pretty-print JSON output')
|
|
130
|
-
.action(async (opts) => {
|
|
131
|
-
const walletAddress = ethers.getAddress(opts.wallet);
|
|
132
|
-
const warpConfig = getWarpConfig(opts.token);
|
|
133
|
-
const baseRpc = getBaseRpcUrl();
|
|
134
|
-
const jaspervaultRpc = getJaspervaultRpcUrl();
|
|
135
|
-
const net = getNetworkConfig(opts.network);
|
|
136
|
-
const baseProvider = new ethers.JsonRpcProvider(baseRpc);
|
|
137
|
-
const jaspervaultProvider = new ethers.JsonRpcProvider(jaspervaultRpc);
|
|
138
|
-
const vaultIndex = parseInt(opts.vaultIndex, 10);
|
|
139
|
-
const recipient = await computeVaultAddress(jaspervaultProvider, net.contracts.vaultFactory, walletAddress, vaultIndex);
|
|
140
|
-
const amountWei = ethers.parseUnits(opts.amount, warpConfig.decimals);
|
|
141
|
-
const { hasEnough, needsApprove } = await checkDepositBalances(baseProvider, walletAddress, warpConfig, amountWei);
|
|
142
|
-
if (!hasEnough) {
|
|
143
|
-
exitWithError(`Insufficient balance. Required: ${opts.amount} ${warpConfig.symbol}`, EXIT_CODES.BUSINESS_ERROR);
|
|
144
|
-
}
|
|
145
|
-
const transactions = buildDepositTransactions(warpConfig, recipient, amountWei, needsApprove);
|
|
146
|
-
const result = {
|
|
147
|
-
success: true,
|
|
148
|
-
recipient,
|
|
149
|
-
token: warpConfig.symbol,
|
|
150
|
-
amount: opts.amount,
|
|
151
|
-
amountWei: amountWei.toString(),
|
|
152
|
-
transactions,
|
|
153
|
-
polling: {
|
|
154
|
-
description: 'After tx confirms, check arrival on JasperVault',
|
|
155
|
-
command: `jv deposit poll --recipient ${recipient} --token ${opts.token} --network ${opts.network}`,
|
|
156
|
-
},
|
|
157
|
-
};
|
|
158
|
-
printJson(result, opts.pretty);
|
|
159
|
-
});
|
|
160
|
-
deposit
|
|
161
|
-
.command('poll')
|
|
162
|
-
.description('Poll for token arrival on JasperVault chain')
|
|
163
|
-
.requiredOption('--recipient <address>', 'Vault address (recipient)')
|
|
164
|
-
.requiredOption('--token <symbol>', 'Token: jbtc | jusdc | cbbtc | usdc')
|
|
165
|
-
.option('--timeout <seconds>', 'Poll timeout in seconds', '60')
|
|
166
|
-
.option('--network <name>', 'Network (for dest warp router)', 'jaspervault')
|
|
167
|
-
.option('--pretty', 'Pretty-print JSON output')
|
|
168
|
-
.action(async (opts) => {
|
|
169
|
-
const warpConfig = getWarpConfig(opts.token);
|
|
170
|
-
const jaspervaultRpc = getJaspervaultRpcUrl();
|
|
171
|
-
const jaspervaultProvider = new ethers.JsonRpcProvider(jaspervaultRpc);
|
|
172
|
-
const destWarpRouter = new ethers.Contract(warpConfig.jaspervault.warpRouter, ERC20_ABI, jaspervaultProvider);
|
|
173
|
-
let initialBalance = 0n;
|
|
174
|
-
try {
|
|
175
|
-
initialBalance = await destWarpRouter.balanceOf(opts.recipient);
|
|
176
|
-
}
|
|
177
|
-
catch {
|
|
178
|
-
// ignore
|
|
179
|
-
}
|
|
180
|
-
const timeoutMs = parseInt(opts.timeout, 10) * 1000;
|
|
181
|
-
const { arrived, arrivalTimeMs } = await pollForDepositArrival(jaspervaultProvider, warpConfig.jaspervault.warpRouter, opts.recipient, initialBalance, timeoutMs);
|
|
182
|
-
const result = {
|
|
183
|
-
success: true,
|
|
184
|
-
arrived,
|
|
185
|
-
arrivalTimeMs: arrived ? arrivalTimeMs : undefined,
|
|
186
|
-
message: arrived
|
|
187
|
-
? `Tokens arrived on JasperVault in ${arrivalTimeMs}ms`
|
|
188
|
-
: 'Timeout; tokens may still be in transit to JasperVault',
|
|
189
|
-
};
|
|
190
|
-
printJson(result, opts.pretty);
|
|
191
|
-
});
|
|
192
|
-
deposit
|
|
193
|
-
.command('run', { isDefault: true })
|
|
194
|
-
.description('Execute deposit (requires PRIVATE_KEY)')
|
|
195
|
-
.requiredOption('--token <symbol>', 'Token: jbtc | jusdc | cbbtc | usdc')
|
|
196
|
-
.requiredOption('--amount <value>', 'Amount in human-readable units, e.g. "100" for USDC')
|
|
152
|
+
.requiredOption('--amount <value>', 'Amount in human-readable units, e.g. "1000" for JUSDC')
|
|
197
153
|
.option('--network <name>', 'Network for vault address computation', 'jaspervault')
|
|
198
154
|
.option('--vault-index <n>', 'Vault index for computing recipient', '1')
|
|
155
|
+
.option('--timeout <seconds>', 'WalletConnect connection timeout in seconds', '120')
|
|
199
156
|
.option('--no-wait', 'Skip polling for arrival on JasperVault')
|
|
200
157
|
.option('--pretty', 'Pretty-print JSON output')
|
|
201
158
|
.action(async (opts) => {
|
|
202
159
|
const privateKey = process.env.PRIVATE_KEY;
|
|
203
|
-
|
|
204
|
-
|
|
160
|
+
const mode = privateKey ? 'pk' : 'wc';
|
|
161
|
+
let walletAddress;
|
|
162
|
+
let wcClient = null;
|
|
163
|
+
let wcSession = null;
|
|
164
|
+
// Step 1: obtain wallet address + signing capability
|
|
165
|
+
if (mode === 'pk') {
|
|
166
|
+
walletAddress = new Wallet(privateKey).address;
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
const timeoutS = parseInt(opts.timeout, 10) || 120;
|
|
170
|
+
let wcResult;
|
|
171
|
+
try {
|
|
172
|
+
wcResult = await initWcAndConnect({
|
|
173
|
+
timeoutS,
|
|
174
|
+
onAwaiting: (uri, { qrCodeUrl }) => {
|
|
175
|
+
printJson({
|
|
176
|
+
status: 'awaiting_connection',
|
|
177
|
+
qrCodeUrl,
|
|
178
|
+
uri,
|
|
179
|
+
message: 'Scan QR code or paste URI in wallet to connect',
|
|
180
|
+
}, opts.pretty);
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
printJson({ success: false, message: err.message }, opts.pretty);
|
|
186
|
+
process.exit(EXIT_CODES.BUSINESS_ERROR);
|
|
187
|
+
}
|
|
188
|
+
wcClient = wcResult.client;
|
|
189
|
+
wcSession = wcResult.session;
|
|
190
|
+
walletAddress = wcResult.walletAddress;
|
|
205
191
|
}
|
|
206
|
-
const wallet = new ethers.Wallet(privateKey);
|
|
207
192
|
const warpConfig = getWarpConfig(opts.token);
|
|
208
193
|
const baseRpc = getBaseRpcUrl();
|
|
209
194
|
const jaspervaultRpc = getJaspervaultRpcUrl();
|
|
210
195
|
const net = getNetworkConfig(opts.network);
|
|
211
|
-
const baseProvider = new
|
|
212
|
-
const jaspervaultProvider = new
|
|
196
|
+
const baseProvider = new JsonRpcProvider(baseRpc);
|
|
197
|
+
const jaspervaultProvider = new JsonRpcProvider(jaspervaultRpc);
|
|
198
|
+
// Step 2: compute vault address + check balance
|
|
213
199
|
const vaultIndex = parseInt(opts.vaultIndex, 10);
|
|
214
|
-
const recipient = await computeVaultAddress(jaspervaultProvider, net.contracts.vaultFactory,
|
|
215
|
-
const amountWei =
|
|
216
|
-
const { hasEnough, needsApprove } = await checkDepositBalances(baseProvider,
|
|
200
|
+
const recipient = await computeVaultAddress(jaspervaultProvider, net.contracts.vaultFactory, walletAddress, vaultIndex);
|
|
201
|
+
const amountWei = parseUnits(opts.amount, warpConfig.decimals);
|
|
202
|
+
const { hasEnough, needsApprove } = await checkDepositBalances(baseProvider, walletAddress, warpConfig, amountWei);
|
|
217
203
|
if (!hasEnough) {
|
|
218
204
|
exitWithError(`Insufficient balance. Required: ${opts.amount} ${warpConfig.symbol}`, EXIT_CODES.BUSINESS_ERROR);
|
|
219
205
|
}
|
|
220
|
-
|
|
221
|
-
const warpRouter = new ethers.Contract(warpConfig.base.warpRouter, HYP_ERC20_ABI, wallet.connect(baseProvider));
|
|
222
|
-
if (needsApprove) {
|
|
223
|
-
const approveTx = await underlyingToken.approve(warpConfig.base.warpRouter, ethers.MaxUint256);
|
|
224
|
-
await approveTx.wait(1);
|
|
225
|
-
}
|
|
206
|
+
let transferTxHash;
|
|
226
207
|
const transferStartTime = Date.now();
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
208
|
+
if (mode === 'pk') {
|
|
209
|
+
// Step 3 & 4 (PK): sign and send directly
|
|
210
|
+
const wallet = new Wallet(privateKey, baseProvider);
|
|
211
|
+
const underlyingToken = new Contract(warpConfig.base.underlyingToken, ERC20_ABI, wallet);
|
|
212
|
+
const warpRouter = new Contract(warpConfig.base.warpRouter, HYP_ERC20_ABI, wallet);
|
|
213
|
+
if (needsApprove) {
|
|
214
|
+
const approveTx = await underlyingToken.approve(warpConfig.base.warpRouter, MaxUint256);
|
|
215
|
+
await approveTx.wait(1);
|
|
216
|
+
}
|
|
217
|
+
const recipientBytes32 = zeroPadValue(recipient, 32);
|
|
218
|
+
const tx = await warpRouter.transferRemote(warpConfig.jaspervault.domain, recipientBytes32, amountWei, { value: 0n });
|
|
219
|
+
const receipt = await tx.wait(1);
|
|
220
|
+
transferTxHash = receipt.hash;
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
// Step 3 & 4 (WC): send via WalletConnect
|
|
224
|
+
if (needsApprove) {
|
|
225
|
+
const approveCalldata = buildApproveCalldata(warpConfig.base.warpRouter, MaxUint256);
|
|
226
|
+
await sendWcTransaction(wcClient, wcSession, walletAddress, warpConfig.base.underlyingToken, approveCalldata, baseProvider, 'approve', 'Waiting for approve confirmation on wallet...');
|
|
227
|
+
}
|
|
228
|
+
const transferCalldata = buildTransferRemoteCalldata(warpConfig.jaspervault.domain, recipient, amountWei);
|
|
229
|
+
transferTxHash = await sendWcTransaction(wcClient, wcSession, walletAddress, warpConfig.base.warpRouter, transferCalldata, baseProvider, 'transfer', 'Waiting for transfer confirmation on wallet...');
|
|
230
|
+
}
|
|
230
231
|
const baseChainConfirmTimeMs = Date.now() - transferStartTime;
|
|
232
|
+
// Step 5: poll for arrival + output result
|
|
231
233
|
const result = {
|
|
232
234
|
success: true,
|
|
233
235
|
message: 'Deposit transaction confirmed on Base',
|
|
234
|
-
transactionHash:
|
|
236
|
+
transactionHash: transferTxHash,
|
|
235
237
|
recipient,
|
|
236
238
|
token: warpConfig.symbol,
|
|
237
239
|
amount: opts.amount,
|
|
238
240
|
baseChainConfirmTimeMs,
|
|
239
241
|
};
|
|
240
|
-
if (
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
result.message = 'Deposit confirmed on Base; tokens may still be in transit to JasperVault';
|
|
242
|
+
if (opts.wait) {
|
|
243
|
+
let initialBalance = 0n;
|
|
244
|
+
try {
|
|
245
|
+
const destWarpRouter = new Contract(warpConfig.jaspervault.warpRouter, ERC20_ABI, jaspervaultProvider);
|
|
246
|
+
initialBalance = await destWarpRouter.balanceOf(recipient);
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// ignore
|
|
250
|
+
}
|
|
251
|
+
const { arrived, arrivalTimeMs } = await pollForDepositArrival(jaspervaultProvider, warpConfig.jaspervault.warpRouter, recipient, initialBalance, POLL_TIMEOUT_MS);
|
|
252
|
+
result.arrived = arrived;
|
|
253
|
+
result.arrivalTimeMs = arrivalTimeMs;
|
|
254
|
+
if (!arrived) {
|
|
255
|
+
result.message =
|
|
256
|
+
'Deposit confirmed on Base; tokens may still be in transit to JasperVault';
|
|
257
|
+
}
|
|
257
258
|
}
|
|
258
259
|
printJson(result, opts.pretty);
|
|
260
|
+
// Step 6: disconnect WC session
|
|
261
|
+
if (wcClient && wcSession) {
|
|
262
|
+
try {
|
|
263
|
+
await wcClient.disconnect({
|
|
264
|
+
topic: wcSession.topic,
|
|
265
|
+
reason: { code: 6000, message: 'Done' },
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
// ignore disconnect errors
|
|
270
|
+
}
|
|
271
|
+
}
|
|
259
272
|
});
|
|
260
273
|
}
|
|
261
274
|
//# sourceMappingURL=deposit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deposit.js","sourceRoot":"","sources":["../../../src/commands/deposit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"deposit.js","sourceRoot":"","sources":["../../../src/commands/deposit.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,8 +7,9 @@ import { getNetworkConfig, getTokenConfig, getWriterAddress } from '../services/
|
|
|
7
7
|
import { SubgraphClient } from '../services/subgraph-client.js';
|
|
8
8
|
import { loadDelegationKey } from '../services/key-manager.js';
|
|
9
9
|
import { loadVaultProfile, getPositionAccountFromProfile } from '../services/vault-profile.js';
|
|
10
|
-
import { buildSignData, signSignData, fetchWriterIndices, buildManagedOrder, } from '../services/order-signer.js';
|
|
10
|
+
import { buildSignData, signSignData, fetchWriterIndices, fetchOptionWriterIndices, buildManagedOrder, signPerpsOptionCreate, } from '../services/order-signer.js';
|
|
11
11
|
import { fetchCurrentPrice, calculateQuantity } from '../services/price-service.js';
|
|
12
|
+
import { fetchOptionQuote } from '../services/quote-center.js';
|
|
12
13
|
import { parsePpoOptions } from '../utils/ppo.js';
|
|
13
14
|
export function registerOrderCommand(program) {
|
|
14
15
|
const order = program
|
|
@@ -137,52 +138,37 @@ export function registerOrderCommand(program) {
|
|
|
137
138
|
const positionSide = order.positionSide;
|
|
138
139
|
// LONG position needs PUT (1), SHORT position needs CALL (0)
|
|
139
140
|
const hedgeOptionType = positionSide === 'LONG' ? 1 : 0;
|
|
140
|
-
// signData orderType is flipped from option type (matching backend logic)
|
|
141
|
-
const signOrderType = hedgeOptionType === 0 ? 1 : 0;
|
|
142
141
|
const { ppoSettings } = parsePpoOptions({
|
|
143
142
|
ppo: true,
|
|
144
143
|
ppoExpire: opts.ppoExpire,
|
|
145
144
|
ppoCategory: opts.ppoCategory,
|
|
146
145
|
ppoTier: opts.ppoTier,
|
|
147
146
|
});
|
|
148
|
-
const expireSeconds = parseInt(ppoSettings.optionExpireTime ?? '1800', 10);
|
|
149
|
-
const expireDate = Math.floor(Date.now() / 1000) + expireSeconds;
|
|
150
147
|
const ttlSeconds = parseInt(opts.ttl, 10);
|
|
151
148
|
const writerSide = positionSide.toLowerCase();
|
|
152
149
|
const tokenConfig = getTokenConfig(opts.network, opts.symbol);
|
|
153
150
|
const writerAddress = getWriterAddress(opts.network, opts.symbol, writerSide);
|
|
154
|
-
const provider = new JsonRpcProvider(net.rpcUrl);
|
|
155
|
-
const optionModuleV2 = net.contracts.optionModuleV2 ?? net.contracts.diamond;
|
|
156
|
-
const writerIndices = await fetchWriterIndices(writerAddress, signOrderType, tokenConfig.address, provider, optionModuleV2);
|
|
157
151
|
const marginAssetConfig = net.marginAsset;
|
|
158
152
|
if (!marginAssetConfig) {
|
|
159
153
|
exitWithError(`marginAsset not configured for network ${opts.network}`, EXIT_CODES.CONFIG_ERROR);
|
|
160
154
|
}
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
155
|
+
const durationSeconds = parseInt(ppoSettings.optionExpireTime ?? '1800', 10);
|
|
156
|
+
const provider = new JsonRpcProvider(net.rpcUrl);
|
|
157
|
+
const optionModuleV2 = net.contracts.optionModuleV2 ?? net.contracts.diamond;
|
|
158
|
+
const writerIndices = await fetchOptionWriterIndices(writerAddress, hedgeOptionType, tokenConfig.address, durationSeconds, provider, optionModuleV2);
|
|
159
|
+
console.error(`Adding ${ppoSettings.optionCategory ?? 'ATM'} hedge protection to order #${order.id} (${positionSide}), ` +
|
|
160
|
+
`expires in ${opts.ppoExpire}`);
|
|
161
|
+
console.error('Fetching option quote from Quote Center...');
|
|
162
|
+
const premiumSign = await fetchOptionQuote(opts.network, {
|
|
163
|
+
baseAssetSymbol: opts.symbol,
|
|
164
|
+
quoteAssetSymbol: marginAssetConfig.symbol,
|
|
165
|
+
orderType: hedgeOptionType,
|
|
166
|
+
amount: order.quantity,
|
|
167
|
+
durationSeconds,
|
|
171
168
|
chainId: net.chainId,
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
};
|
|
176
|
-
const delegationWallet = new Wallet(delegation.delegationPrivateKey);
|
|
177
|
-
const signature = await signSignData(signData, delegationWallet);
|
|
178
|
-
const premiumSign = {
|
|
179
|
-
lockAsset: order.underlyingAsset,
|
|
180
|
-
strikeAsset: marginAssetConfig.address,
|
|
181
|
-
optionType: String(hedgeOptionType),
|
|
182
|
-
productType: order.productType || '0',
|
|
183
|
-
expireDate: expireDate.toString(),
|
|
184
|
-
chainId: net.chainId.toString(),
|
|
185
|
-
};
|
|
169
|
+
optionCategory: ppoSettings.optionCategory,
|
|
170
|
+
ratio: ppoSettings.ratio,
|
|
171
|
+
});
|
|
186
172
|
const managedOrderBody = {
|
|
187
173
|
holder: order.holder,
|
|
188
174
|
quantity: order.quantity,
|
|
@@ -197,8 +183,8 @@ export function registerOrderCommand(program) {
|
|
|
197
183
|
offerID: writerIndices.offerID,
|
|
198
184
|
premiumSign,
|
|
199
185
|
};
|
|
200
|
-
|
|
201
|
-
|
|
186
|
+
const delegationWallet = new Wallet(delegation.delegationPrivateKey);
|
|
187
|
+
const signature = await signPerpsOptionCreate(managedOrderBody, Number(opts.orderId), delegationWallet);
|
|
202
188
|
const config = loadConfig();
|
|
203
189
|
const client = new ApiClient(config);
|
|
204
190
|
const res = await client.post(ENDPOINTS.ORDER_CREATE_OPTION, { managedOrder: managedOrderBody, signature, orderId: Number(opts.orderId) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/commands/order.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EACL,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/commands/order.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
import type { SignData, ManagedOrder, OrderIntentParams, TpSlIntentParams } from '../types.js';
|
|
3
3
|
import type { VaultProfile } from '../types.js';
|
|
4
|
+
import type { PremiumOracleSign } from './quote-center.js';
|
|
4
5
|
export interface WriterIndices {
|
|
5
6
|
settingsIndex: string;
|
|
6
7
|
productTypeIndex: string;
|
|
@@ -18,7 +19,21 @@ export declare function signSignData(signData: SignData, delegationWallet: ether
|
|
|
18
19
|
* Fetch settingsIndex, productTypeIndex, offerID from chain.
|
|
19
20
|
*/
|
|
20
21
|
export declare function fetchWriterIndices(writerAddress: string, orderType: number, underlyingAsset: string, provider: ethers.Provider, optionModuleV2Address: string): Promise<WriterIndices>;
|
|
22
|
+
/**
|
|
23
|
+
* Fetch settingsIndex, productTypeIndex, offerID for option protect orders.
|
|
24
|
+
* Unlike fetchWriterIndices (which looks for perps productTypes >= 10^12),
|
|
25
|
+
* this finds settings matching the option duration (e.g. 1800 for 30m).
|
|
26
|
+
*/
|
|
27
|
+
export declare function fetchOptionWriterIndices(writerAddress: string, optionType: number, underlyingAsset: string, durationSeconds: number, provider: ethers.Provider, optionModuleV2Address: string): Promise<WriterIndices>;
|
|
21
28
|
/**
|
|
22
29
|
* Build ManagedOrder from SignData and writer indices.
|
|
23
30
|
*/
|
|
24
31
|
export declare function buildManagedOrder(signData: SignData, writerIndices: WriterIndices, holder: string, quantity?: string): ManagedOrder;
|
|
32
|
+
export interface ManagedOrderWithPremium extends ManagedOrder {
|
|
33
|
+
premiumSign: PremiumOracleSign;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Sign the full PerpsOptionCreate struct for createPerpsOptionV6.
|
|
37
|
+
* The contract verifies: keccak256(abi.encode(PerpsOptionCreate)) + EIP-191 prefix.
|
|
38
|
+
*/
|
|
39
|
+
export declare function signPerpsOptionCreate(managedOrder: ManagedOrderWithPremium, orderId: number, signer: ethers.Wallet): Promise<string>;
|
|
@@ -142,6 +142,36 @@ export async function fetchWriterIndices(writerAddress, orderType, underlyingAss
|
|
|
142
142
|
}
|
|
143
143
|
throw new Error(`No perps product type found for writer ${writerAddress}, orderType ${orderType}, underlyingAsset ${underlyingAsset}`);
|
|
144
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Fetch settingsIndex, productTypeIndex, offerID for option protect orders.
|
|
147
|
+
* Unlike fetchWriterIndices (which looks for perps productTypes >= 10^12),
|
|
148
|
+
* this finds settings matching the option duration (e.g. 1800 for 30m).
|
|
149
|
+
*/
|
|
150
|
+
export async function fetchOptionWriterIndices(writerAddress, optionType, underlyingAsset, durationSeconds, provider, optionModuleV2Address) {
|
|
151
|
+
const contract = new ethers.Contract(optionModuleV2Address, GET_MANAGED_OPTIONS_SETTINGS_ABI, provider);
|
|
152
|
+
const settings = (await contract.getManagedOptionsSettings(writerAddress));
|
|
153
|
+
const targetOrderType = BigInt(optionType);
|
|
154
|
+
const targetUnderlying = underlyingAsset.toLowerCase();
|
|
155
|
+
const targetDuration = BigInt(durationSeconds);
|
|
156
|
+
for (let i = 0; i < settings.length; i++) {
|
|
157
|
+
const setting = settings[i];
|
|
158
|
+
if (BigInt(setting.orderType) !== targetOrderType)
|
|
159
|
+
continue;
|
|
160
|
+
if (setting.underlyingAsset.toLowerCase() !== targetUnderlying)
|
|
161
|
+
continue;
|
|
162
|
+
for (let j = 0; j < setting.productTypes.length; j++) {
|
|
163
|
+
if (setting.productTypes[j] === targetDuration) {
|
|
164
|
+
return {
|
|
165
|
+
settingsIndex: String(i),
|
|
166
|
+
productTypeIndex: String(j),
|
|
167
|
+
offerID: String(setting.offerID),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
throw new Error(`No option setting found for writer ${writerAddress}, optionType ${optionType}, ` +
|
|
173
|
+
`underlyingAsset ${underlyingAsset}, duration ${durationSeconds}s`);
|
|
174
|
+
}
|
|
145
175
|
/**
|
|
146
176
|
* Build ManagedOrder from SignData and writer indices.
|
|
147
177
|
*/
|
|
@@ -160,4 +190,53 @@ export function buildManagedOrder(signData, writerIndices, holder, quantity = '0
|
|
|
160
190
|
offerID: writerIndices.offerID,
|
|
161
191
|
};
|
|
162
192
|
}
|
|
193
|
+
// ABI tuple types matching the contract's PerpsOptionCreate struct exactly.
|
|
194
|
+
// Must stay in sync with PerpsOptionLiquidateHelperV5._hashCreatePerpsOptionParams.
|
|
195
|
+
const PREMIUM_ORACLE_SIGN_TYPE = 'tuple(uint256 id, uint256 chainId, uint64 productType, address optionAsset, uint256 strikePrice, address strikeAsset, uint256 strikeAmount, address lockAsset, uint256 lockAmount, uint256 expireDate, uint256 lockDate, uint8 optionType, address premiumAsset, uint256 premiumFee, uint256 timestamp, bytes[] oracleSign)';
|
|
196
|
+
const MANAGED_ORDER_TYPE = `tuple(address holder, address writer, address recipient, uint256 quantity, uint256 settingsIndex, uint256 productTypeIndex, uint256 oracleIndex, address nftFreeOption, ${PREMIUM_ORACLE_SIGN_TYPE} premiumSign, uint8 optionSourceType, bool liquidationToEOA, uint256 offerID)`;
|
|
197
|
+
const PERPS_OPTION_CREATE_TYPE = `tuple(${MANAGED_ORDER_TYPE} _info, uint64 _orderId)`;
|
|
198
|
+
/**
|
|
199
|
+
* Sign the full PerpsOptionCreate struct for createPerpsOptionV6.
|
|
200
|
+
* The contract verifies: keccak256(abi.encode(PerpsOptionCreate)) + EIP-191 prefix.
|
|
201
|
+
*/
|
|
202
|
+
export async function signPerpsOptionCreate(managedOrder, orderId, signer) {
|
|
203
|
+
const ps = managedOrder.premiumSign;
|
|
204
|
+
const values = {
|
|
205
|
+
_info: {
|
|
206
|
+
holder: managedOrder.holder,
|
|
207
|
+
writer: managedOrder.writer,
|
|
208
|
+
recipient: managedOrder.recipient,
|
|
209
|
+
quantity: BigInt(managedOrder.quantity),
|
|
210
|
+
settingsIndex: BigInt(managedOrder.settingsIndex),
|
|
211
|
+
productTypeIndex: BigInt(managedOrder.productTypeIndex),
|
|
212
|
+
oracleIndex: BigInt(managedOrder.oracleIndex),
|
|
213
|
+
nftFreeOption: managedOrder.nftFreeOption,
|
|
214
|
+
premiumSign: {
|
|
215
|
+
id: BigInt(ps.id),
|
|
216
|
+
chainId: BigInt(ps.chainId),
|
|
217
|
+
productType: BigInt(ps.productType),
|
|
218
|
+
optionAsset: ps.optionAsset,
|
|
219
|
+
strikePrice: BigInt(ps.strikePrice),
|
|
220
|
+
strikeAsset: ps.strikeAsset,
|
|
221
|
+
strikeAmount: BigInt(ps.strikeAmount),
|
|
222
|
+
lockAsset: ps.lockAsset,
|
|
223
|
+
lockAmount: BigInt(ps.lockAmount),
|
|
224
|
+
expireDate: BigInt(ps.expireDate),
|
|
225
|
+
lockDate: BigInt(ps.lockDate),
|
|
226
|
+
optionType: Number(ps.optionType),
|
|
227
|
+
premiumAsset: ps.premiumAsset,
|
|
228
|
+
premiumFee: BigInt(ps.premiumFee),
|
|
229
|
+
timestamp: BigInt(ps.timestamp),
|
|
230
|
+
oracleSign: ps.oracleSign,
|
|
231
|
+
},
|
|
232
|
+
optionSourceType: Number(managedOrder.optionSourceType),
|
|
233
|
+
liquidationToEOA: managedOrder.liquidationToEOA,
|
|
234
|
+
offerID: BigInt(managedOrder.offerID),
|
|
235
|
+
},
|
|
236
|
+
_orderId: BigInt(orderId),
|
|
237
|
+
};
|
|
238
|
+
const encodedData = ethers.AbiCoder.defaultAbiCoder().encode([PERPS_OPTION_CREATE_TYPE], [values]);
|
|
239
|
+
const messageHash = ethers.keccak256(encodedData);
|
|
240
|
+
return signer.signMessage(ethers.getBytes(messageHash));
|
|
241
|
+
}
|
|
163
242
|
//# sourceMappingURL=order-signer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-signer.js","sourceRoot":"","sources":["../../../src/services/order-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"order-signer.js","sourceRoot":"","sources":["../../../src/services/order-signer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface PremiumOracleSign {
|
|
2
|
+
id: string;
|
|
3
|
+
chainId: string;
|
|
4
|
+
productType: string;
|
|
5
|
+
optionAsset: string;
|
|
6
|
+
strikePrice: string;
|
|
7
|
+
strikeAsset: string;
|
|
8
|
+
strikeAmount: string;
|
|
9
|
+
lockAsset: string;
|
|
10
|
+
lockAmount: string;
|
|
11
|
+
expireDate: string;
|
|
12
|
+
lockDate: string;
|
|
13
|
+
optionType: string;
|
|
14
|
+
premiumAsset: string;
|
|
15
|
+
premiumFee: string;
|
|
16
|
+
timestamp: string;
|
|
17
|
+
oracleSign: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface FetchQuoteParams {
|
|
20
|
+
baseAssetSymbol: string;
|
|
21
|
+
quoteAssetSymbol: string;
|
|
22
|
+
orderType: number;
|
|
23
|
+
amount: string;
|
|
24
|
+
durationSeconds: number;
|
|
25
|
+
chainId: number;
|
|
26
|
+
optionCategory?: 'ATM' | 'OTM';
|
|
27
|
+
ratio?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Fetch a signed option quote from Quote Center.
|
|
31
|
+
* Mirrors backend OptionPricingService.fetchPremiumSign logic.
|
|
32
|
+
*/
|
|
33
|
+
export declare function fetchOptionQuote(network: string, params: FetchQuoteParams): Promise<PremiumOracleSign>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { getNetworkConfig } from './chain-config.js';
|
|
2
|
+
/**
|
|
3
|
+
* Fetch a signed option quote from Quote Center.
|
|
4
|
+
* Mirrors backend OptionPricingService.fetchPremiumSign logic.
|
|
5
|
+
*/
|
|
6
|
+
export async function fetchOptionQuote(network, params) {
|
|
7
|
+
const net = getNetworkConfig(network);
|
|
8
|
+
const baseUrl = process.env.QUOTE_CENTER_URL ?? net.quoteCenterUrl ?? 'https://uat-jasperquotecenterv2.fly.dev';
|
|
9
|
+
const optionCategory = params.optionCategory ?? 'ATM';
|
|
10
|
+
const requestData = {
|
|
11
|
+
amount: params.amount,
|
|
12
|
+
jvault_product: 'Degen',
|
|
13
|
+
base_asset: params.baseAssetSymbol.toUpperCase(),
|
|
14
|
+
quote_asset: params.quoteAssetSymbol.toUpperCase(),
|
|
15
|
+
premium_asset: params.quoteAssetSymbol.toUpperCase(),
|
|
16
|
+
product_type: params.durationSeconds,
|
|
17
|
+
option_type: params.orderType === 0 ? 'C' : 'P',
|
|
18
|
+
option_mode: 'EUO',
|
|
19
|
+
chain_id: params.chainId,
|
|
20
|
+
};
|
|
21
|
+
if (optionCategory === 'OTM') {
|
|
22
|
+
if (params.ratio === undefined || params.ratio === null) {
|
|
23
|
+
throw new Error('ratio parameter is required for OTM options');
|
|
24
|
+
}
|
|
25
|
+
// CALL (orderType=0) → positive ratio, PUT (orderType=1) → negative ratio
|
|
26
|
+
requestData.ratio = params.orderType === 0
|
|
27
|
+
? Math.abs(params.ratio)
|
|
28
|
+
: -Math.abs(params.ratio);
|
|
29
|
+
}
|
|
30
|
+
const apiUrl = optionCategory === 'OTM'
|
|
31
|
+
? `${baseUrl}/api/v3/public/otm/signedPrice`
|
|
32
|
+
: `${baseUrl}/api/v1/public/signedPrice`;
|
|
33
|
+
const maxRetries = 3;
|
|
34
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
35
|
+
try {
|
|
36
|
+
const controller = new AbortController();
|
|
37
|
+
const timeoutId = setTimeout(() => controller.abort(), 10000);
|
|
38
|
+
const response = await fetch(apiUrl, {
|
|
39
|
+
method: 'POST',
|
|
40
|
+
headers: { 'Content-Type': 'application/json' },
|
|
41
|
+
body: JSON.stringify(requestData),
|
|
42
|
+
signal: controller.signal,
|
|
43
|
+
});
|
|
44
|
+
clearTimeout(timeoutId);
|
|
45
|
+
if (!response.ok) {
|
|
46
|
+
const body = await response.text().catch(() => '');
|
|
47
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText} - ${body}`);
|
|
48
|
+
}
|
|
49
|
+
const data = await response.json();
|
|
50
|
+
return {
|
|
51
|
+
id: String(data.data.id),
|
|
52
|
+
chainId: String(data.data.chain_id),
|
|
53
|
+
productType: String(data.data.product_type),
|
|
54
|
+
optionAsset: data.data.option_asset,
|
|
55
|
+
strikePrice: String(data.data.strike_price),
|
|
56
|
+
strikeAsset: data.data.strike_asset,
|
|
57
|
+
strikeAmount: String(data.data.strike_amount),
|
|
58
|
+
lockAsset: data.data.lock_asset,
|
|
59
|
+
lockAmount: String(data.data.lock_amount),
|
|
60
|
+
expireDate: String(data.data.expire_date),
|
|
61
|
+
lockDate: String(data.data.lock_date),
|
|
62
|
+
optionType: String(data.data.option_type),
|
|
63
|
+
premiumAsset: data.data.premium_asset,
|
|
64
|
+
premiumFee: String(data.data.premium_fee),
|
|
65
|
+
timestamp: String(data.data.timestamp),
|
|
66
|
+
oracleSign: data.oracle_sign,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (attempt === maxRetries) {
|
|
71
|
+
throw new Error(`Quote Center failed after ${maxRetries} attempts: ${error.message}`);
|
|
72
|
+
}
|
|
73
|
+
const delayMs = Math.pow(2, attempt - 1) * 1000;
|
|
74
|
+
await new Promise(resolve => setTimeout(resolve, delayMs));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
throw new Error('Failed to fetch option quote');
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=quote-center.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quote-center.js","sourceRoot":"","sources":["../../../src/services/quote-center.ts"],"names":[],"mappings":"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"}
|