@lendasat/lendaswap-sdk-pure 0.2.41 → 0.2.43

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.
Files changed (252) hide show
  1. package/dist/_esm-6K2AP5GG.js +3663 -0
  2. package/dist/_esm-6K2AP5GG.js.map +1 -0
  3. package/dist/_esm-UGRDSVEV.cjs +3662 -0
  4. package/dist/_esm-UGRDSVEV.cjs.map +1 -0
  5. package/dist/api/client.d.ts +0 -4
  6. package/dist/api/client.d.ts.map +1 -1
  7. package/dist/base-2KYNAFR3.cjs +109 -0
  8. package/dist/base-2KYNAFR3.cjs.map +1 -0
  9. package/dist/base-HMHH3XPM.js +9 -0
  10. package/dist/base-HMHH3XPM.js.map +1 -0
  11. package/dist/ccip-EBXWV2U3.js +8 -0
  12. package/dist/ccip-EBXWV2U3.js.map +1 -0
  13. package/dist/ccip-PD37NJHA.cjs +26 -0
  14. package/dist/ccip-PD37NJHA.cjs.map +1 -0
  15. package/dist/cctp-bridge/index.cjs +67 -0
  16. package/dist/cctp-bridge/index.cjs.map +1 -0
  17. package/dist/cctp-bridge/index.js +53 -15
  18. package/dist/cctp-bridge/index.js.map +1 -1
  19. package/dist/cctp-inbound/client.d.ts +21 -19
  20. package/dist/cctp-inbound/client.d.ts.map +1 -1
  21. package/dist/cctp-inbound/smartAccount.d.ts +21 -19
  22. package/dist/cctp-inbound/smartAccount.d.ts.map +1 -1
  23. package/dist/chunk-4JXN4UPB.js +554 -0
  24. package/dist/chunk-4JXN4UPB.js.map +1 -0
  25. package/dist/chunk-A4GKKURK.cjs +430 -0
  26. package/dist/chunk-A4GKKURK.cjs.map +1 -0
  27. package/dist/chunk-BZU3R5DJ.cjs +554 -0
  28. package/dist/chunk-BZU3R5DJ.cjs.map +1 -0
  29. package/dist/chunk-DBBCKPZ5.js +421 -0
  30. package/dist/chunk-DBBCKPZ5.js.map +1 -0
  31. package/dist/chunk-DNSJDKTP.cjs +96 -0
  32. package/dist/chunk-DNSJDKTP.cjs.map +1 -0
  33. package/dist/chunk-EIK6BZWG.js +90 -0
  34. package/dist/chunk-EIK6BZWG.js.map +1 -0
  35. package/dist/chunk-GVAPVS4Z.js +6144 -0
  36. package/dist/chunk-GVAPVS4Z.js.map +1 -0
  37. package/dist/chunk-I7TGLGN6.js +46 -0
  38. package/dist/chunk-I7TGLGN6.js.map +1 -0
  39. package/dist/chunk-JBVKWKD4.cjs +50 -0
  40. package/dist/chunk-JBVKWKD4.cjs.map +1 -0
  41. package/dist/chunk-LA3YX2HD.js +47096 -0
  42. package/dist/chunk-LA3YX2HD.js.map +1 -0
  43. package/dist/chunk-PKDJZJMV.cjs +2214 -0
  44. package/dist/chunk-PKDJZJMV.cjs.map +1 -0
  45. package/dist/chunk-PRN5VZOM.js +370 -0
  46. package/dist/chunk-PRN5VZOM.js.map +1 -0
  47. package/dist/chunk-RIOT5VOJ.cjs +47240 -0
  48. package/dist/chunk-RIOT5VOJ.cjs.map +1 -0
  49. package/dist/chunk-WVZSHRV7.cjs +431 -0
  50. package/dist/chunk-WVZSHRV7.cjs.map +1 -0
  51. package/dist/chunk-YLWPBHMV.cjs +6311 -0
  52. package/dist/chunk-YLWPBHMV.cjs.map +1 -0
  53. package/dist/chunk-Z2FCTNRC.js +2210 -0
  54. package/dist/chunk-Z2FCTNRC.js.map +1 -0
  55. package/dist/client.d.ts +68 -1
  56. package/dist/client.d.ts.map +1 -1
  57. package/dist/compose-quote.d.ts +77 -0
  58. package/dist/compose-quote.d.ts.map +1 -0
  59. package/dist/delegate.cjs +23 -0
  60. package/dist/delegate.cjs.map +1 -0
  61. package/dist/delegate.js +8 -269
  62. package/dist/delegate.js.map +1 -1
  63. package/dist/dist-PWXNFVDF.js +8 -0
  64. package/dist/dist-PWXNFVDF.js.map +1 -0
  65. package/dist/dist-VEHYC67F.cjs +550 -0
  66. package/dist/dist-VEHYC67F.cjs.map +1 -0
  67. package/dist/esplora.d.ts +14 -0
  68. package/dist/esplora.d.ts.map +1 -1
  69. package/dist/generated/api.d.ts +235 -38
  70. package/dist/generated/api.d.ts.map +1 -1
  71. package/dist/index.cjs +35461 -0
  72. package/dist/index.cjs.map +1 -0
  73. package/dist/index.d.ts +2 -1
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +35312 -32
  76. package/dist/index.js.map +1 -1
  77. package/dist/mine.wasm-LUTPOAD2.js +12 -0
  78. package/dist/mine.wasm-LUTPOAD2.js.map +1 -0
  79. package/dist/mine.wasm-Z3ORSBKN.cjs +12 -0
  80. package/dist/mine.wasm-Z3ORSBKN.cjs.map +1 -0
  81. package/dist/node.cjs +166 -0
  82. package/dist/node.cjs.map +1 -0
  83. package/dist/node.js +159 -18
  84. package/dist/node.js.map +1 -1
  85. package/dist/secp256k1-B6OW5ZCM.js +8 -0
  86. package/dist/secp256k1-B6OW5ZCM.js.map +1 -0
  87. package/dist/secp256k1-PJCSE4N6.cjs +30 -0
  88. package/dist/secp256k1-PJCSE4N6.cjs.map +1 -0
  89. package/dist/tokens.d.ts +2 -1
  90. package/dist/tokens.d.ts.map +1 -1
  91. package/dist/types/chain-config.d.ts +50 -0
  92. package/dist/types/chain-config.d.ts.map +1 -0
  93. package/dist/types/chain.d.ts +11 -0
  94. package/dist/types/chain.d.ts.map +1 -0
  95. package/dist/types/dex-quote.d.ts +85 -0
  96. package/dist/types/dex-quote.d.ts.map +1 -0
  97. package/dist/types/index.d.ts +15 -0
  98. package/dist/types/index.d.ts.map +1 -0
  99. package/dist/types/network-fees.d.ts +43 -0
  100. package/dist/types/network-fees.d.ts.map +1 -0
  101. package/dist/types/quote.d.ts +87 -0
  102. package/dist/types/quote.d.ts.map +1 -0
  103. package/dist/types/swap-pairs.d.ts +37 -0
  104. package/dist/types/swap-pairs.d.ts.map +1 -0
  105. package/dist/version.d.ts +2 -2
  106. package/dist/wallet-4YGTKWNZ.js +7 -0
  107. package/dist/wallet-4YGTKWNZ.js.map +1 -0
  108. package/dist/wallet-SZJDXAY7.cjs +45 -0
  109. package/dist/wallet-SZJDXAY7.cjs.map +1 -0
  110. package/package.json +23 -10
  111. package/dist/api/client.js +0 -13
  112. package/dist/api/client.js.map +0 -1
  113. package/dist/arkade-network.js +0 -40
  114. package/dist/arkade-network.js.map +0 -1
  115. package/dist/arkade.js +0 -61
  116. package/dist/arkade.js.map +0 -1
  117. package/dist/cctp/attestation.js +0 -149
  118. package/dist/cctp/attestation.js.map +0 -1
  119. package/dist/cctp/constants.js +0 -92
  120. package/dist/cctp/constants.js.map +0 -1
  121. package/dist/cctp/fee.js +0 -70
  122. package/dist/cctp/fee.js.map +0 -1
  123. package/dist/cctp/index.js +0 -13
  124. package/dist/cctp/index.js.map +0 -1
  125. package/dist/cctp/types.js +0 -5
  126. package/dist/cctp/types.js.map +0 -1
  127. package/dist/cctp/utils.js +0 -91
  128. package/dist/cctp/utils.js.map +0 -1
  129. package/dist/cctp-bridge/bridge.js +0 -74
  130. package/dist/cctp-bridge/bridge.js.map +0 -1
  131. package/dist/cctp-inbound/approveAndBurn.js +0 -95
  132. package/dist/cctp-inbound/approveAndBurn.js.map +0 -1
  133. package/dist/cctp-inbound/burn.js +0 -66
  134. package/dist/cctp-inbound/burn.js.map +0 -1
  135. package/dist/cctp-inbound/chainMap.js +0 -128
  136. package/dist/cctp-inbound/chainMap.js.map +0 -1
  137. package/dist/cctp-inbound/client.js +0 -125
  138. package/dist/cctp-inbound/client.js.map +0 -1
  139. package/dist/cctp-inbound/eip2612.js +0 -95
  140. package/dist/cctp-inbound/eip2612.js.map +0 -1
  141. package/dist/cctp-inbound/evmSignerAdapter.js +0 -82
  142. package/dist/cctp-inbound/evmSignerAdapter.js.map +0 -1
  143. package/dist/cctp-inbound/fundSwap.js +0 -95
  144. package/dist/cctp-inbound/fundSwap.js.map +0 -1
  145. package/dist/cctp-inbound/index.js +0 -34
  146. package/dist/cctp-inbound/index.js.map +0 -1
  147. package/dist/cctp-inbound/permit2.js +0 -32
  148. package/dist/cctp-inbound/permit2.js.map +0 -1
  149. package/dist/cctp-inbound/preflight.js +0 -84
  150. package/dist/cctp-inbound/preflight.js.map +0 -1
  151. package/dist/cctp-inbound/recover.js +0 -177
  152. package/dist/cctp-inbound/recover.js.map +0 -1
  153. package/dist/cctp-inbound/smartAccount.js +0 -117
  154. package/dist/cctp-inbound/smartAccount.js.map +0 -1
  155. package/dist/cctp-inbound/submit.js +0 -136
  156. package/dist/cctp-inbound/submit.js.map +0 -1
  157. package/dist/cctp-inbound/types.js +0 -5
  158. package/dist/cctp-inbound/types.js.map +0 -1
  159. package/dist/cctp-inbound/userOp.js +0 -151
  160. package/dist/cctp-inbound/userOp.js.map +0 -1
  161. package/dist/client.js +0 -4126
  162. package/dist/client.js.map +0 -1
  163. package/dist/create/arkade-to-lightning.js +0 -76
  164. package/dist/create/arkade-to-lightning.js.map +0 -1
  165. package/dist/create/arkade.js +0 -86
  166. package/dist/create/arkade.js.map +0 -1
  167. package/dist/create/bitcoin-to-arkade.js +0 -76
  168. package/dist/create/bitcoin-to-arkade.js.map +0 -1
  169. package/dist/create/bitcoin.js +0 -77
  170. package/dist/create/bitcoin.js.map +0 -1
  171. package/dist/create/evm-to-arkade.js +0 -80
  172. package/dist/create/evm-to-arkade.js.map +0 -1
  173. package/dist/create/evm-to-bitcoin.js +0 -82
  174. package/dist/create/evm-to-bitcoin.js.map +0 -1
  175. package/dist/create/evm-to-lightning.js +0 -89
  176. package/dist/create/evm-to-lightning.js.map +0 -1
  177. package/dist/create/index.js +0 -21
  178. package/dist/create/index.js.map +0 -1
  179. package/dist/create/lightning-to-arkade.js +0 -69
  180. package/dist/create/lightning-to-arkade.js.map +0 -1
  181. package/dist/create/lightning.js +0 -61
  182. package/dist/create/lightning.js.map +0 -1
  183. package/dist/create/retry.js +0 -71
  184. package/dist/create/retry.js.map +0 -1
  185. package/dist/create/types.js +0 -5
  186. package/dist/create/types.js.map +0 -1
  187. package/dist/escrow/index.js +0 -115
  188. package/dist/escrow/index.js.map +0 -1
  189. package/dist/esplora.js +0 -47
  190. package/dist/esplora.js.map +0 -1
  191. package/dist/evm/coordinator.js +0 -714
  192. package/dist/evm/coordinator.js.map +0 -1
  193. package/dist/evm/htlc.js +0 -278
  194. package/dist/evm/htlc.js.map +0 -1
  195. package/dist/evm/index.js +0 -10
  196. package/dist/evm/index.js.map +0 -1
  197. package/dist/evm/signing.js +0 -70
  198. package/dist/evm/signing.js.map +0 -1
  199. package/dist/evm/wallet.js +0 -133
  200. package/dist/evm/wallet.js.map +0 -1
  201. package/dist/generated/api.js +0 -6
  202. package/dist/generated/api.js.map +0 -1
  203. package/dist/logging.js +0 -130
  204. package/dist/logging.js.map +0 -1
  205. package/dist/price-calculations.js +0 -135
  206. package/dist/price-calculations.js.map +0 -1
  207. package/dist/redeem/arkade.js +0 -416
  208. package/dist/redeem/arkade.js.map +0 -1
  209. package/dist/redeem/ethereum.js +0 -206
  210. package/dist/redeem/ethereum.js.map +0 -1
  211. package/dist/redeem/gasless.js +0 -73
  212. package/dist/redeem/gasless.js.map +0 -1
  213. package/dist/redeem/index.js +0 -189
  214. package/dist/redeem/index.js.map +0 -1
  215. package/dist/redeem/types.js +0 -36
  216. package/dist/redeem/types.js.map +0 -1
  217. package/dist/refund/arkade.js +0 -200
  218. package/dist/refund/arkade.js.map +0 -1
  219. package/dist/refund/collab-arkade-evm.js +0 -307
  220. package/dist/refund/collab-arkade-evm.js.map +0 -1
  221. package/dist/refund/collab-arkade-lightning.js +0 -245
  222. package/dist/refund/collab-arkade-lightning.js.map +0 -1
  223. package/dist/refund/index.js +0 -12
  224. package/dist/refund/index.js.map +0 -1
  225. package/dist/refund/onchain.js +0 -366
  226. package/dist/refund/onchain.js.map +0 -1
  227. package/dist/signer/index.js +0 -249
  228. package/dist/signer/index.js.map +0 -1
  229. package/dist/storage/idb.js +0 -236
  230. package/dist/storage/idb.js.map +0 -1
  231. package/dist/storage/index.js +0 -98
  232. package/dist/storage/index.js.map +0 -1
  233. package/dist/storage/sqlite.js +0 -206
  234. package/dist/storage/sqlite.js.map +0 -1
  235. package/dist/storage/types.js +0 -9
  236. package/dist/storage/types.js.map +0 -1
  237. package/dist/tokens.js +0 -322
  238. package/dist/tokens.js.map +0 -1
  239. package/dist/usd-price.js +0 -96
  240. package/dist/usd-price.js.map +0 -1
  241. package/dist/usdt0-bridge/constants.js +0 -71
  242. package/dist/usdt0-bridge/constants.js.map +0 -1
  243. package/dist/usdt0-bridge/index.js +0 -11
  244. package/dist/usdt0-bridge/index.js.map +0 -1
  245. package/dist/usdt0-bridge/tracking.js +0 -123
  246. package/dist/usdt0-bridge/tracking.js.map +0 -1
  247. package/dist/usdt0-bridge/utils.js +0 -51
  248. package/dist/usdt0-bridge/utils.js.map +0 -1
  249. package/dist/version.js +0 -6
  250. package/dist/version.js.map +0 -1
  251. package/dist/ws.js +0 -145
  252. package/dist/ws.js.map +0 -1
