agentwallet-sdk 5.1.0 → 5.2.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.
Files changed (311) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +240 -20
  3. package/dist/bridge/__tests__/solana.test.d.ts +2 -0
  4. package/dist/bridge/__tests__/solana.test.d.ts.map +1 -0
  5. package/dist/bridge/__tests__/solana.test.js +106 -0
  6. package/dist/bridge/__tests__/solana.test.js.map +1 -0
  7. package/dist/bridge/client.d.ts +21 -7
  8. package/dist/bridge/client.d.ts.map +1 -1
  9. package/dist/bridge/client.js +16 -1
  10. package/dist/bridge/client.js.map +1 -1
  11. package/dist/bridge/index.d.ts +12 -1
  12. package/dist/bridge/index.d.ts.map +1 -1
  13. package/dist/bridge/index.js +11 -0
  14. package/dist/bridge/index.js.map +1 -1
  15. package/dist/bridge/solana.d.ts +132 -0
  16. package/dist/bridge/solana.d.ts.map +1 -0
  17. package/dist/bridge/solana.js +313 -0
  18. package/dist/bridge/solana.js.map +1 -0
  19. package/dist/bridge/types.d.ts +35 -10
  20. package/dist/bridge/types.d.ts.map +1 -1
  21. package/dist/bridge/types.js +16 -4
  22. package/dist/bridge/types.js.map +1 -1
  23. package/dist/index.d.ts +215 -288
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -3
  26. package/dist/index.js.map +1 -1
  27. package/dist/swap/SwapModule.d.ts +17 -3
  28. package/dist/swap/SwapModule.d.ts.map +1 -1
  29. package/dist/swap/SwapModule.js +20 -4
  30. package/dist/swap/SwapModule.js.map +1 -1
  31. package/dist/swap/index.d.ts +9 -2
  32. package/dist/swap/index.d.ts.map +1 -1
  33. package/dist/swap/index.js +8 -1
  34. package/dist/swap/index.js.map +1 -1
  35. package/dist/swap/types.d.ts +58 -1
  36. package/dist/swap/types.d.ts.map +1 -1
  37. package/dist/swap/types.js +56 -1
  38. package/dist/swap/types.js.map +1 -1
  39. package/dist/types.d.ts +20 -1
  40. package/dist/types.d.ts.map +1 -1
  41. package/dist/types.js +6 -0
  42. package/dist/types.js.map +1 -1
  43. package/dist/x402/__tests__/client.test.js +77 -5
  44. package/dist/x402/__tests__/client.test.js.map +1 -1
  45. package/dist/x402/chains/stellar/index.d.ts +149 -0
  46. package/dist/x402/chains/stellar/index.d.ts.map +1 -0
  47. package/dist/x402/chains/stellar/index.js +197 -0
  48. package/dist/x402/chains/stellar/index.js.map +1 -0
  49. package/dist/x402/client.d.ts.map +1 -1
  50. package/dist/x402/client.js.map +1 -1
  51. package/dist/x402/types.d.ts +22 -3
  52. package/dist/x402/types.d.ts.map +1 -1
  53. package/dist/x402/types.js +34 -4
  54. package/dist/x402/types.js.map +1 -1
  55. package/package.json +16 -5
  56. package/dist/ap2/index.d.ts +0 -185
  57. package/dist/ap2/index.d.ts.map +0 -1
  58. package/dist/ap2/index.js +0 -255
  59. package/dist/ap2/index.js.map +0 -1
  60. package/dist/bridge/unified.d.ts +0 -101
  61. package/dist/bridge/unified.d.ts.map +0 -1
  62. package/dist/bridge/unified.js +0 -284
  63. package/dist/bridge/unified.js.map +0 -1
  64. package/dist/chains.d.ts +0 -62
  65. package/dist/chains.d.ts.map +0 -1
  66. package/dist/chains.js +0 -108
  67. package/dist/chains.js.map +0 -1
  68. package/dist/fiat/index.d.ts +0 -10
  69. package/dist/fiat/index.d.ts.map +0 -1
  70. package/dist/fiat/index.js +0 -9
  71. package/dist/fiat/index.js.map +0 -1
  72. package/dist/fiat/onramp.d.ts +0 -101
  73. package/dist/fiat/onramp.d.ts.map +0 -1
  74. package/dist/fiat/onramp.js +0 -155
  75. package/dist/fiat/onramp.js.map +0 -1
  76. package/dist/fiat/providers/index.d.ts +0 -16
  77. package/dist/fiat/providers/index.d.ts.map +0 -1
  78. package/dist/fiat/providers/index.js +0 -30
  79. package/dist/fiat/providers/index.js.map +0 -1
  80. package/dist/fiat/providers/moonpay.d.ts +0 -22
  81. package/dist/fiat/providers/moonpay.d.ts.map +0 -1
  82. package/dist/fiat/providers/moonpay.js +0 -107
  83. package/dist/fiat/providers/moonpay.js.map +0 -1
  84. package/dist/fiat/providers/stripe.d.ts +0 -26
  85. package/dist/fiat/providers/stripe.d.ts.map +0 -1
  86. package/dist/fiat/providers/stripe.js +0 -135
  87. package/dist/fiat/providers/stripe.js.map +0 -1
  88. package/dist/fiat/providers/transak.d.ts +0 -26
  89. package/dist/fiat/providers/transak.d.ts.map +0 -1
  90. package/dist/fiat/providers/transak.js +0 -119
  91. package/dist/fiat/providers/transak.js.map +0 -1
  92. package/dist/fiat/types.d.ts +0 -106
  93. package/dist/fiat/types.d.ts.map +0 -1
  94. package/dist/fiat/types.js +0 -13
  95. package/dist/fiat/types.js.map +0 -1
  96. package/dist/flash/executor.d.ts +0 -119
  97. package/dist/flash/executor.d.ts.map +0 -1
  98. package/dist/flash/executor.js +0 -195
  99. package/dist/flash/executor.js.map +0 -1
  100. package/dist/flash/index.d.ts +0 -28
  101. package/dist/flash/index.d.ts.map +0 -1
  102. package/dist/flash/index.js +0 -29
  103. package/dist/flash/index.js.map +0 -1
  104. package/dist/flash/scanner.d.ts +0 -133
  105. package/dist/flash/scanner.d.ts.map +0 -1
  106. package/dist/flash/scanner.js +0 -212
  107. package/dist/flash/scanner.js.map +0 -1
  108. package/dist/flash/types.d.ts +0 -136
  109. package/dist/flash/types.d.ts.map +0 -1
  110. package/dist/flash/types.js +0 -23
  111. package/dist/flash/types.js.map +0 -1
  112. package/dist/gas/index.d.ts +0 -4
  113. package/dist/gas/index.d.ts.map +0 -1
  114. package/dist/gas/index.js +0 -3
  115. package/dist/gas/index.js.map +0 -1
  116. package/dist/gas/sponsor.d.ts +0 -70
  117. package/dist/gas/sponsor.d.ts.map +0 -1
  118. package/dist/gas/sponsor.js +0 -193
  119. package/dist/gas/sponsor.js.map +0 -1
  120. package/dist/gas/types.d.ts +0 -76
  121. package/dist/gas/types.d.ts.map +0 -1
  122. package/dist/gas/types.js +0 -21
  123. package/dist/gas/types.js.map +0 -1
  124. package/dist/identity/agent-identity.d.ts +0 -276
  125. package/dist/identity/agent-identity.d.ts.map +0 -1
  126. package/dist/identity/agent-identity.js +0 -300
  127. package/dist/identity/agent-identity.js.map +0 -1
  128. package/dist/identity/email-resolver.d.ts +0 -235
  129. package/dist/identity/email-resolver.js +0 -283
  130. package/dist/identity/erc6551.d.ts +0 -441
  131. package/dist/identity/erc6551.d.ts.map +0 -1
  132. package/dist/identity/erc6551.js +0 -517
  133. package/dist/identity/erc6551.js.map +0 -1
  134. package/dist/mev/index.d.ts +0 -4
  135. package/dist/mev/index.d.ts.map +0 -1
  136. package/dist/mev/index.js +0 -8
  137. package/dist/mev/index.js.map +0 -1
  138. package/dist/mev/protection.d.ts +0 -54
  139. package/dist/mev/protection.d.ts.map +0 -1
  140. package/dist/mev/protection.js +0 -185
  141. package/dist/mev/protection.js.map +0 -1
  142. package/dist/mev/risk.d.ts +0 -19
  143. package/dist/mev/risk.d.ts.map +0 -1
  144. package/dist/mev/risk.js +0 -95
  145. package/dist/mev/risk.js.map +0 -1
  146. package/dist/mev/types.d.ts +0 -49
  147. package/dist/mev/types.d.ts.map +0 -1
  148. package/dist/mev/types.js +0 -2
  149. package/dist/mev/types.js.map +0 -1
  150. package/dist/settlement/index.d.ts +0 -4
  151. package/dist/settlement/index.d.ts.map +0 -1
  152. package/dist/settlement/index.js +0 -3
  153. package/dist/settlement/index.js.map +0 -1
  154. package/dist/settlement/types.d.ts +0 -66
  155. package/dist/settlement/types.d.ts.map +0 -1
  156. package/dist/settlement/types.js +0 -37
  157. package/dist/settlement/types.js.map +0 -1
  158. package/dist/settlement/verifier.d.ts +0 -75
  159. package/dist/settlement/verifier.d.ts.map +0 -1
  160. package/dist/settlement/verifier.js +0 -354
  161. package/dist/settlement/verifier.js.map +0 -1
  162. package/dist/solana/bridge.d.ts +0 -144
  163. package/dist/solana/bridge.d.ts.map +0 -1
  164. package/dist/solana/bridge.js +0 -352
  165. package/dist/solana/bridge.js.map +0 -1
  166. package/dist/solana/index.d.ts +0 -8
  167. package/dist/solana/index.d.ts.map +0 -1
  168. package/dist/solana/index.js +0 -6
  169. package/dist/solana/index.js.map +0 -1
  170. package/dist/solana/swap.d.ts +0 -85
  171. package/dist/solana/swap.d.ts.map +0 -1
  172. package/dist/solana/swap.js +0 -173
  173. package/dist/solana/swap.js.map +0 -1
  174. package/dist/solana/types.d.ts +0 -126
  175. package/dist/solana/types.d.ts.map +0 -1
  176. package/dist/solana/types.js +0 -10
  177. package/dist/solana/types.js.map +0 -1
  178. package/dist/solana/wallet.d.ts +0 -83
  179. package/dist/solana/wallet.d.ts.map +0 -1
  180. package/dist/solana/wallet.js +0 -164
  181. package/dist/solana/wallet.js.map +0 -1
  182. package/dist/solana/x402.d.ts +0 -69
  183. package/dist/solana/x402.d.ts.map +0 -1
  184. package/dist/solana/x402.js +0 -154
  185. package/dist/solana/x402.js.map +0 -1
  186. package/dist/solver/adapter.d.ts +0 -47
  187. package/dist/solver/adapter.d.ts.map +0 -1
  188. package/dist/solver/adapter.js +0 -146
  189. package/dist/solver/adapter.js.map +0 -1
  190. package/dist/solver/analyzer.d.ts +0 -48
  191. package/dist/solver/analyzer.d.ts.map +0 -1
  192. package/dist/solver/analyzer.js +0 -171
  193. package/dist/solver/analyzer.js.map +0 -1
  194. package/dist/solver/builder.d.ts +0 -31
  195. package/dist/solver/builder.d.ts.map +0 -1
  196. package/dist/solver/builder.js +0 -60
  197. package/dist/solver/builder.js.map +0 -1
  198. package/dist/solver/index.d.ts +0 -22
  199. package/dist/solver/index.d.ts.map +0 -1
  200. package/dist/solver/index.js +0 -25
  201. package/dist/solver/index.js.map +0 -1
  202. package/dist/solver/types.d.ts +0 -115
  203. package/dist/solver/types.d.ts.map +0 -1
  204. package/dist/solver/types.js +0 -10
  205. package/dist/solver/types.js.map +0 -1
  206. package/dist/spend-guard/index.d.ts +0 -125
  207. package/dist/spend-guard/index.d.ts.map +0 -1
  208. package/dist/spend-guard/index.js +0 -150
  209. package/dist/spend-guard/index.js.map +0 -1
  210. package/dist/swap/router/cache.d.ts +0 -13
  211. package/dist/swap/router/cache.d.ts.map +0 -1
  212. package/dist/swap/router/cache.js +0 -30
  213. package/dist/swap/router/cache.js.map +0 -1
  214. package/dist/swap/router/flashbots.d.ts +0 -10
  215. package/dist/swap/router/flashbots.d.ts.map +0 -1
  216. package/dist/swap/router/flashbots.js +0 -43
  217. package/dist/swap/router/flashbots.js.map +0 -1
  218. package/dist/swap/router/health.d.ts +0 -17
  219. package/dist/swap/router/health.d.ts.map +0 -1
  220. package/dist/swap/router/health.js +0 -38
  221. package/dist/swap/router/health.js.map +0 -1
  222. package/dist/swap/router/index.d.ts +0 -10
  223. package/dist/swap/router/index.d.ts.map +0 -1
  224. package/dist/swap/router/index.js +0 -10
  225. package/dist/swap/router/index.js.map +0 -1
  226. package/dist/swap/router/providers/cowswap.d.ts +0 -11
  227. package/dist/swap/router/providers/cowswap.d.ts.map +0 -1
  228. package/dist/swap/router/providers/cowswap.js +0 -79
  229. package/dist/swap/router/providers/cowswap.js.map +0 -1
  230. package/dist/swap/router/providers/index.d.ts +0 -20
  231. package/dist/swap/router/providers/index.d.ts.map +0 -1
  232. package/dist/swap/router/providers/index.js +0 -32
  233. package/dist/swap/router/providers/index.js.map +0 -1
  234. package/dist/swap/router/providers/jupiter.d.ts +0 -12
  235. package/dist/swap/router/providers/jupiter.d.ts.map +0 -1
  236. package/dist/swap/router/providers/jupiter.js +0 -73
  237. package/dist/swap/router/providers/jupiter.js.map +0 -1
  238. package/dist/swap/router/providers/lifi.d.ts +0 -11
  239. package/dist/swap/router/providers/lifi.d.ts.map +0 -1
  240. package/dist/swap/router/providers/lifi.js +0 -123
  241. package/dist/swap/router/providers/lifi.js.map +0 -1
  242. package/dist/swap/router/providers/oneinch.d.ts +0 -13
  243. package/dist/swap/router/providers/oneinch.d.ts.map +0 -1
  244. package/dist/swap/router/providers/oneinch.js +0 -71
  245. package/dist/swap/router/providers/oneinch.js.map +0 -1
  246. package/dist/swap/router/providers/paraswap.d.ts +0 -11
  247. package/dist/swap/router/providers/paraswap.d.ts.map +0 -1
  248. package/dist/swap/router/providers/paraswap.js +0 -73
  249. package/dist/swap/router/providers/paraswap.js.map +0 -1
  250. package/dist/swap/router/providers/uniswap.d.ts +0 -31
  251. package/dist/swap/router/providers/uniswap.d.ts.map +0 -1
  252. package/dist/swap/router/providers/uniswap.js +0 -237
  253. package/dist/swap/router/providers/uniswap.js.map +0 -1
  254. package/dist/swap/router/providers/zerox.d.ts +0 -13
  255. package/dist/swap/router/providers/zerox.d.ts.map +0 -1
  256. package/dist/swap/router/providers/zerox.js +0 -94
  257. package/dist/swap/router/providers/zerox.js.map +0 -1
  258. package/dist/swap/router/router.d.ts +0 -86
  259. package/dist/swap/router/router.d.ts.map +0 -1
  260. package/dist/swap/router/router.js +0 -224
  261. package/dist/swap/router/router.js.map +0 -1
  262. package/dist/swap/router/rsi/engine.d.ts +0 -60
  263. package/dist/swap/router/rsi/engine.d.ts.map +0 -1
  264. package/dist/swap/router/rsi/engine.js +0 -483
  265. package/dist/swap/router/rsi/engine.js.map +0 -1
  266. package/dist/swap/router/rsi/index.d.ts +0 -3
  267. package/dist/swap/router/rsi/index.d.ts.map +0 -1
  268. package/dist/swap/router/rsi/index.js +0 -3
  269. package/dist/swap/router/rsi/index.js.map +0 -1
  270. package/dist/swap/router/rsi/types.d.ts +0 -106
  271. package/dist/swap/router/rsi/types.d.ts.map +0 -1
  272. package/dist/swap/router/rsi/types.js +0 -3
  273. package/dist/swap/router/rsi/types.js.map +0 -1
  274. package/dist/swap/router/types.d.ts +0 -120
  275. package/dist/swap/router/types.d.ts.map +0 -1
  276. package/dist/swap/router/types.js +0 -16
  277. package/dist/swap/router/types.js.map +0 -1
  278. package/dist/tax/engine.d.ts +0 -131
  279. package/dist/tax/engine.d.ts.map +0 -1
  280. package/dist/tax/engine.js +0 -307
  281. package/dist/tax/engine.js.map +0 -1
  282. package/dist/tax/index.d.ts +0 -9
  283. package/dist/tax/index.d.ts.map +0 -1
  284. package/dist/tax/index.js +0 -12
  285. package/dist/tax/index.js.map +0 -1
  286. package/dist/tax/lots.d.ts +0 -60
  287. package/dist/tax/lots.d.ts.map +0 -1
  288. package/dist/tax/lots.js +0 -129
  289. package/dist/tax/lots.js.map +0 -1
  290. package/dist/tax/types.d.ts +0 -113
  291. package/dist/tax/types.d.ts.map +0 -1
  292. package/dist/tax/types.js +0 -18
  293. package/dist/tax/types.js.map +0 -1
  294. package/dist/verifiable-intent/index.d.ts +0 -84
  295. package/dist/verifiable-intent/index.js +0 -385
  296. package/dist/yield/index.d.ts +0 -26
  297. package/dist/yield/index.d.ts.map +0 -1
  298. package/dist/yield/index.js +0 -29
  299. package/dist/yield/index.js.map +0 -1
  300. package/dist/yield/rates.d.ts +0 -114
  301. package/dist/yield/rates.d.ts.map +0 -1
  302. package/dist/yield/rates.js +0 -351
  303. package/dist/yield/rates.js.map +0 -1
  304. package/dist/yield/types.d.ts +0 -134
  305. package/dist/yield/types.d.ts.map +0 -1
  306. package/dist/yield/types.js +0 -24
  307. package/dist/yield/types.js.map +0 -1
  308. package/dist/yield/vault.d.ts +0 -112
  309. package/dist/yield/vault.d.ts.map +0 -1
  310. package/dist/yield/vault.js +0 -264
  311. package/dist/yield/vault.js.map +0 -1
