@chainlink/ccip-sdk 0.0.0 → 0.90.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 (319) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -0
  3. package/dist/aptos/exec.d.ts +18 -0
  4. package/dist/aptos/exec.d.ts.map +1 -0
  5. package/dist/aptos/exec.js +55 -0
  6. package/dist/aptos/exec.js.map +1 -0
  7. package/dist/aptos/hasher.d.ts +11 -0
  8. package/dist/aptos/hasher.d.ts.map +1 -0
  9. package/dist/aptos/hasher.js +62 -0
  10. package/dist/aptos/hasher.js.map +1 -0
  11. package/dist/aptos/index.d.ts +92 -0
  12. package/dist/aptos/index.d.ts.map +1 -0
  13. package/dist/aptos/index.js +482 -0
  14. package/dist/aptos/index.js.map +1 -0
  15. package/dist/aptos/logs.d.ts +9 -0
  16. package/dist/aptos/logs.d.ts.map +1 -0
  17. package/dist/aptos/logs.js +167 -0
  18. package/dist/aptos/logs.js.map +1 -0
  19. package/dist/aptos/send.d.ts +11 -0
  20. package/dist/aptos/send.d.ts.map +1 -0
  21. package/dist/aptos/send.js +78 -0
  22. package/dist/aptos/send.js.map +1 -0
  23. package/dist/aptos/token.d.ts +4 -0
  24. package/dist/aptos/token.d.ts.map +1 -0
  25. package/dist/aptos/token.js +134 -0
  26. package/dist/aptos/token.js.map +1 -0
  27. package/dist/aptos/types.d.ts +78 -0
  28. package/dist/aptos/types.d.ts.map +1 -0
  29. package/dist/aptos/types.js +60 -0
  30. package/dist/aptos/types.js.map +1 -0
  31. package/dist/aptos/utils.d.ts +12 -0
  32. package/dist/aptos/utils.d.ts.map +1 -0
  33. package/dist/aptos/utils.js +15 -0
  34. package/dist/aptos/utils.js.map +1 -0
  35. package/dist/chain.d.ts +344 -0
  36. package/dist/chain.d.ts.map +1 -0
  37. package/dist/chain.js +41 -0
  38. package/dist/chain.js.map +1 -0
  39. package/dist/commits.d.ts +25 -0
  40. package/dist/commits.d.ts.map +1 -0
  41. package/dist/commits.js +29 -0
  42. package/dist/commits.js.map +1 -0
  43. package/dist/evm/abi/BurnMintERC677Token.d.ts +602 -0
  44. package/dist/evm/abi/BurnMintERC677Token.d.ts.map +1 -0
  45. package/dist/evm/abi/BurnMintERC677Token.js +488 -0
  46. package/dist/evm/abi/BurnMintERC677Token.js.map +1 -0
  47. package/dist/evm/abi/CommitStore_1_2.d.ts +688 -0
  48. package/dist/evm/abi/CommitStore_1_2.d.ts.map +1 -0
  49. package/dist/evm/abi/CommitStore_1_2.js +638 -0
  50. package/dist/evm/abi/CommitStore_1_2.js.map +1 -0
  51. package/dist/evm/abi/CommitStore_1_5.d.ts +708 -0
  52. package/dist/evm/abi/CommitStore_1_5.d.ts.map +1 -0
  53. package/dist/evm/abi/CommitStore_1_5.js +675 -0
  54. package/dist/evm/abi/CommitStore_1_5.js.map +1 -0
  55. package/dist/evm/abi/FeeQuoter_1_6.d.ts +1770 -0
  56. package/dist/evm/abi/FeeQuoter_1_6.d.ts.map +1 -0
  57. package/dist/evm/abi/FeeQuoter_1_6.js +1904 -0
  58. package/dist/evm/abi/FeeQuoter_1_6.js.map +1 -0
  59. package/dist/evm/abi/LockReleaseTokenPool_1_5.d.ts +1116 -0
  60. package/dist/evm/abi/LockReleaseTokenPool_1_5.d.ts.map +1 -0
  61. package/dist/evm/abi/LockReleaseTokenPool_1_5.js +1096 -0
  62. package/dist/evm/abi/LockReleaseTokenPool_1_5.js.map +1 -0
  63. package/dist/evm/abi/LockReleaseTokenPool_1_5_1.d.ts +1306 -0
  64. package/dist/evm/abi/LockReleaseTokenPool_1_5_1.d.ts.map +1 -0
  65. package/dist/evm/abi/LockReleaseTokenPool_1_5_1.js +1278 -0
  66. package/dist/evm/abi/LockReleaseTokenPool_1_5_1.js.map +1 -0
  67. package/dist/evm/abi/LockReleaseTokenPool_1_6_1.d.ts +1290 -0
  68. package/dist/evm/abi/LockReleaseTokenPool_1_6_1.d.ts.map +1 -0
  69. package/dist/evm/abi/LockReleaseTokenPool_1_6_1.js +1288 -0
  70. package/dist/evm/abi/LockReleaseTokenPool_1_6_1.js.map +1 -0
  71. package/dist/evm/abi/OffRamp_1_2.d.ts +1217 -0
  72. package/dist/evm/abi/OffRamp_1_2.d.ts.map +1 -0
  73. package/dist/evm/abi/OffRamp_1_2.js +1204 -0
  74. package/dist/evm/abi/OffRamp_1_2.js.map +1 -0
  75. package/dist/evm/abi/OffRamp_1_5.d.ts +1271 -0
  76. package/dist/evm/abi/OffRamp_1_5.d.ts.map +1 -0
  77. package/dist/evm/abi/OffRamp_1_5.js +1273 -0
  78. package/dist/evm/abi/OffRamp_1_5.js.map +1 -0
  79. package/dist/evm/abi/OffRamp_1_6.d.ts +1472 -0
  80. package/dist/evm/abi/OffRamp_1_6.d.ts.map +1 -0
  81. package/dist/evm/abi/OffRamp_1_6.js +1529 -0
  82. package/dist/evm/abi/OffRamp_1_6.js.map +1 -0
  83. package/dist/evm/abi/OnRamp_1_2.d.ts +1391 -0
  84. package/dist/evm/abi/OnRamp_1_2.d.ts.map +1 -0
  85. package/dist/evm/abi/OnRamp_1_2.js +1343 -0
  86. package/dist/evm/abi/OnRamp_1_2.js.map +1 -0
  87. package/dist/evm/abi/OnRamp_1_5.d.ts +1443 -0
  88. package/dist/evm/abi/OnRamp_1_5.d.ts.map +1 -0
  89. package/dist/evm/abi/OnRamp_1_5.js +1427 -0
  90. package/dist/evm/abi/OnRamp_1_5.js.map +1 -0
  91. package/dist/evm/abi/OnRamp_1_6.d.ts +796 -0
  92. package/dist/evm/abi/OnRamp_1_6.d.ts.map +1 -0
  93. package/dist/evm/abi/OnRamp_1_6.js +880 -0
  94. package/dist/evm/abi/OnRamp_1_6.js.map +1 -0
  95. package/dist/evm/abi/Router.d.ts +541 -0
  96. package/dist/evm/abi/Router.d.ts.map +1 -0
  97. package/dist/evm/abi/Router.js +508 -0
  98. package/dist/evm/abi/Router.js.map +1 -0
  99. package/dist/evm/abi/TokenAdminRegistry_1_5.d.ts +373 -0
  100. package/dist/evm/abi/TokenAdminRegistry_1_5.d.ts.map +1 -0
  101. package/dist/evm/abi/TokenAdminRegistry_1_5.js +333 -0
  102. package/dist/evm/abi/TokenAdminRegistry_1_5.js.map +1 -0
  103. package/dist/evm/const.d.ts +27 -0
  104. package/dist/evm/const.d.ts.map +1 -0
  105. package/dist/evm/const.js +63 -0
  106. package/dist/evm/const.js.map +1 -0
  107. package/dist/evm/errors.d.ts +36 -0
  108. package/dist/evm/errors.d.ts.map +1 -0
  109. package/dist/evm/errors.js +192 -0
  110. package/dist/evm/errors.js.map +1 -0
  111. package/dist/evm/hasher.d.ts +5 -0
  112. package/dist/evm/hasher.d.ts.map +1 -0
  113. package/dist/evm/hasher.js +116 -0
  114. package/dist/evm/hasher.js.map +1 -0
  115. package/dist/evm/index.d.ts +121 -0
  116. package/dist/evm/index.d.ts.map +1 -0
  117. package/dist/evm/index.js +904 -0
  118. package/dist/evm/index.js.map +1 -0
  119. package/dist/evm/messages.d.ts +35 -0
  120. package/dist/evm/messages.d.ts.map +1 -0
  121. package/dist/evm/messages.js +11 -0
  122. package/dist/evm/messages.js.map +1 -0
  123. package/dist/evm/offchain.d.ts +16 -0
  124. package/dist/evm/offchain.d.ts.map +1 -0
  125. package/dist/evm/offchain.js +142 -0
  126. package/dist/evm/offchain.js.map +1 -0
  127. package/dist/execution.d.ts +80 -0
  128. package/dist/execution.d.ts.map +1 -0
  129. package/dist/execution.js +91 -0
  130. package/dist/execution.js.map +1 -0
  131. package/dist/extra-args.d.ts +45 -0
  132. package/dist/extra-args.d.ts.map +1 -0
  133. package/dist/extra-args.js +44 -0
  134. package/dist/extra-args.js.map +1 -0
  135. package/dist/gas.d.ts +27 -0
  136. package/dist/gas.d.ts.map +1 -0
  137. package/dist/gas.js +80 -0
  138. package/dist/gas.js.map +1 -0
  139. package/dist/hasher/common.d.ts +12 -0
  140. package/dist/hasher/common.d.ts.map +1 -0
  141. package/dist/hasher/common.js +19 -0
  142. package/dist/hasher/common.js.map +1 -0
  143. package/dist/hasher/hasher.d.ts +4 -0
  144. package/dist/hasher/hasher.d.ts.map +1 -0
  145. package/dist/hasher/hasher.js +11 -0
  146. package/dist/hasher/hasher.js.map +1 -0
  147. package/dist/hasher/index.d.ts +4 -0
  148. package/dist/hasher/index.d.ts.map +1 -0
  149. package/dist/hasher/index.js +4 -0
  150. package/dist/hasher/index.js.map +1 -0
  151. package/dist/hasher/merklemulti.d.ts +58 -0
  152. package/dist/hasher/merklemulti.d.ts.map +1 -0
  153. package/dist/hasher/merklemulti.js +257 -0
  154. package/dist/hasher/merklemulti.js.map +1 -0
  155. package/dist/index.d.ts +13 -0
  156. package/dist/index.d.ts.map +1 -0
  157. package/dist/index.js +13 -0
  158. package/dist/index.js.map +1 -0
  159. package/dist/offchain.d.ts +20 -0
  160. package/dist/offchain.d.ts.map +1 -0
  161. package/dist/offchain.js +59 -0
  162. package/dist/offchain.js.map +1 -0
  163. package/dist/requests.d.ts +48 -0
  164. package/dist/requests.d.ts.map +1 -0
  165. package/dist/requests.js +286 -0
  166. package/dist/requests.js.map +1 -0
  167. package/dist/selectors.d.ts +9 -0
  168. package/dist/selectors.d.ts.map +1 -0
  169. package/dist/selectors.js +1330 -0
  170. package/dist/selectors.js.map +1 -0
  171. package/dist/solana/cleanup.d.ts +15 -0
  172. package/dist/solana/cleanup.d.ts.map +1 -0
  173. package/dist/solana/cleanup.js +159 -0
  174. package/dist/solana/cleanup.js.map +1 -0
  175. package/dist/solana/exec.d.ts +15 -0
  176. package/dist/solana/exec.d.ts.map +1 -0
  177. package/dist/solana/exec.js +417 -0
  178. package/dist/solana/exec.js.map +1 -0
  179. package/dist/solana/hasher.d.ts +4 -0
  180. package/dist/solana/hasher.d.ts.map +1 -0
  181. package/dist/solana/hasher.js +81 -0
  182. package/dist/solana/hasher.js.map +1 -0
  183. package/dist/solana/idl/1.6.0/BASE_TOKEN_POOL.d.ts +866 -0
  184. package/dist/solana/idl/1.6.0/BASE_TOKEN_POOL.d.ts.map +1 -0
  185. package/dist/solana/idl/1.6.0/BASE_TOKEN_POOL.js +866 -0
  186. package/dist/solana/idl/1.6.0/BASE_TOKEN_POOL.js.map +1 -0
  187. package/dist/solana/idl/1.6.0/BURN_MINT_TOKEN_POOL.d.ts +949 -0
  188. package/dist/solana/idl/1.6.0/BURN_MINT_TOKEN_POOL.d.ts.map +1 -0
  189. package/dist/solana/idl/1.6.0/BURN_MINT_TOKEN_POOL.js +949 -0
  190. package/dist/solana/idl/1.6.0/BURN_MINT_TOKEN_POOL.js.map +1 -0
  191. package/dist/solana/idl/1.6.0/CCIP_CCTP_TOKEN_POOL.d.ts +1374 -0
  192. package/dist/solana/idl/1.6.0/CCIP_CCTP_TOKEN_POOL.d.ts.map +1 -0
  193. package/dist/solana/idl/1.6.0/CCIP_CCTP_TOKEN_POOL.js +1374 -0
  194. package/dist/solana/idl/1.6.0/CCIP_CCTP_TOKEN_POOL.js.map +1 -0
  195. package/dist/solana/idl/1.6.0/CCIP_COMMON.d.ts +104 -0
  196. package/dist/solana/idl/1.6.0/CCIP_COMMON.d.ts.map +1 -0
  197. package/dist/solana/idl/1.6.0/CCIP_COMMON.js +104 -0
  198. package/dist/solana/idl/1.6.0/CCIP_COMMON.js.map +1 -0
  199. package/dist/solana/idl/1.6.0/CCIP_OFFRAMP.d.ts +2746 -0
  200. package/dist/solana/idl/1.6.0/CCIP_OFFRAMP.d.ts.map +1 -0
  201. package/dist/solana/idl/1.6.0/CCIP_OFFRAMP.js +2746 -0
  202. package/dist/solana/idl/1.6.0/CCIP_OFFRAMP.js.map +1 -0
  203. package/dist/solana/idl/1.6.0/CCIP_ROUTER.d.ts +2332 -0
  204. package/dist/solana/idl/1.6.0/CCIP_ROUTER.d.ts.map +1 -0
  205. package/dist/solana/idl/1.6.0/CCIP_ROUTER.js +2332 -0
  206. package/dist/solana/idl/1.6.0/CCIP_ROUTER.js.map +1 -0
  207. package/dist/solana/index.d.ts +205 -0
  208. package/dist/solana/index.d.ts.map +1 -0
  209. package/dist/solana/index.js +1085 -0
  210. package/dist/solana/index.js.map +1 -0
  211. package/dist/solana/offchain.d.ts +31 -0
  212. package/dist/solana/offchain.d.ts.map +1 -0
  213. package/dist/solana/offchain.js +152 -0
  214. package/dist/solana/offchain.js.map +1 -0
  215. package/dist/solana/patchBorsh.d.ts +2 -0
  216. package/dist/solana/patchBorsh.d.ts.map +1 -0
  217. package/dist/solana/patchBorsh.js +60 -0
  218. package/dist/solana/patchBorsh.js.map +1 -0
  219. package/dist/solana/send.d.ts +14 -0
  220. package/dist/solana/send.d.ts.map +1 -0
  221. package/dist/solana/send.js +272 -0
  222. package/dist/solana/send.js.map +1 -0
  223. package/dist/solana/types.d.ts +4 -0
  224. package/dist/solana/types.d.ts.map +1 -0
  225. package/dist/solana/types.js +2 -0
  226. package/dist/solana/types.js.map +1 -0
  227. package/dist/solana/utils.d.ts +58 -0
  228. package/dist/solana/utils.d.ts.map +1 -0
  229. package/dist/solana/utils.js +211 -0
  230. package/dist/solana/utils.js.map +1 -0
  231. package/dist/sui/hasher.d.ts +12 -0
  232. package/dist/sui/hasher.d.ts.map +1 -0
  233. package/dist/sui/hasher.js +63 -0
  234. package/dist/sui/hasher.js.map +1 -0
  235. package/dist/sui/index.d.ts +72 -0
  236. package/dist/sui/index.d.ts.map +1 -0
  237. package/dist/sui/index.js +128 -0
  238. package/dist/sui/index.js.map +1 -0
  239. package/dist/sui/types.d.ts +17 -0
  240. package/dist/sui/types.d.ts.map +1 -0
  241. package/dist/sui/types.js +17 -0
  242. package/dist/sui/types.js.map +1 -0
  243. package/dist/supported-chains.d.ts +5 -0
  244. package/dist/supported-chains.d.ts.map +1 -0
  245. package/dist/supported-chains.js +3 -0
  246. package/dist/supported-chains.js.map +1 -0
  247. package/dist/types.d.ts +118 -0
  248. package/dist/types.d.ts.map +1 -0
  249. package/dist/types.js +11 -0
  250. package/dist/types.js.map +1 -0
  251. package/dist/utils.d.ts +117 -0
  252. package/dist/utils.d.ts.map +1 -0
  253. package/dist/utils.js +336 -0
  254. package/dist/utils.js.map +1 -0
  255. package/package.json +66 -8
  256. package/src/aptos/exec.ts +69 -0
  257. package/src/aptos/hasher.ts +92 -0
  258. package/src/aptos/index.ts +660 -0
  259. package/src/aptos/logs.ts +210 -0
  260. package/src/aptos/send.ts +120 -0
  261. package/src/aptos/token.ts +150 -0
  262. package/src/aptos/types.ts +85 -0
  263. package/src/aptos/utils.ts +24 -0
  264. package/src/chain.ts +398 -0
  265. package/src/commits.ts +44 -0
  266. package/src/evm/abi/BurnMintERC677Token.ts +487 -0
  267. package/src/evm/abi/CommitStore_1_2.ts +637 -0
  268. package/src/evm/abi/CommitStore_1_5.ts +674 -0
  269. package/src/evm/abi/FeeQuoter_1_6.ts +1903 -0
  270. package/src/evm/abi/LockReleaseTokenPool_1_5.ts +1095 -0
  271. package/src/evm/abi/LockReleaseTokenPool_1_5_1.ts +1277 -0
  272. package/src/evm/abi/LockReleaseTokenPool_1_6_1.ts +1287 -0
  273. package/src/evm/abi/OffRamp_1_2.ts +1203 -0
  274. package/src/evm/abi/OffRamp_1_5.ts +1272 -0
  275. package/src/evm/abi/OffRamp_1_6.ts +1528 -0
  276. package/src/evm/abi/OnRamp_1_2.ts +1342 -0
  277. package/src/evm/abi/OnRamp_1_5.ts +1426 -0
  278. package/src/evm/abi/OnRamp_1_6.ts +879 -0
  279. package/src/evm/abi/Router.ts +507 -0
  280. package/src/evm/abi/TokenAdminRegistry_1_5.ts +332 -0
  281. package/src/evm/const.ts +69 -0
  282. package/src/evm/errors.ts +212 -0
  283. package/src/evm/hasher.ts +166 -0
  284. package/src/evm/index.ts +1262 -0
  285. package/src/evm/messages.ts +73 -0
  286. package/src/evm/offchain.ts +189 -0
  287. package/src/execution.ts +131 -0
  288. package/src/extra-args.ts +71 -0
  289. package/src/gas.ts +135 -0
  290. package/src/hasher/common.ts +23 -0
  291. package/src/hasher/hasher.ts +12 -0
  292. package/src/hasher/index.ts +3 -0
  293. package/src/hasher/merklemulti.ts +309 -0
  294. package/src/index.ts +51 -0
  295. package/src/offchain.ts +86 -0
  296. package/src/requests.ts +339 -0
  297. package/src/selectors.ts +1340 -0
  298. package/src/solana/cleanup.ts +216 -0
  299. package/src/solana/exec.ts +645 -0
  300. package/src/solana/hasher.ts +104 -0
  301. package/src/solana/idl/1.6.0/BASE_TOKEN_POOL.ts +1734 -0
  302. package/src/solana/idl/1.6.0/BURN_MINT_TOKEN_POOL.ts +1900 -0
  303. package/src/solana/idl/1.6.0/CCIP_CCTP_TOKEN_POOL.ts +2750 -0
  304. package/src/solana/idl/1.6.0/CCIP_COMMON.ts +210 -0
  305. package/src/solana/idl/1.6.0/CCIP_OFFRAMP.ts +5494 -0
  306. package/src/solana/idl/1.6.0/CCIP_ROUTER.ts +4671 -0
  307. package/src/solana/index.ts +1454 -0
  308. package/src/solana/offchain.ts +209 -0
  309. package/src/solana/patchBorsh.ts +67 -0
  310. package/src/solana/send.ts +436 -0
  311. package/src/solana/types.ts +6 -0
  312. package/src/solana/utils.ts +272 -0
  313. package/src/sui/hasher.ts +90 -0
  314. package/src/sui/index.ts +198 -0
  315. package/src/sui/types.ts +22 -0
  316. package/src/supported-chains.ts +4 -0
  317. package/src/types.ts +153 -0
  318. package/src/utils.ts +405 -0
  319. package/tsconfig.json +18 -0
