@chainlink/ccip-sdk 0.91.1 → 0.92.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 (273) hide show
  1. package/README.md +127 -80
  2. package/dist/aptos/hasher.d.ts.map +1 -1
  3. package/dist/aptos/hasher.js +7 -6
  4. package/dist/aptos/hasher.js.map +1 -1
  5. package/dist/aptos/index.d.ts +7 -2
  6. package/dist/aptos/index.d.ts.map +1 -1
  7. package/dist/aptos/index.js +29 -20
  8. package/dist/aptos/index.js.map +1 -1
  9. package/dist/aptos/logs.d.ts +5 -3
  10. package/dist/aptos/logs.d.ts.map +1 -1
  11. package/dist/aptos/logs.js +64 -27
  12. package/dist/aptos/logs.js.map +1 -1
  13. package/dist/aptos/token.d.ts.map +1 -1
  14. package/dist/aptos/token.js +2 -1
  15. package/dist/aptos/token.js.map +1 -1
  16. package/dist/aptos/types.js +6 -6
  17. package/dist/aptos/types.js.map +1 -1
  18. package/dist/chain.d.ts +36 -11
  19. package/dist/chain.d.ts.map +1 -1
  20. package/dist/chain.js +34 -2
  21. package/dist/chain.js.map +1 -1
  22. package/dist/commits.d.ts +2 -3
  23. package/dist/commits.d.ts.map +1 -1
  24. package/dist/commits.js +19 -8
  25. package/dist/commits.js.map +1 -1
  26. package/dist/errors/CCIPError.d.ts +48 -0
  27. package/dist/errors/CCIPError.d.ts.map +1 -0
  28. package/dist/errors/CCIPError.js +65 -0
  29. package/dist/errors/CCIPError.js.map +1 -0
  30. package/dist/errors/codes.d.ts +120 -0
  31. package/dist/errors/codes.d.ts.map +1 -0
  32. package/dist/errors/codes.js +156 -0
  33. package/dist/errors/codes.js.map +1 -0
  34. package/dist/errors/index.d.ts +26 -0
  35. package/dist/errors/index.d.ts.map +1 -0
  36. package/dist/errors/index.js +51 -0
  37. package/dist/errors/index.js.map +1 -0
  38. package/dist/errors/recovery.d.ts +6 -0
  39. package/dist/errors/recovery.d.ts.map +1 -0
  40. package/dist/errors/recovery.js +118 -0
  41. package/dist/errors/recovery.js.map +1 -0
  42. package/dist/errors/specialized.d.ts +637 -0
  43. package/dist/errors/specialized.d.ts.map +1 -0
  44. package/dist/errors/specialized.js +1298 -0
  45. package/dist/errors/specialized.js.map +1 -0
  46. package/dist/errors/utils.d.ts +11 -0
  47. package/dist/errors/utils.d.ts.map +1 -0
  48. package/dist/errors/utils.js +61 -0
  49. package/dist/errors/utils.js.map +1 -0
  50. package/dist/evm/abi/CommitStore_1_5.js +1 -1
  51. package/dist/evm/abi/LockReleaseTokenPool_1_5.js +1 -1
  52. package/dist/evm/abi/OffRamp_1_5.js +1 -1
  53. package/dist/evm/abi/OnRamp_1_5.js +1 -1
  54. package/dist/evm/abi/PriceRegistry_1_2.d.ts +443 -0
  55. package/dist/evm/abi/PriceRegistry_1_2.d.ts.map +1 -0
  56. package/dist/evm/abi/PriceRegistry_1_2.js +439 -0
  57. package/dist/evm/abi/PriceRegistry_1_2.js.map +1 -0
  58. package/dist/evm/const.d.ts +1 -0
  59. package/dist/evm/const.d.ts.map +1 -1
  60. package/dist/evm/const.js +2 -0
  61. package/dist/evm/const.js.map +1 -1
  62. package/dist/evm/hasher.d.ts.map +1 -1
  63. package/dist/evm/hasher.js +7 -6
  64. package/dist/evm/hasher.js.map +1 -1
  65. package/dist/evm/index.d.ts +9 -13
  66. package/dist/evm/index.d.ts.map +1 -1
  67. package/dist/evm/index.js +85 -68
  68. package/dist/evm/index.js.map +1 -1
  69. package/dist/evm/logs.d.ts.map +1 -1
  70. package/dist/evm/logs.js +47 -16
  71. package/dist/evm/logs.js.map +1 -1
  72. package/dist/evm/messages.d.ts +7 -6
  73. package/dist/evm/messages.d.ts.map +1 -1
  74. package/dist/evm/offchain.js +1 -1
  75. package/dist/evm/offchain.js.map +1 -1
  76. package/dist/evm/types.d.ts +10 -0
  77. package/dist/evm/types.d.ts.map +1 -0
  78. package/dist/evm/types.js +2 -0
  79. package/dist/evm/types.js.map +1 -0
  80. package/dist/execution.d.ts.map +1 -1
  81. package/dist/execution.js +9 -5
  82. package/dist/execution.js.map +1 -1
  83. package/dist/extra-args.d.ts.map +1 -1
  84. package/dist/extra-args.js +4 -3
  85. package/dist/extra-args.js.map +1 -1
  86. package/dist/gas.d.ts.map +1 -1
  87. package/dist/gas.js +3 -2
  88. package/dist/gas.js.map +1 -1
  89. package/dist/hasher/hasher.d.ts.map +1 -1
  90. package/dist/hasher/hasher.js +2 -1
  91. package/dist/hasher/hasher.js.map +1 -1
  92. package/dist/hasher/merklemulti.d.ts.map +1 -1
  93. package/dist/hasher/merklemulti.js +9 -8
  94. package/dist/hasher/merklemulti.js.map +1 -1
  95. package/dist/index.d.ts +5 -2
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +6 -2
  98. package/dist/index.js.map +1 -1
  99. package/dist/offchain.d.ts.map +1 -1
  100. package/dist/offchain.js +5 -8
  101. package/dist/offchain.js.map +1 -1
  102. package/dist/requests.d.ts +1 -1
  103. package/dist/requests.d.ts.map +1 -1
  104. package/dist/requests.js +37 -43
  105. package/dist/requests.js.map +1 -1
  106. package/dist/selectors.d.ts.map +1 -1
  107. package/dist/selectors.js +22 -0
  108. package/dist/selectors.js.map +1 -1
  109. package/dist/solana/cleanup.d.ts +2 -2
  110. package/dist/solana/cleanup.d.ts.map +1 -1
  111. package/dist/solana/cleanup.js +2 -3
  112. package/dist/solana/cleanup.js.map +1 -1
  113. package/dist/solana/exec.d.ts.map +1 -1
  114. package/dist/solana/exec.js +12 -12
  115. package/dist/solana/exec.js.map +1 -1
  116. package/dist/solana/hasher.d.ts.map +1 -1
  117. package/dist/solana/hasher.js +6 -5
  118. package/dist/solana/hasher.js.map +1 -1
  119. package/dist/solana/index.d.ts +30 -13
  120. package/dist/solana/index.d.ts.map +1 -1
  121. package/dist/solana/index.js +96 -143
  122. package/dist/solana/index.js.map +1 -1
  123. package/dist/solana/logs.d.ts +15 -0
  124. package/dist/solana/logs.d.ts.map +1 -0
  125. package/dist/solana/logs.js +106 -0
  126. package/dist/solana/logs.js.map +1 -0
  127. package/dist/solana/offchain.d.ts.map +1 -1
  128. package/dist/solana/offchain.js +6 -5
  129. package/dist/solana/offchain.js.map +1 -1
  130. package/dist/solana/patchBorsh.d.ts.map +1 -1
  131. package/dist/solana/patchBorsh.js +3 -2
  132. package/dist/solana/patchBorsh.js.map +1 -1
  133. package/dist/solana/send.d.ts.map +1 -1
  134. package/dist/solana/send.js +8 -7
  135. package/dist/solana/send.js.map +1 -1
  136. package/dist/solana/utils.d.ts +7 -8
  137. package/dist/solana/utils.d.ts.map +1 -1
  138. package/dist/solana/utils.js +23 -11
  139. package/dist/solana/utils.js.map +1 -1
  140. package/dist/sui/discovery.d.ts +18 -0
  141. package/dist/sui/discovery.d.ts.map +1 -0
  142. package/dist/sui/discovery.js +116 -0
  143. package/dist/sui/discovery.js.map +1 -0
  144. package/dist/sui/events.d.ts +36 -0
  145. package/dist/sui/events.d.ts.map +1 -0
  146. package/dist/sui/events.js +179 -0
  147. package/dist/sui/events.js.map +1 -0
  148. package/dist/sui/hasher.d.ts.map +1 -1
  149. package/dist/sui/hasher.js +6 -5
  150. package/dist/sui/hasher.js.map +1 -1
  151. package/dist/sui/index.d.ts +69 -41
  152. package/dist/sui/index.d.ts.map +1 -1
  153. package/dist/sui/index.js +402 -65
  154. package/dist/sui/index.js.map +1 -1
  155. package/dist/sui/manuallyExec/encoder.d.ts +8 -0
  156. package/dist/sui/manuallyExec/encoder.d.ts.map +1 -0
  157. package/dist/sui/manuallyExec/encoder.js +76 -0
  158. package/dist/sui/manuallyExec/encoder.js.map +1 -0
  159. package/dist/sui/manuallyExec/index.d.ts +37 -0
  160. package/dist/sui/manuallyExec/index.d.ts.map +1 -0
  161. package/dist/sui/manuallyExec/index.js +81 -0
  162. package/dist/sui/manuallyExec/index.js.map +1 -0
  163. package/dist/sui/objects.d.ts +46 -0
  164. package/dist/sui/objects.d.ts.map +1 -0
  165. package/dist/sui/objects.js +259 -0
  166. package/dist/sui/objects.js.map +1 -0
  167. package/dist/ton/bindings/offramp.d.ts +48 -0
  168. package/dist/ton/bindings/offramp.d.ts.map +1 -0
  169. package/dist/ton/bindings/offramp.js +63 -0
  170. package/dist/ton/bindings/offramp.js.map +1 -0
  171. package/dist/ton/bindings/onramp.d.ts +40 -0
  172. package/dist/ton/bindings/onramp.d.ts.map +1 -0
  173. package/dist/ton/bindings/onramp.js +51 -0
  174. package/dist/ton/bindings/onramp.js.map +1 -0
  175. package/dist/ton/bindings/router.d.ts +47 -0
  176. package/dist/ton/bindings/router.d.ts.map +1 -0
  177. package/dist/ton/bindings/router.js +51 -0
  178. package/dist/ton/bindings/router.js.map +1 -0
  179. package/dist/ton/exec.d.ts +18 -0
  180. package/dist/ton/exec.d.ts.map +1 -0
  181. package/dist/ton/exec.js +28 -0
  182. package/dist/ton/exec.js.map +1 -0
  183. package/dist/ton/hasher.d.ts +27 -0
  184. package/dist/ton/hasher.d.ts.map +1 -0
  185. package/dist/ton/hasher.js +134 -0
  186. package/dist/ton/hasher.js.map +1 -0
  187. package/dist/ton/index.d.ts +247 -0
  188. package/dist/ton/index.d.ts.map +1 -0
  189. package/dist/ton/index.js +781 -0
  190. package/dist/ton/index.js.map +1 -0
  191. package/dist/ton/logs.d.ts +26 -0
  192. package/dist/ton/logs.d.ts.map +1 -0
  193. package/dist/ton/logs.js +126 -0
  194. package/dist/ton/logs.js.map +1 -0
  195. package/dist/ton/types.d.ts +37 -0
  196. package/dist/ton/types.d.ts.map +1 -0
  197. package/dist/ton/types.js +92 -0
  198. package/dist/ton/types.js.map +1 -0
  199. package/dist/ton/utils.d.ts +67 -0
  200. package/dist/ton/utils.d.ts.map +1 -0
  201. package/dist/ton/utils.js +425 -0
  202. package/dist/ton/utils.js.map +1 -0
  203. package/dist/types.d.ts +4 -2
  204. package/dist/types.d.ts.map +1 -1
  205. package/dist/types.js +1 -0
  206. package/dist/types.js.map +1 -1
  207. package/dist/utils.d.ts +10 -0
  208. package/dist/utils.d.ts.map +1 -1
  209. package/dist/utils.js +52 -17
  210. package/dist/utils.js.map +1 -1
  211. package/package.json +12 -10
  212. package/src/aptos/hasher.ts +10 -6
  213. package/src/aptos/index.ts +50 -31
  214. package/src/aptos/logs.ts +85 -29
  215. package/src/aptos/token.ts +5 -1
  216. package/src/aptos/types.ts +6 -6
  217. package/src/chain.ts +83 -12
  218. package/src/commits.ts +23 -11
  219. package/src/errors/CCIPError.ts +86 -0
  220. package/src/errors/codes.ts +179 -0
  221. package/src/errors/index.ts +175 -0
  222. package/src/errors/recovery.ts +170 -0
  223. package/src/errors/specialized.ts +1655 -0
  224. package/src/errors/utils.ts +73 -0
  225. package/src/evm/abi/CommitStore_1_5.ts +1 -1
  226. package/src/evm/abi/LockReleaseTokenPool_1_5.ts +1 -1
  227. package/src/evm/abi/OffRamp_1_5.ts +1 -1
  228. package/src/evm/abi/OnRamp_1_5.ts +1 -1
  229. package/src/evm/abi/PriceRegistry_1_2.ts +438 -0
  230. package/src/evm/const.ts +2 -0
  231. package/src/evm/hasher.ts +7 -6
  232. package/src/evm/index.ts +104 -86
  233. package/src/evm/logs.ts +64 -16
  234. package/src/evm/messages.ts +14 -14
  235. package/src/evm/offchain.ts +1 -1
  236. package/src/evm/types.ts +11 -0
  237. package/src/execution.ts +13 -9
  238. package/src/extra-args.ts +4 -3
  239. package/src/gas.ts +10 -3
  240. package/src/hasher/hasher.ts +2 -1
  241. package/src/hasher/merklemulti.ts +18 -8
  242. package/src/index.ts +14 -2
  243. package/src/offchain.ts +10 -14
  244. package/src/requests.ts +51 -53
  245. package/src/selectors.ts +23 -0
  246. package/src/solana/cleanup.ts +2 -4
  247. package/src/solana/exec.ts +13 -13
  248. package/src/solana/hasher.ts +9 -5
  249. package/src/solana/index.ts +126 -200
  250. package/src/solana/logs.ts +155 -0
  251. package/src/solana/offchain.ts +10 -7
  252. package/src/solana/patchBorsh.ts +3 -2
  253. package/src/solana/send.ts +14 -7
  254. package/src/solana/utils.ts +31 -17
  255. package/src/sui/discovery.ts +163 -0
  256. package/src/sui/events.ts +328 -0
  257. package/src/sui/hasher.ts +6 -5
  258. package/src/sui/index.ts +528 -80
  259. package/src/sui/manuallyExec/encoder.ts +88 -0
  260. package/src/sui/manuallyExec/index.ts +137 -0
  261. package/src/sui/objects.ts +358 -0
  262. package/src/ton/bindings/offramp.ts +96 -0
  263. package/src/ton/bindings/onramp.ts +72 -0
  264. package/src/ton/bindings/router.ts +65 -0
  265. package/src/ton/exec.ts +44 -0
  266. package/src/ton/hasher.ts +184 -0
  267. package/src/ton/index.ts +989 -0
  268. package/src/ton/logs.ts +157 -0
  269. package/src/ton/types.ts +143 -0
  270. package/src/ton/utils.ts +514 -0
  271. package/src/types.ts +6 -2
  272. package/src/utils.ts +58 -23
  273. package/tsconfig.json +2 -1
