@rocketh/deploy 0.10.9 → 0.10.11

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.
@@ -0,0 +1,38 @@
1
+ import { Abi } from 'abitype';
2
+ import { EIP1193DATA } from 'eip-1193';
3
+ import type { DeploymentConstruction, Deployment } from 'rocketh';
4
+ import { Address, Chain, ContractFunctionArgs, ContractFunctionName, DecodeFunctionResultReturnType, ReadContractParameters, WriteContractParameters } from 'viem';
5
+ declare module 'rocketh' {
6
+ interface Environment {
7
+ deploy: DeployFunction;
8
+ execute: ExecuteFunction;
9
+ read: ReadFunction;
10
+ executeByName: ExecuteFunctionByName;
11
+ readByName: ReadFunctionByName;
12
+ }
13
+ }
14
+ export type DeployFunction = <TAbi extends Abi, TChain extends Chain = Chain>(name: string, args: DeploymentConstruction<TAbi>, options?: DeployOptions) => Promise<Deployment<TAbi> & {
15
+ updated: boolean;
16
+ }>;
17
+ export type ExecuteFunction = <TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>, TArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName>>(deployment: Deployment<TAbi>, args: ExecutionArgs<TAbi, TFunctionName, TArgs>) => Promise<EIP1193DATA>;
18
+ export type ExecuteFunctionByName = <TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>, TArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName>>(name: string, args: ExecutionArgs<TAbi, TFunctionName, TArgs>) => Promise<EIP1193DATA>;
19
+ export type ReadFunction = <TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>, TArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName>>(deployment: Deployment<TAbi>, args: ReadingArgs<TAbi, TFunctionName, TArgs>) => Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>>;
20
+ export type ReadFunctionByName = <TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>, TArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName>>(name: string, args: ReadingArgs<TAbi, TFunctionName, TArgs>) => Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>>;
21
+ export type ExecutionArgs<TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>, TArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName>> = Omit<WriteContractParameters<TAbi, TFunctionName, TArgs>, 'address' | 'abi' | 'account' | 'nonce' | 'chain'> & {
22
+ account: string;
23
+ };
24
+ export type ReadingArgs<TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>, TArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName>> = Omit<ReadContractParameters<TAbi, TFunctionName, TArgs>, 'address' | 'abi' | 'account' | 'nonce'> & {
25
+ account?: string;
26
+ };
27
+ export type DeployOptions = {
28
+ linkedData?: any;
29
+ deterministic?: boolean | `0x${string}`;
30
+ libraries?: {
31
+ [name: string]: Address;
32
+ };
33
+ } & ({
34
+ skipIfAlreadyDeployed?: boolean;
35
+ } | {
36
+ alwaysOverride?: boolean;
37
+ });
38
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,374 @@
1
+ import { extendEnvironment } from 'rocketh';
2
+ import { decodeFunctionResult, encodeFunctionData, encodePacked, keccak256, } from 'viem';
3
+ import { encodeDeployData } from 'viem';
4
+ import { logs } from 'named-logs';
5
+ const logger = logs('rocketh-deploy');
6
+ async function broadcastTransaction(env, signer, params) {
7
+ if (signer.type === 'wallet' || signer.type === 'remote') {
8
+ return signer.signer.request({
9
+ method: 'eth_sendTransaction',
10
+ params,
11
+ });
12
+ }
13
+ else {
14
+ const rawTx = await signer.signer.request({
15
+ method: 'eth_signTransaction',
16
+ params,
17
+ });
18
+ return env.network.provider.request({
19
+ method: 'eth_sendRawTransaction',
20
+ params: [rawTx],
21
+ });
22
+ }
23
+ }
24
+ function linkRawLibrary(bytecode, libraryName, libraryAddress) {
25
+ const address = libraryAddress.replace('0x', '');
26
+ let encodedLibraryName;
27
+ if (libraryName.startsWith('$') && libraryName.endsWith('$')) {
28
+ encodedLibraryName = libraryName.slice(1, libraryName.length - 1);
29
+ }
30
+ else {
31
+ encodedLibraryName = keccak256(encodePacked(['string'], [libraryName])).slice(2, 36);
32
+ }
33
+ const pattern = new RegExp(`_+\\$${encodedLibraryName}\\$_+`, 'g');
34
+ if (!pattern.exec(bytecode)) {
35
+ throw new Error(`Can't link '${libraryName}' (${encodedLibraryName}) in \n----\n ${bytecode}\n----\n`);
36
+ }
37
+ return bytecode.replace(pattern, address);
38
+ }
39
+ function linkRawLibraries(bytecode, libraries) {
40
+ for (const libName of Object.keys(libraries)) {
41
+ const libAddress = libraries[libName];
42
+ bytecode = linkRawLibrary(bytecode, libName, libAddress);
43
+ }
44
+ return bytecode;
45
+ }
46
+ function linkLibraries(artifact, libraries) {
47
+ let bytecode = artifact.bytecode;
48
+ if (libraries) {
49
+ if (artifact.linkReferences) {
50
+ for (const [fileName, fileReferences] of Object.entries(artifact.linkReferences)) {
51
+ for (const [libName, fixups] of Object.entries(fileReferences)) {
52
+ const addr = libraries[libName];
53
+ if (addr === undefined) {
54
+ continue;
55
+ }
56
+ for (const fixup of fixups) {
57
+ bytecode =
58
+ bytecode.substring(0, 2 + fixup.start * 2) +
59
+ addr.substring(2) +
60
+ bytecode.substring(2 + (fixup.start + fixup.length) * 2);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ else {
66
+ bytecode = linkRawLibraries(bytecode, libraries);
67
+ }
68
+ }
69
+ // TODO return libraries object with path name <filepath.sol>:<name> for names
70
+ return bytecode;
71
+ }
72
+ extendEnvironment((env) => {
73
+ async function execute(deployment, args) {
74
+ const { account, ...viemArgs } = args;
75
+ let address;
76
+ if (account.startsWith('0x')) {
77
+ address = account;
78
+ }
79
+ else {
80
+ if (env.namedAccounts) {
81
+ address = env.namedAccounts[account];
82
+ if (!address) {
83
+ throw new Error(`no address for ${account}`);
84
+ }
85
+ }
86
+ else {
87
+ throw new Error(`no accounts setup, cannot get address for ${account}`);
88
+ }
89
+ }
90
+ const artifactToUse = deployment;
91
+ const abi = artifactToUse.abi;
92
+ const calldata = encodeFunctionData({
93
+ abi,
94
+ functionName: viemArgs.functionName,
95
+ args: viemArgs.args,
96
+ });
97
+ const signer = env.addressSigners[address];
98
+ const txParam = {
99
+ to: deployment.address,
100
+ type: '0x2',
101
+ from: address,
102
+ chainId: `0x${env.network.chain.id.toString(16)}`,
103
+ data: calldata,
104
+ gas: viemArgs.gas && `0x${viemArgs.gas.toString(16)}`,
105
+ // gasPrice: viemArgs.gasPrice && `0x${viemArgs.gasPrice.toString(16)}` as `0x${string}`,
106
+ maxFeePerGas: viemArgs.maxFeePerGas && `0x${viemArgs.maxFeePerGas.toString(16)}`,
107
+ maxPriorityFeePerGas: viemArgs.maxPriorityFeePerGas && `0x${viemArgs.maxPriorityFeePerGas.toString(16)}`,
108
+ // nonce: viemArgs.nonce && (`0x${viemArgs.nonce.toString(16)}` as `0x${string}`),
109
+ };
110
+ if (viemArgs.value) {
111
+ txParam.value = `0x${viemArgs.value?.toString(16)}`;
112
+ }
113
+ let txHash;
114
+ if (signer.type === 'wallet' || signer.type === 'remote') {
115
+ txHash = await signer.signer.request({
116
+ method: 'eth_sendTransaction',
117
+ params: [txParam],
118
+ });
119
+ }
120
+ else {
121
+ const rawTx = await signer.signer.request({
122
+ method: 'eth_signTransaction',
123
+ params: [txParam],
124
+ });
125
+ txHash = await env.network.provider.request({
126
+ method: 'eth_sendRawTransaction',
127
+ params: [rawTx],
128
+ });
129
+ }
130
+ const pendingExecution = {
131
+ type: 'execution',
132
+ transaction: { hash: txHash, origin: address },
133
+ // description, // TODO
134
+ // TODO we should have the nonce, except for wallet like metamask where it is not usre you get the nonce you start with
135
+ };
136
+ await env.savePendingExecution(pendingExecution);
137
+ return txHash;
138
+ }
139
+ async function executeByName(name, args) {
140
+ const deployment = env.getOrNull(name);
141
+ if (!deployment) {
142
+ throw new Error(`no deployment named ${name}`);
143
+ }
144
+ return execute(deployment, args);
145
+ }
146
+ async function read(deployment, args) {
147
+ const { account, ...viemArgs } = args;
148
+ let address;
149
+ if (account) {
150
+ if (account.startsWith('0x')) {
151
+ address = account;
152
+ }
153
+ else {
154
+ if (env.namedAccounts) {
155
+ address = env.namedAccounts[account];
156
+ if (!address) {
157
+ throw new Error(`no address for ${account}`);
158
+ }
159
+ }
160
+ else {
161
+ throw new Error(`no accounts setup, cannot get address for ${account}`);
162
+ }
163
+ }
164
+ }
165
+ const artifactToUse = deployment;
166
+ const abi = artifactToUse.abi;
167
+ const calldata = encodeFunctionData({
168
+ abi,
169
+ functionName: viemArgs.functionName,
170
+ args: viemArgs.args,
171
+ });
172
+ const result = (await env.network.provider.request({
173
+ method: 'eth_call',
174
+ params: [
175
+ {
176
+ to: deployment.address,
177
+ type: '0x2',
178
+ from: address,
179
+ chainId: `0x${env.network.chain.id.toString(16)}`,
180
+ data: calldata,
181
+ // value: `0x${viemArgs.value?.toString(16)}` as `0x${string}`,
182
+ },
183
+ ],
184
+ }));
185
+ const parsed = decodeFunctionResult({
186
+ abi,
187
+ functionName: viemArgs.functionName,
188
+ data: result,
189
+ args: viemArgs.args,
190
+ });
191
+ return parsed;
192
+ }
193
+ async function readByName(name, args) {
194
+ const deployment = env.getOrNull(name);
195
+ if (!deployment) {
196
+ throw new Error(`no deployment named ${name}`);
197
+ }
198
+ return read(deployment, args);
199
+ }
200
+ async function deploy(name, args, options) {
201
+ const skipIfAlreadyDeployed = options && 'skipIfAlreadyDeployed' in options && options.skipIfAlreadyDeployed;
202
+ const allwaysOverride = options && 'allwaysOverride' in options && options.allwaysOverride;
203
+ if (allwaysOverride && skipIfAlreadyDeployed) {
204
+ throw new Error(`conflicting options: "allwaysOverride" and "skipIfAlreadyDeployed"`);
205
+ }
206
+ const existingDeployment = env.getOrNull(name);
207
+ if (existingDeployment && skipIfAlreadyDeployed) {
208
+ logger.info(`deployment for ${name} at ${existingDeployment.address}, skipIfAlreadyDeployed: true => we skip`);
209
+ return { ...existingDeployment, updated: false };
210
+ }
211
+ const { account, artifact, ...viemArgs } = args;
212
+ let address;
213
+ if (account.startsWith('0x')) {
214
+ address = account;
215
+ }
216
+ else {
217
+ if (env.namedAccounts) {
218
+ address = env.namedAccounts[account];
219
+ if (!address) {
220
+ throw new Error(`no address for ${account}`);
221
+ }
222
+ }
223
+ else {
224
+ throw new Error(`no accounts setup, cannot get address for ${account}`);
225
+ }
226
+ }
227
+ // TODO throw specific error if artifact not found
228
+ const artifactToUse = (typeof artifact === 'string' ? env.artifacts[artifact] : artifact);
229
+ const bytecode = linkLibraries(artifactToUse, options?.libraries);
230
+ const abi = artifactToUse.abi;
231
+ const argsToUse = {
232
+ ...viemArgs,
233
+ account,
234
+ abi,
235
+ bytecode,
236
+ };
237
+ const calldata = encodeDeployData(argsToUse); // TODO any
238
+ const argsData = `0x${calldata.replace(bytecode, '')}`;
239
+ if (existingDeployment) {
240
+ logger.info(`existing deployment for ${name} at ${existingDeployment.address}`);
241
+ }
242
+ if (existingDeployment && !allwaysOverride) {
243
+ const previousBytecode = existingDeployment.bytecode;
244
+ const previousArgsData = existingDeployment.argsData;
245
+ // we assume cbor encoding of hash at the end
246
+ // TODO option to remove it, can parse metadata but would rather avoid this here
247
+ const last2Bytes = previousBytecode.slice(-4);
248
+ const cborLength = parseInt(last2Bytes, 16);
249
+ const previousBytecodeWithoutCBOR = previousBytecode.slice(0, -cborLength * 2);
250
+ const newBytecodeWithoutCBOR = bytecode.slice(0, -cborLength * 2);
251
+ if (previousBytecodeWithoutCBOR === newBytecodeWithoutCBOR && previousArgsData === argsData) {
252
+ return { ...existingDeployment, updated: false };
253
+ }
254
+ else {
255
+ // logger.info(`-------------- WITHOUT CBOR---------------------`);
256
+ // logger.info(previousBytecodeWithoutCBOR);
257
+ // logger.info(newBytecodeWithoutCBOR);
258
+ // logger.info(`-----------------------------------`);
259
+ // logger.info(`-------------- ARGS DATA ---------------------`);
260
+ // logger.info(previousArgsData);
261
+ // logger.info(argsData);
262
+ // logger.info(`-----------------------------------`);
263
+ }
264
+ }
265
+ const partialDeployment = {
266
+ ...artifactToUse,
267
+ argsData,
268
+ linkedData: options?.linkedData,
269
+ };
270
+ const signer = env.addressSigners[address];
271
+ const chainId = `0x${env.network.chain.id.toString(16)}`;
272
+ const maxFeePerGas = viemArgs.maxFeePerGas && `0x${viemArgs.maxFeePerGas.toString(16)}`;
273
+ const maxPriorityFeePerGas = viemArgs.maxPriorityFeePerGas && `0x${viemArgs.maxPriorityFeePerGas.toString(16)}`;
274
+ const params = [
275
+ {
276
+ type: '0x2',
277
+ from: address,
278
+ chainId,
279
+ data: calldata,
280
+ gas: viemArgs.gas && `0x${viemArgs.gas.toString(16)}`,
281
+ maxFeePerGas,
282
+ maxPriorityFeePerGas,
283
+ // gasPrice: viemArgs.gasPrice && `0x${viemArgs.gasPrice.toString(16)}` as `0x${string}`,
284
+ // value: `0x${viemArgs.value?.toString(16)}` as `0x${string}`,
285
+ // nonce: viemArgs.nonce && (`0x${viemArgs.nonce.toString(16)}` as `0x${string}`),
286
+ },
287
+ ];
288
+ let expectedAddress = undefined;
289
+ if (options?.deterministic) {
290
+ // TODO make these configurable
291
+ const deterministicFactoryAddress = `0x4e59b44847b379578588920ca78fbf26c0b4956c`;
292
+ const deterministicFactoryDeployerAddress = `0x3fab184622dc19b6109349b94811493bf2a45362`;
293
+ const factoryDeploymentData = `0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222`;
294
+ const code = await env.network.provider.request({
295
+ method: 'eth_getCode',
296
+ params: [deterministicFactoryAddress, 'latest'],
297
+ });
298
+ if (code === '0x') {
299
+ const balanceHexString = await env.network.provider.request({
300
+ method: 'eth_getBalance',
301
+ params: [deterministicFactoryDeployerAddress, 'latest'],
302
+ });
303
+ const balance = BigInt(balanceHexString);
304
+ if (balance < 10000000000000000n) {
305
+ const need = 10000000000000000n - balance;
306
+ const balanceToSend = `0x${need.toString(16)}`;
307
+ const txHash = await broadcastTransaction(env, signer, [
308
+ {
309
+ type: '0x2',
310
+ chainId,
311
+ from: address,
312
+ to: deterministicFactoryDeployerAddress,
313
+ value: balanceToSend,
314
+ gas: `0x${BigInt(21000).toString(16)}`,
315
+ maxFeePerGas,
316
+ maxPriorityFeePerGas,
317
+ },
318
+ ]);
319
+ await env.savePendingExecution({
320
+ type: 'execution', // TODO different type ?
321
+ transaction: { hash: txHash, origin: address },
322
+ });
323
+ }
324
+ const txHash = await env.network.provider.request({
325
+ method: 'eth_sendRawTransaction',
326
+ params: [factoryDeploymentData],
327
+ });
328
+ await env.savePendingExecution({
329
+ type: 'execution', // TODO different type ?
330
+ transaction: { hash: txHash, origin: address },
331
+ });
332
+ }
333
+ // prepending the salt
334
+ const salt = (typeof options.deterministic === 'string'
335
+ ? `0x${options.deterministic.slice(2).padStart(64, '0')}`
336
+ : '0x0000000000000000000000000000000000000000000000000000000000000000');
337
+ const bytecode = params[0].data || '0x';
338
+ expectedAddress = ('0x' +
339
+ keccak256(`0xff${deterministicFactoryAddress.slice(2)}${salt.slice(2)}${keccak256(bytecode).slice(2)}`).slice(-40));
340
+ const codeAlreadyDeployed = await env.network.provider.request({
341
+ method: 'eth_getCode',
342
+ params: [expectedAddress, 'latest'],
343
+ });
344
+ if (codeAlreadyDeployed !== '0x') {
345
+ env.showMessage(`contract was already deterministically deployed at ${expectedAddress}`);
346
+ const deployment = await env.save(name, {
347
+ address: expectedAddress,
348
+ ...partialDeployment,
349
+ });
350
+ return { ...deployment, updated: true };
351
+ }
352
+ params[0].data = (salt + (bytecode.slice(2) || ''));
353
+ params[0].to = deterministicFactoryAddress;
354
+ }
355
+ const txHash = await broadcastTransaction(env, signer, params);
356
+ const pendingDeployment = {
357
+ type: 'deployment',
358
+ expectedAddress,
359
+ partialDeployment,
360
+ transaction: { hash: txHash, origin: address },
361
+ name,
362
+ // TODO we should have the nonce, except for wallet like metamask where it is not usre you get the nonce you start with
363
+ };
364
+ const deployment = await env.savePendingDeployment(pendingDeployment);
365
+ return { ...deployment, updated: true };
366
+ }
367
+ env.deploy = deploy;
368
+ env.execute = execute;
369
+ env.executeByName = executeByName;
370
+ env.read = read;
371
+ env.readByName = readByName;
372
+ return env;
373
+ });
374
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}