@chainlink/ccip-sdk 0.96.0 → 1.0.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 (247) hide show
  1. package/README.md +12 -9
  2. package/dist/api/index.d.ts +21 -8
  3. package/dist/api/index.d.ts.map +1 -1
  4. package/dist/api/index.js +42 -13
  5. package/dist/api/index.js.map +1 -1
  6. package/dist/api/types.d.ts +0 -2
  7. package/dist/api/types.d.ts.map +1 -1
  8. package/dist/aptos/exec.d.ts +2 -2
  9. package/dist/aptos/exec.d.ts.map +1 -1
  10. package/dist/aptos/exec.js.map +1 -1
  11. package/dist/aptos/hasher.d.ts.map +1 -1
  12. package/dist/aptos/hasher.js +1 -1
  13. package/dist/aptos/hasher.js.map +1 -1
  14. package/dist/aptos/index.d.ts +17 -16
  15. package/dist/aptos/index.d.ts.map +1 -1
  16. package/dist/aptos/index.js +42 -73
  17. package/dist/aptos/index.js.map +1 -1
  18. package/dist/aptos/logs.d.ts +2 -2
  19. package/dist/aptos/logs.d.ts.map +1 -1
  20. package/dist/aptos/types.d.ts +2 -19
  21. package/dist/aptos/types.d.ts.map +1 -1
  22. package/dist/aptos/types.js +0 -11
  23. package/dist/aptos/types.js.map +1 -1
  24. package/dist/chain.d.ts +538 -158
  25. package/dist/chain.d.ts.map +1 -1
  26. package/dist/chain.js +132 -19
  27. package/dist/chain.js.map +1 -1
  28. package/dist/commits.d.ts +4 -6
  29. package/dist/commits.d.ts.map +1 -1
  30. package/dist/commits.js +4 -4
  31. package/dist/commits.js.map +1 -1
  32. package/dist/errors/CCIPError.d.ts +33 -4
  33. package/dist/errors/CCIPError.d.ts.map +1 -1
  34. package/dist/errors/CCIPError.js +33 -4
  35. package/dist/errors/CCIPError.js.map +1 -1
  36. package/dist/errors/codes.d.ts +3 -0
  37. package/dist/errors/codes.d.ts.map +1 -1
  38. package/dist/errors/codes.js +3 -1
  39. package/dist/errors/codes.js.map +1 -1
  40. package/dist/errors/index.d.ts +4 -4
  41. package/dist/errors/index.d.ts.map +1 -1
  42. package/dist/errors/index.js +4 -4
  43. package/dist/errors/index.js.map +1 -1
  44. package/dist/errors/recovery.d.ts.map +1 -1
  45. package/dist/errors/recovery.js +4 -1
  46. package/dist/errors/recovery.js.map +1 -1
  47. package/dist/errors/specialized.d.ts +1695 -120
  48. package/dist/errors/specialized.d.ts.map +1 -1
  49. package/dist/errors/specialized.js +1715 -123
  50. package/dist/errors/specialized.js.map +1 -1
  51. package/dist/errors/utils.d.ts.map +1 -1
  52. package/dist/errors/utils.js +0 -1
  53. package/dist/errors/utils.js.map +1 -1
  54. package/dist/evm/abi/OffRamp_2_0.d.ts +764 -0
  55. package/dist/evm/abi/OffRamp_2_0.d.ts.map +1 -0
  56. package/dist/evm/abi/OffRamp_2_0.js +744 -0
  57. package/dist/evm/abi/OffRamp_2_0.js.map +1 -0
  58. package/dist/evm/abi/OnRamp_2_0.d.ts +925 -0
  59. package/dist/evm/abi/OnRamp_2_0.d.ts.map +1 -0
  60. package/dist/evm/abi/OnRamp_2_0.js +992 -0
  61. package/dist/evm/abi/OnRamp_2_0.js.map +1 -0
  62. package/dist/evm/const.d.ts +12 -2
  63. package/dist/evm/const.d.ts.map +1 -1
  64. package/dist/evm/const.js +8 -2
  65. package/dist/evm/const.js.map +1 -1
  66. package/dist/evm/errors.d.ts.map +1 -1
  67. package/dist/evm/errors.js +7 -2
  68. package/dist/evm/errors.js.map +1 -1
  69. package/dist/evm/extra-args.d.ts.map +1 -1
  70. package/dist/evm/extra-args.js +5 -24
  71. package/dist/evm/extra-args.js.map +1 -1
  72. package/dist/evm/hasher.d.ts.map +1 -1
  73. package/dist/evm/hasher.js +23 -13
  74. package/dist/evm/hasher.js.map +1 -1
  75. package/dist/evm/index.d.ts +73 -16
  76. package/dist/evm/index.d.ts.map +1 -1
  77. package/dist/evm/index.js +241 -146
  78. package/dist/evm/index.js.map +1 -1
  79. package/dist/evm/logs.d.ts +1 -1
  80. package/dist/evm/logs.js +1 -1
  81. package/dist/evm/messages.d.ts +59 -5
  82. package/dist/evm/messages.d.ts.map +1 -1
  83. package/dist/evm/messages.js +210 -0
  84. package/dist/evm/messages.js.map +1 -1
  85. package/dist/evm/offchain.d.ts +1 -14
  86. package/dist/evm/offchain.d.ts.map +1 -1
  87. package/dist/evm/offchain.js +1 -133
  88. package/dist/evm/offchain.js.map +1 -1
  89. package/dist/evm/types.d.ts +7 -2
  90. package/dist/evm/types.d.ts.map +1 -1
  91. package/dist/evm/types.js +22 -1
  92. package/dist/evm/types.js.map +1 -1
  93. package/dist/execution.d.ts +62 -22
  94. package/dist/execution.d.ts.map +1 -1
  95. package/dist/execution.js +98 -61
  96. package/dist/execution.js.map +1 -1
  97. package/dist/extra-args.d.ts +13 -3
  98. package/dist/extra-args.d.ts.map +1 -1
  99. package/dist/extra-args.js +13 -3
  100. package/dist/extra-args.js.map +1 -1
  101. package/dist/gas.d.ts +25 -2
  102. package/dist/gas.d.ts.map +1 -1
  103. package/dist/gas.js +30 -4
  104. package/dist/gas.js.map +1 -1
  105. package/dist/index.d.ts +3 -2
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +2 -1
  108. package/dist/index.js.map +1 -1
  109. package/dist/offchain.d.ts +23 -6
  110. package/dist/offchain.d.ts.map +1 -1
  111. package/dist/offchain.js +92 -17
  112. package/dist/offchain.js.map +1 -1
  113. package/dist/requests.d.ts +85 -14
  114. package/dist/requests.d.ts.map +1 -1
  115. package/dist/requests.js +99 -17
  116. package/dist/requests.js.map +1 -1
  117. package/dist/selectors.d.ts.map +1 -1
  118. package/dist/selectors.js +12 -0
  119. package/dist/selectors.js.map +1 -1
  120. package/dist/shared/bcs-codecs.d.ts +61 -0
  121. package/dist/shared/bcs-codecs.d.ts.map +1 -0
  122. package/dist/shared/bcs-codecs.js +102 -0
  123. package/dist/shared/bcs-codecs.js.map +1 -0
  124. package/dist/shared/constants.d.ts +3 -0
  125. package/dist/shared/constants.d.ts.map +1 -0
  126. package/dist/shared/constants.js +3 -0
  127. package/dist/shared/constants.js.map +1 -0
  128. package/dist/solana/exec.d.ts +2 -2
  129. package/dist/solana/exec.d.ts.map +1 -1
  130. package/dist/solana/exec.js.map +1 -1
  131. package/dist/solana/idl/1.6.0/BASE_TOKEN_POOL.d.ts +1 -1
  132. package/dist/solana/idl/1.6.0/BASE_TOKEN_POOL.js +1 -1
  133. package/dist/solana/idl/1.6.0/BURN_MINT_TOKEN_POOL.d.ts +1 -1
  134. package/dist/solana/idl/1.6.0/BURN_MINT_TOKEN_POOL.js +1 -1
  135. package/dist/solana/idl/1.6.0/CCIP_CCTP_TOKEN_POOL.d.ts +1 -1
  136. package/dist/solana/idl/1.6.0/CCIP_CCTP_TOKEN_POOL.js +1 -1
  137. package/dist/solana/idl/1.6.0/CCIP_COMMON.d.ts +16 -1
  138. package/dist/solana/idl/1.6.0/CCIP_COMMON.d.ts.map +1 -1
  139. package/dist/solana/idl/1.6.0/CCIP_COMMON.js +16 -1
  140. package/dist/solana/idl/1.6.0/CCIP_COMMON.js.map +1 -1
  141. package/dist/solana/idl/1.6.0/CCIP_OFFRAMP.d.ts +1 -1
  142. package/dist/solana/idl/1.6.0/CCIP_OFFRAMP.js +1 -1
  143. package/dist/solana/idl/1.6.0/CCIP_ROUTER.d.ts +1 -1
  144. package/dist/solana/idl/1.6.0/CCIP_ROUTER.js +1 -1
  145. package/dist/solana/index.d.ts +85 -24
  146. package/dist/solana/index.d.ts.map +1 -1
  147. package/dist/solana/index.js +69 -37
  148. package/dist/solana/index.js.map +1 -1
  149. package/dist/solana/offchain.d.ts +1 -13
  150. package/dist/solana/offchain.d.ts.map +1 -1
  151. package/dist/solana/offchain.js +1 -66
  152. package/dist/solana/offchain.js.map +1 -1
  153. package/dist/solana/utils.d.ts +4 -4
  154. package/dist/solana/utils.d.ts.map +1 -1
  155. package/dist/solana/utils.js +1 -1
  156. package/dist/solana/utils.js.map +1 -1
  157. package/dist/sui/hasher.d.ts.map +1 -1
  158. package/dist/sui/hasher.js +1 -1
  159. package/dist/sui/hasher.js.map +1 -1
  160. package/dist/sui/index.d.ts +18 -18
  161. package/dist/sui/index.d.ts.map +1 -1
  162. package/dist/sui/index.js +38 -39
  163. package/dist/sui/index.js.map +1 -1
  164. package/dist/sui/manuallyExec/encoder.d.ts +2 -2
  165. package/dist/sui/manuallyExec/encoder.d.ts.map +1 -1
  166. package/dist/sui/manuallyExec/encoder.js.map +1 -1
  167. package/dist/sui/manuallyExec/index.d.ts +2 -2
  168. package/dist/sui/manuallyExec/index.d.ts.map +1 -1
  169. package/dist/ton/exec.d.ts +3 -3
  170. package/dist/ton/exec.d.ts.map +1 -1
  171. package/dist/ton/exec.js +1 -1
  172. package/dist/ton/exec.js.map +1 -1
  173. package/dist/ton/index.d.ts +14 -22
  174. package/dist/ton/index.d.ts.map +1 -1
  175. package/dist/ton/index.js +26 -35
  176. package/dist/ton/index.js.map +1 -1
  177. package/dist/ton/types.d.ts +3 -5
  178. package/dist/ton/types.d.ts.map +1 -1
  179. package/dist/ton/types.js.map +1 -1
  180. package/dist/types.d.ts +55 -20
  181. package/dist/types.d.ts.map +1 -1
  182. package/dist/types.js +6 -1
  183. package/dist/types.js.map +1 -1
  184. package/dist/utils.d.ts +65 -2
  185. package/dist/utils.d.ts.map +1 -1
  186. package/dist/utils.js +74 -2
  187. package/dist/utils.js.map +1 -1
  188. package/package.json +14 -10
  189. package/src/api/index.ts +53 -17
  190. package/src/api/types.ts +0 -2
  191. package/src/aptos/exec.ts +2 -2
  192. package/src/aptos/hasher.ts +1 -1
  193. package/src/aptos/index.ts +55 -100
  194. package/src/aptos/logs.ts +2 -2
  195. package/src/aptos/types.ts +2 -15
  196. package/src/chain.ts +594 -171
  197. package/src/commits.ts +9 -9
  198. package/src/errors/CCIPError.ts +33 -4
  199. package/src/errors/codes.ts +3 -1
  200. package/src/errors/index.ts +4 -0
  201. package/src/errors/recovery.ts +7 -1
  202. package/src/errors/specialized.ts +1726 -130
  203. package/src/errors/utils.ts +0 -1
  204. package/src/evm/abi/OffRamp_2_0.ts +743 -0
  205. package/src/evm/abi/OnRamp_2_0.ts +991 -0
  206. package/src/evm/const.ts +10 -3
  207. package/src/evm/errors.ts +6 -2
  208. package/src/evm/extra-args.ts +4 -21
  209. package/src/evm/hasher.ts +30 -18
  210. package/src/evm/index.ts +314 -176
  211. package/src/evm/logs.ts +1 -1
  212. package/src/evm/messages.ts +323 -11
  213. package/src/evm/offchain.ts +2 -191
  214. package/src/evm/types.ts +20 -2
  215. package/src/execution.ts +125 -86
  216. package/src/extra-args.ts +13 -3
  217. package/src/gas.ts +29 -3
  218. package/src/index.ts +10 -3
  219. package/src/offchain.ts +125 -28
  220. package/src/requests.ts +114 -19
  221. package/src/selectors.ts +12 -0
  222. package/src/shared/bcs-codecs.ts +132 -0
  223. package/src/shared/constants.ts +2 -0
  224. package/src/solana/exec.ts +4 -4
  225. package/src/solana/idl/1.6.0/BASE_TOKEN_POOL.ts +2 -2
  226. package/src/solana/idl/1.6.0/BURN_MINT_TOKEN_POOL.ts +2 -2
  227. package/src/solana/idl/1.6.0/CCIP_CCTP_TOKEN_POOL.ts +2 -2
  228. package/src/solana/idl/1.6.0/CCIP_COMMON.ts +32 -2
  229. package/src/solana/idl/1.6.0/CCIP_OFFRAMP.ts +2 -2
  230. package/src/solana/idl/1.6.0/CCIP_ROUTER.ts +2 -2
  231. package/src/solana/index.ts +110 -85
  232. package/src/solana/offchain.ts +3 -100
  233. package/src/solana/utils.ts +8 -5
  234. package/src/sui/hasher.ts +1 -1
  235. package/src/sui/index.ts +55 -59
  236. package/src/sui/manuallyExec/encoder.ts +2 -2
  237. package/src/sui/manuallyExec/index.ts +2 -2
  238. package/src/ton/exec.ts +4 -7
  239. package/src/ton/index.ts +45 -53
  240. package/src/ton/types.ts +4 -7
  241. package/src/types.ts +81 -37
  242. package/src/utils.ts +73 -2
  243. package/dist/aptos/utils.d.ts +0 -12
  244. package/dist/aptos/utils.d.ts.map +0 -1
  245. package/dist/aptos/utils.js +0 -15
  246. package/dist/aptos/utils.js.map +0 -1
  247. package/src/aptos/utils.ts +0 -24
