@ftptech/canton-agent-wallet 1.4.3 → 1.6.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/dist/swap.js CHANGED
@@ -27,6 +27,19 @@ import { selfProvisionRegistryPreapproval, claimAll } from "./tx.js";
27
27
  import { resolveHashBinding } from "./hash-binding.js";
28
28
  import { loadWallet } from "./store.js";
29
29
  import { sumLedgerDecimals, decimalToAtomicCC, atomicToDecimalCC, } from "@ftptech/x402-canton-core";
30
+ /** The Cantex Connect swap party (client-trusted constant; env-overridable). Funds
31
+ * can only ever be sent here for a Cantex swap, so a compromised endpoint cannot
32
+ * redirect them. */
33
+ export const CANTEX_CONNECT_PARTY = process.env.CANTON_AGENT_CANTEX_PARTY ??
34
+ "cantex-swap::122038c015864f106cfed48bb9106b7c89982368d27956ffcdfda6c38328f0909b8c";
35
+ /** Cantex Connect quote endpoint (keyless, public). */
36
+ export const CANTEX_CONNECT_URL = process.env.CANTON_AGENT_CANTEX_URL ??
37
+ "https://api.cantex.io/v1/public/connect/quote";
38
+ /** The Canton token-standard reason key Cantex reads the buy symbol from. */
39
+ export const CANTEX_MEMO_KEY = "splice.lfdecentralizedtrust.org/reason";
40
+ /** Cantex Connect minimum input, in CC-equivalent. Trades below this bounce at the
41
+ * quote step. */
42
+ export const CANTEX_MIN_INPUT_CC = 50;
30
43
  const AMM_PAIR_SEP = "-";
31
44
  /** Per-input-token advisory minimums, mirrored from the Tradecraft web app (there
32
45
  * is NO API endpoint for these — they are a hardcoded frontend constant). A trade
@@ -65,6 +78,26 @@ export function tradecraftMinInput(symbol) {
65
78
  export function derivePoolParty(token1, token2, ammCid) {
66
79
  return `tc-swp_${token1}${AMM_PAIR_SEP}${token2}::${ammCid}`;
67
80
  }
81
+ /** Canonical CC-pair order for the tokens we support, as [token1, token2] in the
82
+ * pool party's order (from each pool's `lp_token_name`). Used as a FALLBACK when
83
+ * Tradecraft's `/pools` API is unreachable (it 5xxs periodically) so a swap can
84
+ * still target the correct pool party without their API. Every one is CC-first
85
+ * except CBTC/CC (the one live pool whose canonical order is token-first).
86
+ * Key is the OTHER token (case-insensitive lookup). If a pair is absent here and
87
+ * `/pools` is down, we fail closed rather than guess an order. */
88
+ const KNOWN_CC_POOL_ORDER = {
89
+ usdcx: ["CC", "USDCx"],
90
+ usdxlr: ["CC", "USDXLR"],
91
+ ceth: ["CC", "cETH"],
92
+ exag: ["CC", "eXAG"],
93
+ exau: ["CC", "eXAU"],
94
+ cbtc: ["CBTC", "CC"],
95
+ };
96
+ /** The canonical [token1, token2] for a CC/`other` pair from the fallback table,
97
+ * or undefined if we do not have it hardcoded. `other` is the non-CC symbol. */
98
+ function knownCcPoolOrder(other) {
99
+ return KNOWN_CC_POOL_ORDER[other.toLowerCase()];
100
+ }
68
101
  /** Parse the canonical pair order out of an `lp_token_name` like "TC CBTC/CC LP".
69
102
  * Returns undefined when it does not match (caller falls back). */
