gate-evm-tools 1.0.27 → 1.0.31
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 +16 -1
- package/bin/cli.js +3 -0
- package/bin/delivery.cjs +51 -0
- package/bin/manifest-bootstrap.js +4 -15
- package/bin/workflow.cjs +1 -1
- package/dist/commands/plan/file-store.d.ts.map +1 -0
- package/dist/commands/plan/generate-deployment.d.ts +48 -0
- package/dist/commands/plan/generate-deployment.d.ts.map +1 -0
- package/dist/commands/plan/generate-deployment.js +211 -0
- package/dist/commands/plan/generate-deployment.js.map +1 -0
- package/dist/commands/plan/helpers.d.ts.map +1 -0
- package/dist/commands/plan/index.d.ts +3 -0
- package/dist/commands/plan/index.d.ts.map +1 -0
- package/dist/commands/plan/index.js +88 -0
- package/dist/commands/plan/index.js.map +1 -0
- package/dist/commands/sync.js +1 -1
- package/dist/commands/sync.js.map +1 -1
- package/dist/core/BytecodeChecker.d.ts.map +1 -1
- package/dist/core/BytecodeChecker.js +27 -8
- package/dist/core/BytecodeChecker.js.map +1 -1
- package/dist/core/preparation/artifacts.d.ts +2 -0
- package/dist/core/preparation/artifacts.d.ts.map +1 -1
- package/dist/core/preparation/artifacts.js +9 -3
- package/dist/core/preparation/artifacts.js.map +1 -1
- package/dist/core/preparation/evm.d.ts +38 -2
- package/dist/core/preparation/evm.d.ts.map +1 -1
- package/dist/core/preparation/evm.js +104 -32
- package/dist/core/preparation/evm.js.map +1 -1
- package/dist/core/preparation/evmManifestSync.d.ts +63 -0
- package/dist/core/preparation/evmManifestSync.d.ts.map +1 -0
- package/dist/core/preparation/evmManifestSync.js +146 -0
- package/dist/core/preparation/evmManifestSync.js.map +1 -0
- package/dist/core/preparation/index.d.ts +40 -2
- package/dist/core/preparation/index.d.ts.map +1 -1
- package/dist/core/preparation/index.js +3 -3
- package/dist/core/preparation/index.js.map +1 -1
- package/dist/core/preparation/manifest.d.ts +15 -3
- package/dist/core/preparation/manifest.d.ts.map +1 -1
- package/dist/core/preparation/manifest.js +21 -26
- package/dist/core/preparation/manifest.js.map +1 -1
- package/dist/core/preparation/normalize.d.ts.map +1 -1
- package/dist/core/preparation/normalize.js +14 -9
- package/dist/core/preparation/normalize.js.map +1 -1
- package/dist/core/preparation/types.d.ts +7 -2
- package/dist/core/preparation/types.d.ts.map +1 -1
- package/dist/custody/hardhat-runtime.d.ts.map +1 -1
- package/dist/custody/hardhat-runtime.js +2 -0
- package/dist/custody/hardhat-runtime.js.map +1 -1
- package/dist/custody/hardhat.d.ts +1 -0
- package/dist/custody/hardhat.d.ts.map +1 -1
- package/dist/custody/hardhat.js +1 -0
- package/dist/custody/hardhat.js.map +1 -1
- package/dist/custody/index.d.ts +1 -0
- package/dist/custody/index.d.ts.map +1 -1
- package/dist/custody/index.js +1 -0
- package/dist/custody/index.js.map +1 -1
- package/dist/custody/provider-wait.d.ts +13 -0
- package/dist/custody/provider-wait.d.ts.map +1 -0
- package/dist/custody/provider-wait.js +78 -0
- package/dist/custody/provider-wait.js.map +1 -0
- package/dist/delivery/policy.d.ts +6 -0
- package/dist/delivery/policy.d.ts.map +1 -0
- package/dist/delivery/policy.js +24 -0
- package/dist/delivery/policy.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/sync/index.d.ts +15 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +8 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/workflow/index.d.ts +6 -1
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +4 -0
- package/dist/workflow/index.js.map +1 -1
- package/dist-cjs/core/BytecodeChecker.js +526 -0
- package/dist-cjs/core/BytecodeChecker.js.map +1 -0
- package/dist-cjs/core/legacyProxyArtifact.js +42 -0
- package/dist-cjs/core/legacyProxyArtifact.js.map +1 -0
- package/dist-cjs/core/preparation/artifacts.js +11 -4
- package/dist-cjs/core/preparation/artifacts.js.map +1 -1
- package/dist-cjs/core/preparation/evm.js +105 -32
- package/dist-cjs/core/preparation/evm.js.map +1 -1
- package/dist-cjs/core/preparation/evmManifestSync.js +155 -0
- package/dist-cjs/core/preparation/evmManifestSync.js.map +1 -0
- package/dist-cjs/core/preparation/index.js +3 -3
- package/dist-cjs/core/preparation/index.js.map +1 -1
- package/dist-cjs/core/preparation/manifest.js +23 -28
- package/dist-cjs/core/preparation/manifest.js.map +1 -1
- package/dist-cjs/core/preparation/normalize.js +14 -9
- package/dist-cjs/core/preparation/normalize.js.map +1 -1
- package/dist-cjs/custody/hardhat-runtime.js +2 -0
- package/dist-cjs/custody/hardhat-runtime.js.map +1 -1
- package/dist-cjs/custody/hardhat.js +3 -1
- package/dist-cjs/custody/hardhat.js.map +1 -1
- package/dist-cjs/custody/index.js +3 -1
- package/dist-cjs/custody/index.js.map +1 -1
- package/dist-cjs/custody/provider-wait.js +81 -0
- package/dist-cjs/custody/provider-wait.js.map +1 -0
- package/dist-cjs/delivery/policy.js +29 -0
- package/dist-cjs/delivery/policy.js.map +1 -0
- package/dist-cjs/sync/index.js +8 -0
- package/dist-cjs/sync/index.js.map +1 -1
- package/dist-cjs/workflow/index.js +12 -1
- package/dist-cjs/workflow/index.js.map +1 -1
- 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/config/openzeppelin.d.ts +2 -1
- package/dist-runtime/config/openzeppelin.js +2 -19
- package/dist-runtime/config/openzeppelin.js.map +1 -1
- package/dist-runtime/delivery/abi.d.ts +14 -0
- package/dist-runtime/delivery/abi.js +161 -0
- package/dist-runtime/delivery/abi.js.map +1 -0
- package/dist-runtime/delivery/aggregate-bootstrap.d.ts +12 -0
- package/dist-runtime/delivery/aggregate-bootstrap.js +40 -0
- package/dist-runtime/delivery/aggregate-bootstrap.js.map +1 -0
- package/dist-runtime/delivery/aggregate-channel.d.ts +28 -0
- package/dist-runtime/delivery/aggregate-channel.js +155 -0
- package/dist-runtime/delivery/aggregate-channel.js.map +1 -0
- package/dist-runtime/delivery/aggregate-inputs.d.ts +168 -0
- package/dist-runtime/delivery/aggregate-inputs.js +57 -0
- package/dist-runtime/delivery/aggregate-inputs.js.map +1 -0
- package/dist-runtime/delivery/aggregate-source.d.ts +25 -0
- package/dist-runtime/delivery/aggregate-source.js +79 -0
- package/dist-runtime/delivery/aggregate-source.js.map +1 -0
- package/dist-runtime/delivery/aggregate-worker.d.ts +1 -0
- package/dist-runtime/delivery/aggregate-worker.js +191 -0
- package/dist-runtime/delivery/aggregate-worker.js.map +1 -0
- package/dist-runtime/delivery/aggregate.d.ts +51 -0
- package/dist-runtime/delivery/aggregate.js +190 -0
- package/dist-runtime/delivery/aggregate.js.map +1 -0
- package/dist-runtime/delivery/bindings.d.ts +21 -0
- package/dist-runtime/delivery/bindings.js +53 -0
- package/dist-runtime/delivery/bindings.js.map +1 -0
- package/dist-runtime/delivery/check-code.d.ts +19 -0
- package/dist-runtime/delivery/check-code.js +63 -0
- package/dist-runtime/delivery/check-code.js.map +1 -0
- package/dist-runtime/delivery/closure-format.d.ts +77 -0
- package/dist-runtime/delivery/closure-format.js +225 -0
- package/dist-runtime/delivery/closure-format.js.map +1 -0
- package/dist-runtime/delivery/codec-pin.d.ts +2 -0
- package/dist-runtime/delivery/codec-pin.js +7 -0
- package/dist-runtime/delivery/codec-pin.js.map +1 -0
- package/dist-runtime/delivery/codec.d.ts +19 -0
- package/dist-runtime/delivery/codec.js +73 -0
- package/dist-runtime/delivery/codec.js.map +1 -0
- package/dist-runtime/delivery/compiler-dependency-pins.d.ts +7 -0
- package/dist-runtime/delivery/compiler-dependency-pins.js +1689 -0
- package/dist-runtime/delivery/compiler-dependency-pins.js.map +1 -0
- package/dist-runtime/delivery/compiler-files.d.ts +40 -0
- package/dist-runtime/delivery/compiler-files.js +220 -0
- package/dist-runtime/delivery/compiler-files.js.map +1 -0
- package/dist-runtime/delivery/compiler-io.d.ts +2 -0
- package/dist-runtime/delivery/compiler-io.js +13 -0
- package/dist-runtime/delivery/compiler-io.js.map +1 -0
- package/dist-runtime/delivery/compiler-pins.d.ts +10 -0
- package/dist-runtime/delivery/compiler-pins.js +147 -0
- package/dist-runtime/delivery/compiler-pins.js.map +1 -0
- package/dist-runtime/delivery/compiler.d.ts +188 -0
- package/dist-runtime/delivery/compiler.js +850 -0
- package/dist-runtime/delivery/compiler.js.map +1 -0
- package/dist-runtime/delivery/config.d.ts +48 -0
- package/dist-runtime/delivery/config.js +99 -0
- package/dist-runtime/delivery/config.js.map +1 -0
- package/dist-runtime/delivery/configuration-definition.d.ts +22 -0
- package/dist-runtime/delivery/configuration-definition.js +316 -0
- package/dist-runtime/delivery/configuration-definition.js.map +1 -0
- package/dist-runtime/delivery/configuration-hre.d.ts +17 -0
- package/dist-runtime/delivery/configuration-hre.js +198 -0
- package/dist-runtime/delivery/configuration-hre.js.map +1 -0
- package/dist-runtime/delivery/configuration-runtime.d.ts +36 -0
- package/dist-runtime/delivery/configuration-runtime.js +248 -0
- package/dist-runtime/delivery/configuration-runtime.js.map +1 -0
- package/dist-runtime/delivery/configuration.d.ts +35 -0
- package/dist-runtime/delivery/configuration.js +83 -0
- package/dist-runtime/delivery/configuration.js.map +1 -0
- package/dist-runtime/delivery/create2.d.ts +3 -0
- package/dist-runtime/delivery/create2.js +48 -0
- package/dist-runtime/delivery/create2.js.map +1 -0
- package/dist-runtime/delivery/custom-closure.d.ts +27 -0
- package/dist-runtime/delivery/custom-closure.js +818 -0
- package/dist-runtime/delivery/custom-closure.js.map +1 -0
- package/dist-runtime/delivery/custom-format.d.ts +35 -0
- package/dist-runtime/delivery/custom-format.js +383 -0
- package/dist-runtime/delivery/custom-format.js.map +1 -0
- package/dist-runtime/delivery/custom.d.ts +32 -0
- package/dist-runtime/delivery/custom.js +158 -0
- package/dist-runtime/delivery/custom.js.map +1 -0
- package/dist-runtime/delivery/data.d.ts +7 -0
- package/dist-runtime/delivery/data.js +86 -0
- package/dist-runtime/delivery/data.js.map +1 -0
- package/dist-runtime/delivery/development.d.ts +91 -0
- package/dist-runtime/delivery/development.js +395 -0
- package/dist-runtime/delivery/development.js.map +1 -0
- package/dist-runtime/delivery/engine.d.ts +9 -0
- package/dist-runtime/delivery/engine.js +23 -0
- package/dist-runtime/delivery/engine.js.map +1 -0
- package/dist-runtime/delivery/eoa-observation.d.ts +43 -0
- package/dist-runtime/delivery/eoa-observation.js +145 -0
- package/dist-runtime/delivery/eoa-observation.js.map +1 -0
- package/dist-runtime/delivery/eoa-signed.d.ts +2 -0
- package/dist-runtime/delivery/eoa-signed.js +74 -0
- package/dist-runtime/delivery/eoa-signed.js.map +1 -0
- package/dist-runtime/delivery/eoa.d.ts +81 -0
- package/dist-runtime/delivery/eoa.js +274 -0
- package/dist-runtime/delivery/eoa.js.map +1 -0
- package/dist-runtime/delivery/execution-db.d.ts +20 -0
- package/dist-runtime/delivery/execution-db.js +153 -0
- package/dist-runtime/delivery/execution-db.js.map +1 -0
- package/dist-runtime/delivery/execution-files.d.ts +9 -0
- package/dist-runtime/delivery/execution-files.js +138 -0
- package/dist-runtime/delivery/execution-files.js.map +1 -0
- package/dist-runtime/delivery/execution-model.d.ts +56 -0
- package/dist-runtime/delivery/execution-model.js +66 -0
- package/dist-runtime/delivery/execution-model.js.map +1 -0
- package/dist-runtime/delivery/execution-store.d.ts +48 -0
- package/dist-runtime/delivery/execution-store.js +361 -0
- package/dist-runtime/delivery/execution-store.js.map +1 -0
- package/dist-runtime/delivery/existing-code.d.ts +37 -0
- package/dist-runtime/delivery/existing-code.js +75 -0
- package/dist-runtime/delivery/existing-code.js.map +1 -0
- package/dist-runtime/delivery/export.d.ts +51 -0
- package/dist-runtime/delivery/export.js +69 -0
- package/dist-runtime/delivery/export.js.map +1 -0
- package/dist-runtime/delivery/forkAudit.d.ts +119 -0
- package/dist-runtime/delivery/forkAudit.js +473 -0
- package/dist-runtime/delivery/forkAudit.js.map +1 -0
- package/dist-runtime/delivery/hardhat.d.ts +3 -0
- package/dist-runtime/delivery/hardhat.js +45 -0
- package/dist-runtime/delivery/hardhat.js.map +1 -0
- package/dist-runtime/delivery/history-registration.d.ts +2 -0
- package/dist-runtime/delivery/history-registration.js +17 -0
- package/dist-runtime/delivery/history-registration.js.map +1 -0
- package/dist-runtime/delivery/identities.d.ts +22 -0
- package/dist-runtime/delivery/identities.js +97 -0
- package/dist-runtime/delivery/identities.js.map +1 -0
- package/dist-runtime/delivery/input-files.d.ts +5 -0
- package/dist-runtime/delivery/input-files.js +70 -0
- package/dist-runtime/delivery/input-files.js.map +1 -0
- package/dist-runtime/delivery/inputs.d.ts +62 -0
- package/dist-runtime/delivery/inputs.js +187 -0
- package/dist-runtime/delivery/inputs.js.map +1 -0
- package/dist-runtime/delivery/journal.d.ts +35 -0
- package/dist-runtime/delivery/journal.js +270 -0
- package/dist-runtime/delivery/journal.js.map +1 -0
- package/dist-runtime/delivery/manifest.d.ts +14 -0
- package/dist-runtime/delivery/manifest.js +68 -0
- package/dist-runtime/delivery/manifest.js.map +1 -0
- package/dist-runtime/delivery/materialization.d.ts +20 -0
- package/dist-runtime/delivery/materialization.js +138 -0
- package/dist-runtime/delivery/materialization.js.map +1 -0
- package/dist-runtime/delivery/observations.d.ts +31 -0
- package/dist-runtime/delivery/observations.js +38 -0
- package/dist-runtime/delivery/observations.js.map +1 -0
- package/dist-runtime/delivery/parameters.d.ts +53 -0
- package/dist-runtime/delivery/parameters.js +257 -0
- package/dist-runtime/delivery/parameters.js.map +1 -0
- package/dist-runtime/delivery/pending.d.ts +70 -0
- package/dist-runtime/delivery/pending.js +99 -0
- package/dist-runtime/delivery/pending.js.map +1 -0
- package/dist-runtime/delivery/plan.d.ts +50 -0
- package/dist-runtime/delivery/plan.js +209 -0
- package/dist-runtime/delivery/plan.js.map +1 -0
- package/dist-runtime/delivery/planning.d.ts +81 -0
- package/dist-runtime/delivery/planning.js +302 -0
- package/dist-runtime/delivery/planning.js.map +1 -0
- package/dist-runtime/delivery/policy.d.ts +4 -0
- package/dist-runtime/delivery/policy.js +9 -0
- package/dist-runtime/delivery/policy.js.map +1 -0
- package/dist-runtime/delivery/preparation.d.ts +6 -0
- package/dist-runtime/delivery/preparation.js +158 -0
- package/dist-runtime/delivery/preparation.js.map +1 -0
- package/dist-runtime/delivery/production-environment.d.ts +2 -0
- package/dist-runtime/delivery/production-environment.js +12 -0
- package/dist-runtime/delivery/production-environment.js.map +1 -0
- package/dist-runtime/delivery/production-finalization.d.ts +86 -0
- package/dist-runtime/delivery/production-finalization.js +278 -0
- package/dist-runtime/delivery/production-finalization.js.map +1 -0
- package/dist-runtime/delivery/production.d.ts +461 -0
- package/dist-runtime/delivery/production.js +396 -0
- package/dist-runtime/delivery/production.js.map +1 -0
- package/dist-runtime/delivery/project-files.d.ts +8 -0
- package/dist-runtime/delivery/project-files.js +82 -0
- package/dist-runtime/delivery/project-files.js.map +1 -0
- package/dist-runtime/delivery/project.d.ts +15 -0
- package/dist-runtime/delivery/project.js +157 -0
- package/dist-runtime/delivery/project.js.map +1 -0
- package/dist-runtime/delivery/protocol.d.ts +49 -0
- package/dist-runtime/delivery/protocol.js +112 -0
- package/dist-runtime/delivery/protocol.js.map +1 -0
- package/dist-runtime/delivery/references.d.ts +19 -0
- package/dist-runtime/delivery/references.js +84 -0
- package/dist-runtime/delivery/references.js.map +1 -0
- package/dist-runtime/delivery/release-graph.d.ts +93 -0
- package/dist-runtime/delivery/release-graph.js +106 -0
- package/dist-runtime/delivery/release-graph.js.map +1 -0
- package/dist-runtime/delivery/release-history-capture.d.ts +7 -0
- package/dist-runtime/delivery/release-history-capture.js +76 -0
- package/dist-runtime/delivery/release-history-capture.js.map +1 -0
- package/dist-runtime/delivery/release-history.d.ts +43 -0
- package/dist-runtime/delivery/release-history.js +246 -0
- package/dist-runtime/delivery/release-history.js.map +1 -0
- package/dist-runtime/delivery/release.d.ts +172 -0
- package/dist-runtime/delivery/release.js +209 -0
- package/dist-runtime/delivery/release.js.map +1 -0
- package/dist-runtime/delivery/safe-manifest.d.ts +9 -0
- package/dist-runtime/delivery/safe-manifest.js +13 -0
- package/dist-runtime/delivery/safe-manifest.js.map +1 -0
- package/dist-runtime/delivery/safe-observation.d.ts +30 -0
- package/dist-runtime/delivery/safe-observation.js +487 -0
- package/dist-runtime/delivery/safe-observation.js.map +1 -0
- package/dist-runtime/delivery/safe-prepare.d.ts +13 -0
- package/dist-runtime/delivery/safe-prepare.js +81 -0
- package/dist-runtime/delivery/safe-prepare.js.map +1 -0
- package/dist-runtime/delivery/safe.d.ts +91 -0
- package/dist-runtime/delivery/safe.js +243 -0
- package/dist-runtime/delivery/safe.js.map +1 -0
- package/dist-runtime/delivery/same-fork-baseline.d.ts +8 -0
- package/dist-runtime/delivery/same-fork-baseline.js +20 -0
- package/dist-runtime/delivery/same-fork-baseline.js.map +1 -0
- package/dist-runtime/delivery/setup.d.ts +31 -0
- package/dist-runtime/delivery/setup.js +215 -0
- package/dist-runtime/delivery/setup.js.map +1 -0
- package/dist-runtime/delivery/source.d.ts +41 -0
- package/dist-runtime/delivery/source.js +137 -0
- package/dist-runtime/delivery/source.js.map +1 -0
- package/dist-runtime/delivery/target-fields.d.ts +2 -0
- package/dist-runtime/delivery/target-fields.js +11 -0
- package/dist-runtime/delivery/target-fields.js.map +1 -0
- package/dist-runtime/delivery/validation.d.ts +9 -0
- package/dist-runtime/delivery/validation.js +150 -0
- package/dist-runtime/delivery/validation.js.map +1 -0
- package/dist-runtime/delivery/verification.d.ts +16 -0
- package/dist-runtime/delivery/verification.js +65 -0
- package/dist-runtime/delivery/verification.js.map +1 -0
- package/dist-runtime/migrate.js +1 -0
- package/dist-runtime/migrate.js.map +1 -1
- package/dist-runtime/miner/binary.d.ts +2 -0
- package/dist-runtime/miner/binary.js +54 -0
- package/dist-runtime/miner/binary.js.map +1 -0
- package/dist-runtime/miner/cli.d.ts +1 -0
- package/dist-runtime/miner/cli.js +131 -0
- package/dist-runtime/miner/cli.js.map +1 -0
- package/dist-runtime/miner/index.d.ts +5 -0
- package/dist-runtime/miner/index.js +13 -0
- package/dist-runtime/miner/index.js.map +1 -0
- package/dist-runtime/miner/request.d.ts +7 -0
- package/dist-runtime/miner/request.js +73 -0
- package/dist-runtime/miner/request.js.map +1 -0
- package/dist-runtime/miner/runner.d.ts +2 -0
- package/dist-runtime/miner/runner.js +131 -0
- package/dist-runtime/miner/runner.js.map +1 -0
- package/dist-runtime/miner/types.d.ts +89 -0
- package/dist-runtime/miner/types.js +3 -0
- package/dist-runtime/miner/types.js.map +1 -0
- package/dist-runtime/miner/verify.d.ts +2 -0
- package/dist-runtime/miner/verify.js +75 -0
- package/dist-runtime/miner/verify.js.map +1 -0
- package/dist-runtime/runtime-identity.json +2 -2
- package/dist-runtime/vendor/plan-codec/index.cjs +820 -0
- package/dist-runtime/vendor/plan-codec/index.d.cts +32 -0
- package/dist-runtime/vendor/plan-codec/provenance.json +24 -0
- package/dist-runtime/workflow/engine.d.ts +14 -0
- package/dist-runtime/workflow/engine.js +160 -0
- package/dist-runtime/workflow/engine.js.map +1 -0
- package/dist-runtime/workflow/lib/authority.d.ts +6 -3
- package/dist-runtime/workflow/lib/authority.js.map +1 -1
- package/dist-runtime/workflow/lib/calls.d.ts +1 -1
- package/dist-runtime/workflow/lib/calls.js +43 -34
- package/dist-runtime/workflow/lib/calls.js.map +1 -1
- package/dist-runtime/workflow/lib/canonicalData.d.ts +8 -0
- package/dist-runtime/workflow/lib/canonicalData.js +68 -0
- package/dist-runtime/workflow/lib/canonicalData.js.map +1 -0
- package/dist-runtime/workflow/lib/config.d.ts +3 -1
- package/dist-runtime/workflow/lib/config.js.map +1 -1
- package/dist-runtime/workflow/lib/context.d.ts +76 -0
- package/dist-runtime/workflow/lib/context.js +3 -0
- package/dist-runtime/workflow/lib/context.js.map +1 -0
- 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/create2.d.ts +1 -1
- package/dist-runtime/workflow/lib/create2.js +9 -12
- package/dist-runtime/workflow/lib/create2.js.map +1 -1
- package/dist-runtime/workflow/lib/deployments.d.ts +5 -5
- package/dist-runtime/workflow/lib/deployments.js +5 -13
- package/dist-runtime/workflow/lib/deployments.js.map +1 -1
- package/dist-runtime/workflow/lib/evidencePorts.d.ts +55 -0
- package/dist-runtime/workflow/lib/evidencePorts.js +3 -0
- package/dist-runtime/workflow/lib/evidencePorts.js.map +1 -0
- package/dist-runtime/workflow/lib/executionPlan.d.ts +4 -42
- package/dist-runtime/workflow/lib/executionPlan.js +15 -210
- package/dist-runtime/workflow/lib/executionPlan.js.map +1 -1
- package/dist-runtime/workflow/lib/gateTool.d.ts +6 -2
- package/dist-runtime/workflow/lib/gateTool.js +20 -10
- package/dist-runtime/workflow/lib/gateTool.js.map +1 -1
- package/dist-runtime/workflow/lib/gateToolSync.d.ts +1 -1
- package/dist-runtime/workflow/lib/gateToolSync.js +3 -2
- package/dist-runtime/workflow/lib/gateToolSync.js.map +1 -1
- package/dist-runtime/workflow/lib/operationNames.d.ts +3 -0
- package/dist-runtime/workflow/lib/operationNames.js +34 -0
- package/dist-runtime/workflow/lib/operationNames.js.map +1 -0
- package/dist-runtime/workflow/lib/parameters.d.ts +1 -1
- package/dist-runtime/workflow/lib/parameters.js +9 -24
- package/dist-runtime/workflow/lib/parameters.js.map +1 -1
- package/dist-runtime/workflow/lib/pendingDeploymentReuse.js +18 -52
- package/dist-runtime/workflow/lib/pendingDeploymentReuse.js.map +1 -1
- package/dist-runtime/workflow/lib/pendingUupsBinding.d.ts +42 -0
- package/dist-runtime/workflow/lib/pendingUupsBinding.js +39 -0
- package/dist-runtime/workflow/lib/pendingUupsBinding.js.map +1 -0
- package/dist-runtime/workflow/lib/plan.d.ts +55 -0
- package/dist-runtime/workflow/lib/plan.js +324 -0
- package/dist-runtime/workflow/lib/plan.js.map +1 -0
- package/dist-runtime/workflow/lib/planCli.d.ts +14 -0
- package/dist-runtime/workflow/lib/planCli.js +279 -0
- package/dist-runtime/workflow/lib/planCli.js.map +1 -0
- package/dist-runtime/workflow/lib/preparationEvidence.d.ts +4 -0
- package/dist-runtime/workflow/lib/preparationEvidence.js +19 -0
- package/dist-runtime/workflow/lib/preparationEvidence.js.map +1 -0
- package/dist-runtime/workflow/lib/proxy.d.ts +3 -2
- package/dist-runtime/workflow/lib/proxy.js +3 -4
- package/dist-runtime/workflow/lib/proxy.js.map +1 -1
- package/dist-runtime/workflow/lib/runtime.d.ts +6 -0
- package/dist-runtime/workflow/lib/runtime.js +48 -0
- package/dist-runtime/workflow/lib/runtime.js.map +1 -0
- package/dist-runtime/workflow/lib/signer.d.ts +3 -2
- package/dist-runtime/workflow/lib/signer.js +18 -18
- package/dist-runtime/workflow/lib/signer.js.map +1 -1
- package/dist-runtime/workflow/lib/simulation.d.ts +13 -6
- package/dist-runtime/workflow/lib/simulation.js +39 -31
- package/dist-runtime/workflow/lib/simulation.js.map +1 -1
- package/dist-runtime/workflow/lib/state.js +3 -3
- package/dist-runtime/workflow/lib/state.js.map +1 -1
- package/dist-runtime/workflow/lib/staticValidation.d.ts +28 -0
- package/dist-runtime/workflow/lib/staticValidation.js +54 -10
- package/dist-runtime/workflow/lib/staticValidation.js.map +1 -1
- package/dist-runtime/workflow/lib/transactionPlanner.d.ts +62 -0
- package/dist-runtime/workflow/lib/transactionPlanner.js +258 -0
- package/dist-runtime/workflow/lib/transactionPlanner.js.map +1 -0
- package/dist-runtime/workflow/lib/typedValue.d.ts +3 -0
- package/dist-runtime/workflow/lib/typedValue.js +76 -0
- package/dist-runtime/workflow/lib/typedValue.js.map +1 -0
- package/dist-runtime/workflow/lib/validation.d.ts +23 -0
- package/dist-runtime/workflow/lib/validation.js +15 -0
- package/dist-runtime/workflow/lib/validation.js.map +1 -0
- package/dist-runtime/workflow/planAdd.d.ts +1 -0
- package/dist-runtime/workflow/planAdd.js +11 -0
- package/dist-runtime/workflow/planAdd.js.map +1 -0
- package/dist-runtime/workflow/planRead.d.ts +1 -0
- package/dist-runtime/workflow/planRead.js +11 -0
- package/dist-runtime/workflow/planRead.js.map +1 -0
- package/dist-runtime/workflow/planStatus.d.ts +1 -0
- package/dist-runtime/workflow/planStatus.js +11 -0
- package/dist-runtime/workflow/planStatus.js.map +1 -0
- package/dist-runtime/workflow/planWrite.d.ts +1 -0
- package/dist-runtime/workflow/planWrite.js +11 -0
- package/dist-runtime/workflow/planWrite.js.map +1 -0
- package/dist-runtime/workflow/run.d.ts +1 -40
- package/dist-runtime/workflow/run.js +68 -136
- package/dist-runtime/workflow/run.js.map +1 -1
- package/dist-runtime/workflow/staticValidate.js +8 -3
- package/dist-runtime/workflow/staticValidate.js.map +1 -1
- package/dist-runtime/workflow/steps/call.d.ts +1 -1
- package/dist-runtime/workflow/steps/check.d.ts +1 -1
- package/dist-runtime/workflow/steps/custom.d.ts +1 -1
- package/dist-runtime/workflow/steps/deploy.d.ts +1 -1
- package/dist-runtime/workflow/steps/deploy.js +58 -55
- package/dist-runtime/workflow/steps/deploy.js.map +1 -1
- package/dist-runtime/workflow/steps/upgrade.d.ts +1 -1
- package/dist-runtime/workflow/steps/upgrade.js +63 -41
- package/dist-runtime/workflow/steps/upgrade.js.map +1 -1
- package/dist-runtime/workflow/steps/view.d.ts +1 -1
- package/docs/compiler-qualification.md +32 -0
- package/docs/configuration-runtime-observation.md +29 -0
- package/docs/create2-miner.md +100 -0
- package/docs/delivery-aggregate.md +27 -0
- package/docs/delivery-custom-input-closure.md +51 -0
- package/docs/delivery-development.md +32 -0
- package/docs/delivery-eoa.md +46 -0
- package/docs/delivery-evm-manifest.md +20 -0
- package/docs/delivery-execution-store.md +33 -0
- package/docs/delivery-inputs.md +46 -0
- package/docs/delivery-parameters.md +65 -0
- package/docs/delivery-planning.md +140 -0
- package/docs/delivery-release.md +65 -0
- package/docs/delivery-safe.md +72 -0
- package/docs/delivery-setup.md +146 -0
- package/docs/delivery-source.md +67 -0
- 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/superpowers/plans/2026-09-24-scheme-aware-static-validation.md +193 -0
- package/docs/superpowers/plans/2026-10-28-create2-miner.md +82 -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 +134 -9
- package/resources/create2/LICENSE +21 -0
- package/resources/create2/README.md +9 -0
- package/resources/create2/darwin-arm64/smartflow_miner +0 -0
- package/resources/create2/darwin-x64/smartflow_miner +0 -0
- package/resources/create2/manifest.json +27 -0
- package/runtime/config/hardhatAdapters.ts +8 -0
- package/runtime/config/networks.ts +20 -11
- package/runtime/config/openzeppelin.ts +3 -21
- package/runtime/delivery/abi.ts +225 -0
- package/runtime/delivery/aggregate-bootstrap.ts +29 -0
- package/runtime/delivery/aggregate-channel.ts +85 -0
- package/runtime/delivery/aggregate-inputs.ts +39 -0
- package/runtime/delivery/aggregate-source.ts +53 -0
- package/runtime/delivery/aggregate-worker.ts +133 -0
- package/runtime/delivery/aggregate.ts +139 -0
- package/runtime/delivery/bindings.ts +37 -0
- package/runtime/delivery/check-code.ts +38 -0
- package/runtime/delivery/closure-format.ts +350 -0
- package/runtime/delivery/codec-pin.ts +3 -0
- package/runtime/delivery/codec.ts +50 -0
- package/runtime/delivery/compiler-dependency-pins.ts +1685 -0
- package/runtime/delivery/compiler-files.ts +179 -0
- package/runtime/delivery/compiler-io.ts +10 -0
- package/runtime/delivery/compiler-pins.ts +143 -0
- package/runtime/delivery/compiler.ts +700 -0
- package/runtime/delivery/config.ts +93 -0
- package/runtime/delivery/configuration-definition.ts +133 -0
- package/runtime/delivery/configuration-hre.ts +130 -0
- package/runtime/delivery/configuration-runtime.ts +163 -0
- package/runtime/delivery/configuration.ts +64 -0
- package/runtime/delivery/create2.ts +57 -0
- package/runtime/delivery/custom-closure.ts +993 -0
- package/runtime/delivery/custom-format.ts +464 -0
- package/runtime/delivery/custom.ts +219 -0
- package/runtime/delivery/data.ts +94 -0
- package/runtime/delivery/development.ts +262 -0
- package/runtime/delivery/engine.ts +29 -0
- package/runtime/delivery/eoa-observation.ts +106 -0
- package/runtime/delivery/eoa-signed.ts +55 -0
- package/runtime/delivery/eoa.ts +288 -0
- package/runtime/delivery/execution-db.ts +131 -0
- package/runtime/delivery/execution-files.ts +135 -0
- package/runtime/delivery/execution-model.ts +102 -0
- package/runtime/delivery/execution-store.ts +411 -0
- package/runtime/delivery/existing-code.ts +44 -0
- package/runtime/delivery/export.ts +99 -0
- package/runtime/delivery/forkAudit.ts +620 -0
- package/runtime/delivery/hardhat.ts +38 -0
- package/runtime/delivery/history-registration.ts +10 -0
- package/runtime/delivery/identities.ts +132 -0
- package/runtime/delivery/input-files.ts +46 -0
- package/runtime/delivery/inputs.ts +197 -0
- package/runtime/delivery/journal.ts +201 -0
- package/runtime/delivery/manifest.ts +54 -0
- package/runtime/delivery/materialization.ts +53 -0
- package/runtime/delivery/observations.ts +60 -0
- package/runtime/delivery/parameters.ts +349 -0
- package/runtime/delivery/pending.ts +98 -0
- package/runtime/delivery/plan.ts +337 -0
- package/runtime/delivery/planning.ts +397 -0
- package/runtime/delivery/policy.ts +9 -0
- package/runtime/delivery/preparation.ts +224 -0
- package/runtime/delivery/production-environment.ts +6 -0
- package/runtime/delivery/production-finalization.ts +172 -0
- package/runtime/delivery/production.ts +375 -0
- package/runtime/delivery/project-files.ts +58 -0
- package/runtime/delivery/project.ts +117 -0
- package/runtime/delivery/protocol.ts +94 -0
- package/runtime/delivery/references.ts +106 -0
- package/runtime/delivery/release-graph.ts +49 -0
- package/runtime/delivery/release-history-capture.ts +32 -0
- package/runtime/delivery/release-history.ts +120 -0
- package/runtime/delivery/release.ts +128 -0
- package/runtime/delivery/safe-manifest.ts +11 -0
- package/runtime/delivery/safe-observation.ts +626 -0
- package/runtime/delivery/safe-prepare.ts +101 -0
- package/runtime/delivery/safe.ts +344 -0
- package/runtime/delivery/same-fork-baseline.ts +16 -0
- package/runtime/delivery/setup.ts +172 -0
- package/runtime/delivery/source.ts +130 -0
- package/runtime/delivery/target-fields.ts +7 -0
- package/runtime/delivery/validation.ts +247 -0
- package/runtime/delivery/verification.ts +47 -0
- package/runtime/migrate.ts +1 -0
- package/runtime/miner/binary.ts +41 -0
- package/runtime/miner/cli.ts +87 -0
- package/runtime/miner/index.ts +5 -0
- package/runtime/miner/request.ts +54 -0
- package/runtime/miner/runner.ts +90 -0
- package/runtime/miner/types.ts +71 -0
- package/runtime/miner/verify.ts +61 -0
- package/runtime/vendor/plan-codec/index.cjs +820 -0
- package/runtime/vendor/plan-codec/index.d.cts +32 -0
- package/runtime/vendor/plan-codec/provenance.json +24 -0
- package/runtime/workflow/engine.ts +174 -0
- package/runtime/workflow/lib/authority.ts +3 -3
- package/runtime/workflow/lib/calls.ts +46 -37
- package/runtime/workflow/lib/canonicalData.ts +45 -0
- package/runtime/workflow/lib/config.ts +1 -1
- package/runtime/workflow/lib/context.ts +76 -0
- package/runtime/workflow/lib/controlledMulticallAbi.ts +6 -0
- package/runtime/workflow/lib/create2.ts +10 -12
- package/runtime/workflow/lib/deployments.ts +6 -14
- package/runtime/workflow/lib/evidencePorts.ts +20 -0
- package/runtime/workflow/lib/executionPlan.ts +17 -268
- package/runtime/workflow/lib/gateTool.ts +20 -8
- package/runtime/workflow/lib/gateToolSync.ts +3 -3
- package/runtime/workflow/lib/operationNames.ts +32 -0
- package/runtime/workflow/lib/parameters.ts +7 -23
- package/runtime/workflow/lib/pendingDeploymentReuse.ts +4 -56
- package/runtime/workflow/lib/pendingUupsBinding.ts +43 -0
- package/runtime/workflow/lib/plan.ts +334 -0
- package/runtime/workflow/lib/planCli.ts +279 -0
- package/runtime/workflow/lib/preparationEvidence.ts +14 -0
- package/runtime/workflow/lib/proxy.ts +5 -3
- package/runtime/workflow/lib/runtime.ts +46 -0
- package/runtime/workflow/lib/signer.ts +8 -5
- package/runtime/workflow/lib/simulation.ts +41 -17
- package/runtime/workflow/lib/state.ts +3 -3
- package/runtime/workflow/lib/staticValidation.ts +92 -11
- package/runtime/workflow/lib/transactionPlanner.ts +314 -0
- package/runtime/workflow/lib/typedValue.ts +46 -0
- package/runtime/workflow/lib/validation.ts +50 -0
- package/runtime/workflow/planAdd.ts +8 -0
- package/runtime/workflow/planRead.ts +8 -0
- package/runtime/workflow/planStatus.ts +8 -0
- package/runtime/workflow/planWrite.ts +8 -0
- package/runtime/workflow/run.ts +41 -174
- package/runtime/workflow/staticValidate.ts +8 -3
- package/runtime/workflow/steps/call.ts +1 -1
- package/runtime/workflow/steps/check.ts +1 -1
- package/runtime/workflow/steps/custom.ts +1 -1
- package/runtime/workflow/steps/deploy.ts +59 -59
- package/runtime/workflow/steps/upgrade.ts +71 -47
- package/runtime/workflow/steps/view.ts +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import path from "path";
|
|
3
3
|
import { isAddress } from "ethers";
|
|
4
|
-
import type {
|
|
4
|
+
import type { WorkflowConfiguration } from "./context";
|
|
5
5
|
import { readJsonFile, writeJsonFile } from "./config";
|
|
6
6
|
|
|
7
7
|
export type ContractInfo = Record<string, Record<string, string>>;
|
|
@@ -177,16 +177,8 @@ export const actualContractName = (contractName: string): string => {
|
|
|
177
177
|
return actual;
|
|
178
178
|
};
|
|
179
179
|
|
|
180
|
-
export
|
|
181
|
-
|
|
182
|
-
if (!normalizedInstanceId) {
|
|
183
|
-
throw new Error("Deployment saveAs must not be empty");
|
|
184
|
-
}
|
|
185
|
-
if (normalizedInstanceId.includes(":")) {
|
|
186
|
-
throw new Error(`Deployment saveAs "${normalizedInstanceId}" must not contain ":"`);
|
|
187
|
-
}
|
|
188
|
-
return normalizedInstanceId;
|
|
189
|
-
};
|
|
180
|
+
export { deploymentInstanceId } from "./operationNames";
|
|
181
|
+
import { deploymentInstanceId } from "./operationNames";
|
|
190
182
|
|
|
191
183
|
export const contractInfoKey = (instanceId: string, contractName: string): string => {
|
|
192
184
|
const normalizedInstanceId = deploymentInstanceId(instanceId);
|
|
@@ -196,7 +188,7 @@ export const contractInfoKey = (instanceId: string, contractName: string): strin
|
|
|
196
188
|
: `${normalizedInstanceId}:${actual}`;
|
|
197
189
|
};
|
|
198
190
|
|
|
199
|
-
export const loadContractInfo = (root: string, _config:
|
|
191
|
+
export const loadContractInfo = (root: string, _config: WorkflowConfiguration): ContractInfo => {
|
|
200
192
|
const filePath = contractInfoPath(root);
|
|
201
193
|
if (!fs.existsSync(filePath)) return {};
|
|
202
194
|
return validateContractInfo(readJsonFile<unknown>(filePath));
|
|
@@ -255,7 +247,7 @@ export const resolveDeployment = (
|
|
|
255
247
|
|
|
256
248
|
export const findDeploymentAddress = (
|
|
257
249
|
root: string,
|
|
258
|
-
config:
|
|
250
|
+
config: WorkflowConfiguration,
|
|
259
251
|
targetId: string,
|
|
260
252
|
name: string,
|
|
261
253
|
): string | undefined => {
|
|
@@ -264,7 +256,7 @@ export const findDeploymentAddress = (
|
|
|
264
256
|
|
|
265
257
|
export const getDeploymentAddress = (
|
|
266
258
|
root: string,
|
|
267
|
-
config:
|
|
259
|
+
config: WorkflowConfiguration,
|
|
268
260
|
targetId: string,
|
|
269
261
|
name: string,
|
|
270
262
|
): string => {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { GateToolPreparationRequestV1 } from 'gate-evm-tools/workflow';
|
|
2
|
+
import type { DeploymentChange } from './deploymentRecords';
|
|
3
|
+
import type { PreparedGateToolWorkflow } from './gateTool';
|
|
4
|
+
export interface PreparationMapping { transactionId: string; gateToolTransactionIds: string[]; kind: 'multicall' | 'direct' }
|
|
5
|
+
export interface PreparationInput { stepId: string; change: DeploymentChange; prepared: PreparedGateToolWorkflow; derivedKeys: string[] }
|
|
6
|
+
export interface PreparationSink {
|
|
7
|
+
expected(stepId: string, request: GateToolPreparationRequestV1): PreparedGateToolWorkflow | undefined;
|
|
8
|
+
prepare(input: PreparationInput): void;
|
|
9
|
+
bind(stepId: string, mapping: PreparationMapping): void;
|
|
10
|
+
/** No same-fork upgrade until a complete validated OZ baseline is available. */
|
|
11
|
+
assertUpgradeBaseline(proxy: string): boolean | void;
|
|
12
|
+
}
|
|
13
|
+
export type TypedValue = { type: 'null'; value: null } | { type: 'string' | 'bigint' | 'number' | 'boolean'; value: string | boolean } | { type: 'array'; value: TypedValue[] } | { type: 'object'; value: Record<string, TypedValue> };
|
|
14
|
+
export interface VerificationObservation {
|
|
15
|
+
stepId: string; callIndex: number; assertionId: string; contract: string; abiName: string;
|
|
16
|
+
abi: string[]; address: string; method: string; args: TypedValue;
|
|
17
|
+
definition: { method: string; args: TypedValue; expect: TypedValue };
|
|
18
|
+
actual: TypedValue; expected: TypedValue;
|
|
19
|
+
}
|
|
20
|
+
export interface VerificationSink { record(input: VerificationObservation): void }
|
|
@@ -1,24 +1,12 @@
|
|
|
1
|
+
import { TransactionPlanner, normalizeTransaction } from "./transactionPlanner";
|
|
2
|
+
import type { ReleaseExecutionTransaction, ReleaseExecutionTransactionInput, PlannedExecutionTransaction, CompletedExecutionTransaction } from "./transactionPlanner";
|
|
3
|
+
export { ExecutionSegmentDeferred } from "./transactionPlanner";
|
|
4
|
+
export type { ExecutionRoute, ReleaseExecutionTransaction, ReleaseExecutionTransactionInput, PlannedExecutionTransaction, CompletedExecutionTransaction } from "./transactionPlanner";
|
|
1
5
|
import crypto from "crypto";
|
|
2
6
|
import fs from "fs";
|
|
3
7
|
import path from "path";
|
|
4
8
|
|
|
5
9
|
export type ReleaseKind = "development" | "admin_release";
|
|
6
|
-
export type ExecutionRoute = "operator" | "external";
|
|
7
|
-
|
|
8
|
-
export interface ReleaseExecutionTransaction {
|
|
9
|
-
transactionId: string;
|
|
10
|
-
stepId: string;
|
|
11
|
-
transactionIndex: number;
|
|
12
|
-
route: ExecutionRoute;
|
|
13
|
-
executor: string;
|
|
14
|
-
to: string;
|
|
15
|
-
value: string;
|
|
16
|
-
data: string;
|
|
17
|
-
operation: 0 | 1;
|
|
18
|
-
scheme?: "zksync-eravm";
|
|
19
|
-
factoryDeps?: string[];
|
|
20
|
-
}
|
|
21
|
-
|
|
22
10
|
export interface ReleaseExecutionPlan {
|
|
23
11
|
version: 1;
|
|
24
12
|
taskId: string;
|
|
@@ -33,34 +21,6 @@ export interface ReleaseExecutionPlan {
|
|
|
33
21
|
|
|
34
22
|
type PlanBody = Omit<ReleaseExecutionPlan, "planHash" | "createdAt">;
|
|
35
23
|
|
|
36
|
-
export interface ReleaseExecutionTransactionInput {
|
|
37
|
-
stepId: string;
|
|
38
|
-
executor: string;
|
|
39
|
-
to: string;
|
|
40
|
-
value: string;
|
|
41
|
-
data: string;
|
|
42
|
-
operation: 0 | 1;
|
|
43
|
-
scheme?: "zksync-eravm";
|
|
44
|
-
factoryDeps?: string[];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export interface CompletedExecutionTransaction {
|
|
48
|
-
transactionId: string;
|
|
49
|
-
transactionHash: string;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export interface PlannedExecutionTransaction extends ReleaseExecutionTransaction {
|
|
53
|
-
executionAction: "execute" | "package" | "replay";
|
|
54
|
-
transactionHash?: string;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export class ExecutionSegmentDeferred extends Error {
|
|
58
|
-
constructor(readonly transactionId: string) {
|
|
59
|
-
super(`Execution is waiting for the preceding external segment before ${transactionId}`);
|
|
60
|
-
this.name = "ExecutionSegmentDeferred";
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
24
|
const SAFE_ID = /^[A-Za-z0-9][A-Za-z0-9_-]{0,199}$/;
|
|
65
25
|
const ADDRESS = /^0x[0-9a-fA-F]{40}$/;
|
|
66
26
|
const DATA = /^0x(?:[0-9a-fA-F]{2})*$/;
|
|
@@ -83,40 +43,6 @@ const address = (value: unknown, label: string): string => {
|
|
|
83
43
|
return value.toLowerCase();
|
|
84
44
|
};
|
|
85
45
|
|
|
86
|
-
const value = (raw: unknown, label: string): string => {
|
|
87
|
-
if (typeof raw !== "string" || !/^(?:0[xX][0-9a-fA-F]+|[0-9]+)$/.test(raw)) {
|
|
88
|
-
throw new Error(`${label} must be a nonnegative integer string`);
|
|
89
|
-
}
|
|
90
|
-
return BigInt(raw).toString(10);
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
const data = (raw: unknown, label: string): string => {
|
|
94
|
-
if (typeof raw !== "string" || !DATA.test(raw)) {
|
|
95
|
-
throw new Error(`${label} must be canonical byte calldata`);
|
|
96
|
-
}
|
|
97
|
-
return raw.toLowerCase();
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
const factoryDeps = (raw: unknown, label: string): string[] => {
|
|
101
|
-
if (!Array.isArray(raw)) throw new Error(`${label} must be an array`);
|
|
102
|
-
const seen = new Set<string>();
|
|
103
|
-
const normalized: string[] = [];
|
|
104
|
-
for (const [index, dependency] of raw.entries()) {
|
|
105
|
-
if (typeof dependency !== "string" || !/^0x(?:[0-9a-fA-F]{2})+$/.test(dependency)) {
|
|
106
|
-
throw new Error(`${label}[${index}] must be non-empty byte-aligned bytecode`);
|
|
107
|
-
}
|
|
108
|
-
const value = dependency.toLowerCase();
|
|
109
|
-
const hash = crypto
|
|
110
|
-
.createHash("sha256")
|
|
111
|
-
.update(Buffer.from(value.slice(2), "hex"))
|
|
112
|
-
.digest("hex");
|
|
113
|
-
if (seen.has(hash)) continue;
|
|
114
|
-
seen.add(hash);
|
|
115
|
-
normalized.push(value);
|
|
116
|
-
}
|
|
117
|
-
return normalized;
|
|
118
|
-
};
|
|
119
|
-
|
|
120
46
|
const exactKeys = (value: Record<string, unknown>, expected: string[], label: string): void => {
|
|
121
47
|
const actual = Object.keys(value).sort();
|
|
122
48
|
const wanted = [...expected].sort();
|
|
@@ -132,62 +58,6 @@ const record = (raw: unknown, label: string): Record<string, unknown> => {
|
|
|
132
58
|
return raw as Record<string, unknown>;
|
|
133
59
|
};
|
|
134
60
|
|
|
135
|
-
const normalizeTransaction = (
|
|
136
|
-
raw: unknown,
|
|
137
|
-
index: number,
|
|
138
|
-
strict: boolean,
|
|
139
|
-
): ReleaseExecutionTransaction => {
|
|
140
|
-
const input = record(raw, `transactions[${index}]`);
|
|
141
|
-
const isZkSync = input.scheme === "zksync-eravm";
|
|
142
|
-
if (input.scheme !== undefined && !isZkSync) {
|
|
143
|
-
throw new Error(`transactions[${index}].scheme must be zksync-eravm when present`);
|
|
144
|
-
}
|
|
145
|
-
if (isZkSync && input.factoryDeps === undefined) {
|
|
146
|
-
throw new Error(`transactions[${index}].factoryDeps is required for zkSync`);
|
|
147
|
-
}
|
|
148
|
-
if (!isZkSync && input.factoryDeps !== undefined) {
|
|
149
|
-
throw new Error(`transactions[${index}].factoryDeps is only supported for zkSync`);
|
|
150
|
-
}
|
|
151
|
-
if (strict) {
|
|
152
|
-
exactKeys(input, [
|
|
153
|
-
"transactionId",
|
|
154
|
-
"stepId",
|
|
155
|
-
"transactionIndex",
|
|
156
|
-
"route",
|
|
157
|
-
"executor",
|
|
158
|
-
"to",
|
|
159
|
-
"value",
|
|
160
|
-
"data",
|
|
161
|
-
"operation",
|
|
162
|
-
...(isZkSync ? ["scheme", "factoryDeps"] : []),
|
|
163
|
-
], `transactions[${index}]`);
|
|
164
|
-
}
|
|
165
|
-
if (input.transactionIndex !== index) {
|
|
166
|
-
throw new Error(`transactions[${index}].transactionIndex must equal ${index}`);
|
|
167
|
-
}
|
|
168
|
-
if (input.route !== "operator" && input.route !== "external") {
|
|
169
|
-
throw new Error(`transactions[${index}].route is invalid`);
|
|
170
|
-
}
|
|
171
|
-
if (input.operation !== 0 && input.operation !== 1) {
|
|
172
|
-
throw new Error(`transactions[${index}].operation must be 0 or 1`);
|
|
173
|
-
}
|
|
174
|
-
return {
|
|
175
|
-
transactionId: safeId(input.transactionId, `transactions[${index}].transactionId`),
|
|
176
|
-
stepId: safeId(input.stepId, `transactions[${index}].stepId`),
|
|
177
|
-
transactionIndex: index,
|
|
178
|
-
route: input.route,
|
|
179
|
-
executor: address(input.executor, `transactions[${index}].executor`),
|
|
180
|
-
to: address(input.to, `transactions[${index}].to`),
|
|
181
|
-
value: value(input.value, `transactions[${index}].value`),
|
|
182
|
-
data: data(input.data, `transactions[${index}].data`),
|
|
183
|
-
operation: input.operation,
|
|
184
|
-
...(isZkSync ? {
|
|
185
|
-
scheme: "zksync-eravm" as const,
|
|
186
|
-
factoryDeps: factoryDeps(input.factoryDeps, `transactions[${index}].factoryDeps`),
|
|
187
|
-
} : {}),
|
|
188
|
-
};
|
|
189
|
-
};
|
|
190
|
-
|
|
191
61
|
const normalizeBody = (raw: unknown, strict: boolean): PlanBody => {
|
|
192
62
|
const input = record(raw, "execution plan");
|
|
193
63
|
if (strict) {
|
|
@@ -306,148 +176,27 @@ const writeExclusive = (filePath: string, value: unknown): void => {
|
|
|
306
176
|
|
|
307
177
|
export class ReleaseExecutionPlanner {
|
|
308
178
|
private readonly body: Omit<PlanBody, "transactions">;
|
|
309
|
-
private readonly
|
|
310
|
-
private readonly transactions: ReleaseExecutionTransaction[] = [];
|
|
311
|
-
private readonly segmentedExecution: boolean;
|
|
312
|
-
private readonly completedTransactions: CompletedExecutionTransaction[];
|
|
313
|
-
private readonly segmentEnd: number;
|
|
314
|
-
|
|
179
|
+
private readonly kernel: TransactionPlanner;
|
|
315
180
|
constructor(input: {
|
|
316
|
-
taskId: string;
|
|
317
|
-
|
|
318
|
-
executionId: string;
|
|
319
|
-
releaseKind: ReleaseKind;
|
|
320
|
-
operator: string;
|
|
321
|
-
expectedPlan?: ReleaseExecutionPlan;
|
|
322
|
-
segmentedExecution?: boolean;
|
|
181
|
+
taskId: string; target: string; executionId: string; releaseKind: ReleaseKind;
|
|
182
|
+
operator: string; expectedPlan?: ReleaseExecutionPlan; segmentedExecution?: boolean;
|
|
323
183
|
completedTransactions?: CompletedExecutionTransaction[];
|
|
324
184
|
}) {
|
|
325
|
-
const body = normalizeBody({
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
executionId: input.executionId,
|
|
330
|
-
releaseKind: input.releaseKind,
|
|
331
|
-
operator: input.operator,
|
|
332
|
-
transactions: [],
|
|
333
|
-
}, false);
|
|
334
|
-
this.body = {
|
|
335
|
-
version: 1,
|
|
336
|
-
taskId: body.taskId,
|
|
337
|
-
target: body.target,
|
|
338
|
-
executionId: body.executionId,
|
|
339
|
-
releaseKind: body.releaseKind,
|
|
340
|
-
operator: body.operator,
|
|
341
|
-
};
|
|
342
|
-
if (input.expectedPlan) {
|
|
343
|
-
const expected = normalizeBody(input.expectedPlan, false);
|
|
185
|
+
const { transactions: _, ...body } = normalizeBody({ version: 1, ...input, transactions: [] }, false);
|
|
186
|
+
this.body = body;
|
|
187
|
+
const expected = input.expectedPlan ? normalizeBody(input.expectedPlan, false) : undefined;
|
|
188
|
+
if (expected) {
|
|
344
189
|
for (const key of ["taskId", "target", "executionId", "releaseKind", "operator"] as const) {
|
|
345
|
-
if (expected[key] !==
|
|
346
|
-
throw new Error(`locked execution plan ${key} does not match the runtime`);
|
|
347
|
-
}
|
|
190
|
+
if (expected[key] !== body[key]) throw new Error(`locked execution plan ${key} does not match the runtime`);
|
|
348
191
|
}
|
|
349
|
-
this.expected = expected;
|
|
350
192
|
}
|
|
351
|
-
this.
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
throw new Error("segmented execution requires a locked execution plan");
|
|
355
|
-
}
|
|
356
|
-
if (!this.segmentedExecution && this.completedTransactions.length > 0) {
|
|
357
|
-
throw new Error("completed transactions require segmented execution");
|
|
358
|
-
}
|
|
359
|
-
if (this.expected) {
|
|
360
|
-
if (this.completedTransactions.length > this.expected.transactions.length) {
|
|
361
|
-
throw new Error("completed transactions exceed the execution plan");
|
|
362
|
-
}
|
|
363
|
-
for (const [index, completed] of this.completedTransactions.entries()) {
|
|
364
|
-
if (
|
|
365
|
-
completed.transactionId !== this.expected.transactions[index]?.transactionId
|
|
366
|
-
|| typeof completed.transactionHash !== "string"
|
|
367
|
-
|| !/^0x[0-9a-fA-F]{64}$/.test(completed.transactionHash)
|
|
368
|
-
) {
|
|
369
|
-
throw new Error("completed transactions must form a contiguous plan prefix");
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
const expectedTransactions = this.expected?.transactions ?? [];
|
|
374
|
-
let segmentEnd = this.completedTransactions.length;
|
|
375
|
-
if (this.segmentedExecution && segmentEnd < expectedTransactions.length) {
|
|
376
|
-
if (expectedTransactions[segmentEnd].route === "operator") {
|
|
377
|
-
while (
|
|
378
|
-
segmentEnd < expectedTransactions.length
|
|
379
|
-
&& expectedTransactions[segmentEnd].route === "operator"
|
|
380
|
-
) segmentEnd += 1;
|
|
381
|
-
}
|
|
382
|
-
while (
|
|
383
|
-
segmentEnd < expectedTransactions.length
|
|
384
|
-
&& expectedTransactions[segmentEnd].route === "external"
|
|
385
|
-
) segmentEnd += 1;
|
|
386
|
-
} else if (!this.segmentedExecution) {
|
|
387
|
-
segmentEnd = Number.MAX_SAFE_INTEGER;
|
|
388
|
-
}
|
|
389
|
-
this.segmentEnd = segmentEnd;
|
|
193
|
+
this.kernel = new TransactionPlanner({ operator: body.operator, allowExternal: body.releaseKind !== "development",
|
|
194
|
+
expectedTransactions: expected?.transactions, segmentedExecution: input.segmentedExecution,
|
|
195
|
+
completedTransactions: input.completedTransactions });
|
|
390
196
|
}
|
|
391
|
-
|
|
392
|
-
add(input: ReleaseExecutionTransactionInput): PlannedExecutionTransaction {
|
|
393
|
-
const index = this.transactions.length;
|
|
394
|
-
const stepId = safeId(input.stepId, "planned transaction stepId");
|
|
395
|
-
const executor = address(input.executor, "planned transaction executor");
|
|
396
|
-
const transaction = normalizeTransaction({
|
|
397
|
-
transactionId: `tx-${String(index + 1).padStart(4, "0")}-${stepId}`,
|
|
398
|
-
stepId,
|
|
399
|
-
transactionIndex: index,
|
|
400
|
-
route: executor === this.body.operator ? "operator" : "external",
|
|
401
|
-
executor,
|
|
402
|
-
to: input.to,
|
|
403
|
-
value: input.value,
|
|
404
|
-
data: input.data,
|
|
405
|
-
operation: input.operation,
|
|
406
|
-
...(input.scheme === undefined ? {} : { scheme: input.scheme }),
|
|
407
|
-
...(input.factoryDeps === undefined ? {} : { factoryDeps: input.factoryDeps }),
|
|
408
|
-
}, index, false);
|
|
409
|
-
if (this.body.releaseKind === "development" && transaction.route === "external") {
|
|
410
|
-
throw new Error("development execution plans cannot contain external transactions");
|
|
411
|
-
}
|
|
412
|
-
const expected = this.expected?.transactions[index];
|
|
413
|
-
if (this.expected && (!expected || JSON.stringify(expected) !== JSON.stringify(transaction))) {
|
|
414
|
-
throw new Error(
|
|
415
|
-
`transaction ${transaction.transactionId} does not match locked execution plan`,
|
|
416
|
-
);
|
|
417
|
-
}
|
|
418
|
-
if (this.segmentedExecution && index >= this.segmentEnd) {
|
|
419
|
-
throw new ExecutionSegmentDeferred(transaction.transactionId);
|
|
420
|
-
}
|
|
421
|
-
this.transactions.push(transaction);
|
|
422
|
-
const completed = this.completedTransactions[index];
|
|
423
|
-
if (completed) {
|
|
424
|
-
return {
|
|
425
|
-
...transaction,
|
|
426
|
-
executionAction: "replay",
|
|
427
|
-
transactionHash: completed.transactionHash.toLowerCase(),
|
|
428
|
-
};
|
|
429
|
-
}
|
|
430
|
-
return {
|
|
431
|
-
...transaction,
|
|
432
|
-
executionAction: transaction.route === "external" ? "package" : "execute",
|
|
433
|
-
};
|
|
434
|
-
}
|
|
435
|
-
|
|
197
|
+
add(input: ReleaseExecutionTransactionInput): PlannedExecutionTransaction { return this.kernel.add(input); }
|
|
436
198
|
complete(options: { allowPartial?: boolean } = {}): PlanBody {
|
|
437
|
-
|
|
438
|
-
this.expected
|
|
439
|
-
&& this.transactions.length !== this.expected.transactions.length
|
|
440
|
-
&& options.allowPartial !== true
|
|
441
|
-
) {
|
|
442
|
-
throw new Error("execution did not consume every locked transaction");
|
|
443
|
-
}
|
|
444
|
-
if (options.allowPartial === true && !this.segmentedExecution) {
|
|
445
|
-
throw new Error("partial execution plan completion requires segmented execution");
|
|
446
|
-
}
|
|
447
|
-
return normalizeBody({
|
|
448
|
-
...this.body,
|
|
449
|
-
transactions: this.transactions,
|
|
450
|
-
}, false);
|
|
199
|
+
return normalizeBody({ ...this.body, transactions: this.kernel.complete(options) }, false);
|
|
451
200
|
}
|
|
452
201
|
}
|
|
453
202
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type { WorkflowValidationPort } from './validation';
|
|
1
2
|
import fs from "fs";
|
|
2
3
|
import path from "path";
|
|
3
|
-
import hardhat from "../../projectHardhat";
|
|
4
4
|
import {
|
|
5
5
|
canonicalPreparationJson,
|
|
6
6
|
hashPreparationRequest,
|
|
@@ -21,8 +21,10 @@ export interface PrepareGateToolWorkflowOptions {
|
|
|
21
21
|
evidenceDir: string;
|
|
22
22
|
evidenceName: string;
|
|
23
23
|
request: GateToolPreparationRequestV1;
|
|
24
|
-
hre
|
|
24
|
+
hre: GateToolPreparationHre;
|
|
25
25
|
readBlockTag?: number;
|
|
26
|
+
expected?: PreparedGateToolWorkflow;
|
|
27
|
+
validation?: WorkflowValidationPort;
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
export interface PreparedGateToolWorkflow {
|
|
@@ -149,7 +151,7 @@ const readRegularJson = (
|
|
|
149
151
|
}
|
|
150
152
|
};
|
|
151
153
|
|
|
152
|
-
const expectedTransactionPurposes = (
|
|
154
|
+
export const expectedTransactionPurposes = (
|
|
153
155
|
plan: GateToolPreparationPlanV1,
|
|
154
156
|
): GateToolTransactionPurpose[] => {
|
|
155
157
|
const requiredRoles = new Set(
|
|
@@ -185,8 +187,9 @@ const assertPlanMatchesRequest = async (
|
|
|
185
187
|
hre: GateToolPreparationHre,
|
|
186
188
|
request: GateToolPreparationRequestV1,
|
|
187
189
|
rawPlan: unknown,
|
|
190
|
+
validation?: WorkflowValidationPort,
|
|
188
191
|
): Promise<GateToolPreparationPlanV1> => {
|
|
189
|
-
const plan = normalizePreparationPlan(rawPlan);
|
|
192
|
+
const plan = normalizePreparationPlan(validation ? validation.preparation.data(rawPlan) : rawPlan);
|
|
190
193
|
const provider = (hre as GateToolPreparationHre & {
|
|
191
194
|
ethers?: { provider?: { getNetwork(): Promise<{ chainId: bigint | number | string }> } };
|
|
192
195
|
}).ethers?.provider;
|
|
@@ -214,20 +217,28 @@ const assertPlanMatchesRequest = async (
|
|
|
214
217
|
) {
|
|
215
218
|
throw new Error("GateTool plan transaction order does not match its deployment evidence");
|
|
216
219
|
}
|
|
220
|
+
await validation?.preparationPlan(request, plan);
|
|
217
221
|
return plan;
|
|
218
222
|
};
|
|
219
223
|
|
|
220
224
|
export const prepareGateToolWorkflow = async (
|
|
221
225
|
options: PrepareGateToolWorkflowOptions,
|
|
222
226
|
): Promise<PreparedGateToolWorkflow> => {
|
|
227
|
+
if (!options.hre) throw new Error("GateTool requires an explicit Hardhat runtime");
|
|
223
228
|
if (!SAFE_FILE_ID.test(options.evidenceName)) {
|
|
224
229
|
throw new Error(`GateTool evidenceName must match ${SAFE_FILE_ID}`);
|
|
225
230
|
}
|
|
226
|
-
const request = normalizePreparationRequest(options.request);
|
|
231
|
+
const request = normalizePreparationRequest(options.validation ? options.validation.preparation.data(options.request) : options.request);
|
|
227
232
|
const runtime = pinGateToolReadBlockTag(
|
|
228
|
-
options.hre
|
|
233
|
+
options.hre,
|
|
229
234
|
options.readBlockTag,
|
|
230
235
|
);
|
|
236
|
+
if (options.expected) {
|
|
237
|
+
const expectedRequest = normalizePreparationRequest(options.validation ? options.validation.preparation.data(options.expected.request) : options.expected.request);
|
|
238
|
+
if (canonicalPreparationJson(expectedRequest) !== canonicalPreparationJson(request)) throw new Error("Expected GateTool request differs from replay");
|
|
239
|
+
const plan = await assertPlanMatchesRequest(runtime, request, options.expected.plan, options.validation);
|
|
240
|
+
return { ...options.expected, request, plan };
|
|
241
|
+
}
|
|
231
242
|
const evidenceDir = confinedPath(options.root, options.evidenceDir, "GateTool evidence directory");
|
|
232
243
|
const requestPath = path.join(evidenceDir, `${options.evidenceName}-request.json`);
|
|
233
244
|
const planPath = path.join(evidenceDir, `${options.evidenceName}-plan.json`);
|
|
@@ -248,13 +259,14 @@ export const prepareGateToolWorkflow = async (
|
|
|
248
259
|
runtime,
|
|
249
260
|
request,
|
|
250
261
|
readRegularJson(planPath, options.root, "GateTool plan evidence"),
|
|
262
|
+
options.validation,
|
|
251
263
|
);
|
|
252
264
|
return { request, requestPath, plan, planPath };
|
|
253
265
|
}
|
|
254
266
|
|
|
267
|
+
const prepared = await prepareWorkflow(runtime, request, options.validation?.preparation);
|
|
268
|
+
const plan = await assertPlanMatchesRequest(runtime, request, prepared, options.validation);
|
|
255
269
|
writeCanonicalJsonAtomic(requestPath, request, options.root);
|
|
256
|
-
const prepared = await prepareWorkflow(runtime, request);
|
|
257
|
-
const plan = await assertPlanMatchesRequest(runtime, request, prepared);
|
|
258
270
|
writePreparationPlanAtomic(planPath, plan, options.root);
|
|
259
271
|
|
|
260
272
|
return { request, requestPath, plan, planPath };
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import crypto from "crypto";
|
|
2
2
|
import fs from "fs";
|
|
3
3
|
import path from "path";
|
|
4
|
-
import hardhat from "../../projectHardhat";
|
|
5
4
|
import { syncWithHre } from "gate-evm-tools/sync";
|
|
6
5
|
import { writeJsonFile } from "./config";
|
|
7
6
|
|
|
@@ -25,7 +24,7 @@ export interface SyncGateToolUupsOptions {
|
|
|
25
24
|
contract: string;
|
|
26
25
|
constructorArgs: unknown[];
|
|
27
26
|
transactionHash: string;
|
|
28
|
-
hre
|
|
27
|
+
hre: GateToolSyncHre;
|
|
29
28
|
}
|
|
30
29
|
|
|
31
30
|
const SAFE_FILE_ID = /^[A-Za-z0-9][A-Za-z0-9_-]{0,199}$/;
|
|
@@ -254,6 +253,7 @@ const buildSyncEvidence = (
|
|
|
254
253
|
export const syncGateToolUups = async (
|
|
255
254
|
options: SyncGateToolUupsOptions,
|
|
256
255
|
): Promise<GateToolSyncEvidence> => {
|
|
256
|
+
if (!options.hre) throw new Error("GateTool requires an explicit Hardhat runtime");
|
|
257
257
|
if (!SAFE_FILE_ID.test(options.evidenceName)) {
|
|
258
258
|
throw new Error(`GateTool sync evidenceName must match ${SAFE_FILE_ID}`);
|
|
259
259
|
}
|
|
@@ -340,7 +340,7 @@ export const syncGateToolUups = async (
|
|
|
340
340
|
...(options.scheme === "evm"
|
|
341
341
|
? { skipTxHash: true }
|
|
342
342
|
: { transactionHash: options.transactionHash }),
|
|
343
|
-
}, options.hre
|
|
343
|
+
}, options.hre, options.root), "GateTool sync result");
|
|
344
344
|
const returnedProxy = typeof rawResult.proxyAddress === "string"
|
|
345
345
|
? rawResult.proxyAddress
|
|
346
346
|
: stringField(rawResult, "proxy");
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { WorkflowStep } from "./parameters";
|
|
2
|
+
export const validateDeploySaveAs = (steps: WorkflowStep[]): void => {
|
|
3
|
+
const seen = new Set<string>();
|
|
4
|
+
|
|
5
|
+
for (const step of steps) {
|
|
6
|
+
if (step.kind !== "deploy") continue;
|
|
7
|
+
|
|
8
|
+
const saveAs = typeof step.saveAs === "string" ? step.saveAs.trim() : "";
|
|
9
|
+
if (!saveAs) {
|
|
10
|
+
throw new Error(`Deploy step ${step.id} requires saveAs`);
|
|
11
|
+
}
|
|
12
|
+
if (saveAs.includes(":")) {
|
|
13
|
+
throw new Error(`Deploy step ${step.id} saveAs "${saveAs}" must not contain ":"`);
|
|
14
|
+
}
|
|
15
|
+
if (seen.has(saveAs)) {
|
|
16
|
+
throw new Error(`Duplicate deploy saveAs "${saveAs}"`);
|
|
17
|
+
}
|
|
18
|
+
seen.add(saveAs);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const deploymentInstanceId = (instanceId: string): string => {
|
|
23
|
+
const normalizedInstanceId = instanceId.trim();
|
|
24
|
+
if (!normalizedInstanceId) {
|
|
25
|
+
throw new Error("Deployment saveAs must not be empty");
|
|
26
|
+
}
|
|
27
|
+
if (normalizedInstanceId.includes(":")) {
|
|
28
|
+
throw new Error(`Deployment saveAs "${normalizedInstanceId}" must not contain ":"`);
|
|
29
|
+
}
|
|
30
|
+
return normalizedInstanceId;
|
|
31
|
+
};
|
|
32
|
+
|
|
@@ -77,25 +77,8 @@ export const validateWorkflowStepIds = (steps: WorkflowStep[]): void => {
|
|
|
77
77
|
}
|
|
78
78
|
};
|
|
79
79
|
|
|
80
|
-
export
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
for (const step of steps) {
|
|
84
|
-
if (step.kind !== "deploy") continue;
|
|
85
|
-
|
|
86
|
-
const saveAs = typeof step.saveAs === "string" ? step.saveAs.trim() : "";
|
|
87
|
-
if (!saveAs) {
|
|
88
|
-
throw new Error(`Deploy step ${step.id} requires saveAs`);
|
|
89
|
-
}
|
|
90
|
-
if (saveAs.includes(":")) {
|
|
91
|
-
throw new Error(`Deploy step ${step.id} saveAs "${saveAs}" must not contain ":"`);
|
|
92
|
-
}
|
|
93
|
-
if (seen.has(saveAs)) {
|
|
94
|
-
throw new Error(`Duplicate deploy saveAs "${saveAs}"`);
|
|
95
|
-
}
|
|
96
|
-
seen.add(saveAs);
|
|
97
|
-
}
|
|
98
|
-
};
|
|
80
|
+
export { validateDeploySaveAs } from "./operationNames";
|
|
81
|
+
import { validateDeploySaveAs } from "./operationNames";
|
|
99
82
|
|
|
100
83
|
export const validateWorkflowStepKinds = (steps: WorkflowStep[]): void => {
|
|
101
84
|
for (const step of steps) {
|
|
@@ -266,9 +249,10 @@ export const validateDeployCreate2Strategy = (steps: WorkflowStep[]): void => {
|
|
|
266
249
|
if (step.upgradeableStrategy !== "uups-placeholder-proxy") {
|
|
267
250
|
throw new Error(`Deploy step ${step.id} requires upgradeableStrategy: uups-placeholder-proxy`);
|
|
268
251
|
}
|
|
269
|
-
if (String(step.contract) !== "contracts/workflow/UUPSPlaceholder.sol:UUPSPlaceholder"
|
|
252
|
+
if (String(step.contract) !== "contracts/workflow/UUPSPlaceholder.sol:UUPSPlaceholder"
|
|
253
|
+
&& step.contract !== asObject(step.firstUpgrade).contract) {
|
|
270
254
|
throw new Error(
|
|
271
|
-
`Deploy step ${step.id} must
|
|
255
|
+
`Deploy step ${step.id} must use the same business implementation in contract and firstUpgrade.contract`,
|
|
272
256
|
);
|
|
273
257
|
}
|
|
274
258
|
if (!asObject(step.firstUpgrade).contract) {
|
|
@@ -385,7 +369,7 @@ const readPath = (source: Record<string, unknown>, pathExpression: string): unkn
|
|
|
385
369
|
let current: unknown = source;
|
|
386
370
|
|
|
387
371
|
for (const part of parts) {
|
|
388
|
-
if (typeof current !== "object" || current === null || !(part
|
|
372
|
+
if (typeof current !== "object" || current === null || !Object.hasOwn(current, part)) {
|
|
389
373
|
throw new Error(`Reference not found: ${pathExpression}`);
|
|
390
374
|
}
|
|
391
375
|
current = (current as Record<string, unknown>)[part];
|
|
@@ -411,7 +395,7 @@ export const resolveValue = (value: unknown, context: ResolveContext): unknown =
|
|
|
411
395
|
|
|
412
396
|
if (typeof value === "object" && value !== null) {
|
|
413
397
|
const objectValue = value as Record<string, unknown>;
|
|
414
|
-
if (typeof objectValue.$ref === "string") {
|
|
398
|
+
if (Object.hasOwn(objectValue, "$ref") && typeof objectValue.$ref === "string") {
|
|
415
399
|
const ref = objectValue.$ref;
|
|
416
400
|
if (ref.startsWith("state.")) {
|
|
417
401
|
return context.state.get(ref.slice("state.".length));
|