@bananapus/nana-sdk-core 1.4.0 → 1.5.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 (235) hide show
  1. package/dist/cjs/utils/token.d.ts +2 -2
  2. package/dist/cjs/utils/token.d.ts.map +1 -1
  3. package/dist/cjs/utils/token.js +30 -9
  4. package/dist/cjs/utils/token.js.map +1 -1
  5. package/dist/cjs/v6/pay.d.ts +25 -0
  6. package/dist/cjs/v6/pay.d.ts.map +1 -1
  7. package/dist/cjs/v6/pay.js +31 -0
  8. package/dist/cjs/v6/pay.js.map +1 -1
  9. package/dist/cjs/v6/uniswapV4.d.ts +87 -1
  10. package/dist/cjs/v6/uniswapV4.d.ts.map +1 -1
  11. package/dist/cjs/v6/uniswapV4.js +191 -1
  12. package/dist/cjs/v6/uniswapV4.js.map +1 -1
  13. package/dist/esm/utils/token.d.ts +2 -2
  14. package/dist/esm/utils/token.d.ts.map +1 -1
  15. package/dist/esm/utils/token.js +30 -9
  16. package/dist/esm/utils/token.js.map +1 -1
  17. package/dist/esm/v6/pay.d.ts +25 -0
  18. package/dist/esm/v6/pay.d.ts.map +1 -1
  19. package/dist/esm/v6/pay.js +31 -1
  20. package/dist/esm/v6/pay.js.map +1 -1
  21. package/dist/esm/v6/uniswapV4.d.ts +87 -1
  22. package/dist/esm/v6/uniswapV4.d.ts.map +1 -1
  23. package/dist/esm/v6/uniswapV4.js +188 -1
  24. package/dist/esm/v6/uniswapV4.js.map +1 -1
  25. package/package.json +17 -10
  26. package/dist/cjs/utils/data.test.d.ts +0 -2
  27. package/dist/cjs/utils/data.test.d.ts.map +0 -1
  28. package/dist/cjs/utils/data.test.js +0 -27
  29. package/dist/cjs/utils/data.test.js.map +0 -1
  30. package/dist/cjs/utils/deploy.test.d.ts +0 -2
  31. package/dist/cjs/utils/deploy.test.d.ts.map +0 -1
  32. package/dist/cjs/utils/deploy.test.js +0 -65
  33. package/dist/cjs/utils/deploy.test.js.map +0 -1
  34. package/dist/cjs/utils/fee.test.d.ts +0 -2
  35. package/dist/cjs/utils/fee.test.d.ts.map +0 -1
  36. package/dist/cjs/utils/fee.test.js +0 -11
  37. package/dist/cjs/utils/fee.test.js.map +0 -1
  38. package/dist/cjs/utils/format.test.d.ts +0 -2
  39. package/dist/cjs/utils/format.test.d.ts.map +0 -1
  40. package/dist/cjs/utils/format.test.js +0 -27
  41. package/dist/cjs/utils/format.test.js.map +0 -1
  42. package/dist/cjs/utils/ipfs.test.d.ts +0 -2
  43. package/dist/cjs/utils/ipfs.test.d.ts.map +0 -1
  44. package/dist/cjs/utils/ipfs.test.js +0 -67
  45. package/dist/cjs/utils/ipfs.test.js.map +0 -1
  46. package/dist/cjs/utils/revnet.test.d.ts +0 -2
  47. package/dist/cjs/utils/revnet.test.d.ts.map +0 -1
  48. package/dist/cjs/utils/revnet.test.js +0 -12
  49. package/dist/cjs/utils/revnet.test.js.map +0 -1
  50. package/dist/cjs/utils/ruleset.test.d.ts +0 -2
  51. package/dist/cjs/utils/ruleset.test.d.ts.map +0 -1
  52. package/dist/cjs/utils/ruleset.test.js +0 -23
  53. package/dist/cjs/utils/ruleset.test.js.map +0 -1
  54. package/dist/cjs/utils/token.test.d.ts +0 -2
  55. package/dist/cjs/utils/token.test.d.ts.map +0 -1
  56. package/dist/cjs/utils/token.test.js +0 -40
  57. package/dist/cjs/utils/token.test.js.map +0 -1
  58. package/dist/cjs/utils/urn.test.d.ts +0 -2
  59. package/dist/cjs/utils/urn.test.d.ts.map +0 -1
  60. package/dist/cjs/utils/urn.test.js +0 -114
  61. package/dist/cjs/utils/urn.test.js.map +0 -1
  62. package/dist/cjs/v6/cashOut.test.d.ts +0 -2
  63. package/dist/cjs/v6/cashOut.test.d.ts.map +0 -1
  64. package/dist/cjs/v6/cashOut.test.js +0 -122
  65. package/dist/cjs/v6/cashOut.test.js.map +0 -1
  66. package/dist/cjs/v6/currency.test.d.ts +0 -2
  67. package/dist/cjs/v6/currency.test.d.ts.map +0 -1
  68. package/dist/cjs/v6/currency.test.js +0 -26
  69. package/dist/cjs/v6/currency.test.js.map +0 -1
  70. package/dist/cjs/v6/fees.test.d.ts +0 -2
  71. package/dist/cjs/v6/fees.test.d.ts.map +0 -1
  72. package/dist/cjs/v6/fees.test.js +0 -40
  73. package/dist/cjs/v6/fees.test.js.map +0 -1
  74. package/dist/cjs/v6/launch.test.d.ts +0 -2
  75. package/dist/cjs/v6/launch.test.d.ts.map +0 -1
  76. package/dist/cjs/v6/launch.test.js +0 -162
  77. package/dist/cjs/v6/launch.test.js.map +0 -1
  78. package/dist/cjs/v6/loans.test.d.ts +0 -2
  79. package/dist/cjs/v6/loans.test.d.ts.map +0 -1
  80. package/dist/cjs/v6/loans.test.js +0 -129
  81. package/dist/cjs/v6/loans.test.js.map +0 -1
  82. package/dist/cjs/v6/nft.test.d.ts +0 -2
  83. package/dist/cjs/v6/nft.test.d.ts.map +0 -1
  84. package/dist/cjs/v6/nft.test.js +0 -279
  85. package/dist/cjs/v6/nft.test.js.map +0 -1
  86. package/dist/cjs/v6/omnichain.test.d.ts +0 -2
  87. package/dist/cjs/v6/omnichain.test.d.ts.map +0 -1
  88. package/dist/cjs/v6/omnichain.test.js +0 -145
  89. package/dist/cjs/v6/omnichain.test.js.map +0 -1
  90. package/dist/cjs/v6/pay.test.d.ts +0 -2
  91. package/dist/cjs/v6/pay.test.d.ts.map +0 -1
  92. package/dist/cjs/v6/pay.test.js +0 -137
  93. package/dist/cjs/v6/pay.test.js.map +0 -1
  94. package/dist/cjs/v6/permissions.test.d.ts +0 -2
  95. package/dist/cjs/v6/permissions.test.d.ts.map +0 -1
  96. package/dist/cjs/v6/permissions.test.js +0 -142
  97. package/dist/cjs/v6/permissions.test.js.map +0 -1
  98. package/dist/cjs/v6/projectPayers.test.d.ts +0 -2
  99. package/dist/cjs/v6/projectPayers.test.d.ts.map +0 -1
  100. package/dist/cjs/v6/projectPayers.test.js +0 -85
  101. package/dist/cjs/v6/projectPayers.test.js.map +0 -1
  102. package/dist/cjs/v6/revnets.test.d.ts +0 -2
  103. package/dist/cjs/v6/revnets.test.d.ts.map +0 -1
  104. package/dist/cjs/v6/revnets.test.js +0 -233
  105. package/dist/cjs/v6/revnets.test.js.map +0 -1
  106. package/dist/cjs/v6/rulesets.test.d.ts +0 -2
  107. package/dist/cjs/v6/rulesets.test.d.ts.map +0 -1
  108. package/dist/cjs/v6/rulesets.test.js +0 -160
  109. package/dist/cjs/v6/rulesets.test.js.map +0 -1
  110. package/dist/cjs/v6/splits.test.d.ts +0 -2
  111. package/dist/cjs/v6/splits.test.d.ts.map +0 -1
  112. package/dist/cjs/v6/splits.test.js +0 -135
  113. package/dist/cjs/v6/splits.test.js.map +0 -1
  114. package/dist/cjs/v6/suckers.test.d.ts +0 -2
  115. package/dist/cjs/v6/suckers.test.d.ts.map +0 -1
  116. package/dist/cjs/v6/suckers.test.js +0 -362
  117. package/dist/cjs/v6/suckers.test.js.map +0 -1
  118. package/dist/cjs/v6/terminals.test.d.ts +0 -2
  119. package/dist/cjs/v6/terminals.test.d.ts.map +0 -1
  120. package/dist/cjs/v6/terminals.test.js +0 -59
  121. package/dist/cjs/v6/terminals.test.js.map +0 -1
  122. package/dist/cjs/v6/tokens.test.d.ts +0 -2
  123. package/dist/cjs/v6/tokens.test.d.ts.map +0 -1
  124. package/dist/cjs/v6/tokens.test.js +0 -141
  125. package/dist/cjs/v6/tokens.test.js.map +0 -1
  126. package/dist/cjs/v6/uniswapV4.test.d.ts +0 -2
  127. package/dist/cjs/v6/uniswapV4.test.d.ts.map +0 -1
  128. package/dist/cjs/v6/uniswapV4.test.js +0 -128
  129. package/dist/cjs/v6/uniswapV4.test.js.map +0 -1
  130. package/dist/esm/utils/data.test.d.ts +0 -2
  131. package/dist/esm/utils/data.test.d.ts.map +0 -1
  132. package/dist/esm/utils/data.test.js +0 -25
  133. package/dist/esm/utils/data.test.js.map +0 -1
  134. package/dist/esm/utils/deploy.test.d.ts +0 -2
  135. package/dist/esm/utils/deploy.test.d.ts.map +0 -1
  136. package/dist/esm/utils/deploy.test.js +0 -63
  137. package/dist/esm/utils/deploy.test.js.map +0 -1
  138. package/dist/esm/utils/fee.test.d.ts +0 -2
  139. package/dist/esm/utils/fee.test.d.ts.map +0 -1
  140. package/dist/esm/utils/fee.test.js +0 -9
  141. package/dist/esm/utils/fee.test.js.map +0 -1
  142. package/dist/esm/utils/format.test.d.ts +0 -2
  143. package/dist/esm/utils/format.test.d.ts.map +0 -1
  144. package/dist/esm/utils/format.test.js +0 -25
  145. package/dist/esm/utils/format.test.js.map +0 -1
  146. package/dist/esm/utils/ipfs.test.d.ts +0 -2
  147. package/dist/esm/utils/ipfs.test.d.ts.map +0 -1
  148. package/dist/esm/utils/ipfs.test.js +0 -62
  149. package/dist/esm/utils/ipfs.test.js.map +0 -1
  150. package/dist/esm/utils/revnet.test.d.ts +0 -2
  151. package/dist/esm/utils/revnet.test.d.ts.map +0 -1
  152. package/dist/esm/utils/revnet.test.js +0 -10
  153. package/dist/esm/utils/revnet.test.js.map +0 -1
  154. package/dist/esm/utils/ruleset.test.d.ts +0 -2
  155. package/dist/esm/utils/ruleset.test.d.ts.map +0 -1
  156. package/dist/esm/utils/ruleset.test.js +0 -21
  157. package/dist/esm/utils/ruleset.test.js.map +0 -1
  158. package/dist/esm/utils/token.test.d.ts +0 -2
  159. package/dist/esm/utils/token.test.d.ts.map +0 -1
  160. package/dist/esm/utils/token.test.js +0 -38
  161. package/dist/esm/utils/token.test.js.map +0 -1
  162. package/dist/esm/utils/urn.test.d.ts +0 -2
  163. package/dist/esm/utils/urn.test.d.ts.map +0 -1
  164. package/dist/esm/utils/urn.test.js +0 -112
  165. package/dist/esm/utils/urn.test.js.map +0 -1
  166. package/dist/esm/v6/cashOut.test.d.ts +0 -2
  167. package/dist/esm/v6/cashOut.test.d.ts.map +0 -1
  168. package/dist/esm/v6/cashOut.test.js +0 -120
  169. package/dist/esm/v6/cashOut.test.js.map +0 -1
  170. package/dist/esm/v6/currency.test.d.ts +0 -2
  171. package/dist/esm/v6/currency.test.d.ts.map +0 -1
  172. package/dist/esm/v6/currency.test.js +0 -24
  173. package/dist/esm/v6/currency.test.js.map +0 -1
  174. package/dist/esm/v6/fees.test.d.ts +0 -2
  175. package/dist/esm/v6/fees.test.d.ts.map +0 -1
  176. package/dist/esm/v6/fees.test.js +0 -38
  177. package/dist/esm/v6/fees.test.js.map +0 -1
  178. package/dist/esm/v6/launch.test.d.ts +0 -2
  179. package/dist/esm/v6/launch.test.d.ts.map +0 -1
  180. package/dist/esm/v6/launch.test.js +0 -160
  181. package/dist/esm/v6/launch.test.js.map +0 -1
  182. package/dist/esm/v6/loans.test.d.ts +0 -2
  183. package/dist/esm/v6/loans.test.d.ts.map +0 -1
  184. package/dist/esm/v6/loans.test.js +0 -127
  185. package/dist/esm/v6/loans.test.js.map +0 -1
  186. package/dist/esm/v6/nft.test.d.ts +0 -2
  187. package/dist/esm/v6/nft.test.d.ts.map +0 -1
  188. package/dist/esm/v6/nft.test.js +0 -277
  189. package/dist/esm/v6/nft.test.js.map +0 -1
  190. package/dist/esm/v6/omnichain.test.d.ts +0 -2
  191. package/dist/esm/v6/omnichain.test.d.ts.map +0 -1
  192. package/dist/esm/v6/omnichain.test.js +0 -143
  193. package/dist/esm/v6/omnichain.test.js.map +0 -1
  194. package/dist/esm/v6/pay.test.d.ts +0 -2
  195. package/dist/esm/v6/pay.test.d.ts.map +0 -1
  196. package/dist/esm/v6/pay.test.js +0 -135
  197. package/dist/esm/v6/pay.test.js.map +0 -1
  198. package/dist/esm/v6/permissions.test.d.ts +0 -2
  199. package/dist/esm/v6/permissions.test.d.ts.map +0 -1
  200. package/dist/esm/v6/permissions.test.js +0 -140
  201. package/dist/esm/v6/permissions.test.js.map +0 -1
  202. package/dist/esm/v6/projectPayers.test.d.ts +0 -2
  203. package/dist/esm/v6/projectPayers.test.d.ts.map +0 -1
  204. package/dist/esm/v6/projectPayers.test.js +0 -83
  205. package/dist/esm/v6/projectPayers.test.js.map +0 -1
  206. package/dist/esm/v6/revnets.test.d.ts +0 -2
  207. package/dist/esm/v6/revnets.test.d.ts.map +0 -1
  208. package/dist/esm/v6/revnets.test.js +0 -231
  209. package/dist/esm/v6/revnets.test.js.map +0 -1
  210. package/dist/esm/v6/rulesets.test.d.ts +0 -2
  211. package/dist/esm/v6/rulesets.test.d.ts.map +0 -1
  212. package/dist/esm/v6/rulesets.test.js +0 -158
  213. package/dist/esm/v6/rulesets.test.js.map +0 -1
  214. package/dist/esm/v6/splits.test.d.ts +0 -2
  215. package/dist/esm/v6/splits.test.d.ts.map +0 -1
  216. package/dist/esm/v6/splits.test.js +0 -133
  217. package/dist/esm/v6/splits.test.js.map +0 -1
  218. package/dist/esm/v6/suckers.test.d.ts +0 -2
  219. package/dist/esm/v6/suckers.test.d.ts.map +0 -1
  220. package/dist/esm/v6/suckers.test.js +0 -360
  221. package/dist/esm/v6/suckers.test.js.map +0 -1
  222. package/dist/esm/v6/terminals.test.d.ts +0 -2
  223. package/dist/esm/v6/terminals.test.d.ts.map +0 -1
  224. package/dist/esm/v6/terminals.test.js +0 -57
  225. package/dist/esm/v6/terminals.test.js.map +0 -1
  226. package/dist/esm/v6/tokens.test.d.ts +0 -2
  227. package/dist/esm/v6/tokens.test.d.ts.map +0 -1
  228. package/dist/esm/v6/tokens.test.js +0 -139
  229. package/dist/esm/v6/tokens.test.js.map +0 -1
  230. package/dist/esm/v6/uniswapV4.test.d.ts +0 -2
  231. package/dist/esm/v6/uniswapV4.test.d.ts.map +0 -1
  232. package/dist/esm/v6/uniswapV4.test.js +0 -126
  233. package/dist/esm/v6/uniswapV4.test.js.map +0 -1
  234. package/dist/tsconfig.cjs.tsbuildinfo +0 -1
  235. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,360 +0,0 @@