@@ -1,56 +1,4 @@
1
- import { EventFragment } from 'ethers';
2
- import { getLbtcAttestation, getUsdcAttestation } from "../offchain.js";
3
- import { networkInfo } from "../utils.js";
4
- import { defaultAbiCoder, interfaces, requestsFragments } from "./const.js";
5
- import { parseSourceTokenData } from "./messages.js";
6
- const BURNED_EVENT_1_5 = interfaces.TokenPool_v1_5.getEvent('Burned');
7
- const BURNED_EVENT_1_6 = interfaces.TokenPool_v1_6.getEvent('LockedOrBurned');
8
- const BURNED_EVENT_TOPIC_HASHES = new Set([BURNED_EVENT_1_5.topicHash, BURNED_EVENT_1_6.topicHash]);
9
- const USDC_EVENT = EventFragment.from('MessageSent(bytes message)');
10
- const TRANSFER_EVENT = EventFragment.from('Transfer(address from, address to, uint256 value)');
11
- export const LBTC_EVENT = EventFragment.from('DepositToBridge(address fromAddress, bytes32 toAddress, bytes32 payloadHash, bytes payload)');
12
- export const LBTC_EVENT_V2 = EventFragment.from('DepositToBridge(address fromAddress, bytes32 toAddress, bytes32 payloadHash)');
13
- const LBTC_EVENTS_HASHES = new Set([LBTC_EVENT.topicHash, LBTC_EVENT_V2.topicHash]);
14
- /**
15
- * Fetch offchain token data for all transfers in request
16
- *
17
- * @param request - Request (or subset of) to fetch offchainTokenData for
18
- * @returns Array of byte arrays, one per transfer in request
19
- */
20
- export async function fetchEVMOffchainTokenData(request, ctx) {
21
- const { networkType } = networkInfo(request.message.sourceChainSelector);
22
- // there's a chance there are other CCIPSendRequested in same tx,
23
- // and they may contain USDC transfers as well, so we select
24
- // any USDC logs after that and before our CCIPSendRequested
25
- const prevCcipRequestIdx = request.tx.logs.find(({ topics, index }) => topics[0] in requestsFragments && index < request.log.index)?.index ?? -1;
26
- const usdcRequestLogs = request.tx.logs.filter(({ index }) => prevCcipRequestIdx < index && index < request.log.index);
27
- const offchainTokenData = request.message.tokenAmounts.map(() => undefined);
28
- const usdcTokenData = await getUsdcTokenData(request.message.tokenAmounts, usdcRequestLogs, networkType, ctx);
29
- let lbtcTokenData = [];
30
- try {
31
- let tokenAmounts;
32
- if ('sourceTokenData' in request.message) {
33
- tokenAmounts = request.message.sourceTokenData.map(parseSourceTokenData);
34
- }
35
- else {
36
- tokenAmounts = request.message.tokenAmounts;
37
- }
38
- //for lbtc we distinguish logs by hash in event, so we can pass all of them
39
- lbtcTokenData = await getLbtcTokenData(tokenAmounts, request.tx.logs, networkType, ctx);
40
- }
41
- catch (_) {
42
- // pass
43
- }
44
- for (let i = 0; i < offchainTokenData.length; i++) {
45
- if (usdcTokenData[i]) {
46
- offchainTokenData[i] = usdcTokenData[i];
47
- }
48
- else if (lbtcTokenData[i]) {
49
- offchainTokenData[i] = lbtcTokenData[i];
50
- }
51
- }
52
- return offchainTokenData;
53
- }
1
+ import { defaultAbiCoder } from "./const.js";
54
2
  /**
55
3
  * Encodes offchain token data for EVM execution.
56
4
  * @param data - Offchain token data to encode.
@@ -65,84 +13,4 @@ export function encodeEVMOffchainTokenData(data) {
65
13
  }
66
14
  return '0x';
67
15
  }
68
- /**
69
- * Try to fetch USDC attestations for transfers, return undefined in position if can't
70
- *
71
- * @param tokenAmounts - all tokenAmounts to try
72
- * @param allLogsInRequest - all other logs in same tx as CCIPSendRequested
73
- * @param networkType - network type (mainnet or testnet)
74
- * @returns array where each position is either the attestation for that transfer or undefined
75
- **/
76
- async function getUsdcTokenData(tokenAmounts, allLogsInRequest, networkType, { logger = console } = {}) {
77
- const attestations = [];
78
- const messageSentPerTokenAndPool = allLogsInRequest.reduce((acc, log, i, arr) => {
79
- // for our MessageSent of interest (USDC-like), the token is the contract
80
- // which emitted a (burn) Transfer immediately before this event, and the pool emitted a Burned
81
- // event 2 events after
82
- const transferLog = arr[i - 1];
83
- const poolLog = arr[i + 2];
84
- if (log.topics[0] !== USDC_EVENT.topicHash ||
85
- transferLog?.topics[0] !== TRANSFER_EVENT.topicHash ||
86
- !poolLog?.topics.length ||
87
- !BURNED_EVENT_TOPIC_HASHES.has(poolLog.topics[0])) {
88
- return acc;
89
- }
90
- const token = transferLog.address;
91
- const pool = poolLog.address;
92
- acc.set(token, [...(acc.get(token) ?? []), log]);
93
- acc.set(pool, [...(acc.get(pool) ?? []), log]);
94
- return acc;
95
- }, new Map());
96
- for (const [i, tokenAmount] of tokenAmounts.entries()) {
97
- const tokenOrPool = 'token' in tokenAmount ? tokenAmount.token : tokenAmount.sourcePoolAddress;
98
- // what if there are more USDC transfers of this same token after this one?
99
- const tokenTransfersCountAfter = tokenAmounts.filter((ta, j) => ('token' in ta ? ta.token : ta.sourcePoolAddress) === tokenOrPool && j > i).length;
100
- let messageSentLog;
101
- const messageSents = messageSentPerTokenAndPool.get(tokenOrPool);
102
- if (messageSents) {
103
- // look from the end (near our request), but skip MessageSents for further transfers
104
- messageSentLog = messageSents[messageSents.length - 1 - tokenTransfersCountAfter];
105
- }
106
- let tokenData;
107
- if (messageSentLog) {
108
- let message;
109
- try {
110
- message = defaultAbiCoder.decode(USDC_EVENT.inputs, messageSentLog.data)[0];
111
- const attestation = await getUsdcAttestation(message, networkType);
112
- tokenData = {
113
- _tag: 'usdc',
114
- message,
115
- attestation,
116
- };
117
- // encoding of OffchainTokenData to be done as part of Chain.executeReceipt
118
- }
119
- catch (err) {
120
- // maybe not a USDC transfer, or not ready
121
- logger.warn(`❌ EVM CCTP: Failed to fetch attestation for message:`, message, err);
122
- }
123
- }
124
- attestations.push(tokenData);
125
- }
126
- return attestations;
127
- }
128
- /**
129
- * Try to fetch LBTC attestations for transfers, return undefined in position if can't or not required
130
- **/
131
- async function getLbtcTokenData(tokenAmounts, allLogsInRequest, networkType, { logger = console } = {}) {
132
- const lbtcDepositHashes = new Set(allLogsInRequest
133
- .filter(({ topics }) => LBTC_EVENTS_HASHES.has(topics[0]))
134
- .map(({ topics }) => topics[3]));
135
- return Promise.all(tokenAmounts.map(async ({ extraData }) => {
136
- // Attestation is required when SourceTokenData.extraData is 32 bytes long ('0x' + 64 hex chars)
137
- // otherwise attestation is not required
138
- if (lbtcDepositHashes.has(extraData)) {
139
- try {
140
- return { _tag: 'lbtc', extraData, ...(await getLbtcAttestation(extraData, networkType)) };
141
- }
142
- catch (err) {
143
- logger.warn(`❌ EVM LBTC: Failed to fetch attestation for message:`, extraData, err);
144
- }
145
- }
146
- }));
147
- }
148
16
  //# sourceMappingURL=offchain.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"offchain.js","sourceRoot":"","sources":["../../src/evm/offchain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"offchain.js","sourceRoot":"","sources":["../../src/evm/offchain.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAuB;IAChE,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,yCAAyC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IACpF,CAAC;SAAM,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,WAAqB,CAAA;IACnC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -1,10 +1,15 @@
