@chainlink/ccip-sdk 0.95.0 → 0.97.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 (217) hide show
  1. package/README.md +2 -2
  2. package/dist/all-chains.d.ts +23 -0
  3. package/dist/all-chains.d.ts.map +1 -0
  4. package/dist/all-chains.js +24 -0
  5. package/dist/all-chains.js.map +1 -0
  6. package/dist/api/index.d.ts +31 -19
  7. package/dist/api/index.d.ts.map +1 -1
  8. package/dist/api/index.js +46 -25
  9. package/dist/api/index.js.map +1 -1
  10. package/dist/api/types.d.ts +24 -30
  11. package/dist/api/types.d.ts.map +1 -1
  12. package/dist/aptos/exec.d.ts +2 -2
  13. package/dist/aptos/exec.d.ts.map +1 -1
  14. package/dist/aptos/exec.js.map +1 -1
  15. package/dist/aptos/hasher.d.ts.map +1 -1
  16. package/dist/aptos/hasher.js +1 -1
  17. package/dist/aptos/hasher.js.map +1 -1
  18. package/dist/aptos/index.d.ts +43 -15
  19. package/dist/aptos/index.d.ts.map +1 -1
  20. package/dist/aptos/index.js +112 -105
  21. package/dist/aptos/index.js.map +1 -1
  22. package/dist/aptos/types.d.ts +2 -19
  23. package/dist/aptos/types.d.ts.map +1 -1
  24. package/dist/aptos/types.js +0 -11
  25. package/dist/aptos/types.js.map +1 -1
  26. package/dist/chain.d.ts +734 -174
  27. package/dist/chain.d.ts.map +1 -1
  28. package/dist/chain.js +216 -31
  29. package/dist/chain.js.map +1 -1
  30. package/dist/commits.d.ts +4 -6
  31. package/dist/commits.d.ts.map +1 -1
  32. package/dist/commits.js +4 -4
  33. package/dist/commits.js.map +1 -1
  34. package/dist/errors/CCIPError.d.ts +33 -4
  35. package/dist/errors/CCIPError.d.ts.map +1 -1
  36. package/dist/errors/CCIPError.js +33 -4
  37. package/dist/errors/CCIPError.js.map +1 -1
  38. package/dist/errors/codes.d.ts +5 -0
  39. package/dist/errors/codes.d.ts.map +1 -1
  40. package/dist/errors/codes.js +5 -1
  41. package/dist/errors/codes.js.map +1 -1
  42. package/dist/errors/index.d.ts +2 -2
  43. package/dist/errors/index.d.ts.map +1 -1
  44. package/dist/errors/index.js +2 -2
  45. package/dist/errors/index.js.map +1 -1
  46. package/dist/errors/recovery.d.ts.map +1 -1
  47. package/dist/errors/recovery.js +6 -1
  48. package/dist/errors/recovery.js.map +1 -1
  49. package/dist/errors/specialized.d.ts +1702 -121
  50. package/dist/errors/specialized.d.ts.map +1 -1
  51. package/dist/errors/specialized.js +1729 -125
  52. package/dist/errors/specialized.js.map +1 -1
  53. package/dist/errors/utils.d.ts.map +1 -1
  54. package/dist/errors/utils.js +0 -1
  55. package/dist/errors/utils.js.map +1 -1
  56. package/dist/evm/abi/OffRamp_2_0.d.ts +764 -0
  57. package/dist/evm/abi/OffRamp_2_0.d.ts.map +1 -0
  58. package/dist/evm/abi/OffRamp_2_0.js +744 -0
  59. package/dist/evm/abi/OffRamp_2_0.js.map +1 -0
  60. package/dist/evm/abi/OnRamp_2_0.d.ts +925 -0
  61. package/dist/evm/abi/OnRamp_2_0.d.ts.map +1 -0
  62. package/dist/evm/abi/OnRamp_2_0.js +992 -0
  63. package/dist/evm/abi/OnRamp_2_0.js.map +1 -0
  64. package/dist/evm/const.d.ts +12 -2
  65. package/dist/evm/const.d.ts.map +1 -1
  66. package/dist/evm/const.js +8 -2
  67. package/dist/evm/const.js.map +1 -1
  68. package/dist/evm/errors.d.ts.map +1 -1
  69. package/dist/evm/errors.js +7 -2
  70. package/dist/evm/errors.js.map +1 -1
  71. package/dist/evm/extra-args.d.ts +25 -0
  72. package/dist/evm/extra-args.d.ts.map +1 -0
  73. package/dist/evm/extra-args.js +309 -0
  74. package/dist/evm/extra-args.js.map +1 -0
  75. package/dist/evm/gas.d.ts.map +1 -1
  76. package/dist/evm/gas.js +7 -12
  77. package/dist/evm/gas.js.map +1 -1
  78. package/dist/evm/hasher.d.ts.map +1 -1
  79. package/dist/evm/hasher.js +23 -13
  80. package/dist/evm/hasher.js.map +1 -1
  81. package/dist/evm/index.d.ts +140 -35
  82. package/dist/evm/index.d.ts.map +1 -1
  83. package/dist/evm/index.js +306 -226
  84. package/dist/evm/index.js.map +1 -1
  85. package/dist/evm/messages.d.ts +59 -5
  86. package/dist/evm/messages.d.ts.map +1 -1
  87. package/dist/evm/messages.js +210 -0
  88. package/dist/evm/messages.js.map +1 -1
  89. package/dist/evm/offchain.js.map +1 -1
  90. package/dist/evm/types.d.ts +7 -2
  91. package/dist/evm/types.d.ts.map +1 -1
  92. package/dist/evm/types.js +22 -1
  93. package/dist/evm/types.js.map +1 -1
  94. package/dist/execution.d.ts +62 -22
  95. package/dist/execution.d.ts.map +1 -1
  96. package/dist/execution.js +102 -51
  97. package/dist/execution.js.map +1 -1
  98. package/dist/extra-args.d.ts +113 -4
  99. package/dist/extra-args.d.ts.map +1 -1
  100. package/dist/extra-args.js +38 -3
  101. package/dist/extra-args.js.map +1 -1
  102. package/dist/gas.d.ts +31 -5
  103. package/dist/gas.d.ts.map +1 -1
  104. package/dist/gas.js +43 -9
  105. package/dist/gas.js.map +1 -1
  106. package/dist/index.d.ts +11 -10
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +8 -8
  109. package/dist/index.js.map +1 -1
  110. package/dist/requests.d.ts +101 -22
  111. package/dist/requests.d.ts.map +1 -1
  112. package/dist/requests.js +115 -24
  113. package/dist/requests.js.map +1 -1
  114. package/dist/selectors.d.ts.map +1 -1
  115. package/dist/selectors.js +24 -0
  116. package/dist/selectors.js.map +1 -1
  117. package/dist/shared/bcs-codecs.d.ts +61 -0
  118. package/dist/shared/bcs-codecs.d.ts.map +1 -0
  119. package/dist/shared/bcs-codecs.js +102 -0
  120. package/dist/shared/bcs-codecs.js.map +1 -0
  121. package/dist/shared/constants.d.ts +3 -0
  122. package/dist/shared/constants.d.ts.map +1 -0
  123. package/dist/shared/constants.js +3 -0
  124. package/dist/shared/constants.js.map +1 -0
  125. package/dist/solana/exec.d.ts +2 -2
  126. package/dist/solana/exec.d.ts.map +1 -1
  127. package/dist/solana/exec.js.map +1 -1
  128. package/dist/solana/index.d.ts +148 -30
  129. package/dist/solana/index.d.ts.map +1 -1
  130. package/dist/solana/index.js +137 -44
  131. package/dist/solana/index.js.map +1 -1
  132. package/dist/sui/hasher.d.ts.map +1 -1
  133. package/dist/sui/hasher.js +1 -1
  134. package/dist/sui/hasher.js.map +1 -1
  135. package/dist/sui/index.d.ts +49 -19
  136. package/dist/sui/index.d.ts.map +1 -1
  137. package/dist/sui/index.js +76 -43
  138. package/dist/sui/index.js.map +1 -1
  139. package/dist/sui/manuallyExec/encoder.d.ts +2 -2
  140. package/dist/sui/manuallyExec/encoder.d.ts.map +1 -1
  141. package/dist/sui/manuallyExec/encoder.js.map +1 -1
  142. package/dist/sui/manuallyExec/index.d.ts +2 -2
  143. package/dist/sui/manuallyExec/index.d.ts.map +1 -1
  144. package/dist/ton/exec.d.ts +2 -2
  145. package/dist/ton/exec.d.ts.map +1 -1
  146. package/dist/ton/exec.js.map +1 -1
  147. package/dist/ton/index.d.ts +66 -27
  148. package/dist/ton/index.d.ts.map +1 -1
  149. package/dist/ton/index.js +172 -47
  150. package/dist/ton/index.js.map +1 -1
  151. package/dist/ton/send.d.ts +52 -0
  152. package/dist/ton/send.d.ts.map +1 -0
  153. package/dist/ton/send.js +166 -0
  154. package/dist/ton/send.js.map +1 -0
  155. package/dist/ton/types.d.ts +2 -2
  156. package/dist/ton/types.d.ts.map +1 -1
  157. package/dist/ton/types.js.map +1 -1
  158. package/dist/types.d.ts +148 -12
  159. package/dist/types.d.ts.map +1 -1
  160. package/dist/types.js +6 -1
  161. package/dist/types.js.map +1 -1
  162. package/dist/utils.d.ts +79 -4
  163. package/dist/utils.d.ts.map +1 -1
  164. package/dist/utils.js +92 -7
  165. package/dist/utils.js.map +1 -1
  166. package/package.json +16 -11
  167. package/src/all-chains.ts +26 -0
  168. package/src/api/index.ts +58 -34
  169. package/src/api/types.ts +24 -31
  170. package/src/aptos/exec.ts +2 -2
  171. package/src/aptos/hasher.ts +1 -1
  172. package/src/aptos/index.ts +127 -129
  173. package/src/aptos/types.ts +2 -15
  174. package/src/chain.ts +837 -191
  175. package/src/commits.ts +9 -9
  176. package/src/errors/CCIPError.ts +33 -4
  177. package/src/errors/codes.ts +5 -1
  178. package/src/errors/index.ts +2 -1
  179. package/src/errors/recovery.ts +9 -1
  180. package/src/errors/specialized.ts +1745 -132
  181. package/src/errors/utils.ts +0 -1
  182. package/src/evm/abi/OffRamp_2_0.ts +743 -0
  183. package/src/evm/abi/OnRamp_2_0.ts +991 -0
  184. package/src/evm/const.ts +10 -3
  185. package/src/evm/errors.ts +6 -2
  186. package/src/evm/extra-args.ts +360 -0
  187. package/src/evm/gas.ts +14 -13
  188. package/src/evm/hasher.ts +30 -18
  189. package/src/evm/index.ts +376 -281
  190. package/src/evm/messages.ts +323 -11
  191. package/src/evm/offchain.ts +2 -2
  192. package/src/evm/types.ts +20 -2
  193. package/src/execution.ts +126 -71
  194. package/src/extra-args.ts +118 -4
  195. package/src/gas.ts +44 -11
  196. package/src/index.ts +14 -11
  197. package/src/requests.ts +128 -24
  198. package/src/selectors.ts +24 -0
  199. package/src/shared/bcs-codecs.ts +132 -0
  200. package/src/shared/constants.ts +2 -0
  201. package/src/solana/exec.ts +4 -4
  202. package/src/solana/index.ts +170 -82
  203. package/src/sui/hasher.ts +1 -1
  204. package/src/sui/index.ts +88 -56
  205. package/src/sui/manuallyExec/encoder.ts +2 -2
  206. package/src/sui/manuallyExec/index.ts +2 -2
  207. package/src/ton/exec.ts +2 -2
  208. package/src/ton/index.ts +220 -58
  209. package/src/ton/send.ts +222 -0
  210. package/src/ton/types.ts +2 -2
  211. package/src/types.ts +173 -30
  212. package/src/utils.ts +91 -7
  213. package/dist/aptos/utils.d.ts +0 -12
  214. package/dist/aptos/utils.d.ts.map +0 -1
  215. package/dist/aptos/utils.js +0 -15
  216. package/dist/aptos/utils.js.map +0 -1
  217. package/src/aptos/utils.ts +0 -24