@@ -0,0 +1,132 @@
1
+ /**
2
+ * SolanaBridgeModule — CCTP V2 cross-chain USDC bridge between EVM chains and Solana.
3
+ *
4
+ * Uses Circle's Cross-Chain Transfer Protocol (CCTP) V2 for trustless USDC transfers.
5
+ * EVM side uses viem; Solana side uses @solana/web3.js as an optional peer dependency.
6
+ *
7
+ * Sources:
8
+ * - Circle CCTP Solana docs: https://developers.circle.com/cctp/docs/solana
9
+ * - Solana USDC mint: https://solana.com/ecosystem/usdc
10
+ * - CCTP domain IDs: https://developers.circle.com/cctp/references/contract-addresses
11
+ */
12
+ import { type Address, type Hash, type Hex, type WalletClient } from 'viem';
13
+ import { type EVMBridgeChain } from './types.js';
14
+ /** Solana CCTP domain ID */
15
+ export declare const SOLANA_CCTP_DOMAIN = 5;
16
+ /** Native USDC mint on Solana Mainnet */
17
+ export declare const SOLANA_USDC_MINT: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
18
+ /**
19
+ * Solana CCTP V2 TokenMessengerMinterV2 program address.
20
+ * This is the V2 program (not V1 CCTPiPYP...). The V2 program combines
21
+ * TokenMessengerV2 + TokenMinterV2 into a single program.
22
+ * Source: https://developers.circle.com/cctp/references/solana-programs
23
+ * Verified: https://github.com/circlefin/solana-cctp-contracts (programs/v2)
24
+ */
25
+ export declare const SOLANA_TOKEN_MESSENGER: "CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe";
26
+ /**
27
+ * Solana CCTP V2 MessageTransmitterV2 program address.
28
+ * This is the V2 program (not V1 CCTPmbSD...).
29
+ * Source: https://developers.circle.com/cctp/references/solana-programs
30
+ * Verified: https://github.com/circlefin/solana-cctp-contracts (programs/v2)
31
+ */
32
+ export declare const SOLANA_MESSAGE_TRANSMITTER: "CCTPV2Sm4AdWt5296sk4P66VBZ7bEhcARwFaaS9YPbeC";
33
+ /** Default Solana Mainnet RPC endpoint */
34
+ export declare const SOLANA_DEFAULT_RPC: "https://api.mainnet-beta.solana.com";
35
+ /**
36
+ * Decode a 32-byte hex buffer back to a Solana base58 public key.
37
+ * Used when interpreting Solana→EVM message recipient fields.
38
+ */
39
+ export declare function bytes32ToSolanaPubkey(bytes32: Hex): string;
40
+ export interface EVMToSolanaOptions {
41
+ /** Solana recipient address (base58). Defaults to the EVM signer's address re-encoded — usually wrong; always specify. */
42
+ solanaRecipient: string;
43
+ /** EVM source chain. Defaults to 'base'. */
44
+ fromChain?: EVMBridgeChain;
45
+ /** Optional EVM RPC URL override. */
46
+ evmRpcUrl?: string;
47
+ /** Finality threshold: FAST (0) or FINALIZED (1000). Default: FAST. */
48
+ minFinalityThreshold?: number;
49
+ /** Max bridge fee in USDC base units. Default: 0 (no fee). */
50
+ maxFee?: bigint;
51
+ /** Circle IRIS API URL override. */
52
+ attestationApiUrl?: string;
53
+ }
54
+ export interface EVMToSolanaResult {
55
+ /** EVM burn transaction hash */
56
+ burnTxHash: Hash;
57
+ /** Circle message hash (used to poll for attestation) */
58
+ messageHash: Hex;
59
+ /** Raw CCTP message bytes (for manual receiveMessage on Solana) */
60
+ messageBytes: Hex;
61
+ /** Circle attestation signature (for receiveMessage on Solana) */
62
+ attestation: Hex;
63
+ /** The Solana CCTP domain (5) */
64
+ destinationDomain: number;
65
+ /** Amount bridged in USDC base units */
66
+ amount: bigint;
67
+ /** Elapsed time in milliseconds */
68
+ elapsedMs: number;
69
+ }
70
+ /**
71
+ * Bridge USDC from an EVM chain to Solana using CCTP V2.
72
+ *
73
+ * This function handles the EVM burn side and attestation polling.
74
+ * The Solana receive side must be completed by calling `receiveMessageOnSolana()`
75
+ * or by the Solana recipient manually submitting the message and attestation
76
+ * to the Solana MessageTransmitter program.
77
+ *
78
+ * @param walletClient - Viem WalletClient with a signer attached (for EVM)
79
+ * @param amount - Amount to bridge in USDC base units (6 decimals, e.g. 1_000_000n = 1 USDC)
80
+ * @param options - Bridge options including solanaRecipient (required)
81
+ * @returns Burn tx hash, attestation, and message bytes for Solana receive
82
+ */
83
+ export declare function bridgeEVMToSolana(walletClient: WalletClient, amount: bigint, options: EVMToSolanaOptions): Promise<EVMToSolanaResult>;
84
+ export interface SolanaToEVMOptions {
85
+ /** EVM destination chain */
86
+ toChain: EVMBridgeChain;
87
+ /** Optional EVM destination RPC URL override */
88
+ evmRpcUrl?: string;
89
+ /** EVM recipient address. Defaults to the EVM walletClient's account address. */
90
+ evmRecipient?: Address;
91
+ /** Circle IRIS API URL override */
92
+ attestationApiUrl?: string;
93
+ /** Solana RPC URL override */
94
+ solanaRpcUrl?: string;
95
+ }
96
+ export interface SolanaToEVMBurnParams {
97
+ /** Raw CCTP message bytes from Solana burn transaction */
98
+ messageBytes: Hex;
99
+ /** Circle message hash */
100
+ messageHash: Hex;
101
+ /** Source domain (should be SOLANA_CCTP_DOMAIN = 5) */
102
+ sourceDomain: number;
103
+ }
104
+ export interface SolanaToEVMResult {
105
+ /** EVM mint transaction hash */
106
+ mintTxHash: Hash;
107
+ /** Amount received in USDC base units */
108
+ amount: bigint;
109
+ /** EVM destination chain */
110
+ toChain: EVMBridgeChain;
111
+ /** EVM recipient address */
112
+ recipient: Address;
113
+ /** Elapsed time in milliseconds */
114
+ elapsedMs: number;
115
+ }
116
+ /**
117
+ * Complete the Solana→EVM bridge by polling for Circle's attestation and minting on EVM.
118
+ *
119
+ * The caller is responsible for initiating the Solana burn via the Solana
120
+ * CCTP MessageTransmitter and passing the resulting messageBytes + messageHash here.
121
+ *
122
+ * @param walletClient - Viem WalletClient (for EVM signing)
123
+ * @param burnParams - Message bytes and hash from the Solana burn transaction
124
+ * @param options - Destination chain and optional overrides
125
+ */
126
+ export declare function receiveFromSolanaOnEVM(walletClient: WalletClient, burnParams: SolanaToEVMBurnParams, options: SolanaToEVMOptions): Promise<SolanaToEVMResult>;
127
+ export type SolanaBridgeErrorCode = 'NO_WALLET_CLIENT' | 'INVALID_AMOUNT' | 'INVALID_RECIPIENT' | 'INSUFFICIENT_ALLOWANCE' | 'BURN_FAILED' | 'ATTESTATION_ERROR' | 'ATTESTATION_TIMEOUT' | 'MINT_FAILED';
128
+ export declare class SolanaBridgeError extends Error {
129
+ readonly code: SolanaBridgeErrorCode;
130
+ constructor(code: SolanaBridgeErrorCode, message: string);
131
+ }
132
+ //# sourceMappingURL=solana.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/bridge/solana.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,313 @@
1
+ /**
2
+ * SolanaBridgeModule — CCTP V2 cross-chain USDC bridge between EVM chains and Solana.
3
+ *
4
+ * Uses Circle's Cross-Chain Transfer Protocol (CCTP) V2 for trustless USDC transfers.
5
+ * EVM side uses viem; Solana side uses @solana/web3.js as an optional peer dependency.
6
+ *
7
+ * Sources:
8
+ * - Circle CCTP Solana docs: https://developers.circle.com/cctp/docs/solana
9
+ * - Solana USDC mint: https://solana.com/ecosystem/usdc
10
+ * - CCTP domain IDs: https://developers.circle.com/cctp/references/contract-addresses
11
+ */
12
+ import { createPublicClient, http, keccak256, pad, getContract, } from 'viem';
13
+ import { base, mainnet, optimism, arbitrum, polygon, avalanche, linea } from 'viem/chains';
14
+ import { TokenMessengerV2Abi, MessageTransmitterV2Abi, ERC20BridgeAbi } from './abis.js';
15
+ import { CCTP_DOMAIN_IDS, USDC_CONTRACT, TOKEN_MESSENGER_V2, MESSAGE_TRANSMITTER_V2 as MESSAGE_TRANSMITTER_V2_MAP, CIRCLE_ATTESTATION_API, MAX_ATTESTATION_POLLS, ATTESTATION_POLL_INTERVAL_MS, FINALITY_THRESHOLD, } from './types.js';
16
+ // ─── Solana Constants ───
17
+ /** Solana CCTP domain ID */
18
+ export const SOLANA_CCTP_DOMAIN = 5;
19
+ /** Native USDC mint on Solana Mainnet */
20
+ export const SOLANA_USDC_MINT = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v';
21
+ /**
22
+ * Solana CCTP V2 TokenMessengerMinterV2 program address.
23
+ * This is the V2 program (not V1 CCTPiPYP...). The V2 program combines
24
+ * TokenMessengerV2 + TokenMinterV2 into a single program.
25
+ * Source: https://developers.circle.com/cctp/references/solana-programs
26
+ * Verified: https://github.com/circlefin/solana-cctp-contracts (programs/v2)
27
+ */
28
+ export const SOLANA_TOKEN_MESSENGER = 'CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe';
29
+ /**
30
+ * Solana CCTP V2 MessageTransmitterV2 program address.
31
+ * This is the V2 program (not V1 CCTPmbSD...).
32
+ * Source: https://developers.circle.com/cctp/references/solana-programs
33
+ * Verified: https://github.com/circlefin/solana-cctp-contracts (programs/v2)
34
+ */
35
+ export const SOLANA_MESSAGE_TRANSMITTER = 'CCTPV2Sm4AdWt5296sk4P66VBZ7bEhcARwFaaS9YPbeC';
36
+ /** Default Solana Mainnet RPC endpoint */
37
+ export const SOLANA_DEFAULT_RPC = 'https://api.mainnet-beta.solana.com';
38
+ // ─── Viem chain definitions for EVM side ───
39
+ const VIEM_CHAINS = {
40
+ base,
41
+ ethereum: mainnet,
42
+ optimism,
43
+ arbitrum,
44
+ polygon,
45
+ avalanche,
46
+ linea,
47
+ unichain: { id: 130, name: 'Unichain', nativeCurrency: { name: 'ETH', symbol: 'ETH', decimals: 18 }, rpcUrls: { default: { http: ['https://mainnet.unichain.org'] } } },
48
+ sonic: { id: 146, name: 'Sonic', nativeCurrency: { name: 'S', symbol: 'S', decimals: 18 }, rpcUrls: { default: { http: ['https://rpc.soniclabs.com'] } } },
49
+ worldchain: { id: 480, name: 'World Chain', nativeCurrency: { name: 'ETH', symbol: 'ETH', decimals: 18 }, rpcUrls: { default: { http: ['https://worldchain-mainnet.g.alchemy.com/public'] } } },
50
+ };
51
+ // ─── Helpers ───
52
+ /**
53
+ * Encode a Solana base58 public key as a 32-byte hex buffer for CCTP.
54
+ * CCTP requires the mint recipient to be a 32-byte zero-padded value.
55
+ * For Solana, this is the base58-decoded public key (already 32 bytes).
56
+ */
57
+ function solanaPubkeyToBytes32(base58Address) {
58
+ // Dynamic import for optional @solana/web3.js
59
+ // We manually decode base58 here to avoid requiring the dependency at import time.
60
+ const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
61
+ const bytes = new Uint8Array(32);
62
+ let intVal = 0n;
63
+ for (const char of base58Address) {
64
+ const digit = BigInt(ALPHABET.indexOf(char));
65
+ if (digit < 0n)
66
+ throw new Error(`SolanaBridge: Invalid base58 character '${char}' in address.`);
67
+ intVal = intVal * 58n + digit;
68
+ }
69
+ // Write to 32-byte big-endian buffer
70
+ for (let i = 31; i >= 0; i--) {
71
+ bytes[i] = Number(intVal & 0xffn);
72
+ intVal >>= 8n;
73
+ }
74
+ if (intVal !== 0n)
75
+ throw new Error(`SolanaBridge: Address value overflows 32 bytes.`);
76
+ const hex = Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');
77
+ return `0x${hex}`;
78
+ }
79
+ /**
80
+ * Decode a 32-byte hex buffer back to a Solana base58 public key.
81
+ * Used when interpreting Solana→EVM message recipient fields.
82
+ */
83
+ export function bytes32ToSolanaPubkey(bytes32) {
84
+ const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
85
+ const hex = bytes32.startsWith('0x') ? bytes32.slice(2) : bytes32;
86
+ if (hex.length !== 64)
87
+ throw new Error(`SolanaBridge: Expected 32-byte hex (64 chars), got ${hex.length}.`);
88
+ let intVal = BigInt('0x' + hex);
89
+ let result = '';
90
+ while (intVal > 0n) {
91
+ const rem = Number(intVal % 58n);
92
+ intVal /= 58n;
93
+ result = ALPHABET[rem] + result;
94
+ }
95
+ return result || '1';
96
+ }
97
+ /**
98
+ * Bridge USDC from an EVM chain to Solana using CCTP V2.
99
+ *
100
+ * This function handles the EVM burn side and attestation polling.
101
+ * The Solana receive side must be completed by calling `receiveMessageOnSolana()`
102
+ * or by the Solana recipient manually submitting the message and attestation
103
+ * to the Solana MessageTransmitter program.
104
+ *
105
+ * @param walletClient - Viem WalletClient with a signer attached (for EVM)
106
+ * @param amount - Amount to bridge in USDC base units (6 decimals, e.g. 1_000_000n = 1 USDC)
107
+ * @param options - Bridge options including solanaRecipient (required)
108
+ * @returns Burn tx hash, attestation, and message bytes for Solana receive
109
+ */
110
+ export async function bridgeEVMToSolana(walletClient, amount, options) {
111
+ const startMs = Date.now();
112
+ const fromChain = options.fromChain ?? 'base';
113
+ const minFinalityThreshold = options.minFinalityThreshold ?? FINALITY_THRESHOLD.FAST;
114
+ const maxFee = options.maxFee ?? 0n;
115
+ const attestationApiUrl = options.attestationApiUrl ?? CIRCLE_ATTESTATION_API;
116
+ if (!walletClient.account) {
117
+ throw new SolanaBridgeError('NO_WALLET_CLIENT', 'WalletClient must have an account attached.');
118
+ }
119
+ if (amount <= 0n) {
120
+ throw new SolanaBridgeError('INVALID_AMOUNT', `Bridge amount must be > 0. Received: ${amount}.`);
121
+ }
122
+ if (!options.solanaRecipient) {
123
+ throw new SolanaBridgeError('INVALID_RECIPIENT', 'solanaRecipient (base58 Solana address) is required.');
124
+ }
125
+ // Encode Solana address as 32-byte CCTP mint recipient
126
+ const mintRecipient = solanaPubkeyToBytes32(options.solanaRecipient);
127
+ // Zero destinationCaller = any relayer can submit on Solana
128
+ const destinationCaller = pad('0x0', { size: 32 });
129
+ const publicClient = createPublicClient({
130
+ chain: VIEM_CHAINS[fromChain],
131
+ transport: http(options.evmRpcUrl),
132
+ });
133
+ const account = walletClient.account;
134
+ const usdcAddress = USDC_CONTRACT[fromChain];
135
+ const messengerAddress = TOKEN_MESSENGER_V2[fromChain];
136
+ // Approve USDC if needed
137
+ const usdcRead = getContract({ address: usdcAddress, abi: ERC20BridgeAbi, client: publicClient });
138
+ const currentAllowance = await usdcRead.read.allowance([account.address, messengerAddress]);
139
+ if (currentAllowance < amount) {
140
+ const usdcWrite = getContract({
141
+ address: usdcAddress,
142
+ abi: ERC20BridgeAbi,
143
+ client: { public: publicClient, wallet: walletClient },
144
+ });
145
+ const approveTxHash = await usdcWrite.write.approve([messengerAddress, amount], {
146
+ account,
147
+ chain: VIEM_CHAINS[fromChain],
148
+ });
149
+ const approveReceipt = await publicClient.waitForTransactionReceipt({ hash: approveTxHash });
150
+ if (approveReceipt.status !== 'success') {
151
+ throw new SolanaBridgeError('INSUFFICIENT_ALLOWANCE', `USDC approve failed (tx: ${approveTxHash}).`);
152
+ }
153
+ }
154
+ // Burn USDC via CCTP V2 depositForBurn targeting Solana domain
155
+ const messenger = getContract({
156
+ address: messengerAddress,
157
+ abi: TokenMessengerV2Abi,
158
+ client: { public: publicClient, wallet: walletClient },
159
+ });
160
+ let burnTxHash;
161
+ try {
162
+ burnTxHash = await messenger.write.depositForBurn([amount, SOLANA_CCTP_DOMAIN, mintRecipient, usdcAddress, destinationCaller, maxFee, minFinalityThreshold], { account, chain: VIEM_CHAINS[fromChain] });
163
+ }
164
+ catch (err) {
165
+ const msg = err instanceof Error ? err.message : String(err);
166
+ throw new SolanaBridgeError('BURN_FAILED', `CCTP depositForBurn to Solana failed: ${msg}.`);
167
+ }
168
+ const receipt = await publicClient.waitForTransactionReceipt({ hash: burnTxHash });
169
+ if (receipt.status !== 'success') {
170
+ throw new SolanaBridgeError('BURN_FAILED', `depositForBurn transaction reverted (tx: ${burnTxHash}).`);
171
+ }
172
+ // Extract message bytes from MessageSent event
173
+ const { messageBytes, messageHash } = extractMessageSent(receipt.logs);
174
+ // Poll Circle IRIS for attestation
175
+ const attestation = await pollForAttestation(messageHash, CCTP_DOMAIN_IDS[fromChain], attestationApiUrl);
176
+ return {
177
+ burnTxHash,
178
+ messageHash,
179
+ messageBytes,
180
+ attestation,
181
+ destinationDomain: SOLANA_CCTP_DOMAIN,
182
+ amount,
183
+ elapsedMs: Date.now() - startMs,
184
+ };
185
+ }
186
+ /**
187
+ * Complete the Solana→EVM bridge by polling for Circle's attestation and minting on EVM.
188
+ *
189
+ * The caller is responsible for initiating the Solana burn via the Solana
190
+ * CCTP MessageTransmitter and passing the resulting messageBytes + messageHash here.
191
+ *
192
+ * @param walletClient - Viem WalletClient (for EVM signing)
193
+ * @param burnParams - Message bytes and hash from the Solana burn transaction
194
+ * @param options - Destination chain and optional overrides
195
+ */
196
+ export async function receiveFromSolanaOnEVM(walletClient, burnParams, options) {
197
+ const startMs = Date.now();
198
+ const { toChain, evmRpcUrl } = options;
199
+ const attestationApiUrl = options.attestationApiUrl ?? CIRCLE_ATTESTATION_API;
200
+ if (!walletClient.account) {
201
+ throw new SolanaBridgeError('NO_WALLET_CLIENT', 'WalletClient must have an account attached.');
202
+ }
203
+ const account = walletClient.account;
204
+ const recipient = options.evmRecipient ?? account.address;
205
+ // Poll Circle IRIS for attestation
206
+ const attestation = await pollForAttestation(burnParams.messageHash, burnParams.sourceDomain, attestationApiUrl);
207
+ // Submit receiveMessage on EVM
208
+ const transmitterAddress = MESSAGE_TRANSMITTER_V2_MAP[toChain];
209
+ const destChain = VIEM_CHAINS[toChain];
210
+ const destPublicClient = createPublicClient({ chain: destChain, transport: http(evmRpcUrl) });
211
+ const transmitter = getContract({
212
+ address: transmitterAddress,
213
+ abi: MessageTransmitterV2Abi,
214
+ client: { public: destPublicClient, wallet: walletClient },
215
+ });
216
+ let mintTxHash;
217
+ try {
218
+ mintTxHash = await transmitter.write.receiveMessage([burnParams.messageBytes, attestation], { account, chain: destChain });
219
+ }
220
+ catch (err) {
221
+ const msg = err instanceof Error ? err.message : String(err);
222
+ throw new SolanaBridgeError('MINT_FAILED', `CCTP receiveMessage on ${toChain} failed: ${msg}.`);
223
+ }
224
+ const mintReceipt = await destPublicClient.waitForTransactionReceipt({ hash: mintTxHash });
225
+ if (mintReceipt.status !== 'success') {
226
+ throw new SolanaBridgeError('MINT_FAILED', `receiveMessage reverted on ${toChain} (tx: ${mintTxHash}).`);
227
+ }
228
+ // Parse amount from mint receipt logs (MintAndWithdraw event)
229
+ // Fallback: return 0n if event not found (amount can be retrieved from the original Solana tx)
230
+ const amount = parseMintAmount(mintReceipt.logs);
231
+ return { mintTxHash, amount, toChain, recipient, elapsedMs: Date.now() - startMs };
232
+ }
233
+ // ─── Shared helpers ───
234
+ /**
235
+ * Extract CCTP MessageSent event from EVM transaction logs.
236
+ * Event topic: keccak256("MessageSent(bytes)") = 0x8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036
237
+ */
238
+ function extractMessageSent(logs) {
239
+ const MESSAGE_SENT_TOPIC = '0x8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036';
240
+ for (const log of logs) {
241
+ if (log.topics[0]?.toLowerCase() === MESSAGE_SENT_TOPIC.toLowerCase()) {
242
+ const dataHex = log.data.slice(2);
243
+ if (dataHex.length < 128)
244
+ continue;
245
+ const lengthHex = dataHex.slice(64, 128);
246
+ const messageLength = parseInt(lengthHex, 16);
247
+ if (messageLength === 0)
248
+ continue;
249
+ const messageBytesHex = dataHex.slice(128, 128 + messageLength * 2);
250
+ const messageBytes = ('0x' + messageBytesHex);
251
+ const messageHash = keccak256(messageBytes);
252
+ return { messageBytes, messageHash };
253
+ }
254
+ }
255
+ throw new SolanaBridgeError('BURN_FAILED', 'Could not find MessageSent event in burn transaction receipt.');
256
+ }
257
+ /** Parse USDC amount from MintAndWithdraw event logs (best-effort). */
258
+ function parseMintAmount(logs) {
259
+ // MintAndWithdraw(address,uint256,address) — topic0 = keccak256("MintAndWithdraw(address,uint256,address)")
260
+ const MINT_AND_WITHDRAW_TOPIC = '0x1b2a7ff080b8cb6ff436ce0372e399692bbfb6d4ae5766fd8d58a7b8cc6142e9';
261
+ for (const log of logs) {
262
+ if (log.topics[0]?.toLowerCase() === MINT_AND_WITHDRAW_TOPIC.toLowerCase()) {
263
+ // amount is the second indexed param OR first data word
264
+ if (log.data.length >= 66) {
265
+ return BigInt('0x' + log.data.slice(2, 66));
266
+ }
267
+ }
268
+ }
269
+ return 0n; // fallback: caller can determine amount from source transaction
270
+ }
271
+ /** Poll Circle IRIS attestation API. */
272
+ async function pollForAttestation(messageHash, sourceDomain, apiUrl) {
273
+ const url = `${apiUrl}/v2/messages/${sourceDomain}/${messageHash}`;
274
+ for (let attempt = 0; attempt < MAX_ATTESTATION_POLLS; attempt++) {
275
+ let response;
276
+ try {
277
+ const res = await fetch(url, { headers: { Accept: 'application/json' } });
278
+ if (!res.ok) {
279
+ if (res.status === 404) {
280
+ await sleep(ATTESTATION_POLL_INTERVAL_MS);
281
+ continue;
282
+ }
283
+ const body = await res.text().catch(() => '');
284
+ throw new SolanaBridgeError('ATTESTATION_ERROR', `Circle API returned HTTP ${res.status}: ${body}.`);
285
+ }
286
+ response = await res.json();
287
+ }
288
+ catch (err) {
289
+ if (err instanceof SolanaBridgeError)
290
+ throw err;
291
+ const msg = err instanceof Error ? err.message : String(err);
292
+ throw new SolanaBridgeError('ATTESTATION_ERROR', `Failed to reach Circle IRIS API: ${msg}.`);
293
+ }
294
+ if (response.status === 'complete' && response.attestation)
295
+ return response.attestation;
296
+ if (response.status === 'error') {
297
+ throw new SolanaBridgeError('ATTESTATION_ERROR', `Circle attestation failed: ${response.error ?? 'unknown error'}.`);
298
+ }
299
+ await sleep(ATTESTATION_POLL_INTERVAL_MS);
300
+ }
301
+ throw new SolanaBridgeError('ATTESTATION_TIMEOUT', `Attestation not received after ${MAX_ATTESTATION_POLLS} attempts. Message hash: ${messageHash}.`);
302
+ }
303
+ function sleep(ms) {
304
+ return new Promise(resolve => setTimeout(resolve, ms));
305
+ }
306
+ export class SolanaBridgeError extends Error {
307
+ constructor(code, message) {
308
+ super(`[SolanaBridge:${code}] ${message}`);
309
+ this.code = code;
310
+ this.name = 'SolanaBridgeError';
311
+ }
312
+ }
313
+ //# sourceMappingURL=solana.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana.js","sourceRoot":"","sources":["../../src/bridge/solana.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,42 @@
1
+ /**
2
+ * @module bridge/types
3
+ * Type definitions and constants for the CCTP V2 cross-chain USDC bridge.
4
+ *
5
+ * Supports 10 EVM chains + Solana via Circle's Cross-Chain Transfer Protocol V2.
6
+ * EVM chains: Ethereum, Avalanche, Optimism, Arbitrum, Base, Polygon,
7
+ * Unichain, Linea, Sonic, Worldchain.
8
+ * Non-EVM: Solana (via bridge/solana.ts — uses separate CCTP V2 programs).
9
+ *
10
+ * Contract addresses verified against:
11
+ * - CCTP V2 EVM: https://developers.circle.com/cctp/references/contract-addresses
12
+ * - Solana V2 programs: https://developers.circle.com/cctp/references/solana-programs
13
+ * - USDC addresses: https://developers.circle.com/stablecoins/usdc-contract-addresses
14
+ */
1
15
  import type { Address, Hash, Hex } from 'viem';