1
- import type { TransactionRequest } from 'ethers';
1
+ import { type TransactionRequest } from 'ethers';
2
2
  import type { ChainFamily } from '../types.ts';
3
3
  /**
4
4
  * Type representing a set of unsigned EVM transactions
5
5
  */
6
6
  export type UnsignedEVMTx = {
7
7
  family: typeof ChainFamily.EVM;
8
- transactions: Pick<TransactionRequest, 'from' | 'to' | 'data'>[];
8
+ transactions: Pick<TransactionRequest, 'from' | 'to' | 'data' | 'gasLimit'>[];
9
9
  };
10
+ /**
11
+ * Convert a Result or Promise to an object
12
+ * @internal
13
+ */
14
+ export declare function resultToObject<T>(o: T): T;
10
15
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/evm/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,OAAO,WAAW,CAAC,GAAG,CAAA;IAC9B,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,EAAE,CAAA;CACjE,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/evm/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAU,MAAM,QAAQ,CAAA;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,OAAO,WAAW,CAAC,GAAG,CAAA;IAC9B,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC,EAAE,CAAA;CAC9E,CAAA;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAYzC"}
package/dist/evm/types.js CHANGED
@@ -1,2 +1,23 @@
1
- export {};
1
+ import { Result } from 'ethers';
2
+ /**
3
+ * Convert a Result or Promise to an object
4
+ * @internal
5
+ */
6
+ export function resultToObject(o) {
7
+ if (o instanceof Promise)
8
+ return o.then(resultToObject);
9
+ if (!(o instanceof Result))
10
+ return o;
11
+ if (o.length === 0)
12
+ return o.toArray();
13
+ try {
14
+ const obj = o.toObject();
15
+ if (!Object.keys(obj).every((k) => /^_+\d*$/.test(k)))
16
+ return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, resultToObject(v)]));
17
+ }
18
+ catch (_) {
19
+ // fallthrough
20
+ }
21
+ return o.toArray().map(resultToObject);
22
+ }
2
23
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/evm/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/evm/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,MAAM,EAAE,MAAM,QAAQ,CAAA;AAYxD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAI,CAAI;IACpC,IAAI,CAAC,YAAY,OAAO;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAM,CAAA;IAC5D,IAAI,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC;QAAE,OAAO,CAAC,CAAA;IACpC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,OAAO,EAAO,CAAA;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAM,CAAA;IAC/F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,cAAc;IAChB,CAAC;IACD,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,cAAc,CAAM,CAAA;AAC7C,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { Chain } from './chain.ts';
2
- import { type CCIPCommit, type CCIPExecution, type CCIPMessage, type CCIPRequest, type CCIPVersion, type ExecutionReport, type Lane, type WithLogger } from './types.ts';
2
+ import type { CCIPMessage, CCIPVersion, Lane, WithLogger } from './types.ts';
3
3
  /**
4
4
  * Pure/sync function to calculate/generate OffRamp.executeManually report for messageIds
5
5
  *
@@ -9,29 +9,69 @@ import { type CCIPCommit, type CCIPExecution, type CCIPMessage, type CCIPRequest
9
9
  * @param merkleRoot - Optional merkleRoot of the CommitReport, for validation
10
10
  * @param ctx - Context for logging
11
11
  * @returns ManualExec report arguments
12
+ * @throws CCIPMessageNotInBatchError - When the messageId is not found in the provided batch
13
+ * @throws CCIPMerkleRootMismatchError - When calculated merkle root doesn't match the provided one
14
+ *
15
+ * @remarks
16
+ * This is a pure/sync function that performs no I/O - all data must be pre-fetched.
17
+ * It builds a merkle tree from the messages, generates a proof for the target messageId,
18
+ * and optionally validates against the provided merkleRoot.
19
+ *
20
+ * The returned proof can be used with `execute` to manually execute a stuck message.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * import { calculateManualExecProof, EVMChain } from '@chainlink/ccip-sdk'
25
+ *
26
+ * // Fetch the request and all messages in its batch
27
+ * const request = (await source.getMessagesInTx(txHash))[0]
28
+ * const verifications = await dest.getVerifications({ offRamp, request })
29
+ * const messages = await source.getMessagesInBatch(request, commit.report)
30
+ *
31
+ * // Calculate proof for manual execution
32
+ * const proof = calculateManualExecProof(
33
+ * messages,
34
+ * request.lane,
35
+ * request.message.messageId,
36
+ * commit.report.merkleRoot
37
+ * )
38
+ * console.log('Merkle root:', proof.merkleRoot)
39
+ * console.log('Proofs:', proof.proofs)
40
+ * ```
41
+ * @see {@link discoverOffRamp} - Find the OffRamp for manual execution
42
+ * @see {@link execute} - Execute the report on destination chain
43
+ * @see {@link generateUnsignedExecute} - Build unsigned execution tx
12
44
  **/
