@bananapus/nana-sdk-core 1.1.1 → 1.3.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 (95) hide show
  1. package/dist/cjs/constants.d.ts +8 -2
  2. package/dist/cjs/constants.d.ts.map +1 -1
  3. package/dist/cjs/constants.js +9 -1
  4. package/dist/cjs/constants.js.map +1 -1
  5. package/dist/cjs/generated/juicebox.d.ts +36 -0
  6. package/dist/cjs/generated/juicebox.d.ts.map +1 -1
  7. package/dist/cjs/generated/juicebox.js +37 -1
  8. package/dist/cjs/generated/juicebox.js.map +1 -1
  9. package/dist/cjs/utils/deploy.d.ts +17 -0
  10. package/dist/cjs/utils/deploy.d.ts.map +1 -1
  11. package/dist/cjs/utils/deploy.js +49 -17
  12. package/dist/cjs/utils/deploy.js.map +1 -1
  13. package/dist/cjs/utils/deploy.test.js +41 -0
  14. package/dist/cjs/utils/deploy.test.js.map +1 -1
  15. package/dist/cjs/utils/hook.d.ts +15 -0
  16. package/dist/cjs/utils/hook.d.ts.map +1 -1
  17. package/dist/cjs/utils/hook.js +20 -0
  18. package/dist/cjs/utils/hook.js.map +1 -1
  19. package/dist/cjs/v6/cashOut.d.ts +23 -0
  20. package/dist/cjs/v6/cashOut.d.ts.map +1 -1
  21. package/dist/cjs/v6/cashOut.js +35 -0
  22. package/dist/cjs/v6/cashOut.js.map +1 -1
  23. package/dist/cjs/v6/cashOut.test.js +20 -0
  24. package/dist/cjs/v6/cashOut.test.js.map +1 -1
  25. package/dist/cjs/v6/index.d.ts +1 -0
  26. package/dist/cjs/v6/index.d.ts.map +1 -1
  27. package/dist/cjs/v6/index.js +1 -0
  28. package/dist/cjs/v6/index.js.map +1 -1
  29. package/dist/cjs/v6/nft.d.ts +98 -0
  30. package/dist/cjs/v6/nft.d.ts.map +1 -0
  31. package/dist/cjs/v6/nft.js +166 -0
  32. package/dist/cjs/v6/nft.js.map +1 -0
  33. package/dist/cjs/v6/nft.test.d.ts +2 -0
  34. package/dist/cjs/v6/nft.test.d.ts.map +1 -0
  35. package/dist/cjs/v6/nft.test.js +206 -0
  36. package/dist/cjs/v6/nft.test.js.map +1 -0
  37. package/dist/cjs/v6/omnichain.d.ts +6 -1
  38. package/dist/cjs/v6/omnichain.d.ts.map +1 -1
  39. package/dist/cjs/v6/omnichain.js +5 -1
  40. package/dist/cjs/v6/omnichain.js.map +1 -1
  41. package/dist/cjs/v6/pay.d.ts +13 -5
  42. package/dist/cjs/v6/pay.d.ts.map +1 -1
  43. package/dist/cjs/v6/pay.js +15 -18
  44. package/dist/cjs/v6/pay.js.map +1 -1
  45. package/dist/cjs/v6/pay.test.js +7 -0
  46. package/dist/cjs/v6/pay.test.js.map +1 -1
  47. package/dist/esm/constants.d.ts +8 -2
  48. package/dist/esm/constants.d.ts.map +1 -1
  49. package/dist/esm/constants.js +9 -1
  50. package/dist/esm/constants.js.map +1 -1
  51. package/dist/esm/generated/juicebox.d.ts +36 -0
  52. package/dist/esm/generated/juicebox.d.ts.map +1 -1
  53. package/dist/esm/generated/juicebox.js +36 -0
  54. package/dist/esm/generated/juicebox.js.map +1 -1
  55. package/dist/esm/utils/deploy.d.ts +17 -0
  56. package/dist/esm/utils/deploy.d.ts.map +1 -1
  57. package/dist/esm/utils/deploy.js +50 -18
  58. package/dist/esm/utils/deploy.js.map +1 -1
  59. package/dist/esm/utils/deploy.test.js +41 -0
  60. package/dist/esm/utils/deploy.test.js.map +1 -1
  61. package/dist/esm/utils/hook.d.ts +15 -0
  62. package/dist/esm/utils/hook.d.ts.map +1 -1
  63. package/dist/esm/utils/hook.js +20 -1
  64. package/dist/esm/utils/hook.js.map +1 -1
  65. package/dist/esm/v6/cashOut.d.ts +23 -0
  66. package/dist/esm/v6/cashOut.d.ts.map +1 -1
  67. package/dist/esm/v6/cashOut.js +34 -0
  68. package/dist/esm/v6/cashOut.js.map +1 -1
  69. package/dist/esm/v6/cashOut.test.js +22 -2
  70. package/dist/esm/v6/cashOut.test.js.map +1 -1
  71. package/dist/esm/v6/index.d.ts +1 -0
  72. package/dist/esm/v6/index.d.ts.map +1 -1
  73. package/dist/esm/v6/index.js +1 -0
  74. package/dist/esm/v6/index.js.map +1 -1
  75. package/dist/esm/v6/nft.d.ts +98 -0
  76. package/dist/esm/v6/nft.d.ts.map +1 -0
  77. package/dist/esm/v6/nft.js +160 -0
  78. package/dist/esm/v6/nft.js.map +1 -0
  79. package/dist/esm/v6/nft.test.d.ts +2 -0
  80. package/dist/esm/v6/nft.test.d.ts.map +1 -0
  81. package/dist/esm/v6/nft.test.js +204 -0
  82. package/dist/esm/v6/nft.test.js.map +1 -0
  83. package/dist/esm/v6/omnichain.d.ts +6 -1
  84. package/dist/esm/v6/omnichain.d.ts.map +1 -1
  85. package/dist/esm/v6/omnichain.js +6 -2
  86. package/dist/esm/v6/omnichain.js.map +1 -1
  87. package/dist/esm/v6/pay.d.ts +13 -5
  88. package/dist/esm/v6/pay.d.ts.map +1 -1
  89. package/dist/esm/v6/pay.js +17 -20
  90. package/dist/esm/v6/pay.js.map +1 -1
  91. package/dist/esm/v6/pay.test.js +7 -0
  92. package/dist/esm/v6/pay.test.js.map +1 -1
  93. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  94. package/dist/tsconfig.tsbuildinfo +1 -1
  95. package/package.json +1 -1
@@ -3,12 +3,29 @@ export declare enum MappableAsset {
3
3
  NATIVE = 0,
4
4
  USDC = 1
5
5
  }