2
16
  /** Supported bridge destination chains */
3
- export type BridgeChain = 'ethereum' | 'avalanche' | 'optimism' | 'arbitrum' | 'base' | 'polygon' | 'unichain' | 'linea' | 'sonic' | 'worldchain';
17
+ export type BridgeChain = 'ethereum' | 'avalanche' | 'optimism' | 'arbitrum' | 'base' | 'polygon' | 'unichain' | 'linea' | 'sonic' | 'worldchain' | 'solana';
18
+ /** EVM-only bridge chains (excludes non-EVM like Solana) */
19
+ export type EVMBridgeChain = Exclude<BridgeChain, 'solana'>;
4
20
  /**
5
21
  * CCTP V2 domain IDs — official Circle domain identifiers.
6
22
  * Source: https://developers.circle.com/cctp/references/contract-addresses
23
+ * Solana domain: 5 — https://developers.circle.com/cctp/docs/solana
7
24
  */
8
25
  export declare const CCTP_DOMAIN_IDS: Record<BridgeChain, number>;
9
- /** EVM chain IDs for supported bridge chains */
10
- export declare const BRIDGE_CHAIN_IDS: Record<BridgeChain, number>;
11
- /** USDC contract addresses per chain (native Circle USDC, not bridged variants) */
12
- export declare const USDC_CONTRACT: Record<BridgeChain, Address>;
13
- export declare const TOKEN_MESSENGER_V2: Record<BridgeChain, Address>;
14
- export declare const MESSAGE_TRANSMITTER_V2: Record<BridgeChain, Address>;
26
+ /**
27
+ * EVM chain IDs for EVM-compatible bridge chains.
28
+ * Solana is excluded use solana.ts for Solana-specific operations.
29
+ */
30
+ export declare const BRIDGE_CHAIN_IDS: Record<EVMBridgeChain, number>;
31
+ /**
32
+ * USDC contract addresses per chain (native Circle USDC, not bridged variants).
33
+ * Solana USDC: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v (stored as string, not Address/Hex)
34
+ */
35
+ export declare const USDC_CONTRACT: Record<EVMBridgeChain, Address>;
36
+ /** Solana USDC mint address */
37
+ export declare const SOLANA_USDC_MINT: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
38
+ export declare const TOKEN_MESSENGER_V2: Record<EVMBridgeChain, Address>;
39
+ export declare const MESSAGE_TRANSMITTER_V2: Record<EVMBridgeChain, Address>;
15
40
  /**
16
41
  * CCTP V2 minFinalityThreshold values.
17
42
  * - FAST (0): ~12 seconds. Circle fast attestation.
@@ -52,13 +77,13 @@ export interface AttestationResponse {
52
77
  attestation: Hex | null;
53
78
  error?: string;
54
79
  }
55
- /** Result of the full bridge() operation */
80
+ /** Result of the full EVM↔EVM bridge() operation */
56
81
  export interface BridgeResult {
57
82
  burnTxHash: Hash;
58
83
  mintTxHash: Hash;
59
84
  amount: bigint;
60
- fromChain: BridgeChain;
61
- toChain: BridgeChain;
85
+ fromChain: EVMBridgeChain;
86
+ toChain: EVMBridgeChain;
62
87
  recipient: Address;
63
88
  nonce: bigint;
64
89
  elapsedMs: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bridge/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAE/C,0CAA0C;AAC1C,MAAM,MAAM,WAAW,GACnB,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAC3D,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAWvD,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAWxD,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAWtD,CAAC;AASF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAW3D,CAAC;AAQF,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAW/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;CAGrB,CAAC;AAEX,2CAA2C;AAC3C,eAAO,MAAM,sBAAsB,gCAAgC,CAAC;AACpE,sDAAsD;AACtD,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,sDAAsD;AACtD,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,0CAA0C;AAC1C,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,GAAG,CAAC;IACjB,YAAY,EAAE,GAAG,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,gCAAgC;AAChC,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,GAAG,UAAU,GAAG,OAAO,CAAC;AAE/E,kDAAkD;AAClD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,GAAG,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,uDAAuD;AACvD,MAAM,MAAM,eAAe,GACvB,mBAAmB,GACnB,wBAAwB,GACxB,sBAAsB,GACtB,aAAa,GACb,qBAAqB,GACrB,mBAAmB,GACnB,aAAa,GACb,gBAAgB,GAChB,kBAAkB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bridge/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAE/C,0CAA0C;AAC1C,MAAM,MAAM,WAAW,GACnB,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAC3D,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GACzD,QAAQ,CAAC;AAEb,4DAA4D;AAC5D,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAE5D;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAYvD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAW3D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,CAWzD,CAAC;AAEF,+BAA+B;AAC/B,eAAO,MAAM,gBAAgB,gDAA0D,CAAC;AAUxF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,CAW9D,CAAC;AASF,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,CAWlE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;CAGrB,CAAC;AAEX,2CAA2C;AAC3C,eAAO,MAAM,sBAAsB,gCAAgC,CAAC;AACpE,sDAAsD;AACtD,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,sDAAsD;AACtD,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,0CAA0C;AAC1C,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,GAAG,CAAC;IACjB,YAAY,EAAE,GAAG,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,gCAAgC;AAChC,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,GAAG,UAAU,GAAG,OAAO,CAAC;AAE/E,kDAAkD;AAClD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,GAAG,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,uDAAuD;AACvD,MAAM,MAAM,eAAe,GACvB,mBAAmB,GACnB,wBAAwB,GACxB,sBAAsB,GACtB,aAAa,GACb,qBAAqB,GACrB,mBAAmB,GACnB,aAAa,GACb,gBAAgB,GAChB,kBAAkB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * CCTP V2 domain IDs — official Circle domain identifiers.
3
3
  * Source: https://developers.circle.com/cctp/references/contract-addresses
4
+ * Solana domain: 5 — https://developers.circle.com/cctp/docs/solana
4
5
  */
5
6
  export const CCTP_DOMAIN_IDS = {
6
7
  ethereum: 0,
@@ -13,8 +14,12 @@ export const CCTP_DOMAIN_IDS = {
13
14
  linea: 11,
14
15
  sonic: 13,
15
16
  worldchain: 14,
17
+ solana: 5,
16
18
  };
17
- /** EVM chain IDs for supported bridge chains */
19
+ /**
20
+ * EVM chain IDs for EVM-compatible bridge chains.
21
+ * Solana is excluded — use solana.ts for Solana-specific operations.
22
+ */
18
23
  export const BRIDGE_CHAIN_IDS = {
19
24
  ethereum: 1,
20
25
  avalanche: 43114,
@@ -27,7 +32,10 @@ export const BRIDGE_CHAIN_IDS = {
27
32
  sonic: 146,
28
33
  worldchain: 480,
29
34
  };
30
- /** USDC contract addresses per chain (native Circle USDC, not bridged variants) */
35
+ /**
36
+ * USDC contract addresses per chain (native Circle USDC, not bridged variants).
37
+ * Solana USDC: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v (stored as string, not Address/Hex)
38
+ */
31
39
  export const USDC_CONTRACT = {
32
40
  ethereum: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
33
41
  avalanche: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E',
@@ -40,10 +48,13 @@ export const USDC_CONTRACT = {
40
48
  sonic: '0x29219dd400f2Bf60E5a23d13Be72B486D4038894',
41
49
  worldchain: '0x79A02482A880bCE3B13e09Da970dC34db4CD24d1',
42
50
  };
51
+ /** Solana USDC mint address */
52
+ export const SOLANA_USDC_MINT = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v';
43
53
  /**
44
- * CCTP V2 TokenMessengerV2 — deterministic CREATE2 deployment, same address on all chains.
54
+ * CCTP V2 TokenMessengerV2 — deterministic CREATE2 deployment, same address on all EVM chains.
45
55
  * Source: https://developers.circle.com/cctp/references/contract-addresses
46
56
  * Verified on-chain: BaseScan, Etherscan, Arbiscan (active transactions as of 2026-03-10)
57
+ * Solana uses a different program — see bridge/solana.ts
47
58
  */
48
59
  const CCTP_V2_TOKEN_MESSENGER = '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d';
49
60
  export const TOKEN_MESSENGER_V2 = {
@@ -59,8 +70,9 @@ export const TOKEN_MESSENGER_V2 = {
59
70
  worldchain: CCTP_V2_TOKEN_MESSENGER,
60
71
  };
61
72
  /**
62
- * CCTP V2 MessageTransmitterV2 — deterministic CREATE2 deployment, same address on all chains.
73
+ * CCTP V2 MessageTransmitterV2 — deterministic CREATE2 deployment, same address on all EVM chains.
63
74
  * Source: https://developers.circle.com/cctp/references/contract-addresses
75
+ * Solana uses a different program — see bridge/solana.ts
64
76
  */
65
77
  const CCTP_V2_MESSAGE_TRANSMITTER = '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64';
66
78
  export const MESSAGE_TRANSMITTER_V2 = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/bridge/types.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAgC;IAC1D,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,CAAC;IACZ,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,UAAU,EAAE,EAAE;CACf,CAAC;AAEF,gDAAgD;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAgC;IAC3D,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,KAAK;IAChB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,KAAK;IACf,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,GAAG;IACV,UAAU,EAAE,GAAG;CAChB,CAAC;AAEF,mFAAmF;AACnF,MAAM,CAAC,MAAM,aAAa,GAAiC;IACzD,QAAQ,EAAE,4CAA4C;IACtD,SAAS,EAAE,4CAA4C;IACvD,QAAQ,EAAE,4CAA4C;IACtD,QAAQ,EAAE,4CAA4C;IACtD,IAAI,EAAE,4CAA4C;IAClD,OAAO,EAAE,4CAA4C;IACrD,QAAQ,EAAE,4CAA4C;IACtD,KAAK,EAAE,4CAA4C;IACnD,KAAK,EAAE,4CAA4C;IACnD,UAAU,EAAE,4CAA4C;CACzD,CAAC;AAEF;;;;GAIG;AACH,MAAM,uBAAuB,GAAY,4CAA4C,CAAC;AAEtF,MAAM,CAAC,MAAM,kBAAkB,GAAiC;IAC9D,QAAQ,EAAE,uBAAuB;IACjC,SAAS,EAAE,uBAAuB;IAClC,QAAQ,EAAE,uBAAuB;IACjC,QAAQ,EAAE,uBAAuB;IACjC,IAAI,EAAE,uBAAuB;IAC7B,OAAO,EAAE,uBAAuB;IAChC,QAAQ,EAAE,uBAAuB;IACjC,KAAK,EAAE,uBAAuB;IAC9B,KAAK,EAAE,uBAAuB;IAC9B,UAAU,EAAE,uBAAuB;CACpC,CAAC;AAEF;;;GAGG;AACH,MAAM,2BAA2B,GAAY,4CAA4C,CAAC;AAE1F,MAAM,CAAC,MAAM,sBAAsB,GAAiC;IAClE,QAAQ,EAAE,2BAA2B;IACrC,SAAS,EAAE,2BAA2B;IACtC,QAAQ,EAAE,2BAA2B;IACrC,QAAQ,EAAE,2BAA2B;IACrC,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE,2BAA2B;IACpC,QAAQ,EAAE,2BAA2B;IACrC,KAAK,EAAE,2BAA2B;IAClC,KAAK,EAAE,2BAA2B;IAClC,UAAU,EAAE,2BAA2B;CACxC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,IAAI;CACP,CAAC;AAEX,2CAA2C;AAC3C,MAAM,CAAC,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AACpE,sDAAsD;AACtD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,sDAAsD;AACtD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/bridge/types.ts"],"names":[],"mappings":"AAyBA;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAgC;IAC1D,QAAQ,EAAI,CAAC;IACb,SAAS,EAAG,CAAC;IACb,QAAQ,EAAI,CAAC;IACb,QAAQ,EAAI,CAAC;IACb,IAAI,EAAQ,CAAC;IACb,OAAO,EAAK,CAAC;IACb,QAAQ,EAAI,EAAE;IACd,KAAK,EAAO,EAAE;IACd,KAAK,EAAO,EAAE;IACd,UAAU,EAAE,EAAE;IACd,MAAM,EAAM,CAAC;CACd,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAmC;IAC9D,QAAQ,EAAI,CAAC;IACb,SAAS,EAAG,KAAK;IACjB,QAAQ,EAAI,EAAE;IACd,QAAQ,EAAI,KAAK;IACjB,IAAI,EAAQ,IAAI;IAChB,OAAO,EAAK,GAAG;IACf,QAAQ,EAAI,GAAG;IACf,KAAK,EAAO,KAAK;IACjB,KAAK,EAAO,GAAG;IACf,UAAU,EAAE,GAAG;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAoC;IAC5D,QAAQ,EAAI,4CAA4C;IACxD,SAAS,EAAG,4CAA4C;IACxD,QAAQ,EAAI,4CAA4C;IACxD,QAAQ,EAAI,4CAA4C;IACxD,IAAI,EAAQ,4CAA4C;IACxD,OAAO,EAAK,4CAA4C;IACxD,QAAQ,EAAI,4CAA4C;IACxD,KAAK,EAAO,4CAA4C;IACxD,KAAK,EAAO,4CAA4C;IACxD,UAAU,EAAE,4CAA4C;CACzD,CAAC;AAEF,+BAA+B;AAC/B,MAAM,CAAC,MAAM,gBAAgB,GAAG,8CAAuD,CAAC;AAExF;;;;;GAKG;AACH,MAAM,uBAAuB,GAAY,4CAA4C,CAAC;AAEtF,MAAM,CAAC,MAAM,kBAAkB,GAAoC;IACjE,QAAQ,EAAI,uBAAuB;IACnC,SAAS,EAAG,uBAAuB;IACnC,QAAQ,EAAI,uBAAuB;IACnC,QAAQ,EAAI,uBAAuB;IACnC,IAAI,EAAQ,uBAAuB;IACnC,OAAO,EAAK,uBAAuB;IACnC,QAAQ,EAAI,uBAAuB;IACnC,KAAK,EAAO,uBAAuB;IACnC,KAAK,EAAO,uBAAuB;IACnC,UAAU,EAAE,uBAAuB;CACpC,CAAC;AAEF;;;;GAIG;AACH,MAAM,2BAA2B,GAAY,4CAA4C,CAAC;AAE1F,MAAM,CAAC,MAAM,sBAAsB,GAAoC;IACrE,QAAQ,EAAI,2BAA2B;IACvC,SAAS,EAAG,2BAA2B;IACvC,QAAQ,EAAI,2BAA2B;IACvC,QAAQ,EAAI,2BAA2B;IACvC,IAAI,EAAQ,2BAA2B;IACvC,OAAO,EAAK,2BAA2B;IACvC,QAAQ,EAAI,2BAA2B;IACvC,KAAK,EAAO,2BAA2B;IACvC,KAAK,EAAO,2BAA2B;IACvC,UAAU,EAAE,2BAA2B;CACxC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,IAAI;CACP,CAAC;AAEX,2CAA2C;AAC3C,MAAM,CAAC,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AACpE,sDAAsD;AACtD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,sDAAsD;AACtD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC"}