13
- export declare function calculateManualExecProof<V extends CCIPVersion = CCIPVersion>(messagesInBatch: readonly CCIPMessage<V>[], lane: Lane<V>, messageId: string, merkleRoot?: string, ctx?: WithLogger): Omit<ExecutionReport, 'offchainTokenData' | 'message'>;
45
+ export declare function calculateManualExecProof<V extends CCIPVersion = CCIPVersion>(messagesInBatch: readonly CCIPMessage<V>[], lane: Lane<V>, messageId: string, merkleRoot?: string, ctx?: WithLogger): {
46
+ proofs: string[];
47
+ proofFlagBits: bigint;
48
+ merkleRoot: string;
49
+ };
50
+ /**
51
+ * Discover the OffRamp address for a given OnRamp and destination chain.
52
+ * Results are memoized for performance.
53
+ *
54
+ * @param source - Source chain instance.
55
+ * @param dest - Destination chain instance.
56
+ * @param onRamp - OnRamp contract address on source chain.
57
+ * @param ctx - Optional context with logger.
58
+ * @returns OffRamp address on destination chain.
59
+ * @throws CCIPOffRampNotFoundError - When no matching OffRamp is found for the OnRamp
60
+ * @example
61
+ * ```typescript
62
+ * import { discoverOffRamp, EVMChain } from '@chainlink/ccip-sdk'
63
+ *
64
+ * const source = await EVMChain.fromUrl('https://rpc.sepolia.org')
65
+ * const dest = await EVMChain.fromUrl('https://rpc.fuji.avax.network')
66
+ *
67
+ * const offRamp = await discoverOffRamp(source, dest, onRampAddress)
68
+ * console.log('OffRamp on destination:', offRamp)
69
+ * ```
70
+ * @see {@link calculateManualExecProof} - Use with OffRamp for manual execution
71
+ * @see {@link execute} - Execute on destination chain
72
+ * @see {@link getExecutionReceipts} - Check execution status
73
+ */
14
74
  export declare const discoverOffRamp: import("micro-memoize").Memoized<(source: Chain, dest: Chain, onRamp: string, { logger }?: WithLogger) => Promise<string>, {
15
75
  transformKey: ([source, dest, onRamp]: [source: Chain<import("./types.ts").ChainFamily>, dest: Chain<import("./types.ts").ChainFamily>, onRamp: string, (WithLogger | undefined)?]) => [bigint, bigint, string];
16
76
  }>;
