@bananapus/nana-sdk-core 2.17.0 → 2.19.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 (245) hide show
  1. package/dist/cjs/constants.d.ts +1 -13
  2. package/dist/cjs/constants.d.ts.map +1 -1
  3. package/dist/cjs/constants.js +4 -22
  4. package/dist/cjs/constants.js.map +1 -1
  5. package/dist/cjs/generated/abi/jbBuybackHookAbi.d.ts +1187 -0
  6. package/dist/cjs/generated/abi/jbBuybackHookAbi.d.ts.map +1 -0
  7. package/dist/cjs/generated/abi/jbBuybackHookAbi.js +841 -0
  8. package/dist/cjs/generated/abi/jbBuybackHookAbi.js.map +1 -0
  9. package/dist/cjs/generated/abi/jbBuybackHookRegistryAbi.d.ts +791 -0
  10. package/dist/cjs/generated/abi/jbBuybackHookRegistryAbi.d.ts.map +1 -0
  11. package/dist/cjs/generated/abi/jbBuybackHookRegistryAbi.js +632 -0
  12. package/dist/cjs/generated/abi/jbBuybackHookRegistryAbi.js.map +1 -0
  13. package/dist/cjs/generated/abi/jbControllerAbi.d.ts +2569 -0
  14. package/dist/cjs/generated/abi/jbControllerAbi.d.ts.map +1 -0
  15. package/dist/cjs/generated/abi/jbControllerAbi.js +1906 -0
  16. package/dist/cjs/generated/abi/jbControllerAbi.js.map +1 -0
  17. package/dist/cjs/generated/abi/jbDirectoryAbi.d.ts +410 -0
  18. package/dist/cjs/generated/abi/jbDirectoryAbi.d.ts.map +1 -0
  19. package/dist/cjs/generated/abi/jbDirectoryAbi.js +365 -0
  20. package/dist/cjs/generated/abi/jbDirectoryAbi.js.map +1 -0
  21. package/dist/cjs/generated/abi/jbMultiTerminalAbi.d.ts +1863 -0
  22. package/dist/cjs/generated/abi/jbMultiTerminalAbi.d.ts.map +1 -0
  23. package/dist/cjs/generated/abi/jbMultiTerminalAbi.js +1459 -0
  24. package/dist/cjs/generated/abi/jbMultiTerminalAbi.js.map +1 -0
  25. package/dist/cjs/generated/abi/jbPermissionsAbi.d.ts +240 -0
  26. package/dist/cjs/generated/abi/jbPermissionsAbi.d.ts.map +1 -0
  27. package/dist/cjs/generated/abi/jbPermissionsAbi.js +164 -0
  28. package/dist/cjs/generated/abi/jbPermissionsAbi.js.map +1 -0
  29. package/dist/cjs/generated/abi/jbProjectsAbi.d.ts +626 -0
  30. package/dist/cjs/generated/abi/jbProjectsAbi.d.ts.map +1 -0
  31. package/dist/cjs/generated/abi/jbProjectsAbi.js +470 -0
  32. package/dist/cjs/generated/abi/jbProjectsAbi.js.map +1 -0
  33. package/dist/cjs/generated/abi/jbRouterTerminalGatewayAbi.d.ts +1503 -0
  34. package/dist/cjs/generated/abi/jbRouterTerminalGatewayAbi.d.ts.map +1 -0
  35. package/dist/cjs/generated/abi/jbRouterTerminalGatewayAbi.js +1037 -0
  36. package/dist/cjs/generated/abi/jbRouterTerminalGatewayAbi.js.map +1 -0
  37. package/dist/cjs/generated/abi/jbRouterTerminalRegistryAbi.d.ts +1119 -0
  38. package/dist/cjs/generated/abi/jbRouterTerminalRegistryAbi.d.ts.map +1 -0
  39. package/dist/cjs/generated/abi/jbRouterTerminalRegistryAbi.js +925 -0
  40. package/dist/cjs/generated/abi/jbRouterTerminalRegistryAbi.js.map +1 -0
  41. package/dist/cjs/generated/abi/jbSplitsAbi.d.ts +244 -0
  42. package/dist/cjs/generated/abi/jbSplitsAbi.d.ts.map +1 -0
  43. package/dist/cjs/generated/abi/jbSplitsAbi.js +198 -0
  44. package/dist/cjs/generated/abi/jbSplitsAbi.js.map +1 -0
  45. package/dist/cjs/generated/abi/jbTokensAbi.d.ts +602 -0
  46. package/dist/cjs/generated/abi/jbTokensAbi.d.ts.map +1 -0
  47. package/dist/cjs/generated/abi/jbTokensAbi.js +501 -0
  48. package/dist/cjs/generated/abi/jbTokensAbi.js.map +1 -0
  49. package/dist/cjs/generated/juicebox.d.ts +25405 -36537
  50. package/dist/cjs/generated/juicebox.d.ts.map +1 -1
  51. package/dist/cjs/generated/juicebox.js +14362 -22761
  52. package/dist/cjs/generated/juicebox.js.map +1 -1
  53. package/dist/cjs/pureConstants.d.ts +15 -0
  54. package/dist/cjs/pureConstants.d.ts.map +1 -0
  55. package/dist/cjs/pureConstants.js +28 -0
  56. package/dist/cjs/pureConstants.js.map +1 -0
  57. package/dist/cjs/review/decode.d.ts.map +1 -1
  58. package/dist/cjs/review/decode.js +35 -51
  59. package/dist/cjs/review/decode.js.map +1 -1
  60. package/dist/cjs/review/relayr.d.ts.map +1 -1
  61. package/dist/cjs/review/relayr.js +11 -31
  62. package/dist/cjs/review/relayr.js.map +1 -1
  63. package/dist/cjs/safe.d.ts +376 -8
  64. package/dist/cjs/safe.d.ts.map +1 -1
  65. package/dist/cjs/safe.js +1088 -29
  66. package/dist/cjs/safe.js.map +1 -1
  67. package/dist/cjs/safeService.d.ts +361 -1
  68. package/dist/cjs/safeService.d.ts.map +1 -1
  69. package/dist/cjs/safeService.js +844 -6
  70. package/dist/cjs/safeService.js.map +1 -1
  71. package/dist/cjs/untrusted.d.ts +8 -0
  72. package/dist/cjs/untrusted.d.ts.map +1 -0
  73. package/dist/cjs/untrusted.js +33 -0
  74. package/dist/cjs/untrusted.js.map +1 -0
  75. package/dist/cjs/v6/deploymentAbi.d.ts +4 -0
  76. package/dist/cjs/v6/deploymentAbi.d.ts.map +1 -0
  77. package/dist/cjs/v6/deploymentAbi.js +15 -0
  78. package/dist/cjs/v6/deploymentAbi.js.map +1 -0
  79. package/dist/cjs/v6/deploymentDiagnostics.d.ts +45 -0
  80. package/dist/cjs/v6/deploymentDiagnostics.d.ts.map +1 -0
  81. package/dist/cjs/v6/deploymentDiagnostics.js +525 -0
  82. package/dist/cjs/v6/deploymentDiagnostics.js.map +1 -0
  83. package/dist/cjs/v6/distributions.d.ts +90 -0
  84. package/dist/cjs/v6/distributions.d.ts.map +1 -0
  85. package/dist/cjs/v6/distributions.js +287 -0
  86. package/dist/cjs/v6/distributions.js.map +1 -0
  87. package/dist/cjs/v6/index.d.ts +4 -0
  88. package/dist/cjs/v6/index.d.ts.map +1 -1
  89. package/dist/cjs/v6/index.js +4 -0
  90. package/dist/cjs/v6/index.js.map +1 -1
  91. package/dist/cjs/v6/nft.d.ts +15 -0
  92. package/dist/cjs/v6/nft.d.ts.map +1 -1
  93. package/dist/cjs/v6/nft.js +49 -29
  94. package/dist/cjs/v6/nft.js.map +1 -1
  95. package/dist/cjs/v6/omnichain.d.ts +3 -2
  96. package/dist/cjs/v6/omnichain.d.ts.map +1 -1
  97. package/dist/cjs/v6/omnichain.js +9 -4
  98. package/dist/cjs/v6/omnichain.js.map +1 -1
  99. package/dist/cjs/v6/permissionIds.d.ts +62 -0
  100. package/dist/cjs/v6/permissionIds.d.ts.map +1 -0
  101. package/dist/cjs/v6/permissionIds.js +70 -0
  102. package/dist/cjs/v6/permissionIds.js.map +1 -0
  103. package/dist/cjs/v6/permissions.d.ts +3 -62
  104. package/dist/cjs/v6/permissions.d.ts.map +1 -1
  105. package/dist/cjs/v6/permissions.js +6 -67
  106. package/dist/cjs/v6/permissions.js.map +1 -1
  107. package/dist/cjs/v6/revnet721.d.ts +42 -0
  108. package/dist/cjs/v6/revnet721.d.ts.map +1 -0
  109. package/dist/cjs/v6/revnet721.js +74 -0
  110. package/dist/cjs/v6/revnet721.js.map +1 -0
  111. package/dist/cjs/v6/revnets.d.ts +11 -3
  112. package/dist/cjs/v6/revnets.d.ts.map +1 -1
  113. package/dist/cjs/v6/revnets.js +36 -7
  114. package/dist/cjs/v6/revnets.js.map +1 -1
  115. package/dist/cjs/v6/splits.d.ts +1 -1
  116. package/dist/cjs/v6/splits.d.ts.map +1 -1
  117. package/dist/cjs/v6/splits.js +3 -3
  118. package/dist/cjs/v6/splits.js.map +1 -1
  119. package/dist/cjs/v6/sticky.d.ts +2 -2
  120. package/dist/cjs/v6/sticky.d.ts.map +1 -1
  121. package/dist/cjs/v6/types.d.ts +1 -1
  122. package/dist/cjs/v6/types.d.ts.map +1 -1
  123. package/dist/esm/constants.d.ts +1 -13
  124. package/dist/esm/constants.d.ts.map +1 -1
  125. package/dist/esm/constants.js +1 -21
  126. package/dist/esm/constants.js.map +1 -1
  127. package/dist/esm/generated/abi/jbBuybackHookAbi.d.ts +1187 -0
  128. package/dist/esm/generated/abi/jbBuybackHookAbi.d.ts.map +1 -0
  129. package/dist/esm/generated/abi/jbBuybackHookAbi.js +838 -0
  130. package/dist/esm/generated/abi/jbBuybackHookAbi.js.map +1 -0
  131. package/dist/esm/generated/abi/jbBuybackHookRegistryAbi.d.ts +791 -0
  132. package/dist/esm/generated/abi/jbBuybackHookRegistryAbi.d.ts.map +1 -0
  133. package/dist/esm/generated/abi/jbBuybackHookRegistryAbi.js +629 -0
  134. package/dist/esm/generated/abi/jbBuybackHookRegistryAbi.js.map +1 -0
  135. package/dist/esm/generated/abi/jbControllerAbi.d.ts +2569 -0
  136. package/dist/esm/generated/abi/jbControllerAbi.d.ts.map +1 -0
  137. package/dist/esm/generated/abi/jbControllerAbi.js +1903 -0
  138. package/dist/esm/generated/abi/jbControllerAbi.js.map +1 -0
  139. package/dist/esm/generated/abi/jbDirectoryAbi.d.ts +410 -0
  140. package/dist/esm/generated/abi/jbDirectoryAbi.d.ts.map +1 -0
  141. package/dist/esm/generated/abi/jbDirectoryAbi.js +362 -0
  142. package/dist/esm/generated/abi/jbDirectoryAbi.js.map +1 -0
  143. package/dist/esm/generated/abi/jbMultiTerminalAbi.d.ts +1863 -0
  144. package/dist/esm/generated/abi/jbMultiTerminalAbi.d.ts.map +1 -0
  145. package/dist/esm/generated/abi/jbMultiTerminalAbi.js +1456 -0
  146. package/dist/esm/generated/abi/jbMultiTerminalAbi.js.map +1 -0
  147. package/dist/esm/generated/abi/jbPermissionsAbi.d.ts +240 -0
  148. package/dist/esm/generated/abi/jbPermissionsAbi.d.ts.map +1 -0
  149. package/dist/esm/generated/abi/jbPermissionsAbi.js +161 -0
  150. package/dist/esm/generated/abi/jbPermissionsAbi.js.map +1 -0
  151. package/dist/esm/generated/abi/jbProjectsAbi.d.ts +626 -0
  152. package/dist/esm/generated/abi/jbProjectsAbi.d.ts.map +1 -0
  153. package/dist/esm/generated/abi/jbProjectsAbi.js +467 -0
  154. package/dist/esm/generated/abi/jbProjectsAbi.js.map +1 -0
  155. package/dist/esm/generated/abi/jbRouterTerminalGatewayAbi.d.ts +1503 -0
  156. package/dist/esm/generated/abi/jbRouterTerminalGatewayAbi.d.ts.map +1 -0
  157. package/dist/esm/generated/abi/jbRouterTerminalGatewayAbi.js +1034 -0
  158. package/dist/esm/generated/abi/jbRouterTerminalGatewayAbi.js.map +1 -0
  159. package/dist/esm/generated/abi/jbRouterTerminalRegistryAbi.d.ts +1119 -0
  160. package/dist/esm/generated/abi/jbRouterTerminalRegistryAbi.d.ts.map +1 -0
  161. package/dist/esm/generated/abi/jbRouterTerminalRegistryAbi.js +922 -0
  162. package/dist/esm/generated/abi/jbRouterTerminalRegistryAbi.js.map +1 -0
  163. package/dist/esm/generated/abi/jbSplitsAbi.d.ts +244 -0
  164. package/dist/esm/generated/abi/jbSplitsAbi.d.ts.map +1 -0
  165. package/dist/esm/generated/abi/jbSplitsAbi.js +195 -0
  166. package/dist/esm/generated/abi/jbSplitsAbi.js.map +1 -0
  167. package/dist/esm/generated/abi/jbTokensAbi.d.ts +602 -0
  168. package/dist/esm/generated/abi/jbTokensAbi.d.ts.map +1 -0
  169. package/dist/esm/generated/abi/jbTokensAbi.js +498 -0
  170. package/dist/esm/generated/abi/jbTokensAbi.js.map +1 -0
  171. package/dist/esm/generated/juicebox.d.ts +25405 -36537
  172. package/dist/esm/generated/juicebox.d.ts.map +1 -1
  173. package/dist/esm/generated/juicebox.js +14634 -23044
  174. package/dist/esm/generated/juicebox.js.map +1 -1
  175. package/dist/esm/pureConstants.d.ts +15 -0
  176. package/dist/esm/pureConstants.d.ts.map +1 -0
  177. package/dist/esm/pureConstants.js +25 -0
  178. package/dist/esm/pureConstants.js.map +1 -0
  179. package/dist/esm/review/decode.d.ts.map +1 -1
  180. package/dist/esm/review/decode.js +21 -37
  181. package/dist/esm/review/decode.js.map +1 -1
  182. package/dist/esm/review/relayr.d.ts.map +1 -1
  183. package/dist/esm/review/relayr.js +5 -25
  184. package/dist/esm/review/relayr.js.map +1 -1
  185. package/dist/esm/safe.d.ts +376 -8
  186. package/dist/esm/safe.d.ts.map +1 -1
  187. package/dist/esm/safe.js +1070 -29
  188. package/dist/esm/safe.js.map +1 -1
  189. package/dist/esm/safeService.d.ts +361 -1
  190. package/dist/esm/safeService.d.ts.map +1 -1
  191. package/dist/esm/safeService.js +818 -5
  192. package/dist/esm/safeService.js.map +1 -1
  193. package/dist/esm/untrusted.d.ts +8 -0
  194. package/dist/esm/untrusted.d.ts.map +1 -0
  195. package/dist/esm/untrusted.js +28 -0
  196. package/dist/esm/untrusted.js.map +1 -0
  197. package/dist/esm/v6/deploymentAbi.d.ts +4 -0
  198. package/dist/esm/v6/deploymentAbi.d.ts.map +1 -0
  199. package/dist/esm/v6/deploymentAbi.js +12 -0
  200. package/dist/esm/v6/deploymentAbi.js.map +1 -0
  201. package/dist/esm/v6/deploymentDiagnostics.d.ts +45 -0
  202. package/dist/esm/v6/deploymentDiagnostics.d.ts.map +1 -0
  203. package/dist/esm/v6/deploymentDiagnostics.js +521 -0
  204. package/dist/esm/v6/deploymentDiagnostics.js.map +1 -0
  205. package/dist/esm/v6/distributions.d.ts +90 -0
  206. package/dist/esm/v6/distributions.d.ts.map +1 -0
  207. package/dist/esm/v6/distributions.js +283 -0
  208. package/dist/esm/v6/distributions.js.map +1 -0
  209. package/dist/esm/v6/index.d.ts +4 -0
  210. package/dist/esm/v6/index.d.ts.map +1 -1
  211. package/dist/esm/v6/index.js +4 -0
  212. package/dist/esm/v6/index.js.map +1 -1
  213. package/dist/esm/v6/nft.d.ts +15 -0
  214. package/dist/esm/v6/nft.d.ts.map +1 -1
  215. package/dist/esm/v6/nft.js +48 -29
  216. package/dist/esm/v6/nft.js.map +1 -1
  217. package/dist/esm/v6/omnichain.d.ts +3 -2
  218. package/dist/esm/v6/omnichain.d.ts.map +1 -1
  219. package/dist/esm/v6/omnichain.js +9 -4
  220. package/dist/esm/v6/omnichain.js.map +1 -1
  221. package/dist/esm/v6/permissionIds.d.ts +62 -0
  222. package/dist/esm/v6/permissionIds.d.ts.map +1 -0
  223. package/dist/esm/v6/permissionIds.js +66 -0
  224. package/dist/esm/v6/permissionIds.js.map +1 -0
  225. package/dist/esm/v6/permissions.d.ts +3 -62
  226. package/dist/esm/v6/permissions.d.ts.map +1 -1
  227. package/dist/esm/v6/permissions.js +2 -64
  228. package/dist/esm/v6/permissions.js.map +1 -1
  229. package/dist/esm/v6/revnet721.d.ts +42 -0
  230. package/dist/esm/v6/revnet721.d.ts.map +1 -0
  231. package/dist/esm/v6/revnet721.js +70 -0
  232. package/dist/esm/v6/revnet721.js.map +1 -0
  233. package/dist/esm/v6/revnets.d.ts +11 -3
  234. package/dist/esm/v6/revnets.d.ts.map +1 -1
  235. package/dist/esm/v6/revnets.js +36 -7
  236. package/dist/esm/v6/revnets.js.map +1 -1
  237. package/dist/esm/v6/splits.d.ts +1 -1
  238. package/dist/esm/v6/splits.d.ts.map +1 -1
  239. package/dist/esm/v6/splits.js +1 -1
  240. package/dist/esm/v6/splits.js.map +1 -1
  241. package/dist/esm/v6/sticky.d.ts +2 -2
  242. package/dist/esm/v6/sticky.d.ts.map +1 -1
  243. package/dist/esm/v6/types.d.ts +1 -1
  244. package/dist/esm/v6/types.d.ts.map +1 -1
  245. package/package.json +1 -1
