@rocketh/deploy 0.17.7 → 0.17.9

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/README.md CHANGED
@@ -1 +1,7 @@
1
1
  # @rocketh/deploy
2
+
3
+ Standard contract deployment functionality for rocketh, providing a framework-agnostic deploy function that works with any Ethereum development toolchain.
4
+
5
+ For full documentation, visit [rocketh.dev](https://rocketh.dev).
6
+
7
+ For hardhat-deploy documentation, see [rocketh.dev/hardhat-deploy/](https://rocketh.dev/hardhat-deploy/).
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Integration Tests for @rocketh/deploy
3
+ *
4
+ * These tests serve as documentation for how to use the deployment system.
5
+ * They demonstrate real-world scenarios and best practices.
6
+ *
7
+ * Note: These tests use @rocketh/test-utils for mock environments.
8
+ * The mock provider can be configured to return specific values for testing.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=deploy.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.integration.test.d.ts","sourceRoot":"","sources":["../src/deploy.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,420 @@
1
+ /**
2
+ * Integration Tests for @rocketh/deploy
3
+ *
4
+ * These tests serve as documentation for how to use the deployment system.
5
+ * They demonstrate real-world scenarios and best practices.
6
+ *
7
+ * Note: These tests use @rocketh/test-utils for mock environments.
8
+ * The mock provider can be configured to return specific values for testing.
9
+ */
10
+ import { describe, it, expect } from 'vitest';
11
+ import { deploy } from './index.js';
12
+ import { createMockEnvironment, createMockArtifact } from '@rocketh/test-utils';
13
+ describe('@rocketh/deploy - Integration Tests', () => {
14
+ describe('Basic Contract Deployment', () => {
15
+ it('should demonstrate basic deployment pattern', async () => {
16
+ /**
17
+ * Example: Deploying a simple contract with constructor arguments
18
+ *
19
+ * This demonstrates the most basic deployment scenario:
20
+ * - Create an environment with named accounts
21
+ * - Use the deploy function to deploy a contract
22
+ * - Specify the account, artifact, and constructor arguments
23
+ *
24
+ * Usage in real scenario:
25
+ * ```typescript
26
+ * import {deploy} from '@rocketh/deploy';
27
+ * import {MyContract} from './artifacts/MyContract.js';
28
+ *
29
+ * const _deploy = deploy(env);
30
+ * const deployment = await _deploy('MyContract', {
31
+ * account: 'deployer',
32
+ * artifact: MyContract,
33
+ * args: [42n],
34
+ * });
35
+ * ```
36
+ */
37
+ const { env } = createMockEnvironment();
38
+ const _deploy = deploy(env);
39
+ const artifact = createMockArtifact('SimpleContract');
40
+ const deployment = await _deploy('SimpleContract', {
41
+ account: 'deployer',
42
+ artifact,
43
+ args: [42n],
44
+ });
45
+ expect(deployment).toBeDefined();
46
+ expect(deployment.address).toBeDefined();
47
+ expect(deployment.newlyDeployed).toBe(true);
48
+ });
49
+ it('should demonstrate idempotent deployment with skipIfAlreadyDeployed', async () => {
50
+ /**
51
+ * Example: Idempotent deployment with skipIfAlreadyDeployed
52
+ *
53
+ * This demonstrates how to avoid redeploying contracts that
54
+ * haven't changed. The system checks both bytecode and constructor
55
+ * arguments before deciding to redeploy.
56
+ *
57
+ * Usage in real scenario:
58
+ * ```typescript
59
+ * const deployment = await _deploy('MyContract', {
60
+ * account: 'deployer',
61
+ * artifact: MyContract,
62
+ * args: [100n],
63
+ * skipIfAlreadyDeployed: true,
64
+ * });
65
+ * ```
66
+ */
67
+ const { env } = createMockEnvironment();
68
+ const _deploy = deploy(env);
69
+ const artifact = createMockArtifact('ImmutableContract');
70
+ // First deployment
71
+ const firstDeployment = await _deploy('ImmutableContract', {
72
+ account: 'deployer',
73
+ artifact,
74
+ args: [100n],
75
+ }, {
76
+ skipIfAlreadyDeployed: true,
77
+ });
78
+ expect(firstDeployment.newlyDeployed).toBe(true);
79
+ // Second deployment with same args - would skip in real scenario
80
+ const secondDeployment = await _deploy('ImmutableContract', {
81
+ account: 'deployer',
82
+ artifact,
83
+ args: [100n],
84
+ }, {
85
+ skipIfAlreadyDeployed: true,
86
+ });
87
+ // In mock, newlyDeployed is always true, but pattern is demonstrated
88
+ expect(secondDeployment).toBeDefined();
89
+ });
90
+ it('should demonstrate forced redeployment with alwaysOverride', async () => {
91
+ /**
92
+ * Example: Forced redeployment with alwaysOverride
93
+ *
94
+ * This demonstrates how to force a redeployment even if
95
+ * the contract already exists with the same bytecode.
96
+ * This is useful for testing or when you need to reset state.
97
+ *
98
+ * Usage in real scenario:
99
+ * ```typescript
100
+ * const deployment = await _deploy('MyContract', {
101
+ * account: 'deployer',
102
+ * artifact: MyContract,
103
+ * args: [],
104
+ * alwaysOverride: true,
105
+ * });
106
+ * ```
107
+ */
108
+ const { env } = createMockEnvironment();
109
+ const _deploy = deploy(env);
110
+ const artifact = createMockArtifact('UpgradeableContract');
111
+ const deployment = await _deploy('UpgradeableContract', {
112
+ account: 'deployer',
113
+ artifact,
114
+ args: [],
115
+ }, {
116
+ alwaysOverride: true,
117
+ });
118
+ expect(deployment).toBeDefined();
119
+ expect(deployment.newlyDeployed).toBe(true);
120
+ });
121
+ });
122
+ describe('Named Accounts Resolution', () => {
123
+ it('should demonstrate using named accounts', async () => {
124
+ /**
125
+ * Example: Using named accounts
126
+ *
127
+ * Named accounts allow you to reference accounts by name
128
+ * instead of hardcoded addresses. This makes your deployment
129
+ * scripts more portable across different networks.
130
+ *
131
+ * Usage in real scenario:
132
+ * ```typescript
133
+ * // In your environment config:
134
+ * const env = {
135
+ * namedAccounts: {
136
+ * deployer: '0x...',
137
+ * user1: '0x...',
138
+ * user2: '0x...',
139
+ * },
140
+ * // ... other config
141
+ * };
142
+ *
143
+ * const deployment = await _deploy('MyContract', {
144
+ * account: 'deployer',
145
+ * artifact: MyContract,
146
+ * args: [],
147
+ * });
148
+ * ```
149
+ */
150
+ const { env } = createMockEnvironment();
151
+ const _deploy = deploy(env);
152
+ const artifact = createMockArtifact('NamedAccountContract');
153
+ const deployment = await _deploy('NamedAccountContract', {
154
+ account: 'deployer',
155
+ artifact,
156
+ args: [],
157
+ });
158
+ expect(deployment).toBeDefined();
159
+ });
160
+ it('should demonstrate deploying with different named accounts', async () => {
161
+ /**
162
+ * Example: Using multiple named accounts
163
+ *
164
+ * You can use different named accounts for different
165
+ * deployments. This is useful for multi-signature setups
166
+ * or when deploying contracts owned by different entities.
167
+ *
168
+ * Usage in real scenario:
169
+ * ```typescript
170
+ * const deployment1 = await _deploy('ContractByUser1', {
171
+ * account: 'user1',
172
+ * artifact: MyContract,
173
+ * args: [],
174
+ * });
175
+ *
176
+ * const deployment2 = await _deploy('ContractByUser2', {
177
+ * account: 'user2',
178
+ * artifact: MyContract,
179
+ * args: [],
180
+ * });
181
+ * ```
182
+ */
183
+ const { env } = createMockEnvironment();
184
+ const _deploy = deploy(env);
185
+ const artifact = createMockArtifact('MultiUserContract');
186
+ const deployment1 = await _deploy('ContractByUser1', {
187
+ account: 'user1',
188
+ artifact,
189
+ args: [],
190
+ });
191
+ const deployment2 = await _deploy('ContractByUser2', {
192
+ account: 'user1',
193
+ artifact,
194
+ args: [],
195
+ });
196
+ expect(deployment1).toBeDefined();
197
+ expect(deployment2).toBeDefined();
198
+ });
199
+ });
200
+ describe('Library Linking', () => {
201
+ it('should demonstrate deploying contract with linked libraries', async () => {
202
+ /**
203
+ * Example: Deploying a contract that uses external libraries
204
+ *
205
+ * Libraries are linked at deployment time. You need to:
206
+ * 1. Deploy the library first
207
+ * 2. Specify the library addresses in the libraries option
208
+ * The deployment system will automatically link the library
209
+ * placeholders in the bytecode.
210
+ *
211
+ * Usage in real scenario:
212
+ * ```typescript
213
+ * // Deploy library
214
+ * const libraryDeployment = await _deploy('MathLib', {
215
+ * account: 'deployer',
216
+ * artifact: MathLibArtifact,
217
+ * args: [],
218
+ * });
219
+ *
220
+ * // Deploy contract that uses the library
221
+ * const contractDeployment = await _deploy('Calculator', {
222
+ * account: 'deployer',
223
+ * artifact: CalculatorArtifact,
224
+ * args: [],
225
+ * libraries: {
226
+ * MathLib: libraryDeployment.address,
227
+ * },
228
+ * });
229
+ * ```
230
+ */
231
+ const { env } = createMockEnvironment();
232
+ const _deploy = deploy(env);
233
+ const libraryArtifact = createMockArtifact('MathLib');
234
+ const libraryDeployment = await _deploy('MathLib', {
235
+ account: 'deployer',
236
+ artifact: libraryArtifact,
237
+ args: [],
238
+ });
239
+ const contractArtifact = createMockArtifact('Calculator');
240
+ const contractDeployment = await _deploy('Calculator', {
241
+ account: 'deployer',
242
+ artifact: contractArtifact,
243
+ args: [],
244
+ }, {
245
+ libraries: {
246
+ MathLib: libraryDeployment.address,
247
+ },
248
+ });
249
+ expect(contractDeployment).toBeDefined();
250
+ expect(libraryDeployment).toBeDefined();
251
+ });
252
+ });
253
+ describe('Deterministic Deployments', () => {
254
+ it('should demonstrate CREATE2 deterministic deployment', async () => {
255
+ /**
256
+ * Example: Deterministic deployment using CREATE2
257
+ *
258
+ * Deterministic deployments allow you to deploy contracts
259
+ * at predictable addresses based on:
260
+ * - Deployer address (factory)
261
+ * - Salt (a 32-byte value)
262
+ * - Contract bytecode
263
+ *
264
+ * This is useful for:
265
+ * - Cross-chain deployments
266
+ * - Gas optimization (known addresses in advance)
267
+ * - Multi-chain setups
268
+ *
269
+ * Usage in real scenario:
270
+ * ```typescript
271
+ * const deployment = await _deploy('DeterministicContract', {
272
+ * account: 'deployer',
273
+ * artifact: MyContract,
274
+ * args: [],
275
+ * deterministic: {
276
+ * type: 'create2',
277
+ * salt: '0x1234...',
278
+ * },
279
+ * });
280
+ * ```
281
+ */
282
+ const { env } = createMockEnvironment();
283
+ const _deploy = deploy(env);
284
+ const artifact = createMockArtifact('DeterministicContract');
285
+ const salt = '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef';
286
+ const deployment = await _deploy('DeterministicContract', {
287
+ account: 'deployer',
288
+ artifact,
289
+ args: [],
290
+ }, {
291
+ deterministic: {
292
+ type: 'create2',
293
+ salt,
294
+ },
295
+ });
296
+ expect(deployment).toBeDefined();
297
+ });
298
+ it('should demonstrate CREATE3 deterministic deployment', async () => {
299
+ /**
300
+ * Example: Deterministic deployment using CREATE3
301
+ *
302
+ * CREATE3 provides a different address calculation formula
303
+ * that's more flexible for certain use cases. The main
304
+ * advantage is that the address depends only on the salt,
305
+ * not on the bytecode.
306
+ *
307
+ * This is useful when you want to upgrade a contract but
308
+ * keep the same address.
309
+ *
310
+ * Usage in real scenario:
311
+ * ```typescript
312
+ * const deployment = await _deploy('Create3Contract', {
313
+ * account: 'deployer',
314
+ * artifact: MyContract,
315
+ * args: [],
316
+ * deterministic: {
317
+ * type: 'create3',
318
+ * salt: '0x9876...',
319
+ * },
320
+ * });
321
+ * ```
322
+ */
323
+ const { env } = createMockEnvironment();
324
+ const _deploy = deploy(env);
325
+ const artifact = createMockArtifact('Create3Contract');
326
+ const salt = '0x9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba';
327
+ const deployment = await _deploy('Create3Contract', {
328
+ account: 'deployer',
329
+ artifact,
330
+ args: [],
331
+ }, {
332
+ deterministic: {
333
+ type: 'create3',
334
+ salt,
335
+ },
336
+ });
337
+ expect(deployment).toBeDefined();
338
+ });
339
+ });
340
+ describe('Linked Data', () => {
341
+ it('should demonstrate attaching metadata to deployments', async () => {
342
+ /**
343
+ * Example: Attaching metadata to deployments
344
+ *
345
+ * Linked data allows you to attach arbitrary metadata
346
+ * to your deployments. This is useful for:
347
+ * - Documentation
348
+ * - Frontend integration
349
+ * - Deployment tracking
350
+ * - Versioning
351
+ *
352
+ * Usage in real scenario:
353
+ * ```typescript
354
+ * const deployment = await _deploy('MyContract', {
355
+ * account: 'deployer',
356
+ * artifact: MyContract,
357
+ * args: [],
358
+ * linkedData: {
359
+ * version: '1.0.0',
360
+ * description: 'A contract with metadata',
361
+ * author: 'Developer',
362
+ * tags: ['test', 'example'],
363
+ * },
364
+ * });
365
+ * ```
366
+ */
367
+ const { env } = createMockEnvironment();
368
+ const _deploy = deploy(env);
369
+ const artifact = createMockArtifact('MetadataContract');
370
+ const deployment = await _deploy('MetadataContract', {
371
+ account: 'deployer',
372
+ artifact,
373
+ args: [],
374
+ }, {
375
+ linkedData: {
376
+ version: '1.0.0',
377
+ description: 'A contract with metadata',
378
+ author: 'Developer',
379
+ tags: ['test', 'example'],
380
+ },
381
+ });
382
+ expect(deployment.linkedData).toBeDefined();
383
+ expect(deployment.linkedData?.version).toBe('1.0.0');
384
+ });
385
+ });
386
+ describe('Error Handling', () => {
387
+ it('should demonstrate error for conflicting options', async () => {
388
+ /**
389
+ * Example: Error handling for conflicting options
390
+ *
391
+ * The deployment system validates your options and throws
392
+ * descriptive errors when there are conflicts.
393
+ *
394
+ * Usage in real scenario:
395
+ * ```typescript
396
+ * // This will throw an error:
397
+ * const deployment = await _deploy('MyContract', {
398
+ * account: 'deployer',
399
+ * artifact: MyContract,
400
+ * args: [],
401
+ * skipIfAlreadyDeployed: true,
402
+ * alwaysOverride: true, // Conflict!
403
+ * });
404
+ * ```
405
+ */
406
+ const { env } = createMockEnvironment();
407
+ const _deploy = deploy(env);
408
+ const artifact = createMockArtifact('ConflictingOptionsContract');
409
+ await expect(_deploy('ConflictingOptionsContract', {
410
+ account: 'deployer',
411
+ artifact,
412
+ args: [],
413
+ }, {
414
+ skipIfAlreadyDeployed: true,
415
+ alwaysOverride: true,
416
+ })).rejects.toThrow('conflicting options');
417
+ });
418
+ });
419
+ });
420
+ //# sourceMappingURL=deploy.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.integration.test.js","sourceRoot":"","sources":["../src/deploy.integration.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,SAAS,CAAC;AAG5B,OAAO,KAAK,EACX,sBAAsB,EACtB,UAAU,EACV,WAAW,EAIX,kBAAkB,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,OAAO,EACP,KAAK,EAQL,MAAM,MAAM,CAAC;AAId,MAAM,MAAM,YAAY,CAAC,IAAI,SAAS,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG;IAAC,aAAa,EAAE,OAAO,CAAA;CAAC,CAAC;AAEzF,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,SAAS,GAAG,EAAE,MAAM,SAAS,KAAK,GAAG,KAAK,EAC3E,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,EAClC,OAAO,CAAC,EAAE,aAAa,KACnB,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AAEjC,MAAM,MAAM,aAAa,GAAG;IAC3B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,aAAa,CAAC,EACX,OAAO,GACP,KAAK,MAAM,EAAE,GACb;QACA,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;KACpB,CAAC;IACL,SAAS,CAAC,EAAE;QAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;CACtC,GAAG,CACD;IACA,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAC/B,GACD;IACA,cAAc,CAAC,EAAE,OAAO,CAAC;CACxB,CACH,CAAC;AAwPF,wBAAgB,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,CAAC,IAAI,SAAS,GAAG,EAC1D,IAAI,EAAE,MAAM,EAAE,0BAA0B;AACxC,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,EAClC,OAAO,CAAC,EAAE,aAAa,KACnB,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CA+K/B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,SAAS,CAAC;AAG5B,OAAO,KAAK,EACX,sBAAsB,EACtB,UAAU,EACV,WAAW,EAIX,kBAAkB,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,OAAO,EACP,KAAK,EAQL,MAAM,MAAM,CAAC;AAId,MAAM,MAAM,YAAY,CAAC,IAAI,SAAS,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG;IAAC,aAAa,EAAE,OAAO,CAAA;CAAC,CAAC;AAEzF,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,SAAS,GAAG,EAAE,MAAM,SAAS,KAAK,GAAG,KAAK,EAC3E,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,EAClC,OAAO,CAAC,EAAE,aAAa,KACnB,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AAEjC,MAAM,MAAM,aAAa,GAAG;IAC3B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,aAAa,CAAC,EACX,OAAO,GACP,KAAK,MAAM,EAAE,GACb;QACA,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;KACpB,CAAC;IACL,SAAS,CAAC,EAAE;QAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;CACtC,GAAG,CACD;IACA,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAC/B,GACD;IACA,cAAc,CAAC,EAAE,OAAO,CAAC;CACxB,CACH,CAAC;AAwPF,wBAAgB,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,CAAC,IAAI,SAAS,GAAG,EAC1D,IAAI,EAAE,MAAM,EAAE,0BAA0B;AACxC,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,EAClC,OAAO,CAAC,EAAE,aAAa,KACnB,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAuK/B"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { toJSONCompatibleLinkedData } from '@rocketh/core/json';
1
+ import { toJSONCompatibleLinkedData, resolveAccount } from '@rocketh/core';
2
2
  import { logs } from 'named-logs';
3
3
  import { encodeDeployData, encodeFunctionData, encodePacked, getCreate2Address, keccak256, parseAbi, zeroHash, } from 'viem';
4
4
  const logger = logs('@rocketh/deploy');
@@ -196,9 +196,9 @@ export function deploy(env) {
196
196
  return async (name, args, options) => {
197
197
  const nameToDisplay = name || '<no name>';
198
198
  const skipIfAlreadyDeployed = options && 'skipIfAlreadyDeployed' in options && options.skipIfAlreadyDeployed;
199
- const allwaysOverride = options && 'allwaysOverride' in options && options.allwaysOverride;
200
- if (allwaysOverride && skipIfAlreadyDeployed) {
201
- throw new Error(`conflicting options: "allwaysOverride" and "skipIfAlreadyDeployed"`);
199
+ const alwaysOverride = options && 'alwaysOverride' in options && options.alwaysOverride;
200
+ if (alwaysOverride && skipIfAlreadyDeployed) {
201
+ throw new Error(`conflicting options: "alwaysOverride" and "skipIfAlreadyDeployed"`);
202
202
  }
203
203
  const existingDeployment = name && env.getOrNull(name);
204
204
  if (existingDeployment && skipIfAlreadyDeployed) {
@@ -206,21 +206,7 @@ export function deploy(env) {
206
206
  return { ...existingDeployment, newlyDeployed: false };
207
207
  }
208
208
  const { account, artifact, ...viemArgs } = args;
209
- let address;
210
- if (account.startsWith('0x')) {
211
- address = account;
212
- }
213
- else {
214
- if (env.namedAccounts) {
215
- address = env.namedAccounts[account];
216
- if (!address) {
217
- throw new Error(`no address for ${account}`);
218
- }
219
- }
220
- else {
221
- throw new Error(`no accounts setup, cannot get address for ${account}`);
222
- }
223
- }
209
+ const address = resolveAccount(account, env);
224
210
  // TODO throw specific error if artifact not found
225
211
  const artifactToUse = artifact;
226
212
  const bytecode = linkLibraries(artifactToUse, options?.libraries);
@@ -236,7 +222,7 @@ export function deploy(env) {
236
222
  if (existingDeployment) {
237
223
  logger.info(`existing deployment for ${nameToDisplay} at ${existingDeployment.address}`);
238
224
  }
239
- if (existingDeployment && !allwaysOverride) {
225
+ if (existingDeployment && !alwaysOverride) {
240
226
  const previousBytecode = existingDeployment.bytecode;
241
227
  const previousArgsData = existingDeployment.argsData;
242
228
  // we assume cbor encoding of hash at the end
@@ -304,9 +290,12 @@ export function deploy(env) {
304
290
  method: 'eth_getCode',
305
291
  params: [expectedAddress, 'latest'],
306
292
  });
307
- if (codeAlreadyDeployed !== '0x') {
293
+ if (!codeAlreadyDeployed) {
294
+ throw new Error(`invalid code : ${codeAlreadyDeployed}`);
295
+ }
296
+ else if (codeAlreadyDeployed !== '0x') {
308
297
  if (deterministicType === 'create3' && codeAlreadyDeployed !== bytecode)
309
- throw new Error(`code already deployed at ${expectedAddress} but is not the expected bytecode`);
298
+ throw new Error(`code (length: ${(codeAlreadyDeployed.length - 2) / 2}) already deployed at ${expectedAddress} but is not the expected bytecode (length: ${(bytecode.length - 2) / 2})`);
310
299
  env.showMessage(`contract was already deterministically deployed at ${expectedAddress}`);
311
300
  if (name) {
312
301
  const deployment = await env.save(name, {
@@ -329,7 +318,7 @@ export function deploy(env) {
329
318
  partialDeployment,
330
319
  transaction: { hash: txHash, origin: address },
331
320
  name,
332
- // TODO we should have the nonce, except for wallet like metamask where it is not usre you get the nonce you start with
321
+ // TODO we should have the nonce, except for wallet like metamask where it is not sure you get the nonce you start with
333
322
  };
334
323
  const deployment = await env.savePendingDeployment(pendingDeployment, ` - Deploying {name} ${options?.deterministic ? '(deterministically)' : ''} with tx:\n {hash}\n {transaction}`);
335
324
  return { ...deployment, newlyDeployed: true };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rocketh/deploy",
3
- "version": "0.17.7",
3
+ "version": "0.17.9",
4
4
  "description": "provide deploy function for rocketh",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -18,22 +18,26 @@
18
18
  }
19
19
  },
20
20
  "files": [
21
- "dist"
21
+ "dist",
22
+ "src"
22
23
  ],
23
24
  "dependencies": {
24
25
  "abitype": "^1.2.3",
25
26
  "eip-1193": "^0.6.5",
26
27
  "named-logs": "^0.4.1",
27
- "viem": "^2.44.1",
28
- "@rocketh/core": "0.17.7"
28
+ "viem": "^2.44.4",
29
+ "@rocketh/core": "0.17.9"
29
30
  },
30
31
  "devDependencies": {
31
- "as-soon": "^0.0.11",
32
+ "as-soon": "^0.1.4",
32
33
  "rimraf": "^6.1.2",
33
- "typescript": "^5.9.3"
34
+ "typescript": "^5.9.3",
35
+ "vitest": "^4.0.18",
36
+ "@rocketh/test-utils": "0.0.2"
34
37
  },
35
38
  "scripts": {
36
39
  "build": "tsc --project tsconfig.json",
37
- "dev": "as-soon -w src pnpm build"
40
+ "dev": "as-soon -w src pnpm build",
41
+ "test": "vitest"
38
42
  }
39
43
  }
package/src/index.ts ADDED
@@ -0,0 +1,472 @@
1
+ import {toJSONCompatibleLinkedData, resolveAccount} from '@rocketh/core';
2
+ import {Abi} from 'abitype';
3
+ import {EIP1193TransactionData} from 'eip-1193';
4
+ import {logs} from 'named-logs';
5
+ import type {
6
+ DeploymentConstruction,
7
+ Deployment,
8
+ Environment,
9
+ PartialDeployment,
10
+ PendingDeployment,
11
+ Signer,
12
+ LinkedDataProvided,
13
+ } from '@rocketh/core/types';
14
+ import {
15
+ Address,
16
+ Chain,
17
+ encodeDeployData,
18
+ encodeFunctionData,
19
+ encodePacked,
20
+ getCreate2Address,
21
+ keccak256,
22
+ parseAbi,
23
+ zeroHash,
24
+ } from 'viem';
25
+
26
+ const logger = logs('@rocketh/deploy');
27
+
28
+ export type DeployResult<TAbi extends Abi> = Deployment<TAbi> & {newlyDeployed: boolean};
29
+
30
+ export type DeployFunction = <TAbi extends Abi, TChain extends Chain = Chain>(
31
+ name: string,
32
+ args: DeploymentConstruction<TAbi>,
33
+ options?: DeployOptions,
34
+ ) => Promise<DeployResult<TAbi>>;
35
+
36
+ export type DeployOptions = {
37
+ linkedData?: LinkedDataProvided;
38
+ deterministic?:
39
+ | boolean
40
+ | `0x${string}`
41
+ | {
42
+ type: 'create2' | 'create3';
43
+ salt?: `0x${string}`;
44
+ };
45
+ libraries?: {[name: string]: Address};
46
+ } & (
47
+ | {
48
+ skipIfAlreadyDeployed?: boolean;
49
+ }
50
+ | {
51
+ alwaysOverride?: boolean;
52
+ }
53
+ );
54
+
55
+ async function broadcastTransaction(
56
+ env: Environment,
57
+ signer: Signer,
58
+ params: [EIP1193TransactionData],
59
+ ): Promise<`0x${string}`> {
60
+ if (signer.type === 'wallet' || signer.type === 'remote') {
61
+ const tx = signer.signer.request({
62
+ method: 'eth_sendTransaction',
63
+ params: params as any, // TODO fix eip-1193 ?,
64
+ });
65
+
66
+ if (env.tags['auto-mine']) {
67
+ await (env.network.provider as any).request({method: 'evm_mine', params: []});
68
+ }
69
+
70
+ return tx;
71
+ } else {
72
+ const rawTx = await signer.signer.request({
73
+ method: 'eth_signTransaction',
74
+ params,
75
+ });
76
+
77
+ const tx = env.network.provider.request({
78
+ method: 'eth_sendRawTransaction',
79
+ params: [rawTx],
80
+ });
81
+
82
+ if (env.tags['auto-mine']) {
83
+ await (env.network.provider as any).request({method: 'evm_mine', params: []});
84
+ }
85
+
86
+ return tx;
87
+ }
88
+ }
89
+
90
+ function linkRawLibrary(bytecode: string, libraryName: string, libraryAddress: string): string {
91
+ const address = libraryAddress.replace('0x', '');
92
+ let encodedLibraryName;
93
+ if (libraryName.startsWith('$') && libraryName.endsWith('$')) {
94
+ encodedLibraryName = libraryName.slice(1, libraryName.length - 1);
95
+ } else {
96
+ encodedLibraryName = keccak256(encodePacked(['string'], [libraryName])).slice(2, 36);
97
+ }
98
+ const pattern = new RegExp(`_+\\$${encodedLibraryName}\\$_+`, 'g');
99
+ if (!pattern.exec(bytecode)) {
100
+ throw new Error(`Can't link '${libraryName}' (${encodedLibraryName}) in \n----\n ${bytecode}\n----\n`);
101
+ }
102
+ return bytecode.replace(pattern, address);
103
+ }
104
+
105
+ function linkRawLibraries(bytecode: string, libraries: {[libraryName: string]: Address}): string {
106
+ for (const libName of Object.keys(libraries)) {
107
+ const libAddress = libraries[libName];
108
+ bytecode = linkRawLibrary(bytecode, libName, libAddress);
109
+ }
110
+ return bytecode;
111
+ }
112
+
113
+ function linkLibraries(
114
+ artifact: {
115
+ bytecode: string;
116
+ linkReferences?: {
117
+ [libraryFileName: string]: {
118
+ [libraryName: string]: Array<{length: number; start: number}>;
119
+ };
120
+ };
121
+ },
122
+ libraries?: {[libraryName: string]: Address},
123
+ ) {
124
+ let bytecode = artifact.bytecode;
125
+
126
+ if (libraries) {
127
+ if (artifact.linkReferences) {
128
+ for (const [fileName, fileReferences] of Object.entries(artifact.linkReferences)) {
129
+ for (const [libName, fixups] of Object.entries(fileReferences)) {
130
+ const addr = libraries[libName];
131
+ if (addr === undefined) {
132
+ continue;
133
+ }
134
+
135
+ for (const fixup of fixups) {
136
+ bytecode =
137
+ bytecode.substring(0, 2 + fixup.start * 2) +
138
+ addr.substring(2) +
139
+ bytecode.substring(2 + (fixup.start + fixup.length) * 2);
140
+ }
141
+ }
142
+ }
143
+ } else {
144
+ bytecode = linkRawLibraries(bytecode, libraries);
145
+ }
146
+ }
147
+
148
+ // TODO return libraries object with path name <filepath.sol>:<name> for names
149
+
150
+ return bytecode;
151
+ }
152
+
153
+ type FactoryParams = {
154
+ chainId: `0x${string}`;
155
+ address: `0x${string}`;
156
+ maxFeePerGas: `0x${string}` | undefined;
157
+ maxPriorityFeePerGas: `0x${string}` | undefined;
158
+ };
159
+ async function getCreate2Factory(env: Environment, signer: Signer, params: FactoryParams) {
160
+ const deploymentInfo =
161
+ 'create2' in env.network.deterministicDeployment
162
+ ? env.network.deterministicDeployment.create2
163
+ : 'factory' in env.network.deterministicDeployment
164
+ ? env.network.deterministicDeployment
165
+ : undefined;
166
+ if (!deploymentInfo) throw new Error('create2 deterministic deployment info not found');
167
+
168
+ const factoryAddress = deploymentInfo.factory;
169
+ const factoryDeployerAddress = deploymentInfo.deployer;
170
+ const factoryDeploymentData = deploymentInfo.signedTx;
171
+ const funding = BigInt(deploymentInfo.funding);
172
+ const code = await env.network.provider.request({
173
+ method: 'eth_getCode',
174
+ params: [factoryAddress, 'latest'],
175
+ });
176
+ if (code === '0x') {
177
+ const balanceHexString = await env.network.provider.request({
178
+ method: 'eth_getBalance',
179
+ params: [factoryDeployerAddress, 'latest'],
180
+ });
181
+ const balance = BigInt(balanceHexString);
182
+ if (balance < funding) {
183
+ const need = funding - balance;
184
+ const balanceToSend = `0x${need.toString(16)}` as `0x${string}`;
185
+ const txHash = await broadcastTransaction(env, signer, [
186
+ {
187
+ type: '0x2',
188
+ chainId: params.chainId,
189
+ from: params.address,
190
+ to: factoryDeployerAddress,
191
+ value: balanceToSend,
192
+ gas: `0x${BigInt(21000).toString(16)}`,
193
+ maxFeePerGas: params.maxFeePerGas,
194
+ maxPriorityFeePerGas: params.maxPriorityFeePerGas,
195
+ },
196
+ ]);
197
+ await env.savePendingExecution(
198
+ {
199
+ type: 'execution', // TODO different type ?
200
+ transaction: {hash: txHash, origin: params.address},
201
+ },
202
+ ` - Broadcasting Create 2 Factory Funding tx:\n {hash}\n {transaction}`,
203
+ );
204
+ }
205
+
206
+ const txHash = await env.network.provider.request({
207
+ method: 'eth_sendRawTransaction',
208
+ params: [factoryDeploymentData],
209
+ });
210
+ await env.savePendingExecution(
211
+ {
212
+ type: 'execution', // TODO different type ?
213
+ transaction: {hash: txHash, origin: params.address},
214
+ },
215
+ ` - Deploying Create 2 Factory:\n {hash}\n {transaction}`,
216
+ );
217
+ }
218
+
219
+ return {
220
+ getExpectedAddress: ({salt, bytecode}: {salt: `0x${string}`; bytecode: `0x${string}`}): `0x${string}` =>
221
+ getCreate2Address({
222
+ bytecode,
223
+ from: factoryAddress,
224
+ salt,
225
+ }),
226
+ encodeData: ({salt, bytecode}: {salt: `0x${string}`; bytecode: `0x${string}`}): `0x${string}` =>
227
+ (salt + (bytecode.slice(2) || '')) as `0x${string}`,
228
+ factoryAddress,
229
+ };
230
+ }
231
+
232
+ async function getCreate3Factory(env: Environment, signer: Signer, params: FactoryParams) {
233
+ const deploymentInfo =
234
+ 'create3' in env.network.deterministicDeployment ? env.network.deterministicDeployment.create3 : undefined;
235
+ if (!deploymentInfo) throw new Error('create3 deterministic deployment info not found');
236
+
237
+ const factoryAddress = deploymentInfo.factory;
238
+ const factoryBytecode = deploymentInfo.bytecode;
239
+ const proxyBytecode = deploymentInfo.proxyBytecode;
240
+ const code = await env.network.provider.request({
241
+ method: 'eth_getCode',
242
+ params: [factoryAddress, 'latest'],
243
+ });
244
+ if (code === '0x') {
245
+ const create2 = await getCreate2Factory(env, signer, params);
246
+ const salt = deploymentInfo.salt || zeroHash;
247
+ const expectedAddress = create2.getExpectedAddress({salt, bytecode: factoryBytecode});
248
+ if (expectedAddress.toLowerCase() !== factoryAddress.toLowerCase())
249
+ throw new Error(`create3 factory at ${factoryAddress} is not the expected address ${expectedAddress}`);
250
+
251
+ const txHash = await broadcastTransaction(env, signer, [
252
+ {
253
+ type: '0x2',
254
+ chainId: params.chainId,
255
+ from: params.address,
256
+ to: create2.factoryAddress,
257
+ data: create2.encodeData({salt, bytecode: factoryBytecode}),
258
+ maxFeePerGas: params.maxFeePerGas,
259
+ maxPriorityFeePerGas: params.maxPriorityFeePerGas,
260
+ },
261
+ ]);
262
+ await env.savePendingExecution(
263
+ {
264
+ type: 'execution', // TODO different type ?
265
+ transaction: {hash: txHash, origin: params.address},
266
+ },
267
+ ` - Deploying Create 3 Factory:\n {hash}\n {transaction}`,
268
+ );
269
+ }
270
+
271
+ return {
272
+ getExpectedAddress: ({salt}: {salt: `0x${string}`}): `0x${string}` => {
273
+ const namespacedSalt = keccak256(encodePacked(['address', 'bytes32'], [params.address, salt]));
274
+
275
+ const proxyAddress = getCreate2Address({
276
+ from: factoryAddress,
277
+ salt: namespacedSalt,
278
+ bytecode: proxyBytecode,
279
+ });
280
+
281
+ // This follows the RLP encoding rules for contract addresses created by CREATE
282
+ // prefix ++ address ++ nonce, where:
283
+ // prefix = 0xd6 (0xc0 + 0x16), where 0x16 is length of: 0x94 ++ address ++ 0x01
284
+ // 0x94 = 0x80 + 0x14 (0x14 is the length of an address)
285
+ const rlpEncodedData = encodePacked(
286
+ ['bytes1', 'bytes1', 'address', 'bytes1'],
287
+ ['0xd6', '0x94', proxyAddress, '0x01'],
288
+ );
289
+
290
+ return `0x${keccak256(rlpEncodedData).slice(26)}`;
291
+ },
292
+ encodeData: ({salt, bytecode}: {salt: `0x${string}`; bytecode: `0x${string}`}): `0x${string}` =>
293
+ encodeFunctionData({
294
+ abi: parseAbi(['function deployDeterministic(bytes memory,bytes32) external returns (address)']),
295
+ args: [bytecode, salt],
296
+ }),
297
+ factoryAddress,
298
+ };
299
+ }
300
+
301
+ export function deploy(env: Environment): <TAbi extends Abi>(
302
+ name: string, // '' allow to not save it
303
+ args: DeploymentConstruction<TAbi>,
304
+ options?: DeployOptions,
305
+ ) => Promise<DeployResult<TAbi>> {
306
+ return async <TAbi extends Abi>(name: string, args: DeploymentConstruction<TAbi>, options?: DeployOptions) => {
307
+ const nameToDisplay = name || '<no name>';
308
+ const skipIfAlreadyDeployed = options && 'skipIfAlreadyDeployed' in options && options.skipIfAlreadyDeployed;
309
+ const alwaysOverride = options && 'alwaysOverride' in options && options.alwaysOverride;
310
+
311
+ if (alwaysOverride && skipIfAlreadyDeployed) {
312
+ throw new Error(`conflicting options: "alwaysOverride" and "skipIfAlreadyDeployed"`);
313
+ }
314
+
315
+ const existingDeployment = name && env.getOrNull(name);
316
+ if (existingDeployment && skipIfAlreadyDeployed) {
317
+ logger.info(
318
+ `deployment for ${nameToDisplay} at ${existingDeployment.address}, skipIfAlreadyDeployed: true => we skip`,
319
+ );
320
+ return {...(existingDeployment as Deployment<TAbi>), newlyDeployed: false};
321
+ }
322
+
323
+ const {account, artifact, ...viemArgs} = args;
324
+ const address = resolveAccount(account, env);
325
+
326
+ // TODO throw specific error if artifact not found
327
+ const artifactToUse = artifact;
328
+
329
+ const bytecode = linkLibraries(artifactToUse, options?.libraries);
330
+
331
+ const abi = artifactToUse.abi;
332
+
333
+ const argsToUse = {
334
+ ...viemArgs,
335
+ account,
336
+ abi,
337
+ bytecode,
338
+ };
339
+
340
+ const calldata = encodeDeployData(argsToUse as any); // TODO any
341
+ const argsData = `0x${calldata.replace(bytecode, '')}` as `0x${string}`;
342
+
343
+ if (existingDeployment) {
344
+ logger.info(`existing deployment for ${nameToDisplay} at ${existingDeployment.address}`);
345
+ }
346
+
347
+ if (existingDeployment && !alwaysOverride) {
348
+ const previousBytecode = existingDeployment.bytecode;
349
+ const previousArgsData = existingDeployment.argsData;
350
+ // we assume cbor encoding of hash at the end
351
+ // TODO option to remove it, can parse metadata but would rather avoid this here
352
+ const last2Bytes = previousBytecode.slice(-4);
353
+ const cborLength = parseInt(last2Bytes, 16);
354
+ const previousBytecodeWithoutCBOR = previousBytecode.slice(0, -cborLength * 2);
355
+ const newBytecodeWithoutCBOR = bytecode.slice(0, -cborLength * 2);
356
+ if (previousBytecodeWithoutCBOR === newBytecodeWithoutCBOR && previousArgsData === argsData) {
357
+ return {...(existingDeployment as Deployment<TAbi>), newlyDeployed: false};
358
+ } else {
359
+ // logger.info(`-------------- WITHOUT CBOR---------------------`);
360
+ // logger.info(previousBytecodeWithoutCBOR);
361
+ // logger.info(newBytecodeWithoutCBOR);
362
+ // logger.info(`-----------------------------------`);
363
+ // logger.info(`-------------- ARGS DATA ---------------------`);
364
+ // logger.info(previousArgsData);
365
+ // logger.info(argsData);
366
+ // logger.info(`-----------------------------------`);
367
+ }
368
+ }
369
+
370
+ const partialDeployment: PartialDeployment<TAbi> = {
371
+ ...artifactToUse,
372
+ argsData,
373
+ linkedData: toJSONCompatibleLinkedData(options?.linkedData),
374
+ };
375
+
376
+ const signer = env.addressSigners[address];
377
+
378
+ const chainId = `0x${env.network.chain.id.toString(16)}` as `0x${string}`;
379
+ const maxFeePerGas = viemArgs.maxFeePerGas && (`0x${viemArgs.maxFeePerGas.toString(16)}` as `0x${string}`);
380
+ const maxPriorityFeePerGas =
381
+ viemArgs.maxPriorityFeePerGas && (`0x${viemArgs.maxPriorityFeePerGas.toString(16)}` as `0x${string}`);
382
+
383
+ const params: [EIP1193TransactionData] = [
384
+ {
385
+ type: '0x2',
386
+ from: address,
387
+ chainId,
388
+ data: calldata,
389
+ gas: viemArgs.gas && (`0x${viemArgs.gas.toString(16)}` as `0x${string}`),
390
+ maxFeePerGas,
391
+ maxPriorityFeePerGas,
392
+ // gasPrice: viemArgs.gasPrice && `0x${viemArgs.gasPrice.toString(16)}` as `0x${string}`,
393
+ // value: `0x${viemArgs.value?.toString(16)}` as `0x${string}`,
394
+ // nonce: viemArgs.nonce && (`0x${viemArgs.nonce.toString(16)}` as `0x${string}`),
395
+ },
396
+ ];
397
+
398
+ let expectedAddress: `0x${string}` | undefined = undefined;
399
+ if (options?.deterministic) {
400
+ const [deterministicType, salt] = (() => {
401
+ const normalizeSalt = (salt: `0x${string}` | boolean | undefined): `0x${string}` =>
402
+ typeof salt === 'string' ? `0x${salt.slice(2).padStart(64, '0')}` : zeroHash;
403
+ if (typeof options.deterministic !== 'object')
404
+ return ['create2', normalizeSalt(options.deterministic)] as const;
405
+ if (options.deterministic.type === 'create2')
406
+ return ['create2', normalizeSalt(options.deterministic.salt)] as const;
407
+ if (options.deterministic.type === 'create3')
408
+ return ['create3', normalizeSalt(options.deterministic.salt)] as const;
409
+ throw new Error(`unknown deterministic type: ${options.deterministic.type}`);
410
+ })();
411
+
412
+ const bytecode = params[0].data || '0x';
413
+
414
+ const factoryParams = {chainId, address, maxFeePerGas, maxPriorityFeePerGas};
415
+ const create =
416
+ deterministicType === 'create2'
417
+ ? await getCreate2Factory(env, signer, factoryParams)
418
+ : await getCreate3Factory(env, signer, factoryParams);
419
+
420
+ expectedAddress = create.getExpectedAddress({salt, bytecode});
421
+
422
+ const codeAlreadyDeployed = await env.network.provider.request({
423
+ method: 'eth_getCode',
424
+ params: [expectedAddress, 'latest'],
425
+ });
426
+
427
+ if (!codeAlreadyDeployed) {
428
+ throw new Error(`invalid code : ${codeAlreadyDeployed}`);
429
+ } else if (codeAlreadyDeployed !== '0x') {
430
+ if (deterministicType === 'create3' && codeAlreadyDeployed !== bytecode)
431
+ throw new Error(
432
+ `code (length: ${(codeAlreadyDeployed.length - 2) / 2}) already deployed at ${expectedAddress} but is not the expected bytecode (length: ${(bytecode.length - 2) / 2})`,
433
+ );
434
+ env.showMessage(`contract was already deterministically deployed at ${expectedAddress}`);
435
+ if (name) {
436
+ const deployment = await env.save(
437
+ name,
438
+ {
439
+ address: expectedAddress,
440
+ ...partialDeployment,
441
+ },
442
+ {doNotCountAsNewDeployment: true},
443
+ );
444
+ return {...(deployment as Deployment<TAbi>), newlyDeployed: false};
445
+ } else {
446
+ return {address: expectedAddress, ...partialDeployment, newlyDeployed: false};
447
+ }
448
+ }
449
+
450
+ params[0].data = create.encodeData({salt, bytecode});
451
+ params[0].to = create.factoryAddress;
452
+ }
453
+
454
+ const txHash = await broadcastTransaction(env, signer, params);
455
+
456
+ const pendingDeployment: PendingDeployment<TAbi> = {
457
+ type: 'deployment',
458
+ expectedAddress,
459
+ partialDeployment,
460
+ transaction: {hash: txHash, origin: address},
461
+ name,
462
+ // TODO we should have the nonce, except for wallet like metamask where it is not sure you get the nonce you start with
463
+ };
464
+ const deployment = await env.savePendingDeployment(
465
+ pendingDeployment,
466
+ ` - Deploying {name} ${
467
+ options?.deterministic ? '(deterministically)' : ''
468
+ } with tx:\n {hash}\n {transaction}`,
469
+ );
470
+ return {...(deployment as Deployment<TAbi>), newlyDeployed: true};
471
+ };
472
+ }