17
- /**
18
- * Generic implementation for fetching ExecutionReceipts for given requests.
19
- * If more than one request is given, may yield them interleaved.
20
- * Completes as soon as there's no more work to be done.
21
- *
22
- * Two possible behaviors:
23
- * - if `startBlock|startTime` is given, pages forward from that block up;
24
- * completes when success (final) receipt is found for all requests (or reach latest block)
25
- * - otherwise, pages backwards and returns only the most recent receipt per request;
26
- * completes when receipts for all requests were seen
27
- *
28
- * @param dest - Provider to page through.
29
- * @param offRamp - OffRamp contract address.
30
- * @param request - CCIP request to search executions for.
31
- * @param commit - Optional commit info to narrow down search.
32
- * @param hints - Optional hints (e.g., `page` for getLogs pagination range).
33
- */
34
- export declare function getExecutionReceipts(dest: Chain, offRamp: string, request: CCIPRequest, commit?: CCIPCommit, hints?: {
35
- page?: number;
36
- }): AsyncGenerator<CCIPExecution>;
37
77
  //# sourceMappingURL=execution.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,YAAY,CAAA;AAOpD,OAAO,EACL,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,IAAI,EACT,KAAK,UAAU,EAEhB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;IASI;AACJ,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAC1E,eAAe,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,EAC1C,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EACb,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,EACnB,GAAG,CAAC,EAAE,UAAU,GACf,IAAI,CAAC,eAAe,EAAE,mBAAmB,GAAG,SAAS,CAAC,CA2BxD;AAED,eAAO,MAAM,eAAe,4CAEhB,KAAK,QACP,KAAK,UACH,MAAM,eACQ,UAAU,KAC/B,OAAO,CAAC,MAAM,CAAC;;EAoDnB,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAuB,oBAAoB,CACzC,IAAI,EAAE,KAAK,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,EACpB,MAAM,CAAC,EAAE,UAAU,EACnB,KAAK,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACxB,cAAc,CAAC,aAAa,CAAC,CAgB/B"}
