@ftptech/canton-agent-wallet 0.5.1 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-args.d.ts.map +1 -1
- package/dist/cli-args.js +0 -10
- package/dist/cli-args.js.map +1 -1
- package/dist/cli.js +10 -126
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/pay.d.ts.map +1 -1
- package/dist/pay.js +12 -11
- package/dist/pay.js.map +1 -1
- package/dist/relay-client.d.ts +0 -79
- package/dist/relay-client.d.ts.map +1 -1
- package/dist/relay-client.js +0 -27
- package/dist/relay-client.js.map +1 -1
- package/dist/relay-signer.d.ts +10 -10
- package/dist/relay-signer.d.ts.map +1 -1
- package/dist/relay-signer.js +4 -72
- package/dist/relay-signer.js.map +1 -1
- package/dist/tx.d.ts +1 -160
- package/dist/tx.d.ts.map +1 -1
- package/dist/tx.js +61 -356
- package/dist/tx.js.map +1 -1
- package/dist/verify-prepared.d.ts +0 -153
- package/dist/verify-prepared.d.ts.map +1 -1
- package/dist/verify-prepared.js +0 -642
- package/dist/verify-prepared.js.map +1 -1
- package/package.json +2 -2
package/dist/tx.js
CHANGED
|
@@ -7,14 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { signHashB64 } from "./keys.js";
|
|
9
9
|
import { resolveHashBinding } from "./hash-binding.js";
|
|
10
|
-
import { assertHashBinding, assertPreparedTransferMatches, assertPreparedSelfPreapproval, assertPreparedAcceptMatches,
|
|
10
|
+
import { assertHashBinding, assertPreparedTransferMatches, assertPreparedSelfPreapproval, assertPreparedAcceptMatches, } from "./verify-prepared.js";
|
|
11
11
|
const TI_IFACE = "#splice-api-token-transfer-instruction-v1:Splice.Api.Token.TransferInstructionV1:TransferInstruction";
|
|
12
|
-
/** The AllocationV1 interface the reclaim (`Allocation_Withdraw`) choice is
|
|
13
|
-
* exercised THROUGH. Like TI_IFACE, the `#`-prefixed package name lets the
|
|
14
|
-
* participant resolve the interface package at prepare time (the concrete
|
|
15
|
-
* AmuletAllocation template implements it). CALLER INTENT — the verify arm
|
|
16
|
-
* pins the target contract id + the choice + own-party, never this string. */
|
|
17
|
-
const ALLOCATION_IFACE = "#splice-api-token-allocation-v1:Splice.Api.Token.AllocationV1:Allocation";
|
|
18
12
|
/**
|
|
19
13
|
* The instrument id the agent's self-custody wallet pays in: Canton Coin is the
|
|
20
14
|
* Splice "Amulet" instrument. This is CALLER INTENT — a fixed value the agent
|
|
@@ -26,22 +20,6 @@ const ALLOCATION_IFACE = "#splice-api-token-allocation-v1:Splice.Api.Token.Alloc
|
|
|
26
20
|
* the instrument id to this constant; the admin is validated only positionally.
|
|
27
21
|
*/
|
|
28
22
|
const EXPECTED_INSTRUMENT_ID = "Amulet";
|
|
29
|
-
/** AllocationFactory interface template id for `AllocationFactory_Allocate`. A
|
|
30
|
-
* PROTOCOL CONSTANT (the `#`-prefix resolves to the current Splice package), so
|
|
31
|
-
* the client uses it DIRECTLY rather than trusting the relay-supplied value —
|
|
32
|
-
* the contract cid it exercises against is pinned separately in
|
|
33
|
-
* verify-before-sign. Mirrors `ALLOCATION_FACTORY_TEMPLATE_ID` in
|
|
34
|
-
* @ftptech/x402-canton-core (kept local to avoid an agent-wallet→core dep). */
|
|
35
|
-
const ALLOCATION_FACTORY_TEMPLATE_ID = "#splice-api-token-allocation-instruction-v1:Splice.Api.Token.AllocationInstructionV1:AllocationFactory";
|
|
36
|
-
/** The x402-direct "Design B" standing-consent templates the agent creates by
|
|
37
|
-
* SIGNING ITS OWN create (signatory = the agent). The `#`-prefixed package NAME
|
|
38
|
-
* lets the participant resolve its vetted version at prepare time — the same
|
|
39
|
-
* convention the escrow offer / TI / Allocation interface refs use above. CALLER
|
|
40
|
-
* INTENT — the verify arm pins the created template's module:entity + the consent's
|
|
41
|
-
* {self, facilitator} principals, never this string. (Deployed package-id, for
|
|
42
|
-
* reference: x402-direct-0.1.0-f819db3288986a7f6c3157359ed02040e0a6080ceb6890309ecbb71eeeb93780.) */
|
|
43
|
-
const X402_DIRECT_SENDER_CONSENT_TEMPLATE_ID = "#x402-direct:X402Direct:SenderConsent";
|
|
44
|
-
const X402_DIRECT_MERCHANT_CONSENT_TEMPLATE_ID = "#x402-direct:X402Direct:MerchantConsent";
|
|
45
23
|
function rid(prefix) {
|
|
46
24
|
return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
47
25
|
}
|
|
@@ -88,35 +66,11 @@ synchronizerId) {
|
|
|
88
66
|
// Bind to the EXACT bytes we will submit (single source `prep`, no TOCTOU).
|
|
89
67
|
const preparedTransaction = prep.preparedTransaction;
|
|
90
68
|
// VERIFY-BEFORE-SIGN: never sign a relay-prepared command we didn't author.
|
|
91
|
-
// `verify` is required on EVERY path (transfer/
|
|
92
|
-
//
|
|
69
|
+
// `verify` is required on EVERY path (transfer/accept), so there is no branch
|
|
70
|
+
// that reaches signHashB64 ungated.
|
|
93
71
|
if (verify.kind === "cip56") {
|
|
94
72
|
assertPreparedTransferMatches(preparedTransaction, verify.expect);
|
|
95
73
|
}
|
|
96
|
-
else if (verify.kind === "allocation") {
|
|
97
|
-
// allocation-api path: structurally prove the prepared tx is a single
|
|
98
|
-
// AllocationFactory_Allocate locking funds with the intended
|
|
99
|
-
// sender/receiver/amount/instrument AND naming the facilitator (not an
|
|
100
|
-
// attacker) as settlement.executor, with a valid deadline window.
|
|
101
|
-
assertPreparedAllocationMatches(preparedTransaction, verify.expect);
|
|
102
|
-
}
|
|
103
|
-
else if (verify.kind === "allocation-withdraw") {
|
|
104
|
-
// reclaim path (Track B): structurally prove the prepared tx is a single
|
|
105
|
-
// Allocation_Withdraw on the caller's OWN allocation cid, submitted by the
|
|
106
|
-
// agent, with no outbound transfer leg and no foreign party — Allocation_Withdraw
|
|
107
|
-
// returns funds to the sender by construction, so anything else is a redirect.
|
|
108
|
-
assertPreparedAllocationWithdrawMatches(preparedTransaction, verify.expect);
|
|
109
|
-
}
|
|
110
|
-
else if (verify.kind === "consent-create") {
|
|
111
|
-
// x402-direct "Design B" onboarding: structurally prove the prepared tx is a
|
|
112
|
-
// single SenderConsent / MerchantConsent CREATE by the agent (the signing
|
|
113
|
-
// party), naming exactly {selfParty, facilitator} — no value-moving choice, no
|
|
114
|
-
// injected outbound leg, no relay-substituted facilitator, no foreign-party
|
|
115
|
-
// submission. Creating a standing consent moves NO funds (it only captures the
|
|
116
|
-
// party's one-time authorization), so anything else is a relay-injected drain or
|
|
117
|
-
// a substituted facilitator that could later settle the agent's allocations.
|
|
118
|
-
assertPreparedConsentCreateMatches(preparedTransaction, verify.expect);
|
|
119
|
-
}
|
|
120
74
|
else {
|
|
121
75
|
// claim path: structurally prove the prepared tx is a single inbound
|
|
122
76
|
// TransferInstruction_Accept by the agent, not an outbound drain.
|
|
@@ -282,14 +236,14 @@ export async function payViaTransferFactory(relay, wallet, opts) {
|
|
|
282
236
|
};
|
|
283
237
|
}
|
|
284
238
|
/**
|
|
285
|
-
* Per-wallet in-process reservation of input-holding cids.
|
|
286
|
-
*
|
|
287
|
-
* BUT two concurrent
|
|
239
|
+
* Per-wallet in-process reservation of input-holding cids. The token-standard
|
|
240
|
+
* transfer path has NO nonce, so concurrent pays from one wallet are allowed —
|
|
241
|
+
* BUT two concurrent transfers must not pick the SAME Amulet holding: the first
|
|
288
242
|
* to settle archives it, and the second's already-prepared tx then references an
|
|
289
243
|
* archived contract → HTTP 400 at /v2/interactive-submission/prepare (or at
|
|
290
|
-
* execute). To keep concurrent
|
|
244
|
+
* execute). To keep concurrent transfers disjoint we pick the SMALLEST single
|
|
291
245
|
* free holding that covers the amount and reserve its cid for the duration of the
|
|
292
|
-
* prepare→sign→execute dance; a sibling
|
|
246
|
+
* prepare→sign→execute dance; a sibling transfer then skips it and picks the next
|
|
293
247
|
* one. Released in `finally` (success OR throw).
|
|
294
248
|
*
|
|
295
249
|
* LIMITATION (documented): this Map is in-memory, so it only de-conflicts
|
|
@@ -297,8 +251,7 @@ export async function payViaTransferFactory(relay, wallet, opts) {
|
|
|
297
251
|
* wallet can still pick the same holding — that loser fails closed (400) and the
|
|
298
252
|
* client's bounded re-pay loop retries with a fresh balance read, by which point
|
|
299
253
|
* the winner has released. No double-spend is possible: verify-before-sign + the
|
|
300
|
-
* facilitator re-validate every settle, so a lost race only costs a retry.
|
|
301
|
-
* v1 nonce path keeps its cross-process pay-lock; see pay.ts.)
|
|
254
|
+
* facilitator re-validate every settle, so a lost race only costs a retry.
|
|
302
255
|
*/
|
|
303
256
|
const reservedHoldings = new Map();
|
|
304
257
|
/** @internal Exported for unit tests (disjoint selection + release). Not part of
|
|
@@ -380,225 +333,12 @@ export function isStaleInputHoldingError(err) {
|
|
|
380
333
|
for (let depth = 0; cur && depth < 6; depth++) {
|
|
381
334
|
const e = cur;
|
|
382
335
|
const hay = `${typeof e.message === "string" ? e.message : ""} ${typeof e.detail === "string" ? e.detail : ""}`;
|
|
383
|
-
if (/UNKNOWN_CONTRACT_SYNCHRONIZERS|have been archived|CONTRACT_NOT_FOUND|Contract could not be found/i.test(hay))
|
|
336
|
+
if (/UNKNOWN_CONTRACT_SYNCHRONIZERS|have been archived|CONTRACT_NOT_FOUND|Contract could not be found|INACTIVE_CONTRACTS|inactive contract/i.test(hay))
|
|
384
337
|
return true;
|
|
385
338
|
cur = e.cause;
|
|
386
339
|
}
|
|
387
340
|
return false;
|
|
388
341
|
}
|
|
389
|
-
/**
|
|
390
|
-
* allocation-api (CIP-56 DVP) — exercise `AllocationFactory_Allocate` to LOCK
|
|
391
|
-
* the agent's funds into an Allocation naming the facilitator as
|
|
392
|
-
* settlement.executor. The facilitator later submits Allocation_ExecuteTransfer
|
|
393
|
-
* (sponsored gas) to settle. The agent signs only the lock here (its own key;
|
|
394
|
-
* the choice's sole controller is transferLeg.sender = the agent) — no gas, no
|
|
395
|
-
* nonce, no merchant preapproval.
|
|
396
|
-
*
|
|
397
|
-
* Mirrors the cip56 `transfer` flow: resolve the allocation factory via the
|
|
398
|
-
* relay → build the allocate exercise → VERIFY-before-sign over the EXACT
|
|
399
|
-
* prepared bytes (pinning sender/receiver/amount/instrument + the executor +
|
|
400
|
-
* the deadline window) → sign locally → execute via relay → read back the
|
|
401
|
-
* created Allocation cid from THIS transaction's events.
|
|
402
|
-
*
|
|
403
|
-
* SECURITY: every money/escrow-critical field the verifier pins (sender == own
|
|
404
|
-
* party, receiver == merchant payTo, amount == required, instrument == intent,
|
|
405
|
-
* settlement.executor == extra.feePayer) is CALLER INTENT passed in `opts`,
|
|
406
|
-
* NOT taken from the relay's resolve response. The relay-resolved factory
|
|
407
|
-
* refs/admin/context are used only to BUILD the exercise; they widen nothing the
|
|
408
|
-
* agent will sign. The cid returned moves no funds on its own — the facilitator
|
|
409
|
-
* independently re-validates every field at /verify + /settle, and only the
|
|
410
|
-
* executor (+ baked-in sender/receiver auth) can ever move the locked funds.
|
|
411
|
-
*/
|
|
412
|
-
export async function allocate(relay, wallet, opts) {
|
|
413
|
-
if (!(opts.settleBeforeSeconds > opts.allocateBeforeSeconds)) {
|
|
414
|
-
throw new Error(`allocate: settleBeforeSeconds (${opts.settleBeforeSeconds}) must be > ` +
|
|
415
|
-
`allocateBeforeSeconds (${opts.allocateBeforeSeconds})`);
|
|
416
|
-
}
|
|
417
|
-
const bal = await relay.balance(wallet.party);
|
|
418
|
-
// Reserve DISJOINT input holdings so concurrent allocates from THIS wallet
|
|
419
|
-
// (allocation has no nonce → concurrency is allowed) don't collide on the same
|
|
420
|
-
// Amulet — the first to settle archives it and the loser's prepared tx then
|
|
421
|
-
// 400s on an archived contract. Held until the allocate commits (its inputs are
|
|
422
|
-
// archived on-ledger) or throws; released in the finally below either way.
|
|
423
|
-
const reservation = reserveHolding(wallet.party, bal.holdings, opts.amount);
|
|
424
|
-
const inputHoldingCids = reservation.cids;
|
|
425
|
-
let updateId;
|
|
426
|
-
try {
|
|
427
|
-
const f = await relay.resolveAllocationFactory({
|
|
428
|
-
sender: wallet.party,
|
|
429
|
-
receiver: opts.receiver,
|
|
430
|
-
amount: opts.amount,
|
|
431
|
-
executor: opts.executor,
|
|
432
|
-
allocateBeforeSeconds: opts.allocateBeforeSeconds,
|
|
433
|
-
settleBeforeSeconds: opts.settleBeforeSeconds,
|
|
434
|
-
...(opts.transferMeta ? { meta: opts.transferMeta } : {}),
|
|
435
|
-
});
|
|
436
|
-
const now = Date.now();
|
|
437
|
-
// Mirror the relay's resolve deadlines so verify-before-sign sees the same
|
|
438
|
-
// window the relay prepared against. The verify arm asserts allocateBefore <
|
|
439
|
-
// settleBefore and settleBefore in the future; we compute them here from the
|
|
440
|
-
// caller-intent relative seconds so the relay cannot widen them silently.
|
|
441
|
-
const requestedAt = new Date(now - 2000).toISOString();
|
|
442
|
-
const allocateBefore = new Date(now + opts.allocateBeforeSeconds * 1000).toISOString();
|
|
443
|
-
const settleBefore = new Date(now + opts.settleBeforeSeconds * 1000).toISOString();
|
|
444
|
-
const allocation = {
|
|
445
|
-
settlement: {
|
|
446
|
-
executor: opts.executor,
|
|
447
|
-
settlementRef: f.settlementRef,
|
|
448
|
-
requestedAt,
|
|
449
|
-
allocateBefore,
|
|
450
|
-
settleBefore,
|
|
451
|
-
meta: { values: {} },
|
|
452
|
-
},
|
|
453
|
-
transferLegId: f.transferLegId,
|
|
454
|
-
transferLeg: {
|
|
455
|
-
sender: wallet.party,
|
|
456
|
-
receiver: opts.receiver,
|
|
457
|
-
amount: opts.amount,
|
|
458
|
-
instrumentId: f.instrumentId,
|
|
459
|
-
meta: { values: opts.transferMeta ?? {} },
|
|
460
|
-
},
|
|
461
|
-
};
|
|
462
|
-
const ex = {
|
|
463
|
-
ExerciseCommand: {
|
|
464
|
-
templateId: ALLOCATION_FACTORY_TEMPLATE_ID,
|
|
465
|
-
contractId: f.factoryId,
|
|
466
|
-
choice: "AllocationFactory_Allocate",
|
|
467
|
-
choiceArgument: {
|
|
468
|
-
expectedAdmin: f.instrumentId.admin,
|
|
469
|
-
allocation,
|
|
470
|
-
requestedAt,
|
|
471
|
-
inputHoldingCids,
|
|
472
|
-
extraArgs: { context: f.choiceContextData, meta: { values: {} } },
|
|
473
|
-
},
|
|
474
|
-
},
|
|
475
|
-
};
|
|
476
|
-
updateId = await prepareSignExecute(relay, wallet, [ex], f.disclosedContracts, {
|
|
477
|
-
kind: "allocation",
|
|
478
|
-
expect: {
|
|
479
|
-
// Trust anchors are CALLER INTENT only — never the relay's resolve response:
|
|
480
|
-
sender: wallet.party,
|
|
481
|
-
// OWN-PARTY PIN: the allocate controller IS the sender, so the prepared
|
|
482
|
-
// transferLeg.sender MUST equal the agent's own party. Threaded from
|
|
483
|
-
// wallet.party (known independently of the relay). Fails closed on any
|
|
484
|
-
// sender/receiver transposition regardless of the unconfirmed field order.
|
|
485
|
-
expectedSender: wallet.party,
|
|
486
|
-
receiver: opts.receiver,
|
|
487
|
-
amount: opts.amount,
|
|
488
|
-
instrumentId: opts.expectInstrumentId ?? EXPECTED_INSTRUMENT_ID,
|
|
489
|
-
executor: opts.executor,
|
|
490
|
-
// Pin the exercise's target to the SAME factory cid we built against
|
|
491
|
-
// (resolve→prepare TOCTOU defense-in-depth).
|
|
492
|
-
expectedContractId: f.factoryId,
|
|
493
|
-
...(opts.expectInstrumentAdmin !== undefined
|
|
494
|
-
? { instrumentAdmin: opts.expectInstrumentAdmin }
|
|
495
|
-
: {}),
|
|
496
|
-
synchronizerId: opts.synchronizerId,
|
|
497
|
-
nowMs: Date.now(),
|
|
498
|
-
},
|
|
499
|
-
}, opts.hashBinding, opts.synchronizerId);
|
|
500
|
-
}
|
|
501
|
-
finally {
|
|
502
|
-
// Allocate committed (its input holdings are now archived on-ledger) or threw
|
|
503
|
-
// — either way the in-process reservation has done its job; free the cids so a
|
|
504
|
-
// sibling concurrent allocate (or a retry) can pick them.
|
|
505
|
-
reservation.release();
|
|
506
|
-
}
|
|
507
|
-
// Read THIS transaction's events (via the relay) to surface the created
|
|
508
|
-
// Allocation / AllocationInstruction cid. The relay resolves it for us (the
|
|
509
|
-
// agent is relay-only). The cid moves no funds; the facilitator re-validates
|
|
510
|
-
// and executes.
|
|
511
|
-
const alloc = await relay.allocationResult(wallet.party, updateId);
|
|
512
|
-
return {
|
|
513
|
-
payerParty: wallet.party,
|
|
514
|
-
allocationCid: alloc.allocationCid ?? null,
|
|
515
|
-
allocationInstructionCid: alloc.allocationInstructionCid ?? null,
|
|
516
|
-
updateId,
|
|
517
|
-
};
|
|
518
|
-
}
|
|
519
|
-
/**
|
|
520
|
-
* x402-direct "Design B" onboarding (SENDER side, ONCE-TOTAL). Create the standing
|
|
521
|
-
* `SenderConsent {sender = self, facilitator}` the facilitator later uses to MINT
|
|
522
|
-
* the both-party DirectSettlementConsent for ANY merchant it names. The choice's
|
|
523
|
-
* sole signatory is the SENDER = the agent, so the agent signs only its own create
|
|
524
|
-
* (its own key; no gas, no facilitator signature). Creating the consent MOVES NO
|
|
525
|
-
* FUNDS — it only durably captures the sender's one-time authorization.
|
|
526
|
-
*
|
|
527
|
-
* Mirrors the cip56/v1/allocate flows: build the create exercise → VERIFY-before-sign
|
|
528
|
-
* over the EXACT prepared bytes (pinning the created template + the consent's
|
|
529
|
-
* {sender == self, facilitator} principals + act_as == self, and the foreign-party
|
|
530
|
-
* backstop allowing ONLY {self, facilitator}) → sign locally → execute via the relay
|
|
531
|
-
* → return the create's updateId.
|
|
532
|
-
*
|
|
533
|
-
* SECURITY: every pinned field is CALLER INTENT passed in `opts`, never taken from
|
|
534
|
-
* the relay. A relay-substituted facilitator (which could later mint a both-party
|
|
535
|
-
* consent and settle the agent's allocations) is rejected by the [1] facilitator pin
|
|
536
|
-
* + the foreign-party backstop; a relay-injected value-moving exercise / extra leg /
|
|
537
|
-
* foreign submitter is rejected by the create-root invariant. The cid moves no funds
|
|
538
|
-
* on its own — the facilitator's later DirectSettlementConsent_Execute re-validates
|
|
539
|
-
* every term against the live allocation.
|
|
540
|
-
*/
|
|
541
|
-
export async function createSenderConsent(relay, wallet, opts) {
|
|
542
|
-
return createDirectConsent(relay, wallet, {
|
|
543
|
-
consent: "sender",
|
|
544
|
-
templateId: X402_DIRECT_SENDER_CONSENT_TEMPLATE_ID,
|
|
545
|
-
// SenderConsent create-args (Daml declaration order): [0] sender, [1] facilitator.
|
|
546
|
-
createArguments: { sender: wallet.party, facilitator: opts.facilitator },
|
|
547
|
-
facilitator: opts.facilitator,
|
|
548
|
-
synchronizerId: opts.synchronizerId,
|
|
549
|
-
...(opts.hashBinding ? { hashBinding: opts.hashBinding } : {}),
|
|
550
|
-
});
|
|
551
|
-
}
|
|
552
|
-
/**
|
|
553
|
-
* x402-direct "Design B" onboarding (MERCHANT side, ONCE-TOTAL). Symmetric to
|
|
554
|
-
* `createSenderConsent`: create the standing `MerchantConsent {merchant = self,
|
|
555
|
-
* facilitator}` the facilitator later uses to MINT the both-party
|
|
556
|
-
* DirectSettlementConsent (MerchantConsent_Accept) from ANY sender it names. The
|
|
557
|
-
* choice's sole signatory is the MERCHANT = the agent. Creating the consent MOVES NO
|
|
558
|
-
* FUNDS. Same verify-before-sign guarantees as the sender side.
|
|
559
|
-
*/
|
|
560
|
-
export async function createMerchantConsent(relay, wallet, opts) {
|
|
561
|
-
return createDirectConsent(relay, wallet, {
|
|
562
|
-
consent: "merchant",
|
|
563
|
-
templateId: X402_DIRECT_MERCHANT_CONSENT_TEMPLATE_ID,
|
|
564
|
-
// MerchantConsent create-args (Daml declaration order): [0] merchant, [1] facilitator.
|
|
565
|
-
createArguments: { merchant: wallet.party, facilitator: opts.facilitator },
|
|
566
|
-
facilitator: opts.facilitator,
|
|
567
|
-
synchronizerId: opts.synchronizerId,
|
|
568
|
-
...(opts.hashBinding ? { hashBinding: opts.hashBinding } : {}),
|
|
569
|
-
});
|
|
570
|
-
}
|
|
571
|
-
/** Shared create+verify+sign for the two standing x402-direct consents (the only
|
|
572
|
-
* difference is the template + the [0] field label). No funds move; the consent
|
|
573
|
-
* binds exactly {self, facilitator}. */
|
|
574
|
-
async function createDirectConsent(relay, wallet, args) {
|
|
575
|
-
const ex = {
|
|
576
|
-
CreateCommand: {
|
|
577
|
-
templateId: args.templateId,
|
|
578
|
-
createArguments: args.createArguments,
|
|
579
|
-
},
|
|
580
|
-
};
|
|
581
|
-
return prepareSignExecute(relay, wallet, [ex], [], // a bare consent create discloses nothing (signatory = the agent).
|
|
582
|
-
// VERIFY-before-sign: the prepared tx MUST be a single SenderConsent /
|
|
583
|
-
// MerchantConsent create by the agent naming exactly {self, facilitator} —
|
|
584
|
-
// never a relay-swapped value-moving choice, a substituted facilitator, an
|
|
585
|
-
// outbound drain, or a foreign-party submission.
|
|
586
|
-
{
|
|
587
|
-
kind: "consent-create",
|
|
588
|
-
expect: {
|
|
589
|
-
selfParty: wallet.party,
|
|
590
|
-
facilitator: args.facilitator,
|
|
591
|
-
consent: args.consent,
|
|
592
|
-
synchronizerId: args.synchronizerId,
|
|
593
|
-
nowMs: Date.now(),
|
|
594
|
-
},
|
|
595
|
-
},
|
|
596
|
-
// BUG FIX: default to resolveHashBinding() when the caller (e.g. the CLI
|
|
597
|
-
// merchant-onboard / sender-onboard) does not pass one — exactly like the
|
|
598
|
-
// reclaim/withdraw/accept paths. Without this, prepareSignExecute receives
|
|
599
|
-
// an empty binding and refuses to sign ("no hash recomputation available").
|
|
600
|
-
args.hashBinding ?? resolveHashBinding(), args.synchronizerId);
|
|
601
|
-
}
|
|
602
342
|
/**
|
|
603
343
|
* Accept every pending incoming transfer (e.g. the agent's initial funding).
|
|
604
344
|
*
|
|
@@ -636,67 +376,6 @@ export async function claimAll(relay, wallet, opts = {}) {
|
|
|
636
376
|
}
|
|
637
377
|
return { claimed: pending.length, updateIds };
|
|
638
378
|
}
|
|
639
|
-
/**
|
|
640
|
-
* Reclaim a locked allocation: exercise `Allocation_Withdraw` on the agent's own
|
|
641
|
-
* `AmuletAllocation`, returning its locked funds to the agent (Track B — "locked
|
|
642
|
-
* funds always recoverable"). The choice's sole controller is
|
|
643
|
-
* `allocation.transferLeg.sender` = the agent, and `Allocation_Withdraw` returns
|
|
644
|
-
* the funds to the sender BY CONSTRUCTION — there is no attacker-controllable
|
|
645
|
-
* destination in the choice argument.
|
|
646
|
-
*
|
|
647
|
-
* SECURITY: like every path, this is NOT exempt from verify-before-sign. A
|
|
648
|
-
* malicious relay could return a DIFFERENT choice that DOES move value to an
|
|
649
|
-
* attacker (Allocation_ExecuteTransfer / a TransferFactory_Transfer drain), a
|
|
650
|
-
* withdraw of a DIFFERENT allocation, an injected outbound transfer leg, or a
|
|
651
|
-
* foreign-party submission. We pass `kind: "allocation-withdraw"`, which
|
|
652
|
-
* structurally proves the prepared transaction is a single `Allocation_Withdraw`
|
|
653
|
-
* on EXACTLY `opts.allocationCid` (caller intent, REQUIRED contract-id pin),
|
|
654
|
-
* submitted by the agent (act_as == wallet.party), with NO foreign party
|
|
655
|
-
* anywhere — and binds the signed hash to those bytes (fail-closed by default,
|
|
656
|
-
* exactly like the accept/allocate paths). `opts.hashBinding` lets a programmatic
|
|
657
|
-
* caller supply a participant-conformant recompute; the CLI resolves it from the
|
|
658
|
-
* environment (default fail-closed).
|
|
659
|
-
*
|
|
660
|
-
* No caller-intent synchronizer is threaded (like the claim/accept path): the
|
|
661
|
-
* withdraw carries no caller-chosen domain — `prepareSignExecute` omits the
|
|
662
|
-
* synchronizerId arg.
|
|
663
|
-
*/
|
|
664
|
-
export async function reclaimAllocation(relay, wallet, opts) {
|
|
665
|
-
const hashBinding = opts.hashBinding ?? resolveHashBinding();
|
|
666
|
-
// Resolve the (possibly empty) withdraw choice-context + the disclosed
|
|
667
|
-
// AmuletAllocation contract via the relay (the agent has no Scan access).
|
|
668
|
-
const ctx = await relay.resolveWithdraw({ allocationCid: opts.allocationCid });
|
|
669
|
-
const ex = {
|
|
670
|
-
ExerciseCommand: {
|
|
671
|
-
// Exercise THROUGH the AllocationV1 interface; the concrete AmuletAllocation
|
|
672
|
-
// implements it. The choice's controller is transferLeg.sender = the agent.
|
|
673
|
-
templateId: ALLOCATION_IFACE,
|
|
674
|
-
contractId: opts.allocationCid,
|
|
675
|
-
choice: "Allocation_Withdraw",
|
|
676
|
-
choiceArgument: {
|
|
677
|
-
extraArgs: { context: ctx.choiceContextData, meta: { values: {} } },
|
|
678
|
-
},
|
|
679
|
-
},
|
|
680
|
-
};
|
|
681
|
-
return prepareSignExecute(relay, wallet, [ex], ctx.disclosedContracts,
|
|
682
|
-
// VERIFY-before-sign: the prepared tx MUST be a single Allocation_Withdraw on
|
|
683
|
-
// the caller's OWN allocation cid by the agent — never a relay-swapped choice,
|
|
684
|
-
// a different contract, an outbound drain, or a foreign-party submission.
|
|
685
|
-
{
|
|
686
|
-
kind: "allocation-withdraw",
|
|
687
|
-
expect: {
|
|
688
|
-
selfParty: wallet.party,
|
|
689
|
-
allocationCid: opts.allocationCid,
|
|
690
|
-
nowMs: Date.now(),
|
|
691
|
-
...(opts.facilitator ? { facilitator: opts.facilitator } : {}),
|
|
692
|
-
...(opts.instrumentAdmin ? { instrumentAdmin: opts.instrumentAdmin } : {}),
|
|
693
|
-
// Design B DIRECT: pin the allocation's MERCHANT receiver so the verify
|
|
694
|
-
// backstop permits exactly that one party (Design A omits it — receiver ==
|
|
695
|
-
// facilitator). Caller intent only; never the relay's value.
|
|
696
|
-
...(opts.receiver ? { receiver: opts.receiver } : {}),
|
|
697
|
-
},
|
|
698
|
-
}, hashBinding);
|
|
699
|
-
}
|
|
700
379
|
/**
|
|
701
380
|
* SELF-PROVISION a merchant TransferPreapproval so this wallet's incoming
|
|
702
381
|
* transfer-factory ("V3") payments settle DIRECT (1-tx) instead of Pending.
|
|
@@ -708,30 +387,56 @@ export async function reclaimAllocation(relay, wallet, opts) {
|
|
|
708
387
|
* is refused unless it is exactly a single-root self-preapproval (see
|
|
709
388
|
* assertPreparedSelfPreapproval).
|
|
710
389
|
*/
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
390
|
+
/** Backoff for the self-provision stale-input retry (same shape as the pay
|
|
391
|
+
* path's withStaleInputRetry). Bounded — bubbles up after the last attempt. */
|
|
392
|
+
const SELF_PREAPPROVAL_STALE_BACKOFF_MS = [1000, 2000, 4000, 8000, 12000];
|
|
393
|
+
export async function selfProvisionPreapproval(relay, wallet, opts, sleep = (ms) => new Promise((r) => setTimeout(r, ms))) {
|
|
394
|
+
// ONE attempt: relay builds the CreateTransferPreapproval over the merchant's
|
|
395
|
+
// CURRENT fee-input Amulet cids (prepare), the merchant signs, the relay
|
|
396
|
+
// executes (commit).
|
|
397
|
+
const attempt = async () => {
|
|
398
|
+
const prep = await relay.preapprovalSelfPrepare(wallet.party, opts?.expiresAt);
|
|
399
|
+
// Never sign a relay tx that does anything other than create OUR preapproval.
|
|
400
|
+
assertPreparedSelfPreapproval(prep.preparedTransaction, wallet.party);
|
|
401
|
+
const signature = signHashB64(prep.txHash, wallet.privateKeyPkcs8Pem);
|
|
402
|
+
return relay.preapprovalSelfCommit({
|
|
403
|
+
party: wallet.party,
|
|
404
|
+
preparedTransaction: prep.preparedTransaction,
|
|
405
|
+
hashingSchemeVersion: "HASHING_SCHEME_VERSION_V2",
|
|
406
|
+
partySignatures: {
|
|
407
|
+
signatures: [
|
|
408
|
+
{
|
|
409
|
+
party: wallet.party,
|
|
410
|
+
signatures: [
|
|
411
|
+
{
|
|
412
|
+
format: "SIGNATURE_FORMAT_CONCAT",
|
|
413
|
+
signature,
|
|
414
|
+
signingAlgorithmSpec: "SIGNING_ALGORITHM_SPEC_ED25519",
|
|
415
|
+
signedBy: wallet.publicKeyFingerprint,
|
|
416
|
+
},
|
|
417
|
+
],
|
|
418
|
+
},
|
|
419
|
+
],
|
|
420
|
+
},
|
|
421
|
+
});
|
|
422
|
+
};
|
|
423
|
+
// Re-prepare + re-sign + re-commit on a stale-input rejection: the relay pins
|
|
424
|
+
// the fee-input Amulet cids at PREPARE time, and a mining-round roll (or a
|
|
425
|
+
// concurrent claim) in the prepare→commit window archives them, giving
|
|
426
|
+
// LOCAL_VERDICT_INACTIVE_CONTRACTS at execute. Each retry re-reads fresh
|
|
427
|
+
// holdings. Mirrors the pay path's withStaleInputRetry.
|
|
428
|
+
for (let i = 0;; i++) {
|
|
429
|
+
try {
|
|
430
|
+
return await attempt();
|
|
431
|
+
}
|
|
432
|
+
catch (err) {
|
|
433
|
+
if (i < SELF_PREAPPROVAL_STALE_BACKOFF_MS.length &&
|
|
434
|
+
isStaleInputHoldingError(err)) {
|
|
435
|
+
await sleep(SELF_PREAPPROVAL_STALE_BACKOFF_MS[i]);
|
|
436
|
+
continue;
|
|
437
|
+
}
|
|
438
|
+
throw err;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
736
441
|
}
|
|
737
442
|
//# sourceMappingURL=tx.js.map
|
package/dist/tx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx.js","sourceRoot":"","sources":["../src/tx.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tx.js","sourceRoot":"","sources":["../src/tx.ts"],"names":[],"mappings":"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"}
|