6
+ /**
7
+ * The bridge infrastructure to deploy v6 suckers on:
8
+ *
9
+ * - `"ccip"`: Chainlink CCIP suckers. Connect any pair of supported chains and can map
10
+ * any supported asset (USDC bridges as canonical USDC via CCTP).
11
+ * - `"native"`: OP/Base/Arbitrum standard-bridge suckers. Strongest trust guarantees, but
12
+ * only connect Ethereum with an L2 (never L2<->L2), only map the native token, and
13
+ * L2->L1 exits wait out the bridge's ~7-day challenge period.
14
+ * - `"both"`: one native sucker AND one CCIP sucker per pair, for redundancy. Pairs or
15
+ * assets native bridges can't serve are covered by the CCIP sucker alone.
16
+ */
17
+ export type JBSuckerBridge = "ccip" | "native" | "both";
6
18
  export declare function parseSuckerDeployerConfig(targetChainId: JBChainId, chains: JBChainId[], assets?: MappableAsset[], opts?: {
7
19
  salt?: `0x${string}`;
8
20
  /**
9
21
  * The JB protocol version being deployed. Defaults to 5, which is also used for v4 deployments.
10
22
  */
11
23
  version?: JBVersion;
24
+ /**
25
+ * The bridge infrastructure to deploy suckers on. Defaults to "ccip".
26
+ * "native" and "both" are v6-only.
27
+ */
28
+ bridge?: JBSuckerBridge;
12
29
  }): {
13
30
  deployerConfigurations: {
14
31
  deployer: `0x${string}`;
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/utils/deploy.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQnD,oBAAY,aAAa;IACvB,MAAM,IAAA;IACN,IAAI,IAAA;CACL;AAED,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,SAAS,EACxB,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,GAAE,aAAa,EAA2B,EAChD,IAAI,GAAE;IACJ,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;CAChB;;;;;;;;;;;;;;;;;;;EAuDP"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/utils/deploy.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQnD,oBAAY,aAAa;IACvB,MAAM,IAAA;IACN,IAAI,IAAA;CACL;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAExD,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,SAAS,EACxB,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,GAAE,aAAa,EAA2B,EAChD,IAAI,GAAE;IACJ,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;CACpB;;;;;;;;;;;;;;;;;;;EA+FP"}
@@ -6,7 +6,7 @@ const viem_1 = require("viem");
6
6
  const constants_js_1 = require("../constants.js");
7
7
  const tx_js_1 = require("./tx.js");
8
8
  // NOTE: A default of `0` is safe as long as we are deploying CCIP suckers, this is not a safe default for non-ccip suckers.
9
- // Currently the SDK is only able to deploy CCIP suckers so this is a safe default, but in case that changes this should be refactored.
9
+ // v4/v5 deployments (which take a min bridge amount) are CCIP-only, so this is a safe default.
10
10
  const DEFAULT_MIN_BRIDGE_AMOUNT = BigInt(0);
11
11
  // Assets that the SDK has built-in support for mapping.
12
12
  var MappableAsset;
@@ -15,10 +15,14 @@ var MappableAsset;
15
15
  MappableAsset[MappableAsset["USDC"] = 1] = "USDC";
16
16
  })(MappableAsset || (exports.MappableAsset = MappableAsset = {}));
