@gnosis-guild/zodiac 4.2.1 → 5.0.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 (158) hide show
  1. package/README.md +107 -4
  2. package/dist/cjs/abis/bridge/1.0.0.js +385 -0
  3. package/dist/cjs/abis/circulatingSupplyERC20/1.0.0.js +248 -0
  4. package/dist/cjs/abis/circulatingSupplyERC20/1.1.0.js +248 -0
  5. package/dist/cjs/abis/circulatingSupplyERC20/1.2.0.js +248 -0
  6. package/dist/cjs/abis/circulatingSupplyERC721/1.1.0.js +248 -0
  7. package/dist/cjs/abis/circulatingSupplyERC721/1.2.0.js +248 -0
  8. package/dist/cjs/abis/connext/1.0.0.js +496 -0
  9. package/dist/cjs/abis/delay/1.0.0.js +731 -0
  10. package/dist/cjs/abis/delay/1.0.1.js +731 -0
  11. package/dist/cjs/abis/delay/1.1.0.js +941 -0
  12. package/dist/cjs/abis/delay/1.1.1.js +941 -0
  13. package/dist/cjs/abis/erc20Votes/1.0.0.js +800 -0
  14. package/dist/cjs/abis/erc721Votes/1.0.0.js +795 -0
  15. package/dist/cjs/abis/exit/1.0.0.js +403 -0
  16. package/dist/cjs/abis/exit/1.1.0.js +422 -0
  17. package/dist/cjs/abis/exit/1.2.0.js +422 -0
  18. package/dist/cjs/abis/exitERC721/1.1.0.js +422 -0
  19. package/dist/cjs/abis/exitERC721/1.2.0.js +422 -0
  20. package/dist/cjs/abis/factory/1.0.0.js +53 -0
  21. package/dist/cjs/abis/factory/1.1.0.js +80 -0
  22. package/dist/cjs/abis/factory/1.2.0.js +91 -0
  23. package/dist/cjs/abis/index.js +101 -0
  24. package/dist/cjs/abis/metaGuard/1.0.0.js +474 -0
  25. package/dist/cjs/abis/multisendEncoder/1.0.0.js +64 -0
  26. package/dist/cjs/abis/ozGovernor/1.0.0.js +1066 -0
  27. package/dist/cjs/abis/realityERC20/2.0.0.js +874 -0
  28. package/dist/cjs/abis/realityETH/2.0.0.js +874 -0
  29. package/dist/cjs/abis/roles/1.0.0.js +993 -0
  30. package/dist/cjs/abis/roles/1.1.0.js +993 -0
  31. package/dist/cjs/abis/roles/2.1.0.js +1411 -0
  32. package/dist/cjs/abis/roles/2.1.1.js +1411 -0
  33. package/dist/cjs/abis/scopeGuard/1.0.0.js +595 -0
  34. package/dist/cjs/contracts.js +145 -0
  35. package/dist/cjs/explorer.js +264 -0
  36. package/dist/cjs/extract.js +117 -0
  37. package/dist/cjs/index.js +16 -0
  38. package/dist/cjs/mastercopies.js +34 -0
  39. package/dist/cjs/networks.js +233 -0
  40. package/dist/cjs/package.json +1 -0
  41. package/dist/cjs/rpc.js +36 -0
  42. package/dist/cjs/singleton.js +42 -0
  43. package/dist/cjs/types.js +7 -0
  44. package/dist/cjs/ui.js +64 -0
  45. package/dist/cjs/zodiacModule.js +61 -0
  46. package/dist/esm/abis/bridge/1.0.0.d.ts +297 -0
  47. package/dist/esm/abis/bridge/1.0.0.js +382 -0
  48. package/dist/esm/abis/circulatingSupplyERC20/1.0.0.d.ts +188 -0
  49. package/dist/esm/abis/circulatingSupplyERC20/1.0.0.js +245 -0
  50. package/dist/esm/abis/circulatingSupplyERC20/1.1.0.d.ts +188 -0
  51. package/dist/esm/abis/circulatingSupplyERC20/1.1.0.js +245 -0
  52. package/dist/esm/abis/circulatingSupplyERC20/1.2.0.d.ts +188 -0
  53. package/dist/esm/abis/circulatingSupplyERC20/1.2.0.js +245 -0
  54. package/dist/esm/abis/circulatingSupplyERC721/1.1.0.d.ts +188 -0
  55. package/dist/esm/abis/circulatingSupplyERC721/1.1.0.js +245 -0
  56. package/dist/esm/abis/circulatingSupplyERC721/1.2.0.d.ts +188 -0
  57. package/dist/esm/abis/circulatingSupplyERC721/1.2.0.js +245 -0
  58. package/dist/esm/abis/connext/1.0.0.d.ts +383 -0
  59. package/dist/esm/abis/connext/1.0.0.js +493 -0
  60. package/dist/esm/abis/delay/1.0.0.d.ts +562 -0
  61. package/dist/esm/abis/delay/1.0.0.js +728 -0
  62. package/dist/esm/abis/delay/1.0.1.d.ts +562 -0
  63. package/dist/esm/abis/delay/1.0.1.js +728 -0
  64. package/dist/esm/abis/delay/1.1.0.d.ts +720 -0
  65. package/dist/esm/abis/delay/1.1.0.js +938 -0
  66. package/dist/esm/abis/delay/1.1.1.d.ts +720 -0
  67. package/dist/esm/abis/delay/1.1.1.js +938 -0
  68. package/dist/esm/abis/erc20Votes/1.0.0.d.ts +613 -0
  69. package/dist/esm/abis/erc20Votes/1.0.0.js +797 -0
  70. package/dist/esm/abis/erc721Votes/1.0.0.d.ts +610 -0
  71. package/dist/esm/abis/erc721Votes/1.0.0.js +792 -0
  72. package/dist/esm/abis/exit/1.0.0.d.ts +309 -0
  73. package/dist/esm/abis/exit/1.0.0.js +400 -0
  74. package/dist/esm/abis/exit/1.1.0.d.ts +323 -0
  75. package/dist/esm/abis/exit/1.1.0.js +419 -0
  76. package/dist/esm/abis/exit/1.2.0.d.ts +323 -0
  77. package/dist/esm/abis/exit/1.2.0.js +419 -0
  78. package/dist/esm/abis/exitERC721/1.1.0.d.ts +323 -0
  79. package/dist/esm/abis/exitERC721/1.1.0.js +419 -0
  80. package/dist/esm/abis/exitERC721/1.2.0.d.ts +323 -0
  81. package/dist/esm/abis/exitERC721/1.2.0.js +419 -0
  82. package/dist/esm/abis/factory/1.0.0.d.ts +38 -0
  83. package/dist/esm/abis/factory/1.0.0.js +50 -0
  84. package/dist/esm/abis/factory/1.1.0.d.ts +58 -0
  85. package/dist/esm/abis/factory/1.1.0.js +77 -0
  86. package/dist/esm/abis/factory/1.2.0.d.ts +66 -0
  87. package/dist/esm/abis/factory/1.2.0.js +88 -0
  88. package/dist/esm/abis/index.d.ts +13970 -0
  89. package/dist/esm/abis/index.js +98 -0
  90. package/dist/esm/abis/metaGuard/1.0.0.d.ts +363 -0
  91. package/dist/esm/abis/metaGuard/1.0.0.js +471 -0
  92. package/dist/esm/abis/multisendEncoder/1.0.0.d.ts +47 -0
  93. package/dist/esm/abis/multisendEncoder/1.0.0.js +61 -0
  94. package/dist/esm/abis/ozGovernor/1.0.0.d.ts +821 -0
  95. package/dist/esm/abis/ozGovernor/1.0.0.js +1063 -0
  96. package/dist/esm/abis/realityERC20/2.0.0.d.ts +674 -0
  97. package/dist/esm/abis/realityERC20/2.0.0.js +871 -0
  98. package/dist/esm/abis/realityETH/2.0.0.d.ts +674 -0
  99. package/dist/esm/abis/realityETH/2.0.0.js +871 -0
  100. package/dist/esm/abis/roles/1.0.0.d.ts +770 -0
  101. package/dist/esm/abis/roles/1.0.0.js +990 -0
  102. package/dist/esm/abis/roles/1.1.0.d.ts +770 -0
  103. package/dist/esm/abis/roles/1.1.0.js +990 -0
  104. package/dist/esm/abis/roles/2.1.0.d.ts +1094 -0
  105. package/dist/esm/abis/roles/2.1.0.js +1408 -0
  106. package/dist/esm/abis/roles/2.1.1.d.ts +1094 -0
  107. package/dist/esm/abis/roles/2.1.1.js +1408 -0
  108. package/dist/esm/abis/scopeGuard/1.0.0.d.ts +457 -0
  109. package/dist/esm/abis/scopeGuard/1.0.0.js +592 -0
  110. package/dist/esm/contracts.d.ts +66 -0
  111. package/dist/esm/contracts.js +142 -0
  112. package/dist/esm/explorer.d.ts +81 -0
  113. package/dist/esm/explorer.js +256 -0
  114. package/dist/esm/extract.d.ts +15 -0
  115. package/dist/esm/extract.js +114 -0
  116. package/dist/esm/index.d.ts +3 -0
  117. package/dist/esm/index.js +3 -0
  118. package/dist/esm/mastercopies.d.ts +21 -0
  119. package/dist/esm/mastercopies.js +27 -0
  120. package/dist/esm/networks.d.ts +37 -0
  121. package/dist/esm/networks.js +229 -0
  122. package/dist/esm/package.json +1 -0
  123. package/dist/esm/rpc.d.ts +6 -0
  124. package/dist/esm/rpc.js +33 -0
  125. package/dist/esm/singleton.d.ts +24 -0
  126. package/dist/esm/singleton.js +38 -0
  127. package/dist/esm/types.d.ts +43 -0
  128. package/dist/esm/types.js +6 -0
  129. package/dist/esm/ui.d.ts +16 -0
  130. package/dist/esm/ui.js +53 -0
  131. package/dist/esm/zodiacModule.d.ts +4 -0
  132. package/dist/esm/zodiacModule.js +56 -0
  133. package/package.json +29 -74
  134. package/contracts/core/GuardableModifier.sol +0 -96
  135. package/contracts/core/GuardableModule.sol +0 -95
  136. package/contracts/core/Modifier.sol +0 -204
  137. package/contracts/core/Module.sol +0 -73
  138. package/contracts/factory/FactoryFriendly.sol +0 -10
  139. package/contracts/factory/ModuleProxyFactory.sol +0 -51
  140. package/contracts/guard/BaseGuard.sol +0 -36
  141. package/contracts/guard/Guardable.sol +0 -32
  142. package/contracts/interfaces/IAvatar.sol +0 -71
  143. package/contracts/interfaces/IGuard.sol +0 -22
  144. package/contracts/signature/ExecutionTracker.sol +0 -17
  145. package/contracts/signature/IERC1271.sol +0 -19
  146. package/contracts/signature/SignatureChecker.sol +0 -154
  147. package/contracts/test/TestAvatar.sol +0 -64
  148. package/contracts/test/TestGuard.sol +0 -82
  149. package/contracts/test/TestGuardableModifier.sol +0 -82
  150. package/contracts/test/TestModifier.sol +0 -88
  151. package/contracts/test/TestModule.sol +0 -66
  152. package/contracts/test/TestSignature.sol +0 -71
  153. package/dist/index.d.mts +0 -16332
  154. package/dist/index.d.ts +0 -16332
  155. package/dist/index.js +0 -24880
  156. package/dist/index.js.map +0 -1
  157. package/dist/index.mjs +0 -24845
  158. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ /**
3
+ * Source-of-truth network registry.
4
+ *
5
+ * One entry per chain referenced across the Zodiac repos (the in-repo chain
6
+ * list plus the chains served by `ser` and `rolesSubgraph`). Each entry carries:
7
+ *
8
+ * - `chainId` the canonical chain id
9
+ * - `alchemyRpcUrl` Alchemy JSON-RPC endpoint, or null when Alchemy does
10
+ * not serve the chain. The key is read from `ALCHEMY_KEY`.
11
+ * - `publicRpc` public JSON-RPC endpoint, or null when no public
12
+ * fallback is configured.
13
+ * - `etherscanApiUrl` Etherscan V2 multichain explorer API endpoint (with
14
+ * `?chainid=`), or null when the chain is not supported
15
+ * by Etherscan V2. V2 support was checked against
16
+ * api.etherscan.io/v2/chainlist.
17
+ *
18
+ * Entries are sorted by `chainId`.
19
+ *
20
+ * Not wired into anything yet — this is a config drop, intentionally standalone.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.networks = void 0;
24
+ exports.resolveNetwork = resolveNetwork;
25
+ const ETHERSCAN_V2_API = "https://api.etherscan.io/v2/api";
26
+ const alchemyKey = typeof process !== "undefined" ? process.env.ALCHEMY_KEY ?? "" : "";
27
+ const ETHERSCAN_V2_CHAIN_IDS = new Set([
28
+ 1, 10, 50, 51, 56, 100, 130, 143, 146, 199, 204, 252, 480, 988, 999, 1029,
29
+ 1284, 1285, 1287, 1328, 1329, 2201, 2523, 2741, 4326, 4352, 5000, 5611, 6343,
30
+ 8453, 9745, 9746, 10143, 11124, 33111, 33139, 42161, 42220, 43114, 43522,
31
+ 59144, 80069, 80094, 81457, 167000, 167013, 560048, 737373, 747474, 11155111,
32
+ 168587773,
33
+ ]);
34
+ /** Build an Alchemy RPC URL from its endpoint subdomain. */
35
+ const alchemy = (subdomain) => `https://${subdomain}.g.alchemy.com/v2/${alchemyKey}`;
36
+ /** Build the Etherscan V2 multichain API URL for a chain. */
37
+ const etherscanV2 = (chainId) => ETHERSCAN_V2_CHAIN_IDS.has(chainId)
38
+ ? `${ETHERSCAN_V2_API}?chainid=${chainId}`
39
+ : null;
40
+ exports.networks = [
41
+ {
42
+ name: "mainnet",
43
+ chainId: 1,
44
+ alchemyRpcUrl: alchemy("eth-mainnet"),
45
+ publicRpc: null,
46
+ etherscanApiUrl: etherscanV2(1),
47
+ },
48
+ {
49
+ name: "optimism",
50
+ chainId: 10,
51
+ alchemyRpcUrl: alchemy("opt-mainnet"),
52
+ publicRpc: null,
53
+ etherscanApiUrl: etherscanV2(10),
54
+ },
55
+ {
56
+ name: "flare",
57
+ chainId: 14,
58
+ alchemyRpcUrl: null,
59
+ publicRpc: "https://flare-api.flare.network/ext/C/rpc",
60
+ etherscanApiUrl: null,
61
+ },
62
+ {
63
+ name: "bnb",
64
+ chainId: 56,
65
+ alchemyRpcUrl: alchemy("bnb-mainnet"),
66
+ publicRpc: "https://bsc-dataseed.bnbchain.org",
67
+ etherscanApiUrl: etherscanV2(56),
68
+ },
69
+ {
70
+ name: "gnosis",
71
+ chainId: 100,
72
+ alchemyRpcUrl: null,
73
+ publicRpc: "https://rpc.gnosischain.com",
74
+ etherscanApiUrl: etherscanV2(100),
75
+ },
76
+ {
77
+ name: "unichain",
78
+ chainId: 130,
79
+ alchemyRpcUrl: alchemy("unichain-mainnet"),
80
+ publicRpc: "https://mainnet.unichain.org",
81
+ etherscanApiUrl: etherscanV2(130),
82
+ },
83
+ {
84
+ name: "polygon",
85
+ chainId: 137,
86
+ alchemyRpcUrl: alchemy("polygon-mainnet"),
87
+ publicRpc: null,
88
+ etherscanApiUrl: etherscanV2(137),
89
+ },
90
+ {
91
+ name: "sonic",
92
+ chainId: 146,
93
+ alchemyRpcUrl: null,
94
+ publicRpc: "https://rpc.soniclabs.com",
95
+ etherscanApiUrl: etherscanV2(146),
96
+ },
97
+ {
98
+ name: "worldchain",
99
+ chainId: 480,
100
+ alchemyRpcUrl: null,
101
+ publicRpc: "https://worldchain-mainnet.g.alchemy.com/public",
102
+ etherscanApiUrl: etherscanV2(480),
103
+ },
104
+ {
105
+ name: "hyperevm",
106
+ chainId: 999,
107
+ alchemyRpcUrl: null, //alchemy("hyperliquid-mainnet"),
108
+ publicRpc: null,
109
+ etherscanApiUrl: etherscanV2(999),
110
+ },
111
+ {
112
+ name: "megaeth",
113
+ chainId: 4326,
114
+ alchemyRpcUrl: alchemy("megaeth-mainnet"),
115
+ publicRpc: null,
116
+ etherscanApiUrl: etherscanV2(4326),
117
+ },
118
+ {
119
+ name: "mantle",
120
+ chainId: 5000,
121
+ alchemyRpcUrl: alchemy("mantle-mainnet"),
122
+ publicRpc: null,
123
+ etherscanApiUrl: etherscanV2(5000),
124
+ },
125
+ {
126
+ name: "base",
127
+ chainId: 8453,
128
+ alchemyRpcUrl: alchemy("base-mainnet"),
129
+ publicRpc: null,
130
+ etherscanApiUrl: etherscanV2(8453),
131
+ },
132
+ {
133
+ name: "plasma",
134
+ chainId: 9745,
135
+ alchemyRpcUrl: null,
136
+ publicRpc: "https://rpc.plasma.to",
137
+ etherscanApiUrl: etherscanV2(9745),
138
+ },
139
+ {
140
+ name: "arbitrum",
141
+ chainId: 42161,
142
+ alchemyRpcUrl: alchemy("arb-mainnet"),
143
+ publicRpc: null,
144
+ etherscanApiUrl: etherscanV2(42161),
145
+ },
146
+ {
147
+ name: "celo",
148
+ chainId: 42220,
149
+ alchemyRpcUrl: alchemy("celo-mainnet"),
150
+ publicRpc: null,
151
+ etherscanApiUrl: etherscanV2(42220),
152
+ },
153
+ {
154
+ name: "avalanche",
155
+ chainId: 43114,
156
+ alchemyRpcUrl: alchemy("avax-mainnet"),
157
+ publicRpc: null,
158
+ etherscanApiUrl: etherscanV2(43114),
159
+ },
160
+ {
161
+ name: "ink",
162
+ chainId: 57073,
163
+ alchemyRpcUrl: alchemy("ink-mainnet"),
164
+ publicRpc: "https://rpc-gel.inkonchain.com",
165
+ etherscanApiUrl: null,
166
+ },
167
+ {
168
+ name: "linea",
169
+ chainId: 59144,
170
+ alchemyRpcUrl: alchemy("linea-mainnet"),
171
+ publicRpc: null,
172
+ etherscanApiUrl: etherscanV2(59144),
173
+ },
174
+ {
175
+ name: "bob",
176
+ chainId: 60808,
177
+ alchemyRpcUrl: null,
178
+ publicRpc: "https://rpc.gobob.xyz",
179
+ etherscanApiUrl: null,
180
+ },
181
+ {
182
+ name: "berachain",
183
+ chainId: 80094,
184
+ alchemyRpcUrl: null,
185
+ publicRpc: "https://rpc.berachain.com",
186
+ etherscanApiUrl: etherscanV2(80094),
187
+ },
188
+ {
189
+ name: "scroll",
190
+ chainId: 534352,
191
+ alchemyRpcUrl: alchemy("scroll-mainnet"),
192
+ publicRpc: null,
193
+ etherscanApiUrl: null,
194
+ },
195
+ {
196
+ name: "katana",
197
+ chainId: 747474,
198
+ alchemyRpcUrl: null,
199
+ publicRpc: "https://rpc.katana.network",
200
+ etherscanApiUrl: etherscanV2(747474),
201
+ },
202
+ {
203
+ name: "sepolia",
204
+ chainId: 11155111,
205
+ alchemyRpcUrl: alchemy("eth-sepolia"),
206
+ publicRpc: null,
207
+ etherscanApiUrl: etherscanV2(11155111),
208
+ },
209
+ ];
210
+ /**
211
+ * Resolve a network name or chain id (string or number) to its config. An
212
+ * unknown name throws; an unknown numeric chain id resolves to an Etherscan V2
213
+ * entry only when that chain is listed by Etherscan V2.
214
+ */
215
+ function resolveNetwork(networkOrChainId) {
216
+ const key = String(networkOrChainId).toLowerCase();
217
+ const found = exports.networks.find((n) => n.name.toLowerCase() === key || String(n.chainId) === key);
218
+ if (found)
219
+ return found;
220
+ if (/^\d+$/.test(key)) {
221
+ const chainId = Number(key);
222
+ return {
223
+ name: key,
224
+ chainId,
225
+ alchemyRpcUrl: null,
226
+ publicRpc: null,
227
+ etherscanApiUrl: etherscanV2(chainId),
228
+ };
229
+ }
230
+ throw new Error(`Unknown network "${networkOrChainId}". Known networks: ${exports.networks
231
+ .map((n) => n.name)
232
+ .join(", ")} (or pass a numeric chain id).`);
233
+ }
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCode = getCode;
4
+ /**
5
+ * Perform a raw JSON-RPC eth_getCode call using fetch.
6
+ * This is used for fast, low-overhead status checks across many networks
7
+ * without initializing a full Ethers provider.
8
+ */
9
+ async function getCode(rpcUrl, address) {
10
+ const controller = new AbortController();
11
+ const timeout = setTimeout(() => controller.abort(), 5_000);
12
+ try {
13
+ const response = await fetch(rpcUrl, {
14
+ method: "POST",
15
+ headers: { "content-type": "application/json" },
16
+ body: JSON.stringify({
17
+ jsonrpc: "2.0",
18
+ id: 1,
19
+ method: "eth_getCode",
20
+ params: [address, "latest"],
21
+ }),
22
+ signal: controller.signal,
23
+ });
24
+ if (!response.ok) {
25
+ throw new Error(`RPC returned HTTP ${response.status}`);
26
+ }
27
+ const payload = (await response.json());
28
+ if (payload.error || typeof payload.result !== "string") {
29
+ throw new Error("RPC returned an invalid eth_getCode response");
30
+ }
31
+ return payload.result;
32
+ }
33
+ finally {
34
+ clearTimeout(timeout);
35
+ }
36
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NICK_FACTORY = exports.ERC2470_FACTORY = void 0;
4
+ exports.recoverDeployment = recoverDeployment;
5
+ const ethers_1 = require("ethers");
6
+ /**
7
+ * Known CREATE2 singleton factories used across the Zodiac ecosystem. Both
8
+ * yield identical addresses on every chain, which is what makes mastercopy
9
+ * replication address-stable.
10
+ */
11
+ exports.ERC2470_FACTORY = "0xce0042B868300000d44A59004Da54A005ffdcf9f";
12
+ exports.NICK_FACTORY = "0x4e59b44847b379578588920cA78FbF26c0B4956C";
13
+ const erc2470Interface = new ethers_1.Interface([
14
+ "function deploy(bytes _initCode, bytes32 _salt) returns (address)",
15
+ ]);
16
+ /**
17
+ * Recover the init code and salt from a singleton-factory deployment
18
+ * transaction. Supports the ERC-2470 factory (an abi-encoded `deploy` call)
19
+ * and Nick's factory (raw `salt ++ initCode` calldata).
20
+ *
21
+ * Returns undefined when the transaction does not target a known factory, in
22
+ * which case the deployment cannot be replicated address-stably.
23
+ */
24
+ function recoverDeployment({ to, input, }) {
25
+ const factory = to ? (0, ethers_1.getAddress)(to) : null;
26
+ if (factory === (0, ethers_1.getAddress)(exports.ERC2470_FACTORY)) {
27
+ try {
28
+ const [initCode, salt] = erc2470Interface.decodeFunctionData("deploy", input);
29
+ return { factory: exports.ERC2470_FACTORY, initCode: (0, ethers_1.hexlify)(initCode), salt };
30
+ }
31
+ catch {
32
+ return undefined;
33
+ }
34
+ }
35
+ if (factory === (0, ethers_1.getAddress)(exports.NICK_FACTORY)) {
36
+ // Nick's factory: calldata is salt (32 bytes) followed by the init code.
37
+ const salt = (0, ethers_1.dataSlice)(input, 0, 32);
38
+ const initCode = (0, ethers_1.dataSlice)(input, 32);
39
+ return { factory: exports.NICK_FACTORY, initCode, salt };
40
+ }
41
+ return undefined;
42
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * Artifacts written for a single asset (the main contract or a linked library)
4
+ * under `mastercopies/<module>/<version>/<asset>/`. Each field maps to one file:
5
+ * `abi.json`, `sourcecode.json`, `bytecode.json`.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
package/dist/cjs/ui.js ADDED
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QUESTION = exports.CROSS = exports.CHECK = void 0;
4
+ exports.color = color;
5
+ exports.visibleLength = visibleLength;
6
+ exports.formatRow = formatRow;
7
+ exports.printTable = printTable;
8
+ exports.renderProgress = renderProgress;
9
+ exports.clearProgress = clearProgress;
10
+ exports.showTransient = showTransient;
11
+ exports.printStatusLine = printStatusLine;
12
+ const readline_1 = require("readline");
13
+ exports.CHECK = "✓";
14
+ exports.CROSS = "✗";
15
+ exports.QUESTION = "?";
16
+ function color(value, colorName) {
17
+ const code = colorName === "green" ? 32 : colorName === "red" ? 31 : 33;
18
+ return `\u001b[${code}m${value}\u001b[0m`;
19
+ }
20
+ function visibleLength(value) {
21
+ return value.replace(/\u001b\[[0-9;]*m/g, "").length;
22
+ }
23
+ function formatRow(row, widths) {
24
+ return row
25
+ .map((value, index) => value + " ".repeat(widths[index] - visibleLength(value)))
26
+ .join(" ");
27
+ }
28
+ function printTable(headers, rows, caption) {
29
+ const body = rows.map((row) => [
30
+ row.network,
31
+ ...row.cells.map((c) => c.label),
32
+ ]);
33
+ const widths = headers.map((header, index) => Math.max(header.length, ...body.map((row) => visibleLength(row[index]))));
34
+ console.log(formatRow(headers, widths));
35
+ console.log(widths.map((width) => "-".repeat(width)).join(" "));
36
+ for (const row of body) {
37
+ console.log(formatRow(row, widths));
38
+ }
39
+ console.log();
40
+ console.log(caption.join(" "));
41
+ }
42
+ function renderProgress(completed, total, label = "Checking deployments") {
43
+ if (!process.stderr.isTTY)
44
+ return;
45
+ (0, readline_1.cursorTo)(process.stderr, 0);
46
+ process.stderr.write(`${label}: ${completed}/${total} requests`);
47
+ }
48
+ function clearProgress() {
49
+ if (!process.stderr.isTTY)
50
+ return;
51
+ (0, readline_1.cursorTo)(process.stderr, 0);
52
+ (0, readline_1.clearLine)(process.stderr, 0);
53
+ }
54
+ function showTransient(message) {
55
+ if (!process.stderr.isTTY)
56
+ return;
57
+ clearProgress();
58
+ (0, readline_1.cursorTo)(process.stderr, 0);
59
+ process.stderr.write(message);
60
+ }
61
+ function printStatusLine(message) {
62
+ clearProgress();
63
+ console.log(message);
64
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getZodiacModuleAbi = getZodiacModuleAbi;
4
+ exports.getZodiacModuleAddress = getZodiacModuleAddress;
5
+ exports.sanityCheckZodiacModuleAddress = sanityCheckZodiacModuleAddress;
6
+ const semver_1 = require("semver");
7
+ const index_js_1 = require("./abis/index.js");
8
+ const contracts_js_1 = require("./contracts.js");
9
+ function getZodiacModuleAbi(name, versionRange = "*") {
10
+ const versions = index_js_1.ABIs[name];
11
+ if (!versions) {
12
+ throw new Error(`No ABI registry for ${name}`);
13
+ }
14
+ const version = matchingVersion(versions, versionRange);
15
+ if (!version) {
16
+ throw new Error(`No ABI for ${name}@${versionRange}`);
17
+ }
18
+ const address = contracts_js_1.CanonicalAddresses[name]?.[version];
19
+ if (!address) {
20
+ throw new Error(`No address for ${name}@${version}`);
21
+ }
22
+ sanityCheckZodiacModuleAddress(address);
23
+ return versions[version];
24
+ }
25
+ function getZodiacModuleAddress(name, versionRange = "*") {
26
+ const versions = contracts_js_1.CanonicalAddresses[name];
27
+ if (!versions) {
28
+ throw new Error(`No address registry for ${name}`);
29
+ }
30
+ const version = matchingVersion(versions, versionRange, Boolean);
31
+ if (!version) {
32
+ throw new Error(`No address for ${name}@${versionRange}`);
33
+ }
34
+ sanityCheckZodiacModuleAddress(versions[version]);
35
+ return versions[version];
36
+ }
37
+ function sanityCheckZodiacModuleAddress(address) {
38
+ const normalizedAddress = address.toLowerCase();
39
+ const canonicalAddresses = flattenAddresses(contracts_js_1.CanonicalAddresses);
40
+ const faultyAddresses = flattenAddresses(contracts_js_1.FAULTY);
41
+ if (!canonicalAddresses.has(normalizedAddress)) {
42
+ throw new Error(`Unknown Zodiac module address: ${address}`);
43
+ }
44
+ if (faultyAddresses.has(normalizedAddress)) {
45
+ throw new Error(`Faulty Zodiac module address: ${address}`);
46
+ }
47
+ }
48
+ function matchingVersion(versions, versionRange, predicate = () => true) {
49
+ return Object.entries(versions)
50
+ .filter(([, value]) => predicate(value))
51
+ .map(([entry]) => entry)
52
+ .sort(semver_1.compare)
53
+ .reverse()
54
+ .find((entry) => (0, semver_1.satisfies)(entry, (0, semver_1.valid)(versionRange) ? `=${versionRange}` : versionRange));
55
+ }
56
+ function flattenAddresses(addresses) {
57
+ return new Set(Object.values(addresses)
58
+ .flatMap((versions) => Object.values(versions ?? {}))
59
+ .filter(Boolean)
60
+ .map((address) => address.toLowerCase()));
61
+ }