@@ -0,0 +1,132 @@
1
+ /**
2
+ * BCS (Binary Canonical Serialization) codecs for Move-based chains (Aptos, Sui).
3
+ * These chains share similar BCS encoding and 32-byte address formats.
4
+ */
5
+ import { bcs } from '@mysten/bcs'
6
+ import {
7
+ type BigNumberish,
8
+ type BytesLike,
9
+ concat,
10
+ dataLength,
11
+ dataSlice,
12
+ getBytes,
13
+ hexlify,
14
+ toBeHex,
15
+ zeroPadBytes,
16
+ zeroPadValue,
17
+ } from 'ethers'
18
+
19
+ import { CCIPDataFormatUnsupportedError } from '../errors/index.ts'
20
+ import {
21
+ type EVMExtraArgsV2,
22
+ type SVMExtraArgsV1,
23
+ EVMExtraArgsV2Tag,
24
+ SVMExtraArgsV1Tag,
25
+ } from '../extra-args.ts'
26
+ import { ChainFamily } from '../types.ts'
27
+ import { decodeAddress, getDataBytes } from '../utils.ts'
28
+
29
+ /**
30
+ * BCS codec for decoding EVM extra args on Move chains (Aptos/Sui).
31
+ * Used when receiving cross-chain messages from EVM source chains.
32
+ */
33
+ export const BcsEVMExtraArgsV2Codec = bcs.struct('EVMExtraArgsV2', {
34
+ gasLimit: bcs.u256(),
35
+ allowOutOfOrderExecution: bcs.bool(),
36
+ })
37
+
38
+ /**
39
+ * BCS codec for decoding SVM (Solana) extra args on Move chains (Aptos/Sui).
40
+ * Used when receiving cross-chain messages from Solana source chains.
41
+ */
42
+ export const BcsSVMExtraArgsV1Codec = bcs.struct('SVMExtraArgsV1', {
43
+ computeUnits: bcs.u32(),
44
+ accountIsWritableBitmap: bcs.u64(),
45
+ allowOutOfOrderExecution: bcs.bool(),
46
+ tokenReceiver: bcs.vector(bcs.u8()),
47
+ accounts: bcs.vector(bcs.vector(bcs.u8())),
48
+ })
49
+
50
+ /**
51
+ * Decodes extra arguments from Move-based chain CCIP messages.
52
+ * Works for both Aptos and Sui since they share the same BCS encoding.
53
+ * @param extraArgs - Encoded extra arguments bytes.
54
+ * @returns Decoded extra arguments or undefined if unknown format.
55
+ */
56
+ export function decodeMoveExtraArgs(
57
+ extraArgs: BytesLike,
58
+ ):
59
+ | (EVMExtraArgsV2 & { _tag: 'EVMExtraArgsV2' })
60
+ | (SVMExtraArgsV1 & { _tag: 'SVMExtraArgsV1' })
61
+ | undefined {
62
+ const data = getDataBytes(extraArgs),
63
+ tag = dataSlice(data, 0, 4)
64
+ switch (tag) {
65
+ case EVMExtraArgsV2Tag: {
66
+ const parsed = BcsEVMExtraArgsV2Codec.parse(getBytes(dataSlice(data, 4)))
67
+ // Move serialization of EVMExtraArgsV2: 37 bytes total: 4 tag + 32 LE gasLimit + 1 allowOOOE
68
+ return {
69
+ _tag: 'EVMExtraArgsV2',
70
+ ...parsed,
71
+ gasLimit: BigInt(parsed.gasLimit),
72
+ }
73
+ }
74
+ case SVMExtraArgsV1Tag: {
75
+ const parsed = BcsSVMExtraArgsV1Codec.parse(getBytes(dataSlice(data, 4)))
76
+ // Move serialization of SVMExtraArgsV1: 13 bytes total: 4 tag + 8 LE computeUnits
77
+ return {
78
+ _tag: 'SVMExtraArgsV1',
79
+ ...parsed,
80
+ computeUnits: BigInt(parsed.computeUnits),
81
+ accountIsWritableBitmap: BigInt(parsed.accountIsWritableBitmap),
82
+ tokenReceiver: decodeAddress(new Uint8Array(parsed.tokenReceiver), ChainFamily.Solana),
83
+ accounts: parsed.accounts.map((account) =>
84
+ decodeAddress(new Uint8Array(account), ChainFamily.Solana),
85
+ ),
86
+ }
87
+ }
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Converts bytes to a Move-chain address (32-byte zero-padded).
93
+ * Works for both Aptos and Sui since they share the same address format.
94
+ * @param bytes - Bytes to convert.
95
+ * @returns Address as 0x-prefixed hex string, 32 bytes padded.
96
+ * @throws {@link CCIPDataFormatUnsupportedError} if bytes length exceeds 32
97
+ */
98
+ export function getMoveAddress(bytes: BytesLike | readonly number[]): string {
99
+ let suffix = ''
100
+ if (Array.isArray(bytes)) bytes = new Uint8Array(bytes)
101
+ if (typeof bytes === 'string' && bytes.startsWith('0x')) {
102
+ const idx = bytes.indexOf('::')
103
+ if (idx > 0) {
104
+ suffix = bytes.slice(idx)
105
+ bytes = bytes.slice(0, idx)
106
+ }
107
+ }
108
+ bytes = getDataBytes(bytes)
109
+ if (bytes.length > 32)
110
+ throw new CCIPDataFormatUnsupportedError(`Move address exceeds 32 bytes: ${hexlify(bytes)}`)
111
+ return zeroPadValue(bytes, 32) + suffix
112
+ }
113
+
114
+ /**
115
+ * Encodes a numeric value as a 32-byte hex string.
116
+ * Used for BCS encoding on Move chains (Aptos/Sui).
117
+ * @param value - Numeric value to encode.
118
+ * @returns 32-byte hex string representation of the value.
119
+ */
120
+ export const encodeNumber = (value: BigNumberish): string => toBeHex(value, 32)
121
+
122
+ /**
123
+ * Encodes dynamic bytes with length prefix for BCS serialization.
124
+ * Used for BCS encoding on Move chains (Aptos/Sui).
125
+ * @param value - Bytes to encode.
126
+ * @returns Encoded bytes with 32-byte aligned padding.
127
+ */
128
+ export const encodeRawBytes = (value: BytesLike): string =>
129
+ concat([
130
+ encodeNumber(dataLength(value)),
131
+ zeroPadBytes(value, Math.ceil(dataLength(value) / 32) * 32),
132
+ ])
@@ -0,0 +1,2 @@
1
+ /** Default gas limit for cross-chain message execution (200,000 units). */
2
+ export const DEFAULT_GAS_LIMIT = 200_000n
@@ -14,7 +14,7 @@ import BN from 'bn.js'
14
14
  import { hexlify } from 'ethers'
15
15
 
16
16
  import { CCIPSolanaLookupTableNotFoundError } from '../errors/index.ts'
17
- import { type ExecutionReport, type WithLogger, ChainFamily } from '../types.ts'
17
+ import { type ExecutionInput, type WithLogger, ChainFamily } from '../types.ts'
18
18
  import { IDL as CCIP_OFFRAMP_IDL } from './idl/1.6.0/CCIP_OFFRAMP.ts'
19
19
  import { encodeSolanaOffchainTokenData } from './offchain.ts'
20
20
  import type { CCIPMessage_V1_6_Solana, UnsignedSolanaTx } from './types.ts'
@@ -43,7 +43,7 @@ export async function generateUnsignedExecuteReport(
43
43
  ctx: { connection: Connection } & WithLogger,
44
44
  payer: PublicKey,
45
45
  offramp: PublicKey,
46
- execReport: ExecutionReport<CCIPMessage_V1_6_Solana>,
46
+ execReport: ExecutionInput<CCIPMessage_V1_6_Solana>,
47
47
  opts?: { forceLookupTable?: boolean; forceBuffer?: boolean; clearLeftoverAccounts?: boolean },
48
48
  ): Promise<UnsignedSolanaTx> {
49
49
  const { connection, logger = console } = ctx
@@ -274,7 +274,7 @@ async function getManuallyExecuteInputs({
274
274
  }: {
275
275
  payer: PublicKey
276
276
  offramp: Program<typeof CCIP_OFFRAMP_IDL>
277
- execReport: ExecutionReport<CCIPMessage_V1_6_Solana>
277
+ execReport: ExecutionInput<CCIPMessage_V1_6_Solana>
278
278
  bufferId?: Buffer
279
279
  } & WithLogger) {
280
280
  const executionReport = prepareExecutionReport(execReport)
@@ -346,7 +346,7 @@ function prepareExecutionReport({
346
346
  message,
347
347
  offchainTokenData,
348
348
  proofs,
349
- }: ExecutionReport<CCIPMessage_V1_6_Solana>): IdlTypes<
349
+ }: ExecutionInput<CCIPMessage_V1_6_Solana>): IdlTypes<
350
350
  typeof CCIP_OFFRAMP_IDL
351
351
  >['ExecutionReportSingleChain'] {
352
352
  return {