jaspervault_cli 1.0.23 → 1.0.24
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/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
|
@@ -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":"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,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAQlD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0CAA0C,CAAC,CAAC;IAE3D,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,cAAc,CAAC,qBAAqB,EAAE,eAAe,CAAC;SACtD,cAAc,CAAC,mBAAmB,EAAE,iCAAiC,CAAC;SACtE,MAAM,CAAC,gBAAgB,EAAE,qDAAqD,CAAC;SAC/E,cAAc,CAAC,qBAAqB,EAAE,yEAAyE,CAAC;SAChH,MAAM,CAAC,yBAAyB,EAAE,8CAA8C,CAAC;SACjF,MAAM,CAAC,2BAA2B,EAAE,gDAAgD,CAAC;SACrF,MAAM,CAAC,uBAAuB,EAAE,6CAA6C,CAAC;SAC9E,MAAM,CAAC,OAAO,EAAE,oCAAoC,CAAC;SACrD,MAAM,CAAC,yBAAyB,EAAE,iCAAiC,CAAC;SACpE,MAAM,CAAC,0BAA0B,EAAE,oCAAoC,CAAC;SACxE,MAAM,CAAC,kBAAkB,EAAE,gEAAgE,CAAC;SAC5F,MAAM,CAAC,kBAAkB,EAAE,cAAc,EAAE,aAAa,CAAC;SACzD,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,CAAC;SACzD,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAAC;SAC9C,MAAM,CACL,KAAK,EAAE,IAeN,EAAE,EAAE;QACH,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACvC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,aAAa,CACX,+EAA+E,EAC/E,UAAU,CAAC,YAAY,CACxB,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,aAAa,CACX,gCAAgC,IAAI,CAAC,OAAO,kCAAkC,IAAI,CAAC,OAAO,UAAU,EACpG,UAAU,CAAC,YAAY,CACxB,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAsB,CAAC;QACzD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACxC,aAAa,CAAC,8BAA8B,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC5B,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QAEhC,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,cAAc,GAAG,WAAW,GAAG,QAAQ,CAAC;QAC9C,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE5C,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAEzD,MAAM,eAAe,GACnB,IAAI,CAAC,eAAe,IAAI,6BAA6B,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,SAAS,CAAC;QACpF,MAAM,MAAM,GAAG;YACb,IAAI;YACJ,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ;YACR,YAAY,EAAE,YAAY;YAC1B,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa;YAC1D,eAAe;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAClC,SAAS;SACV,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,GAAG,CAAC,SAAS,CAAC,cAAc,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;QAE7E,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,aAAa,CACX,gCAAgC,IAAI,8CAA8C,EAClF,UAAU,CAAC,YAAY,CACxB,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACpE,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAC5C,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,SAAS,EAClB,QAAQ,CAAC,eAAe,EACxB,QAAQ,EACR,cAAc,CACf,CAAC;QAEF,MAAM,cAAc,GAAG,GAAG,CAAC,WAAW,EAAE,QAAQ,IAAI,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,iBAAiB,CAChC,QAAQ,CAAC,YAAY,EACrB,YAAY,EACZ,cAAc,CACf,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9D,MAAM,aAAa,GAAG,cAAc,GAAG,QAAQ,CAAC;QAChD,OAAO,CAAC,KAAK,CACX,eAAe,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,OAAO,QAAQ,CAAC,cAAc,EAAE,OAAO,cAAc,CAAC,cAAc,EAAE,iBAAiB,QAAQ,IAAI,CAC1J,CAAC;QAEF,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QAE3F,MAAM,IAAI,GAAuB;YAC/B,QAAQ;YACR,SAAS;YACT,YAAY;YACZ,WAAW;SACZ,CAAC;QAEF,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAC3B,SAAS,CAAC,YAAY,EACtB,IAAI,CACL,CAAC;QACF,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAgD,CAAC;QACrE,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAC1E,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACjE,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACrC,aAAa,CACX,SAAS,CAAC,KAAK,IAAI,OAAO,SAAS,CAAC,MAAM,EAAE,EAC5C,UAAU,CAAC,cAAc,CAC1B,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CACF,CAAC;IAEJ,KAAK;SACF,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,mFAAmF,CAAC;SAChG,cAAc,CAAC,iBAAiB,EAAE,oCAAoC,CAAC;SACvE,cAAc,CAAC,mBAAmB,EAAE,iCAAiC,CAAC;SACtE,MAAM,CAAC,yBAAyB,EAAE,oCAAoC,EAAE,KAAK,CAAC;SAC9E,MAAM,CAAC,0BAA0B,EAAE,gCAAgC,EAAE,KAAK,CAAC;SAC3E,MAAM,CAAC,kBAAkB,EAAE,gEAAgE,CAAC;SAC5F,MAAM,CAAC,kBAAkB,EAAE,cAAc,EAAE,aAAa,CAAC;SACzD,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,CAAC;SAC7D,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAAC;SAC9C,MAAM,CACL,KAAK,EAAE,IASN,EAAE,EAAE;QACH,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACvC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,aAAa,CACX,+EAA+E,EAC/E,UAAU,CAAC,YAAY,CACxB,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,aAAa,CACX,gCAAgC,IAAI,CAAC,OAAO,kCAAkC,IAAI,CAAC,OAAO,UAAU,EACpG,UAAU,CAAC,YAAY,CACxB,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE3C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,WAAW,CAAC;QACnE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,aAAa,CACX,yCAAyC,IAAI,CAAC,OAAO,wBAAwB,EAC7E,UAAU,CAAC,YAAY,CACxB,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,WAAY,CAAC,CAAC;QACxD,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,aAAa,CAAC,SAAS,IAAI,CAAC,OAAO,yBAAyB,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,CAAC,aAAc,CAAC,QAAQ,EAAE,CAAC;YAC7B,aAAa,CAAC,SAAS,IAAI,CAAC,OAAO,iBAAiB,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,KAAK,GAAG,aAAc,CAAC;QAC7B,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAExC,6DAA6D;QAC7D,MAAM,eAAe,GAAG,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAExD,MAAM,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC;YACtC,GAAG,EAAE,IAAI;YACT,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAE1C,MAAM,UAAU,GAAG,YAAY,CAAC,WAAW,EAAsB,CAAC;QAClE,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAE9E,MAAM,iBAAiB,GAAG,GAAG,CAAC,WAAW,CAAC;QAC1C,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,aAAa,CAAC,0CAA0C,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QACnG,CAAC;QAED,MAAM,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC,gBAAgB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;QAE7E,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,GAAG,CAAC,SAAS,CAAC,cAAc,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;QAC7E,MAAM,aAAa,GAAG,MAAM,wBAAwB,CAClD,aAAa,EACb,eAAe,EACf,WAAW,CAAC,OAAO,EACnB,eAAe,EACf,QAAQ,EACR,cAAc,CACf,CAAC;QAEF,OAAO,CAAC,KAAK,CACX,UAAU,WAAW,CAAC,cAAc,IAAI,KAAK,+BAA+B,KAAK,CAAC,EAAE,KAAK,YAAY,KAAK;YAC1G,cAAc,IAAI,CAAC,SAAS,EAAE,CAC/B,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE;YACvD,eAAe,EAAE,IAAI,CAAC,MAAM;YAC5B,gBAAgB,EAAE,iBAAkB,CAAC,MAAM;YAC3C,SAAS,EAAE,eAAe;YAC1B,MAAM,EAAE,KAAK,CAAC,QAAQ;YACtB,eAAe;YACf,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,cAAc,EAAE,WAAW,CAAC,cAAc;YAC1C,KAAK,EAAE,WAAW,CAAC,KAAK;SACzB,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG;YACvB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,aAAa;YACrB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,OAAQ,CAAC,aAAa,IAAI,EAAE;YAC1D,aAAa,EAAE,aAAa,CAAC,aAAa;YAC1C,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;YAChD,WAAW,EAAE,GAAG;YAChB,aAAa,EAAE,MAAM,CAAC,WAAW;YACjC,gBAAgB,EAAE,GAAG;YACrB,gBAAgB,EAAE,KAAK;YACvB,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,WAAW;SACZ,CAAC;QAEF,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,UAAW,CAAC,oBAAoB,CAAC,CAAC;QACtE,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAC3C,gBAAgB,EAChB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EACpB,gBAAgB,CACjB,CAAC;QAEF,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAC3B,SAAS,CAAC,mBAAmB,EAC7B,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAC7E,CAAC;QACF,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjC,IAAI,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClE,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACrC,aAAa,CACX,SAAS,CAAC,KAAK,IAAI,OAAO,SAAS,CAAC,MAAM,EAAE,EAC5C,UAAU,CAAC,cAAc,CAC1B,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CACF,CAAC;AACN,CAAC"}
|
|
@@ -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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"}
|