@@ -1,149 +0,0 @@
1
- /**
2
- * CCTP attestation client.
3
- *
4
- * Polls Circle's IRIS API for attestations after a USDC burn.
5
- * Used on the destination chain to call MessageTransmitter.receiveMessage().
6
- */
7
- import { CCTP_DOMAINS, IRIS_API_MAINNET, } from "./constants.js";
8
- /**
9
- * Poll the IRIS V2 API until the attestation is ready for a given burn tx.
10
- *
11
- * @returns The message and attestation bytes needed to call receiveMessage().
12
- * @throws If the attestation is not ready within the timeout, or the request fails.
13
- */
14
- export async function fetchAttestation(options) {
15
- const { sourceChain, txHash, irisApiUrl = IRIS_API_MAINNET, pollIntervalMs = 10_000, timeoutMs = 900_000, signal, } = options;
16
- const sourceDomain = CCTP_DOMAINS[sourceChain];
17
- if (sourceDomain === undefined) {
18
- throw new Error(`Unknown CCTP source chain: ${sourceChain}`);
19
- }
20
- const url = `${irisApiUrl}/v2/messages/${sourceDomain}?transactionHash=${txHash}`;
21
- const startTime = Date.now();
22
- while (Date.now() - startTime < timeoutMs) {
23
- signal?.throwIfAborted();
24
- try {
25
- const response = await fetch(url);
26
- if (response.status === 404) {
27
- // Message not yet indexed, keep polling
28
- await sleep(pollIntervalMs, signal);
29
- continue;
30
- }
31
- if (!response.ok) {
32
- throw new Error(`IRIS API error: ${response.status} ${response.statusText}`);
33
- }
34
- const data = await response.json();
35
- if (data.messages.length > 0 && data.messages[0].status === "complete") {
36
- return {
37
- message: data.messages[0].message,
38
- attestation: data.messages[0].attestation,
39
- };
40
- }
41
- // Attestation pending, keep polling
42
- await sleep(pollIntervalMs, signal);
43
- }
44
- catch (err) {
45
- if (err instanceof DOMException && err.name === "AbortError") {
46
- throw err;
47
- }
48
- // Network errors — retry after delay
49
- await sleep(pollIntervalMs, signal);
50
- }
51
- }
52
- throw new Error(`Attestation not ready after ${timeoutMs / 1000}s for tx ${txHash} on ${sourceChain}`);
53
- }
54
- /**
55
- * Poll the IRIS V2 API until the CCTP message is forwarded and delivered.
56
- *
57
- * Tracks attestation → forwarding → delivery on the destination chain.
58
- *
59
- * @returns The message result with forwarding details (destination tx hash, amount, fee).
60
- * @throws If the message is not delivered within the timeout.
61
- */
62
- export async function trackCctpMessage(options) {
63
- const { sourceChain, txHash, irisApiUrl = IRIS_API_MAINNET, pollIntervalMs = 5_000, timeoutMs = 600_000, signal, onStatusChange, } = options;
64
- const sourceDomain = CCTP_DOMAINS[sourceChain];
65
- if (sourceDomain === undefined) {
66
- throw new Error(`Unknown CCTP source chain: ${sourceChain}`);
67
- }
68
- const url = `${irisApiUrl}/v2/messages/${sourceDomain}?transactionHash=${txHash}`;
69
- const startTime = Date.now();
70
- let lastStatus;
71
- const emitStatus = (status) => {
72
- if (status !== lastStatus) {
73
- lastStatus = status;
74
- onStatusChange?.(status);
75
- }
76
- };
77
- while (Date.now() - startTime < timeoutMs) {
78
- signal?.throwIfAborted();
79
- try {
80
- const response = await fetch(url);
81
- if (response.status === 404) {
82
- emitStatus("PENDING");
83
- await sleep(pollIntervalMs, signal);
84
- continue;
85
- }
86
- if (!response.ok) {
87
- throw new Error(`IRIS API error: ${response.status} ${response.statusText}`);
88
- }
89
- const data = await response.json();
90
- if (data.messages.length === 0) {
91
- emitStatus("PENDING");
92
- await sleep(pollIntervalMs, signal);
93
- continue;
94
- }
95
- const msg = data.messages[0];
96
- if (msg.status !== "complete") {
97
- emitStatus("CONFIRMING");
98
- await sleep(pollIntervalMs, signal);
99
- continue;
100
- }
101
- // Attestation is complete — check forwarding state
102
- if ((msg.forwardState === "COMPLETE" || msg.forwardState === "CONFIRMED") &&
103
- msg.forwardTxHash) {
104
- emitStatus("COMPLETE");
105
- const cctpSentAmount = msg.decodedMessage?.decodedMessageBody?.amount;
106
- const cctpPaidFee = msg.decodedMessage?.decodedMessageBody?.feeExecuted;
107
- return {
108
- status: "COMPLETE",
109
- forwardTxHash: msg.forwardTxHash,
110
- amount: cctpSentAmount && cctpPaidFee
111
- ? (BigInt(cctpSentAmount) - BigInt(cctpPaidFee)).toString()
112
- : undefined,
113
- feeExecuted: msg.decodedMessage?.decodedMessageBody?.feeExecuted,
114
- };
115
- }
116
- // Forwarding failed — stop polling
117
- if (msg.forwardState &&
118
- msg.forwardState !== "PENDING" &&
119
- msg.forwardState !== "COMPLETE") {
120
- emitStatus("FAILED");
121
- throw new Error(`CCTP forwarding failed (state: ${msg.forwardState}) for tx ${txHash} on ${sourceChain}`);
122
- }
123
- // Attestation complete but forwarding still in progress
124
- emitStatus("FORWARDING");
125
- await sleep(pollIntervalMs, signal);
126
- }
127
- catch (err) {
128
- if (err instanceof DOMException && err.name === "AbortError") {
129
- throw err;
130
- }
131
- // Network errors — retry after delay
132
- await sleep(pollIntervalMs, signal);
133
- }
134
- }
135
- throw new Error(`CCTP message not delivered after ${timeoutMs / 1000}s for tx ${txHash} on ${sourceChain}`);
136
- }
137
- // ============================================================================
138
- // Helpers
139
- // ============================================================================
140
- function sleep(ms, signal) {
141
- return new Promise((resolve, reject) => {
142
- const timer = setTimeout(resolve, ms);
143
- signal?.addEventListener("abort", () => {
144
- clearTimeout(timer);
145
- reject(new DOMException("Aborted", "AbortError"));
146
- }, { once: true });
147
- });
148
- }
149
- //# sourceMappingURL=attestation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"attestation.js","sourceRoot":"","sources":["../../src/cctp/attestation.ts"],"names":[],"mappings":"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"}
@@ -1,92 +0,0 @@
1
- /**
2
- * CCTP (Cross-Chain Transfer Protocol) constants.
3
- *
4
- * Uses CCTP V2 contracts which share the same address across all EVM chains.
5
- * See: https://developers.circle.com/cctp/references/contract-addresses
6
- */
7
- // ============================================================================
8
- // CCTP V2 contract addresses (same on all EVM chains)
9
- // ============================================================================
10
- export const TOKEN_MESSENGER_V2 = "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d";
11
- export const MESSAGE_TRANSMITTER_V2 = "0x81D40F21F12A8F0E3252Bccb954D722d4c464B64";
12
- // ============================================================================
13
- // CCTP Domain IDs
14
- // See: https://developers.circle.com/cctp/concepts/supported-chains-and-domains
15
- // ============================================================================
16
- export const CCTP_DOMAINS = {
17
- Ethereum: 0,
18
- Avalanche: 1,
19
- Optimism: 2,
20
- Arbitrum: 3,
21
- Solana: 5,
22
- Base: 6,
23
- Polygon: 7,
24
- Unichain: 10,
25
- Linea: 11,
26
- Sonic: 13,
27
- "World Chain": 14,
28
- Monad: 15,
29
- Sei: 16,
30
- XDC: 18,
31
- HyperEVM: 19,
32
- Ink: 21,
33
- };
34
- // ============================================================================
35
- // USDC addresses per chain (native USDC)
36
- // ============================================================================
37
- export const USDC_ADDRESSES = {
38
- Ethereum: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
39
- Polygon: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
40
- Arbitrum: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
41
- Base: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
42
- Optimism: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
43
- Avalanche: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
44
- Linea: "0x176211869ca2b568f2a7d4ee941e073a821ee1ff",
45
- Unichain: "0x078d782b760474a361dda0af3839290b0ef57ad6",
46
- "World Chain": "0x79A02482A880bCe3F13E09da970dC34dB4cD24D1",
47
- Ink: "0x2D270e6886d130D724215A266106e6832161EAEd",
48
- Sonic: "0x29219dd400f2bf60e5a23d13be72b486d4038894",
49
- Sei: "0xe15fC38F6D8c56aF07bbCBe3BAf5708A2Bf42392",
50
- HyperEVM: "0xb88339CB7199b77E23DB6E890353E22632Ba630f",
51
- XDC: "0xfA2958CB79b0491CC627c1557F441eF849Ca8eb1",
52
- Monad: "0x754704Bc059F8C67012fEd69BC8A327a5aafb603",
53
- // Solana's USDC is an SPL mint, encoded as a base58 pubkey rather than
54
- // an EVM `0x...` hex address. Callers that parse the value with viem's
55
- // `getAddress` / `Address.from_str` must guard against this entry.
56
- Solana: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
57
- };
58
- export const EURC_ADDRESSES = {
59
- Ethereum: "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c",
60
- };
61
- export const USAT_ADDRESSES = {
62
- Ethereum: "0x07041776F5007aCa2A54844f50503a18A72A8b68",
63
- };
64
- // ============================================================================
65
- // V2 addresses are the same on all chains, but kept as Records for
66
- // backward compatibility and for the receiveMessage destination lookup.
67
- // ============================================================================
68
- export const TOKEN_MESSENGER_ADDRESSES = Object.fromEntries(Object.keys(CCTP_DOMAINS).map((chain) => [chain, TOKEN_MESSENGER_V2]));
69
- export const MESSAGE_TRANSMITTER_ADDRESSES = Object.fromEntries(Object.keys(CCTP_DOMAINS).map((chain) => [chain, MESSAGE_TRANSMITTER_V2]));
70
- // ============================================================================
71
- // Forwarding Service
72
- // ============================================================================
73
- /**
74
- * Magic hookData for Circle's Forwarding Service.
75
- * Encodes "cctp-forward" + version 0 + data length 0.
76
- * When passed to depositForBurnWithHook, Circle auto-mints on destination — zero gas needed.
77
- */
78
- export const FORWARDING_SERVICE_HOOK_DATA = "0x636374702d666f72776172640000000000000000000000000000000000000000";
79
- /** Fast transfer finality threshold. */
80
- export const FINALITY_FAST = 1000;
81
- /** Standard transfer finality threshold. */
82
- export const FINALITY_STANDARD = 2000;
83
- /** Forwarding fee for Ethereum destination ($1.25 in USDC units). */
84
- export const FORWARDING_FEE_ETHEREUM = 1250000n;
85
- /** Forwarding fee for all other destinations ($0.20 in USDC units). */
86
- export const FORWARDING_FEE_OTHER = 200000n;
87
- // ============================================================================
88
- // Circle Attestation (IRIS) API
89
- // ============================================================================
90
- export const IRIS_API_MAINNET = "https://iris-api.circle.com";
91
- export const IRIS_API_TESTNET = "https://iris-api-sandbox.circle.com";
92
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/cctp/constants.ts"],"names":[],"mappings":"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"}
package/dist/cctp/fee.js DELETED
@@ -1,70 +0,0 @@
1
- /**
2
- * CCTP v2 fast-transfer fee query against Circle's IRIS API.
3
- *
4
- * The fast-transfer fee (`minimumFee`, in basis points × 100) is deducted
5
- * from the minted amount on the destination chain whenever the burn's
6
- * `minFinalityThreshold ≤ 1000`. We need to query it to know precisely
7
- * how much USDC will arrive so the Permit2 signature pulls the right
8
- * amount and the Multicall doesn't underflow.
9
- *
10
- * Mirrors the Rust backend's `swap/src/cctp.rs::compute_max_fee`.
11
- */
12
- import { FINALITY_FAST, IRIS_API_MAINNET } from "./constants.js";
13
- /**
14
- * Fetch the fee entry for the given source → destination pair and
15
- * finality threshold. Returns the raw IRIS shape — callers that want
16
- * an applied maxFee should pass this to {@link computeCctpFastFee}.
17
- */
18
- export async function fetchCctpFee(options) {
19
- const { sourceDomain, destinationDomain, finalityThreshold = FINALITY_FAST, irisApiUrl = IRIS_API_MAINNET, signal, } = options;
20
- const url = `${irisApiUrl}/v2/burn/USDC/fees/${sourceDomain}/${destinationDomain}?forward=true`;
21
- const response = await fetch(url, { signal });
22
- if (!response.ok) {
23
- throw new Error(`IRIS fee lookup failed: ${response.status} ${response.statusText}`);
24
- }
25
- const entries = (await response.json());
26
- const entry = entries.find((e) => e.finalityThreshold === finalityThreshold) ??
27
- entries[0];
28
- if (!entry) {
29
- throw new Error(`IRIS returned no fee entries for ${sourceDomain}→${destinationDomain}`);
30
- }
31
- return entry;
32
- }
33
- /**
34
- * Tiny TTL cache for CCTP fee lookups. The IRIS fee is effectively
35
- * constant per-pair minute-to-minute — re-fetching on every quote
36
- * keystroke would bomb IRIS for no gain. 60s TTL is ample.
37
- */
38
- const feeCache = new Map();
39
- const FEE_CACHE_TTL_MS = 60_000;
40
- /**
41
- * Cached variant of {@link fetchCctpFee}. Multiple callers within a
42
- * 60-second window share a single IRIS round-trip per source→dest pair.
43
- */
44
- export async function getCachedCctpFee(options) {
45
- const { sourceDomain, destinationDomain, finalityThreshold = FINALITY_FAST, irisApiUrl = IRIS_API_MAINNET, } = options;
46
- const key = `${sourceDomain}-${destinationDomain}-${finalityThreshold}-${irisApiUrl}`;
47
- const cached = feeCache.get(key);
48
- if (cached && cached.expiresAt > Date.now()) {
49
- return cached.entry;
50
- }
51
- const entry = await fetchCctpFee(options);
52
- feeCache.set(key, { entry, expiresAt: Date.now() + FEE_CACHE_TTL_MS });
53
- return entry;
54
- }
55
- /**
56
- * Apply IRIS's `minimumFee` (basis points) to an amount in USDC smallest
57
- * units, matching the Rust backend's formula:
58
- * protocolFee = amount × round(minimumFee × 100) ÷ 1_000_000
59
- *
60
- * Adds a conservative 20% buffer to absorb rounding drift between quote
61
- * time and burn time. Return value is the fee in USDC smallest units,
62
- * suitable for `maxFee` in `depositForBurn` and as the subtracted amount
63
- * when sizing the Permit2 permit.
64
- */
65
- export function computeCctpFastFee(entry, amountUsdcUnits) {
66
- const bpsScaled = Math.round(entry.minimumFee * 100);
67
- const protocolFee = (amountUsdcUnits * BigInt(bpsScaled)) / 1000000n;
68
- return (protocolFee * 120n) / 100n;
69
- }
70
- //# sourceMappingURL=fee.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fee.js","sourceRoot":"","sources":["../../src/cctp/fee.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AA+BjE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAA4B;IAE5B,MAAM,EACJ,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAAG,aAAa,EACjC,UAAU,GAAG,gBAAgB,EAC7B,MAAM,GACP,GAAG,OAAO,CAAC;IAEZ,MAAM,GAAG,GAAG,GAAG,UAAU,sBAAsB,YAAY,IAAI,iBAAiB,eAAe,CAAC;IAChG,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,2BAA2B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACpE,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;IAC1D,MAAM,KAAK,GACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,KAAK,iBAAiB,CAAC;QAC9D,OAAO,CAAC,CAAC,CAAC,CAAC;IACb,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,oCAAoC,YAAY,IAAI,iBAAiB,EAAE,CACxE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAsD,CAAC;AAC/E,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA4B;IAE5B,MAAM,EACJ,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAAG,aAAa,EACjC,UAAU,GAAG,gBAAgB,GAC9B,GAAG,OAAO,CAAC;IACZ,MAAM,GAAG,GAAG,GAAG,YAAY,IAAI,iBAAiB,IAAI,iBAAiB,IAAI,UAAU,EAAE,CAAC;IACtF,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC,CAAC;IACvE,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAmB,EACnB,eAAuB;IAEvB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,QAAU,CAAC;IACvE,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AACrC,CAAC"}
@@ -1,13 +0,0 @@
1
- /**
2
- * CCTP (Cross-Chain Transfer Protocol) module.
3
- *
4
- * Provides utilities for bridging USDC cross-chain via Circle's CCTP:
5
- * - Domain ID mappings and contract addresses
6
- * - Attestation polling (IRIS API)
7
- * - Address conversion helpers
8
- */
9
- export { fetchAttestation, trackCctpMessage, } from "./attestation.js";
10
- export { CCTP_DOMAINS, EURC_ADDRESSES, FINALITY_FAST, FINALITY_STANDARD, FORWARDING_FEE_ETHEREUM, FORWARDING_FEE_OTHER, FORWARDING_SERVICE_HOOK_DATA, IRIS_API_MAINNET, IRIS_API_TESTNET, MESSAGE_TRANSMITTER_ADDRESSES, MESSAGE_TRANSMITTER_V2, TOKEN_MESSENGER_ADDRESSES, TOKEN_MESSENGER_V2, USAT_ADDRESSES, USDC_ADDRESSES, } from "./constants.js";
11
- export { computeCctpFastFee, fetchCctpFee, getCachedCctpFee, } from "./fee.js";
12
- export { addressToBytes32, bytes32ToAddress, getDomain, isValidSolanaAddress, needsBridge, solanaAddressToBytes32, } from "./utils.js";
13
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cctp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAGL,gBAAgB,EAEhB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,YAAY,EAEZ,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,4BAA4B,EAC5B,gBAAgB,EAChB,gBAAgB,EAChB,6BAA6B,EAC7B,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAElB,YAAY,EACZ,gBAAgB,GAGjB,MAAM,UAAU,CAAC;AAWlB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,oBAAoB,EACpB,WAAW,EACX,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * CCTP type definitions.
3
- */
4
- export {};
5
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cctp/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,91 +0,0 @@
1
- /**
2
- * CCTP utility functions.
3
- */
4
- import { base58 } from "@scure/base";
5
- import { CCTP_DOMAINS } from "./constants.js";
6
- /**
7
- * Convert an EVM address to CCTP's bytes32 format (left-padded with zeros).
8
- * @param address - 0x-prefixed hex address (20 bytes)
9
- * @returns 0x-prefixed bytes32 hex string (32 bytes)
10
- */
11
- export function addressToBytes32(address) {
12
- const clean = address.toLowerCase().replace("0x", "");
13
- if (clean.length !== 40) {
14
- throw new Error(`Invalid address length: expected 40 hex chars, got ${clean.length}`);
15
- }
16
- return `0x${clean.padStart(64, "0")}`;
17
- }
18
- /**
19
- * Convert a CCTP bytes32 back to an EVM address.
20
- * @param bytes32 - 0x-prefixed bytes32 hex string
21
- * @returns 0x-prefixed checksummed address
22
- */
23
- export function bytes32ToAddress(bytes32) {
24
- const clean = bytes32.replace("0x", "");
25
- if (clean.length !== 64) {
26
- throw new Error(`Invalid bytes32 length: expected 64 hex chars, got ${clean.length}`);
27
- }
28
- return `0x${clean.slice(24)}`;
29
- }
30
- /**
31
- * Get the CCTP domain ID for a chain name.
32
- * @param chainName - Chain name (e.g. "Ethereum", "Polygon", "Arbitrum")
33
- * @returns The CCTP domain ID, or undefined if not supported.
34
- */
35
- export function getDomain(chainName) {
36
- return CCTP_DOMAINS[chainName];
37
- }
38
- /**
39
- * Check if two chains require CCTP bridging (i.e., they're different chains).
40
- * @param sourceChain - Source chain name
41
- * @param targetChain - Target chain name
42
- * @returns true if CCTP bridging is needed
43
- */
44
- export function needsBridge(sourceChain, targetChain) {
45
- if (sourceChain === targetChain)
46
- return false;
47
- const sourceDomain = getDomain(sourceChain);
48
- const targetDomain = getDomain(targetChain);
49
- return sourceDomain !== undefined && targetDomain !== undefined;
50
- }
51
- /**
52
- * Validate a Solana address. Solana pubkeys are base58-encoded 32-byte
53
- * values, typically 32-44 base58 characters. Cheap structural check —
54
- * does not verify on-curve / system-program semantics.
55
- */
56
- export function isValidSolanaAddress(address) {
57
- if (!address)
58
- return false;
59
- if (address.length < 32 || address.length > 44)
60
- return false;
61
- // Disallow base58-illegal characters early so we don't rely on the
62
- // decode throwing for obvious junk.
63
- if (!/^[1-9A-HJ-NP-Za-km-z]+$/.test(address))
64
- return false;
65
- try {
66
- return base58.decode(address).length === 32;
67
- }
68
- catch {
69
- return false;
70
- }
71
- }
72
- /**
73
- * Decode a base58-encoded Solana pubkey into CCTP's 32-byte recipient
74
- * format. Solana pubkeys are natively 32 bytes — no padding needed.
75
- *
76
- * Returns a `0x`-prefixed 64-character hex string (the bytes32 form
77
- * accepted by Circle's TokenMessenger `mintRecipient` field), so the
78
- * shape matches `addressToBytes32` for EVM addresses.
79
- */
80
- export function solanaAddressToBytes32(address) {
81
- const decoded = base58.decode(address);
82
- if (decoded.length !== 32) {
83
- throw new Error(`Solana pubkey must decode to 32 bytes, got ${decoded.length} for ${address}`);
84
- }
85
- let hex = "0x";
86
- for (const byte of decoded) {
87
- hex += byte.toString(16).padStart(2, "0");
88
- }
89
- return hex;
90
- }
91
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/cctp/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AAElE;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,sDAAsD,KAAK,CAAC,MAAM,EAAE,CACrE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,sDAAsD,KAAK,CAAC,MAAM,EAAE,CACrE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,SAAiB;IACzC,OAAO,YAAY,CAAC,SAA0B,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,WAAmB;IAClE,IAAI,WAAW,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAC9C,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAC5C,OAAO,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC;IAC7D,mEAAmE;IACnE,oCAAoC;IACpC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,8CAA8C,OAAO,CAAC,MAAM,QAAQ,OAAO,EAAE,CAC9E,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,74 +0,0 @@
1
- import { BridgeChain, BridgeKit, } from "@circle-fin/bridge-kit";
2
- /**
3
- * Bridge USDC cross-chain via Circle CCTPv2.
4
- *
5
- * Runs the full approve → burn → attest → mint flow in one call. Returns a
6
- * `BridgeResult` whose `state` is `'success'` or `'error'`; inspect `steps`
7
- * for per-action details. Recoverable failures can be resumed with
8
- * `BridgeKit.retry()` — see bridge-kit's retry guide.
9
- */
10
- export async function bridgeUsdc(params) {
11
- const kit = new BridgeKit();
12
- attachListeners(kit, params);
13
- return kit.bridge(buildBridgeParams(params));
14
- }
15
- /**
16
- * Bridge USDC from any CCTPv2-supported chain into Arbitrum.
17
- *
18
- * Convenience for the common Lendaswap flow: land USDC on Arbitrum so the
19
- * existing Arbitrum USDC → BTC HTLC swap can run against it.
20
- */
21
- export async function bridgeUsdcToArbitrum(params) {
22
- return bridgeUsdc({
23
- ...params,
24
- destination: {
25
- ...params.destination,
26
- chain: params.destination.chain ?? BridgeChain.Arbitrum,
27
- },
28
- });
29
- }
30
- /**
31
- * Estimate CCTPv2 bridge costs (protocol fee + gas on source and destination)
32
- * without executing anything. Requires an adapter on both sides because gas
33
- * estimation depends on the specific wallet/account.
34
- */
35
- export async function estimateUsdcBridgeFees(params) {
36
- const kit = new BridgeKit();
37
- return kit.estimate(buildBridgeParams(params));
38
- }
39
- function buildBridgeParams(params) {
40
- const from = {
41
- adapter: params.source.adapter,
42
- chain: params.source.chain,
43
- ...(params.source.address ? { address: params.source.address } : {}),
44
- };
45
- const to = {
46
- adapter: params.destination.adapter,
47
- chain: params.destination.chain,
48
- ...(params.destination.address
49
- ? { address: params.destination.address }
50
- : {}),
51
- ...(params.destination.recipientAddress
52
- ? { recipientAddress: params.destination.recipientAddress }
53
- : {}),
54
- };
55
- return {
56
- from,
57
- to,
58
- amount: params.amount,
59
- ...(params.config ? { config: params.config } : {}),
60
- };
61
- }
62
- function attachListeners(kit, params) {
63
- if (params.onEvent)
64
- kit.on("*", params.onEvent);
65
- if (params.onApprove)
66
- kit.on("approve", params.onApprove);
67
- if (params.onBurn)
68
- kit.on("burn", params.onBurn);
69
- if (params.onAttestation)
70
- kit.on("fetchAttestation", params.onAttestation);
71
- if (params.onMint)
72
- kit.on("mint", params.onMint);
73
- }
74
- //# sourceMappingURL=bridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/cctp-bridge/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAGX,SAAS,GAIV,MAAM,wBAAwB,CAAC;AAuChC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAwB;IAExB,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC;IAC5B,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAIC;IAED,OAAO,UAAU,CAAC;QAChB,GAAG,MAAM;QACT,WAAW,EAAE;YACX,GAAG,MAAM,CAAC,WAAW;YACrB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,QAAQ;SACxD;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAGC;IAED,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC;IAC5B,OAAO,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAwB;IACjD,MAAM,IAAI,GAAG;QACX,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;QAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;QAC1B,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7C,CAAC;IAE1B,MAAM,EAAE,GAAG;QACT,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO;QACnC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK;QAC/B,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO;YAC5B,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE;YACzC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,gBAAgB;YACrC,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE;YAC3D,CAAC,CAAC,EAAE,CAAC;KACc,CAAC;IAExB,OAAO;QACL,IAAI;QACJ,EAAE;QACF,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAc,EAAE,MAAwB;IAC/D,IAAI,MAAM,CAAC,OAAO;QAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,SAAS;QAAE,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,MAAM;QAAE,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,MAAM,CAAC,aAAa;QAAE,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,MAAM;QAAE,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC"}
@@ -1,95 +0,0 @@
1
- /**
2
- * Source-chain USDC approve + burn for the CCTP-inbound flow.
3
- *
4
- * Handles the full source-chain leg in one call:
5
- * 1. Read current allowance via `EvmSigner.call`. If < `amount`,
6
- * send an `approve` and wait for its receipt.
7
- * 2. Call `TokenMessenger.depositForBurn(...)` with `mintRecipient`
8
- * and `destinationCaller` both pinned to the caller's
9
- * smart-account address.
10
- * 3. Return the tx hashes.
11
- *
12
- * Takes the SDK's `EvmSigner` so the same signer used for direct
13
- * Permit2 swaps (wagmi, Privy, raw key via the `evm/wallet` adapter)
14
- * also powers the CCTP flow.
15
- */
16
- import { encodeFunctionData, erc20Abi, parseAbi } from "viem";
17
- import { FINALITY_FAST, TOKEN_MESSENGER_V2 } from "../cctp/constants.js";
18
- import { addressToBytes32 } from "../cctp/utils.js";
19
- const TOKEN_MESSENGER_ABI = parseAbi([
20
- "function depositForBurn(uint256 amount, uint32 destinationDomain, bytes32 mintRecipient, address burnToken, bytes32 destinationCaller, uint256 maxFee, uint32 minFinalityThreshold) external returns (uint64)",
21
- ]);
22
- /**
23
- * Approve USDC to the TokenMessenger (if needed) then burn it for the
24
- * cross-chain transfer. Returns the tx hashes. Does NOT wait for the
25
- * burn receipt — the caller pairs this with `waitForAttestation`.
26
- */
27
- export async function approveAndBurn(params) {
28
- const { signer, amount, usdcAddress, destinationDomain, smartAccountAddress, maxFee, minFinalityThreshold = FINALITY_FAST, tokenMessengerAddress = TOKEN_MESSENGER_V2, forceApprove = false, } = params;
29
- // 1. Allowance check — skip `approve` if the user already granted
30
- // enough USDC to the TokenMessenger. Saves a tx + signature
31
- // prompt on repeat swaps.
32
- let approveTxHash;
33
- const needsApprove = forceApprove ||
34
- !(await hasEnoughAllowance({
35
- signer,
36
- usdcAddress,
37
- spender: tokenMessengerAddress,
38
- minAmount: amount,
39
- }));
40
- if (needsApprove) {
41
- approveTxHash = (await signer.sendTransaction({
42
- to: usdcAddress,
43
- data: encodeFunctionData({
44
- abi: erc20Abi,
45
- functionName: "approve",
46
- args: [tokenMessengerAddress, amount],
47
- }),
48
- }));
49
- // Wait for the approve to mine — otherwise depositForBurn sees a
50
- // stale allowance and reverts.
51
- const receipt = await signer.waitForReceipt(approveTxHash);
52
- if (receipt.status !== "success") {
53
- throw new Error(`USDC approve reverted: tx ${approveTxHash}`);
54
- }
55
- }
56
- // 2. Burn. `mintRecipient` and `destinationCaller` both pinned to
57
- // the smart-account address:
58
- // - Destination USDC mints into the smart account (not the EOA).
59
- // - Only that account can call `receiveMessage` on the
60
- // destination chain → blocks front-runners from drawing gas
61
- // from our paymaster via a racing UserOp.
62
- const recipientBytes32 = addressToBytes32(smartAccountAddress);
63
- const burnTxHash = (await signer.sendTransaction({
64
- to: tokenMessengerAddress,
65
- data: encodeFunctionData({
66
- abi: TOKEN_MESSENGER_ABI,
67
- functionName: "depositForBurn",
68
- args: [
69
- amount,
70
- destinationDomain,
71
- recipientBytes32,
72
- usdcAddress,
73
- recipientBytes32,
74
- maxFee,
75
- minFinalityThreshold,
76
- ],
77
- }),
78
- }));
79
- return { approveTxHash, burnTxHash };
80
- }
81
- /** ERC-20 `allowance(owner, spender)` read via `EvmSigner.call`. */
82
- async function hasEnoughAllowance(args) {
83
- const { signer, usdcAddress, spender, minAmount } = args;
84
- const data = encodeFunctionData({
85
- abi: erc20Abi,
86
- functionName: "allowance",
87
- args: [signer.address, spender],
88
- });
89
- const result = await signer.call({ to: usdcAddress, data });
90
- // `allowance` returns uint256 — 32 bytes, big-endian hex.
91
- const hex = result.replace(/^0x/, "") || "0";
92
- const current = BigInt(`0x${hex}`);
93
- return current >= minAmount;
94
- }
95
- //# sourceMappingURL=approveAndBurn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"approveAndBurn.js","sourceRoot":"","sources":["../../src/cctp-inbound/approveAndBurn.ts"],"names":[],"mappings":"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"}