@lendasat/lendaswap-sdk-pure 0.2.24 → 0.2.26
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/arkade-network.d.ts +8 -0
- package/dist/arkade-network.d.ts.map +1 -0
- package/dist/arkade-network.js +40 -0
- package/dist/arkade-network.js.map +1 -0
- package/dist/arkade.d.ts.map +1 -1
- package/dist/arkade.js +2 -9
- package/dist/arkade.js.map +1 -1
- package/dist/cctp/constants.d.ts.map +1 -1
- package/dist/cctp/constants.js +4 -0
- package/dist/cctp/constants.js.map +1 -1
- package/dist/cctp/fee.d.ts +49 -0
- package/dist/cctp/fee.d.ts.map +1 -0
- package/dist/cctp/fee.js +70 -0
- package/dist/cctp/fee.js.map +1 -0
- package/dist/cctp/index.d.ts +2 -1
- package/dist/cctp/index.d.ts.map +1 -1
- package/dist/cctp/index.js +2 -1
- package/dist/cctp/index.js.map +1 -1
- package/dist/cctp/utils.d.ts +15 -0
- package/dist/cctp/utils.d.ts.map +1 -1
- package/dist/cctp/utils.js +41 -0
- package/dist/cctp/utils.js.map +1 -1
- package/dist/cctp-bridge/bridge.d.ts +62 -0
- package/dist/cctp-bridge/bridge.d.ts.map +1 -0
- package/dist/cctp-bridge/bridge.js +74 -0
- package/dist/cctp-bridge/bridge.js.map +1 -0
- package/dist/cctp-bridge/index.d.ts +17 -0
- package/dist/cctp-bridge/index.d.ts.map +1 -0
- package/dist/cctp-bridge/index.js +16 -0
- package/dist/cctp-bridge/index.js.map +1 -0
- package/dist/cctp-inbound/approveAndBurn.d.ts +68 -0
- package/dist/cctp-inbound/approveAndBurn.d.ts.map +1 -0
- package/dist/cctp-inbound/approveAndBurn.js +95 -0
- package/dist/cctp-inbound/approveAndBurn.js.map +1 -0
- package/dist/cctp-inbound/burn.d.ts +51 -0
- package/dist/cctp-inbound/burn.d.ts.map +1 -0
- package/dist/cctp-inbound/burn.js +66 -0
- package/dist/cctp-inbound/burn.js.map +1 -0
- package/dist/cctp-inbound/chainMap.d.ts +48 -0
- package/dist/cctp-inbound/chainMap.d.ts.map +1 -0
- package/dist/cctp-inbound/chainMap.js +103 -0
- package/dist/cctp-inbound/chainMap.js.map +1 -0
- package/dist/cctp-inbound/client.d.ts +1573 -0
- package/dist/cctp-inbound/client.d.ts.map +1 -0
- package/dist/cctp-inbound/client.js +117 -0
- package/dist/cctp-inbound/client.js.map +1 -0
- package/dist/cctp-inbound/eip2612.d.ts +77 -0
- package/dist/cctp-inbound/eip2612.d.ts.map +1 -0
- package/dist/cctp-inbound/eip2612.js +95 -0
- package/dist/cctp-inbound/eip2612.js.map +1 -0
- package/dist/cctp-inbound/evmSignerAdapter.d.ts +25 -0
- package/dist/cctp-inbound/evmSignerAdapter.d.ts.map +1 -0
- package/dist/cctp-inbound/evmSignerAdapter.js +50 -0
- package/dist/cctp-inbound/evmSignerAdapter.js.map +1 -0
- package/dist/cctp-inbound/fundSwap.d.ts +94 -0
- package/dist/cctp-inbound/fundSwap.d.ts.map +1 -0
- package/dist/cctp-inbound/fundSwap.js +90 -0
- package/dist/cctp-inbound/fundSwap.js.map +1 -0
- package/dist/cctp-inbound/index.d.ts +35 -0
- package/dist/cctp-inbound/index.d.ts.map +1 -0
- package/dist/cctp-inbound/index.js +33 -0
- package/dist/cctp-inbound/index.js.map +1 -0
- package/dist/cctp-inbound/permit2.d.ts +33 -0
- package/dist/cctp-inbound/permit2.d.ts.map +1 -0
- package/dist/cctp-inbound/permit2.js +32 -0
- package/dist/cctp-inbound/permit2.js.map +1 -0
- package/dist/cctp-inbound/preflight.d.ts +36 -0
- package/dist/cctp-inbound/preflight.d.ts.map +1 -0
- package/dist/cctp-inbound/preflight.js +67 -0
- package/dist/cctp-inbound/preflight.js.map +1 -0
- package/dist/cctp-inbound/smartAccount.d.ts +1518 -0
- package/dist/cctp-inbound/smartAccount.d.ts.map +1 -0
- package/dist/cctp-inbound/smartAccount.js +117 -0
- package/dist/cctp-inbound/smartAccount.js.map +1 -0
- package/dist/cctp-inbound/submit.d.ts +75 -0
- package/dist/cctp-inbound/submit.d.ts.map +1 -0
- package/dist/cctp-inbound/submit.js +126 -0
- package/dist/cctp-inbound/submit.js.map +1 -0
- package/dist/cctp-inbound/types.d.ts +30 -0
- package/dist/cctp-inbound/types.d.ts.map +1 -0
- package/dist/cctp-inbound/types.js +5 -0
- package/dist/cctp-inbound/types.js.map +1 -0
- package/dist/cctp-inbound/userOp.d.ts +93 -0
- package/dist/cctp-inbound/userOp.d.ts.map +1 -0
- package/dist/cctp-inbound/userOp.js +151 -0
- package/dist/cctp-inbound/userOp.js.map +1 -0
- package/dist/client.d.ts +166 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +565 -32
- package/dist/client.js.map +1 -1
- package/dist/create/arkade.d.ts.map +1 -1
- package/dist/create/arkade.js +21 -19
- package/dist/create/arkade.js.map +1 -1
- package/dist/create/bitcoin.d.ts.map +1 -1
- package/dist/create/bitcoin.js +17 -15
- package/dist/create/bitcoin.js.map +1 -1
- package/dist/create/evm-to-arkade.d.ts.map +1 -1
- package/dist/create/evm-to-arkade.js +2 -0
- package/dist/create/evm-to-arkade.js.map +1 -1
- package/dist/create/evm-to-bitcoin.d.ts.map +1 -1
- package/dist/create/evm-to-bitcoin.js +2 -0
- package/dist/create/evm-to-bitcoin.js.map +1 -1
- package/dist/create/evm-to-lightning.d.ts.map +1 -1
- package/dist/create/evm-to-lightning.js +6 -3
- package/dist/create/evm-to-lightning.js.map +1 -1
- package/dist/create/lightning.d.ts.map +1 -1
- package/dist/create/lightning.js +17 -15
- package/dist/create/lightning.js.map +1 -1
- package/dist/create/types.d.ts +40 -0
- package/dist/create/types.d.ts.map +1 -1
- package/dist/delegate.d.ts.map +1 -1
- package/dist/delegate.js +2 -31
- package/dist/delegate.js.map +1 -1
- package/dist/evm/wallet.d.ts +16 -0
- package/dist/evm/wallet.d.ts.map +1 -1
- package/dist/evm/wallet.js.map +1 -1
- package/dist/generated/api.d.ts +408 -2
- package/dist/generated/api.d.ts.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/redeem/arkade.d.ts.map +1 -1
- package/dist/redeem/arkade.js +4 -43
- package/dist/redeem/arkade.js.map +1 -1
- package/dist/redeem/gasless.d.ts +16 -0
- package/dist/redeem/gasless.d.ts.map +1 -1
- package/dist/redeem/gasless.js +3 -1
- package/dist/redeem/gasless.js.map +1 -1
- package/dist/refund/arkade.d.ts.map +1 -1
- package/dist/refund/arkade.js +3 -39
- package/dist/refund/arkade.js.map +1 -1
- package/dist/refund/{collab.d.ts → collab-arkade-evm.d.ts} +6 -6
- package/dist/refund/collab-arkade-evm.d.ts.map +1 -0
- package/dist/refund/{collab.js → collab-arkade-evm.js} +6 -38
- package/dist/refund/collab-arkade-evm.js.map +1 -0
- package/dist/refund/collab-arkade-lightning.d.ts +59 -0
- package/dist/refund/collab-arkade-lightning.d.ts.map +1 -0
- package/dist/refund/collab-arkade-lightning.js +208 -0
- package/dist/refund/collab-arkade-lightning.js.map +1 -0
- package/dist/refund/index.d.ts +3 -2
- package/dist/refund/index.d.ts.map +1 -1
- package/dist/refund/index.js +3 -2
- package/dist/refund/index.js.map +1 -1
- package/dist/tokens.d.ts +18 -0
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +43 -7
- package/dist/tokens.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- package/package.json +27 -2
- package/dist/refund/collab.d.ts.map +0 -1
- package/dist/refund/collab.js.map +0 -1
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CCTP-inbound flow — "any CCTPv2 chain → Arbitrum USDC → BTC" swaps.
|
|
3
|
+
*
|
|
4
|
+
* The SDK orchestrates:
|
|
5
|
+
* 1. Source-chain USDC burn via `TokenMessenger.depositForBurn`
|
|
6
|
+
* (`destinationCaller` pinned to the user's Kernel smart account).
|
|
7
|
+
* 2. IRIS attestation polling.
|
|
8
|
+
* 3. Settlement-chain UserOp via the user's Kernel smart account
|
|
9
|
+
* (atomic `receiveMessage` + `USDC.approve(Permit2)` +
|
|
10
|
+
* `executeAndCreateWithPermit2`), paymaster-sponsored so the user
|
|
11
|
+
* needs no ETH on Arbitrum.
|
|
12
|
+
*
|
|
13
|
+
* The Kernel smart account is owned by the user's connected wallet
|
|
14
|
+
* (viem `Account` / Privy / wagmi / raw key) — no SDK-derived key
|
|
15
|
+
* material. Consumer-side wallet prompts cover Permit2 typed data and
|
|
16
|
+
* the UserOp signature.
|
|
17
|
+
*
|
|
18
|
+
* Public API:
|
|
19
|
+
* - `client.cctpInbound.*` — step-by-step primitives (for custom UX)
|
|
20
|
+
* - `client.fundSwap(swapId, signer)` — one-shot wrapper built on top
|
|
21
|
+
*/
|
|
22
|
+
export { approveAndBurn, } from "./approveAndBurn.js";
|
|
23
|
+
export { encodeDepositForBurn, } from "./burn.js";
|
|
24
|
+
export { CCTP_VIEM_CHAINS, CHAIN_ID_TO_CCTP_NAME, cctpMetaForChainId, DIRECT_SOURCE_CHAIN_IDS, getCctpViemChain, getCctpViemChainByName, isCctpOnlySource, } from "./chainMap.js";
|
|
25
|
+
export { CctpInboundClient } from "./client.js";
|
|
26
|
+
export { buildDomainSeparator, MAX_UINT256, signEip2612Permit, USDC_DOMAIN_FIELDS, } from "./eip2612.js";
|
|
27
|
+
export { cctpFundSwap, } from "./fundSwap.js";
|
|
28
|
+
export { signPermit2Witness, } from "./permit2.js";
|
|
29
|
+
export { extractRevertData, simulateBatchCalls, } from "./preflight.js";
|
|
30
|
+
export { createSwapSmartAccountClient, } from "./smartAccount.js";
|
|
31
|
+
export { submitCctpInboundUserOp, } from "./submit.js";
|
|
32
|
+
export { addressToBytes32Hex, buildCctpInboundBatch, } from "./userOp.js";
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cctp-inbound/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAGL,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,oBAAoB,EACpB,WAAW,EAGX,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAKL,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAGL,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EAEjB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,4BAA4B,GAC7B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAIL,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EAInB,qBAAqB,GAGtB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permit2 signing for `executeAndCreateWithPermit2` using the SDK's
|
|
3
|
+
* HD-derived EVM key.
|
|
4
|
+
*
|
|
5
|
+
* Wraps the existing `buildPermit2FundingDigest` + `signEvmDigest` and
|
|
6
|
+
* returns the compact 65-byte signature format (`r ‖ s ‖ v`) that
|
|
7
|
+
* `HTLCCoordinator.executeAndCreateWithPermit2` expects, ready to POST
|
|
8
|
+
* to the backend's gasless-funding endpoint.
|
|
9
|
+
*/
|
|
10
|
+
import { type Permit2FundingParams } from "../evm/coordinator.js";
|
|
11
|
+
/** Parameters for signing a Permit2 witness with the SDK's HD key. */
|
|
12
|
+
export interface SignPermit2Params {
|
|
13
|
+
/** Signer's secp256k1 private key. */
|
|
14
|
+
secretKey: Uint8Array | string;
|
|
15
|
+
/** All fields of the Permit2 witness + TokenPermissions. */
|
|
16
|
+
funding: Permit2FundingParams;
|
|
17
|
+
}
|
|
18
|
+
/** Signed Permit2 witness in the shape the backend's gasless endpoint expects. */
|
|
19
|
+
export interface SignedPermit2Witness {
|
|
20
|
+
/** Random Permit2 nonce (stringified for API transport). */
|
|
21
|
+
nonce: string;
|
|
22
|
+
/** Signature deadline (unix seconds). */
|
|
23
|
+
deadline: number;
|
|
24
|
+
/** Compact signature: `0x` + r(32) + s(32) + v(1), 65 bytes. */
|
|
25
|
+
signature: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Signs the Permit2 EIP-712 digest using the SDK's derived key and packs
|
|
29
|
+
* the signature in the compact `r ‖ s ‖ v` form the backend submitter
|
|
30
|
+
* forwards to Permit2 on-chain.
|
|
31
|
+
*/
|
|
32
|
+
export declare function signPermit2Witness(params: SignPermit2Params): SignedPermit2Witness;
|
|
33
|
+
//# sourceMappingURL=permit2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permit2.d.ts","sourceRoot":"","sources":["../../src/cctp-inbound/permit2.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAG/B,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC;IAC/B,4DAA4D;IAC5D,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAED,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,iBAAiB,GACxB,oBAAoB,CAkBtB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permit2 signing for `executeAndCreateWithPermit2` using the SDK's
|
|
3
|
+
* HD-derived EVM key.
|
|
4
|
+
*
|
|
5
|
+
* Wraps the existing `buildPermit2FundingDigest` + `signEvmDigest` and
|
|
6
|
+
* returns the compact 65-byte signature format (`r ‖ s ‖ v`) that
|
|
7
|
+
* `HTLCCoordinator.executeAndCreateWithPermit2` expects, ready to POST
|
|
8
|
+
* to the backend's gasless-funding endpoint.
|
|
9
|
+
*/
|
|
10
|
+
import { buildPermit2FundingDigest, } from "../evm/coordinator.js";
|
|
11
|
+
import { signEvmDigest } from "../evm/signing.js";
|
|
12
|
+
/**
|
|
13
|
+
* Signs the Permit2 EIP-712 digest using the SDK's derived key and packs
|
|
14
|
+
* the signature in the compact `r ‖ s ‖ v` form the backend submitter
|
|
15
|
+
* forwards to Permit2 on-chain.
|
|
16
|
+
*/
|
|
17
|
+
export function signPermit2Witness(params) {
|
|
18
|
+
const digest = buildPermit2FundingDigest(params.funding);
|
|
19
|
+
const sig = signEvmDigest(params.secretKey, digest);
|
|
20
|
+
const r = sig.r.replace(/^0x/, "");
|
|
21
|
+
const s = sig.s.replace(/^0x/, "");
|
|
22
|
+
const v = sig.v.toString(16).padStart(2, "0");
|
|
23
|
+
if (r.length !== 64 || s.length !== 64) {
|
|
24
|
+
throw new Error(`Malformed signature scalars: r=${r.length}, s=${s.length}`);
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
nonce: params.funding.nonce.toString(),
|
|
28
|
+
deadline: Number(params.funding.deadline),
|
|
29
|
+
signature: `0x${r}${s}${v}`,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=permit2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permit2.js","sourceRoot":"","sources":["../../src/cctp-inbound/permit2.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,yBAAyB,GAE1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAoBlD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAyB;IAEzB,MAAM,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEpD,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,kCAAkC,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,MAAM,EAAE,CAC5D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE;QACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;KAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional per-call pre-flight for the CCTP-inbound UserOp batch.
|
|
3
|
+
*
|
|
4
|
+
* The bundler simulates the whole UserOp and returns a single
|
|
5
|
+
* "execution reverted" if any inner call fails — useless for
|
|
6
|
+
* iterating. This helper runs each call individually via `eth_call`
|
|
7
|
+
* with the smart account as `from`, surfacing the per-call revert
|
|
8
|
+
* data before we even talk to the bundler.
|
|
9
|
+
*
|
|
10
|
+
* Limitation: any call that re-enters the smart account (e.g. Permit2
|
|
11
|
+
* invoking `IERC1271.isValidSignature`) reverts here because the
|
|
12
|
+
* account isn't deployed at simulation time but WILL be in the real
|
|
13
|
+
* UserOp via factoryData. Treat these reverts as informational — the
|
|
14
|
+
* bundler's full-simulation is the authoritative check.
|
|
15
|
+
*/
|
|
16
|
+
import type { Address, PublicClient } from "viem";
|
|
17
|
+
import type { BatchCall } from "./userOp.js";
|
|
18
|
+
/**
|
|
19
|
+
* Walk a viem error chain and surface any RPC-level revert data
|
|
20
|
+
* (selector + encoded args). viem buries these under `cause` /
|
|
21
|
+
* `data` / nested `data.data`.
|
|
22
|
+
*/
|
|
23
|
+
export declare function extractRevertData(err: unknown): string | undefined;
|
|
24
|
+
export interface SimulateBatchCallsArgs {
|
|
25
|
+
calls: BatchCall[];
|
|
26
|
+
smartAccount: Address;
|
|
27
|
+
publicClient: PublicClient;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Run `eth_call` once per batch call with the smart account as
|
|
31
|
+
* `from`. Logs per-call status via `console.log` / `console.warn` so
|
|
32
|
+
* failures are visible in devtools. Never throws — pre-flight reverts
|
|
33
|
+
* for calls that re-enter the smart account are expected.
|
|
34
|
+
*/
|
|
35
|
+
export declare function simulateBatchCalls(args: SimulateBatchCallsArgs): Promise<void>;
|
|
36
|
+
//# sourceMappingURL=preflight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/cctp-inbound/preflight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAgBlE;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAqBf"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional per-call pre-flight for the CCTP-inbound UserOp batch.
|
|
3
|
+
*
|
|
4
|
+
* The bundler simulates the whole UserOp and returns a single
|
|
5
|
+
* "execution reverted" if any inner call fails — useless for
|
|
6
|
+
* iterating. This helper runs each call individually via `eth_call`
|
|
7
|
+
* with the smart account as `from`, surfacing the per-call revert
|
|
8
|
+
* data before we even talk to the bundler.
|
|
9
|
+
*
|
|
10
|
+
* Limitation: any call that re-enters the smart account (e.g. Permit2
|
|
11
|
+
* invoking `IERC1271.isValidSignature`) reverts here because the
|
|
12
|
+
* account isn't deployed at simulation time but WILL be in the real
|
|
13
|
+
* UserOp via factoryData. Treat these reverts as informational — the
|
|
14
|
+
* bundler's full-simulation is the authoritative check.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Walk a viem error chain and surface any RPC-level revert data
|
|
18
|
+
* (selector + encoded args). viem buries these under `cause` /
|
|
19
|
+
* `data` / nested `data.data`.
|
|
20
|
+
*/
|
|
21
|
+
export function extractRevertData(err) {
|
|
22
|
+
let cur = err;
|
|
23
|
+
for (let depth = 0; depth < 10 && cur; depth++) {
|
|
24
|
+
const node = cur;
|
|
25
|
+
if (typeof node.data === "string" && node.data.startsWith("0x")) {
|
|
26
|
+
return node.data;
|
|
27
|
+
}
|
|
28
|
+
if (typeof node.data === "object" && node.data !== null) {
|
|
29
|
+
const nested = node.data.data;
|
|
30
|
+
if (typeof nested === "string" && nested.startsWith("0x")) {
|
|
31
|
+
return nested;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
cur = node.cause;
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Run `eth_call` once per batch call with the smart account as
|
|
40
|
+
* `from`. Logs per-call status via `console.log` / `console.warn` so
|
|
41
|
+
* failures are visible in devtools. Never throws — pre-flight reverts
|
|
42
|
+
* for calls that re-enter the smart account are expected.
|
|
43
|
+
*/
|
|
44
|
+
export async function simulateBatchCalls(args) {
|
|
45
|
+
const { calls, smartAccount, publicClient } = args;
|
|
46
|
+
for (let i = 0; i < calls.length; i++) {
|
|
47
|
+
const call = calls[i];
|
|
48
|
+
const label = `[cctp-inbound/preflight] call ${i + 1}/${calls.length} to ${call.to}`;
|
|
49
|
+
try {
|
|
50
|
+
await publicClient.call({
|
|
51
|
+
account: smartAccount,
|
|
52
|
+
to: call.to,
|
|
53
|
+
data: call.data,
|
|
54
|
+
value: call.value,
|
|
55
|
+
});
|
|
56
|
+
console.log(`${label} OK`);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
const revertData = extractRevertData(err);
|
|
60
|
+
console.warn(`${label} reverted in pre-flight (may be OK at send)`, {
|
|
61
|
+
revertData: revertData ?? "(none)",
|
|
62
|
+
error: err,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/cctp-inbound/preflight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,IAAI,GAAG,GAAY,GAAG,CAAC;IACvB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,GAA0C,CAAC;QACxD,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACxD,MAAM,MAAM,GAAI,IAAI,CAAC,IAA0B,CAAC,IAAI,CAAC;YACrD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1D,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAQD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAA4B;IAE5B,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,KAAK,GAAG,iCAAiC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC;QACrF,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,IAAI,CAAC;gBACtB,OAAO,EAAE,YAAY;gBACrB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,6CAA6C,EAAE;gBAClE,UAAU,EAAE,UAAU,IAAI,QAAQ;gBAClC,KAAK,EAAE,GAAG;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
|