gate-evm-tools 1.0.27 → 1.0.28
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/dist-runtime/config/hardhatAdapters.d.ts +2 -0
- package/dist-runtime/config/hardhatAdapters.js +8 -0
- package/dist-runtime/config/hardhatAdapters.js.map +1 -1
- package/dist-runtime/config/networks.d.ts +25 -1
- package/dist-runtime/config/networks.js +8 -2
- package/dist-runtime/config/networks.js.map +1 -1
- package/dist-runtime/runtime-identity.json +2 -2
- package/dist-runtime/workflow/lib/controlledMulticallAbi.d.ts +2 -0
- package/dist-runtime/workflow/lib/controlledMulticallAbi.js +10 -0
- package/dist-runtime/workflow/lib/controlledMulticallAbi.js.map +1 -0
- package/dist-runtime/workflow/lib/parameters.js +3 -2
- package/dist-runtime/workflow/lib/parameters.js.map +1 -1
- package/dist-runtime/workflow/steps/deploy.js +2 -1
- package/dist-runtime/workflow/steps/deploy.js.map +1 -1
- package/dist-runtime/workflow/steps/upgrade.js +2 -1
- package/dist-runtime/workflow/steps/upgrade.js.map +1 -1
- package/docs/direct-package-acceptance.md +20 -0
- package/docs/external-infrastructure-acceptance.md +33 -0
- package/docs/network-runtime-acceptance.md +18 -0
- package/docs/plans/2026-09-09-workflow-extraction.md +16 -0
- package/docs/superpowers/plans/2026-07-22-manifest-bootstrap-transaction.md +50 -0
- package/docs/superpowers/plans/2026-07-22-manifest-review-remediation.md +49 -0
- package/docs/superpowers/plans/2026-08-17-custody-hardhat-signers.md +227 -0
- package/docs/superpowers/plans/2026-09-09-remove-template-infrastructure-contracts.md +11 -0
- package/docs/workflow-reference.md +1181 -0
- package/docs/workflow-runtime-acceptance.md +17 -0
- package/docs/workflow-runtime.md +56 -0
- package/package.json +3 -2
- package/runtime/config/hardhatAdapters.ts +8 -0
- package/runtime/config/networks.ts +20 -11
- package/runtime/workflow/lib/controlledMulticallAbi.ts +6 -0
- package/runtime/workflow/lib/parameters.ts +3 -2
- package/runtime/workflow/steps/deploy.ts +2 -1
- package/runtime/workflow/steps/upgrade.ts +2 -1
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Manifest Bootstrap and Transaction Implementation Plan
|
|
2
|
+
|
|
3
|
+
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
|
4
|
+
|
|
5
|
+
**Goal:** Make bare gate-tool manifest commands route to the intended release-stage directory before OpenZeppelin loads and recover the exact manifest after any failed sync.
|
|
6
|
+
|
|
7
|
+
**Architecture:** A dependency-free bin bootstrap validates CLI/environment routing before dynamically importing the compiled command tree. A focused manifest transaction utility owns confinement, locking, byte snapshots, atomic writes, rollback, hashes, and audit reports around `forceImport`.
|
|
8
|
+
|
|
9
|
+
**Tech Stack:** Node.js ESM, TypeScript, OpenZeppelin upgrades-core, Node test runner.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
### Task 1: Pre-import manifest bootstrap
|
|
14
|
+
|
|
15
|
+
**Files:**
|
|
16
|
+
- Create: `bin/manifest-bootstrap.js`
|
|
17
|
+
- Modify: `bin/cli.js`
|
|
18
|
+
- Create: `test/manifest-bootstrap.test.mjs`
|
|
19
|
+
- Modify: `package.json`
|
|
20
|
+
|
|
21
|
+
- [ ] Write failing tests for `bscDev`, `bscProd`, local, explicit custom directories, environment conflicts, ambiguous mutating networks, traversal, and symlink escape.
|
|
22
|
+
- [ ] Add a module-load-order test proving the environment is set before a simulated upgrades-core import observes it.
|
|
23
|
+
- [ ] Run the focused tests and confirm missing bootstrap behavior.
|
|
24
|
+
- [ ] Implement strict argv parsing and confinement, invoke it before `import('../dist/index.js')`, then re-run tests.
|
|
25
|
+
|
|
26
|
+
### Task 2: Transactional sync
|
|
27
|
+
|
|
28
|
+
**Files:**
|
|
29
|
+
- Create: `src/utils/manifestTransaction.ts`
|
|
30
|
+
- Modify: `src/core/syncUpgradeJson.ts`
|
|
31
|
+
- Create: `test/manifest-transaction.test.mjs`
|
|
32
|
+
|
|
33
|
+
- [ ] Write failing tests for success hashes, concurrent lock rejection, exact-byte rollback, new-file removal, atomic replacement, and symlink rejection.
|
|
34
|
+
- [ ] Implement a dedicated gate-tool lock, snapshots, atomic write helper, rollback, and JSON audit report.
|
|
35
|
+
- [ ] Wrap `forceImport`, manifest validation, and tx-hash enrichment in the transaction and expose report/hash fields in the result.
|
|
36
|
+
- [ ] Run focused and full tests.
|
|
37
|
+
|
|
38
|
+
### Task 3: Packaging, docs, and integration
|
|
39
|
+
|
|
40
|
+
**Files:**
|
|
41
|
+
- Modify: `src/core/BytecodeChecker.ts` or its import to use canonical casing
|
|
42
|
+
- Modify: `README.md`
|
|
43
|
+
- Modify: `package.json`
|
|
44
|
+
- Modify: `package-lock.json`
|
|
45
|
+
- Verify: `dist/**`
|
|
46
|
+
|
|
47
|
+
- [ ] Add tests that package metadata runs the Node suite and includes bootstrap files.
|
|
48
|
+
- [ ] Correct the existing filename/import casing mismatch so Linux and case-sensitive builds agree.
|
|
49
|
+
- [ ] Document conventional routing, explicit custom `MANIFEST_DEFAULT_DIR`, fail-closed behavior, transaction reports, and full-workflow usage.
|
|
50
|
+
- [ ] Bump gate-tool to `1.0.21`, build `dist`, run all tests, and perform a bare CLI fixture integration check.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Manifest Review Remediation Implementation Plan
|
|
2
|
+
|
|
3
|
+
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
|
4
|
+
|
|
5
|
+
**Goal:** Close the reviewed rollback, writer-serialization, CLI bootstrap, local-network, and report-collision gaps without weakening fail-closed manifest routing.
|
|
6
|
+
|
|
7
|
+
**Architecture:** Resolve OpenZeppelin's canonical and fallback manifest paths together, confine and lock them by the canonical path, snapshot both exact byte streams, reject dual-file ambiguity, and restore both names exactly on failure. Reuse the same lock around every `sync` and `validate` mutation; emit a per-manifest report path. Treat OpenZeppelin development manifests outside the repository as unsupported for mutating commands.
|
|
8
|
+
|
|
9
|
+
**Tech Stack:** Node.js ESM, TypeScript, OpenZeppelin upgrades-core, Node test runner.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
### Task 1: Bootstrap aliases and local fail-closed behavior
|
|
14
|
+
|
|
15
|
+
**Files:**
|
|
16
|
+
- Modify: `test/manifest-bootstrap.test.mjs`
|
|
17
|
+
- Modify: `bin/manifest-bootstrap.js`
|
|
18
|
+
- Modify: `README.md`
|
|
19
|
+
|
|
20
|
+
- [ ] Add a failing load-order test for `-n bscDev`.
|
|
21
|
+
- [ ] Change the local-network expectation to an explicit unsupported error and confirm RED.
|
|
22
|
+
- [ ] Parse `--network` and `-n` before command imports; reject local manifest mutations with an actionable error.
|
|
23
|
+
- [ ] Re-run the focused bootstrap tests.
|
|
24
|
+
|
|
25
|
+
### Task 2: Canonical/fallback transaction and shared writers
|
|
26
|
+
|
|
27
|
+
**Files:**
|
|
28
|
+
- Modify: `test/manifest-transaction.test.mjs`
|
|
29
|
+
- Modify: `src/utils/openzeppelin.ts`
|
|
30
|
+
- Modify: `src/utils/manifestTransaction.ts`
|
|
31
|
+
- Modify: `src/core/syncUpgradeJson.ts`
|
|
32
|
+
- Modify: `src/core/validateAndGenerateCalldata.ts`
|
|
33
|
+
|
|
34
|
+
- [ ] Add failing tests for fallback rename rollback, dual-file ambiguity, temporary exact restore, and a shared lock blocking a concurrent writer.
|
|
35
|
+
- [ ] Expose both OpenZeppelin manifest paths.
|
|
36
|
+
- [ ] Implement a canonical lock plus exact two-path snapshots/restoration.
|
|
37
|
+
- [ ] Wrap persistent and temporary `validate` mutations with the shared protocol.
|
|
38
|
+
- [ ] Require sync success to leave one canonical regular file and emit a distinct per-manifest report.
|
|
39
|
+
- [ ] Re-run focused tests after each behavior.
|
|
40
|
+
|
|
41
|
+
### Task 3: Packaging and verification
|
|
42
|
+
|
|
43
|
+
**Files:**
|
|
44
|
+
- Modify: `README.md`
|
|
45
|
+
- Verify: `dist/**`
|
|
46
|
+
|
|
47
|
+
- [ ] Document fallback restoration, shared writer locking, local rejection, and returned report paths.
|
|
48
|
+
- [ ] Build `dist`, run the complete test suite, and run `npm pack --dry-run` with the isolated cache.
|
|
49
|
+
- [ ] Inspect the diff and commit the remediation.
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# Custody Hardhat Signers Implementation Plan
|
|
2
|
+
|
|
3
|
+
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
|
4
|
+
|
|
5
|
+
**Goal:** Extend `gate-evm-tools` with one custody credential format that automatically creates an ethers v5 or v6 remote signer and transparently supplies it through Hardhat signer helpers.
|
|
6
|
+
|
|
7
|
+
**Architecture:** A dependency-light credential module parses real private keys and `custody:<ProjectSecret>:<WalletAddress>` values. A runtime signer factory receives the active `hre.ethers` object, detects its real major version, and constructs the matching v5/v6 Signer without bundling ethers. A Hardhat environment wrapper replaces `getSigners`, matching `getSigner`, and matching `provider.getSigner`, while real private keys continue through native `networks.accounts`. The package publishes ESM and CJS subpath exports so both modern imports and Hardhat 2 configuration loading work.
|
|
8
|
+
|
|
9
|
+
**Tech Stack:** TypeScript, Node.js ESM/CJS, Node test runner, ethers 5.7/6.15, Hardhat 2, OpenZeppelin Hardhat Upgrades 3.9.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
### Task 1: Credential parsing and Hardhat accounts
|
|
14
|
+
|
|
15
|
+
**Files:**
|
|
16
|
+
- Create: `test/custody-credential.test.mjs`
|
|
17
|
+
- Create: `src/custody/credential.ts`
|
|
18
|
+
- Create: `src/custody/version.ts`
|
|
19
|
+
- Create: `src/custody/index.ts`
|
|
20
|
+
|
|
21
|
+
- [ ] **Step 1: Write failing credential tests**
|
|
22
|
+
|
|
23
|
+
Test these public calls before they exist:
|
|
24
|
+
|
|
25
|
+
```js
|
|
26
|
+
parseWalletCredential(`0x${"11".repeat(32)}`)
|
|
27
|
+
parseWalletCredential(`custody:${projectSecret}:${walletAddress}`)
|
|
28
|
+
resolveHardhatAccounts(custodyCredential)
|
|
29
|
+
resolveWalletCredential({ PRIVATE_KEY: custodyCredential })
|
|
30
|
+
detectEthersMajor({ version: "ethers/5.7.2" })
|
|
31
|
+
detectEthersMajor({ version: "6.15.0" })
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Require private keys to normalize to `0x` form, custody credentials to expose only the parsed secret/address internally, custody accounts to return `[]`, private-key accounts to return `[privateKey]`, conflicting environment variables to fail, zero/invalid addresses to fail, and unsupported ethers versions to fail.
|
|
35
|
+
|
|
36
|
+
- [ ] **Step 2: Verify RED**
|
|
37
|
+
|
|
38
|
+
Run:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm run build
|
|
42
|
+
node --test test/custody-credential.test.mjs
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Expected: FAIL because `gate-evm-tools/custody` is not exported.
|
|
46
|
+
|
|
47
|
+
- [ ] **Step 3: Implement minimal parsing and version detection**
|
|
48
|
+
|
|
49
|
+
Expose:
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
parseWalletCredential(value: string): ParsedWalletCredential
|
|
53
|
+
resolveWalletCredential(env?: NodeJS.ProcessEnv): ParsedWalletCredential | undefined
|
|
54
|
+
resolveHardhatAccounts(value?: string): string[]
|
|
55
|
+
detectEthersMajor(ethersRuntime: { version?: unknown }): 5 | 6
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Accept only `0x`-optional 64-hex private keys or the versioned custody format. Never treat a valid-looking 64-hex value as a custody credential.
|
|
59
|
+
|
|
60
|
+
- [ ] **Step 4: Verify GREEN**
|
|
61
|
+
|
|
62
|
+
Run the focused test and require all assertions to pass.
|
|
63
|
+
|
|
64
|
+
### Task 2: Real ethers v5/v6 remote signers
|
|
65
|
+
|
|
66
|
+
**Files:**
|
|
67
|
+
- Create: `test/custody-signer.test.mjs`
|
|
68
|
+
- Create: `src/custody/service.ts`
|
|
69
|
+
- Create: `src/custody/signer.ts`
|
|
70
|
+
- Modify: `src/custody/index.ts`
|
|
71
|
+
- Modify: `package.json`
|
|
72
|
+
- Modify: `package-lock.json`
|
|
73
|
+
|
|
74
|
+
- [ ] **Step 1: Install a test-only ethers v5 alias**
|
|
75
|
+
|
|
76
|
+
Add:
|
|
77
|
+
|
|
78
|
+
```json
|
|
79
|
+
"ethers5": "npm:ethers@5.7.2"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Keep host `ethers` as a peer dependency rather than a production dependency.
|
|
83
|
+
|
|
84
|
+
- [ ] **Step 2: Write failing cross-version signer tests**
|
|
85
|
+
|
|
86
|
+
For real ethers 5.7 and 6.15 runtime objects, require `createSigner` to:
|
|
87
|
+
|
|
88
|
+
```js
|
|
89
|
+
createSigner({
|
|
90
|
+
ethers: ethersRuntime,
|
|
91
|
+
credential,
|
|
92
|
+
provider,
|
|
93
|
+
baseUrl: "http://custody.local",
|
|
94
|
+
fetchImpl,
|
|
95
|
+
})
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Test a real private key returns the matching native Wallet. For custody mode, make the fake HTTP service sign transactions, UTF-8 messages, byte messages, and EIP-712 values with a known wallet. Require v6 `signTypedData`, v5 `_signTypedData`, locally recovered addresses, signed raw transaction sender, unchanged unsigned transaction, Authorization header, endpoint paths, and unique idempotency keys.
|
|
99
|
+
|
|
100
|
+
- [ ] **Step 3: Verify RED**
|
|
101
|
+
|
|
102
|
+
Run the focused test. Expected: FAIL because `createSigner` does not exist.
|
|
103
|
+
|
|
104
|
+
- [ ] **Step 4: Implement service client and dynamic signer classes**
|
|
105
|
+
|
|
106
|
+
The v6 class must extend the active runtime's `AbstractSigner`; the v5 class must extend its `Signer`. Both implement `getAddress`, `connect`, `signTransaction`, and `signMessage`; v6 implements `signTypedData`, while v5 implements `_signTypedData`. Validate every returned signature locally before returning it, and compare signed/unsigned transaction payloads before broadcast.
|
|
107
|
+
|
|
108
|
+
- [ ] **Step 5: Verify GREEN**
|
|
109
|
+
|
|
110
|
+
Run focused credential and signer tests for both majors.
|
|
111
|
+
|
|
112
|
+
### Task 3: Hardhat signer injection
|
|
113
|
+
|
|
114
|
+
**Files:**
|
|
115
|
+
- Create: `test/custody-hardhat.test.mjs`
|
|
116
|
+
- Create: `src/custody/hardhat-runtime.ts`
|
|
117
|
+
- Create: `src/custody/hardhat.ts`
|
|
118
|
+
|
|
119
|
+
- [ ] **Step 1: Write failing Hardhat wrapper tests**
|
|
120
|
+
|
|
121
|
+
Use v5 and v6-shaped HRE fixtures. Require custody mode to return the remote signer from:
|
|
122
|
+
|
|
123
|
+
```js
|
|
124
|
+
await hre.ethers.getSigners()
|
|
125
|
+
await hre.ethers.getSigner(custodyAddress)
|
|
126
|
+
await hre.ethers.provider.getSigner(0)
|
|
127
|
+
await hre.ethers.provider.getSigner(custodyAddress)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Require an unrelated address and non-custody configuration to delegate to the original methods. Require version/address logging without logging the Project Secret.
|
|
131
|
+
|
|
132
|
+
- [ ] **Step 2: Verify RED**
|
|
133
|
+
|
|
134
|
+
Run the focused test. Expected: FAIL because `installCustodyHardhatRuntime` does not exist.
|
|
135
|
+
|
|
136
|
+
- [ ] **Step 3: Implement runtime installation and plugin registration**
|
|
137
|
+
|
|
138
|
+
Expose a pure testable installer and register it through `extendEnvironment`. Read `WALLET_CREDENTIAL` or legacy `PRIVATE_KEY` only when signer helpers execute, cache by credential, require `CUSTODY_API_BASE_URL`, and never change impersonated signers.
|
|
139
|
+
|
|
140
|
+
- [ ] **Step 4: Verify GREEN**
|
|
141
|
+
|
|
142
|
+
Run all custody unit tests.
|
|
143
|
+
|
|
144
|
+
### Task 4: Dual ESM/CJS packaging and documentation
|
|
145
|
+
|
|
146
|
+
**Files:**
|
|
147
|
+
- Create: `tsconfig.custody-cjs.json`
|
|
148
|
+
- Create: `scripts/write-cjs-package.mjs`
|
|
149
|
+
- Modify: `package.json`
|
|
150
|
+
- Modify: `package-lock.json`
|
|
151
|
+
- Modify: `README.md`
|
|
152
|
+
- Verify: `dist/custody/**`
|
|
153
|
+
- Verify: `dist-cjs/custody/**`
|
|
154
|
+
|
|
155
|
+
- [ ] **Step 1: Write failing package export tests**
|
|
156
|
+
|
|
157
|
+
Extend tests to load both:
|
|
158
|
+
|
|
159
|
+
```js
|
|
160
|
+
await import("gate-evm-tools/custody")
|
|
161
|
+
require("gate-evm-tools/custody")
|
|
162
|
+
await import("gate-evm-tools/hardhat")
|
|
163
|
+
require("gate-evm-tools/hardhat")
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Expected before packaging work: CJS or subpath resolution fails.
|
|
167
|
+
|
|
168
|
+
- [ ] **Step 2: Build both module formats**
|
|
169
|
+
|
|
170
|
+
Compile all source to `dist` as ESM and custody source to `dist-cjs` as CommonJS. Write `dist-cjs/package.json` containing `{ "type": "commonjs" }`. Add `exports` entries with `types`, `import`, and `require`, include `dist-cjs/` in package files, expand the ethers peer range to `>=5.7.0 <7.0.0`, and build before tests.
|
|
171
|
+
|
|
172
|
+
- [ ] **Step 3: Document migration**
|
|
173
|
+
|
|
174
|
+
Document:
|
|
175
|
+
|
|
176
|
+
```ts
|
|
177
|
+
import { resolveHardhatAccounts } from "gate-evm-tools/hardhat";
|
|
178
|
+
|
|
179
|
+
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
180
|
+
accounts: resolveHardhatAccounts(PRIVATE_KEY)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Explain that business scripts stay unchanged, custody mode leaves native accounts empty, v5/v6 are selected from `hre.ethers.version`, and OpenZeppelin CREATE2 patching remains independent.
|
|
184
|
+
|
|
185
|
+
- [ ] **Step 4: Verify package contents**
|
|
186
|
+
|
|
187
|
+
Run build, all tests, and `npm pack --dry-run`; require both module formats and docs to be included with no fixture secrets.
|
|
188
|
+
|
|
189
|
+
### Task 5: Native Hardhat and OpenZeppelin local integration
|
|
190
|
+
|
|
191
|
+
**Files:**
|
|
192
|
+
- Create: `test/fixtures/custody-hardhat-v6/**`
|
|
193
|
+
- Create: `scripts/test-custody-hardhat-v6.mjs`
|
|
194
|
+
- Modify: `package.json`
|
|
195
|
+
|
|
196
|
+
- [ ] **Step 1: Create a local native fixture**
|
|
197
|
+
|
|
198
|
+
Start a Hardhat node with its public first development key, start a mock custody HTTP service for that key, and run a second Hardhat config whose remote `localhost` network uses:
|
|
199
|
+
|
|
200
|
+
```ts
|
|
201
|
+
accounts: resolveHardhatAccounts(process.env.PRIVATE_KEY)
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
The deployment script must call `ethers.getContractFactory` and `upgrades.deployProxy` without explicitly passing a signer.
|
|
205
|
+
|
|
206
|
+
- [ ] **Step 2: Verify the native flow**
|
|
207
|
+
|
|
208
|
+
Set only the composite `PRIVATE_KEY`, custody URL, and RPC URL. Require implementation/proxy deployment transactions to hit `/sign-transaction`, the proxy state to be initialized, and the signer address to equal the custody address.
|
|
209
|
+
|
|
210
|
+
- [ ] **Step 3: Final verification**
|
|
211
|
+
|
|
212
|
+
Run:
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
npm test
|
|
216
|
+
npm run test:custody:hardhat-v6
|
|
217
|
+
npm pack --dry-run
|
|
218
|
+
git diff --check
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Expected: all commands exit 0. Record the limitation that a separate native ethers-v5 Hardhat fixture remains necessary before publishing v5 support if the real plugin integration differs from the unit-tested runtime contract.
|
|
222
|
+
|
|
223
|
+
## Self-review
|
|
224
|
+
|
|
225
|
+
- Spec coverage: unified credential, native private key fallback, automatic ethers v5/v6 detection, Hardhat signer replacement, OpenZeppelin proxy deployment, ESM/CJS loading, and local tests are covered.
|
|
226
|
+
- Safety: Project Secrets are never logged or written to fixtures; the mock uses only Hardhat's public development key.
|
|
227
|
+
- Type consistency: the public factory, Hardhat wrapper, and tests all use the same credential and signer option names.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Remove template infrastructure contracts
|
|
2
|
+
|
|
3
|
+
Goal: business projects consume deployed Multicall and placeholder addresses without compiling their implementations.
|
|
4
|
+
|
|
5
|
+
- [x] Add packaged authority ABI; use it in deploy/upgrade without named Multicall artifacts.
|
|
6
|
+
- [x] Accept business implementation name in proxy step.contract, require agreement with firstUpgrade.contract, retain legacy placeholder name as compatibility metadata.
|
|
7
|
+
- [x] Remove two template contracts, compile ERC1967Proxy directly from OpenZeppelin through the package adapter and business compiler configuration.
|
|
8
|
+
- [x] Update examples, initialization detection and tests; do not delete historical project contracts automatically.
|
|
9
|
+
- [x] Bump minimum runtime/template patch versions and validate using a local tarball, tests and no-broadcast compilation.
|
|
10
|
+
|
|
11
|
+
Compatibility: deployed infrastructure and proxy init code must remain unchanged. No redeployment, salt changes, transaction broadcast, npm publication or Git push. Historical artifact fixtures stay available for unrelated infrastructure deployment tests.
|