@@ -0,0 +1,63 @@
1
+ /**
2
+ * TON OffRamp contract binding.
3
+ * The OffRamp receives and executes cross-chain messages on the destination (TON) chain.
4
+ */
5
+ export class OffRamp {
6
+ address;
7
+ /**
8
+ * Creates a new OffRamp instance.
9
+ * @param address - The OffRamp contract address on TON.
10
+ */
11
+ constructor(address) {
12
+ this.address = address;
13
+ }
14
+ /**
15
+ * Creates an OffRamp instance from a contract address.
16
+ * @param address - The OffRamp contract address on TON.
17
+ * @returns A new OffRamp instance.
18
+ */
19
+ static createFromAddress(address) {
20
+ return new OffRamp(address);
21
+ }
22
+ /**
23
+ * Retrieves the source chain configuration for a given chain selector.
24
+ *
25
+ * @param provider - TON contract provider for making RPC calls.
26
+ * @param sourceChainSelector - The CCIP chain selector of the source chain.
27
+ * @returns The source chain configuration.
28
+ * @throws Error with exitCode 266 if the source chain is not enabled.
29
+ */
30
+ async getSourceChainConfig(provider, sourceChainSelector) {
31
+ const result = await provider.get('sourceChainConfig', [
32
+ { type: 'int', value: sourceChainSelector },
33
+ ]);
34
+ // Tolk returns struct as tuple
35
+ const router = result.stack.readAddress();
36
+ const isEnabled = result.stack.readBoolean();
37
+ const minSeqNr = result.stack.readBigNumber();
38
+ const isRMNVerificationDisabled = result.stack.readBoolean();
39
+ // onRamp is stored as CrossChainAddress cell
40
+ const onRampCell = result.stack.readCell();
41
+ const onRampSlice = onRampCell.beginParse();
42
+ // Check if length-prefixed or raw format based on cell bit length
43
+ const cellBits = onRampCell.bits.length;
44
+ let onRamp;
45
+ if (cellBits === 160) {
46
+ // Raw 20-byte EVM address (no length prefix)
47
+ onRamp = onRampSlice.loadBuffer(20);
48
+ }
49
+ else {
50
+ // Length-prefixed format: 8-bit length + data
51
+ const onRampLength = onRampSlice.loadUint(8);
52
+ onRamp = onRampSlice.loadBuffer(onRampLength);
53
+ }
54
+ return {
55
+ router,
56
+ isEnabled,
57
+ minSeqNr,
58
+ isRMNVerificationDisabled,
59
+ onRamp,
60
+ };
61
+ }
62
+ }
63
+ //# sourceMappingURL=offramp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offramp.js","sourceRoot":"","sources":["../../../src/ton/bindings/offramp.ts"],"names":[],"mappings":"AAwBA;;;GAGG;AACH,MAAM,OAAO,OAAO;IACT,OAAO,CAAS;IAEzB;;;OAGG;IACH,YAAY,OAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAgB;QACvC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,oBAAoB,CACxB,QAA0B,EAC1B,mBAA2B;QAE3B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,mBAAmB,EAAE;YACrD,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE;SAC5C,CAAC,CAAA;QAEF,+BAA+B;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;QACzC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;QAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAA;QAC7C,MAAM,yBAAyB,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;QAE5D,6CAA6C;QAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAA;QAC1C,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,EAAE,CAAA;QAE3C,kEAAkE;QAClE,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAA;QACvC,IAAI,MAAc,CAAA;QAElB,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;YACrB,6CAA6C;YAC7C,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QACrC,CAAC;aAAM,CAAC;YACN,8CAA8C;YAC9C,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAC5C,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;QAC/C,CAAC;QAED,OAAO;YACL,MAAM;YACN,SAAS;YACT,QAAQ;YACR,yBAAyB;YACzB,MAAM;SACP,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,40 @@
1
+ import { type Address, type ContractProvider, Dictionary } from '@ton/core';
2
+ /**
3
+ * Configuration for a destination chain on the TON OnRamp contract.
4
+ * Contains routing and access control settings for messages going to a specific destination chain.
5
+ */
6
+ export interface DestChainConfig {
7
+ router: Address;
8
+ sequenceNumber: bigint;
9
+ allowlistEnabled: boolean;
10
+ allowedSenders: Dictionary<Address, boolean>;
11
+ }
12
+ /**
13
+ * TON OnRamp contract binding.
14
+ * The OnRamp sends cross-chain messages from the source (TON) chain to destination chains.
15
+ * It validates messages, assigns sequence numbers, and emits events for the CCIP network.
16
+ */
17
+ export declare class OnRamp {
18
+ readonly address: Address;
19
+ /**
20
+ * Creates a new OnRamp instance.
21
+ * @param address - The OnRamp contract address on TON.
22
+ */
23
+ constructor(address: Address);
24
+ /**
25
+ * Creates an OnRamp instance from a contract address.
26
+ * @param address - The OnRamp contract address on TON.
27
+ * @returns A new OnRamp instance.
28
+ */
29
+ static createFromAddress(address: Address): OnRamp;
30
+ /**
31
+ * Retrieves the destination chain configuration for a given chain selector.
32
+ * This includes the router, current sequence number, and allowlist settings.
33
+ *
34
+ * @param provider - TON contract provider for making RPC calls.
35
+ * @param destChainSelector - The CCIP chain selector of the destination chain.
36
+ * @returns The destination chain configuration.
37
+ */
38
+ getDestChainConfig(provider: ContractProvider, destChainSelector: bigint): Promise<DestChainConfig>;
39
+ }
40
+ //# sourceMappingURL=onramp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onramp.d.ts","sourceRoot":"","sources":["../../../src/ton/bindings/onramp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,gBAAgB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAE3E;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,OAAO,CAAA;IACzB,cAAc,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;CAC7C;AAED;;;;GAIG;AACH,qBAAa,MAAM;IACjB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IAEzB;;;OAGG;gBACS,OAAO,EAAE,OAAO;IAI5B;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAIlD;;;;;;;OAOG;IACG,kBAAkB,CACtB,QAAQ,EAAE,gBAAgB,EAC1B,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,eAAe,CAAC;CAqB5B"}
@@ -0,0 +1,51 @@
1
+ // TODO: FIXME: Remove local copies and import when chainlink-ton is published as npm package
2
+ import { Dictionary } from '@ton/core';
3
+ /**
4
+ * TON OnRamp contract binding.
5
+ * The OnRamp sends cross-chain messages from the source (TON) chain to destination chains.
6
+ * It validates messages, assigns sequence numbers, and emits events for the CCIP network.
7
+ */
8
+ export class OnRamp {
9
+ address;
10
+ /**
11
+ * Creates a new OnRamp instance.
12
+ * @param address - The OnRamp contract address on TON.
13
+ */
14
+ constructor(address) {
15
+ this.address = address;
16
+ }
17
+ /**
18
+ * Creates an OnRamp instance from a contract address.
19
+ * @param address - The OnRamp contract address on TON.
20
+ * @returns A new OnRamp instance.
21
+ */
22
+ static createFromAddress(address) {
23
+ return new OnRamp(address);
24
+ }
25
+ /**
26
+ * Retrieves the destination chain configuration for a given chain selector.
27
+ * This includes the router, current sequence number, and allowlist settings.
28
+ *
29
+ * @param provider - TON contract provider for making RPC calls.
30
+ * @param destChainSelector - The CCIP chain selector of the destination chain.
31
+ * @returns The destination chain configuration.
32
+ */
33
+ async getDestChainConfig(provider, destChainSelector) {
34
+ const { stack } = await provider.get('destChainConfig', [
35
+ { type: 'int', value: destChainSelector },
36
+ ]);
37
+ const router = stack.readAddress();
38
+ const sequenceNumber = stack.readBigNumber();
39
+ const allowlistEnabled = stack.readBoolean();
40
+ const allowedSendersCell = stack.readCellOpt();
41
+ return {
42
+ router,
43
+ sequenceNumber,
44
+ allowlistEnabled,
45
+ allowedSenders: allowedSendersCell
46
+ ? Dictionary.loadDirect(Dictionary.Keys.Address(), Dictionary.Values.Bool(), allowedSendersCell)
47
+ : Dictionary.empty(),
48
+ };
49
+ }
50
+ }
51
+ //# sourceMappingURL=onramp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onramp.js","sourceRoot":"","sources":["../../../src/ton/bindings/onramp.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,OAAO,EAAuC,UAAU,EAAE,MAAM,WAAW,CAAA;AAa3E;;;;GAIG;AACH,MAAM,OAAO,MAAM;IACR,OAAO,CAAS;IAEzB;;;OAGG;IACH,YAAY,OAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAgB;QACvC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,kBAAkB,CACtB,QAA0B,EAC1B,iBAAyB;QAEzB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAAE;YACtD,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE;SAC1C,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAClC,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,EAAE,CAAA;QAC5C,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAC5C,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAC9C,OAAO;YACL,MAAM;YACN,cAAc;YACd,gBAAgB;YAChB,cAAc,EAAE,kBAAkB;gBAChC,CAAC,CAAC,UAAU,CAAC,UAAU,CACnB,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EACzB,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,EACxB,kBAAkB,CACnB;gBACH,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE;SACvB,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,47 @@
1
+ import type { Address, ContractProvider } from '@ton/core';
2
+ /**
3
+ * Represents a ramp (OnRamp or OffRamp) configuration in the Router.
4
+ */
5
+ export interface Ramp {
6
+ chainSelector: bigint;
7
+ address: Address;
8
+ }
9
+ /**
10
+ * TON Router contract binding.
11
+ * The Router is the main entry point for CCIP on TON. It routes messages to the appropriate
12
+ * OnRamp (for sending) or OffRamp (for receiving) based on the chain selector.
13
+ */
14
+ export declare class Router {
15
+ readonly address: Address;
16
+ /**
17
+ * Creates a new Router instance.
18
+ * @param address - The Router contract address on TON.
19
+ */
20
+ constructor(address: Address);
21
+ /**
22
+ * Creates a Router instance from a contract address.
23
+ * @param address - The Router contract address on TON.
24
+ * @returns A new Router instance.
25
+ */
26
+ static createFromAddress(address: Address): Router;
27
+ /**
28
+ * Gets the OffRamp address for a given source chain selector.
29
+ * The OffRamp handles incoming messages from the specified source chain.
30
+ *
31
+ * @param provider - TON contract provider for making RPC calls.
32
+ * @param chainSelector - The CCIP chain selector of the source chain.
33
+ * @returns The OffRamp contract address.
34
+ * @throws Error with exitCode 261 if the source chain is not enabled.
35
+ */
36
+ getOffRamp(provider: ContractProvider, chainSelector: bigint): Promise<Address>;
37
+ /**
38
+ * Gets the OnRamp address for a given destination chain selector.
39
+ * The OnRamp handles outgoing messages to the specified destination chain.
40
+ *
41
+ * @param provider - TON contract provider for making RPC calls.
42
+ * @param destChainSelector - The CCIP chain selector of the destination chain.
43
+ * @returns The OnRamp contract address.
44
+ */
45
+ getOnRamp(provider: ContractProvider, destChainSelector: bigint): Promise<Address>;
46
+ }
47
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/ton/bindings/router.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAE1D;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;;;GAIG;AACH,qBAAa,MAAM;IACjB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IAEzB;;;OAGG;gBACS,OAAO,EAAE,OAAO;IAI5B;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAIlD;;;;;;;;OAQG;IACG,UAAU,CAAC,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMrF;;;;;;;OAOG;IACG,SAAS,CAAC,QAAQ,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAKzF"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * TON Router contract binding.
3
+ * The Router is the main entry point for CCIP on TON. It routes messages to the appropriate
4
+ * OnRamp (for sending) or OffRamp (for receiving) based on the chain selector.
5
+ */
6
+ export class Router {
7
+ address;
8
+ /**
9
+ * Creates a new Router instance.
10
+ * @param address - The Router contract address on TON.
11
+ */
12
+ constructor(address) {
13
+ this.address = address;
14
+ }
15
+ /**
16
+ * Creates a Router instance from a contract address.
17
+ * @param address - The Router contract address on TON.
18
+ * @returns A new Router instance.
19
+ */
20
+ static createFromAddress(address) {
21
+ return new Router(address);
22
+ }
23
+ /**
24
+ * Gets the OffRamp address for a given source chain selector.
25
+ * The OffRamp handles incoming messages from the specified source chain.
26
+ *
27
+ * @param provider - TON contract provider for making RPC calls.
28
+ * @param chainSelector - The CCIP chain selector of the source chain.
29
+ * @returns The OffRamp contract address.
30
+ * @throws Error with exitCode 261 if the source chain is not enabled.
31
+ */
32
+ async getOffRamp(provider, chainSelector) {
33
+ return provider
34
+ .get('offRamp', [{ type: 'int', value: chainSelector }])
35
+ .then((r) => r.stack.readAddress());
36
+ }
37
+ /**
38
+ * Gets the OnRamp address for a given destination chain selector.
39
+ * The OnRamp handles outgoing messages to the specified destination chain.
40
+ *
41
+ * @param provider - TON contract provider for making RPC calls.
42
+ * @param destChainSelector - The CCIP chain selector of the destination chain.
43
+ * @returns The OnRamp contract address.
44
+ */
45
+ async getOnRamp(provider, destChainSelector) {
46
+ return provider
47
+ .get('onRamp', [{ type: 'int', value: destChainSelector }])
48
+ .then((r) => r.stack.readAddress());
49
+ }
50
+ }
51
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/ton/bindings/router.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,MAAM,OAAO,MAAM;IACR,OAAO,CAAS;IAEzB;;;OAGG;IACH,YAAY,OAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAgB;QACvC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,UAAU,CAAC,QAA0B,EAAE,aAAqB;QAChE,OAAO,QAAQ;aACZ,GAAG,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;aACvD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IACvC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,SAAS,CAAC,QAA0B,EAAE,iBAAyB;QACnE,OAAO,QAAQ;aACZ,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;aAC1D,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IACvC,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import { beginCell } from '@ton/core';
2
+ import type { ExecutionReport } from '../types.ts';
3
+ import { type CCIPMessage_V1_6_TON } from './types.ts';
4
+ /**
5
+ * Generates an unsigned execute report payload for the TON OffRamp contract.
6
+ *
7
+ * @param offRamp - OffRamp contract address.
8
+ * @param execReport - Execution report containing the CCIP message and proofs.
9
+ * @param opts - Optional execution options. Gas limit override for execution (0 = no override).
10
+ * @returns Object with target address, value, and payload cell.
11
+ */
12
+ export declare function generateUnsignedExecuteReport(offRamp: string, execReport: ExecutionReport<CCIPMessage_V1_6_TON>, opts?: {
13
+ gasLimit?: number;
14
+ }): {
15
+ to: string;
16
+ body: ReturnType<typeof beginCell>['endCell'] extends () => infer R ? R : never;
17
+ };
18
+ //# sourceMappingURL=exec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/ton/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EACL,KAAK,oBAAoB,EAG1B,MAAM,YAAY,CAAA;AAEnB;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,eAAe,CAAC,oBAAoB,CAAC,EACjD,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3B;IACD,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,SAAS,CAAC,SAAS,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;CAChF,CAmBA"}
@@ -0,0 +1,28 @@
1
+ import { beginCell } from '@ton/core';
2
+ import { MANUALLY_EXECUTE_OPCODE, serializeExecutionReport, } from "./types.js";
3
+ /**
4
+ * Generates an unsigned execute report payload for the TON OffRamp contract.
5
+ *
6
+ * @param offRamp - OffRamp contract address.
7
+ * @param execReport - Execution report containing the CCIP message and proofs.
8
+ * @param opts - Optional execution options. Gas limit override for execution (0 = no override).
9
+ * @returns Object with target address, value, and payload cell.
10
+ */
11
+ export function generateUnsignedExecuteReport(offRamp, execReport, opts) {
12
+ // Serialize the execution report
13
+ const serializedReport = serializeExecutionReport(execReport);
14
+ // Use provided gasLimit as override, or 0 for no override
15
+ const gasOverride = opts?.gasLimit ? BigInt(opts.gasLimit) : 0n;
16
+ // Construct the OffRamp_ManuallyExecute message
17
+ const payload = beginCell()
18
+ .storeUint(MANUALLY_EXECUTE_OPCODE, 32) // Opcode for OffRamp_ManuallyExecute
19
+ .storeUint(0, 64) // queryID (default 0)
20
+ .storeBuilder(serializedReport) // as builder!
21
+ .storeCoins(gasOverride) // gasOverride (optional, 0 = no override)
22
+ .endCell();
23
+ return {
24
+ to: offRamp,
25
+ body: payload,
26
+ };
27
+ }
28
+ //# sourceMappingURL=exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/ton/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAGrC,OAAO,EAEL,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,YAAY,CAAA;AAEnB;;;;;;;GAOG;AACH,MAAM,UAAU,6BAA6B,CAC3C,OAAe,EACf,UAAiD,EACjD,IAA4B;IAK5B,iCAAiC;IACjC,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAA;IAE7D,0DAA0D;IAC1D,MAAM,WAAW,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAE/D,gDAAgD;IAChD,MAAM,OAAO,GAAG,SAAS,EAAE;SACxB,SAAS,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC,qCAAqC;SAC5E,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,sBAAsB;SACvC,YAAY,CAAC,gBAAgB,CAAC,CAAC,cAAc;SAC7C,UAAU,CAAC,WAAW,CAAC,CAAC,0CAA0C;SAClE,OAAO,EAAE,CAAA;IAEZ,OAAO;QACL,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,OAAO;KACd,CAAA;AACH,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { LeafHasher } from '../hasher/common.ts';
2
+ import { CCIPVersion } from '../types.ts';
3
+ /**
4
+ * Creates a leaf hasher for TON messages.
5
+ *
6
+ * @param lane - Lane configuration containing sourceChainSelector, destChainSelector,
7
+ * onRamp (as hex string), and version (only v1.6 supported for TON).
8
+ * @returns A LeafHasher function that computes message hashes for TON.
9
+ */
10
+ export declare function getTONLeafHasher<V extends CCIPVersion = CCIPVersion>({ sourceChainSelector, destChainSelector, onRamp, version, }: {
11
+ sourceChainSelector: bigint;
12
+ destChainSelector: bigint;
13
+ onRamp: string;
14
+ version: V;
15
+ }): LeafHasher<V>;
16
+ /**
17
+ * Creates a hash that uniquely identifies the message lane configuration
18
+ * (source chain, destination chain, and onRamp address).
19
+ * Following the TON implementation from chainlink-ton repo.
20
+ *
21
+ * @param sourceChainSelector - Source chain selector.
22
+ * @param destChainSelector - Destination chain selector.
23
+ * @param onRamp - OnRamp address as hex string.
24
+ * @returns SHA256 hash of the metadata as hex string.
25
+ */
26
+ export declare const hashTONMetadata: (sourceChainSelector: bigint, destChainSelector: bigint, onRamp: string) => string;
27
+ //# sourceMappingURL=hasher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasher.d.ts","sourceRoot":"","sources":["../../src/ton/hasher.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAA2C,WAAW,EAAE,MAAM,aAAa,CAAA;AAOlF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAAE,EACpE,mBAAmB,EACnB,iBAAiB,EACjB,MAAM,EACN,OAAO,GACR,EAAE;IACD,mBAAmB,EAAE,MAAM,CAAA;IAC3B,iBAAiB,EAAE,MAAM,CAAA;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,CAAC,CAAA;CACX,GAAG,UAAU,CAAC,CAAC,CAAC,CAYhB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,GAC1B,qBAAqB,MAAM,EAC3B,mBAAmB,MAAM,EACzB,QAAQ,MAAM,KACb,MAiBF,CAAA"}
@@ -0,0 +1,134 @@
1
+ import { Address, beginCell } from '@ton/core';
2
+ import { sha256, toBigInt } from 'ethers';
3
+ import { CCIPExtraArgsInvalidError, CCIPHasherVersionUnsupportedError, } from "../errors/specialized.js";
4
+ import { decodeExtraArgs } from "../extra-args.js";
5
+ import { CCIPVersion } from "../types.js";
6
+ import { networkInfo } from "../utils.js";
7
+ import { hexToBuffer, tryParseCell } from "./utils.js";
8
+ // TON uses 256 bits (32 bytes) of zeros as leaf domain separator
9
+ const TON_LEAF_DOMAIN_SEPARATOR = 0n;
10
+ /**
11
+ * Creates a leaf hasher for TON messages.
12
+ *
13
+ * @param lane - Lane configuration containing sourceChainSelector, destChainSelector,
14
+ * onRamp (as hex string), and version (only v1.6 supported for TON).
15
+ * @returns A LeafHasher function that computes message hashes for TON.
16
+ */
17
+ export function getTONLeafHasher({ sourceChainSelector, destChainSelector, onRamp, version, }) {
18
+ if (version !== CCIPVersion.V1_6) {
19
+ throw new CCIPHasherVersionUnsupportedError('TON', version);
20
+ }
21
+ // Pre-compute metadata hash once for all messages using this hasher
22
+ const metadataHash = hashTONMetadata(sourceChainSelector, destChainSelector, onRamp);
23
+ // Return the actual hashing function that will be called for each message
24
+ return ((message) => {
25
+ return hashV16TONMessage(message, metadataHash);
26
+ });
27
+ }
28
+ /**
29
+ * Creates a hash that uniquely identifies the message lane configuration
30
+ * (source chain, destination chain, and onRamp address).
31
+ * Following the TON implementation from chainlink-ton repo.
32
+ *
33
+ * @param sourceChainSelector - Source chain selector.
34
+ * @param destChainSelector - Destination chain selector.
35
+ * @param onRamp - OnRamp address as hex string.
36
+ * @returns SHA256 hash of the metadata as hex string.
37
+ */
38
+ export const hashTONMetadata = (sourceChainSelector, destChainSelector, onRamp) => {
39
+ // Domain separator for TON messages
40
+ const versionHash = BigInt(sha256(Buffer.from('Any2TVMMessageHashV1')));
41
+ const onRampBytes = hexToBuffer(onRamp);
42
+ // Build metadata cell
43
+ const metadataCell = beginCell()
44
+ .storeUint(versionHash, 256)
45
+ .storeUint(sourceChainSelector, 64)
46
+ .storeUint(destChainSelector, 64)
47
+ .storeRef(beginCell().storeUint(BigInt(onRampBytes.length), 8).storeBuffer(onRampBytes).endCell())
48
+ .endCell();
49
+ // Return cell hash as hex string (excludes BOC headers)
50
+ return '0x' + metadataCell.hash().toString('hex');
51
+ };
52
+ /**
53
+ * Computes the full message hash for a CCIP v1.6 TON message
54
+ * Follows the chainlink-ton's Any2TVMRampMessage.generateMessageId()
55
+ *
56
+ * @param message - CCIP message to hash
57
+ * @param metadataHash - Pre-computed metadata hash from hashTONMetadata()
58
+ * @returns SHA256 hash of the complete message as hex string
59
+ */
60
+ function hashV16TONMessage(message, metadataHash) {
61
+ // Extract gas limit from message
62
+ let gasLimit;
63
+ const embeddedGasLimit = message.gasLimit;
64
+ if (typeof embeddedGasLimit === 'bigint') {
65
+ gasLimit = embeddedGasLimit;
66
+ }
67
+ else {
68
+ const parsedArgs = decodeExtraArgs(message.extraArgs, networkInfo(message.sourceChainSelector).family);
69
+ if (!parsedArgs || parsedArgs._tag !== 'EVMExtraArgsV2') {
70
+ throw new CCIPExtraArgsInvalidError('TON', message.extraArgs);
71
+ }
72
+ gasLimit = parsedArgs.gasLimit || 0n;
73
+ }
74
+ // Build header cell containing header routing information
75
+ const headerCell = beginCell()
76
+ .storeUint(toBigInt(message.messageId), 256)
77
+ .storeAddress(Address.parse(message.receiver))
78
+ .storeUint(toBigInt(message.sequenceNumber), 64)
79
+ .storeCoins(gasLimit)
80
+ .storeUint(toBigInt(message.nonce), 64)
81
+ .endCell();
82
+ // Build sender cell with address bytes
83
+ const senderBytes = hexToBuffer(message.sender);
84
+ const senderCell = beginCell()
85
+ .storeUint(BigInt(senderBytes.length), 8)
86
+ .storeBuffer(senderBytes)
87
+ .endCell();
88
+ // Build token amounts cell if tokens are being transferred
89
+ const tokenAmountsCell = message.tokenAmounts.length > 0 ? buildTokenAmountsCell(message.tokenAmounts) : null;
90
+ // Assemble the complete message cell
91
+ // LEAF_DOMAIN_SEPARATOR (256 bits) + metadataHash (256 bits) + refs
92
+ const messageCell = beginCell()
93
+ .storeUint(TON_LEAF_DOMAIN_SEPARATOR, 256)
94
+ .storeUint(toBigInt(metadataHash), 256)
95
+ .storeRef(headerCell)
96
+ .storeRef(senderCell)
97
+ .storeRef(tryParseCell(message.data))
98
+ .storeMaybeRef(tokenAmountsCell)
99
+ .endCell();
100
+ // Return cell hash as hex string
101
+ return '0x' + messageCell.hash().toString('hex');
102
+ }
103
+ /**
104
+ * Creates a nested cell structure for token amounts, where each token
105
+ * transfer is stored as a reference cell containing source pool, destination,
106
+ * amount, and extra data.
107
+ *
108
+ * @param tokenAmounts - Array of token transfer details
109
+ * @returns Cell containing all token transfer information
110
+ */
111
+ function buildTokenAmountsCell(tokenAmounts) {
112
+ const builder = beginCell();
113
+ // Process each token transfer
114
+ for (const ta of tokenAmounts) {
115
+ const sourcePoolBytes = hexToBuffer(ta.sourcePoolAddress);
116
+ // Extract amount
117
+ const amountSource = ta.amount ??
118
+ ta.destGasAmount ??
119
+ 0n;
120
+ const amount = toBigInt(amountSource);
121
+ // Store each token transfer as a reference cell
122
+ builder.storeRef(beginCell()
123
+ .storeRef(beginCell()
124
+ .storeUint(BigInt(sourcePoolBytes.length), 8)
125
+ .storeBuffer(sourcePoolBytes)
126
+ .endCell())
127
+ .storeAddress(Address.parse(ta.destTokenAddress))
128
+ .storeUint(amount, 256)
129
+ .storeRef(tryParseCell(ta.extraData))
130
+ .endCell());
131
+ }
132
+ return builder.endCell();
133
+ }
134
+ //# sourceMappingURL=hasher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasher.js","sourceRoot":"","sources":["../../src/ton/hasher.ts"],"names":[],"mappings":"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"}