17
17
  function parseSuckerDeployerConfig(targetChainId, chains, assets = [MappableAsset.NATIVE], opts = {}) {
18
- const deployerAddresses = constants_js_1.CCIP_SUCKER_DEPLOYER_ADDRESSES[opts.version === 6 ? 6 : 5];
18
+ const bridge = opts.bridge ?? "ccip";
19
+ if (bridge !== "ccip" && opts.version !== 6) {
20
+ throw new Error(`Native-bridge suckers are only supported for v6 deployments`);
21
+ }
22
+ const ccipDeployers = constants_js_1.CCIP_SUCKER_DEPLOYER_ADDRESSES[opts.version === 6 ? 6 : 5];
19
23
  const suckerChains = chains.filter((chainId) => chainId !== targetChainId);
20
- const getDeployer = (chainId) => {
21
- const deployer = deployerAddresses[targetChainId]?.[chainId];
24
+ const getCcipDeployer = (chainId) => {
25
+ const deployer = ccipDeployers[targetChainId]?.[chainId];
22
26
  if (!deployer) {
23
27
  throw new Error(`No deployer found for ${targetChainId} -> ${chainId}`);
24
28
  }
@@ -35,23 +39,51 @@ function parseSuckerDeployerConfig(targetChainId, chains, assets = [MappableAsse
35
39
  };
36
40
  }
37
41
  };
42
+ // v6 mappings identify remote tokens as bytes32 and no longer take a min bridge amount.
43
+ const toV6Mapping = (asset, chainId) => {
44
+ const { localToken, remoteToken } = getTokens(asset, chainId);
45
+ return {
46
+ localToken,
47
+ minGas: 200_000,
48
+ remoteToken: (0, viem_1.pad)(remoteToken),
49
+ };
50
+ };
51
+ // The native-bridge sucker config for one (local -> remote) pair, or undefined when
52
+ // the pair/assets can't go native but the CCIP sucker covers them (bridge "both").
53
+ const v6NativeConfigFor = (chainId) => {
54
+ const deployer = constants_js_1.NATIVE_SUCKER_DEPLOYER_ADDRESSES[6][targetChainId]?.[chainId];
55
+ // Standard bridges deliver bridge-wrapped tokens (USDC.e, never canonical USDC),
56
+ // which would strand funds on the remote sucker — only map the native token.
57
+ const nativeAssets = assets.filter((asset) => asset === MappableAsset.NATIVE);
58
+ if (deployer && nativeAssets.length > 0) {
59
+ return {
60
+ deployer,
61
+ peer: viem_1.zeroHash,
62
+ mappings: nativeAssets.map((asset) => toV6Mapping(asset, chainId)),
63
+ };
64
+ }
65
+ if (bridge === "both")
66
+ return undefined;
67
+ throw new Error(deployer
68
+ ? `Only the native token can bridge over native bridges (they deliver bridge-wrapped tokens like USDC.e); use bridge "ccip" or "both" to map other assets`
69
+ : `No native bridge between ${targetChainId} and ${chainId} (native bridges only connect Ethereum with an L2); use bridge "ccip" or "both"`);
70
+ };
38
71
  // v6 configs identify remote tokens/peers as bytes32 (a zero peer means the default
39
- // same-address deterministic peer), and no longer take a min bridge amount.
72
+ // same-address deterministic peer). One config per (remote chain, bridge kind) pair.
40
73
  const deployerConfigurations = opts.version === 6
41
- ? suckerChains.map((chainId) => ({
42
- deployer: getDeployer(chainId),
43
- peer: viem_1.zeroHash,
44
- mappings: assets.map((asset) => {
45
- const { localToken, remoteToken } = getTokens(asset, chainId);
46
- return {
47
- localToken,
48
- minGas: 200_000,
49
- remoteToken: (0, viem_1.pad)(remoteToken),
74
+ ? suckerChains.flatMap((chainId) => {
75
+ const native = bridge === "ccip" ? undefined : v6NativeConfigFor(chainId);
76
+ const ccip = bridge === "native"
77
+ ? undefined
78
+ : {
79
+ deployer: getCcipDeployer(chainId),
80
+ peer: viem_1.zeroHash,
81
+ mappings: assets.map((asset) => toV6Mapping(asset, chainId)),
50
82
  };
51
- }),
52
- }))
83
+ return [...(native ? [native] : []), ...(ccip ? [ccip] : [])];
84
+ })
53
85
  : suckerChains.map((chainId) => ({
54
- deployer: getDeployer(chainId),
86
+ deployer: getCcipDeployer(chainId),
55
87
  mappings: assets.map((asset) => ({
56
88
  ...getTokens(asset, chainId),
57
89
  minGas: 200_000,
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/utils/deploy.ts"],"names":[],"mappings":";;;AAmBA,8DAiEC;AApFD,+BAAqC;AACrC,kDAIyB;AAEzB,mCAAqC;AAErC,4HAA4H;AAC5H,uIAAuI;AACvI,MAAM,yBAAyB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAE5C,wDAAwD;AACxD,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,qDAAM,CAAA;IACN,iDAAI,CAAA;AACN,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB;AAED,SAAgB,yBAAyB,CACvC,aAAwB,EACxB,MAAmB,EACnB,SAA0B,CAAC,aAAa,CAAC,MAAM,CAAC,EAChD,OAMI,EAAE;IAEN,MAAM,iBAAiB,GACrB,6CAA8B,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC;IAE3E,MAAM,WAAW,GAAG,CAAC,OAAkB,EAAE,EAAE;QACzC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,yBAAyB,aAAa,OAAO,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,KAAoB,EAAE,OAAkB,EAAE,EAAE;QAC7D,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,aAAa,CAAC,MAAM;gBACvB,OAAO,EAAE,UAAU,EAAE,2BAAY,EAAE,WAAW,EAAE,2BAAY,EAAE,CAAC;YACjE,KAAK,aAAa,CAAC,IAAI;gBACrB,OAAO;oBACL,UAAU,EAAE,6BAAc,CAAC,aAAa,CAAC;oBACzC,WAAW,EAAE,6BAAc,CAAC,OAAO,CAAC;iBACrC,CAAC;QACN,CAAC;IACH,CAAC,CAAC;IAEF,oFAAoF;IACpF,4EAA4E;IAC5E,MAAM,sBAAsB,GAC1B,IAAI,CAAC,OAAO,KAAK,CAAC;QAChB,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7B,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC;YAC9B,IAAI,EAAE,eAAQ;YACd,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC7B,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC9D,OAAO;oBACL,UAAU;oBACV,MAAM,EAAE,OAAO;oBACf,WAAW,EAAE,IAAA,UAAG,EAAC,WAAW,CAAC;iBAC9B,CAAC;YACJ,CAAC,CAAC;SACH,CAAC,CAAC;QACL,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7B,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC;YAC9B,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC/B,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;gBAC5B,MAAM,EAAE,OAAO;gBACf,eAAe,EAAE,yBAAyB;aAC3C,CAAC,CAAC;SACJ,CAAC,CAAC,CAAC;IAEV,OAAO;QACL,sBAAsB;QACtB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAA,kBAAU,GAAE;KAChC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/utils/deploy.ts"],"names":[],"mappings":";;;AAiCA,8DA8GC;AA/ID,+BAAqC;AACrC,kDAKyB;AAEzB,mCAAqC;AAErC,4HAA4H;AAC5H,+FAA+F;AAC/F,MAAM,yBAAyB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAE5C,wDAAwD;AACxD,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,qDAAM,CAAA;IACN,iDAAI,CAAA;AACN,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB;AAeD,SAAgB,yBAAyB,CACvC,aAAwB,EACxB,MAAmB,EACnB,SAA0B,CAAC,aAAa,CAAC,MAAM,CAAC,EAChD,OAWI,EAAE;IAEN,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;IACrC,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,aAAa,GACjB,6CAA8B,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC;IAE3E,MAAM,eAAe,GAAG,CAAC,OAAkB,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAG,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,yBAAyB,aAAa,OAAO,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,KAAoB,EAAE,OAAkB,EAAE,EAAE;QAC7D,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,aAAa,CAAC,MAAM;gBACvB,OAAO,EAAE,UAAU,EAAE,2BAAY,EAAE,WAAW,EAAE,2BAAY,EAAE,CAAC;YACjE,KAAK,aAAa,CAAC,IAAI;gBACrB,OAAO;oBACL,UAAU,EAAE,6BAAc,CAAC,aAAa,CAAC;oBACzC,WAAW,EAAE,6BAAc,CAAC,OAAO,CAAC;iBACrC,CAAC;QACN,CAAC;IACH,CAAC,CAAC;IAEF,wFAAwF;IACxF,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAE,OAAkB,EAAE,EAAE;QAC/D,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9D,OAAO;YACL,UAAU;YACV,MAAM,EAAE,OAAO;YACf,WAAW,EAAE,IAAA,UAAG,EAAC,WAAW,CAAC;SAC9B,CAAC;IACJ,CAAC,CAAC;IAEF,oFAAoF;IACpF,mFAAmF;IACnF,MAAM,iBAAiB,GAAG,CAAC,OAAkB,EAAE,EAAE;QAC/C,MAAM,QAAQ,GAAG,+CAAgC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAC/E,iFAAiF;QACjF,6EAA6E;QAC7E,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAChC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,aAAa,CAAC,MAAM,CAC1C,CAAC;QACF,IAAI,QAAQ,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,OAAO;gBACL,QAAQ;gBACR,IAAI,EAAE,eAAQ;gBACd,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;aACnE,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,SAAS,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,QAAQ;YACN,CAAC,CAAC,wJAAwJ;YAC1J,CAAC,CAAC,4BAA4B,aAAa,QAAQ,OAAO,iFAAiF,CAC9I,CAAC;IACJ,CAAC,CAAC;IAEF,oFAAoF;IACpF,qFAAqF;IACrF,MAAM,sBAAsB,GAC1B,IAAI,CAAC,OAAO,KAAK,CAAC;QAChB,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/B,MAAM,MAAM,GACV,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC7D,MAAM,IAAI,GACR,MAAM,KAAK,QAAQ;gBACjB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC;oBACE,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC;oBAClC,IAAI,EAAE,eAAQ;oBACd,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;iBAC7D,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC;QACJ,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7B,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC;YAClC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC/B,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;gBAC5B,MAAM,EAAE,OAAO;gBACf,eAAe,EAAE,yBAAyB;aAC3C,CAAC,CAAC;SACJ,CAAC,CAAC,CAAC;IAEV,OAAO;QACL,sBAAsB;QACtB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAA,kBAAU,GAAE;KAChC,CAAC;AACJ,CAAC"}
@@ -21,4 +21,45 @@ const tx_js_1 = require("./tx.js");
21
21
  (0, vitest_1.expect)(result.salt).toBe(salt);
22
22
  });
23
23
  });
24
+ (0, vitest_1.describe)("v6 bridge selection", () => {
25
+ (0, vitest_1.test)("native bridges from mainnet to each L2", () => {
26
+ const result = (0, deploy_js_1.parseSuckerDeployerConfig)(chains_1.mainnet.id, [chains_1.optimism.id, chains_1.arbitrum.id, chains_1.base.id], [deploy_js_1.MappableAsset.NATIVE], { version: 6, bridge: "native" });
27
+ (0, vitest_1.expect)(result.deployerConfigurations.length).toBe(3);
28
+ (0, vitest_1.expect)(result.deployerConfigurations[0].deployer).toBe("0x298a775c030adcedb641a89d9047ec9972674e1a");
29
+ });
30
+ (0, vitest_1.test)("both deploys a native and a CCIP sucker per L1<->L2 pair", () => {
31
+ const result = (0, deploy_js_1.parseSuckerDeployerConfig)(chains_1.mainnet.id, [chains_1.optimism.id], [deploy_js_1.MappableAsset.NATIVE], { version: 6, bridge: "both" });
32
+ (0, vitest_1.expect)(result.deployerConfigurations.length).toBe(2);
33
+ const [native, ccip] = result.deployerConfigurations;
34
+ (0, vitest_1.expect)(native.deployer).not.toBe(ccip.deployer);
35
+ });
36
+ (0, vitest_1.test)("both falls back to CCIP alone for L2<->L2 pairs", () => {
37
+ const result = (0, deploy_js_1.parseSuckerDeployerConfig)(chains_1.optimism.id, [chains_1.base.id], [deploy_js_1.MappableAsset.NATIVE], { version: 6, bridge: "both" });
38
+ (0, vitest_1.expect)(result.deployerConfigurations.length).toBe(1);
39
+ });
40
+ (0, vitest_1.test)("native throws for L2<->L2 pairs", () => {
41
+ (0, vitest_1.expect)(() => (0, deploy_js_1.parseSuckerDeployerConfig)(chains_1.optimism.id, [chains_1.base.id], [deploy_js_1.MappableAsset.NATIVE], {
42
+ version: 6,
43
+ bridge: "native",
44
+ })).toThrow(/native bridges only connect Ethereum with an L2/);
45
+ });
46
+ (0, vitest_1.test)("native throws for USDC (bridge-wrapped USDC.e trap)", () => {
47
+ (0, vitest_1.expect)(() => (0, deploy_js_1.parseSuckerDeployerConfig)(chains_1.mainnet.id, [chains_1.optimism.id], [deploy_js_1.MappableAsset.USDC], {
48
+ version: 6,
49
+ bridge: "native",
50
+ })).toThrow(/USDC\.e/);
51
+ });
52
+ (0, vitest_1.test)("both keeps USDC on the CCIP sucker only", () => {
53
+ const result = (0, deploy_js_1.parseSuckerDeployerConfig)(chains_1.mainnet.id, [chains_1.optimism.id], [deploy_js_1.MappableAsset.NATIVE, deploy_js_1.MappableAsset.USDC], { version: 6, bridge: "both" });
54
+ (0, vitest_1.expect)(result.deployerConfigurations.length).toBe(2);
55
+ const [native, ccip] = result.deployerConfigurations;
56
+ (0, vitest_1.expect)(native.mappings.length).toBe(1); // native token only
57
+ (0, vitest_1.expect)(ccip.mappings.length).toBe(2); // native + USDC
58
+ });
59
+ (0, vitest_1.test)("native is rejected for pre-v6 deployments", () => {
60
+ (0, vitest_1.expect)(() => (0, deploy_js_1.parseSuckerDeployerConfig)(chains_1.mainnet.id, [chains_1.optimism.id], [deploy_js_1.MappableAsset.NATIVE], {
61
+ bridge: "native",
62
+ })).toThrow(/only supported for v6/);
63
+ });
64
+ });
24
65
  //# sourceMappingURL=deploy.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.test.js","sourceRoot":"","sources":["../../../src/utils/deploy.test.ts"],"names":[],"mappings":";;AAAA,mCAAgD;AAChD,2CAAuE;AACvE,wCAAgE;AAChE,mCAAqC;AAErC,IAAA,iBAAQ,EAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAA,aAAI,EAAC,6DAA6D,EAAE,GAAG,EAAE;QACvE,MAAM,MAAM,GAAG,IAAA,qCAAyB,EACtC,gBAAO,CAAC,EAAE,EACV,CAAC,iBAAQ,CAAC,EAAE,EAAE,iBAAQ,CAAC,EAAE,EAAE,aAAI,CAAC,EAAE,CAAC,EACnC,CAAC,yBAAa,CAAC,IAAI,EAAE,yBAAa,CAAC,MAAM,CAAC,CAC3C,CAAC;QAEF,8FAA8F;QAC9F,IAAA,eAAM,EAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAErD,8EAA8E;QAC9E,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACzC,IAAA,eAAM,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,oCAAoC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG,IAAA,kBAAU,GAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAA,qCAAyB,EACtC,gBAAO,CAAC,EAAE,EACV,CAAC,iBAAQ,CAAC,EAAE,EAAE,iBAAQ,CAAC,EAAE,EAAE,aAAI,CAAC,EAAE,CAAC,EACnC,CAAC,yBAAa,CAAC,MAAM,CAAC,EACtB,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;QAEF,mDAAmD;QACnD,IAAA,eAAM,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"deploy.test.js","sourceRoot":"","sources":["../../../src/utils/deploy.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,18 @@
1
+ import { Address, Hex } from "viem";
2
+ /**
3
+ * The metadata lookup id a JB hook resolves via `JBMetadataResolver.getId`:
4
+ * `bytes4(bytes20(target) ^ bytes20(keccak256(purpose)))`.
5
+ *
6
+ * For JB721 hooks, `target` MUST be the hook's `METADATA_ID_TARGET` — which is
7
+ * `address(this)` in the *implementation's* constructor, so every delegatecall
8
+ * clone reports the shared implementation address, NOT its own clone address.
9
+ * Passing the clone address yields an id the hook never matches, so the pay or
10
+ * cash out silently ignores the tier/token payload. Resolve the target with
11
+ * `get721MetadataIdTarget` rather than passing a hook address directly.
12
+ *
13
+ * @link https://github.com/Bananapus/nana-core-v6/blob/main/src/libraries/JBMetadataResolver.sol (`getId`)
14
+ */
15
+ export declare function hookMetadataId(target: Address, purpose: string): Hex;
1
16
  /**
2
17
  *
3
18
  * Create metadata for pay or redeem hooks.
@@ -1 +1 @@
1
- {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/utils/hook.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,iBA8CpE"}
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/utils/hook.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAEP,GAAG,EAMJ,MAAM,MAAM,CAAC;AAEd;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,GAAG,CAKpE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,iBA8CpE"}
@@ -1,7 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hookMetadataId = hookMetadataId;
3
4
  exports.createHookMetadata = createHookMetadata;
4
5
  const viem_1 = require("viem");
6
+ /**
7
+ * The metadata lookup id a JB hook resolves via `JBMetadataResolver.getId`:
8
+ * `bytes4(bytes20(target) ^ bytes20(keccak256(purpose)))`.
9
+ *
10
+ * For JB721 hooks, `target` MUST be the hook's `METADATA_ID_TARGET` — which is
11
+ * `address(this)` in the *implementation's* constructor, so every delegatecall
12
+ * clone reports the shared implementation address, NOT its own clone address.
13
+ * Passing the clone address yields an id the hook never matches, so the pay or
14
+ * cash out silently ignores the tier/token payload. Resolve the target with
15
+ * `get721MetadataIdTarget` rather than passing a hook address directly.
16
+ *
17
+ * @link https://github.com/Bananapus/nana-core-v6/blob/main/src/libraries/JBMetadataResolver.sol (`getId`)
18
+ */
19
+ function hookMetadataId(target, purpose) {
20
+ const targetBytes = (0, viem_1.toBytes)(target).slice(0, 20);
21
+ const purposeBytes = (0, viem_1.toBytes)((0, viem_1.keccak256)((0, viem_1.toBytes)(purpose))).slice(0, 20);
22
+ const xored = targetBytes.map((byte, i) => byte ^ purposeBytes[i]);
23
+ return (0, viem_1.bytesToHex)(xored.slice(0, 4));
24
+ }
5
25
  /**
6
26
  *
7
27
  * Create metadata for pay or redeem hooks.
@@ -1 +1 @@
1
- {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../src/utils/hook.ts"],"names":[],"mappings":";;AASA,gDA8CC;AAvDD,+BAAoD;AAEpD;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,GAAa,EAAE,SAAmB;IACnE,gBAAgB;IAChB,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAExE,oEAAoE;IACpE,IAAI,QAAQ,GAAG,IAAA,mBAAY,EAAC,CAAC,SAAS,CAAC,EAAE,CAAC,eAAQ,CAAC,CAAC,CAAC;IAErD,oEAAoE;IACpE,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,sFAAsF;IACtF,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEjC,kHAAkH;IAClH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,8BAA8B;QAC9B,QAAQ,IAAI,IAAA,mBAAY,EAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEhE,QAAQ,IAAI,IAAA,mBAAY,EAAC,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvD,kFAAkF;QAClF,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;QAEnC,wBAAwB;QACxB,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC5D,CAAC;IAED,qCAAqC;IACrC,IAAI,YAAY,GACd,QAAQ,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC;QACxB,CAAC,CAAC,QAAQ,CAAC,MAAM;QACjB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAE/C,yBAAyB;IACzB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,GAAG,CAAS,CAAC;IAE1D,0DAA0D;IAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,2BAA2B;QAC3B,QAAQ,IAAI,IAAA,mBAAY,EACtB,CAAC,OAAO,CAAC,EACT,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAS,CAAC,CACjD,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACb,CAAC;IAED,2BAA2B;IAC3B,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../src/utils/hook.ts"],"names":[],"mappings":";;AAwBA,wCAKC;AASD,gDA8CC;AApFD,+BASc;AAEd;;;;;;;;;;;;GAYG;AACH,SAAgB,cAAc,CAAC,MAAe,EAAE,OAAe;IAC7D,MAAM,WAAW,GAAG,IAAA,cAAO,EAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,cAAO,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,OAAO,IAAA,iBAAU,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,GAAa,EAAE,SAAmB;IACnE,gBAAgB;IAChB,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAExE,oEAAoE;IACpE,IAAI,QAAQ,GAAG,IAAA,mBAAY,EAAC,CAAC,SAAS,CAAC,EAAE,CAAC,eAAQ,CAAC,CAAC,CAAC;IAErD,oEAAoE;IACpE,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,sFAAsF;IACtF,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEjC,kHAAkH;IAClH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,8BAA8B;QAC9B,QAAQ,IAAI,IAAA,mBAAY,EAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEhE,QAAQ,IAAI,IAAA,mBAAY,EAAC,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvD,kFAAkF;QAClF,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;QAEnC,wBAAwB;QACxB,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC5D,CAAC;IAED,qCAAqC;IACrC,IAAI,YAAY,GACd,QAAQ,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC;QACxB,CAAC,CAAC,QAAQ,CAAC,MAAM;QACjB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAE/C,yBAAyB;IACzB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,GAAG,CAAS,CAAC;IAE1D,0DAA0D;IAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,2BAA2B;QAC3B,QAAQ,IAAI,IAAA,mBAAY,EACtB,CAAC,OAAO,CAAC,EACT,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAS,CAAC,CACjD,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACb,CAAC;IAED,2BAA2B;IAC3B,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -40,6 +40,29 @@ export declare function buildCashOutTx({ chainId, terminal, holder, projectId, c
40
40
  beneficiary: Address;
41
41
  metadata?: Hex;
42
42
  }): V6CashOutTxRequest;
43
+ /**
44
+ * Build cash-out metadata instructing a project's JB721 tiers hook to burn
45
+ * specific NFTs and reclaim their share of surplus.
46
+ *
47
+ * The payload is `abi.encode(uint256[] tokenIds)`, keyed by the hook's cash-out
48
+ * metadata id (`bytes4(bytes20(metadataIdTarget) ^ bytes20(keccak256("cashOut")))`)
49
+ * and packed into the JBMetadataResolver word-offset-table format. This is the
50
+ * cash-out mirror of {@link build721PayMetadata}. The NFTs are burned by the hook
51
+ * itself, so no ERC-721 approval is needed; pass `cashOutCount: 0` to
52
+ * `cashOutTokensOf` (fungible tokens cannot co-redeem in the same call).
53
+ *
54
+ * @param args.metadataIdTarget The hook's `METADATA_ID_TARGET` — the shared
55
+ * *implementation* address, NOT the project's clone hook address (see
56
+ * {@link get721MetadataIdTarget}). Passing the clone address makes the hook ignore
57
+ * the token ids and no NFTs are burned.
58
+ * @param args.tokenIds The token ids of the NFTs to redeem. Must be non-empty,
59
+ * unique, and non-zero (a real NFT token id is never 0).
60
+ * @returns The metadata to pass as `cashOutTokensOf`'s `metadata` argument.
61
+ */
62
+ export declare function build721CashOutMetadata({ metadataIdTarget, tokenIds, }: {
63
+ metadataIdTarget: Address;
64
+ tokenIds: bigint[];
65
+ }): Hex;
43
66
  /**
44
67
  * A cash out quote.
45
68
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cashOut.d.ts","sourceRoot":"","sources":["../../../src/v6/cashOut.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EACL,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKxC;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,kBAAkB,CAAC;IAC/B,YAAY,EAAE,iBAAiB,CAAC;IAChC,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;CACzE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,YAAY,EACZ,cAAc,EACd,kBAAuB,EACvB,WAAW,EACX,QAAe,GAChB,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,GAAG,kBAAkB,CAgBrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,EACE,OAAO,EACP,SAAS,EACT,YAAY,EACZ,QAAc,EACd,QAA2C,GAC5C,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,YAAY,CAAC,CAYvB"}
1
+ {"version":3,"file":"cashOut.d.ts","sourceRoot":"","sources":["../../../src/v6/cashOut.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAuB,MAAM,MAAM,CAAC;AACvE,OAAO,EACL,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAMxC;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,kBAAkB,CAAC;IAC/B,YAAY,EAAE,iBAAiB,CAAC;IAChC,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;CACzE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,YAAY,EACZ,cAAc,EACd,kBAAuB,EACvB,WAAW,EACX,QAAe,GAChB,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,GAAG,kBAAkB,CAgBrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,gBAAgB,EAChB,QAAQ,GACT,EAAE;IACD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,GAAG,GAAG,CAiBN;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,EACE,OAAO,EACP,SAAS,EACT,YAAY,EACZ,QAAc,EACd,QAA2C,GAC5C,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,YAAY,CAAC,CAYvB"}
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildCashOutTx = buildCashOutTx;
4
+ exports.build721CashOutMetadata = build721CashOutMetadata;
4
5
  exports.getCashOutQuote = getCashOutQuote;
6
+ const viem_1 = require("viem");
5
7
  const juicebox_js_1 = require("../generated/juicebox.js");
6
8
  const fee_js_1 = require("../utils/fee.js");
9
+ const hook_js_1 = require("../utils/hook.js");
7
10
  const currency_js_1 = require("./currency.js");
8
11
  const types_js_1 = require("./types.js");
9
12
  /**
@@ -40,6 +43,38 @@ function buildCashOutTx({ chainId, terminal, holder, projectId, cashOutCount, to
40
43
  ],
41
44
  };
42
45
  }
46
+ /**
47
+ * Build cash-out metadata instructing a project's JB721 tiers hook to burn
48
+ * specific NFTs and reclaim their share of surplus.
49
+ *
50
+ * The payload is `abi.encode(uint256[] tokenIds)`, keyed by the hook's cash-out
51
+ * metadata id (`bytes4(bytes20(metadataIdTarget) ^ bytes20(keccak256("cashOut")))`)
52
+ * and packed into the JBMetadataResolver word-offset-table format. This is the
53
+ * cash-out mirror of {@link build721PayMetadata}. The NFTs are burned by the hook
54
+ * itself, so no ERC-721 approval is needed; pass `cashOutCount: 0` to
55
+ * `cashOutTokensOf` (fungible tokens cannot co-redeem in the same call).
56
+ *
57
+ * @param args.metadataIdTarget The hook's `METADATA_ID_TARGET` — the shared
58
+ * *implementation* address, NOT the project's clone hook address (see
59
+ * {@link get721MetadataIdTarget}). Passing the clone address makes the hook ignore
60
+ * the token ids and no NFTs are burned.
61
+ * @param args.tokenIds The token ids of the NFTs to redeem. Must be non-empty,
62
+ * unique, and non-zero (a real NFT token id is never 0).
63
+ * @returns The metadata to pass as `cashOutTokensOf`'s `metadata` argument.
64
+ */
65
+ function build721CashOutMetadata({ metadataIdTarget, tokenIds, }) {
66
+ if (tokenIds.length === 0) {
67
+ throw new Error("build721CashOutMetadata requires at least one token id");
68
+ }
69
+ if (new Set(tokenIds.map(String)).size !== tokenIds.length) {
70
+ throw new Error("build721CashOutMetadata token ids must be unique");
71
+ }
72
+ if (tokenIds.some((tokenId) => tokenId <= 0n)) {
73
+ throw new Error("build721CashOutMetadata token ids must be positive");
74
+ }
75
+ const payload = (0, viem_1.encodeAbiParameters)([{ type: "uint256[]" }], [tokenIds]);
76
+ return (0, hook_js_1.createHookMetadata)([(0, hook_js_1.hookMetadataId)(metadataIdTarget, "cashOut")], [payload]);
77
+ }
43
78
  /**
44
79
  * Quote the surplus reclaimed by cashing out `cashOutCount` project tokens, via
45
80
  * `JBTerminalStore.currentReclaimableSurplusOf(projectId, cashOutCount, [], [],
@@ -1 +1 @@
1
- {"version":3,"file":"cashOut.js","sourceRoot":"","sources":["../../../src/v6/cashOut.ts"],"names":[],"mappings":";;AAuCA,wCAoCC;AAyCD,0CA2BC;AA9ID,0DAGkC;AAElC,4CAAuD;AACvD,+CAAyD;AACzD,yCAAuC;AAcvC;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,YAAY,EACZ,cAAc,EACd,kBAAkB,GAAG,EAAE,EACvB,WAAW,EACX,QAAQ,GAAG,IAAI,GAWhB;IACC,OAAO;QACL,OAAO;QACP,OAAO,EAAE,QAAQ;QACjB,GAAG,EAAE,gCAAkB;QACvB,YAAY,EAAE,iBAAiB;QAC/B,IAAI,EAAE;YACJ,MAAM;YACN,SAAS;YACT,YAAY;YACZ,cAAc;YACd,kBAAkB;YAClB,WAAW;YACX,QAAQ;SACT;KACF,CAAC;AACJ,CAAC;AAmBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACI,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,EACE,OAAO,EACP,SAAS,EACT,YAAY,EACZ,QAAQ,GAAG,GAAG,EACd,QAAQ,GAAG,MAAM,CAAC,sCAAwB,CAAC,GAO5C;IAED,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;QAC9C,OAAO,EAAE,IAAA,oBAAS,EAAC,iBAAiB,EAAE,OAAO,CAAC;QAC9C,GAAG,EAAE,gCAAkB;QACvB,YAAY,EAAE,6BAA6B;QAC3C,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC;KAC5D,CAAC,CAAC;IAEH,OAAO;QACL,aAAa;QACb,qBAAqB,EAAE,IAAA,6BAAoB,EAAC,aAAa,CAAC;KAC3D,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"cashOut.js","sourceRoot":"","sources":["../../../src/v6/cashOut.ts"],"names":[],"mappings":";;AAwCA,wCAoCC;AAqBD,0DAuBC;AAyCD,0CA2BC;AA5LD,+BAAuE;AACvE,0DAGkC;AAElC,4CAAuD;AACvD,8CAAsE;AACtE,+CAAyD;AACzD,yCAAuC;AAcvC;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,YAAY,EACZ,cAAc,EACd,kBAAkB,GAAG,EAAE,EACvB,WAAW,EACX,QAAQ,GAAG,IAAI,GAWhB;IACC,OAAO;QACL,OAAO;QACP,OAAO,EAAE,QAAQ;QACjB,GAAG,EAAE,gCAAkB;QACvB,YAAY,EAAE,iBAAiB;QAC/B,IAAI,EAAE;YACJ,MAAM;YACN,SAAS;YACT,YAAY;YACZ,cAAc;YACd,kBAAkB;YAClB,WAAW;YACX,QAAQ;SACT;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,uBAAuB,CAAC,EACtC,gBAAgB,EAChB,QAAQ,GAIT;IACC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,0BAAmB,EAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEzE,OAAO,IAAA,4BAAkB,EACvB,CAAC,IAAA,wBAAc,EAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,EAC7C,CAAC,OAAO,CAAC,CACH,CAAC;AACX,CAAC;AAmBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACI,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,EACE,OAAO,EACP,SAAS,EACT,YAAY,EACZ,QAAQ,GAAG,GAAG,EACd,QAAQ,GAAG,MAAM,CAAC,sCAAwB,CAAC,GAO5C;IAED,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;QAC9C,OAAO,EAAE,IAAA,oBAAS,EAAC,iBAAiB,EAAE,OAAO,CAAC;QAC9C,GAAG,EAAE,gCAAkB;QACvB,YAAY,EAAE,6BAA6B;QAC3C,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC;KAC5D,CAAC,CAAC;IAEH,OAAO;QACL,aAAa;QACb,qBAAqB,EAAE,IAAA,6BAAoB,EAAC,aAAa,CAAC;KAC3D,CAAC;AACJ,CAAC"}
@@ -98,5 +98,25 @@ const projectId = 3n;
98
98
  0x3606eb48n,
99
99
  ]);
100
100
  });
101
+ (0, vitest_1.test)("build721CashOutMetadata packs the cashOut id and token ids", () => {
102
+ // With a target whose first 4 bytes are zero, the id is the first 4 bytes
103
+ // of keccak256("cashOut").
104
+ const metadata = (0, cashOut_js_1.build721CashOutMetadata)({
105
+ metadataIdTarget: "0x00000000000000000000000000000000DeaDBeef",
106
+ tokenIds: [1000000001n, 1000000002n],
107
+ });
108
+ (0, vitest_1.expect)((0, viem_1.sliceHex)(metadata, 0, 32)).toEqual(`0x${"00".repeat(32)}`);
109
+ // keccak256("cashOut") first 4 bytes, then the payload word offset (2).
110
+ (0, vitest_1.expect)((0, viem_1.sliceHex)(metadata, 32, 36)).toEqual("0x86b14ff4");
111
+ (0, vitest_1.expect)((0, viem_1.sliceHex)(metadata, 36, 37)).toEqual("0x02");
112
+ const [tokenIds] = (0, viem_1.decodeAbiParameters)([{ type: "uint256[]" }], (0, viem_1.sliceHex)(metadata, 64));
113
+ (0, vitest_1.expect)(tokenIds).toEqual([1000000001n, 1000000002n]);
114
+ });
115
+ (0, vitest_1.test)("build721CashOutMetadata rejects empty, duplicate, and zero token ids", () => {
116
+ const target = "0x00000000000000000000000000000000DeaDBeef";
117
+ (0, vitest_1.expect)(() => (0, cashOut_js_1.build721CashOutMetadata)({ metadataIdTarget: target, tokenIds: [] })).toThrow(/at least one/);
118
+ (0, vitest_1.expect)(() => (0, cashOut_js_1.build721CashOutMetadata)({ metadataIdTarget: target, tokenIds: [1n, 1n] })).toThrow(/unique/);
119
+ (0, vitest_1.expect)(() => (0, cashOut_js_1.build721CashOutMetadata)({ metadataIdTarget: target, tokenIds: [0n] })).toThrow(/positive/);
120
+ });
101
121
  });
102
122
  //# sourceMappingURL=cashOut.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cashOut.test.js","sourceRoot":"","sources":["../../../src/v6/cashOut.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cashOut.test.js","sourceRoot":"","sources":["../../../src/v6/cashOut.test.ts"],"names":[],"mappings":";;AAAA,+BAKc;AACd,mCAAgD;AAChD,kDAA0D;AAC1D,0DAA8D;AAC9D,6CAIsB;AACtB,yCAAuC;AAEvC,MAAM,OAAO,GAAG,QAAQ,CAAC;AACzB,MAAM,QAAQ,GAAG,4CAAqD,CAAC;AACvE,MAAM,MAAM,GAAG,4CAAqD,CAAC;AACrE,MAAM,WAAW,GAAG,4CAAqD,CAAC;AAC1E,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,IAAA,iBAAQ,EAAC,SAAS,EAAE,GAAG,EAAE;IACvB,IAAA,aAAI,EAAC,wCAAwC,EAAE,GAAG,EAAE;QAClD,MAAM,EAAE,GAAG,IAAA,2BAAc,EAAC;YACxB,OAAO;YACP,QAAQ;YACR,MAAM;YACN,SAAS;YACT,YAAY,EAAE,wBAAS;YACvB,cAAc,EAAE,2BAAY;YAC5B,WAAW;SACZ,CAAC,CAAC;QAEH,IAAA,eAAM,EAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpC,IAAA,eAAM,EAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAA,eAAM,EAAC,EAAE,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACnD,IAAA,eAAM,EAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACtB,MAAM;YACN,SAAS;YACT,wBAAS;YACT,2BAAY;YACZ,EAAE;YACF,WAAW;YACX,IAAI;SACL,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,GAAG,EAAE,CAAC,IAAA,yBAAkB,EAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,+DAA+D,EAAE,GAAG,EAAE;QACzE,MAAM,EAAE,GAAG,IAAA,2BAAc,EAAC;YACxB,OAAO;YACP,QAAQ;YACR,MAAM;YACN,SAAS;YACT,YAAY,EAAE,wBAAS;YACvB,cAAc,EAAE,2BAAY;YAC5B,kBAAkB,EAAE,IAAI;YACxB,WAAW;YACX,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;QAEH,IAAA,eAAM,EAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,IAAA,eAAM,EAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAA,eAAM,EAAC,GAAG,EAAE,CAAC,IAAA,yBAAkB,EAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,KAAK,GAAU,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG;YACb,KAAK,CAAC,YAAY,CAAC,MAAe;gBAChC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnB,OAAO,wBAAS,CAAC;YACnB,CAAC;SACyB,CAAC;QAE7B,MAAM,KAAK,GAAG,MAAM,IAAA,4BAAe,EAAC,MAAM,EAAE;YAC1C,OAAO;YACP,SAAS;YACT,YAAY,EAAE,wBAAS;SACxB,CAAC,CAAC;QAEH,IAAA,eAAM,EAAC,KAAK,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,wBAAS,CAAC,CAAC;QAC/C,IAAA,eAAM,EAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAEjE,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAA,oBAAS,EAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;QACxE,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gCAAkB,CAAC,CAAC;QAC9C,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;QACrE,6EAA6E;QAC7E,6DAA6D;QAC7D,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,wBAAS,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,KAAK,GAAU,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG;YACb,KAAK,CAAC,YAAY,CAAC,MAAe;gBAChC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnB,OAAO,EAAE,CAAC;YACZ,CAAC;SACyB,CAAC;QAE7B,MAAM,IAAA,4BAAe,EAAC,MAAM,EAAE;YAC5B,OAAO;YACP,SAAS;YACT,YAAY,EAAE,wBAAS;YACvB,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,WAAW;SACtB,CAAC,CAAC;QAEH,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YAC5B,SAAS;YACT,wBAAS;YACT,EAAE;YACF,EAAE;YACF,EAAE;YACF,WAAW;SACZ,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,4DAA4D,EAAE,GAAG,EAAE;QACtE,0EAA0E;QAC1E,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,IAAA,oCAAuB,EAAC;YACvC,gBAAgB,EAAE,4CAA4C;YAC9D,QAAQ,EAAE,CAAC,WAAc,EAAE,WAAc,CAAC;SAC3C,CAAC,CAAC;QAEH,IAAA,eAAM,EAAC,IAAA,eAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,wEAAwE;QACxE,IAAA,eAAM,EAAC,IAAA,eAAQ,EAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACzD,IAAA,eAAM,EAAC,IAAA,eAAQ,EAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAA,0BAAmB,EACpC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EACvB,IAAA,eAAQ,EAAC,QAAQ,EAAE,EAAE,CAAC,CACvB,CAAC;QACF,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,WAAc,EAAE,WAAc,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,sEAAsE,EAAE,GAAG,EAAE;QAChF,MAAM,MAAM,GAAG,4CAAqD,CAAC;QACrE,IAAA,eAAM,EAAC,GAAG,EAAE,CACV,IAAA,oCAAuB,EAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CACpE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC1B,IAAA,eAAM,EAAC,GAAG,EAAE,CACV,IAAA,oCAAuB,EAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAC1E,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,IAAA,eAAM,EAAC,GAAG,EAAE,CACV,IAAA,oCAAuB,EAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CACtE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -9,6 +9,7 @@ export * from "./revnets.js";
9
9
  export * from "./terminals.js";
10
10
  export * from "./pay.js";
11
11
  export * from "./cashOut.js";
12
+ export * from "./nft.js";
12
13
  export * from "./tokens.js";
13
14
  export * from "./permissions.js";
14
15
  export * from "./suckers.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/v6/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/v6/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -25,6 +25,7 @@ __exportStar(require("./revnets.js"), exports);
25
25
  __exportStar(require("./terminals.js"), exports);
26
26
  __exportStar(require("./pay.js"), exports);
27
27
  __exportStar(require("./cashOut.js"), exports);
28
+ __exportStar(require("./nft.js"), exports);
28
29
  __exportStar(require("./tokens.js"), exports);
29
30
  __exportStar(require("./permissions.js"), exports);
30
31
  __exportStar(require("./suckers.js"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v6/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,gDAA8B;AAC9B,4CAA0B;AAC1B,8CAA4B;AAC5B,iDAA+B;AAC/B,gDAA8B;AAC9B,8CAA4B;AAC5B,+CAA6B;AAC7B,iDAA+B;AAC/B,2CAAyB;AACzB,+CAA6B;AAC7B,8CAA4B;AAC5B,mDAAiC;AACjC,+CAA6B;AAC7B,6CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v6/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,gDAA8B;AAC9B,4CAA0B;AAC1B,8CAA4B;AAC5B,iDAA+B;AAC/B,gDAA8B;AAC9B,8CAA4B;AAC5B,+CAA6B;AAC7B,iDAA+B;AAC/B,2CAAyB;AACzB,+CAA6B;AAC7B,2CAAyB;AACzB,8CAA4B;AAC5B,mDAAiC;AACjC,+CAA6B;AAC7B,6CAA2B"}
@@ -0,0 +1,98 @@
1
+ import { Address, Hex, PublicClient } from "viem";
2
+ import { JBChainId } from "../types.js";
3
+ /**
4
+ * JB721TiersHookStore's `DISCOUNT_DENOMINATOR`: a tier's `discountPercent` is
5
+ * out of 200, so the shopper-facing "% off" is `discountPercent / 2`.
6
+ */
7
+ export declare const DISCOUNT_DENOMINATOR = 200n;
8
+ /**
9
+ * A tier's effective (discounted) price, matching the on-chain formula in
10
+ * JB721TiersHookStore: `price - mulDiv(price, discountPercent, 200)` with
11
+ * integer-floor division.
12
+ *
13
+ * @param price The tier's full (undiscounted) price.
14
+ * @param discountPercent The tier's discount, out of 200 (`DISCOUNT_DENOMINATOR`).
15
+ */
16
+ export declare function effectiveTierPrice(price: bigint, discountPercent: number | bigint): bigint;
17
+ /**
18
+ * A single 721 tier a project sells.
19
+ */
20
+ export interface Project721Tier {
21
+ id: number;
22
+ /** Full (undiscounted) price in the shop's pricing terms. */
23
+ price: bigint;
24
+ remainingSupply: number;
25
+ initialSupply: number;
26
+ votingUnits: bigint;
27
+ reserveFrequency: number;
28
+ category: number;
29
+ /** Out of 200 — see {@link DISCOUNT_DENOMINATOR}. */
30
+ discountPercent: number;
31
+ encodedIpfsUri: Hex;
32
+ /** tokenUriResolver output (data URI), or "" if the hook has no resolver. */
33
+ resolvedUri: string;
34
+ }
35
+ /**
36
+ * A project's resolved 721 tiers hook ("shop"): the hook, its store, the
37
+ * metadata id target for pay/cash-out metadata, the pricing context, and tiers.
38
+ */
39
+ export interface Project721Shop {
40
+ /** The project's 721 tiers hook (the ruleset data hook / revnet hook). */
41
+ hook: Address;
42
+ /** The hook's tiers store. */
43
+ store: Address;
44
+ /**
45
+ * The hook's `METADATA_ID_TARGET` (shared implementation address). Pass this
46
+ * to {@link build721PayMetadata} / {@link build721CashOutMetadata}, never the
47
+ * `hook` address.
48
+ */
49
+ metadataIdTarget: Address;
50
+ /** The hook's pricing context: `currency` id and `decimals`. */
51
+ pricing: {
52
+ currency: number;
53
+ decimals: number;
54
+ };
55
+ tiers: Project721Tier[];
56
+ }
57
+ /**
58
+ * Read a JB721 hook's `METADATA_ID_TARGET` — the shared *implementation* address
59
+ * that pay/cash-out metadata ids must key off (a delegatecall clone reports the
60
+ * implementation, not itself). Falls back to `hook` if the read reverts (e.g. an
61
+ * older hook without the getter), which is only correct for a non-clone hook.
62
+ *
63
+ * @param client A viem public client on the given chain.
64
+ * @param args.hook The project's 721 tiers hook (clone) address.
65
+ */
66
+ export declare function get721MetadataIdTarget(client: PublicClient, { hook }: {
67
+ chainId: JBChainId;
68
+ hook: Address;
69
+ }): Promise<Address>;
70
+ /**
71
+ * Resolve a project's 721 tiers hook, its store, metadata id target, pricing
72
+ * context, and tiers in one call.
73
+ *
74
+ * Hook resolution mirrors the app patterns: revnets read
75
+ * `REVOwner.tiered721HookOf`; custom projects read the current ruleset's pay
76
+ * data hook — either the omnichain deployer (the real hook lives in
77
+ * `JBOmnichainDeployer.tiered721HookOf(projectId, rulesetId)`) or the 721 hook
78
+ * itself, verified by probing `STORE()` (a revert means it is not a 721 hook, so
79
+ * the project has no shop).
80
+ *
81
+ * Returns `null` when the project authoritatively has no 721 shop. RPC failures
82
+ * on authoritative reads throw, so a transient error surfaces as an error rather
83
+ * than a false "no shop".
84
+ *
85
+ * @param client A viem public client on the given chain.
86
+ * @param args.projectId The project (or revnet) id.
87
+ * @param args.isRevnet Whether the project is a revnet (changes hook resolution).
88
+ * @param args.tierLimit Max tiers to read from `tiersOf`. Defaults to 100.
89
+ * @param args.categories Tier categories to filter by (empty = all). Defaults to `[]`.
90
+ */
91
+ export declare function getProject721Shop(client: PublicClient, { chainId, projectId, isRevnet, tierLimit, categories, }: {
92
+ chainId: JBChainId;
93
+ projectId: bigint;
94
+ isRevnet: boolean;
95
+ tierLimit?: number;
96
+ categories?: bigint[];
97
+ }): Promise<Project721Shop | null>;
98
+ //# sourceMappingURL=nft.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nft.d.ts","sourceRoot":"","sources":["../../../src/v6/nft.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAe,MAAM,MAAM,CAAC;AAQ/D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,MAAM,GAAG,MAAM,GAC/B,MAAM,CAKR;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,GAAG,CAAC;IACpB,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,8BAA8B;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gEAAgE;IAChE,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,YAAY,EACpB,EAAE,IAAI,EAAE,EAAE;IAAE,OAAO,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC9C,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,EACE,OAAO,EACP,SAAS,EACT,QAAQ,EACR,SAAe,EACf,UAAe,GAChB,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,GACA,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAkGhC"}