@@ -0,0 +1,521 @@
1
+ import { isAddress, zeroAddress, zeroHash } from "viem";
2
+ import { jb721TiersHookAbi, jb721TiersHookStoreAbi, jbAddressRegistryAbi, revDeployerAbi, } from "../generated/juicebox.js";
3
+ import { jbDirectoryAbi } from "../generated/abi/jbDirectoryAbi.js";
4
+ import { jbProjectsAbi } from "../generated/abi/jbProjectsAbi.js";
5
+ import { isMissingContractFunctionError } from "../utils/errors.js";
6
+ import { resolveProject721Hook } from "./nft.js";
7
+ import { hasPermissions, JBPermissionIdsV6 } from "./permissions.js";
8
+ import { getCurrentRuleset } from "./rulesets.js";
9
+ import { v6Address } from "./types.js";
10
+ export function describeProjectDataStatus(status) {
11
+ switch (status) {
12
+ case "available":
13
+ return "Indexed project details are available.";
14
+ case "missing":
15
+ return "The indexer returned no project record. This does not establish why it is missing.";
16
+ case "incomplete":
17
+ return "Some indexed project details are missing. This does not establish indexing progress.";
18
+ case "unavailable":
19
+ return "The indexer request did not complete. Indexing progress is unknown.";
20
+ case "not-checked":
21
+ return "The indexer was not checked.";
22
+ }
23
+ }
24
+ const sameAddress = (left, right) => left.toLowerCase() === right.toLowerCase();
25
+ /** Inspect current v6 wiring without a wallet, tier enumeration or indexer.
26
+ * Reads are pinned to one block. Caller-supplied indexer evidence belongs in a
27
+ * separate report section: a failed indexer request proves nothing about wiring.
28
+ * Custom hooks/controllers are unsupported where capabilities cannot be verified,
29
+ * never invalid merely for differing from canonical deployments. Pricing units
30
+ * and operator powers are informational unless explicit expectations are supplied.
31
+ */
32
+ export async function getProjectDeploymentDiagnostics(client, args) {
33
+ const requestedOperator = args.operator && isAddress(args.operator) ? args.operator : undefined;
34
+ const report = {
35
+ version: 6,
36
+ chainId: args.chainId,
37
+ projectId: args.projectId.toString(),
38
+ checkedAt: new Date().toISOString(),
39
+ checkedBlock: null,
40
+ kind: "unknown",
41
+ checks: [],
42
+ ...(requestedOperator ? { operator: requestedOperator } : {}),
43
+ };
44
+ const add = (check) => {
45
+ if (check.status === "mismatch" && !check.action)
46
+ check.action =
47
+ "Compare these values with the original deployment call before choosing a correction; immutable settings may require a new deployment.";
48
+ report.checks.push(check);
49
+ };
50
+ const unavailable = (id, category, label, error) => add({
51
+ id,
52
+ category,
53
+ label,
54
+ status: isMissingContractFunctionError(error)
55
+ ? "unsupported"
56
+ : "unavailable",
57
+ message: isMissingContractFunctionError(error)
58
+ ? "The contract read reverted or returned no data, so this check could not be verified."
59
+ : "The chain read did not complete. No mismatch was established.",
60
+ action: "Retry the check or inspect this contract with your deployment configuration.",
61
+ });
62
+ if (args.projectId <= 0n) {
63
+ add({
64
+ id: "project",
65
+ category: "project",
66
+ status: "unsupported",
67
+ label: "Project",
68
+ message: "A positive project ID is required.",
69
+ });
70
+ return report;
71
+ }
72
+ let blockNumber;
73
+ try {
74
+ const chainId = await client.getChainId();
75
+ if (chainId !== args.chainId) {
76
+ add({
77
+ id: "network",
78
+ category: "project",
79
+ status: "unavailable",
80
+ label: "Network",
81
+ message: "The connected network does not match this project.",
82
+ actual: String(chainId),
83
+ expected: String(args.chainId),
84
+ action: "Choose the project's network and retry.",
85
+ });
86
+ return report;
87
+ }
88
+ blockNumber = await client.getBlockNumber();
89
+ report.checkedBlock = blockNumber.toString();
90
+ }
91
+ catch {
92
+ unavailable("network", "project", "Network");
93
+ return report;
94
+ }
95
+ let directory, projects, controller, revOwner, revDeployer, omni;
96
+ try {
97
+ directory = v6Address("JBDirectory", args.chainId);
98
+ projects = v6Address("JBProjects", args.chainId);
99
+ controller = v6Address("JBController", args.chainId);
100
+ revOwner = v6Address("REVOwner", args.chainId);
101
+ revDeployer = v6Address("REVDeployer", args.chainId);
102
+ omni = v6Address("JBOmnichainDeployer", args.chainId);
103
+ }
104
+ catch {
105
+ add({
106
+ id: "network",
107
+ category: "project",
108
+ status: "unsupported",
109
+ label: "Network",
110
+ message: "This SDK has no supported v6 deployment on this network.",
111
+ });
112
+ return report;
113
+ }
114
+ // Every nested shared resolver uses this same block; no mutable latest reads.
115
+ const snapshot = {
116
+ ...client,
117
+ readContract: (parameters) => client.readContract({ ...parameters, blockNumber }),
118
+ };
119
+ const read = snapshot.readContract;
120
+ const [ownerRead, controllerRead] = await Promise.allSettled([
121
+ read({
122
+ address: projects,
123
+ abi: jbProjectsAbi,
124
+ functionName: "ownerOf",
125
+ args: [args.projectId],
126
+ }),
127
+ read({
128
+ address: directory,
129
+ abi: jbDirectoryAbi,
130
+ functionName: "controllerOf",
131
+ args: [args.projectId],
132
+ }),
133
+ ]);
134
+ if (ownerRead.status === "rejected") {
135
+ unavailable("project.owner", "project", "Project owner", ownerRead.reason);
136
+ return report;
137
+ }
138
+ const owner = ownerRead.value;
139
+ const isRevnet = sameAddress(owner, revOwner);
140
+ report.kind = isRevnet ? "revnet" : "juicebox";
141
+ add({
142
+ id: "project.owner",
143
+ category: "project",
144
+ status: "passed",
145
+ label: "Project exists",
146
+ message: "The v6 project registry returned its current owner.",
147
+ actual: owner,
148
+ });
149
+ if (controllerRead.status === "rejected") {
150
+ unavailable("project.controller", "project", "Controller", controllerRead.reason);
151
+ return report;
152
+ }
153
+ if (!sameAddress(controllerRead.value, controller)) {
154
+ report.kind = "custom";
155
+ add({
156
+ id: "project.controller",
157
+ category: "project",
158
+ status: "unsupported",
159
+ label: "Controller",
160
+ message: "This controller requires deployment-specific checks.",
161
+ actual: controllerRead.value,
162
+ expected: controller,
163
+ action: "Compare with the controller chosen in the deployment script.",
164
+ });
165
+ return report;
166
+ }
167
+ add({
168
+ id: "project.controller",
169
+ category: "project",
170
+ status: "passed",
171
+ label: "Controller",
172
+ message: "The project uses the supported v6 controller.",
173
+ actual: controller,
174
+ });
175
+ let canonicalRevnet = false;
176
+ if (isRevnet) {
177
+ try {
178
+ const hash = await read({
179
+ address: revDeployer,
180
+ abi: revDeployerAbi,
181
+ functionName: "hashedEncodedConfigurationOf",
182
+ args: [args.projectId],
183
+ });
184
+ canonicalRevnet = hash !== zeroHash;
185
+ add({
186
+ id: "project.provenance",
187
+ category: "project",
188
+ status: canonicalRevnet ? "passed" : "unsupported",
189
+ label: "Revnet configuration",
190
+ message: canonicalRevnet
191
+ ? "The canonical deployer has a configuration for this revnet."
192
+ : "No canonical configuration is registered. Ownership alone does not establish canonical deployment.",
193
+ actual: hash,
194
+ });
195
+ }
196
+ catch (error) {
197
+ unavailable("project.provenance", "project", "Revnet configuration", error);
198
+ }
199
+ }
200
+ let current;
201
+ try {
202
+ current = await getCurrentRuleset(snapshot, args);
203
+ }
204
+ catch (error) {
205
+ unavailable("project.ruleset", "project", "Current ruleset", error);
206
+ if (!isRevnet)
207
+ return report;
208
+ }
209
+ if (current?.ruleset.id === 0) {
210
+ add({
211
+ id: "project.ruleset",
212
+ category: "project",
213
+ status: "info",
214
+ label: "Current ruleset",
215
+ message: "No active ruleset is available yet. Hook routing cannot be checked.",
216
+ });
217
+ if (!isRevnet)
218
+ return report;
219
+ current = undefined;
220
+ }
221
+ const metadata = current?.metadata;
222
+ if (metadata) {
223
+ const expectedHook = canonicalRevnet ? revOwner : undefined;
224
+ add({
225
+ id: "hook.routing",
226
+ category: "hook",
227
+ status: expectedHook && !sameAddress(metadata.dataHook, expectedHook)
228
+ ? "mismatch"
229
+ : "info",
230
+ label: "Payment hook routing",
231
+ message: "The current ruleset selects this data hook.",
232
+ actual: metadata.dataHook,
233
+ ...(expectedHook ? { expected: expectedHook } : {}),
234
+ });
235
+ const canonicalComposite = canonicalRevnet;
236
+ add({
237
+ id: "hook.flags",
238
+ category: "hook",
239
+ status: canonicalComposite &&
240
+ (!metadata.useDataHookForPay || !metadata.useDataHookForCashOut)
241
+ ? "mismatch"
242
+ : "info",
243
+ label: "Hook enablement",
244
+ message: canonicalComposite
245
+ ? "Canonical composite hooks enable both payment and cash-out routing."
246
+ : "Hook enablement can be an intentional ruleset choice.",
247
+ actual: `payments=${metadata.useDataHookForPay}; cashOuts=${metadata.useDataHookForCashOut}`,
248
+ ...(canonicalComposite
249
+ ? { expected: "payments=true; cashOuts=true" }
250
+ : {}),
251
+ });
252
+ }
253
+ let resolved;
254
+ try {
255
+ resolved = await resolveProject721Hook(snapshot, {
256
+ ...args,
257
+ isRevnet,
258
+ ruleset: current,
259
+ includeInactiveHook: true,
260
+ });
261
+ }
262
+ catch (error) {
263
+ unavailable("hook.shop", "hook", "Shop hook", error);
264
+ return report;
265
+ }
266
+ if (!resolved) {
267
+ const custom = metadata &&
268
+ metadata.dataHook !== zeroAddress &&
269
+ !sameAddress(metadata.dataHook, omni) &&
270
+ !isRevnet;
271
+ if (custom)
272
+ report.kind = "custom";
273
+ add({
274
+ id: "hook.shop",
275
+ category: "hook",
276
+ status: canonicalRevnet ? "mismatch" : custom ? "unsupported" : "info",
277
+ label: "Shop hook",
278
+ message: canonicalRevnet
279
+ ? "The canonical revnet has no registered shop hook."
280
+ : custom
281
+ ? "The selected custom data hook does not expose a supported 721 shop."
282
+ : "No 721 shop is configured. This is valid for a Juicebox project.",
283
+ ...(canonicalRevnet
284
+ ? { actual: zeroAddress, expected: "A registered 721 hook" }
285
+ : {}),
286
+ });
287
+ return report;
288
+ }
289
+ const hook = resolved.hook;
290
+ add({
291
+ id: "hook.shop",
292
+ category: "hook",
293
+ status: "passed",
294
+ label: "Shop hook",
295
+ message: "The project resolves to a hook reporting a 721 store address.",
296
+ actual: hook,
297
+ });
298
+ const bind = async (id, label, readValue, expected) => {
299
+ try {
300
+ const actual = String(await readValue());
301
+ add({
302
+ id,
303
+ category: "hook",
304
+ label,
305
+ status: expected
306
+ ? actual.toLowerCase() === expected.toLowerCase()
307
+ ? "passed"
308
+ : "mismatch"
309
+ : "info",
310
+ message: expected
311
+ ? "Compared the hook's binding with this project."
312
+ : "The hook reported this value; custom ownership can be intentional.",
313
+ actual,
314
+ ...(expected ? { expected } : {}),
315
+ });
316
+ return actual;
317
+ }
318
+ catch (error) {
319
+ unavailable(id, "hook", label, error);
320
+ return undefined;
321
+ }
322
+ };
323
+ const [hookProject, , hookOwner, permissionRegistry] = await Promise.all([
324
+ bind("hook.projectId", "Hook project", () => read({
325
+ address: hook,
326
+ abi: jb721TiersHookAbi,
327
+ functionName: "projectId",
328
+ }), args.projectId.toString()),
329
+ bind("hook.directory", "Hook directory", () => read({
330
+ address: hook,
331
+ abi: jb721TiersHookAbi,
332
+ functionName: "DIRECTORY",
333
+ }), directory),
334
+ bind("hook.owner", "Shop authority", () => read({ address: hook, abi: jb721TiersHookAbi, functionName: "owner" }), canonicalRevnet ? revOwner : undefined),
335
+ bind("hook.permissions", "Permission registry", () => read({
336
+ address: hook,
337
+ abi: jb721TiersHookAbi,
338
+ functionName: "PERMISSIONS",
339
+ })),
340
+ ]);
341
+ await Promise.all([
342
+ (async () => {
343
+ if (sameAddress(resolved.store, zeroAddress)) {
344
+ add({
345
+ id: "hook.store",
346
+ category: "hook",
347
+ status: "mismatch",
348
+ label: "Shop store",
349
+ message: "The hook reports no store address.",
350
+ actual: zeroAddress,
351
+ expected: "A deployed 721 store",
352
+ action: "Compare the hook initialization with the deployment script before using its shop.",
353
+ });
354
+ return;
355
+ }
356
+ try {
357
+ const maxTierId = await read({
358
+ address: resolved.store,
359
+ abi: jb721TiersHookStoreAbi,
360
+ functionName: "maxTierIdOf",
361
+ args: [hook],
362
+ });
363
+ add({
364
+ id: "hook.store",
365
+ category: "hook",
366
+ status: "passed",
367
+ label: "Shop store",
368
+ message: `The reported store is readable; highest tier ID is ${maxTierId}.`,
369
+ actual: resolved.store,
370
+ });
371
+ }
372
+ catch (error) {
373
+ unavailable("hook.store", "hook", "Shop store", error);
374
+ }
375
+ })(),
376
+ (async () => {
377
+ try {
378
+ const factory = await read({
379
+ address: v6Address("JBAddressRegistry", args.chainId),
380
+ abi: jbAddressRegistryAbi,
381
+ functionName: "deployerOf",
382
+ args: [hook],
383
+ });
384
+ const expected = v6Address("JB721TiersHookDeployer", args.chainId);
385
+ add({
386
+ id: "hook.provenance",
387
+ category: "hook",
388
+ status: sameAddress(factory, expected) ? "passed" : "unsupported",
389
+ label: "Shop factory",
390
+ message: sameAddress(factory, expected)
391
+ ? "The registry records the canonical 721 factory."
392
+ : "The registry does not establish canonical factory provenance. Custom hooks need separate review.",
393
+ actual: factory,
394
+ expected,
395
+ });
396
+ }
397
+ catch (error) {
398
+ unavailable("hook.provenance", "hook", "Shop factory", error);
399
+ }
400
+ })(),
401
+ (async () => {
402
+ try {
403
+ const [currency, decimals] = await read({
404
+ address: hook,
405
+ abi: jb721TiersHookAbi,
406
+ functionName: "pricingContext",
407
+ });
408
+ const expected = args.expectedPricing;
409
+ add({
410
+ id: "shop.pricing",
411
+ category: "pricing",
412
+ status: expected
413
+ ? currency === BigInt(expected.currency) &&
414
+ decimals === BigInt(expected.decimals)
415
+ ? "passed"
416
+ : "mismatch"
417
+ : "info",
418
+ label: "Shop pricing",
419
+ message: "Prices use these units. Precision alone cannot establish whether an item was priced as intended.",
420
+ actual: `currency=${currency}; decimals=${decimals}`,
421
+ ...(expected
422
+ ? {
423
+ expected: `currency=${expected.currency}; decimals=${expected.decimals}`,
424
+ }
425
+ : {}),
426
+ });
427
+ }
428
+ catch (error) {
429
+ unavailable("shop.pricing", "pricing", "Shop pricing", error);
430
+ }
431
+ })(),
432
+ (async () => {
433
+ if (args.operator && !requestedOperator) {
434
+ add({
435
+ id: "shop.permissions",
436
+ category: "permissions",
437
+ status: "unsupported",
438
+ label: "Shop permissions",
439
+ message: "The supplied operator is not a valid address.",
440
+ action: "Supply the operator address from your deployment configuration.",
441
+ });
442
+ return;
443
+ }
444
+ if (!requestedOperator) {
445
+ add({
446
+ id: "shop.permissions",
447
+ category: "permissions",
448
+ status: "info",
449
+ label: "Shop permissions",
450
+ message: "Operator permissions can be intentionally restricted. Supply an operator address to read its current powers.",
451
+ ...(hookOwner ? { actual: `Shop authority: ${hookOwner}` } : {}),
452
+ });
453
+ return;
454
+ }
455
+ if (!hookOwner || !hookProject || !permissionRegistry) {
456
+ const dependencies = [
457
+ "hook.owner",
458
+ "hook.projectId",
459
+ "hook.permissions",
460
+ ].map((id) => report.checks.find((item) => item.id === id));
461
+ add({
462
+ id: "shop.permissions",
463
+ category: "permissions",
464
+ status: dependencies.some((item) => item?.status === "unavailable")
465
+ ? "unavailable"
466
+ : "unsupported",
467
+ label: "Shop permissions",
468
+ message: "A required hook authority or binding read could not be verified. Operator powers remain unknown.",
469
+ action: "Retry the missing hook reads before checking operator powers.",
470
+ });
471
+ return;
472
+ }
473
+ const operator = requestedOperator;
474
+ if (sameAddress(operator, zeroAddress) ||
475
+ hookProject !== args.projectId.toString() ||
476
+ !permissionRegistry ||
477
+ !sameAddress(permissionRegistry, v6Address("JBPermissions", args.chainId))) {
478
+ add({
479
+ id: "shop.permissions",
480
+ category: "permissions",
481
+ status: "unsupported",
482
+ label: "Shop permissions",
483
+ message: "Operator powers cannot be established for an unverified project binding, custom permission registry or zero operator.",
484
+ action: "Verify the hook's project and permission registry, then supply a nonzero operator address.",
485
+ });
486
+ return;
487
+ }
488
+ const permissions = [
489
+ ["Adjust tiers", JBPermissionIdsV6.ADJUST_721_TIERS],
490
+ ["Update metadata", JBPermissionIdsV6.SET_721_METADATA],
491
+ ["Mint items", JBPermissionIdsV6.MINT_721],
492
+ ["Increase discounts", JBPermissionIdsV6.SET_721_DISCOUNT_PERCENT],
493
+ ];
494
+ await Promise.all(permissions.map(async ([label, id]) => {
495
+ try {
496
+ const allowed = sameAddress(operator, hookOwner) ||
497
+ (await hasPermissions(snapshot, {
498
+ ...args,
499
+ operator,
500
+ account: hookOwner,
501
+ permissionIds: [id],
502
+ }));
503
+ add({
504
+ id: `shop.permission.${id}`,
505
+ category: "permissions",
506
+ status: "info",
507
+ label,
508
+ message: "This is the supplied operator's current capability, including owner, root and wildcard authority.",
509
+ actual: allowed ? "Allowed" : "Not allowed",
510
+ });
511
+ }
512
+ catch (error) {
513
+ unavailable(`shop.permission.${id}`, "permissions", label, error);
514
+ }
515
+ }));
516
+ })(),
517
+ ]);
518
+ report.checks.sort((left, right) => left.id.localeCompare(right.id));
519
+ return report;
520
+ }
521
+ //# sourceMappingURL=deploymentDiagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploymentDiagnostics.js","sourceRoot":"","sources":["../../../src/v6/deploymentDiagnostics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import { type Address } from "viem";
2
+ /** A reviewed split, as the ruleset held it when the distribution was reviewed. */
3
+ export type ExpectedDistributionSplit = {
4
+ percent: number | bigint | string;
5
+ projectId: number | bigint | string;
6
+ beneficiary: Address;
7
+ preferAddToBalance: boolean;
8
+ lockedUntil: number | bigint | string;
9
+ hook: Address;
10
+ /**
11
+ * Payouts only: true when the terminal pays this split without its fee, so
12
+ * its net must equal its gross. Leave it unset when unknown.
13
+ */
14
+ feeless?: boolean;
15
+ };
16
+ /** What a reviewed `sendPayoutsOf` must have done. Numbers may be any uint256 form. */
17
+ export type ExpectedPayoutReceipt = {
18
+ terminal: Address;
19
+ projectId: number | bigint | string;
20
+ rulesetId: number | bigint | string;
21
+ cycleNumber: number | bigint | string;
22
+ token: Address;
23
+ /** The project owner, who receives what the splits leave. */
24
+ owner: Address;
25
+ /** The account that sent the distribution. */
26
+ caller: Address;
27
+ /** The amount `sendPayoutsOf` was called with, in its currency. */
28
+ amount: number | bigint | string;
29
+ /** The least `amountPaidOut` the review allowed, in the token. */
30
+ minimum: number | bigint | string;
31
+ splits: readonly ExpectedDistributionSplit[];
32
+ };
33
+ /** What a reviewed `sendReservedTokensToSplitsOf` must have done. */
34
+ export type ExpectedReservedReceipt = {
35
+ controller: Address;
36
+ /** JBTokens, which logs the controller's burns. */
37
+ tokens: Address;
38
+ projectId: number | bigint | string;
39
+ rulesetId: number | bigint | string;
40
+ cycleNumber: number | bigint | string;
41
+ /** The project owner, who receives what the splits leave. */
42
+ owner: Address;
43
+ caller: Address;
44
+ /** The pending reserved tokens the review saw. */
45
+ tokenCount: number | bigint | string;
46
+ splits: readonly ExpectedDistributionSplit[];
47
+ };
48
+ type Receipt = {
49
+ status?: unknown;
50
+ logs: readonly unknown[];
51
+ };
52
+ /**
53
+ * Prove that a `sendPayoutsOf` receipt paid every reviewed split in full.
54
+ *
55
+ * The terminal must log, for the project, no `PayoutReverted` or
56
+ * `PayoutTransferReverted`; exactly one `SendPayouts` from the reviewed
57
+ * caller, in the reviewed ruleset and cycle, to the reviewed owner, for the
58
+ * reviewed amount, paying out at least the reviewed minimum with a fee within
59
+ * 2.5%; and one `SendPayoutToSplit` per reviewed split, in order, naming that
60
+ * exact split. Each split's gross is the terminal's successive remainder
61
+ * (`remaining × percent / remaining percent`). Its net must be the gross, or
62
+ * the gross less its 2.5% fee, and the gross alone for a split marked
63
+ * feeless: anything else is a hook that took only part of its share. The
64
+ * owner's net leftover follows the same rule.
65
+ *
66
+ * Throws, naming the first event that differs. A refusal means the receipt
67
+ * cannot show the payouts completed: keep the transaction, and do not send
68
+ * the same payouts again.
69
+ */
70
+ export declare function verifyPayoutReceipt(receipt: Receipt, expected: ExpectedPayoutReceipt): void;
71
+ /**
72
+ * Prove that a `sendReservedTokensToSplitsOf` receipt sent every reviewed
73
+ * split its reserved tokens.
74
+ *
75
+ * The controller must log, for the project, no `ReservedDistributionReverted`
76
+ * or `SplitHookReverted`; exactly one `SendReservedTokensToSplits` from the
77
+ * reviewed caller, in the reviewed ruleset and cycle, to the reviewed owner,
78
+ * for the reviewed token count, leaving what the splits do not take; and one
79
+ * `SendReservedTokensToSplit` per reviewed split, in order, naming that exact
80
+ * split with `tokenCount × percent / 100%`. JBTokens must log burns from the
81
+ * controller of exactly the shares sent to 0x…dEaD: any other burn is tokens a
82
+ * hook did not take.
83
+ *
84
+ * Throws, naming the first event that differs. A refusal means the receipt
85
+ * cannot show the distribution completed: keep the transaction, and do not
86
+ * distribute the same reserved tokens again.
87
+ */
88
+ export declare function verifyReservedDistributionReceipt(receipt: Receipt, expected: ExpectedReservedReceipt): void;
89
+ export {};
90
+ //# sourceMappingURL=distributions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distributions.d.ts","sourceRoot":"","sources":["../../../src/v6/distributions.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,OAAO,EACb,MAAM,MAAM,CAAC;AAad,mFAAmF;AACnF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACtC,IAAI,EAAE,OAAO,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,uFAAuF;AACvF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,6DAA6D;IAC7D,KAAK,EAAE,OAAO,CAAC;IACf,8CAA8C;IAC9C,MAAM,EAAE,OAAO,CAAC;IAChB,mEAAmE;IACnE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,kEAAkE;IAClE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,MAAM,EAAE,SAAS,yBAAyB,EAAE,CAAC;CAC9C,CAAC;AAEF,qEAAqE;AACrE,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACtC,6DAA6D;IAC7D,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,kDAAkD;IAClD,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACrC,MAAM,EAAE,SAAS,yBAAyB,EAAE,CAAC;CAC9C,CAAC;AAEF,KAAK,OAAO,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,CAAC;AAyI9D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,qBAAqB,GAC9B,IAAI,CA0HN;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,uBAAuB,GAChC,IAAI,CAyHN"}