@spicenet-io/spiceflow-core 0.9.0 → 0.10.0-order-amendments.0

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 ADDED
@@ -0,0 +1,82 @@
1
+ # @spicenet-io/spiceflow-core
2
+
3
+ Single source of truth for chain configs, token lists, logos, ABIs, and shared utilities across spiceflow repos.
4
+
5
+ ## Install
6
+
7
+ ```
8
+ npm install @spicenet-io/spiceflow-core
9
+ ```
10
+
11
+ ## What's in here
12
+
13
+ ### Chains
14
+
15
+ `CHAINS` is a record of all supported chains keyed by chain ID. Each entry has id, name, display name, network (mainnet/testnet), native currency, delegate contract address, block explorer, rpc url, and logo.
16
+
17
+ Helper functions: `getChainMeta(chainId)`, `getChainsByNetwork(network)`, `getChainIdsByNetwork(network)`, `getMainnetChains()`, `getTestnetChains()`, `getDelegateContract(chainId)`.
18
+
19
+ ### Tokens
20
+
21
+ `TOKENS` is the official token list. Each token has symbol, name, equivalence group, logo, and deployments across chains (address, decimals, network per chain).
22
+
23
+ Helper functions: `getTokensForChain(chainId)`, `getTokenByAddress(address, chainId)`, `getEquivalentAddresses(tokenAddress)`, `areEquivalent(a, b)`, `isUsdDenominated(address)`, `isBtcDenominated(address)`.
24
+
25
+ ### Logos
26
+
27
+ All chain and token logos are bundled as base64 data URIs in the package. They work directly in img src attributes with no network requests. To add a new logo, drop the PNG in `logos/` and reference it in the chain or token list. `npm run build` auto generates the base64 file.
28
+
29
+ ### Utilities
30
+
31
+ `isNativeToken(address)` checks if an address is a native token (zero address, 0x0, or 0xeee...eee).
32
+
33
+ `normalizeNativeTokenAddress(address)` normalizes any native token address to the zero address.
34
+
35
+ `convertAmountBetweenDecimals(amount, fromDecimals, toDecimals)` converts token amounts between different decimal precisions.
36
+
37
+ `formatTokenAmount(amount, decimals)` formats a bigint token amount into a human readable string.
38
+
39
+ `truncateAddress(address)` shortens an address for display.
40
+
41
+ `withRetry(fn, maxRetries, delayMs)` retries an async function with exponential backoff.
42
+
43
+ Constants: `NATIVE_TOKEN_ADDRESS`, `ZERO_ADDRESS`, `ESCROW_ADDRESS`.
44
+
45
+ ### ABIs
46
+
47
+ `DELEGATE_ABI`, `ERC20_ABI`, `WCBTC_ABI`.
48
+
49
+ ### Authorization
50
+
51
+ `hashChainBatches(chainCalls)` hashes chain call batches for intent signing.
52
+
53
+ `getIntentHash(signatureType, nbf, exp, chainBatches)` computes the intent hash.
54
+
55
+ `getAccountNonce(address, publicClient)` gets the account nonce from chain.
56
+
57
+ ### Core SDK
58
+
59
+ `SpiceFlowCore` class for building and submitting intents. Handles delegation signing, chain batch construction, intent signing, and transaction submission.
60
+
61
+ ### HTTP
62
+
63
+ `fetchWithRetry(url, init, opts)` is a fetch wrapper with retry and exponential backoff.
64
+
65
+ `submitTransaction(baseUrl, request)` submits a transaction to the relayer API.
66
+
67
+ `getIntentStepStatus(txApiUrl, intentId, stepId)` checks intent execution status.
68
+
69
+ `prepareRFQT(txApiUrl, request)` prepares an RFQT quote.
70
+
71
+ ## Adding a token
72
+
73
+ 1. Drop the logo PNG in `logos/`
74
+ 2. Add the token entry in `src/tokens/list.ts` with symbol, name, equivalence group, logo reference, and deployments
75
+ 3. `npm run build` and publish
76
+
77
+ ## Adding a chain
78
+
79
+ 1. Drop the logo PNG in `logos/` if it's a new chain logo
80
+ 2. Add the chain entry in `src/chains/list.ts`
81
+ 3. Add token deployments on that chain in `src/tokens/list.ts`
82
+ 4. `npm run build` and publish
package/dist/api.d.ts CHANGED
@@ -93,6 +93,7 @@ export interface EstimateActionFeesResponse {
93
93
  };
94
94
  }
95
95
  export interface RegisterConditionalIntentRequest {
96
+ executionWaits?: import("./conditionalIntents.js").ConditionalExecutionWait[];
96
97
  authorization: ConditionalIntentAuthorization;
97
98
  authorizationSignature: Hex;
98
99
  triggerSpecification: Hex;
@@ -103,11 +104,19 @@ export interface RegisterConditionalIntentRequest {
103
104
  };
104
105
  }