1
- import { describe, expect, test, vi } from "vitest";
2
- import { decodeFunctionData, encodeAbiParameters, encodeFunctionData, keccak256, pad, zeroHash, } from "viem";
3
- import { CCIP_SUCKER_TRANSPORT_VALUES, SUCKER_EMPTY_TREE_ROOT, assertSuckerTransportValue, buildBridgeClaimTx, buildBridgePrepareTx, buildSyncAccountingDataTx, buildToRemoteTx, claimFromSuckerMovement, classifySuckerMovement, classifySuckerTransport, findSuckerTransportValue, getAllV6SuckerPairs, getSuckerMovements, relativeSuckerDrift, suckerBytes32ToAddress, suckerBranchRoot, suckerHashPair, suckerLeafHash, suckerLeafProof, suckerTimestampSeconds, suckerZeroHashes, getV6SuckerPairs, jbSuckerV6Abi, } from "./suckers.js";
4
- import { v6Address } from "./types.js";
5
- const sucker = "0x00000000000000000000000000000000000000aa";
6
- const token = "0x000000000000000000000000000000000000000b";
7
- const beneficiary = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266";
8
- const paddedBeneficiary = "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266";
9
- const remoteToken = "0x000000000000000000000000000000000000000c";
10
- const paddedRemoteToken = pad(remoteToken, { size: 32 });
11
- const LEAVES = [
12
- "0x5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2",
13
- "0xf2ee15ea639b73fa3db9b34a245bdfa015c260c598b211bf05a1ecc4b3e3b4f2",
14
- "0x69c322e3248a5dfc29d73c5b0553b0185a35cd5bb6386747517ef7e53b15e287",
15
- "0xf343681465b9efe82c933c3e8748c70cb8aa06539c361de20f72eac04e766393",
16
- "0xdbb8d0f4c497851a5043c6363657698cb1387682cac2f786c731f8936109d795",
17
- ];
18
- const ROOTS = {
19
- 1: "0x72386aacefe2e6817d40eb1136c21c0d2dee0c641e150dce1c6aa8cfb7426635",
20
- 2: "0xa4b82827a5b0628832c675ceed1498459188bda440bd094e75f236bda4f24478",
21
- 3: "0xb98f04c3f907d54091ebdc4672c4f699f02971e123334f68a6d3d1cb3eca0831",
22
- 5: "0x44b54e9715ad5f57d221f2f5ac1f1f8a82ef0e1892fa2ad3a026d1ceef240379",
23
- };
24
- const MOVEMENT_LEAVES = Array.from({ length: 3 }, (_, index) => suckerLeafHash({
25
- beneficiary: paddedBeneficiary,
26
- projectTokenCount: BigInt(index + 1) * 100n,
27
- terminalTokenAmount: BigInt(index + 1) * 10n,
28
- metadata: zeroHash,
29
- }));
30
- function movementRoot(count) {
31
- const leaves = MOVEMENT_LEAVES.slice(0, count);
32
- return suckerBranchRoot(leaves[count - 1], suckerLeafProof(leaves, count - 1), count - 1);
33
- }
34
- function outboxLogs(count = 3) {
35
- return MOVEMENT_LEAVES.slice(0, count).map((hashed, index) => ({
36
- blockNumber: BigInt(10 + index),
37
- args: {
38
- beneficiary: paddedBeneficiary,
39
- token,
40
- hashed,
41
- index: BigInt(index),
42
- root: movementRoot(index + 1),
43
- projectTokenCount: BigInt(index + 1) * 100n,
44
- terminalTokenAmount: BigInt(index + 1) * 10n,
45
- metadata: zeroHash,
46
- caller: beneficiary,
47
- },
48
- }));
49
- }
50
- describe("suckers", () => {
51
- describe("buildBridgePrepareTx", () => {
52
- test("left-pads the beneficiary address to bytes32 and encodes", () => {
53
- const tx = buildBridgePrepareTx({
54
- chainId: 11155111,
55
- sucker,
56
- projectTokenCount: 100n * 10n ** 18n,
57
- beneficiary,
58
- token,
59
- });
60
- expect(tx.address).toEqual(sucker);
61
- expect(tx.functionName).toEqual("prepare");
62
- expect(tx.args[1]).toEqual(paddedBeneficiary);
63
- // minTokensReclaimed and metadata default to 0.
64
- expect(tx.args[2]).toEqual(0n);
65
- expect(tx.args[4]).toEqual(zeroHash);
66
- const data = encodeFunctionData(tx);
67
- const decoded = decodeFunctionData({ abi: jbSuckerV6Abi, data });
68
- expect(decoded.functionName).toEqual("prepare");
69
- expect(decoded.args).toEqual([
70
- 100n * 10n ** 18n,
71
- paddedBeneficiary,
72
- 0n,
73
- token,
74
- zeroHash,
75
- ]);
76
- });
77
- test("passes explicit minTokensReclaimed and metadata through", () => {
78
- const metadata = pad("0x1234", { size: 32 });
79
- const tx = buildBridgePrepareTx({
80
- chainId: 1,
81
- sucker,
82
- projectTokenCount: 1n,
83
- beneficiary,
84
- minTokensReclaimed: 42n,
85
- token,
86
- metadata,
87
- });
88
- expect(tx.args[2]).toEqual(42n);
89
- expect(tx.args[4]).toEqual(metadata);
90
- expect(() => encodeFunctionData(tx)).not.toThrow();
91
- });
92
- });
93
- describe("buildBridgeClaimTx", () => {
94
- const claim = {
95
- token,
96
- leaf: {
97
- index: 3n,
98
- beneficiary: paddedBeneficiary,
99
- projectTokenCount: 5n,
100
- terminalTokenAmount: 7n,
101
- metadata: zeroHash,
102
- },
103
- proof: Array.from({ length: 32 }, () => zeroHash),
104
- };
105
- test("encodes a full JBClaim", () => {
106
- const tx = buildBridgeClaimTx({ chainId: 11155111, sucker, claim });
107
- expect(tx.address).toEqual(sucker);
108
- expect(tx.functionName).toEqual("claim");
109
- const data = encodeFunctionData(tx);
110
- const decoded = decodeFunctionData({ abi: jbSuckerV6Abi, data });
111
- expect(decoded.functionName).toEqual("claim");
112
- expect(decoded.args[0]).toEqual(claim);
113
- });
114
- test("rejects proofs that aren't exactly 32 entries", () => {
115
- const tx = buildBridgeClaimTx({
116
- chainId: 11155111,
117
- sucker,
118
- claim: {
119
- ...claim,
120
- proof: claim.proof.slice(0, 31),
121
- },
122
- });
123
- expect(() => encodeFunctionData(tx)).toThrow();
124
- });
125
- });
126
- describe("buildToRemoteTx", () => {
127
- test("is payable with a default value of 0", () => {
128
- const tx = buildToRemoteTx({ chainId: 11155111, sucker, token });
129
- expect(tx.value).toEqual(0n);
130
- expect(tx.functionName).toEqual("toRemote");
131
- expect(() => encodeFunctionData(tx)).not.toThrow();
132
- });
133
- test("passes an explicit CCIP fee value through", () => {
134
- const tx = buildToRemoteTx({
135
- chainId: 11155111,
136
- sucker,
137
- token,
138
- value: 123n,
139
- });
140
- expect(tx.value).toEqual(123n);
141
- expect(tx.args).toEqual([token]);
142
- });
143
- });
144
- describe("getV6SuckerPairs", () => {
145
- test("reads the registry and unpacks bytes32 remotes to checksummed addresses", async () => {
146
- const readContract = vi.fn().mockResolvedValue([
147
- {
148
- local: sucker,
149
- remote: "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266",
150
- remoteChainId: 10n,
151
- },
152
- ]);
153
- const client = { readContract };
154
- const pairs = await getV6SuckerPairs(client, {
155
- chainId: 11155111,
156
- projectId: 4n,
157
- });
158
- expect(readContract).toHaveBeenCalledWith(expect.objectContaining({
159
- address: v6Address("JBSuckerRegistry", 11155111),
160
- functionName: "suckerPairsOf",
161
- args: [4n],
162
- }));
163
- expect(pairs).toEqual([
164
- {
165
- local: sucker,
166
- remote: beneficiary, // checksummed low-20-bytes of the bytes32 remote
167
- remoteChainId: 10n,
168
- },
169
- ]);
170
- });
171
- });
172
- describe("Merkle proofs and movement state", () => {
173
- test("matches the contract leaf preimage order and rejects non-EVM words", () => {
174
- expect(suckerLeafHash({
175
- beneficiary: paddedBeneficiary,
176
- projectTokenCount: 100n,
177
- terminalTokenAmount: 10n,
178
- metadata: zeroHash,
179
- })).toBe(keccak256(encodeAbiParameters([
180
- { type: "uint256" },
181
- { type: "uint256" },
182
- { type: "bytes32" },
183
- { type: "bytes32" },
184
- ], [100n, 10n, paddedBeneficiary, zeroHash])));
185
- expect(suckerBytes32ToAddress(paddedRemoteToken).toLowerCase()).toBe(remoteToken);
186
- expect(() => suckerBytes32ToAddress(`0x01${"00".repeat(31)}`)).toThrow(/not an EVM address/);
187
- });
188
- test("reproduces pinned MerkleLib roots for dense outboxes", () => {
189
- expect(LEAVES.map((_, index) => keccak256(`0x0${index + 1}`))).toEqual(LEAVES);
190
- expect(suckerZeroHashes()).toHaveLength(33);
191
- expect(suckerZeroHashes()[32]).toBe(SUCKER_EMPTY_TREE_ROOT);
192
- expect(suckerHashPair(LEAVES[0], LEAVES[1])).not.toBe(suckerHashPair(LEAVES[1], LEAVES[0]));
193
- for (const count of [1, 2, 3, 5]) {
194
- const set = LEAVES.slice(0, count);
195
- for (let index = 0; index < count; index++) {
196
- const proof = suckerLeafProof(set, index);
197
- expect(proof).toHaveLength(32);
198
- expect(suckerBranchRoot(set[index], proof, index)).toBe(ROOTS[count]);
199
- }
200
- }
201
- expect(() => suckerLeafProof(LEAVES, 5)).toThrow(/outside/);
202
- });
203
- test("reconstructs verified claimed, claimable, and pending movements", async () => {
204
- const sourceClient = {
205
- readContract: vi.fn(async ({ functionName }) => {
206
- if (functionName === "outboxOf") {
207
- return { numberOfClaimsSent: 2n, tree: { count: 3n } };
208
- }
209
- if (functionName === "remoteTokenFor") {
210
- return {
211
- enabled: true,
212
- emergencyHatch: false,
213
- minGas: 0,
214
- addr: paddedRemoteToken,
215
- };
216
- }
217
- throw new Error(`unexpected source read ${functionName}`);
218
- }),
219
- getLogs: vi.fn(async () => outboxLogs()),
220
- };
221
- const destinationClient = {
222
- readContract: vi.fn(async ({ functionName, args, }) => {
223
- if (functionName === "inboxOf")
224
- return { nonce: 1n, root: movementRoot(2) };
225
- if (functionName === "executedLeafHashOf") {
226
- return args[1] === 0n ? MOVEMENT_LEAVES[0] : zeroHash;
227
- }
228
- throw new Error(`unexpected destination read ${functionName}`);
229
- }),
230
- };
231
- const movements = await getSuckerMovements(sourceClient, destinationClient, {
232
- sourceSucker: sucker,
233
- destinationSucker: beneficiary,
234
- sourceToken: token,
235
- toBlock: 99n,
236
- });
237
- expect(movements.map(({ status, canExecute }) => ({ status, canExecute }))).toEqual([
238
- { status: "claimed", canExecute: false },
239
- { status: "claimable", canExecute: false },
240
- { status: "pending", canExecute: true },
241
- ]);
242
- expect(movements[1].proof).toHaveLength(32);
243
- expect(suckerBranchRoot(MOVEMENT_LEAVES[1], movements[1].proof, 1)).toBe(movementRoot(2));
244
- const claim = claimFromSuckerMovement(movements[1]);
245
- expect(claim.token.toLowerCase()).toBe(remoteToken);
246
- expect(claim.leaf.index).toBe(1n);
247
- expect(() => claimFromSuckerMovement(movements[2])).toThrow(/claimable/);
248
- });
249
- test("supports an explicitly verified historical token mapping", async () => {
250
- const sourceClient = {
251
- readContract: vi.fn(async ({ functionName }) => functionName === "outboxOf"
252
- ? { numberOfClaimsSent: 1n, tree: { count: 1n } }
253
- : {
254
- enabled: false,
255
- emergencyHatch: true,
256
- minGas: 0,
257
- addr: zeroHash,
258
- }),
259
- getLogs: vi.fn(async () => outboxLogs(1)),
260
- };
261
- const destinationClient = {
262
- readContract: vi.fn(async ({ functionName }) => functionName === "inboxOf"
263
- ? { nonce: 1n, root: movementRoot(1) }
264
- : zeroHash),
265
- };
266
- await expect(getSuckerMovements(sourceClient, destinationClient, {
267
- sourceSucker: sucker,
268
- destinationSucker: beneficiary,
269
- sourceToken: token,
270
- remoteToken,
271
- toBlock: 99n,
272
- })).resolves.toMatchObject([{ remoteToken, status: "claimable" }]);
273
- });
274
- test("classifies lifecycle counters without conflating sent and delivered", () => {
275
- expect(classifySuckerMovement({
276
- executed: true,
277
- index: 0,
278
- deliveredCount: 2,
279
- sentCount: 2,
280
- })).toEqual({ status: "claimed", canExecute: false });
281
- expect(classifySuckerMovement({
282
- executed: false,
283
- index: 1,
284
- deliveredCount: 2,
285
- sentCount: 2,
286
- })).toEqual({ status: "claimable", canExecute: false });
287
- expect(classifySuckerMovement({
288
- executed: false,
289
- index: 2,
290
- deliveredCount: 1,
291
- sentCount: 2,
292
- })).toEqual({ status: "pending", canExecute: true });
293
- });
294
- });
295
- describe("transport helpers", () => {
296
- test("finds the first successful fee and guards CCIP zero transport", async () => {
297
- const simulate = vi.fn(async (value) => {
298
- if (value < 20n)
299
- throw new Error("insufficient fee");
300
- });
301
- await expect(findSuckerTransportValue([1n, 5n, 20n, 50n], simulate)).resolves.toBe(20n);
302
- expect(simulate).toHaveBeenCalledTimes(3);
303
- expect(CCIP_SUCKER_TRANSPORT_VALUES.every((value) => value > 0n)).toBe(true);
304
- expect(() => assertSuckerTransportValue("ccip", 100n, 100n)).toThrow(/positive native/);
305
- expect(() => assertSuckerTransportValue("native", 0n)).not.toThrow();
306
- expect(() => assertSuckerTransportValue("unknown", 1n)).toThrow(/could not be verified/);
307
- });
308
- test("positively probes CCIP and native families and otherwise fails closed", async () => {
309
- const ccip = {
310
- readContract: vi.fn(async () => beneficiary),
311
- };
312
- await expect(classifySuckerTransport(ccip, sucker)).resolves.toBe("ccip");
313
- const native = {
314
- readContract: vi.fn(async ({ functionName }) => {
315
- if (functionName === "CCIP_ROUTER")
316
- throw new Error("not CCIP");
317
- if (functionName === "OPMESSENGER")
318
- return beneficiary;
319
- throw new Error("not this family");
320
- }),
321
- };
322
- await expect(classifySuckerTransport(native, sucker)).resolves.toBe("native");
323
- const unknown = {
324
- readContract: vi.fn(async () => {
325
- throw new Error("RPC unavailable");
326
- }),
327
- };
328
- await expect(classifySuckerTransport(unknown, sucker)).resolves.toBe("unknown");
329
- });
330
- test("builds sync calldata and shares neutral accounting math", () => {
331
- const tx = buildSyncAccountingDataTx({
332
- chainId: 11155111,
333
- sucker,
334
- value: 123n,
335
- });
336
- expect(tx.value).toBe(123n);
337
- expect(decodeFunctionData({ abi: jbSuckerV6Abi, data: encodeFunctionData(tx) })
338
- .functionName).toBe("syncAccountingData");
339
- expect(relativeSuckerDrift(95n, 100n)).toBeCloseTo(0.05);
340
- expect(relativeSuckerDrift(0n, 0n)).toBe(0);
341
- expect(suckerTimestampSeconds((1752600000n << 128n) | 42n)).toBe(1_752_600_000);
342
- });
343
- });
344
- test("getAllV6SuckerPairs includes deprecated registry entries", async () => {
345
- const readContract = vi.fn(async ({ functionName }) => {
346
- if (functionName === "allSuckersOf")
347
- return [sucker];
348
- if (functionName === "peer")
349
- return paddedBeneficiary;
350
- if (functionName === "peerChainId")
351
- return 10n;
352
- throw new Error(`unexpected read ${functionName}`);
353
- });
354
- const client = { readContract };
355
- await expect(getAllV6SuckerPairs(client, { chainId: 11155111, projectId: 4n })).resolves.toEqual([
356
- { local: sucker, remote: beneficiary, remoteChainId: 10n },
357
- ]);
358
- });
359
- });
360
- //# sourceMappingURL=suckers.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"suckers.test.js","sourceRoot":"","sources":["../../../src/v6/suckers.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=terminals.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminals.test.d.ts","sourceRoot":"","sources":["../../../src/v6/terminals.test.ts"],"names":[],"mappings":""}
@@ -1,57 +0,0 @@
1
- import { zeroAddress } from "viem";
2
- import { describe, expect, test } from "vitest";
3
- import { NATIVE_TOKEN } from "../constants.js";
4
- import { jbDirectoryAbi, jbMultiTerminalAbi } from "../generated/juicebox.js";
5
- import { getAccountingContexts, resolvePaymentTerminal } from "./terminals.js";
6
- import { v6Address } from "./types.js";
7
- const chainId = 11155111;
8
- const projectId = 3n;
9
- function mockClient(result, calls = []) {
10
- return {
11
- async readContract(params) {
12
- calls.push(params);
13
- return result;
14
- },
15
- };
16
- }
17
- describe("terminals", () => {
18
- test("resolvePaymentTerminal returns the primary terminal when set", async () => {
19
- const terminal = "0x1111111111111111111111111111111111111111";
20
- const calls = [];
21
- const resolved = await resolvePaymentTerminal(mockClient(terminal, calls), {
22
- chainId,
23
- projectId,
24
- token: NATIVE_TOKEN,
25
- });
26
- expect(resolved).toEqual({ address: terminal, isRouter: false });
27
- expect(calls[0].address).toEqual(v6Address("JBDirectory", chainId));
28
- expect(calls[0].abi).toBe(jbDirectoryAbi);
29
- expect(calls[0].functionName).toEqual("primaryTerminalOf");
30
- expect(calls[0].args).toEqual([projectId, NATIVE_TOKEN]);
31
- });
32
- test("resolvePaymentTerminal falls back to the router registry", async () => {
33
- const resolved = await resolvePaymentTerminal(mockClient(zeroAddress), {
34
- chainId,
35
- projectId,
36
- token: NATIVE_TOKEN,
37
- });
38
- expect(resolved).toEqual({
39
- address: v6Address("JBRouterTerminalRegistry", chainId),
40
- isRouter: true,
41
- });
42
- });
43
- test("getAccountingContexts reads the multi terminal", async () => {
44
- const contexts = [{ token: NATIVE_TOKEN, decimals: 18, currency: 61166 }];
45
- const calls = [];
46
- const result = await getAccountingContexts(mockClient(contexts, calls), {
47
- chainId,
48
- projectId,
49
- });
50
- expect(result).toEqual(contexts);
51
- expect(calls[0].address).toEqual(v6Address("JBMultiTerminal", chainId));
52
- expect(calls[0].abi).toBe(jbMultiTerminalAbi);
53
- expect(calls[0].functionName).toEqual("accountingContextsOf");
54
- expect(calls[0].args).toEqual([projectId]);
55
- });
56
- });
57
- //# sourceMappingURL=terminals.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminals.test.js","sourceRoot":"","sources":["../../../src/v6/terminals.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=tokens.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokens.test.d.ts","sourceRoot":"","sources":["../../../src/v6/tokens.test.ts"],"names":[],"mappings":""}
@@ -1,139 +0,0 @@
1
- import { encodeFunctionData, zeroAddress, zeroHash } from "viem";
2
- import { describe, expect, test } from "vitest";
3
- import { ONE_ETHER } from "../constants.js";
4
- import { jbTokensAbi } from "../generated/juicebox.js";
5
- import { buildBurnTokensTx, buildClaimTokensTx, buildDeployErc20Tx, buildMintTokensTx, buildTransferCreditsTx, getCreditBalance, getTokenAddress, } from "./tokens.js";
6
- import { v6Address } from "./types.js";
7
- const chainId = 11155111;
8
- const projectId = 3n;
9
- const holder = "0x1111111111111111111111111111111111111111";
10
- const beneficiary = "0x2222222222222222222222222222222222222222";
11
- describe("tokens", () => {
12
- test("buildDeployErc20Tx encodes deployERC20For", () => {
13
- const tx = buildDeployErc20Tx({
14
- chainId,
15
- projectId,
16
- name: "Token",
17
- symbol: "TKN",
18
- });
19
- expect(tx.address).toEqual(v6Address("JBController", chainId));
20
- expect(tx.functionName).toEqual("deployERC20For");
21
- expect(tx.args).toEqual([projectId, "Token", "TKN", zeroHash]);
22
- expect(() => encodeFunctionData(tx)).not.toThrow();
23
- });
24
- test("buildDeployErc20Tx passes a custom salt through", () => {
25
- const salt = `0x${"11".repeat(32)}`;
26
- const tx = buildDeployErc20Tx({
27
- chainId,
28
- projectId,
29
- name: "Token",
30
- symbol: "TKN",
31
- salt,
32
- });
33
- expect(tx.args[3]).toEqual(salt);
34
- });
35
- test("buildClaimTokensTx encodes claimTokensFor", () => {
36
- const tx = buildClaimTokensTx({
37
- chainId,
38
- holder,
39
- projectId,
40
- tokenCount: ONE_ETHER,
41
- beneficiary,
42
- });
43
- expect(tx.address).toEqual(v6Address("JBController", chainId));
44
- expect(tx.functionName).toEqual("claimTokensFor");
45
- expect(tx.args).toEqual([holder, projectId, ONE_ETHER, beneficiary]);
46
- expect(() => encodeFunctionData(tx)).not.toThrow();
47
- });
48
- test("buildTransferCreditsTx encodes transferCreditsFrom", () => {
49
- const tx = buildTransferCreditsTx({
50
- chainId,
51
- holder,
52
- projectId,
53
- recipient: beneficiary,
54
- creditCount: ONE_ETHER,
55
- });
56
- expect(tx.address).toEqual(v6Address("JBController", chainId));
57
- expect(tx.functionName).toEqual("transferCreditsFrom");
58
- expect(tx.args).toEqual([holder, projectId, beneficiary, ONE_ETHER]);
59
- expect(() => encodeFunctionData(tx)).not.toThrow();
60
- });
61
- test("buildMintTokensTx encodes mintTokensOf with defaults", () => {
62
- const tx = buildMintTokensTx({
63
- chainId,
64
- projectId,
65
- tokenCount: ONE_ETHER,
66
- beneficiary,
67
- });
68
- expect(tx.address).toEqual(v6Address("JBController", chainId));
69
- expect(tx.functionName).toEqual("mintTokensOf");
70
- expect(tx.args).toEqual([projectId, ONE_ETHER, beneficiary, "", true]);
71
- expect(() => encodeFunctionData(tx)).not.toThrow();
72
- });
73
- test("buildMintTokensTx can skip the reserved percent", () => {
74
- const tx = buildMintTokensTx({
75
- chainId,
76
- projectId,
77
- tokenCount: ONE_ETHER,
78
- beneficiary,
79
- memo: "gm",
80
- useReservedPercent: false,
81
- });
82
- expect(tx.args).toEqual([projectId, ONE_ETHER, beneficiary, "gm", false]);
83
- });
84
- test("buildBurnTokensTx encodes burnTokensOf", () => {
85
- const tx = buildBurnTokensTx({
86
- chainId,
87
- holder,
88
- projectId,
89
- tokenCount: ONE_ETHER,
90
- });
91
- expect(tx.address).toEqual(v6Address("JBController", chainId));
92
- expect(tx.functionName).toEqual("burnTokensOf");
93
- expect(tx.args).toEqual([holder, projectId, ONE_ETHER, ""]);
94
- expect(() => encodeFunctionData(tx)).not.toThrow();
95
- });
96
- test("getTokenAddress returns null when no ERC-20 is deployed", async () => {
97
- const calls = [];
98
- const client = {
99
- async readContract(params) {
100
- calls.push(params);
101
- return zeroAddress;
102
- },
103
- };
104
- const token = await getTokenAddress(client, { chainId, projectId });
105
- expect(token).toBeNull();
106
- expect(calls[0].address).toEqual(v6Address("JBTokens", chainId));
107
- expect(calls[0].abi).toBe(jbTokensAbi);
108
- expect(calls[0].functionName).toEqual("tokenOf");
109
- expect(calls[0].args).toEqual([projectId]);
110
- });
111
- test("getTokenAddress returns the deployed ERC-20", async () => {
112
- const erc20 = "0x3333333333333333333333333333333333333333";
113
- const client = {
114
- async readContract() {
115
- return erc20;
116
- },
117
- };
118
- expect(await getTokenAddress(client, { chainId, projectId })).toEqual(erc20);
119
- });
120
- test("getCreditBalance reads creditBalanceOf(holder, projectId)", async () => {
121
- const calls = [];
122
- const client = {
123
- async readContract(params) {
124
- calls.push(params);
125
- return 42n;
126
- },
127
- };
128
- const balance = await getCreditBalance(client, {
129
- chainId,
130
- projectId,
131
- holder,
132
- });
133
- expect(balance).toEqual(42n);
134
- expect(calls[0].address).toEqual(v6Address("JBTokens", chainId));
135
- expect(calls[0].functionName).toEqual("creditBalanceOf");
136
- expect(calls[0].args).toEqual([holder, projectId]);
137
- });
138
- });
139
- //# sourceMappingURL=tokens.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokens.test.js","sourceRoot":"","sources":["../../../src/v6/tokens.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=uniswapV4.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uniswapV4.test.d.ts","sourceRoot":"","sources":["../../../src/v6/uniswapV4.test.ts"],"names":[],"mappings":""}