@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/README.md +47 -5
- package/dist/cli.js +59 -132
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/swap-route.d.ts +109 -0
- package/dist/swap-route.d.ts.map +1 -0
- package/dist/swap-route.js +275 -0
- package/dist/swap-route.js.map +1 -0
- package/dist/swap.d.ts +68 -9
- package/dist/swap.d.ts.map +1 -1
- package/dist/swap.js +292 -31
- package/dist/swap.js.map +1 -1
- package/package.json +11 -11
- package/LICENSE +0 -201
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
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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
|
-
|
|
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
|
-
|
|
169
|
-
//
|
|
170
|
-
//
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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
|
-
|
|
180
|
-
|
|
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
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
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
|
|
346
|
-
//
|
|
347
|
-
|
|
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
|
+
"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-
|
|
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
|
+
}
|