105
106
  export interface RegisterConditionalIntentResponse {
107
+ orderId?: string;
108
+ revisionId?: string;
109
+ revision?: number;
106
110
  conditionalIntentId: Hash;
107
111
  state: "armed" | "eligible" | "executing" | "reconciling" | "completed" | "cancelled" | "expired" | "failed" | "needs_attention";
108
112
  readToken?: string;
109
113
  }
110
114
  export interface ConditionalIntentStatus {
115
+ /** Stable order identity across signed revisions. Legacy servers omit these fields. */
116
+ orderId?: string;
117
+ revisionId?: string;
118
+ revision?: number;
119
+ replacedBy?: Hash;
111
120
  executionStatus?: string;
112
121
  executionStopped?: boolean;
113
122
  conditionalIntentId: Hash;
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,17 @@
1
1
  import type { Address, Hash, Hex } from "viem";
2
2
  import type { Call, TokenTransferConfig } from "./types.js";
3
+ /** Until-cancelled wire sentinel: 9999-12-31T23:59:59Z; safe in JS, SQL and signed EVM expiry. */
4
+ export declare const CONDITIONAL_INTENT_UNTIL_CANCELLED = 253402300799n;
3
5
  export declare const CONDITIONAL_INTENT_VERSION: 1;
4
6
  export type ConditionalTriggerSemantics = "state" | "event";
7
+ /** A signed, read-only prerequisite for an unsubmitted execution batch. */
8
+ export interface ConditionalExecutionWait {
9
+ batchIndex: number;
10
+ to: Address;
11
+ data: Hex;
12
+ /** Exact ABI uint256 return word required before submission. */
13
+ expected: bigint;
14
+ }
5
15
  export interface ConditionalExecutionBatch {
6
16
  chainId: bigint | number;
7
17
  calls: Call[];
@@ -16,6 +26,8 @@ export interface ConditionalDelegationAuthorization {
16
26
  yParity?: number;
17
27
  }
18
28
  export interface ConditionalIntentAuthorization {
29
+ /** Atomically supersedes this unclaimed intent; bound into the signature. */
30
+ replacesIntentId?: Hash;
19
31
  owner: Address;
20
32
  clientId: string;
21
33
  serviceId: string;
@@ -57,7 +69,7 @@ export interface ConditionalReadAuthorization {
57
69
  nonce: bigint;
58
70
  }
59
71
  /** Commits to ordered calls and service-consumed funding metadata, never signatures or display text. */
60
- export declare function hashConditionalExecutionPlan(batches: ConditionalExecutionBatch[], delegationAuthorizations?: ConditionalDelegationAuthorization[]): Hash;
72
+ export declare function hashConditionalExecutionPlan(batches: ConditionalExecutionBatch[], delegationAuthorizations?: ConditionalDelegationAuthorization[], waits?: ConditionalExecutionWait[]): Hash;
61
73
  /** Hash to pass to the wallet's existing EIP-191 signMessage({ message: { raw } }) path. */
62
74
  export declare function hashConditionalIntentAuthorization(value: ConditionalIntentAuthorization): Hash;
63
75
  export declare function getConditionalIntentId(authorizationHash: Hash): Hash;
@@ -1 +1 @@
1
- {"version":3,"file":"conditionalIntents.d.ts","sourceRoot":"","sources":["../src/conditionalIntents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conditionalIntents.d.ts","sourceRoot":"","sources":["../src/conditionalIntents.ts"],"names":[],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -20,6 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  var index_exports = {};
21
21
  __export(index_exports, {
22
22
  CHAINS: () => CHAINS,
23
+ CONDITIONAL_INTENT_UNTIL_CANCELLED: () => CONDITIONAL_INTENT_UNTIL_CANCELLED,
23
24
  CONDITIONAL_INTENT_VERSION: () => CONDITIONAL_INTENT_VERSION,
24
25
  ChainBatchHashAbi: () => ChainBatchHashAbi,
25
26
  DELEGATE_ABI: () => DELEGATE_ABI,
@@ -149,6 +150,7 @@ async function getRecentBlock(publicClient) {
149
150
 
150
151
  // src/conditionalIntents.ts
151
152
  var import_viem2 = require("viem");
153
+ var CONDITIONAL_INTENT_UNTIL_CANCELLED = 253402300799n;
152
154
  var CONDITIONAL_INTENT_VERSION = 1;
153
155
  var callTuple = [
154
156
  { name: "to", type: "address" },
@@ -169,44 +171,97 @@ var batchTuple = [
169
171
  ];
170
172
  var zeroAddress = "0x0000000000000000000000000000000000000000";
171
173
  function encodePlanTransfer(transfer) {
172
- if (transfer.from === "solver") return [1, zeroAddress, transfer.to, transfer.token, transfer.amount];
173
- if (transfer.from === "escrow") return [2, zeroAddress, transfer.to, transfer.token, transfer.amount];
174
- return [0, transfer.from, transfer.to, transfer.token, transfer.amount];
174
+ if (transfer.from === "solver")
175
+ return [
176
+ 1,
177
+ zeroAddress,
178
+ transfer.to,
179
+ transfer.token,
180
+ transfer.amount
181
+ ];
182
+ if (transfer.from === "escrow")
183
+ return [
184
+ 2,
185
+ zeroAddress,
186
+ transfer.to,
187
+ transfer.token,
188
+ transfer.amount
189
+ ];
190
+ return [
191
+ 0,
192
+ transfer.from,
193
+ transfer.to,
194
+ transfer.token,
195
+ transfer.amount
196
+ ];
175
197
  }
176
- function hashConditionalExecutionPlan(batches, delegationAuthorizations = []) {
198
+ function hashConditionalExecutionPlan(batches, delegationAuthorizations = [], waits = []) {
177
199
  const normalized = batches.map((batch) => [
178
200
  BigInt(batch.chainId),
179
201
  batch.calls,
180
202
  batch.tokenTransfers.map(encodePlanTransfer)
181
203
  ]);
182
- return (0, import_viem2.keccak256)((0, import_viem2.encodeAbiParameters)(
183
- [
184
- { type: "bytes32" },
185
- { type: "uint256" },
186
- { type: "tuple[]", components: batchTuple },
187
- { type: "tuple[]", components: [
188
- { name: "address", type: "address" },
189
- { name: "chainId", type: "uint256" },
190
- { name: "nonce", type: "uint256" },
191
- { name: "r", type: "bytes32" },
192
- { name: "s", type: "bytes32" },
193
- { name: "yParity", type: "uint8" }
194
- ] }
195
- ],
196
- [
197
- (0, import_viem2.keccak256)((0, import_viem2.stringToHex)("spice.conditional.execution-plan")),
198
- BigInt(CONDITIONAL_INTENT_VERSION),
199
- normalized,
200
- delegationAuthorizations.map((auth) => [
201
- auth.address,
202
- BigInt(auth.chainId),
203
- BigInt(auth.nonce),
204
- auth.r,
205
- auth.s,
206
- auth.yParity ?? 0
207
- ])
208
- ]
209
- ));
204
+ const baseHash = (0, import_viem2.keccak256)(
205
+ (0, import_viem2.encodeAbiParameters)(
206
+ [
207
+ { type: "bytes32" },
208
+ { type: "uint256" },
209
+ { type: "tuple[]", components: batchTuple },
210
+ {
211
+ type: "tuple[]",
212
+ components: [
213
+ { name: "address", type: "address" },
214
+ { name: "chainId", type: "uint256" },
215
+ { name: "nonce", type: "uint256" },
216
+ { name: "r", type: "bytes32" },
217
+ { name: "s", type: "bytes32" },
218
+ { name: "yParity", type: "uint8" }
219
+ ]
220
+ }
221
+ ],
222
+ [
223
+ (0, import_viem2.keccak256)((0, import_viem2.stringToHex)("spice.conditional.execution-plan")),
224
+ BigInt(CONDITIONAL_INTENT_VERSION),
225
+ normalized,
226
+ delegationAuthorizations.map((auth) => [
227
+ auth.address,
228
+ BigInt(auth.chainId),
229
+ BigInt(auth.nonce),
230
+ auth.r,
231
+ auth.s,
232
+ auth.yParity ?? 0
233
+ ])
234
+ ]
235
+ )
236
+ );
237
+ if (!waits.length) return baseHash;
238
+ return (0, import_viem2.keccak256)(
239
+ (0, import_viem2.encodeAbiParameters)(
240
+ [
241
+ { type: "bytes32" },
242
+ { type: "bytes32" },
243
+ {
244
+ type: "tuple[]",
245
+ components: [
246
+ { name: "batchIndex", type: "uint256" },
247
+ { name: "to", type: "address" },
248
+ { name: "data", type: "bytes" },
249
+ { name: "expected", type: "uint256" }
250
+ ]
251
+ }
252
+ ],
253
+ [
254
+ (0, import_viem2.keccak256)((0, import_viem2.stringToHex)("spice.conditional.execution-waits.v1")),
255
+ baseHash,
256
+ waits.map((w) => ({
257
+ batchIndex: BigInt(w.batchIndex),
258
+ to: w.to,
259
+ data: w.data,
260
+ expected: w.expected
261
+ }))
262
+ ]
263
+ )
264
+ );
210
265
  }
211
266
  var authorizationTypes = [
212
267
  { name: "domain", type: "bytes32" },
@@ -232,76 +287,125 @@ function semanticsValue(value) {
232
287
  return value === "state" ? 0 : 1;
233
288
  }
234
289
  function hashConditionalIntentAuthorization(value) {
235
- return (0, import_viem2.keccak256)((0, import_viem2.encodeAbiParameters)(authorizationTypes, [
236
- hashText("spice.conditional.authorization"),
237
- BigInt(CONDITIONAL_INTENT_VERSION),
238
- value.owner,
239
- hashText(value.clientId),
240
- hashText(value.serviceId),
241
- value.authorizationNonce,
242
- value.executionDigest,
243
- value.executionPlanHash,
244
- value.triggerSpecificationHash,
245
- value.evaluator,
246
- semanticsValue(value.semantics),
247
- value.maxSignalAgeSeconds,
248
- value.validAfter,
249
- value.expiresAt,
250
- BigInt(value.maxExecutions)
251
- ]));
290
+ const original = (0, import_viem2.keccak256)(
291
+ (0, import_viem2.encodeAbiParameters)(authorizationTypes, [
292
+ hashText("spice.conditional.authorization"),
293
+ BigInt(CONDITIONAL_INTENT_VERSION),
294
+ value.owner,
295
+ hashText(value.clientId),
296
+ hashText(value.serviceId),
297
+ value.authorizationNonce,
298
+ value.executionDigest,
299
+ value.executionPlanHash,
300
+ value.triggerSpecificationHash,
301
+ value.evaluator,
302
+ semanticsValue(value.semantics),
303
+ value.maxSignalAgeSeconds,
304
+ value.validAfter,
305
+ value.expiresAt,
306
+ BigInt(value.maxExecutions)
307
+ ])
308
+ );
309
+ return value.replacesIntentId ? (0, import_viem2.keccak256)(
310
+ (0, import_viem2.encodeAbiParameters)(
311
+ [{ type: "bytes32" }, { type: "bytes32" }, { type: "bytes32" }],
312
+ [
313
+ hashText("spice.conditional.amendment.v1"),
314
+ value.replacesIntentId,
315
+ original
316
+ ]
317
+ )
318
+ ) : original;
252
319
  }
253
320
  function getConditionalIntentId(authorizationHash) {
254
- return (0, import_viem2.keccak256)((0, import_viem2.encodeAbiParameters)(
255
- [{ type: "bytes32" }, { type: "bytes32" }],
256
- [hashText("spice.conditional.intent-id"), authorizationHash]
257
- ));
321
+ return (0, import_viem2.keccak256)(
322
+ (0, import_viem2.encodeAbiParameters)(
323
+ [{ type: "bytes32" }, { type: "bytes32" }],
324
+ [hashText("spice.conditional.intent-id"), authorizationHash]
325
+ )
326
+ );
258
327
  }
259
328
  function hashConditionalSignal(value, serviceId) {
260
- return (0, import_viem2.keccak256)((0, import_viem2.encodeAbiParameters)(
261
- [
262
- { name: "domain", type: "bytes32" },
263
- { name: "version", type: "uint256" },
264
- { name: "serviceIdHash", type: "bytes32" },
265
- { name: "intentId", type: "bytes32" },
266
- { name: "executionDigest", type: "bytes32" },
267
- { name: "triggerSpecificationHash", type: "bytes32" },
268
- { name: "signalIdHash", type: "bytes32" },
269
- { name: "observedAt", type: "uint256" },
270
- { name: "validUntil", type: "uint256" },
271
- { name: "satisfied", type: "bool" },
272
- { name: "evidenceHash", type: "bytes32" }
273
- ],
274
- [hashText("spice.conditional.signal"), BigInt(CONDITIONAL_INTENT_VERSION), hashText(serviceId), value.intentId, value.executionDigest, value.triggerSpecificationHash, hashText(value.signalId), value.observedAt, value.validUntil, value.satisfied, value.evidenceHash ?? "0x" + "00".repeat(32)]
275
- ));
329
+ return (0, import_viem2.keccak256)(
330
+ (0, import_viem2.encodeAbiParameters)(
331
+ [
332
+ { name: "domain", type: "bytes32" },
333
+ { name: "version", type: "uint256" },
334
+ { name: "serviceIdHash", type: "bytes32" },
335
+ { name: "intentId", type: "bytes32" },
336
+ { name: "executionDigest", type: "bytes32" },
337
+ { name: "triggerSpecificationHash", type: "bytes32" },
338
+ { name: "signalIdHash", type: "bytes32" },
339
+ { name: "observedAt", type: "uint256" },
340
+ { name: "validUntil", type: "uint256" },
341
+ { name: "satisfied", type: "bool" },
342
+ { name: "evidenceHash", type: "bytes32" }
343
+ ],
344
+ [
345
+ hashText("spice.conditional.signal"),
346
+ BigInt(CONDITIONAL_INTENT_VERSION),
347
+ hashText(serviceId),
348
+ value.intentId,
349
+ value.executionDigest,
350
+ value.triggerSpecificationHash,
351
+ hashText(value.signalId),
352
+ value.observedAt,
353
+ value.validUntil,
354
+ value.satisfied,
355
+ value.evidenceHash ?? "0x" + "00".repeat(32)
356
+ ]
357
+ )
358
+ );
276
359
  }
277
360
  function hashConditionalCancellation(value) {
278
- return (0, import_viem2.keccak256)((0, import_viem2.encodeAbiParameters)(
279
- [
280
- { name: "domain", type: "bytes32" },
281
- { name: "version", type: "uint256" },
282
- { name: "owner", type: "address" },
283
- { name: "serviceIdHash", type: "bytes32" },
284
- { name: "intentId", type: "bytes32" },
285
- { name: "cancellationNonce", type: "uint256" },
286
- { name: "expiresAt", type: "uint256" }
287
- ],
288
- [hashText("spice.conditional.cancel"), BigInt(CONDITIONAL_INTENT_VERSION), value.owner, hashText(value.serviceId), value.intentId, value.cancellationNonce, value.expiresAt]
289
- ));
361
+ return (0, import_viem2.keccak256)(
362
+ (0, import_viem2.encodeAbiParameters)(
363
+ [
364
+ { name: "domain", type: "bytes32" },
365
+ { name: "version", type: "uint256" },
366
+ { name: "owner", type: "address" },
367
+ { name: "serviceIdHash", type: "bytes32" },
368
+ { name: "intentId", type: "bytes32" },
369
+ { name: "cancellationNonce", type: "uint256" },
370
+ { name: "expiresAt", type: "uint256" }
371
+ ],
372
+ [
373
+ hashText("spice.conditional.cancel"),
374
+ BigInt(CONDITIONAL_INTENT_VERSION),
375
+ value.owner,
376
+ hashText(value.serviceId),
377
+ value.intentId,
378
+ value.cancellationNonce,
379
+ value.expiresAt
380
+ ]
381
+ )
382
+ );
290
383
  }
291
384
  function hashConditionalReadAuthorization(value) {
292
- return (0, import_viem2.keccak256)((0, import_viem2.encodeAbiParameters)(
293
- [
294
- { name: "domain", type: "bytes32" },
295
- { name: "version", type: "uint256" },
296
- { name: "owner", type: "address" },
297
- { name: "reader", type: "address" },
298
- { name: "serviceIdHash", type: "bytes32" },
299
- { name: "intentId", type: "bytes32" },
300
- { name: "expiresAt", type: "uint256" },
301
- { name: "nonce", type: "uint256" }
302
- ],
303
- [hashText("spice.conditional.read"), BigInt(CONDITIONAL_INTENT_VERSION), value.owner, value.reader, hashText(value.serviceId), value.intentId ?? "0x" + "00".repeat(32), value.expiresAt, value.nonce]
304
- ));
385
+ return (0, import_viem2.keccak256)(
386
+ (0, import_viem2.encodeAbiParameters)(
387
+ [
388
+ { name: "domain", type: "bytes32" },
389
+ { name: "version", type: "uint256" },
390
+ { name: "owner", type: "address" },
391
+ { name: "reader", type: "address" },
392
+ { name: "serviceIdHash", type: "bytes32" },
393
+ { name: "intentId", type: "bytes32" },
394
+ { name: "expiresAt", type: "uint256" },
395
+ { name: "nonce", type: "uint256" }
396
+ ],
397
+ [
398
+ hashText("spice.conditional.read"),
399
+ BigInt(CONDITIONAL_INTENT_VERSION),
400
+ value.owner,
401
+ value.reader,
402
+ hashText(value.serviceId),
403
+ value.intentId ?? "0x" + "00".repeat(32),
404
+ value.expiresAt,
405
+ value.nonce
406
+ ]
407
+ )
408
+ );
305
409
  }
306
410
  function conditionalHashMessage(hash) {
307
411
  return hash;
@@ -3225,6 +3329,7 @@ var SPICE_COMBINED_FEE_RECIPIENT = SPICE_GAS_FEE_RECIPIENT;
3225
3329
  // Annotate the CommonJS export names for ESM import in node:
3226
3330
  0 && (module.exports = {
3227
3331
  CHAINS,
3332
+ CONDITIONAL_INTENT_UNTIL_CANCELLED,
3228
3333
  CONDITIONAL_INTENT_VERSION,
3229
3334
  ChainBatchHashAbi,
3230
3335
  DELEGATE_ABI,
package/dist/index.js CHANGED
@@ -53,6 +53,7 @@ async function getRecentBlock(publicClient) {
53
53
 
54
54
  // src/conditionalIntents.ts
55
55
  import { encodeAbiParameters as encodeAbiParameters2, keccak256 as keccak2562, stringToHex } from "viem";
56
+ var CONDITIONAL_INTENT_UNTIL_CANCELLED = 253402300799n;
56
57
  var CONDITIONAL_INTENT_VERSION = 1;
57
58
  var callTuple = [
58
59
  { name: "to", type: "address" },
@@ -73,44 +74,97 @@ var batchTuple = [
73
74
  ];
74
75
  var zeroAddress = "0x0000000000000000000000000000000000000000";
75
76
  function encodePlanTransfer(transfer) {
76
- if (transfer.from === "solver") return [1, zeroAddress, transfer.to, transfer.token, transfer.amount];
77
- if (transfer.from === "escrow") return [2, zeroAddress, transfer.to, transfer.token, transfer.amount];
78
- return [0, transfer.from, transfer.to, transfer.token, transfer.amount];
77
+ if (transfer.from === "solver")
78
+ return [
79
+ 1,
80
+ zeroAddress,
81
+ transfer.to,
82
+ transfer.token,
83
+ transfer.amount
84
+ ];
85
+ if (transfer.from === "escrow")
86
+ return [
87
+ 2,
88
+ zeroAddress,
89
+ transfer.to,
90
+ transfer.token,
91
+ transfer.amount
92
+ ];
93
+ return [
94
+ 0,
95
+ transfer.from,
96
+ transfer.to,
97
+ transfer.token,
98
+ transfer.amount
99
+ ];
79
100
  }
80
- function hashConditionalExecutionPlan(batches, delegationAuthorizations = []) {
101
+ function hashConditionalExecutionPlan(batches, delegationAuthorizations = [], waits = []) {
81
102
  const normalized = batches.map((batch) => [
82
103
  BigInt(batch.chainId),
83
104
  batch.calls,
84
105
  batch.tokenTransfers.map(encodePlanTransfer)
85
106
  ]);
86
- return keccak2562(encodeAbiParameters2(
87
- [
88
- { type: "bytes32" },
89
- { type: "uint256" },
90
- { type: "tuple[]", components: batchTuple },
91
- { type: "tuple[]", components: [
92
- { name: "address", type: "address" },
93
- { name: "chainId", type: "uint256" },
94
- { name: "nonce", type: "uint256" },
95
- { name: "r", type: "bytes32" },
96
- { name: "s", type: "bytes32" },
97
- { name: "yParity", type: "uint8" }
98
- ] }
99
- ],
100
- [
101
- keccak2562(stringToHex("spice.conditional.execution-plan")),
102
- BigInt(CONDITIONAL_INTENT_VERSION),
103
- normalized,
104
- delegationAuthorizations.map((auth) => [
105
- auth.address,
106
- BigInt(auth.chainId),
107
- BigInt(auth.nonce),
108
- auth.r,
109
- auth.s,
110
- auth.yParity ?? 0
111
- ])
112
- ]
113
- ));
107
+ const baseHash = keccak2562(
108
+ encodeAbiParameters2(
109
+ [
110
+ { type: "bytes32" },
111
+ { type: "uint256" },
112
+ { type: "tuple[]", components: batchTuple },
113
+ {
114
+ type: "tuple[]",
115
+ components: [
116
+ { name: "address", type: "address" },
117
+ { name: "chainId", type: "uint256" },
118
+ { name: "nonce", type: "uint256" },
119
+ { name: "r", type: "bytes32" },
120
+ { name: "s", type: "bytes32" },
121
+ { name: "yParity", type: "uint8" }
122
+ ]
123
+ }
124
+ ],
125
+ [
126
+ keccak2562(stringToHex("spice.conditional.execution-plan")),
127
+ BigInt(CONDITIONAL_INTENT_VERSION),
128
+ normalized,
129
+ delegationAuthorizations.map((auth) => [
130
+ auth.address,
131
+ BigInt(auth.chainId),
132
+ BigInt(auth.nonce),
133
+ auth.r,
134
+ auth.s,
135
+ auth.yParity ?? 0
136
+ ])
137
+ ]
138
+ )
139
+ );
140
+ if (!waits.length) return baseHash;
141
+ return keccak2562(
142
+ encodeAbiParameters2(
143
+ [
144
+ { type: "bytes32" },
145
+ { type: "bytes32" },
146
+ {
147
+ type: "tuple[]",
148
+ components: [
149
+ { name: "batchIndex", type: "uint256" },
150
+ { name: "to", type: "address" },
151
+ { name: "data", type: "bytes" },
152
+ { name: "expected", type: "uint256" }
153
+ ]
154
+ }
155
+ ],
156
+ [
157
+ keccak2562(stringToHex("spice.conditional.execution-waits.v1")),
158
+ baseHash,
159
+ waits.map((w) => ({
160
+ batchIndex: BigInt(w.batchIndex),
161
+ to: w.to,
162
+ data: w.data,
163
+ expected: w.expected
164
+ }))
165
+ ]
166
+ )
167
+ );
114
168
  }
115
169
  var authorizationTypes = [
116
170
  { name: "domain", type: "bytes32" },
@@ -136,76 +190,125 @@ function semanticsValue(value) {
136
190
  return value === "state" ? 0 : 1;
137
191
  }
138
192
  function hashConditionalIntentAuthorization(value) {
139
- return keccak2562(encodeAbiParameters2(authorizationTypes, [
140
- hashText("spice.conditional.authorization"),
141
- BigInt(CONDITIONAL_INTENT_VERSION),
142
- value.owner,
143
- hashText(value.clientId),
144
- hashText(value.serviceId),
145
- value.authorizationNonce,
146
- value.executionDigest,
147
- value.executionPlanHash,
148
- value.triggerSpecificationHash,
149
- value.evaluator,
150
- semanticsValue(value.semantics),
151
- value.maxSignalAgeSeconds,
152
- value.validAfter,
153
- value.expiresAt,
154
- BigInt(value.maxExecutions)
155
- ]));
193
+ const original = keccak2562(
194
+ encodeAbiParameters2(authorizationTypes, [
195
+ hashText("spice.conditional.authorization"),
196
+ BigInt(CONDITIONAL_INTENT_VERSION),
197
+ value.owner,
198
+ hashText(value.clientId),
199
+ hashText(value.serviceId),
200
+ value.authorizationNonce,
201
+ value.executionDigest,
202
+ value.executionPlanHash,
203
+ value.triggerSpecificationHash,
204
+ value.evaluator,
205
+ semanticsValue(value.semantics),
206
+ value.maxSignalAgeSeconds,
207
+ value.validAfter,
208
+ value.expiresAt,
209
+ BigInt(value.maxExecutions)
210
+ ])
211
+ );
212
+ return value.replacesIntentId ? keccak2562(
213
+ encodeAbiParameters2(
214
+ [{ type: "bytes32" }, { type: "bytes32" }, { type: "bytes32" }],
215
+ [
216
+ hashText("spice.conditional.amendment.v1"),
217
+ value.replacesIntentId,
218
+ original
219
+ ]
220
+ )
221
+ ) : original;
156
222
  }
157
223
  function getConditionalIntentId(authorizationHash) {
158
- return keccak2562(encodeAbiParameters2(
159
- [{ type: "bytes32" }, { type: "bytes32" }],
160
- [hashText("spice.conditional.intent-id"), authorizationHash]
161
- ));
224
+ return keccak2562(
225
+ encodeAbiParameters2(
226
+ [{ type: "bytes32" }, { type: "bytes32" }],
227
+ [hashText("spice.conditional.intent-id"), authorizationHash]
228
+ )
229
+ );
162
230
  }
163
231
  function hashConditionalSignal(value, serviceId) {
164
- return keccak2562(encodeAbiParameters2(
165
- [
166
- { name: "domain", type: "bytes32" },
167
- { name: "version", type: "uint256" },
168
- { name: "serviceIdHash", type: "bytes32" },
169
- { name: "intentId", type: "bytes32" },
170
- { name: "executionDigest", type: "bytes32" },
171
- { name: "triggerSpecificationHash", type: "bytes32" },
172
- { name: "signalIdHash", type: "bytes32" },
173
- { name: "observedAt", type: "uint256" },
174
- { name: "validUntil", type: "uint256" },
175
- { name: "satisfied", type: "bool" },
176
- { name: "evidenceHash", type: "bytes32" }
177
- ],
178
- [hashText("spice.conditional.signal"), BigInt(CONDITIONAL_INTENT_VERSION), hashText(serviceId), value.intentId, value.executionDigest, value.triggerSpecificationHash, hashText(value.signalId), value.observedAt, value.validUntil, value.satisfied, value.evidenceHash ?? "0x" + "00".repeat(32)]
179
- ));
232
+ return keccak2562(
233
+ encodeAbiParameters2(
234
+ [
235
+ { name: "domain", type: "bytes32" },
236
+ { name: "version", type: "uint256" },
237
+ { name: "serviceIdHash", type: "bytes32" },
238
+ { name: "intentId", type: "bytes32" },
239
+ { name: "executionDigest", type: "bytes32" },
240
+ { name: "triggerSpecificationHash", type: "bytes32" },
241
+ { name: "signalIdHash", type: "bytes32" },
242
+ { name: "observedAt", type: "uint256" },
243
+ { name: "validUntil", type: "uint256" },
244
+ { name: "satisfied", type: "bool" },
245
+ { name: "evidenceHash", type: "bytes32" }
246
+ ],
247
+ [
248
+ hashText("spice.conditional.signal"),
249
+ BigInt(CONDITIONAL_INTENT_VERSION),
250
+ hashText(serviceId),
251
+ value.intentId,
252
+ value.executionDigest,
253
+ value.triggerSpecificationHash,
254
+ hashText(value.signalId),
255
+ value.observedAt,
256
+ value.validUntil,
257
+ value.satisfied,
258
+ value.evidenceHash ?? "0x" + "00".repeat(32)
259
+ ]
260
+ )
261
+ );
180
262
  }
181
263
  function hashConditionalCancellation(value) {
182
- return keccak2562(encodeAbiParameters2(
183
- [
184
- { name: "domain", type: "bytes32" },
185
- { name: "version", type: "uint256" },
186
- { name: "owner", type: "address" },
187
- { name: "serviceIdHash", type: "bytes32" },
188
- { name: "intentId", type: "bytes32" },
189
- { name: "cancellationNonce", type: "uint256" },
190
- { name: "expiresAt", type: "uint256" }
191
- ],
192
- [hashText("spice.conditional.cancel"), BigInt(CONDITIONAL_INTENT_VERSION), value.owner, hashText(value.serviceId), value.intentId, value.cancellationNonce, value.expiresAt]
193
- ));
264
+ return keccak2562(
265
+ encodeAbiParameters2(
266
+ [
267
+ { name: "domain", type: "bytes32" },
268
+ { name: "version", type: "uint256" },
269
+ { name: "owner", type: "address" },
270
+ { name: "serviceIdHash", type: "bytes32" },
271
+ { name: "intentId", type: "bytes32" },
272
+ { name: "cancellationNonce", type: "uint256" },
273
+ { name: "expiresAt", type: "uint256" }
274
+ ],
275
+ [
276
+ hashText("spice.conditional.cancel"),
277
+ BigInt(CONDITIONAL_INTENT_VERSION),
278
+ value.owner,
279
+ hashText(value.serviceId),
280
+ value.intentId,
281
+ value.cancellationNonce,
282
+ value.expiresAt
283
+ ]
284
+ )
285
+ );
194
286
  }
195
287
  function hashConditionalReadAuthorization(value) {
196
- return keccak2562(encodeAbiParameters2(
197
- [
198
- { name: "domain", type: "bytes32" },
199
- { name: "version", type: "uint256" },
200
- { name: "owner", type: "address" },
201
- { name: "reader", type: "address" },
202
- { name: "serviceIdHash", type: "bytes32" },
203
- { name: "intentId", type: "bytes32" },
204
- { name: "expiresAt", type: "uint256" },
205
- { name: "nonce", type: "uint256" }
206
- ],
207
- [hashText("spice.conditional.read"), BigInt(CONDITIONAL_INTENT_VERSION), value.owner, value.reader, hashText(value.serviceId), value.intentId ?? "0x" + "00".repeat(32), value.expiresAt, value.nonce]
208
- ));
288
+ return keccak2562(
289
+ encodeAbiParameters2(
290
+ [
291
+ { name: "domain", type: "bytes32" },
292
+ { name: "version", type: "uint256" },
293
+ { name: "owner", type: "address" },
294
+ { name: "reader", type: "address" },
295
+ { name: "serviceIdHash", type: "bytes32" },
296
+ { name: "intentId", type: "bytes32" },
297
+ { name: "expiresAt", type: "uint256" },
298
+ { name: "nonce", type: "uint256" }
299
+ ],
300
+ [
301
+ hashText("spice.conditional.read"),
302
+ BigInt(CONDITIONAL_INTENT_VERSION),
303
+ value.owner,
304
+ value.reader,
305
+ hashText(value.serviceId),
306
+ value.intentId ?? "0x" + "00".repeat(32),
307
+ value.expiresAt,
308
+ value.nonce
309
+ ]
310
+ )
311
+ );
209
312
  }
210
313
  function conditionalHashMessage(hash) {
211
314
  return hash;
@@ -3136,6 +3239,7 @@ var SPICE_PLATFORM_FEE_RECIPIENT = "0xa4bB4c1D188B94c0cF691Dad213dE24169fA0A50";
3136
3239
  var SPICE_COMBINED_FEE_RECIPIENT = SPICE_GAS_FEE_RECIPIENT;
3137
3240
  export {
3138
3241
  CHAINS,
3242
+ CONDITIONAL_INTENT_UNTIL_CANCELLED,
3139
3243
  CONDITIONAL_INTENT_VERSION,
3140
3244
  ChainBatchHashAbi,
3141
3245
  DELEGATE_ABI,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spicenet-io/spiceflow-core",
3
- "version": "0.9.0",
3
+ "version": "0.10.0-order-amendments.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",