70
103
  function parseLpName(lp) {
@@ -156,28 +189,160 @@ export async function buildLocalTicket(opts) {
156
189
  const base = opts.tradecraftApi.replace(/\/$/, "");
157
190
  // Tradecraft's edge (Cloudflare) 403s a request with no User-Agent — node's
158
191
  // fetch sends none by default. A plain UA is enough.
192
+ // Tradecraft's edge returns 5xx (esp. 503) transiently; retry a few times before
193
+ // giving up. Read-only quote fetch, so a retry is safe and no funds have moved.
159
194
  const get = async (path) => {
160
- const res = await f(`${base}${path}`, {
161
- headers: { "user-agent": "canton-agent-wallet", accept: "application/json" },
162
- });
163
- if (!res.ok) {
164
- throw new Error(`swap: Tradecraft GET ${path} failed (HTTP ${res.status})`);
195
+ const attempts = opts.quoteAttempts ?? 4;
196
+ let last = 0;
197
+ for (let i = 0; i < attempts; i++) {
198
+ const res = await f(`${base}${path}`, {
199
+ headers: { "user-agent": "canton-agent-wallet", accept: "application/json" },
200
+ });
201
+ if (res.ok)
202
+ return res.json();
203
+ last = res.status;
204
+ // Retry only transient 5xx, and only while attempts remain; a 4xx is a hard
205
+ // failure. On the last 5xx attempt fall out of the loop to the summary throw.
206
+ if (res.status >= 500 && i < attempts - 1) {
207
+ await new Promise((r) => setTimeout(r, 1500));
208
+ continue;
209
+ }
210
+ if (res.status < 500) {
211
+ throw new Error(`swap: Tradecraft GET ${path} failed (HTTP ${res.status})`);
212
+ }
213
+ }
214
+ throw new Error(`swap: Tradecraft GET ${path} failed after ${attempts} attempts (HTTP ${last})`);
215
+ };
216
+ // Resolve the pool's CANONICAL pair order. Prefer /pools (authoritative, validates
217
+ // the pool exists); if that API is unreachable (Tradecraft 5xxs periodically), fall
218
+ // back to the hardcoded CC-pair order so a swap still targets the correct pool party
219
+ // WITHOUT their API — the pool address is all that is needed to send. A CC pair not
220
+ // in the fallback table fails closed rather than guessing.
221
+ //
222
+ // The FETCH and the RESOLVE are separated on purpose: only a fetch failure (Tradecraft
223
+ // 5xx/network) is allowed to fall back to the hardcoded order. `resolvePoolPair` failing
224
+ // means /pools loaded but has no such pool — a genuine "pool does not exist" that MUST
225
+ // surface as a hard error, never silently target the hardcoded pool party.
226
+ const resolvePair = async () => {
227
+ let pools;
228
+ try {
229
+ pools = parseTradecraftPools(await get("/v1/pools"));
230
+ }
231
+ catch (e) {
232
+ const cc = opts.inSymbol === "CC" ? opts.outSymbol
233
+ : opts.outSymbol === "CC" ? opts.inSymbol
234
+ : undefined;
235
+ const known = cc !== undefined ? knownCcPoolOrder(cc) : undefined;
236
+ if (!known)
237
+ throw e; // fetch failed and no fallback for this pair — surface it
238
+ return { token1: known[0], token2: known[1], poolsUp: false };
165
239
  }
166
- return res.json();
240
+ // pools loaded: a missing pair here is a real "no such pool" and throws (never falls back).
241
+ const { token1, token2 } = resolvePoolPair(pools, opts.inSymbol, opts.outSymbol);
242
+ return { token1, token2, poolsUp: true };
167
243
  };
168
- // Resolve the pool's CANONICAL pair order from /pools so the pool party is
169
- // correct for BOTH swap directions (one party per pair serves either way). This
170
- // also validates the pool exists before we send any funds.
171
- const pools = parseTradecraftPools(await get("/v1/pools"));
172
- const { token1, token2 } = resolvePoolPair(pools, opts.inSymbol, opts.outSymbol);
173
- // The quote IS directional: giving `inSymbol`, receiving `outSymbol`.
174
- const userGets = parseTradecraftQuote(await get(`/v1/quoteForFixedInput/${encodeURIComponent(opts.inSymbol)}/` +
175
- `${encodeURIComponent(opts.outSymbol)}?givingAmount=${encodeURIComponent(opts.amount)}`));
244
+ const { token1, token2, poolsUp } = await resolvePair();
245
+ // The quote is directional and only informs the slippage minimum + display. When
246
+ // /pools is down the quote endpoint is down too, so skip it and market-fill (no
247
+ // memo min) rather than fail the whole swap; the pool still fills at market.
248
+ let userGets;
249
+ if (poolsUp) {
250
+ try {
251
+ userGets = parseTradecraftQuote(await get(`/v1/quoteForFixedInput/${encodeURIComponent(opts.inSymbol)}/` +
252
+ `${encodeURIComponent(opts.outSymbol)}?givingAmount=${encodeURIComponent(opts.amount)}`));
253
+ }
254
+ catch {
255
+ userGets = undefined; // quote flaked; fall through to market-fill
256
+ }
257
+ }
258
+ const haveQuote = userGets !== undefined;
259
+ // Fail closed: if the caller explicitly enabled on-ledger slippage protection (memoKey)
260
+ // but no quote could be obtained to base the minimum on, refuse rather than silently
261
+ // downgrading to an unprotected market-fill. With no memoKey (the default), a missing
262
+ // quote falls through to market-fill so a swap still completes while the API is down.
263
+ if (opts.memoKey !== undefined && !haveQuote) {
264
+ throw new Error("swap: on-ledger slippage protection was requested (memoKey) but no quote could be " +
265
+ "obtained to compute the minimum — refusing to market-fill without a floor");
266
+ }
267
+ const minOutput = haveQuote ? computeMinOutput(userGets, opts.slippagePct) : "0";
268
+ // Enforce a memo min only with a quote to base it on; without a memoKey the swap is a
269
+ // market-fill (no memo), the proven bare pool-address flow.
270
+ const attachMemo = opts.memoKey !== undefined && haveQuote;
176
271
  return {
272
+ venue: "tradecraft",
177
273
  poolParty: derivePoolParty(token1, token2, opts.ammCid),
274
+ minOutput,
275
+ ...(attachMemo ? { memoKey: opts.memoKey, memoValue: minOutput } : {}),
276
+ quote: haveQuote ? String(userGets) : "unknown (Tradecraft quote API unavailable)",
277
+ inInstrument: opts.inInstrument,
278
+ outInstrument: opts.outInstrument,
279
+ };
280
+ }
281
+ /** Fetch a live Cantex Connect quote and build a ticket locally (the keyless
282
+ * `--direct` path for Cantex — Connect is public and free, so no fee/endpoint is
283
+ * needed). The counter-asset settles directly to the sender's pre-approved wallet.
284
+ * Unlike Tradecraft, Cantex's memo is the BUY SYMBOL (from the quote), not a min;
285
+ * `slippagePct` only sets the local delivery-detection threshold. */
286
+ export async function buildCantexTicket(opts) {
287
+ const f = opts.fetchImpl ?? globalThis.fetch;
288
+ const sleep = opts.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
289
+ const inCx = opts.inInstrument ?? { id: "Amulet", admin: opts.dsoParty };
290
+ const outCx = opts.outInstrument ?? { id: "Amulet", admin: opts.dsoParty };
291
+ const reqBody = JSON.stringify({
292
+ sellAmount: opts.amount,
293
+ sellInstrumentId: inCx.id,
294
+ sellInstrumentAdmin: inCx.admin,
295
+ buyInstrumentId: outCx.id,
296
+ buyInstrumentAdmin: outCx.admin,
297
+ });
298
+ // Cantex's keyless quote sometimes cannot price a non-CC input's CC-equivalent
299
+ // (the min check) and 400s transiently on token->CC. This is a QUOTE failure only
300
+ // (no funds have moved), so retry a few times before giving up / falling back.
301
+ const attempts = opts.quoteAttempts ?? 4;
302
+ let res;
303
+ let lastTransient = "";
304
+ for (let i = 0; i < attempts; i++) {
305
+ res = await f(opts.connectUrl, {
306
+ method: "POST",
307
+ headers: { "content-type": "application/json", accept: "application/json" },
308
+ body: reqBody,
309
+ });
310
+ if (res.ok)
311
+ break;
312
+ const text = await res.text().catch(() => "");
313
+ if (/CC-equivalent input size/i.test(text)) {
314
+ lastTransient = text;
315
+ if (i < attempts - 1) {
316
+ await sleep(1500);
317
+ continue;
318
+ }
319
+ break; // transient error on the last attempt — fall through to the guidance below
320
+ }
321
+ throw new Error(`swap: Cantex Connect quote failed (HTTP ${res.status}) ${text.slice(0, 200)}`);
322
+ }
323
+ if (!res.ok) {
324
+ throw new Error(`swap: Cantex Connect could not quote after ${attempts} attempts ` +
325
+ `(${lastTransient.slice(0, 120)}) — try again shortly or use --venue tradecraft`);
326
+ }
327
+ const body = (await res.json());
328
+ if (typeof body?.memo !== "string" || typeof body?.returned?.amount !== "string") {
329
+ throw new Error(`swap: unexpected Cantex Connect quote response ${JSON.stringify(body)}`);
330
+ }
331
+ const userGets = Number(body.returned.amount);
332
+ if (!Number.isFinite(userGets) || userGets < 0) {
333
+ throw new Error(`swap: Cantex returned a non-numeric output ${JSON.stringify(body.returned.amount)}`);
334
+ }
335
+ // The quote memo drives what Cantex buys — assert it identifies our requested
336
+ // output (defense in depth even on this direct/TLS path).
337
+ assertMemoMatchesOutput(body.memo, opts.outSymbol, opts.outInstrument, "Cantex");
338
+ return {
339
+ venue: "cantex",
340
+ poolParty: opts.cantexParty,
178
341
  minOutput: computeMinOutput(userGets, opts.slippagePct),
179
- ...(opts.memoKey ? { memoKey: opts.memoKey } : {}),
180
- quote: String(userGets),
342
+ memoKey: CANTEX_MEMO_KEY,
343
+ // Cantex reads the buy instrument from the memo (symbol or admin party). No ref.
344
+ memoValue: body.memo,
345
+ quote: body.returned.amount,
181
346
  inInstrument: opts.inInstrument,
182
347
  outInstrument: opts.outInstrument,
183
348
  };
@@ -202,9 +367,11 @@ export function parseEndpointTicket(body) {
202
367
  throw new Error(`swap: malformed ticket from endpoint ${JSON.stringify(body)}`);
203
368
  }
204
369
  return {
370
+ ...(b.venue === "cantex" || b.venue === "tradecraft" ? { venue: b.venue } : {}),
205
371
  poolParty: b.poolParty,
206
372
  minOutput: b.minOutput,
207
373
  ...(typeof b.memoKey === "string" ? { memoKey: b.memoKey } : {}),
374
+ ...(typeof b.memoValue === "string" ? { memoValue: b.memoValue } : {}),
208
375
  quote: b.quote,
209
376
  inInstrument: asSwapInstrument(b.inInstrument),
210
377
  outInstrument: asSwapInstrument(b.outInstrument),
@@ -216,6 +383,24 @@ function sameInstrument(a, b) {
216
383
  return a === b;
217
384
  return a.admin === b.admin && a.id === b.id;
218
385
  }
386
+ /** Assert a Cantex memo identifies EXACTLY the requested output instrument. Cantex
387
+ * Connect returns the buy instrument as its symbol, its instrument id, or its full
388
+ * admin party (observed: "CBTC" for CBTC, the registrar party for USDCx). The memo
389
+ * drives what asset Cantex buys, so it must be one of those forms for the caller's
390
+ * own output — never an endpoint-chosen substitute. `outInstrument` is null for a CC
391
+ * output (Cantex's buy id is then "Amulet"). Throws on any mismatch. */
392
+ function assertMemoMatchesOutput(memo, outCanon, outInstrument, source) {
393
+ const allowed = [
394
+ outCanon,
395
+ outInstrument?.id,
396
+ outInstrument?.admin,
397
+ outInstrument === null ? "Amulet" : undefined,
398
+ ].filter((v) => typeof v === "string" && v.length > 0);
399
+ if (typeof memo !== "string" || !allowed.includes(memo)) {
400
+ throw new Error(`swap: ${source} memo ${JSON.stringify(memo)} does not identify the requested output ` +
401
+ `${JSON.stringify(outCanon)} (allowed: ${allowed.join(", ")}) — refusing`);
402
+ }
403
+ }
219
404
  /**
220
405
  * Validate an endpoint-returned ticket against LOCALLY-TRUSTED values before it is
221
406
  * ever executed. The swap endpoint is UNTRUSTED for money safety: the ticket's
@@ -233,12 +418,55 @@ function sameInstrument(a, b) {
233
418
  * a bad fill, which returns the input) — never for where the funds go.
234
419
  */
235
420
  export function assertTicketMatchesIntent(ticket, expect) {
236
- const wantA = derivePoolParty(expect.inCanon, expect.outCanon, expect.trustedAmmCid);
237
- const wantB = derivePoolParty(expect.outCanon, expect.inCanon, expect.trustedAmmCid);
238
- if (ticket.poolParty !== wantA && ticket.poolParty !== wantB) {
239
- throw new Error(`swap: endpoint returned pool party ${JSON.stringify(ticket.poolParty)} which is not the ` +
240
- `trusted ${expect.inCanon}/${expect.outCanon} pool — refusing (a compromised endpoint ` +
241
- `cannot redirect the swap: the pool must be tc-swp of this pair under our own amm_cid)`);
421
+ // The receiver (`poolParty`) is pinned to a client-trusted constant PER VENUE, so a
422
+ // compromised endpoint can never redirect funds to an attacker party. Tradecraft:
423
+ // the pool must be tc-swp of this pair under OUR amm_cid. Cantex: the party must be
424
+ // OUR trusted Cantex Connect party exactly.
425
+ // minOutput is consumed AFTER the input is sent (executeSwap's BigInt(decimalToAtomicCC(
426
+ // minOutput)) delivery-threshold), and a throw there would strand a SENT swap as an
427
+ // apparent failure (a retry = double-send). So validate it numeric for EVERY venue
428
+ // here, before anything moves — not just on the Tradecraft path.
429
+ if (!/^\d+(\.\d+)?$/.test(ticket.minOutput)) {
430
+ throw new Error(`swap: endpoint returned a non-numeric minOutput ${JSON.stringify(ticket.minOutput)} — refusing`);
431
+ }
432
+ const venue = ticket.venue ?? "tradecraft";
433
+ if (venue === "cantex") {
434
+ if (ticket.poolParty !== expect.trustedCantexParty) {
435
+ throw new Error(`swap: endpoint returned Cantex party ${JSON.stringify(ticket.poolParty)} which is not our ` +
436
+ `trusted Cantex Connect party — refusing`);
437
+ }
438
+ // The memo IS the buy-instrument selector Cantex acts on (its symbol, its
439
+ // instrument id, or its full admin party — the forms Cantex Connect returns), so
440
+ // it drives what asset the wallet receives. It MUST match the output the caller
441
+ // asked for, or a compromised endpoint could make Cantex buy a different (junk)
442
+ // token. Also pin the memo key. This exact-match allow-list subsumes any
443
+ // affiliate-`ref:` injection (a ref-appended memo simply is not in the set).
444
+ if (ticket.memoKey !== CANTEX_MEMO_KEY) {
445
+ throw new Error(`swap: endpoint returned an unexpected Cantex memo key ${JSON.stringify(ticket.memoKey)} — refusing`);
446
+ }
447
+ assertMemoMatchesOutput(ticket.memoValue, expect.outCanon, expect.outInstrument, "Cantex");
448
+ }
449
+ else {
450
+ const wantA = derivePoolParty(expect.inCanon, expect.outCanon, expect.trustedAmmCid);
451
+ const wantB = derivePoolParty(expect.outCanon, expect.inCanon, expect.trustedAmmCid);
452
+ if (ticket.poolParty !== wantA && ticket.poolParty !== wantB) {
453
+ throw new Error(`swap: endpoint returned pool party ${JSON.stringify(ticket.poolParty)} which is not the ` +
454
+ `trusted ${expect.inCanon}/${expect.outCanon} pool — refusing (a compromised endpoint ` +
455
+ `cannot redirect the swap: the pool must be tc-swp of this pair under our own amm_cid)`);
456
+ }
457
+ // Tradecraft reads the slippage FLOOR from the on-chain memo. `executeSwap` sends
458
+ // `memoValue`, so if a memo rides (memoKey set) it MUST be the validated minOutput
459
+ // under the trusted reason key — otherwise a compromised endpoint could show a
460
+ // healthy minOutput while sending a zero/garbage floor on-chain (no protection).
461
+ if (ticket.memoKey !== undefined) {
462
+ if (ticket.memoKey !== CANTEX_MEMO_KEY) {
463
+ throw new Error(`swap: endpoint returned an unexpected Tradecraft memo key ${JSON.stringify(ticket.memoKey)} — refusing`);
464
+ }
465
+ if (ticket.memoValue !== ticket.minOutput) {
466
+ throw new Error(`swap: endpoint's on-chain floor ${JSON.stringify(ticket.memoValue)} does not equal the ` +
467
+ `validated minOutput ${JSON.stringify(ticket.minOutput)} — refusing (slippage-strip attempt)`);
468
+ }
469
+ }
242
470
  }
243
471
  if (!sameInstrument(ticket.inInstrument, expect.inInstrument)) {
244
472
  throw new Error(`swap: endpoint returned a different input instrument than requested — refusing`);
@@ -246,9 +474,6 @@ export function assertTicketMatchesIntent(ticket, expect) {
246
474
  if (!sameInstrument(ticket.outInstrument, expect.outInstrument)) {
247
475
  throw new Error(`swap: endpoint returned a different output instrument than requested — refusing`);
248
476
  }
249
- if (!/^\d+(\.\d+)?$/.test(ticket.minOutput)) {
250
- throw new Error(`swap: endpoint returned a non-numeric minOutput ${JSON.stringify(ticket.minOutput)} — refusing`);
251
- }
252
477
  }
253
478
  /** Fetch a swap ticket from OUR x402-gated `/swap` endpoint (the default path): the
254
479
  * managed router that stays current with Tradecraft's pools/amm_cid/minimums and
@@ -262,7 +487,8 @@ export async function fetchTicketFromEndpoint(opts) {
262
487
  const url = `${base}/swap?in=${encodeURIComponent(opts.inSymbol)}` +
263
488
  `&out=${encodeURIComponent(opts.outSymbol)}` +
264
489
  `&amount=${encodeURIComponent(opts.amount)}` +
265
- `&slippage=${encodeURIComponent(String(opts.slippagePct))}`;
490
+ `&slippage=${encodeURIComponent(String(opts.slippagePct))}` +
491
+ `&venue=${encodeURIComponent(opts.venue ?? "cantex")}`;
266
492
  const res = await opts.payingFetch(url);
267
493
  if (!res.ok) {
268
494
  const text = await res.text().catch(() => "");
@@ -275,6 +501,7 @@ export async function fetchTicketFromEndpoint(opts) {
275
501
  inInstrument: opts.inInstrument,
276
502
  outInstrument: opts.outInstrument,
277
503
  trustedAmmCid: opts.trustedAmmCid,
504
+ trustedCantexParty: opts.trustedCantexParty,
278
505
  });
279
506
  return ticket;
280
507
  }
@@ -333,6 +560,25 @@ export async function executeSwap(opts) {
333
560
  if (wait)
334
561
  await claimAll(relay, wallet, { hashBinding });
335
562
  const outputBaseline = wait ? await readOutputBalance() : "0";
563
+ // Convert the numeric delivery thresholds to atomics BEFORE sending, so a malformed
564
+ // decimal (e.g. an endpoint-supplied non-numeric minOutput that somehow reached here)
565
+ // throws PRE-SEND — never after the input has moved, which would surface a sent swap as
566
+ // a failure and invite a double-send retry. assertTicketMatchesIntent already rejects a
567
+ // non-numeric minOutput on the endpoint path; this is the executeSwap-level backstop.
568
+ const baseAtomic = wait ? BigInt(decimalToAtomicCC(outputBaseline)) : 0n;
569
+ const minAtomic = wait ? BigInt(decimalToAtomicCC(ticket.minOutput)) : 0n;
570
+ // CC input, token output: an unfilled trade hands the CC back — to a wallet
571
+ // holding a CC preapproval DIRECTLY, and long before the window ends — and the
572
+ // output watch above cannot see it (seen live: 0.2 CC to the CC/USDCx pool was
573
+ // back within a minute while the loop ran its full two). Baseline the CC
574
+ // balance BEFORE the send (a post-send read would race the return) so each
575
+ // tick can tell "back where it started" from "still out". Pre-send, so a
576
+ // failure here aborts safely with nothing moved.
577
+ const watchInputReturn = wait && ticket.inInstrument === null && ticket.outInstrument !== null;
578
+ const ccBeforeSend = watchInputReturn
579
+ ? BigInt(decimalToAtomicCC((await relay.balance(wallet.party)).cc))
580
+ : 0n;
581
+ const inputAtomic = watchInputReturn ? BigInt(decimalToAtomicCC(opts.amount)) : 0n;
336
582
  // (2) SEND THE INPUT to the pool, carrying the slippage floor in the AMM's meta
337
583
  // key. The ticket's pool party was derived from (or validated against, on the
338
584
  // endpoint path via assertTicketMatchesIntent) the CALLER's trusted amm_cid, so
@@ -342,9 +588,13 @@ export async function executeSwap(opts) {
342
588
  amount: opts.amount,
343
589
  apiKey: opts.apiKey,
344
590
  hashBinding,
345
- // Attach the slippage floor ONLY when a memo key is configured; without it
346
- // the swap executes at market price (the pool needs no meta to fill).
347
- ...(ticket.memoKey ? { meta: { [ticket.memoKey]: ticket.minOutput } } : {}),
591
+ // Attach the memo ONLY when a memo key is set. Tradecraft: the value is the
592
+ // slippage floor (omitted → market fill). Cantex: the value is the buy symbol
593
+ // (always set). `memoValue` falls back to `minOutput` for older Tradecraft-only
594
+ // tickets that predate the field.
595
+ ...(ticket.memoKey
596
+ ? { meta: { [ticket.memoKey]: ticket.memoValue ?? ticket.minOutput } }
597
+ : {}),
348
598
  ...(ticket.inInstrument
349
599
  ? {
350
600
  instrumentAdmin: ticket.inInstrument.admin,
@@ -375,14 +625,13 @@ export async function executeSwap(opts) {
375
625
  const claimedUpdateIds = [];
376
626
  let delivered;
377
627
  let partialRise;
628
+ let inputReturned = false;
378
629
  let timedOut = false;
379
630
  let pollErrors = 0;
380
631
  if (wait) {
381
632
  const sleep = opts.sleep ?? defaultSleep;
382
633
  const attempts = opts.claimAttempts ?? 8;
383
634
  const intervalMs = opts.claimIntervalMs ?? 15_000;
384
- const baseAtomic = BigInt(decimalToAtomicCC(outputBaseline));
385
- const minAtomic = BigInt(decimalToAtomicCC(ticket.minOutput));
386
635
  timedOut = true;
387
636
  let lastRise = 0n;
388
637
  for (let i = 0; i < attempts; i++) {
@@ -398,6 +647,17 @@ export async function executeSwap(opts) {
398
647
  timedOut = false;
399
648
  break;
400
649
  }
650
+ // The input-return check waits one interval: on the very first tick a
651
+ // balance read that has not caught up with the send would show the CC
652
+ // still "there" and read as a return that never happened.
653
+ if (watchInputReturn && i > 0) {
654
+ const cc = BigInt(decimalToAtomicCC((await relay.balance(wallet.party)).cc));
655
+ if (cc - (ccBeforeSend - inputAtomic) >= (inputAtomic * 99n) / 100n) {
656
+ inputReturned = true;
657
+ timedOut = false;
658
+ break;
659
+ }
660
+ }
401
661
  }
402
662
  catch {
403
663
  pollErrors++;
@@ -414,6 +674,7 @@ export async function executeSwap(opts) {
414
674
  claimedUpdateIds,
415
675
  ...(delivered !== undefined ? { delivered } : {}),
416
676
  ...(partialRise !== undefined ? { partialRise } : {}),
677
+ inputReturned,
417
678
  timedOut,
418
679
  pollErrors,
419
680
  };
package/dist/swap.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"swap.js","sourceRoot":"","sources":["../src/swap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"swap.js","sourceRoot":"","sources":["../src/swap.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ftptech/canton-agent-wallet",
3
3
  "private": false,
4
- "version": "1.4.3",
4
+ "version": "1.6.0",
5
5
  "description": "Self-custody Canton wallet + x402 autopay for AI agents. One CLI: create, pay, balance, withdraw, export, import. Backs the canton-x402-agent skill.",
6
6
  "license": "Apache-2.0",
7
7
  "author": "FTP team",
@@ -15,21 +15,21 @@
15
15
  "dist",
16
16
  "README.md"
17
17
  ],
18
+ "scripts": {
19
+ "build": "tsc -p tsconfig.json",
20
+ "typecheck": "tsc -p tsconfig.json --noEmit",
21
+ "test": "vitest run",
22
+ "lint": "eslint src --max-warnings 0"
23
+ },
18
24
  "dependencies": {
19
25
  "@canton-network/core-tx-visualizer": "~1.4.0",
20
26
  "@canton-network/core-ledger-proto": "~1.4.0",
27
+ "@ftptech/x402-canton-ledger": "workspace:^",
28
+ "@ftptech/x402-canton-client": "workspace:^",
21
29
  "undici": "^7.1.0",
22
- "@ftptech/x402-canton-ledger": "^0.4.0",
23
- "@ftptech/x402-canton-client": "^1.1.0",
24
- "@ftptech/x402-canton-core": "^1.2.1"
30
+ "@ftptech/x402-canton-core": "workspace:^"
25
31
  },
26
32
  "publishConfig": {
27
33
  "access": "public"
28
- },
29
- "scripts": {
30
- "build": "tsc -p tsconfig.json",
31
- "typecheck": "tsc -p tsconfig.json --noEmit",
32
- "test": "vitest run",
33
- "lint": "eslint src --max-warnings 0"
34
34
  }
35
- }
35
+ }