@zoralabs/protocol-deployments 0.0.11 → 0.0.12
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.
- package/.turbo/turbo-build.log +14 -15
- package/CHANGELOG.md +7 -0
- package/README.md +1 -1
- package/addresses/1.json +5 -6
- package/addresses/10.json +5 -6
- package/addresses/11155111.json +11 -7
- package/addresses/420.json +6 -7
- package/addresses/5.json +6 -6
- package/addresses/7777777.json +5 -7
- package/addresses/8453.json +5 -6
- package/addresses/84531.json +7 -7
- package/addresses/999.json +6 -8
- package/addresses/999999999.json +6 -6
- package/chainConfigs/11155111.json +3 -2
- package/deterministicConfig/factoryProxy/signatures.json +1 -1
- package/deterministicConfig/premintExecutorProxy/signatures.json +1 -0
- package/deterministicConfig/upgradeGate/signatures.json +1 -1
- package/dist/index.cjs +42 -66
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +42 -66
- package/dist/index.js.map +1 -1
- package/dist/package/batchPublish.test.d.ts +19 -18
- package/dist/package/batchPublish.test.d.ts.map +1 -1
- package/dist/package/chainConfigs.d.ts +1 -0
- package/dist/package/chainConfigs.d.ts.map +1 -1
- package/dist/package/wagmiGenerated.d.ts +64 -48
- package/dist/package/wagmiGenerated.d.ts.map +1 -1
- package/foundry.toml +6 -6
- package/package/batchPublish.test.ts +4 -4
- package/package/wagmiGenerated.ts +59 -42
- package/package.json +21 -21
- package/remappings.txt +9 -9
- package/script/DeployMintersAndImplementations.s.sol +0 -2
- package/script/copy-deployed-contracts.ts +38 -18
- package/script/signDeploymentTransactions.ts +83 -58
- package/src/ZoraDeployerBase.sol +0 -1
- package/wagmi.config.ts +1 -1
- package/package/chainConfigs.ts +0 -60
|
@@ -32,18 +32,20 @@ async function signAndSaveSignatures({
|
|
|
32
32
|
turnkeyAccount,
|
|
33
33
|
chainConfigs,
|
|
34
34
|
proxyName,
|
|
35
|
+
chainId,
|
|
35
36
|
}: {
|
|
36
37
|
turnkeyAccount: LocalAccount;
|
|
37
38
|
chainConfigs: ChainConfig[];
|
|
38
39
|
proxyName: "factoryProxy" | "premintExecutorProxy";
|
|
40
|
+
chainId: number;
|
|
39
41
|
}) {
|
|
40
42
|
const configFolder = path.resolve(
|
|
41
43
|
__dirname,
|
|
42
|
-
`../deterministicConfig/${proxyName}
|
|
44
|
+
`../deterministicConfig/${proxyName}/`,
|
|
43
45
|
);
|
|
44
46
|
const configFile = path.join(configFolder, "params.json");
|
|
45
47
|
const deterministicDeployConfig = JSON.parse(
|
|
46
|
-
await readFile(configFile, "utf-8")
|
|
48
|
+
await readFile(configFile, "utf-8"),
|
|
47
49
|
);
|
|
48
50
|
|
|
49
51
|
const deploymentConfig: DeterministicDeploymentConfig = {
|
|
@@ -54,31 +56,34 @@ async function signAndSaveSignatures({
|
|
|
54
56
|
proxyCreationCode: deterministicDeployConfig.proxyCreationCode as Address,
|
|
55
57
|
};
|
|
56
58
|
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
59
|
+
const chainConfig = chainConfigs.find((x) => x.chainId === chainId);
|
|
60
|
+
|
|
61
|
+
if (!chainConfig) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const signature = await signDeployFactory({
|
|
66
|
+
account: turnkeyAccount,
|
|
67
|
+
implementationAddress: chainConfig.implementationAddress,
|
|
68
|
+
owner: chainConfig.owner,
|
|
69
|
+
chainId: chainConfig.chainId,
|
|
70
|
+
deterministicDeploymentConfig: deploymentConfig,
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
const existingSignatures = JSON.parse(
|
|
74
|
+
await readFile(path.join(configFolder, "signatures.json"), "utf-8"),
|
|
70
75
|
);
|
|
71
76
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}, {} as { [key: number]: string });
|
|
77
|
+
const updated = {
|
|
78
|
+
...existingSignatures,
|
|
79
|
+
[chainId]: signature,
|
|
80
|
+
};
|
|
77
81
|
|
|
82
|
+
// aggregate above to object of key value pair indexed by chain id as number:
|
|
78
83
|
// write as json to ../deterministicConfig/factoryDeploySignatures.json:
|
|
79
84
|
await writeFile(
|
|
80
85
|
path.join(configFolder, "signatures.json"),
|
|
81
|
-
JSON.stringify(
|
|
86
|
+
JSON.stringify(updated, null, 2),
|
|
82
87
|
);
|
|
83
88
|
}
|
|
84
89
|
|
|
@@ -86,6 +91,7 @@ async function signAndSaveUpgradeGate({
|
|
|
86
91
|
turnkeyAccount,
|
|
87
92
|
chainConfigs,
|
|
88
93
|
proxyName,
|
|
94
|
+
chainId,
|
|
89
95
|
}: {
|
|
90
96
|
turnkeyAccount: LocalAccount;
|
|
91
97
|
chainConfigs: {
|
|
@@ -93,14 +99,16 @@ async function signAndSaveUpgradeGate({
|
|
|
93
99
|
owner: Address;
|
|
94
100
|
}[];
|
|
95
101
|
proxyName: "upgradeGate";
|
|
102
|
+
chainId: number;
|
|
96
103
|
}) {
|
|
97
104
|
const configFolder = path.resolve(
|
|
98
105
|
__dirname,
|
|
99
|
-
`../deterministicConfig/${proxyName}
|
|
106
|
+
`../deterministicConfig/${proxyName}/`,
|
|
100
107
|
);
|
|
101
108
|
const configFile = path.join(configFolder, "params.json");
|
|
109
|
+
|
|
102
110
|
const deterministicDeployConfig = JSON.parse(
|
|
103
|
-
await readFile(configFile, "utf-8")
|
|
111
|
+
await readFile(configFile, "utf-8"),
|
|
104
112
|
);
|
|
105
113
|
|
|
106
114
|
const deploymentConfig: GenericDeploymentConfiguration = {
|
|
@@ -113,47 +121,48 @@ async function signAndSaveUpgradeGate({
|
|
|
113
121
|
deterministicDeployConfig.proxyDeployerAddress! as Address,
|
|
114
122
|
};
|
|
115
123
|
|
|
116
|
-
const upgradeGateAbi = parseAbi([
|
|
117
|
-
// ^? const abi: readonly [{ name: "balanceOf"; type: "function"; stateMutability:...
|
|
118
|
-
"function initialize(address owner)",
|
|
119
|
-
]);
|
|
124
|
+
const upgradeGateAbi = parseAbi(["function initialize(address owner)"]);
|
|
120
125
|
|
|
121
|
-
const
|
|
122
|
-
chainConfigs.map(async (chainConfig) => {
|
|
123
|
-
const initCall = encodeFunctionData({
|
|
124
|
-
abi: upgradeGateAbi,
|
|
125
|
-
functionName: "initialize",
|
|
126
|
-
args: [chainConfig.owner],
|
|
127
|
-
});
|
|
126
|
+
const chainConfig = chainConfigs.find((x) => x.chainId === chainId);
|
|
128
127
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
128
|
+
if (!chainConfig) {
|
|
129
|
+
throw new Error(`No chain config found for chain id ${chainId}`);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const initCall = encodeFunctionData({
|
|
133
|
+
abi: upgradeGateAbi,
|
|
134
|
+
functionName: "initialize",
|
|
135
|
+
args: [chainConfig.owner],
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
console.log("signing", { turnkeyAccount, deploymentConfig });
|
|
139
|
+
|
|
140
|
+
const signature = await signGenericDeploy({
|
|
141
|
+
account: turnkeyAccount,
|
|
142
|
+
chainId: chainConfig.chainId,
|
|
143
|
+
config: deploymentConfig,
|
|
144
|
+
initCall,
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
const existingSignatures = JSON.parse(
|
|
148
|
+
await readFile(path.join(configFolder, "signatures.json"), "utf-8"),
|
|
139
149
|
);
|
|
140
150
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}, {} as { [key: number]: string });
|
|
151
|
+
const updated = {
|
|
152
|
+
...existingSignatures,
|
|
153
|
+
[chainId]: signature,
|
|
154
|
+
};
|
|
146
155
|
|
|
147
156
|
// write as json to ../deterministicConfig/factoryDeploySignatures.json:
|
|
148
157
|
await writeFile(
|
|
149
158
|
path.join(configFolder, "signatures.json"),
|
|
150
|
-
JSON.stringify(
|
|
159
|
+
JSON.stringify(updated, null, 2),
|
|
151
160
|
);
|
|
152
161
|
}
|
|
153
162
|
|
|
154
163
|
const getChainConfigs = async () => {
|
|
155
164
|
const chainConfigsFiles = await glob(
|
|
156
|
-
path.resolve(__dirname, "../chainConfigs/*.json")
|
|
165
|
+
path.resolve(__dirname, "../chainConfigs/*.json"),
|
|
157
166
|
);
|
|
158
167
|
|
|
159
168
|
const chainConfigs = await Promise.all(
|
|
@@ -167,7 +176,7 @@ const getChainConfigs = async () => {
|
|
|
167
176
|
chainId,
|
|
168
177
|
owner: fileContents["FACTORY_OWNER"]! as Address,
|
|
169
178
|
};
|
|
170
|
-
})
|
|
179
|
+
}),
|
|
171
180
|
);
|
|
172
181
|
|
|
173
182
|
return chainConfigs;
|
|
@@ -175,7 +184,7 @@ const getChainConfigs = async () => {
|
|
|
175
184
|
|
|
176
185
|
const getFactoryImplConfigs = async () => {
|
|
177
186
|
const addresseFiles = await glob(
|
|
178
|
-
path.resolve(__dirname, "../addresses/*.json")
|
|
187
|
+
path.resolve(__dirname, "../addresses/*.json"),
|
|
179
188
|
);
|
|
180
189
|
|
|
181
190
|
const chainConfigs = await Promise.all(
|
|
@@ -195,7 +204,7 @@ const getFactoryImplConfigs = async () => {
|
|
|
195
204
|
implementationAddress: fileContents["FACTORY_IMPL"] as Address,
|
|
196
205
|
owner: chainConfig["FACTORY_OWNER"] as Address,
|
|
197
206
|
};
|
|
198
|
-
})
|
|
207
|
+
}),
|
|
199
208
|
);
|
|
200
209
|
|
|
201
210
|
return chainConfigs;
|
|
@@ -203,7 +212,7 @@ const getFactoryImplConfigs = async () => {
|
|
|
203
212
|
|
|
204
213
|
const getPreminterImplConfigs = async () => {
|
|
205
214
|
const addresseFiles = await glob(
|
|
206
|
-
path.resolve(__dirname, "../addresses/*.json")
|
|
215
|
+
path.resolve(__dirname, "../addresses/*.json"),
|
|
207
216
|
);
|
|
208
217
|
|
|
209
218
|
const chainConfigs = await Promise.all(
|
|
@@ -223,12 +232,23 @@ const getPreminterImplConfigs = async () => {
|
|
|
223
232
|
implementationAddress: fileContents["PREMINTER_IMPL"] as Address,
|
|
224
233
|
owner: chainConfig["FACTORY_OWNER"] as Address,
|
|
225
234
|
};
|
|
226
|
-
})
|
|
235
|
+
}),
|
|
227
236
|
);
|
|
228
237
|
|
|
229
238
|
return chainConfigs.filter((x) => x.implementationAddress !== undefined);
|
|
230
239
|
};
|
|
231
240
|
|
|
241
|
+
function getChainIdPositionalArg() {
|
|
242
|
+
// parse chain id as first argument:
|
|
243
|
+
const chainIdArg = process.argv[2];
|
|
244
|
+
|
|
245
|
+
if (!chainIdArg) {
|
|
246
|
+
throw new Error("Must provide chain id as first argument");
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return parseInt(chainIdArg);
|
|
250
|
+
}
|
|
251
|
+
|
|
232
252
|
async function main() {
|
|
233
253
|
// Create a Turnkey HTTP client with API key credentials
|
|
234
254
|
const httpClient = new TurnkeyClient(
|
|
@@ -240,34 +260,39 @@ async function main() {
|
|
|
240
260
|
new ApiKeyStamper({
|
|
241
261
|
apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY!,
|
|
242
262
|
apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY!,
|
|
243
|
-
})
|
|
263
|
+
}),
|
|
244
264
|
);
|
|
245
265
|
|
|
246
266
|
// Create the Viem custom account
|
|
247
267
|
const turnkeyAccount = await createAccount({
|
|
248
268
|
client: httpClient,
|
|
249
269
|
organizationId: process.env.TURNKEY_ORGANIZATION_ID!,
|
|
250
|
-
|
|
270
|
+
signWith: process.env.TURNKEY_PRIVATE_KEY_ID!,
|
|
251
271
|
// optional; will be fetched from Turnkey if not provided
|
|
252
272
|
ethereumAddress: process.env.TURNKEY_TARGET_ADDRESS!,
|
|
253
273
|
});
|
|
254
274
|
|
|
275
|
+
const chainId = getChainIdPositionalArg();
|
|
276
|
+
|
|
255
277
|
await signAndSaveSignatures({
|
|
256
278
|
turnkeyAccount,
|
|
257
279
|
chainConfigs: await getFactoryImplConfigs(),
|
|
258
280
|
proxyName: "factoryProxy",
|
|
281
|
+
chainId,
|
|
259
282
|
});
|
|
260
283
|
|
|
261
284
|
await signAndSaveSignatures({
|
|
262
285
|
turnkeyAccount,
|
|
263
286
|
chainConfigs: await getPreminterImplConfigs(),
|
|
264
287
|
proxyName: "premintExecutorProxy",
|
|
288
|
+
chainId,
|
|
265
289
|
});
|
|
266
290
|
|
|
267
291
|
await signAndSaveUpgradeGate({
|
|
268
292
|
turnkeyAccount,
|
|
269
293
|
chainConfigs: await getChainConfigs(),
|
|
270
294
|
proxyName: "upgradeGate",
|
|
295
|
+
chainId,
|
|
271
296
|
});
|
|
272
297
|
}
|
|
273
298
|
|
package/src/ZoraDeployerBase.sol
CHANGED
|
@@ -37,7 +37,6 @@ abstract contract ZoraDeployerBase is DeploymentTestingUtils, ScriptDeploymentCo
|
|
|
37
37
|
vm.serializeAddress(deploymentJsonKey, PREMINTER_IMPL, deployment.preminterImpl);
|
|
38
38
|
vm.serializeAddress(deploymentJsonKey, UPGRADE_GATE, deployment.upgradeGate);
|
|
39
39
|
deploymentJson = vm.serializeAddress(deploymentJsonKey, FACTORY_PROXY, deployment.factoryProxy);
|
|
40
|
-
console2.log(deploymentJson);
|
|
41
40
|
}
|
|
42
41
|
|
|
43
42
|
function deployMinters(Deployment memory deployment) internal {
|
package/wagmi.config.ts
CHANGED
|
@@ -43,7 +43,7 @@ const getAddresses = () => {
|
|
|
43
43
|
|
|
44
44
|
for (const addressesFile of addressesFiles) {
|
|
45
45
|
const jsonAddress = JSON.parse(
|
|
46
|
-
readFileSync(`./addresses/${addressesFile}`, "utf-8")
|
|
46
|
+
readFileSync(`./addresses/${addressesFile}`, "utf-8"),
|
|
47
47
|
) as {
|
|
48
48
|
FIXED_PRICE_SALE_STRATEGY: Address;
|
|
49
49
|
MERKLE_MINT_SALE_STRATEGY: Address;
|
package/package/chainConfigs.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
export const chainConfigs = {
|
|
2
|
-
[1]: {
|
|
3
|
-
FACTORY_OWNER: "0xDB392f4391462d60B8B4413ef72018Ab595Af9D0",
|
|
4
|
-
MINT_FEE_RECIPIENT: "0xd1d1D4e36117aB794ec5d4c78cBD3a8904E691D0",
|
|
5
|
-
PROTOCOL_REWARDS: "0x7777777F279eba3d3Ad8F4E708545291A6fDBA8B",
|
|
6
|
-
},
|
|
7
|
-
[10]: {
|
|
8
|
-
FACTORY_OWNER: "0x4c7f7b6067fac9a737ecf2ca1a733fc85dd65a2b",
|
|
9
|
-
MINT_FEE_RECIPIENT: "0x7A810DCd0f8d83B20212326813Db6EF7E9FD030c",
|
|
10
|
-
PROTOCOL_REWARDS: "0x7777777F279eba3d3Ad8F4E708545291A6fDBA8B",
|
|
11
|
-
},
|
|
12
|
-
[11155111]: {
|
|
13
|
-
FACTORY_OWNER: "0xE51051a204afb2fC071A2406914cdEA5638e5018",
|
|
14
|
-
MINT_FEE_RECIPIENT: "0xE51051a204afb2fC071A2406914cdEA5638e5018",
|
|
15
|
-
},
|
|
16
|
-
[420]: {
|
|
17
|
-
FACTORY_OWNER: "0xbb45052B2260707655Dfd916a416264f5981192c",
|
|
18
|
-
MINT_FEE_RECIPIENT: "0x5dEe21327CD7CD6725C2578DA1c3E5bb2D2D34b2",
|
|
19
|
-
PROTOCOL_REWARDS: "0x7777777F279eba3d3Ad8F4E708545291A6fDBA8B",
|
|
20
|
-
},
|
|
21
|
-
[424]: {
|
|
22
|
-
FACTORY_OWNER: "0x8fbC66d36cceB3Ad69B4d672756da54CcFec1cD2",
|
|
23
|
-
MINT_FEE_RECIPIENT: "0x95FD5d77B206cCc0B1f7D7A4077fbE8eb4fC31eF",
|
|
24
|
-
PROTOCOL_REWARDS: "0x7777777A456fF23D9b6851184472c08FBDa73e32",
|
|
25
|
-
},
|
|
26
|
-
[5]: {
|
|
27
|
-
FACTORY_OWNER: "0xDC498668B5e6CC518fD58A2ADBF614Fd3A13D3a0",
|
|
28
|
-
MINT_FEE_RECIPIENT: "0x9444390c01Dd5b7249E53FAc31290F7dFF53450D",
|
|
29
|
-
PROTOCOL_REWARDS: "0x7777777F279eba3d3Ad8F4E708545291A6fDBA8B",
|
|
30
|
-
},
|
|
31
|
-
[58008]: {
|
|
32
|
-
FACTORY_OWNER: "0xfAe426B462f4Bc9857ED28D8473Fb85192f23E9b",
|
|
33
|
-
MINT_FEE_RECIPIENT: "0x917D86f1eBD1d9f59Dae1C00e5Af7f8689299EC4",
|
|
34
|
-
},
|
|
35
|
-
[7777777]: {
|
|
36
|
-
FACTORY_OWNER: "0xdEA20c96253dc2d64897D2b8d27A8d935dE74955",
|
|
37
|
-
MINT_FEE_RECIPIENT: "0xEcfc2ee50409E459c554a2b0376F882Ce916D853",
|
|
38
|
-
PROTOCOL_REWARDS: "0x7777777F279eba3d3Ad8F4E708545291A6fDBA8B",
|
|
39
|
-
},
|
|
40
|
-
[8453]: {
|
|
41
|
-
FACTORY_OWNER: "0x004d6611884B4A661749B64b2ADc78505c3e1AB3",
|
|
42
|
-
MINT_FEE_RECIPIENT: "0x7bf90111Ad7C22bec9E9dFf8A01A44713CC1b1B6",
|
|
43
|
-
PROTOCOL_REWARDS: "0x7777777F279eba3d3Ad8F4E708545291A6fDBA8B",
|
|
44
|
-
},
|
|
45
|
-
[84531]: {
|
|
46
|
-
FACTORY_OWNER: "0x02539E813cA450C2c7334e885423f4A899a063Fe",
|
|
47
|
-
MINT_FEE_RECIPIENT: "0x02539E813cA450C2c7334e885423f4A899a063Fe",
|
|
48
|
-
PROTOCOL_REWARDS: "0x7777777F279eba3d3Ad8F4E708545291A6fDBA8B",
|
|
49
|
-
},
|
|
50
|
-
[999]: {
|
|
51
|
-
FACTORY_OWNER: "0xE84DBB2B25F761751231a9D0DAfbdD4dC3aa8252",
|
|
52
|
-
MINT_FEE_RECIPIENT: "0xE84DBB2B25F761751231a9D0DAfbdD4dC3aa8252",
|
|
53
|
-
PROTOCOL_REWARDS: "0x7777777F279eba3d3Ad8F4E708545291A6fDBA8B",
|
|
54
|
-
},
|
|
55
|
-
[999999999]: {
|
|
56
|
-
FACTORY_OWNER: "0xdae22ce69Afcb7f4bc37D32E267645722949DE0E",
|
|
57
|
-
MINT_FEE_RECIPIENT: "0xdae22ce69Afcb7f4bc37D32E267645722949DE0E",
|
|
58
|
-
PROTOCOL_REWARDS: "0x7777777F279eba3d3Ad8F4E708545291A6fDBA8B",
|
|
59
|
-
},
|
|
60
|
-
};
|