@@ -0,0 +1,332 @@
1
+ export default [
2
+ // generate:
3
+ // fetch('https://raw.githubusercontent.com/smartcontractkit/ccip/release/contracts-ccip-1.5.1/core/gethwrappers/ccip/generated/token_admin_registry/token_admin_registry.go')
4
+ // .then((res) => res.text())
5
+ // .then((body) => body.match(/^\s*ABI: "(.*?)",$/m)?.[1])
6
+ // .then((abi) => JSON.parse(abi.replace(/\\"/g, '"')))
7
+ // .then((obj) => require('util').inspect(obj, {depth:99}).split('\n').slice(1, -1))
8
+ {
9
+ inputs: [{ internalType: 'address', name: 'token', type: 'address' }],
10
+ name: 'AlreadyRegistered',
11
+ type: 'error',
12
+ },
13
+ {
14
+ inputs: [{ internalType: 'address', name: 'token', type: 'address' }],
15
+ name: 'InvalidTokenPoolToken',
16
+ type: 'error',
17
+ },
18
+ {
19
+ inputs: [
20
+ { internalType: 'address', name: 'sender', type: 'address' },
21
+ { internalType: 'address', name: 'token', type: 'address' },
22
+ ],
23
+ name: 'OnlyAdministrator',
24
+ type: 'error',
25
+ },
26
+ {
27
+ inputs: [
28
+ { internalType: 'address', name: 'sender', type: 'address' },
29
+ { internalType: 'address', name: 'token', type: 'address' },
30
+ ],
31
+ name: 'OnlyPendingAdministrator',
32
+ type: 'error',
33
+ },
34
+ {
35
+ inputs: [{ internalType: 'address', name: 'sender', type: 'address' }],
36
+ name: 'OnlyRegistryModuleOrOwner',
37
+ type: 'error',
38
+ },
39
+ { inputs: [], name: 'ZeroAddress', type: 'error' },
40
+ {
41
+ anonymous: false,
42
+ inputs: [
43
+ {
44
+ indexed: true,
45
+ internalType: 'address',
46
+ name: 'token',
47
+ type: 'address',
48
+ },
49
+ {
50
+ indexed: true,
51
+ internalType: 'address',
52
+ name: 'currentAdmin',
53
+ type: 'address',
54
+ },
55
+ {
56
+ indexed: true,
57
+ internalType: 'address',
58
+ name: 'newAdmin',
59
+ type: 'address',
60
+ },
61
+ ],
62
+ name: 'AdministratorTransferRequested',
63
+ type: 'event',
64
+ },
65
+ {
66
+ anonymous: false,
67
+ inputs: [
68
+ {
69
+ indexed: true,
70
+ internalType: 'address',
71
+ name: 'token',
72
+ type: 'address',
73
+ },
74
+ {
75
+ indexed: true,
76
+ internalType: 'address',
77
+ name: 'newAdmin',
78
+ type: 'address',
79
+ },
80
+ ],
81
+ name: 'AdministratorTransferred',
82
+ type: 'event',
83
+ },
84
+ {
85
+ anonymous: false,
86
+ inputs: [
87
+ {
88
+ indexed: true,
89
+ internalType: 'address',
90
+ name: 'from',
91
+ type: 'address',
92
+ },
93
+ {
94
+ indexed: true,
95
+ internalType: 'address',
96
+ name: 'to',
97
+ type: 'address',
98
+ },
99
+ ],
100
+ name: 'OwnershipTransferRequested',
101
+ type: 'event',
102
+ },
103
+ {
104
+ anonymous: false,
105
+ inputs: [
106
+ {
107
+ indexed: true,
108
+ internalType: 'address',
109
+ name: 'from',
110
+ type: 'address',
111
+ },
112
+ {
113
+ indexed: true,
114
+ internalType: 'address',
115
+ name: 'to',
116
+ type: 'address',
117
+ },
118
+ ],
119
+ name: 'OwnershipTransferred',
120
+ type: 'event',
121
+ },
122
+ {
123
+ anonymous: false,
124
+ inputs: [
125
+ {
126
+ indexed: true,
127
+ internalType: 'address',
128
+ name: 'token',
129
+ type: 'address',
130
+ },
131
+ {
132
+ indexed: true,
133
+ internalType: 'address',
134
+ name: 'previousPool',
135
+ type: 'address',
136
+ },
137
+ {
138
+ indexed: true,
139
+ internalType: 'address',
140
+ name: 'newPool',
141
+ type: 'address',
142
+ },
143
+ ],
144
+ name: 'PoolSet',
145
+ type: 'event',
146
+ },
147
+ {
148
+ anonymous: false,
149
+ inputs: [
150
+ {
151
+ indexed: false,
152
+ internalType: 'address',
153
+ name: 'module',
154
+ type: 'address',
155
+ },
156
+ ],
157
+ name: 'RegistryModuleAdded',
158
+ type: 'event',
159
+ },
160
+ {
161
+ anonymous: false,
162
+ inputs: [
163
+ {
164
+ indexed: true,
165
+ internalType: 'address',
166
+ name: 'module',
167
+ type: 'address',
168
+ },
169
+ ],
170
+ name: 'RegistryModuleRemoved',
171
+ type: 'event',
172
+ },
173
+ {
174
+ inputs: [{ internalType: 'address', name: 'localToken', type: 'address' }],
175
+ name: 'acceptAdminRole',
176
+ outputs: [],
177
+ stateMutability: 'nonpayable',
178
+ type: 'function',
179
+ },
180
+ {
181
+ inputs: [],
182
+ name: 'acceptOwnership',
183
+ outputs: [],
184
+ stateMutability: 'nonpayable',
185
+ type: 'function',
186
+ },
187
+ {
188
+ inputs: [{ internalType: 'address', name: 'module', type: 'address' }],
189
+ name: 'addRegistryModule',
190
+ outputs: [],
191
+ stateMutability: 'nonpayable',
192
+ type: 'function',
193
+ },
194
+ {
195
+ inputs: [
196
+ { internalType: 'uint64', name: 'startIndex', type: 'uint64' },
197
+ { internalType: 'uint64', name: 'maxCount', type: 'uint64' },
198
+ ],
199
+ name: 'getAllConfiguredTokens',
200
+ outputs: [{ internalType: 'address[]', name: 'tokens', type: 'address[]' }],
201
+ stateMutability: 'view',
202
+ type: 'function',
203
+ },
204
+ {
205
+ inputs: [{ internalType: 'address', name: 'token', type: 'address' }],
206
+ name: 'getPool',
207
+ outputs: [{ internalType: 'address', name: '', type: 'address' }],
208
+ stateMutability: 'view',
209
+ type: 'function',
210
+ },
211
+ {
212
+ inputs: [{ internalType: 'address[]', name: 'tokens', type: 'address[]' }],
213
+ name: 'getPools',
214
+ outputs: [{ internalType: 'address[]', name: '', type: 'address[]' }],
215
+ stateMutability: 'view',
216
+ type: 'function',
217
+ },
218
+ {
219
+ inputs: [{ internalType: 'address', name: 'token', type: 'address' }],
220
+ name: 'getTokenConfig',
221
+ outputs: [
222
+ {
223
+ components: [
224
+ {
225
+ internalType: 'address',
226
+ name: 'administrator',
227
+ type: 'address',
228
+ },
229
+ {
230
+ internalType: 'address',
231
+ name: 'pendingAdministrator',
232
+ type: 'address',
233
+ },
234
+ {
235
+ internalType: 'address',
236
+ name: 'tokenPool',
237
+ type: 'address',
238
+ },
239
+ ],
240
+ internalType: 'structTokenAdminRegistry.TokenConfig',
241
+ name: '',
242
+ type: 'tuple',
243
+ },
244
+ ],
245
+ stateMutability: 'view',
246
+ type: 'function',
247
+ },
248
+ {
249
+ inputs: [
250
+ { internalType: 'address', name: 'localToken', type: 'address' },
251
+ {
252
+ internalType: 'address',
253
+ name: 'administrator',
254
+ type: 'address',
255
+ },
256
+ ],
257
+ name: 'isAdministrator',
258
+ outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
259
+ stateMutability: 'view',
260
+ type: 'function',
261
+ },
262
+ {
263
+ inputs: [{ internalType: 'address', name: 'module', type: 'address' }],
264
+ name: 'isRegistryModule',
265
+ outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
266
+ stateMutability: 'view',
267
+ type: 'function',
268
+ },
269
+ {
270
+ inputs: [],
271
+ name: 'owner',
272
+ outputs: [{ internalType: 'address', name: '', type: 'address' }],
273
+ stateMutability: 'view',
274
+ type: 'function',
275
+ },
276
+ {
277
+ inputs: [
278
+ { internalType: 'address', name: 'localToken', type: 'address' },
279
+ {
280
+ internalType: 'address',
281
+ name: 'administrator',
282
+ type: 'address',
283
+ },
284
+ ],
285
+ name: 'proposeAdministrator',
286
+ outputs: [],
287
+ stateMutability: 'nonpayable',
288
+ type: 'function',
289
+ },
290
+ {
291
+ inputs: [{ internalType: 'address', name: 'module', type: 'address' }],
292
+ name: 'removeRegistryModule',
293
+ outputs: [],
294
+ stateMutability: 'nonpayable',
295
+ type: 'function',
296
+ },
297
+ {
298
+ inputs: [
299
+ { internalType: 'address', name: 'localToken', type: 'address' },
300
+ { internalType: 'address', name: 'pool', type: 'address' },
301
+ ],
302
+ name: 'setPool',
303
+ outputs: [],
304
+ stateMutability: 'nonpayable',
305
+ type: 'function',
306
+ },
307
+ {
308
+ inputs: [
309
+ { internalType: 'address', name: 'localToken', type: 'address' },
310
+ { internalType: 'address', name: 'newAdmin', type: 'address' },
311
+ ],
312
+ name: 'transferAdminRole',
313
+ outputs: [],
314
+ stateMutability: 'nonpayable',
315
+ type: 'function',
316
+ },
317
+ {
318
+ inputs: [{ internalType: 'address', name: 'to', type: 'address' }],
319
+ name: 'transferOwnership',
320
+ outputs: [],
321
+ stateMutability: 'nonpayable',
322
+ type: 'function',
323
+ },
324
+ {
325
+ inputs: [],
326
+ name: 'typeAndVersion',
327
+ outputs: [{ internalType: 'string', name: '', type: 'string' }],
328
+ stateMutability: 'view',
329
+ type: 'function',
330
+ },
331
+ // generate:end
332
+ ] as const
@@ -0,0 +1,69 @@
1
+ import { type EventFragment, AbiCoder, Interface } from 'ethers'
2
+
3
+ import Token_ABI from './abi/BurnMintERC677Token.ts'
4
+ import CommitStore_1_2_ABI from './abi/CommitStore_1_2.ts'
5
+ import CommitStore_1_5_ABI from './abi/CommitStore_1_5.ts'
6
+ import FeeQuoter_ABI from './abi/FeeQuoter_1_6.ts'
7
+ import TokenPool_1_5_ABI from './abi/LockReleaseTokenPool_1_5.ts'
8
+ import TokenPool_1_5_1_ABI from './abi/LockReleaseTokenPool_1_5_1.ts'
9
+ import TokenPool_1_6_ABI from './abi/LockReleaseTokenPool_1_6_1.ts'
10
+ import EVM2EVMOffRamp_1_2_ABI from './abi/OffRamp_1_2.ts'
11
+ import EVM2EVMOffRamp_1_5_ABI from './abi/OffRamp_1_5.ts'
12
+ import OffRamp_1_6_ABI from './abi/OffRamp_1_6.ts'
13
+ import EVM2EVMOnRamp_1_2_ABI from './abi/OnRamp_1_2.ts'
14
+ import EVM2EVMOnRamp_1_5_ABI from './abi/OnRamp_1_5.ts'
15
+ import OnRamp_1_6_ABI from './abi/OnRamp_1_6.ts'
16
+ import Router_ABI from './abi/Router.ts'
17
+ import TokenAdminRegistry_ABI from './abi/TokenAdminRegistry_1_5.ts'
18
+
19
+ export const defaultAbiCoder = AbiCoder.defaultAbiCoder()
20
+
21
+ export const DEFAULT_GAS_LIMIT = 200_000n
22
+ export const DEFAULT_APPROVE_GAS_LIMIT = 120_000n
23
+
24
+ const customErrors = [
25
+ 'error NoContract()',
26
+ 'error NoGasForCallExactCheck()',
27
+ 'error NotEnoughGasForCall()',
28
+ ] as const
29
+
30
+ export const interfaces = {
31
+ Router: new Interface(Router_ABI),
32
+ Token: new Interface(Token_ABI),
33
+ TokenAdminRegistry: new Interface(TokenAdminRegistry_ABI),
34
+ FeeQuoter: new Interface(FeeQuoter_ABI),
35
+ TokenPool_v1_5_1: new Interface(TokenPool_1_5_1_ABI),
36
+ TokenPool_v1_5: new Interface(TokenPool_1_5_ABI),
37
+ TokenPool_v1_6: new Interface(TokenPool_1_6_ABI),
38
+ CommitStore_v1_5: new Interface(CommitStore_1_5_ABI),
39
+ CommitStore_v1_2: new Interface(CommitStore_1_2_ABI),
40
+ OffRamp_v1_6: new Interface(OffRamp_1_6_ABI),
41
+ EVM2EVMOffRamp_v1_5: new Interface(EVM2EVMOffRamp_1_5_ABI),
42
+ EVM2EVMOffRamp_v1_2: new Interface(EVM2EVMOffRamp_1_2_ABI),
43
+ OnRamp_v1_6: new Interface(OnRamp_1_6_ABI),
44
+ EVM2EVMOnRamp_v1_5: new Interface(EVM2EVMOnRamp_1_5_ABI),
45
+ EVM2EVMOnRamp_v1_2: new Interface(EVM2EVMOnRamp_1_2_ABI),
46
+ Custom: new Interface(customErrors),
47
+ } as const
48
+
49
+ export function getAllFragmentsMatchingEvents(
50
+ events: readonly string[],
51
+ ): Record<`0x${string}`, EventFragment> {
52
+ const fragments: Record<string, EventFragment> = {}
53
+ for (const iface of Object.values(interfaces)) {
54
+ for (const event of events) {
55
+ const fragment = iface.getEvent(event)
56
+ if (fragment) fragments[fragment.topicHash] ??= fragment
57
+ }
58
+ }
59
+ return fragments
60
+ }
61
+ export const requestsFragments = getAllFragmentsMatchingEvents([
62
+ 'CCIPSendRequested',
63
+ 'CCIPMessageSent',
64
+ ])
65
+ export const commitsFragments = getAllFragmentsMatchingEvents([
66
+ 'ReportAccepted',
67
+ 'CommitReportAccepted',
68
+ ])
69
+ export const receiptsFragments = getAllFragmentsMatchingEvents(['ExecutionStateChanged'])
@@ -0,0 +1,212 @@
1
+ import {
2
+ type BytesLike,
3
+ type ErrorFragment,
4
+ type EventFragment,
5
+ type FunctionFragment,
6
+ Result,
7
+ dataLength,
8
+ dataSlice,
9
+ hexlify,
10
+ isBytesLike,
11
+ isHexString,
12
+ } from 'ethers'
13
+
14
+ import { defaultAbiCoder, interfaces } from './const.ts'
15
+ import { ChainFamily } from '../chain.ts'
16
+ import { decodeExtraArgs } from '../extra-args.ts'
17
+
18
+ /**
19
+ * Get error data from an error object, if possible
20
+ * @param err - error object
21
+ * @returns error data if found
22
+ **/
23
+ export function getErrorData(err: unknown): string | undefined {
24
+ if (!err || typeof err != 'object') return
25
+ if ('data' in err && err.data && isHexString(err.data)) return err.data
26
+ if (
27
+ !('info' in err) ||
28
+ !err.info ||
29
+ typeof err.info != 'object' ||
30
+ !('error' in err.info) ||
31
+ !err.info.error ||
32
+ typeof err.info.error != 'object' ||
33
+ !('data' in err.info.error) ||
34
+ typeof err.info.error.data !== 'string' ||
35
+ !err.info.error.data
36
+ )
37
+ return
38
+ const match = err.info.error.data.match(/\b0x[0-9a-fA-F]+\b/)
39
+ if (!match) return
40
+ return match[0]
41
+ }
42
+
43
+ /**
44
+ * Try to parse selector and data with any known ABI
45
+ * selector must be either:
46
+ * - Error, Function or Event name or signature
47
+ * - 4-byte for Error or Function selector (first 4B of its keccak256(signature))
48
+ * - 32-byte for Event topicHash (keccak256(signature))
49
+ * If data is provided, it will be parsed with the fragment's inputs. For events, only the
50
+ * non-indexed arguments are parsed.
51
+ *
52
+ * @param selector - error, function or event selector
53
+ * @param data - data to parse as fragment's inputs
54
+ * @returns Fragment and contract name, if found, and parsed data if possible
55
+ **/
56
+ export function parseWithFragment(
57
+ selector: string,
58
+ data?: BytesLike,
59
+ ):
60
+ | readonly [
61
+ fragment: ErrorFragment | FunctionFragment | EventFragment,
62
+ contractName: string,
63
+ parsed?: Result,
64
+ ]
65
+ | undefined {
66
+ if (!dataLength(data ?? '0x') && isBytesLike(selector)) {
67
+ const len = dataLength(selector)
68
+ if (len >= 4 && len !== 32) {
69
+ data = dataSlice(selector, 4)
70
+ selector = dataSlice(selector, 0, 4)
71
+ }
72
+ }
73
+ let res: readonly [ErrorFragment | FunctionFragment | EventFragment, string] | undefined
74
+ for (const [name, iface] of Object.entries(interfaces)) {
75
+ try {
76
+ const error = iface.getError(selector)
77
+ if (error) {
78
+ res = [error, name] as const
79
+ break
80
+ }
81
+ } catch (_) {
82
+ // test all abis
83
+ }
84
+ try {
85
+ const func = iface.getFunction(selector)
86
+ if (func) {
87
+ res = [func, name] as const
88
+ break
89
+ }
90
+ } catch (_) {
91
+ // test all abis
92
+ }
93
+ try {
94
+ const event = iface.getEvent(selector)
95
+ if (event) {
96
+ res = [event, name] as const
97
+ break
98
+ }
99
+ } catch (_) {
100
+ // test all abis
101
+ }
102
+ }
103
+ if (res && data) {
104
+ let parsed
105
+ const [fragment] = res
106
+ try {
107
+ parsed = defaultAbiCoder.decode(
108
+ fragment.inputs.filter(({ indexed }) => !indexed),
109
+ data,
110
+ )
111
+ } catch (_) {
112
+ // ignore
113
+ }
114
+ if (parsed) return [...res, parsed]
115
+ }
116
+ return res
117
+ }
118
+
119
+ // join truthy property names, separated by a dot
120
+ function j(...args: string[]): string {
121
+ return args.filter(Boolean).join('.')
122
+ }
123
+
124
+ /**
125
+ * Recursively parse error data, returning an array of key/value pairs, where key is the path to
126
+ * error, and error maybe an error description or format, or the raw data if not parsable.
127
+ *
128
+ * @param key - key to use for the error data
129
+ * @param data - error bytearray data to parse
130
+ * @returns array of key/value pairs
131
+ **/
132
+ export function recursiveParseError(
133
+ key: string,
134
+ data: unknown,
135
+ ): (readonly [key: string, error: unknown])[] {
136
+ if (data instanceof Result) {
137
+ if (data.length === 0) return key ? [[key, data.toArray()]] : []
138
+ let kv: ReturnType<typeof recursiveParseError>
139
+ try {
140
+ kv = Object.entries(data.toObject()).map(([k, v]) => [j(key, k), v])
141
+ } catch (_) {
142
+ kv = data.toArray().map((v, i) => [j(key, `[${i}]`), v])
143
+ }
144
+ return kv.reduce(
145
+ (acc, [k, v]) => [...acc, ...recursiveParseError(k, v)],
146
+ [] as ReturnType<typeof recursiveParseError>,
147
+ )
148
+ }
149
+ if (!isBytesLike(data) || [0, 20].includes(dataLength(data))) {
150
+ return [[key, data]]
151
+ }
152
+ try {
153
+ const parsed = decodeExtraArgs(data, ChainFamily.EVM)
154
+ if (parsed) {
155
+ const { _tag, ...rest } = parsed
156
+ return [[key, _tag], ...Object.entries(rest).map(([k, v]) => [j(key, k), v] as const)]
157
+ }
158
+ } catch (_) {
159
+ // pass
160
+ }
161
+ const parsed = parseWithFragment(hexlify(data))
162
+ if (!parsed) return [[key, data]]
163
+ const [fragment, _, args] = parsed
164
+ const desc = fragment.format('full')
165
+ key = desc.split(' ')[0]
166
+ const res = [[key, desc.substring(key.length + 1)]] as ReturnType<typeof recursiveParseError>
167
+ if (!args) return res
168
+ if (['ReceiverError', 'TokenHandlingError'].includes(fragment.name) && args.err === '0x') {
169
+ res.push([`${key}.err`, '0x [possibly out-of-gas or abi.decode error]'])
170
+ return res
171
+ }
172
+ res.push(...recursiveParseError('', args))
173
+ return res
174
+ }
175
+
176
+ export function parseData(data: unknown): Record<string, unknown> | undefined {
177
+ if (!data) return
178
+ if (isHexString(data)) {
179
+ const parsed = recursiveParseError('', data)
180
+ if (parsed.length === 1 && parsed[0][1] === data) return
181
+ return Object.fromEntries(parsed)
182
+ }
183
+ if (typeof data !== 'object') return
184
+ // ethers tx/simulation/call errors
185
+ const err_ = data as {
186
+ shortMessage?: string
187
+ message?: string
188
+ transaction?: { to: string; data: string }
189
+ }
190
+ const shortMessage = err_.shortMessage || err_.message
191
+ const transaction = err_.transaction
192
+ if (!shortMessage || !transaction?.data) return
193
+
194
+ let method, invocation
195
+ const invocation_ = (data as { invocation: { method: string; args: Result } | null }).invocation
196
+ if (invocation_) {
197
+ ;({ method, ...invocation } = invocation_)
198
+ } else {
199
+ method = dataSlice(transaction.data, 0, 4)
200
+ const func = parseWithFragment(method)?.[0]
201
+ if (func) method = func.name
202
+ }
203
+ let reason
204
+ const errorData = getErrorData(data)
205
+ if (errorData) reason = Object.fromEntries(recursiveParseError('revert', errorData))
206
+ return {
207
+ method,
208
+ error: shortMessage,
209
+ ...reason,
210
+ call: { ...transaction, ...invocation },
211
+ }
212
+ }