1
+ {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAOvC,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyCI;AACJ,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAC1E,eAAe,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,EAC1C,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EACb,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,EACnB,GAAG,CAAC,EAAE,UAAU;;;;EA4BjB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,eAAe,4CAEhB,KAAK,QACP,KAAK,UACH,MAAM,eACQ,UAAU,KAC/B,OAAO,CAAC,MAAM,CAAC;;EAsFnB,CAAA"}
package/dist/execution.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { memoize } from 'micro-memoize';
2
2
  import { CCIPMerkleRootMismatchError, CCIPMessageNotInBatchError, CCIPOffRampNotFoundError, } from "./errors/index.js";
3
3
  import { Tree, getLeafHasher, proofFlagsToBits } from "./hasher/index.js";
4
- import { ExecutionState, } from "./types.js";
5
4
  /**
6
5
  * Pure/sync function to calculate/generate OffRamp.executeManually report for messageIds
7
6
  *
@@ -11,6 +10,38 @@ import { ExecutionState, } from "./types.js";
11
10
  * @param merkleRoot - Optional merkleRoot of the CommitReport, for validation
12
11
  * @param ctx - Context for logging
13
12
  * @returns ManualExec report arguments
13
+ * @throws CCIPMessageNotInBatchError - When the messageId is not found in the provided batch
14
+ * @throws CCIPMerkleRootMismatchError - When calculated merkle root doesn't match the provided one
15
+ *
16
+ * @remarks
17
+ * This is a pure/sync function that performs no I/O - all data must be pre-fetched.
18
+ * It builds a merkle tree from the messages, generates a proof for the target messageId,
19
+ * and optionally validates against the provided merkleRoot.
20
+ *
21
+ * The returned proof can be used with `execute` to manually execute a stuck message.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * import { calculateManualExecProof, EVMChain } from '@chainlink/ccip-sdk'
26
+ *
27
+ * // Fetch the request and all messages in its batch
28
+ * const request = (await source.getMessagesInTx(txHash))[0]
29
+ * const verifications = await dest.getVerifications({ offRamp, request })
30
+ * const messages = await source.getMessagesInBatch(request, commit.report)
31
+ *
32
+ * // Calculate proof for manual execution
33
+ * const proof = calculateManualExecProof(
34
+ * messages,
35
+ * request.lane,
36
+ * request.message.messageId,
37
+ * commit.report.merkleRoot
38
+ * )
39
+ * console.log('Merkle root:', proof.merkleRoot)
40
+ * console.log('Proofs:', proof.proofs)
41
+ * ```
42
+ * @see {@link discoverOffRamp} - Find the OffRamp for manual execution
43
+ * @see {@link execute} - Execute the report on destination chain
44
+ * @see {@link generateUnsignedExecute} - Build unsigned execution tx
14
45
  **/
15
46
  export function calculateManualExecProof(messagesInBatch, lane, messageId, merkleRoot, ctx) {
16
47
  const hasher = getLeafHasher(lane, ctx);
@@ -35,39 +66,80 @@ export function calculateManualExecProof(messagesInBatch, lane, messageId, merkl
35
66
  merkleRoot: tree.root(),
36
67
  };
37
68
  }
69
+ /**
70
+ * Discover the OffRamp address for a given OnRamp and destination chain.
71
+ * Results are memoized for performance.
72
+ *
73
+ * @param source - Source chain instance.
74
+ * @param dest - Destination chain instance.
75
+ * @param onRamp - OnRamp contract address on source chain.
76
+ * @param ctx - Optional context with logger.
77
+ * @returns OffRamp address on destination chain.
78
+ * @throws CCIPOffRampNotFoundError - When no matching OffRamp is found for the OnRamp
79
+ * @example
80
+ * ```typescript
81
+ * import { discoverOffRamp, EVMChain } from '@chainlink/ccip-sdk'
82
+ *
83
+ * const source = await EVMChain.fromUrl('https://rpc.sepolia.org')
84
+ * const dest = await EVMChain.fromUrl('https://rpc.fuji.avax.network')
85
+ *
86
+ * const offRamp = await discoverOffRamp(source, dest, onRampAddress)
87
+ * console.log('OffRamp on destination:', offRamp)
88
+ * ```
89
+ * @see {@link calculateManualExecProof} - Use with OffRamp for manual execution
90
+ * @see {@link execute} - Execute on destination chain
91
+ * @see {@link getExecutionReceipts} - Check execution status
92
+ */
38
93
  export const discoverOffRamp = memoize(async function discoverOffRamp_(source, dest, onRamp, { logger = console } = {}) {
39
94
  const sourceRouter = await source.getRouterForOnRamp(onRamp, dest.network.chainSelector);
40
95
  const sourceOffRamps = await source.getOffRampsForRouter(sourceRouter, dest.network.chainSelector);
41
96
  for (const offRamp of sourceOffRamps) {
42
- let destOnRamp;
97
+ let destOnRamps;
43
98
  try {
44
- destOnRamp = await source.getOnRampForOffRamp(offRamp, dest.network.chainSelector);
99
+ destOnRamps = await source.getOnRampsForOffRamp(offRamp, dest.network.chainSelector);
45
100
  }
46
- catch {
47
- logger.debug('discoverOffRamp: skipping offRamp', offRamp, '(no valid source chain config)');
101
+ catch (err) {
102
+ logger.debug('discoverOffRamp: skipping offRamp', offRamp, '(no valid source chain config)', err);
48
103
  continue;
49
104
  }
50
- const destRouter = await dest.getRouterForOnRamp(destOnRamp, source.network.chainSelector);
51
- const destOffRamps = await dest.getOffRampsForRouter(destRouter, source.network.chainSelector);
52
- for (const offRamp of destOffRamps) {
53
- let offRampsOnRamp;
54
- try {
55
- offRampsOnRamp = await dest.getOnRampForOffRamp(offRamp, source.network.chainSelector);
56
- }
57
- catch {
58
- logger.debug('discoverOffRamp: skipping dest offRamp', offRamp, '(no valid source chain config)');
59
- continue;
60
- }
61
- logger.debug('discoverOffRamp: found, from', {
62
- sourceOnRamp: onRamp,
63
- sourceRouter,
64
- sourceOffRamps,
65
- destOnRamp,
66
- destOffRamps,
67
- offRampsOnRamp,
68
- }, '=', offRamp);
69
- if (offRampsOnRamp === onRamp) {
70
- return offRamp;
105
+ for (const destOnRamp of destOnRamps) {
106
+ const destRouter = await dest.getRouterForOnRamp(destOnRamp, source.network.chainSelector);
107
+ const destOffRamps = await dest.getOffRampsForRouter(destRouter, source.network.chainSelector);
108
+ for (const offRamp of destOffRamps) {
109
+ let offRampsOnRamps;
110
+ try {
111
+ offRampsOnRamps = await dest.getOnRampsForOffRamp(offRamp, source.network.chainSelector);
112
+ }
113
+ catch (err) {
114
+ logger.debug('discoverOffRamp: skipping dest offRamp', offRamp, '(no valid source chain config)', err);
115
+ continue;
116
+ }
117
+ for (const offRampsOnRamp of offRampsOnRamps) {
118
+ logger.debug('discoverOffRamp: found, from', {
119
+ sourceOnRamp: onRamp,
120
+ sourceRouter,
121
+ sourceOffRamps,
122
+ destOnRamp,
123
+ destOffRamps,
124
+ offRampsOnRamp,
125
+ }, '=', offRamp);
126
+ for (const offRamp of destOffRamps) {
127
+ const offRampsOnRamps = await dest.getOnRampsForOffRamp(offRamp, source.network.chainSelector);
128
+ for (const offRampsOnRamp of offRampsOnRamps) {
129
+ logger.debug('discoverOffRamp: found, from', {
130
+ sourceOnRamp: onRamp,
131
+ sourceRouter,
132
+ sourceOffRamps,
133
+ destOnRamp,
134
+ destOffRamps,
135
+ offRampsOnRamps,
136
+ }, '=', offRamp);
137
+ if (offRampsOnRamp === onRamp) {
138
+ return offRamp;
139
+ }
140
+ }
141
+ }
142
+ }
71
143
  }
72
144
  }
73
145
  }
@@ -75,39 +147,4 @@ export const discoverOffRamp = memoize(async function discoverOffRamp_(source, d
75
147
  }, {
76
148
  transformKey: ([source, dest, onRamp]) => [source.network.chainSelector, dest.network.chainSelector, onRamp],
77
149
  });
78
- /**
79
- * Generic implementation for fetching ExecutionReceipts for given requests.
80
- * If more than one request is given, may yield them interleaved.
81
- * Completes as soon as there's no more work to be done.
82
- *
83
- * Two possible behaviors:
84
- * - if `startBlock|startTime` is given, pages forward from that block up;
85
- * completes when success (final) receipt is found for all requests (or reach latest block)
86
- * - otherwise, pages backwards and returns only the most recent receipt per request;
87
- * completes when receipts for all requests were seen
88
- *
89
- * @param dest - Provider to page through.
90
- * @param offRamp - OffRamp contract address.
91
- * @param request - CCIP request to search executions for.
92
- * @param commit - Optional commit info to narrow down search.
93
- * @param hints - Optional hints (e.g., `page` for getLogs pagination range).
94
- */
95
- export async function* getExecutionReceipts(dest, offRamp, request, commit, hints) {
96
- const onlyLast = !commit?.log.blockNumber && !request.tx.timestamp; // backwards
97
- for await (const log of dest.getLogs({
98
- startBlock: commit?.log.blockNumber,
99
- startTime: request.tx.timestamp,
100
- address: offRamp,
101
- topics: ['ExecutionStateChanged'],
102
- ...hints,
103
- })) {
104
- const receipt = dest.constructor.decodeReceipt(log);
105
- if (!receipt || receipt.messageId !== request.message.messageId)
106
- continue;
107
- const timestamp = log.tx?.timestamp ?? (await dest.getBlockTimestamp(log.blockNumber));
108
- yield { receipt, log, timestamp };
109
- if (onlyLast || receipt.state === ExecutionState.Success)
110
- break;
111
- }
112
- }
113
150
  //# sourceMappingURL=execution.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"execution.js","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ export declare const EVMExtraArgsV1Tag: "0x97a657c9";
5
5
  /** Tag identifier for EVMExtraArgsV2 encoding. */
6
6
  export declare const EVMExtraArgsV2Tag: "0x181dcf10";
7
7
  /** Tag identifier for GenericExtraArgsV3 encoding (tightly packed binary format). */
8
- export declare const GenericExtraArgsV3Tag: "0x302326cb";
8
+ export declare const GenericExtraArgsV3Tag: "0xa69dd4aa";
9
9
  /** Tag identifier for SVMExtraArgsV1 encoding. */
10
10
  export declare const SVMExtraArgsV1Tag: "0x1f3b3aba";
11
11
  /** Tag identifier for SuiExtraArgsV1 encoding. */
@@ -129,6 +129,7 @@ export type ExtraArgs = EVMExtraArgsV1 | EVMExtraArgsV2 | GenericExtraArgsV3 | S
129
129
  * Encodes extra arguments for CCIP messages.
130
130
  * The args are *to* a dest network, but are encoded as a message *from* this source chain.
131
131
  * E.g. Solana uses Borsh to encode extraArgs in its produced requests, even those targeting EVM.
132
+ *
132
133
  * @param args - Extra arguments to encode
133
134
  * @param from - Source chain family for encoding format (defaults to EVM)
134
135
  * @returns Encoded extra arguments as hex string
@@ -136,12 +137,16 @@ export type ExtraArgs = EVMExtraArgsV1 | EVMExtraArgsV2 | GenericExtraArgsV3 | S
136
137
  *
137
138
  * @example
138
139
  * ```typescript
140
+ * import { encodeExtraArgs } from '@chainlink/ccip-sdk'
141
+ *
139
142
  * const encoded = encodeExtraArgs({
140
143
  * gasLimit: 200_000n,
141
144
  * allowOutOfOrderExecution: true,
142
145
  * })
143
- * // Returns: '0x181dcf10...'
146
+ * console.log('Encoded:', encoded) // '0x181dcf10...'
144
147
  * ```
148
+ *
149
+ * @see {@link decodeExtraArgs} - Decode extra arguments from bytes
145
150
  */
146
151
  export declare function encodeExtraArgs(args: ExtraArgs, from?: ChainFamily): string;
147
152
  /**
@@ -154,11 +159,16 @@ export declare function encodeExtraArgs(args: ExtraArgs, from?: ChainFamily): st
154
159
  *
155
160
  * @example
156
161
  * ```typescript
162
+ * import { decodeExtraArgs } from '@chainlink/ccip-sdk'
163
+ *
157
164
  * const decoded = decodeExtraArgs('0x181dcf10...')
158
165
  * if (decoded?._tag === 'EVMExtraArgsV2') {
159
- * console.log(decoded.gasLimit, decoded.allowOutOfOrderExecution)
166
+ * console.log('Gas limit:', decoded.gasLimit)
167
+ * console.log('Out of order:', decoded.allowOutOfOrderExecution)
160
168
  * }
161
169
  * ```
170
+ *
171
+ * @see {@link encodeExtraArgs} - Encode extra arguments to bytes
162
172
  */
163
173
  export declare function decodeExtraArgs(data: BytesLike, from?: ChainFamily): (EVMExtraArgsV1 & {
164
174
  _tag: 'EVMExtraArgsV1';
@@ -1 +1 @@
1
- {"version":3,"file":"extra-args.d.ts","sourceRoot":"","sources":["../src/extra-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAM,MAAM,QAAQ,CAAA;AAI3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,kDAAkD;AAClD,eAAO,MAAM,iBAAiB,EAAiD,YAAY,CAAA;AAC3F,kDAAkD;AAClD,eAAO,MAAM,iBAAiB,EAAiD,YAAY,CAAA;AAC3F,qFAAqF;AACrF,eAAO,MAAM,qBAAqB,EAAG,YAAqB,CAAA;AAC1D,kDAAkD;AAClD,eAAO,MAAM,iBAAiB,EAAiD,YAAY,CAAA;AAC3F,kDAAkD;AAClD,eAAO,MAAM,iBAAiB,EAAiD,YAAY,CAAA;AAE3F;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG;IAC5C,uDAAuD;IACvD,wBAAwB,EAAE,OAAO,CAAA;CAClC,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAA;IAChB,8CAA8C;IAC9C,kBAAkB,EAAE,MAAM,CAAA;IAC1B,sDAAsD;IACtD,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,qCAAqC;IACrC,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAA;IAChB,+CAA+C;IAC/C,YAAY,EAAE,SAAS,CAAA;IACvB,sEAAsE;IACtE,aAAa,EAAE,MAAM,CAAA;IACrB,iDAAiD;IACjD,SAAS,EAAE,SAAS,CAAA;CACrB,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAA;IACpB,qDAAqD;IACrD,uBAAuB,EAAE,MAAM,CAAA;IAC/B,uDAAuD;IACvD,wBAAwB,EAAE,OAAO,CAAA;IACjC,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAA;IACrB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG;IAC5C,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAA;IACrB,4CAA4C;IAC5C,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAC5B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,cAAc,GACd,cAAc,GACd,kBAAkB,GAClB,cAAc,GACd,cAAc,CAAA;AAElB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,GAAE,WAA6B,GAAG,MAAM,CAI5F;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,EACf,IAAI,CAAC,EAAE,WAAW,GAEhB,CAAC,cAAc,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,GAC7C,CAAC,cAAc,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,GAC7C,CAAC,kBAAkB,GAAG;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,CAAC,GACrD,CAAC,cAAc,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,GAC7C,CAAC,cAAc,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,GAC7C,SAAS,CAeZ"}
1
+ {"version":3,"file":"extra-args.d.ts","sourceRoot":"","sources":["../src/extra-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAM,MAAM,QAAQ,CAAA;AAI3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,kDAAkD;AAClD,eAAO,MAAM,iBAAiB,EAAiD,YAAY,CAAA;AAC3F,kDAAkD;AAClD,eAAO,MAAM,iBAAiB,EAAiD,YAAY,CAAA;AAC3F,qFAAqF;AACrF,eAAO,MAAM,qBAAqB,EAAqD,YAAY,CAAA;AACnG,kDAAkD;AAClD,eAAO,MAAM,iBAAiB,EAAiD,YAAY,CAAA;AAC3F,kDAAkD;AAClD,eAAO,MAAM,iBAAiB,EAAiD,YAAY,CAAA;AAE3F;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG;IAC5C,uDAAuD;IACvD,wBAAwB,EAAE,OAAO,CAAA;CAClC,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAA;IAChB,8CAA8C;IAC9C,kBAAkB,EAAE,MAAM,CAAA;IAC1B,sDAAsD;IACtD,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,qCAAqC;IACrC,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAA;IAChB,+CAA+C;IAC/C,YAAY,EAAE,SAAS,CAAA;IACvB,sEAAsE;IACtE,aAAa,EAAE,MAAM,CAAA;IACrB,iDAAiD;IACjD,SAAS,EAAE,SAAS,CAAA;CACrB,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAA;IACpB,qDAAqD;IACrD,uBAAuB,EAAE,MAAM,CAAA;IAC/B,uDAAuD;IACvD,wBAAwB,EAAE,OAAO,CAAA;IACjC,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAA;IACrB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG;IAC5C,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAA;IACrB,4CAA4C;IAC5C,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAC5B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,cAAc,GACd,cAAc,GACd,kBAAkB,GAClB,cAAc,GACd,cAAc,CAAA;AAElB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,GAAE,WAA6B,GAAG,MAAM,CAI5F;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,EACf,IAAI,CAAC,EAAE,WAAW,GAEhB,CAAC,cAAc,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,GAC7C,CAAC,cAAc,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,GAC7C,CAAC,kBAAkB,GAAG;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,CAAC,GACrD,CAAC,cAAc,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,GAC7C,CAAC,cAAc,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,GAC7C,SAAS,CAeZ"}