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
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export const SCHEMA: 'gateflow-plan/v2'
|
|
2
|
+
export const SCHEMA_V1: 'gateflow-plan/v1'
|
|
3
|
+
export const SAFE_KEY: RegExp
|
|
4
|
+
export const SKILL_NAME: RegExp
|
|
5
|
+
export const TASK_STATUSES: readonly ['pending', 'running', 'blocked', 'completed', 'failed', 'cancelled']
|
|
6
|
+
export const FAILURE_CATEGORIES: readonly ['execution_error', 'acceptance_failed', 'review_rejected', 'input_missing']
|
|
7
|
+
export const DEFINITION_CONTRACT: 'gateflow-plan/definition@1'
|
|
8
|
+
export class PlanError extends Error { code: string; constructor(message: string, code?: string) }
|
|
9
|
+
export interface PlanTask {
|
|
10
|
+
no: number; planKey: string; rev: number; title: string; objective: string; acceptance: string[]; dependsOn: string[]
|
|
11
|
+
step?: string; scope?: Record<string, unknown>; parameters?: unknown[]; expectedArtifacts?: string[]; allowedChanges?: string[]
|
|
12
|
+
tools?: string[]; toolsOptional?: string[]; skills?: string[]; status: typeof TASK_STATUSES[number]; adoptedRev?: number
|
|
13
|
+
blockedReason?: string; cancelReason?: string; result?: Record<string, unknown>; previousResult?: Record<string, unknown>
|
|
14
|
+
}
|
|
15
|
+
export interface PlanLane { name: string; state: 'enabled' | 'disabled'; reason?: string; skill?: string; steps?: { id: string; name: string }[] }
|
|
16
|
+
export interface Plan {
|
|
17
|
+
schema: typeof SCHEMA; taskId: string; title: string; flow?: string; revision: number; progressSeq: number; updatedAt: string
|
|
18
|
+
lanes: Record<string, PlanLane>; goal: string; notes: Record<string, string>; tasks: Record<string, PlanTask[]>; history: Record<string, unknown>[]
|
|
19
|
+
}
|
|
20
|
+
export type DeepReadonly<T> = T extends object ? { readonly [P in keyof T]: DeepReadonly<T[P]> } : T
|
|
21
|
+
export interface DefinitionSelection { roots: string[]; mode: 'upstream' | 'full' }
|
|
22
|
+
export interface DefinitionSnapshot {
|
|
23
|
+
contract: typeof DEFINITION_CONTRACT; schema: typeof SCHEMA; taskId: string; flow?: string; roots: string[]
|
|
24
|
+
lanes: Record<string, { state: 'enabled' | 'disabled'; skill?: string; steps: string[] }>
|
|
25
|
+
tasks: (Pick<PlanTask, 'planKey' | 'rev' | 'objective' | 'acceptance' | 'dependsOn' | 'step' | 'scope' | 'parameters' | 'expectedArtifacts' | 'allowedChanges'> & { lane: string })[]
|
|
26
|
+
}
|
|
27
|
+
export function parsePlan(text: string): Plan
|
|
28
|
+
export function detectSchema(text: string): string | null
|
|
29
|
+
export function projectDefinitions(text: string, selection: DefinitionSelection): Readonly<{ snapshot: DeepReadonly<DefinitionSnapshot>; bytes: string }>
|
|
30
|
+
export function skillNames(value: unknown, where: string): string[]
|
|
31
|
+
export function toolRefs(value: unknown, where: string): string[]
|
|
32
|
+
export function validateEvmContracts(plan: { flow?: string; lanes: Record<string, { skill?: string }>; tasks: Record<string, { planKey: string; step?: string; scope?: Record<string, unknown> }[]> }, fail: (message: string) => never): void
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"formatVersion": 1,
|
|
3
|
+
"name": "gateflow-plan-read-only",
|
|
4
|
+
"version": 1,
|
|
5
|
+
"schema": "gateflow-plan/v2",
|
|
6
|
+
"definitionContract": "gateflow-plan/definition@1",
|
|
7
|
+
"sourceCommit": "9b175e7906ca6735aeca92b50ce7cf716d980f17",
|
|
8
|
+
"sources": {
|
|
9
|
+
"builtin-skills/gateflow-plan/scripts/lib/evm-contract.mjs": "f7498feb2baeeed5022ab4e88e87c2567c786e7839249f5143fd565a5800bb13",
|
|
10
|
+
"builtin-skills/gateflow-plan/scripts/lib/handoff-v2.mjs": "185dc9fe11fd3d4bfb40a27175ddc27ed6f590d6427bf533d1f0d2aeda25d623",
|
|
11
|
+
"builtin-skills/gateflow-plan/scripts/lib/read-only.d.mts": "43cebba0e3d08ac5abb87cb34719e2d747aaa7cc8a6136eeccbc9f099758e490",
|
|
12
|
+
"builtin-skills/gateflow-plan/scripts/lib/read-only.mjs": "bb4b91d518fb9e12114ade0c251a3baba610516351a12fa5a9b501e93bb5f8ea",
|
|
13
|
+
"builtin-skills/gateflow-plan/scripts/lib/yaml-lite.mjs": "b53b8322b27bb73bbbf2a4254be4698ee43ec79c27828068954afd6d05902784",
|
|
14
|
+
"scripts/build-plan-codec.mjs": "d78243d5824bff60eb1a0d8cc5f86919bc9f585b9ece0824bf7e22c9653d874d"
|
|
15
|
+
},
|
|
16
|
+
"builder": {
|
|
17
|
+
"name": "esbuild",
|
|
18
|
+
"version": "0.21.5"
|
|
19
|
+
},
|
|
20
|
+
"artifacts": {
|
|
21
|
+
"index.cjs": "4c38b283bab25b7e906a961058bea87c7bcb0c103fefdace4cf46cb76c273adf",
|
|
22
|
+
"index.d.cts": "43cebba0e3d08ac5abb87cb34719e2d747aaa7cc8a6136eeccbc9f099758e490"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import type { WorkflowContext } from "./lib/context";
|
|
2
|
+
import type { WorkflowStep } from "./lib/parameters";
|
|
3
|
+
import type { WorkflowMode } from "./lib/simulation";
|
|
4
|
+
import { assertLocalForkRuntime, assertLocalForkSigner, impersonateLocalForkSigner } from "./lib/runtime";
|
|
5
|
+
import { ExternalExecutionRequired } from "./lib/external";
|
|
6
|
+
import { ExecutionSegmentDeferred } from "./lib/transactionPlanner";
|
|
7
|
+
import { runDeployStep } from "./steps/deploy";
|
|
8
|
+
import { runCallStep } from "./steps/call";
|
|
9
|
+
import { runUpgradeStep } from "./steps/upgrade";
|
|
10
|
+
import { runViewStep } from "./steps/view";
|
|
11
|
+
import { runCheckStep } from "./steps/check";
|
|
12
|
+
|
|
13
|
+
export interface WorkflowEngineOptions {
|
|
14
|
+
simulationCallers?: readonly { stepId: string; callerAddress: string }[];
|
|
15
|
+
runCustomStep?: (context: WorkflowContext, step: WorkflowStep) => Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const validateWorkflowStepsForMode = (
|
|
19
|
+
mode: WorkflowMode,
|
|
20
|
+
steps: readonly WorkflowStep[],
|
|
21
|
+
): void => {
|
|
22
|
+
if (!["simulate", "verify", "execute"].includes(mode)) throw new Error(`Unsupported workflow mode: ${mode}`);
|
|
23
|
+
if (mode === "verify") {
|
|
24
|
+
const unsupported = steps.find((step) => step.kind !== "view" && step.kind !== "check");
|
|
25
|
+
if (unsupported) throw new Error(`verify mode only supports view and check steps; ${unsupported.id} is ${unsupported.kind}`);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const dispatchStep = async (context: WorkflowContext, step: WorkflowStep, options: WorkflowEngineOptions): Promise<void> => {
|
|
30
|
+
switch (step.kind) {
|
|
31
|
+
case "deploy":
|
|
32
|
+
await runDeployStep(context, step);
|
|
33
|
+
return;
|
|
34
|
+
case "call":
|
|
35
|
+
await runCallStep(context, step);
|
|
36
|
+
return;
|
|
37
|
+
case "upgrade":
|
|
38
|
+
await runUpgradeStep(context, step);
|
|
39
|
+
return;
|
|
40
|
+
case "view":
|
|
41
|
+
await runViewStep(context, step);
|
|
42
|
+
return;
|
|
43
|
+
case "check":
|
|
44
|
+
await runCheckStep(context, step);
|
|
45
|
+
return;
|
|
46
|
+
case "custom":
|
|
47
|
+
if (!options.runCustomStep) throw new Error("Custom steps require an explicit legacy or planning adapter");
|
|
48
|
+
await options.runCustomStep(context, step);
|
|
49
|
+
return;
|
|
50
|
+
default:
|
|
51
|
+
throw new Error(`Unsupported step kind: ${step.kind}`);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export const runWorkflowSteps = async (
|
|
56
|
+
context: WorkflowContext,
|
|
57
|
+
steps: readonly WorkflowStep[],
|
|
58
|
+
options: WorkflowEngineOptions = {},
|
|
59
|
+
): Promise<{ executionSegmentDeferred: boolean }> => {
|
|
60
|
+
// Validate the entire selection before a read, custom adapter, or signer runs.
|
|
61
|
+
validateWorkflowStepsForMode(context.mode, steps);
|
|
62
|
+
if (
|
|
63
|
+
context.mode === "verify"
|
|
64
|
+
&& context.signer
|
|
65
|
+
&& (!context.signer.provider || context.signer.provider !== context.runtime.hre.ethers.provider)
|
|
66
|
+
) {
|
|
67
|
+
throw new Error("Verify signer must be connected to the explicit runtime provider");
|
|
68
|
+
}
|
|
69
|
+
if (context.mode === "simulate") {
|
|
70
|
+
assertLocalForkRuntime(context.runtime);
|
|
71
|
+
if (context.signer) assertLocalForkSigner(context.runtime, context.signer);
|
|
72
|
+
} else if (options.simulationCallers?.length) {
|
|
73
|
+
throw new Error("Simulation callers are only available in simulate mode");
|
|
74
|
+
}
|
|
75
|
+
const reporter = context.reporter;
|
|
76
|
+
let executionSegmentDeferred = false;
|
|
77
|
+
stepLoop: for (const step of steps) {
|
|
78
|
+
if (
|
|
79
|
+
context.mode === "execute"
|
|
80
|
+
&& context.externalCalls.length > 0
|
|
81
|
+
&& (step.kind === "view" || step.kind === "check" || step.kind === "custom")
|
|
82
|
+
) {
|
|
83
|
+
reporter.event("step.deferred_until_external_execution", {
|
|
84
|
+
stepId: step.id,
|
|
85
|
+
kind: step.kind,
|
|
86
|
+
});
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
const configuredCaller = options.simulationCallers?.find(
|
|
90
|
+
(entry) => entry.stepId === step.id,
|
|
91
|
+
);
|
|
92
|
+
const stepContext: WorkflowContext = configuredCaller
|
|
93
|
+
? {
|
|
94
|
+
...context,
|
|
95
|
+
signer: await impersonateLocalForkSigner(context.runtime, configuredCaller.callerAddress),
|
|
96
|
+
signerAddress: configuredCaller.callerAddress,
|
|
97
|
+
configuredSimulationCaller: true,
|
|
98
|
+
}
|
|
99
|
+
: context;
|
|
100
|
+
if (configuredCaller) {
|
|
101
|
+
reporter.setSimulationCallerAddress?.(configuredCaller.callerAddress);
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
reporter.event("step.started", { stepId: step.id, kind: step.kind });
|
|
105
|
+
try {
|
|
106
|
+
await dispatchStep(stepContext, step, options);
|
|
107
|
+
} catch (error) {
|
|
108
|
+
if (context.mode === "execute" && error instanceof ExecutionSegmentDeferred) {
|
|
109
|
+
executionSegmentDeferred = true;
|
|
110
|
+
reporter.event("execution.segment.deferred", {
|
|
111
|
+
transactionId: error.transactionId,
|
|
112
|
+
});
|
|
113
|
+
break stepLoop;
|
|
114
|
+
}
|
|
115
|
+
if (
|
|
116
|
+
context.mode === "execute"
|
|
117
|
+
&& error instanceof ExternalExecutionRequired
|
|
118
|
+
) {
|
|
119
|
+
if (!context.executionPlanner) {
|
|
120
|
+
throw new Error(
|
|
121
|
+
"External execution requires a locked mixed-authority plan; run final simulation and execute mode",
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
for (const call of error.calls) {
|
|
125
|
+
let planned;
|
|
126
|
+
try {
|
|
127
|
+
planned = context.executionPlanner.add({
|
|
128
|
+
stepId: call.stepId,
|
|
129
|
+
executor: call.executor,
|
|
130
|
+
to: call.to,
|
|
131
|
+
value: call.value,
|
|
132
|
+
data: call.data,
|
|
133
|
+
operation: call.operation,
|
|
134
|
+
});
|
|
135
|
+
} catch (planError) {
|
|
136
|
+
if (planError instanceof ExecutionSegmentDeferred) {
|
|
137
|
+
executionSegmentDeferred = true;
|
|
138
|
+
reporter.event("execution.segment.deferred", {
|
|
139
|
+
transactionId: planError.transactionId,
|
|
140
|
+
});
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
throw planError;
|
|
144
|
+
}
|
|
145
|
+
if (planned.route !== "external") {
|
|
146
|
+
throw new Error(
|
|
147
|
+
`Step ${call.stepId} requested external execution for an operator route`,
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
if (planned.executionAction !== "replay") {
|
|
151
|
+
context.externalCalls.push({
|
|
152
|
+
...call,
|
|
153
|
+
transactionId: planned.transactionId,
|
|
154
|
+
stepId: planned.stepId,
|
|
155
|
+
executor: planned.executor,
|
|
156
|
+
to: planned.to,
|
|
157
|
+
value: planned.value,
|
|
158
|
+
data: planned.data,
|
|
159
|
+
operation: planned.operation,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (executionSegmentDeferred) break stepLoop;
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
throw error;
|
|
167
|
+
}
|
|
168
|
+
reporter.event("step.completed", { stepId: step.id, kind: step.kind });
|
|
169
|
+
} finally {
|
|
170
|
+
if (configuredCaller) reporter.clearSimulationCallerAddress?.();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return { executionSegmentDeferred };
|
|
174
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { BaseContract } from "ethers";
|
|
2
2
|
import { getAddress, isAddress } from "ethers";
|
|
3
|
-
import {
|
|
3
|
+
import { resolveAdmin } from "./config";
|
|
4
4
|
|
|
5
5
|
export interface AuthorityDecision {
|
|
6
6
|
mode: "execute" | "calldata";
|
|
@@ -61,7 +61,7 @@ interface ControlledMulticallAuthorityContract {
|
|
|
61
61
|
export const decideControlledMulticallAuthority = async (
|
|
62
62
|
contract: ControlledMulticallAuthorityContract,
|
|
63
63
|
factory: string,
|
|
64
|
-
target:
|
|
64
|
+
target: { admin?: string },
|
|
65
65
|
signerAddress: string,
|
|
66
66
|
blockTag?: number,
|
|
67
67
|
): Promise<AuthorityDecision> => {
|
|
@@ -122,7 +122,7 @@ export const decideControlledMulticallAuthority = async (
|
|
|
122
122
|
|
|
123
123
|
export const decideAuthority = async (
|
|
124
124
|
contract: BaseContract,
|
|
125
|
-
target:
|
|
125
|
+
target: { admin?: string },
|
|
126
126
|
signerAddress: string,
|
|
127
127
|
blockTag?: number,
|
|
128
128
|
): Promise<AuthorityDecision> => {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { resolveWorkflowValue } from './validation';
|
|
2
|
+
import { typedValue } from "./typedValue";
|
|
1
3
|
import type { BaseContract } from "ethers";
|
|
2
4
|
import { getAddress, isAddress } from "ethers";
|
|
3
|
-
import { ethers } from "../../projectHardhat";
|
|
4
5
|
import {
|
|
5
6
|
assertSelectedSimulationSignerAuthorized,
|
|
6
7
|
decideAuthority,
|
|
@@ -9,9 +10,9 @@ import { encodeCall } from "./calldata";
|
|
|
9
10
|
import { findExecutionCandidateAddress } from "./contractInfoCandidates";
|
|
10
11
|
import { getDeploymentAddress } from "./deployments";
|
|
11
12
|
import { ExternalCall, ExternalExecutionRequired } from "./external";
|
|
12
|
-
import {
|
|
13
|
-
import type { WorkflowContext } from "
|
|
14
|
-
import {
|
|
13
|
+
import { WorkflowStep } from "./parameters";
|
|
14
|
+
import type { WorkflowContext } from "./context";
|
|
15
|
+
import { impersonateLocalForkSigner } from "./runtime";
|
|
15
16
|
|
|
16
17
|
export interface ContractCall {
|
|
17
18
|
method: string;
|
|
@@ -52,7 +53,7 @@ const findStateAddress = (
|
|
|
52
53
|
): string | undefined => {
|
|
53
54
|
for (const pathExpression of [`${name}.address`, `${name}.proxyAddress`]) {
|
|
54
55
|
try {
|
|
55
|
-
const value = context.state.get(pathExpression);
|
|
56
|
+
const value = context.validation ? context.validation.resolve({ $ref: `state.${pathExpression}` }) : context.state.get(pathExpression);
|
|
56
57
|
if (typeof value === "string" && value) {
|
|
57
58
|
return value;
|
|
58
59
|
}
|
|
@@ -85,14 +86,9 @@ export const resolveContract = async (
|
|
|
85
86
|
deploymentName ||
|
|
86
87
|
stringStepField(step, "saveAs") ||
|
|
87
88
|
contractName;
|
|
88
|
-
const
|
|
89
|
+
const rawAddress = (
|
|
89
90
|
step.address
|
|
90
|
-
?
|
|
91
|
-
targetId: context.targetId,
|
|
92
|
-
target: context.target,
|
|
93
|
-
params: context.targetParams,
|
|
94
|
-
state: context.state,
|
|
95
|
-
})
|
|
91
|
+
? resolveWorkflowValue(context, step.address)
|
|
96
92
|
: findStateAddress(context, lookupName) ||
|
|
97
93
|
findExecutionCandidateAddress({
|
|
98
94
|
root: context.root,
|
|
@@ -101,9 +97,11 @@ export const resolveContract = async (
|
|
|
101
97
|
network: context.targetId,
|
|
102
98
|
name: lookupName,
|
|
103
99
|
}) ||
|
|
104
|
-
getDeploymentAddress(context.root, context.config, context.targetId, lookupName)
|
|
100
|
+
getDeploymentAddress(context.root, context.config, context.targetId, lookupName)
|
|
105
101
|
);
|
|
106
|
-
|
|
102
|
+
context.validation?.address(rawAddress);
|
|
103
|
+
const address = String(rawAddress);
|
|
104
|
+
const contract = await context.runtime.hre.ethers.getContractAt(abiName, address, context.signer);
|
|
107
105
|
|
|
108
106
|
return {
|
|
109
107
|
contractName,
|
|
@@ -125,12 +123,7 @@ export const resolveCallArgs = (
|
|
|
125
123
|
context: WorkflowContext,
|
|
126
124
|
call: ContractCall,
|
|
127
125
|
): unknown[] => {
|
|
128
|
-
const args =
|
|
129
|
-
targetId: context.targetId,
|
|
130
|
-
target: context.target,
|
|
131
|
-
params: context.targetParams,
|
|
132
|
-
state: context.state,
|
|
133
|
-
});
|
|
126
|
+
const args = resolveWorkflowValue(context, context.validation ? (call.args === undefined ? [] : call.args) : (call.args || []));
|
|
134
127
|
|
|
135
128
|
if (!Array.isArray(args)) {
|
|
136
129
|
throw new Error(`Call ${call.method} args must resolve to an array`);
|
|
@@ -186,7 +179,8 @@ export const runContractWriteCalls = async (
|
|
|
186
179
|
): Promise<void> => {
|
|
187
180
|
const resolved = await resolveContract(context, step);
|
|
188
181
|
const calls = resolveStepCalls(step);
|
|
189
|
-
const
|
|
182
|
+
const rawCallValues = calls.map((call) => resolveWorkflowValue(context, call.value === undefined ? 0 : call.value));
|
|
183
|
+
const callValues = rawCallValues.map(normalizeCallValue);
|
|
190
184
|
if (!context.signerAddress) {
|
|
191
185
|
throw new Error(`Call step ${step.id} requires a signer address`);
|
|
192
186
|
}
|
|
@@ -215,7 +209,8 @@ export const runContractWriteCalls = async (
|
|
|
215
209
|
const externalExecutor = authority.executor;
|
|
216
210
|
const externalCalls: ExternalCall[] = calls.map((call, index) => {
|
|
217
211
|
const args = resolveCallArgs(context, call);
|
|
218
|
-
|
|
212
|
+
context.validation?.callInterface(resolved.contract.interface.fragments, call.method, args);
|
|
213
|
+
const stepId = context.transactionIdentity?.transactionStepId(step.id, "call", index) ?? calldataStepId(step, call, index, calls);
|
|
219
214
|
return {
|
|
220
215
|
transactionId: stepId,
|
|
221
216
|
stepId,
|
|
@@ -234,10 +229,12 @@ export const runContractWriteCalls = async (
|
|
|
234
229
|
|
|
235
230
|
for (const [index, call] of calls.entries()) {
|
|
236
231
|
const args = resolveCallArgs(context, call);
|
|
232
|
+
await context.validation?.call(resolved.abiName, call.method, args, rawCallValues[index]);
|
|
233
|
+
context.validation?.callInterface(resolved.contract.interface.fragments, call.method, args);
|
|
237
234
|
const value = callValues[index];
|
|
238
235
|
|
|
239
236
|
if (context.executionPlanner) {
|
|
240
|
-
const stepId = calldataStepId(step, call, index, calls);
|
|
237
|
+
const stepId = context.transactionIdentity?.transactionStepId(step.id, "call", index) ?? calldataStepId(step, call, index, calls);
|
|
241
238
|
const executor = authority.mode === "execute"
|
|
242
239
|
? context.signerAddress
|
|
243
240
|
: authority.executor;
|
|
@@ -290,10 +287,10 @@ export const runContractWriteCalls = async (
|
|
|
290
287
|
}
|
|
291
288
|
|
|
292
289
|
const selectedContract = planned.route === "external"
|
|
293
|
-
? await ethers.getContractAt(
|
|
290
|
+
? await context.runtime.hre.ethers.getContractAt(
|
|
294
291
|
resolved.abiName,
|
|
295
292
|
resolved.address,
|
|
296
|
-
await
|
|
293
|
+
await impersonateLocalForkSigner(context.runtime, planned.executor),
|
|
297
294
|
)
|
|
298
295
|
: resolved.contract;
|
|
299
296
|
const txArgs = value !== "0" ? [...args, { value }] : args;
|
|
@@ -301,6 +298,7 @@ export const runContractWriteCalls = async (
|
|
|
301
298
|
hash: string;
|
|
302
299
|
wait: () => Promise<unknown>;
|
|
303
300
|
};
|
|
301
|
+
context.transactionObserver?.record({ transactionId: planned.transactionId, transactionHash: tx.hash });
|
|
304
302
|
await tx.wait();
|
|
305
303
|
if (context.mode === "execute" && planned.route === "operator") {
|
|
306
304
|
context.operatorReceipts.push({
|
|
@@ -354,8 +352,10 @@ export const runContractViewCalls = async (
|
|
|
354
352
|
|
|
355
353
|
for (const [index, call] of calls.entries()) {
|
|
356
354
|
const args = resolveCallArgs(context, call);
|
|
357
|
-
|
|
358
|
-
|
|
355
|
+
await context.validation?.call(resolved.abiName, call.method, args, call.value === undefined ? undefined : resolveWorkflowValue(context, call.value));
|
|
356
|
+
context.validation?.callInterface(resolved.contract.interface.fragments, call.method, args);
|
|
357
|
+
const value = await resolved.contract.getFunction(call.method).staticCall(...args);
|
|
358
|
+
results[resultKey(call, index, calls)] = context.validation ? context.validation.stringify(value) : stringifyCallResult(value);
|
|
359
359
|
}
|
|
360
360
|
|
|
361
361
|
context.reporter.result("view", {
|
|
@@ -377,16 +377,18 @@ export const runContractCheckCalls = async (
|
|
|
377
377
|
|
|
378
378
|
for (const [index, call] of calls.entries()) {
|
|
379
379
|
const args = resolveCallArgs(context, call);
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
}
|
|
387
|
-
const
|
|
388
|
-
|
|
389
|
-
const comparable =
|
|
380
|
+
await context.validation?.call(resolved.abiName, call.method, args, call.value === undefined ? undefined : resolveWorkflowValue(context, call.value));
|
|
381
|
+
context.validation?.callInterface(resolved.contract.interface.fragments, call.method, args);
|
|
382
|
+
let expectedValue: unknown;
|
|
383
|
+
if (context.validation) {
|
|
384
|
+
expectedValue = resolveWorkflowValue(context, call.expect);
|
|
385
|
+
context.validation.check(resolved.contract.interface.fragments, call.method, expectedValue);
|
|
386
|
+
}
|
|
387
|
+
const actualValue = await resolved.contract.getFunction(call.method).staticCall(...args);
|
|
388
|
+
if (!context.validation) expectedValue = resolveWorkflowValue(context, call.expect);
|
|
389
|
+
const comparable = context.validation
|
|
390
|
+
? context.validation.compare(resolved.contract.interface.fragments, call.method, actualValue, expectedValue)
|
|
391
|
+
: comparableCallResults(stringifyCallResult(actualValue), stringifyCallResult(expectedValue));
|
|
390
392
|
|
|
391
393
|
if (comparable.actual !== comparable.expected) {
|
|
392
394
|
throw new Error(
|
|
@@ -394,6 +396,13 @@ export const runContractCheckCalls = async (
|
|
|
394
396
|
);
|
|
395
397
|
}
|
|
396
398
|
|
|
399
|
+
context.verification?.record({
|
|
400
|
+
stepId: step.id, callIndex: index, assertionId: `${step.id}:${index}`,
|
|
401
|
+
contract: resolved.contractName, abiName: resolved.abiName, abi: resolved.contract.interface.format(true),
|
|
402
|
+
address: resolved.address, method: call.method, args: typedValue(args),
|
|
403
|
+
definition: { method: call.method, args: typedValue(call.args ?? []), expect: typedValue(call.expect) },
|
|
404
|
+
actual: typedValue(actualValue), expected: typedValue(expectedValue),
|
|
405
|
+
});
|
|
397
406
|
results[resultKey(call, index, calls)] = comparable;
|
|
398
407
|
}
|
|
399
408
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
|
|
3
|
+
/** Only own enumerable data is semantic. Never invokes getters/toJSON or resolves prototypes. */
|
|
4
|
+
export function canonicalData(value: unknown, label = 'data'): unknown {
|
|
5
|
+
if (value === null || typeof value === 'string' || typeof value === 'boolean') return value;
|
|
6
|
+
if (typeof value === 'number' && Number.isSafeInteger(value)) return value;
|
|
7
|
+
if (!value || typeof value !== 'object') throw new Error(`${label} must contain canonical JSON data`);
|
|
8
|
+
if (Array.isArray(value)) {
|
|
9
|
+
if (Object.keys(value).length !== value.length) throw new Error(`${label} has sparse or extra array data`);
|
|
10
|
+
return Array.from({ length: value.length }, (_, i) => canonicalData(own(value, String(i), label), `${label}[${i}]`));
|
|
11
|
+
}
|
|
12
|
+
if (![Object.prototype, null].includes(Object.getPrototypeOf(value))) throw new Error(`${label} must contain own plain data`);
|
|
13
|
+
if (Object.getOwnPropertySymbols(value).length) throw new Error(`${label} contains symbol fields`);
|
|
14
|
+
const result: Record<string, unknown> = {};
|
|
15
|
+
for (const key of Object.getOwnPropertyNames(value).sort()) {
|
|
16
|
+
Object.defineProperty(result, key, { value: canonicalData(own(value, key, label), `${label}.${key}`), enumerable: true, writable: true, configurable: true });
|
|
17
|
+
}
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
function own(value: object, key: string, label: string): unknown {
|
|
21
|
+
const d = Object.getOwnPropertyDescriptor(value, key);
|
|
22
|
+
if (!d || !d.enumerable || !('value' in d)) throw new Error(`${label}.${key} must be own enumerable data`);
|
|
23
|
+
return d.value;
|
|
24
|
+
}
|
|
25
|
+
export function canonicalJson(value: unknown): string { return JSON.stringify(canonicalData(value)); }
|
|
26
|
+
export function semanticHash(value: unknown): string { return createHash('sha256').update(canonicalJson(value)).digest('hex'); }
|
|
27
|
+
export function deepFreeze<T>(value: T): T {
|
|
28
|
+
if (value && typeof value === 'object') { Object.values(value).forEach(deepFreeze); Object.freeze(value); }
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
export function exactObject(value: unknown, keys: readonly string[], label: string): Record<string, unknown> {
|
|
32
|
+
const data = canonicalData(value, label);
|
|
33
|
+
if (!data || typeof data !== 'object' || Array.isArray(data)) throw new Error(`${label} must be an object`);
|
|
34
|
+
const actual = Object.keys(data).sort(), wanted = [...keys].sort();
|
|
35
|
+
if (actual.length !== wanted.length || actual.some((k, i) => k !== wanted[i])) throw new Error(`${label} contains unsupported or missing fields`);
|
|
36
|
+
return data as Record<string, unknown>;
|
|
37
|
+
}
|
|
38
|
+
export function digest(value: unknown, label: string): string {
|
|
39
|
+
if (typeof value !== 'string' || !/^[a-f0-9]{64}$/.test(value)) throw new Error(`Invalid ${label} digest`);
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
export function nonempty(value: unknown, label: string): string {
|
|
43
|
+
if (typeof value !== 'string' || !value || value.trim() !== value) throw new Error(`Invalid ${label}`);
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
@@ -116,7 +116,7 @@ export const resolveTarget = (config: WorkflowConfig, networkName: string): Targ
|
|
|
116
116
|
return target;
|
|
117
117
|
};
|
|
118
118
|
|
|
119
|
-
export const resolveAdmin = (target:
|
|
119
|
+
export const resolveAdmin = (target: { admin?: string }, signerAddress: string): string => {
|
|
120
120
|
const admin = target.admin?.trim();
|
|
121
121
|
if (!admin || admin.toLowerCase() === "deployer") {
|
|
122
122
|
return getAddress(signerAddress);
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { WorkflowValidationPort } from './validation';
|
|
2
|
+
import type { PendingUupsResolverPort } from "./pendingUupsBinding";
|
|
3
|
+
import type { PreparationSink, VerificationSink } from "./evidencePorts";
|
|
4
|
+
import type { TransactionPlannerPort } from "./transactionPlanner";
|
|
5
|
+
import type { Signer } from "ethers";
|
|
6
|
+
import type { TargetConfig } from "./config";
|
|
7
|
+
import type { ExistingDeploymentPolicies } from "./parameters";
|
|
8
|
+
import type { SimulationFork, WorkflowMode } from "./simulation";
|
|
9
|
+
import type { WorkflowState } from "./state";
|
|
10
|
+
import type { DeploymentRecorder } from "./deploymentRecords";
|
|
11
|
+
import type { ExternalCall } from "./external";
|
|
12
|
+
import type { WorkflowResultName } from "./resultPaths";
|
|
13
|
+
|
|
14
|
+
// Type-only: importing shared steps must never initialize a project Hardhat runtime.
|
|
15
|
+
export type WorkflowHre = typeof import("hardhat");
|
|
16
|
+
|
|
17
|
+
export interface LocalForkCapability {
|
|
18
|
+
provider: WorkflowHre["network"]["provider"];
|
|
19
|
+
impersonate(address: string): Promise<Signer>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface WorkflowRuntime {
|
|
23
|
+
hre: WorkflowHre;
|
|
24
|
+
localFork?: LocalForkCapability;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface WorkflowReporterPort {
|
|
28
|
+
event(type: string, payload?: Record<string, unknown>): void;
|
|
29
|
+
result(name: WorkflowResultName, payload: Record<string, unknown>): void;
|
|
30
|
+
setSimulationCallerAddress?(address: string): void;
|
|
31
|
+
clearSimulationCallerAddress?(): void;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface ExecutionBindings {
|
|
35
|
+
readonly derivationSeed?: string;
|
|
36
|
+
recordOrAssertDerivedValue(key: string, value: string): void;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Only the fields used by step algorithms; environment interpretation belongs
|
|
40
|
+
// to each launcher. A delivery target does not have to pass the legacy parser.
|
|
41
|
+
export type WorkflowTarget = Pick<TargetConfig,
|
|
42
|
+
"openzeppelin" | "finality" | "admin" | "create2" | "uups" | "multicall"
|
|
43
|
+
> & Record<string, unknown> & { id: string };
|
|
44
|
+
export type WorkflowConfiguration = Readonly<Record<string, unknown>>;
|
|
45
|
+
|
|
46
|
+
export interface WorkflowContext {
|
|
47
|
+
root: string;
|
|
48
|
+
taskId: string;
|
|
49
|
+
executionId: string;
|
|
50
|
+
taskDir: string;
|
|
51
|
+
targetId: string;
|
|
52
|
+
target: WorkflowTarget;
|
|
53
|
+
targetParams: Record<string, unknown>;
|
|
54
|
+
existingDeploymentPolicies: ExistingDeploymentPolicies;
|
|
55
|
+
releaseArtifactHash?: string;
|
|
56
|
+
config: WorkflowConfiguration;
|
|
57
|
+
runtime: WorkflowRuntime;
|
|
58
|
+
mode: WorkflowMode;
|
|
59
|
+
simulation: SimulationFork;
|
|
60
|
+
signer?: Signer;
|
|
61
|
+
signerAddress?: string;
|
|
62
|
+
configuredSimulationCaller?: boolean;
|
|
63
|
+
state: WorkflowState;
|
|
64
|
+
reporter: WorkflowReporterPort;
|
|
65
|
+
bindings?: ExecutionBindings;
|
|
66
|
+
preparations?: PreparationSink;
|
|
67
|
+
validation?: WorkflowValidationPort;
|
|
68
|
+
pendingUupsReuse?: PendingUupsResolverPort;
|
|
69
|
+
verification?: VerificationSink;
|
|
70
|
+
deploymentRecorder?: DeploymentRecorder;
|
|
71
|
+
executionPlanner?: TransactionPlannerPort;
|
|
72
|
+
externalCalls: ExternalCall[];
|
|
73
|
+
transactionIdentity?: { transactionStepId(stepId: string, role: "call", ordinal: number): string };
|
|
74
|
+
transactionObserver?: { record(observation: { transactionId: string; transactionHash: string }): void };
|
|
75
|
+
operatorReceipts: Array<{ transactionId: string; transactionHash: string }>;
|
|
76
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** ABI for querying deployed controlled Multicall authority; no project artifact required. */
|
|
2
|
+
export const CONTROLLED_MULTICALL_AUTHORITY_ABI = [
|
|
3
|
+
"function callers(address caller) view returns (bool)",
|
|
4
|
+
"function factoryCallers(address factory, address caller) view returns (bool)",
|
|
5
|
+
"function owner() view returns (address)",
|
|
6
|
+
];
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { resolveWorkflowValue, type Create2FieldKind } from './validation';
|
|
1
2
|
import type { Signer } from "ethers";
|
|
2
3
|
import { getAddress, Interface, isAddress } from "ethers";
|
|
3
|
-
import {
|
|
4
|
-
import type { WorkflowContext } from "
|
|
4
|
+
import { WorkflowStep } from "./parameters";
|
|
5
|
+
import type { WorkflowContext } from "./context";
|
|
5
6
|
|
|
6
7
|
const CONTROLLED_MULTICALL_INTERFACE = new Interface([
|
|
7
8
|
"function aggregate3(tuple(address target,bool allowFailure,bytes callData)[] calls) payable returns (tuple(bool success, bytes returnData)[] returnData)",
|
|
@@ -163,13 +164,10 @@ export const sendPreparedControlledMulticallTransaction = async (
|
|
|
163
164
|
const resolveObject = (
|
|
164
165
|
context: WorkflowContext,
|
|
165
166
|
value: unknown,
|
|
167
|
+
kind: Create2FieldKind,
|
|
166
168
|
): Record<string, unknown> => {
|
|
167
|
-
const resolved =
|
|
168
|
-
|
|
169
|
-
target: context.target,
|
|
170
|
-
params: context.targetParams,
|
|
171
|
-
state: context.state,
|
|
172
|
-
});
|
|
169
|
+
const resolved = resolveWorkflowValue(context, value === undefined ? {} : value);
|
|
170
|
+
if (context.validation) return context.validation.create2Fields(resolved, kind);
|
|
173
171
|
if (!resolved || typeof resolved !== "object" || Array.isArray(resolved)) return {};
|
|
174
172
|
return resolved as Record<string, unknown>;
|
|
175
173
|
};
|
|
@@ -205,10 +203,10 @@ export const resolveCreate2Options = (
|
|
|
205
203
|
step: WorkflowStep,
|
|
206
204
|
): Create2Options | undefined => {
|
|
207
205
|
const strategy = typeof step.strategy === "string" ? step.strategy : undefined;
|
|
208
|
-
const stepCreate2 = resolveObject(context, step.create2);
|
|
209
|
-
const targetCreate2 = resolveObject(context, context.target.create2);
|
|
210
|
-
const targetUups = resolveObject(context, context.target.uups);
|
|
211
|
-
const targetMulticall = resolveObject(context, context.target.multicall);
|
|
206
|
+
const stepCreate2 = resolveObject(context, step.create2, "step");
|
|
207
|
+
const targetCreate2 = resolveObject(context, context.target.create2, "target");
|
|
208
|
+
const targetUups = resolveObject(context, context.target.uups, "uups");
|
|
209
|
+
const targetMulticall = resolveObject(context, context.target.multicall, "multicall");
|
|
212
210
|
if (strategy !== "create2" && Object.keys(stepCreate2).length === 0) return undefined;
|
|
213
211
|
|
|
214
212
|
const rawScheme = stringField(targetCreate2, "scheme") || "evm";
|