gate-evm-tools 1.0.28 → 1.2.0
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 +47 -18
- package/bin/cli.js +6 -0
- package/bin/delivery.cjs +52 -0
- package/bin/manifest-bootstrap.js +4 -15
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +26 -2
- package/dist/commands/check.js.map +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/batch.d.ts +26 -0
- package/dist/core/preparation/batch.d.ts.map +1 -0
- package/dist/core/preparation/batch.js +72 -0
- package/dist/core/preparation/batch.js.map +1 -0
- package/dist/core/preparation/evm.d.ts +61 -6
- package/dist/core/preparation/evm.d.ts.map +1 -1
- package/dist/core/preparation/evm.js +122 -34
- package/dist/core/preparation/evm.js.map +1 -1
- package/dist/core/preparation/evmManifestSync.d.ts +68 -0
- package/dist/core/preparation/evmManifestSync.d.ts.map +1 -0
- package/dist/core/preparation/evmManifestSync.js +154 -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 +17 -3
- package/dist/core/preparation/manifest.d.ts.map +1 -1
- package/dist/core/preparation/manifest.js +23 -28
- 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 +67 -20
- package/dist/core/preparation/normalize.js.map +1 -1
- package/dist/core/preparation/transparent.d.ts +23 -0
- package/dist/core/preparation/transparent.d.ts.map +1 -0
- package/dist/core/preparation/transparent.js +103 -0
- package/dist/core/preparation/transparent.js.map +1 -0
- package/dist/core/preparation/types.d.ts +54 -7
- package/dist/core/preparation/types.d.ts.map +1 -1
- package/dist/core/preparation/zksync.d.ts.map +1 -1
- package/dist/core/preparation/zksync.js +2 -0
- package/dist/core/preparation/zksync.js.map +1 -1
- package/dist/custody/credential.d.ts.map +1 -1
- package/dist/custody/credential.js +1 -6
- package/dist/custody/credential.js.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/deployment-evm/index.d.ts +4 -0
- package/dist/deployment-evm/index.d.ts.map +1 -0
- package/dist/deployment-evm/index.js +3 -0
- package/dist/deployment-evm/index.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -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 +13 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/workflow/index.d.ts +10 -2
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +6 -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/batch.js +76 -0
- package/dist-cjs/core/preparation/batch.js.map +1 -0
- package/dist-cjs/core/preparation/evm.js +128 -37
- package/dist-cjs/core/preparation/evm.js.map +1 -1
- package/dist-cjs/core/preparation/evmManifestSync.js +163 -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 +25 -30
- package/dist-cjs/core/preparation/manifest.js.map +1 -1
- package/dist-cjs/core/preparation/normalize.js +67 -20
- package/dist-cjs/core/preparation/normalize.js.map +1 -1
- package/dist-cjs/core/preparation/transparent.js +110 -0
- package/dist-cjs/core/preparation/transparent.js.map +1 -0
- package/dist-cjs/core/preparation/zksync.js +2 -0
- package/dist-cjs/core/preparation/zksync.js.map +1 -1
- package/dist-cjs/custody/credential.js +1 -6
- package/dist-cjs/custody/credential.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/deployment-evm/index.js +10 -0
- package/dist-cjs/deployment-evm/index.js.map +1 -0
- package/dist-cjs/sync/index.js +13 -0
- package/dist-cjs/sync/index.js.map +1 -1
- package/dist-cjs/workflow/index.js +22 -1
- package/dist-cjs/workflow/index.js.map +1 -1
- package/dist-runtime/config/hardhatAdapters.js +2 -1
- package/dist-runtime/config/hardhatAdapters.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 +42 -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 +159 -0
- package/dist-runtime/delivery/aggregate-channel.js.map +1 -0
- package/dist-runtime/delivery/aggregate-diagnostics.d.ts +14 -0
- package/dist-runtime/delivery/aggregate-diagnostics.js +73 -0
- package/dist-runtime/delivery/aggregate-diagnostics.js.map +1 -0
- package/dist-runtime/delivery/aggregate-inputs.d.ts +172 -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 +87 -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 +199 -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/business-extension.d.ts +10 -0
- package/dist-runtime/delivery/business-extension.js +38 -0
- package/dist-runtime/delivery/business-extension.js.map +1 -0
- package/dist-runtime/delivery/calldata-archive.d.ts +18 -0
- package/dist-runtime/delivery/calldata-archive.js +31 -0
- package/dist-runtime/delivery/calldata-archive.js.map +1 -0
- package/dist-runtime/delivery/calldata-details.d.ts +47 -0
- package/dist-runtime/delivery/calldata-details.js +94 -0
- package/dist-runtime/delivery/calldata-details.js.map +1 -0
- package/dist-runtime/delivery/calldata-format.d.ts +4 -0
- package/dist-runtime/delivery/calldata-format.js +17 -0
- package/dist-runtime/delivery/calldata-format.js.map +1 -0
- package/dist-runtime/delivery/calldata-preparations.d.ts +13 -0
- package/dist-runtime/delivery/calldata-preparations.js +85 -0
- package/dist-runtime/delivery/calldata-preparations.js.map +1 -0
- package/dist-runtime/delivery/calldata-review.d.ts +44 -0
- package/dist-runtime/delivery/calldata-review.js +131 -0
- package/dist-runtime/delivery/calldata-review.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 +222 -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 +851 -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 +124 -0
- package/dist-runtime/delivery/config.js.map +1 -0
- package/dist-runtime/delivery/configuration-definition.d.ts +31 -0
- package/dist-runtime/delivery/configuration-definition.js +343 -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 +86 -0
- package/dist-runtime/delivery/configuration.js.map +1 -0
- package/dist-runtime/delivery/contract-source.d.ts +14 -0
- package/dist-runtime/delivery/contract-source.js +138 -0
- package/dist-runtime/delivery/contract-source.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 +410 -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 +92 -0
- package/dist-runtime/delivery/development.js +406 -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 +82 -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-identity.d.ts +15 -0
- package/dist-runtime/delivery/execution-identity.js +33 -0
- package/dist-runtime/delivery/execution-identity.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 +83 -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 +194 -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 +278 -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/parameter-defaults.d.ts +10 -0
- package/dist-runtime/delivery/parameter-defaults.js +86 -0
- package/dist-runtime/delivery/parameter-defaults.js.map +1 -0
- package/dist-runtime/delivery/parameters.d.ts +55 -0
- package/dist-runtime/delivery/parameters.js +279 -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 +84 -0
- package/dist-runtime/delivery/planning.js +318 -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 +178 -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 +13 -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 +292 -0
- package/dist-runtime/delivery/production-finalization.js.map +1 -0
- package/dist-runtime/delivery/production-intent.d.ts +2 -0
- package/dist-runtime/delivery/production-intent.js +16 -0
- package/dist-runtime/delivery/production-intent.js.map +1 -0
- package/dist-runtime/delivery/production.d.ts +582 -0
- package/dist-runtime/delivery/production.js +445 -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 +87 -0
- package/dist-runtime/delivery/project-files.js.map +1 -0
- package/dist-runtime/delivery/project-rpc.d.ts +19 -0
- package/dist-runtime/delivery/project-rpc.js +138 -0
- package/dist-runtime/delivery/project-rpc.js.map +1 -0
- package/dist-runtime/delivery/project.d.ts +17 -0
- package/dist-runtime/delivery/project.js +170 -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/public-calldata.d.ts +25 -0
- package/dist-runtime/delivery/public-calldata.js +97 -0
- package/dist-runtime/delivery/public-calldata.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 +97 -0
- package/dist-runtime/delivery/release-graph.js +139 -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 +322 -0
- package/dist-runtime/delivery/release-history.js.map +1 -0
- package/dist-runtime/delivery/release-inputs.d.ts +33 -0
- package/dist-runtime/delivery/release-inputs.js +129 -0
- package/dist-runtime/delivery/release-inputs.js.map +1 -0
- package/dist-runtime/delivery/release.d.ts +196 -0
- package/dist-runtime/delivery/release.js +261 -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 +92 -0
- package/dist-runtime/delivery/safe.js +254 -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 +21 -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 +230 -0
- package/dist-runtime/delivery/setup.js.map +1 -0
- package/dist-runtime/delivery/source.d.ts +42 -0
- package/dist-runtime/delivery/source.js +139 -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/task-identity.d.ts +23 -0
- package/dist-runtime/delivery/task-identity.js +109 -0
- package/dist-runtime/delivery/task-identity.js.map +1 -0
- package/dist-runtime/delivery/toolchain.d.ts +3 -0
- package/dist-runtime/delivery/toolchain.js +52 -0
- package/dist-runtime/delivery/toolchain.js.map +1 -0
- package/dist-runtime/delivery/validation.d.ts +9 -0
- package/dist-runtime/delivery/validation.js +155 -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 +897 -0
- package/dist-runtime/vendor/plan-codec/index.d.cts +38 -0
- package/dist-runtime/vendor/plan-codec/provenance.json +25 -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 +44 -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/checkCodeRunner.js +7 -4
- package/dist-runtime/workflow/lib/checkCodeRunner.js.map +1 -1
- 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 +77 -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/create2.d.ts +5 -27
- package/dist-runtime/workflow/lib/create2.js +11 -79
- package/dist-runtime/workflow/lib/create2.js.map +1 -1
- package/dist-runtime/workflow/lib/deploymentInfo.d.ts +2 -0
- package/dist-runtime/workflow/lib/deploymentInfo.js +6 -0
- package/dist-runtime/workflow/lib/deploymentInfo.js.map +1 -1
- package/dist-runtime/workflow/lib/deploymentRecords.d.ts +2 -0
- package/dist-runtime/workflow/lib/deploymentRecords.js +1 -1
- package/dist-runtime/workflow/lib/deploymentRecords.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/externalExecutionScanner.js +2 -1
- package/dist-runtime/workflow/lib/externalExecutionScanner.js.map +1 -1
- package/dist-runtime/workflow/lib/gateTool.d.ts +6 -2
- package/dist-runtime/workflow/lib/gateTool.js +22 -12
- package/dist-runtime/workflow/lib/gateTool.js.map +1 -1
- package/dist-runtime/workflow/lib/gateToolSync.d.ts +4 -1
- package/dist-runtime/workflow/lib/gateToolSync.js +8 -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 +11 -22
- 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 +4 -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 +69 -139
- 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 +110 -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 +84 -49
- 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 +38 -0
- package/docs/configuration-runtime-observation.md +29 -0
- package/docs/create2-miner.md +100 -0
- package/docs/delivery-aggregate.md +29 -0
- package/docs/delivery-calldata.md +27 -0
- package/docs/delivery-custom-input-closure.md +51 -0
- package/docs/delivery-development.md +38 -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 +95 -0
- package/docs/delivery-parameters.md +65 -0
- package/docs/delivery-planning.md +140 -0
- package/docs/delivery-release.md +119 -0
- package/docs/delivery-safe.md +75 -0
- package/docs/delivery-setup.md +198 -0
- package/docs/delivery-source.md +67 -0
- package/docs/direct-package-acceptance.md +2 -0
- package/docs/openzeppelin-acceptance.md +86 -0
- package/docs/openzeppelin-baseline.json +27 -0
- package/docs/openzeppelin-integration.md +115 -0
- package/docs/plans/2026-10-28-openzeppelin-toolkit-consolidation.md +396 -0
- package/docs/plans/2026-11-02-transparent-proxy-delivery.md +78 -0
- package/docs/superpowers/plans/2026-08-17-custody-hardhat-signers.md +1 -1
- 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 +12 -4
- package/docs/workflow-runtime.md +6 -0
- package/package.json +148 -10
- 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 +2 -1
- package/runtime/config/openzeppelin.ts +3 -21
- package/runtime/delivery/abi.ts +225 -0
- package/runtime/delivery/aggregate-bootstrap.ts +31 -0
- package/runtime/delivery/aggregate-channel.ts +88 -0
- package/runtime/delivery/aggregate-diagnostics.ts +63 -0
- package/runtime/delivery/aggregate-inputs.ts +39 -0
- package/runtime/delivery/aggregate-source.ts +57 -0
- package/runtime/delivery/aggregate-worker.ts +143 -0
- package/runtime/delivery/aggregate.ts +139 -0
- package/runtime/delivery/bindings.ts +37 -0
- package/runtime/delivery/business-extension.ts +33 -0
- package/runtime/delivery/calldata-archive.ts +25 -0
- package/runtime/delivery/calldata-details.ts +90 -0
- package/runtime/delivery/calldata-format.ts +14 -0
- package/runtime/delivery/calldata-preparations.ts +76 -0
- package/runtime/delivery/calldata-review.ts +126 -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 +181 -0
- package/runtime/delivery/compiler-io.ts +10 -0
- package/runtime/delivery/compiler-pins.ts +143 -0
- package/runtime/delivery/compiler.ts +701 -0
- package/runtime/delivery/config.ts +116 -0
- package/runtime/delivery/configuration-definition.ts +160 -0
- package/runtime/delivery/configuration-hre.ts +130 -0
- package/runtime/delivery/configuration-runtime.ts +163 -0
- package/runtime/delivery/configuration.ts +67 -0
- package/runtime/delivery/contract-source.ts +112 -0
- package/runtime/delivery/create2.ts +57 -0
- package/runtime/delivery/custom-closure.ts +993 -0
- package/runtime/delivery/custom-format.ts +479 -0
- package/runtime/delivery/custom.ts +219 -0
- package/runtime/delivery/data.ts +94 -0
- package/runtime/delivery/development.ts +264 -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-identity.ts +32 -0
- package/runtime/delivery/execution-model.ts +102 -0
- package/runtime/delivery/execution-store.ts +411 -0
- package/runtime/delivery/existing-code.ts +45 -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 +204 -0
- package/runtime/delivery/journal.ts +205 -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/parameter-defaults.ts +75 -0
- package/runtime/delivery/parameters.ts +367 -0
- package/runtime/delivery/pending.ts +98 -0
- package/runtime/delivery/plan.ts +337 -0
- package/runtime/delivery/planning.ts +411 -0
- package/runtime/delivery/policy.ts +9 -0
- package/runtime/delivery/preparation.ts +240 -0
- package/runtime/delivery/production-environment.ts +7 -0
- package/runtime/delivery/production-finalization.ts +181 -0
- package/runtime/delivery/production-intent.ts +14 -0
- package/runtime/delivery/production.ts +415 -0
- package/runtime/delivery/project-files.ts +63 -0
- package/runtime/delivery/project-rpc.ts +116 -0
- package/runtime/delivery/project.ts +129 -0
- package/runtime/delivery/protocol.ts +94 -0
- package/runtime/delivery/public-calldata.ts +74 -0
- package/runtime/delivery/references.ts +106 -0
- package/runtime/delivery/release-graph.ts +79 -0
- package/runtime/delivery/release-history-capture.ts +32 -0
- package/runtime/delivery/release-history.ts +178 -0
- package/runtime/delivery/release-inputs.ts +107 -0
- package/runtime/delivery/release.ts +166 -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 +355 -0
- package/runtime/delivery/same-fork-baseline.ts +17 -0
- package/runtime/delivery/setup.ts +184 -0
- package/runtime/delivery/source.ts +130 -0
- package/runtime/delivery/target-fields.ts +7 -0
- package/runtime/delivery/task-identity.ts +85 -0
- package/runtime/delivery/toolchain.ts +48 -0
- package/runtime/delivery/validation.ts +252 -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 +897 -0
- package/runtime/vendor/plan-codec/index.d.cts +38 -0
- package/runtime/vendor/plan-codec/provenance.json +25 -0
- package/runtime/workflow/engine.ts +174 -0
- package/runtime/workflow/lib/authority.ts +3 -3
- package/runtime/workflow/lib/calls.ts +47 -37
- package/runtime/workflow/lib/canonicalData.ts +45 -0
- package/runtime/workflow/lib/checkCodeRunner.ts +7 -3
- package/runtime/workflow/lib/config.ts +1 -1
- package/runtime/workflow/lib/context.ts +77 -0
- package/runtime/workflow/lib/create2.ts +18 -121
- package/runtime/workflow/lib/deploymentInfo.ts +8 -0
- package/runtime/workflow/lib/deploymentRecords.ts +3 -1
- 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/externalExecutionScanner.ts +2 -1
- package/runtime/workflow/lib/gateTool.ts +22 -10
- package/runtime/workflow/lib/gateToolSync.ts +11 -3
- package/runtime/workflow/lib/operationNames.ts +32 -0
- package/runtime/workflow/lib/parameters.ts +8 -21
- 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 +6 -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 +42 -176
- 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 +99 -58
- package/runtime/workflow/steps/upgrade.ts +88 -57
- package/runtime/workflow/steps/view.ts +1 -1
- package/bin/workflow.cjs +0 -19
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Owned aggregate input qualification
|
|
2
|
+
|
|
3
|
+
`gate-evm-tools/delivery-aggregate` exports `collectDeliveryAggregate`. It reads the actual core project's handoff and `scripts/tasks/<deploymentId>/{task.yaml,manifest.yaml,parameters.schema.json,parameters.yaml,parameters.provenance.json}`. Run it from the original installed project root.
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
const aggregate = await collectDeliveryAggregate({
|
|
7
|
+
workspaceRoot: process.cwd(),
|
|
8
|
+
projectRoot: '.',
|
|
9
|
+
selection: 'all', // development | release | all
|
|
10
|
+
targets: [
|
|
11
|
+
{ request: developmentRequest, executionId: 'vault-development-1' },
|
|
12
|
+
{ request: qualificationRequest, executionId: 'vault-production-1' },
|
|
13
|
+
],
|
|
14
|
+
});
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Every request is the existing explicit `DeliveryRequest`, including its actual sourceRef, devSigner or operator, and requested pinned read-only fork. Requests must match the ordered selected target set; every executionId is distinct. Development selection requires only development values. Release/all selection requires every selected production envelope. The single ordered manifest applies to each selected target. Callers cannot replace it with steps, target objects, parameter values, snapshots or hashes.
|
|
18
|
+
|
|
19
|
+
The parent validates each request's actual handoff invocation and unions canonical upstream definitions. It runs each bounded computed producer once per selected target and retains its opaque input owner through sealing. Children receive frozen verified values over their owned channels and never evaluate producers.
|
|
20
|
+
|
|
21
|
+
Each target stages once in a fresh fixed package worker, using the original project, config, sources, module resolution, artifacts and cache paths. A separate actual source HRE serves the workflow's reviewed read-only RPC allowlist. The owned fork config extender runs before HRE construction; manifest context is established before OpenZeppelin loads. Configuration evidence preserves the original runner policy while private baseline checks cover the injected fork capability.
|
|
22
|
+
|
|
23
|
+
The source RPC must serve historical code, balances and storage at the pinned block. A successful block/header read alone does not establish that capability. The private target fork starts without Hardhat's default wallets and impersonates only the selected simulation operator. This avoids unrelated historical wallet reads; it does not change the project's recorded runner policy or source network accounts. Worker failures distinguish fork setup, snapshot verification and local signer initialization. Source failures expose only fixed categories for unavailable historical state, denied access, rate limits or other read failures; upstream messages, URLs and credentials are never forwarded. Correct the selected project's RPC and retry the existing execution identity and pinned block. Do not move the block to bypass this check.
|
|
24
|
+
|
|
25
|
+
Earlier workers and compiler collectors remain live while later targets compile. Selected artifact, debug and build-info bytes must survive unchanged; growing whole validation/Solidity caches are not immutable inputs. After all stages, business ports close, every actual contribution is reread, conflicting files reject, and the parent computes one stable input union. Runtime observations and randomized exact compiler evidence remain outside that hash. Every target custom snapshot is included; native-only plans retain `customInputClosure: null`.
|
|
26
|
+
|
|
27
|
+
Binding is private and one-shot. It changes only input/plan/audit hash bindings; transaction IDs/order/bytes, execution-derived values, preparations, verification, references and the captured fork interval remain byte-equivalent. No evaluation, preparation, producer call or send occurs during binding. Any failed target invalidates the whole aggregate. No collection is returned until every target and source child exits successfully and is reaped. IPC session/epoch/request IDs correlate the actual process/channel; they are not hostile-process attestation.
|
|
28
|
+
|
|
29
|
+
Discovery does not have independently closed current inputs before execution, so it rejects `expected` requests before any producers or workers run. Existing known-final `collectDeliveryPlan` replay retains its original expected identity, transaction, derivation, preparation and plan checks. Discovery cannot create pending-reuse authority. This API qualifies inputs and local simulation collections; it does not establish business acceptance, finality, a complete production release graph, release readiness or broadcast authority.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Production calldata review
|
|
2
|
+
|
|
3
|
+
Production preparation captures a review for every frozen transaction. Ordinary calls use the compiled contract interface and independently resolved business arguments. CREATE2, controlled multicall, UUPS and Transparent deployments/upgrades reconstruct intent from preparation requests and compiled artifacts, including constructor and initializer payloads.
|
|
4
|
+
|
|
5
|
+
`collection.calldata` is frozen by the production `artifactHash`. The internal export model retains these records under `calldataReview`, bound to `planHash` and `chainId`. Each record contains transactionId, to, value, operation and its invocation:
|
|
6
|
+
|
|
7
|
+
- `abi`: the JSON ABI fragment for the actual function or constructor, including input names and tuple components.
|
|
8
|
+
- `method` and `selector`: canonical function signature and selector (constructor selector is null).
|
|
9
|
+
- `expectedArguments`: independently resolved intent; ABI integers are decimal strings and tuples are positional arrays.
|
|
10
|
+
- `decodedArguments`: arguments decoded from the complete actual bytes.
|
|
11
|
+
- `data`: complete calldata; constructor data includes its frozen `bytecode`.
|
|
12
|
+
- `payloads`: nested invocations linked by numeric `argumentPath`, e.g. `[0, 1, 2]` selects the second aggregate3 call's callData.
|
|
13
|
+
- `check: matches-frozen-intent`: expected ABI encoding matches every byte, including selector and absence of trailing data.
|
|
14
|
+
|
|
15
|
+
Production inspection and export revalidate complete ordered coverage, transaction bindings, canonical ABI encoding and nested payloads. Missing ABI or inconsistent bytes reject the operation before signing or broadcast. A match verifies consistency with frozen intent; it does not certify business correctness, current permissions or chain completion. Existing production preparations without review must be generated anew.
|
|
16
|
+
|
|
17
|
+
The public delivery is one JSON array. Each outer CALL contains `chains`, `executor`, `to`, `name`, `description`, human-readable function `abi`, and `calldata`; nonzero `value` is decimal wei. The name and description come from the frozen operation or specific call. Known CREATE2, multicall and upgrade payloads add `details` explaining their nested intent. Internal review records, transaction hashes and checks stay out of the public file. No companion Markdown is generated.
|
|
18
|
+
|
|
19
|
+
The authored business description is preserved, followed by an `执行参数:` line containing the actual ABI argument names, types and values from the independently validated frozen invocation. Named tuples and arrays expand recursively; zero, false and full-width decimal integers remain exact. Registered nested payloads show their decoded calls; CREATE2 creation bytecode is represented by initCodeHash and constructor arguments rather than copied into the description. Multicall subcalls, upgrades and initializers use the same formatter in their own descriptions. No additional public parameter field or document is added. Parameter text follows each network's frozen arguments; ABI integer values are raw units and do not imply token decimals. This makes actual values reviewable but does not mechanically prove the authored natural-language business purpose.
|
|
20
|
+
|
|
21
|
+
Public files are optional: ordinary direct-wallet execution keeps the transaction bytes and ABI review internally without publishing a delivery. Dev preparation, execution and reconciliation do not depend on a public file. GateFlow dev publishes when the current transaction requires external execution; explicit offline exports use the original frozen aggregate. Production publishes for the selected export intent or a known external executor. CREATE2 and multicall construction and nested validation remain required even when no public document is generated.
|
|
22
|
+
|
|
23
|
+
When requested, dev and production publish the complete array atomically at `scripts/tasks/<deploymentId>/deliveries/<sha256>/calldata.json`. Both use `delivery-calldata.archiveDeliveryCalls` and `serializeDeliveryCalls`: deterministic keys, two-space indentation, UTF-8 and one trailing newline, with the digest computed over those exact file bytes. The path contains no network or environment; `chains` identifies each transaction's targets. The READY descriptor includes the exact bytes and private source provenance at `.gate-delivery/deliveries/<deploymentId>/<sha256>-<provenanceHash>.json`; dev execution identities and production release references stay in those records. Repeated identical exports reuse the file without replacing earlier deliveries. Multiple targets can be exported with `exportProductionCalldata`, which validates each frozen target before merging equal logical occurrences while preserving every chain's order.
|
|
24
|
+
|
|
25
|
+
An authorized operator transaction follows the existing approval/signing flow. A known external executor produces the full calldata export without signing or sending that external transaction. Missing signing capability or RPC failure remains an error. Exports preserve completed observations and ordering; they do not mark deployment complete.
|
|
26
|
+
|
|
27
|
+
Safe exports additionally record the unsigned `execTransaction` ABI/arguments and MultiSend wrapper ABI. The signature argument is explicitly `0x`, pending external collection. The frozen Safe envelope and packed calls are verified against the original transaction range by the Safe adapter; the production review retains the business call ABIs for that range. The review is not a signed Safe transaction.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Custom planning input closure (policy `gate-custom-cjs@1`)
|
|
2
|
+
|
|
3
|
+
This layer captures the actual selected custom modules, their supported static runtime graph, configuration reads, business file reads, and installed npm packages. `CustomEvidence.closure` records each evaluation's contribution; `DeliveryPlan.customInputClosure` binds the session's union into `planHash`. Native-only plans carry `null` and never initialize this loader. Ordered `resolve` observations, including changing workflow state, remain separate from immutable file inputs.
|
|
4
|
+
|
|
5
|
+
This is supported-code validation and controlled evaluation. It is not sound analysis of arbitrary JavaScript, a hostile-code sandbox, a same-UID filesystem boundary, a complete toolchain/artifact/public-configuration freeze, or `release_ready`. Compiler/artifact/OZ-layout/public-configuration and aggregate freeze belong to Task 5c.1c; durable execution and lifecycle/release qualification remain later tasks.
|
|
6
|
+
|
|
7
|
+
## Sources and evaluation
|
|
8
|
+
|
|
9
|
+
The actual selected step's `script` is a project-relative root. The TypeScript 5.9.3 AST follows imports, side-effect imports, re-exports, literal `import = require`, and direct literal `require`, including statically visible calls in branches that never execute. Explicit type-only edges are excluded. Caller-declared files are permissions for business ports, not graph-completeness declarations.
|
|
10
|
+
|
|
11
|
+
Project `.ts`, `.cts`, `.js`, `.cjs`, and imported `.json` are supported. Extensionless relative imports must have exactly one regular target among the literal name, the supported extensions, and `index` with those extensions. Explicit extensions select exactly that file. Missing or ambiguous candidates fail; there is no `.js` to `.ts` substitution, directory `package.json` main adapter, or TypeScript type-resolution authority. Module source format follows captured nearest `package.json` metadata; native `.mjs`, `.d.ts` runtime targets, `.js`/`.ts` under `type: module`, and TypeScript runtime files inside packages are unsupported.
|
|
12
|
+
|
|
13
|
+
Captured bytes are transpiled with fixed CommonJS, isolated-module, JSON interop, no helper-package injection, LF and no source-map options. The exact effective options, TypeScript version and emitted-JavaScript hashes are evidence. Source/data bytes and emitted JavaScript remain in the collector's private memory for controlled evaluation. Host `require` is never used to evaluate project or dependency code. Each session owns a VM context, frozen importer-to-target edges and a private CJS module cache. Cycles publish partial exports before evaluating the dependency, matching CJS semantics. Failed initializers are removed from the module cache while successfully loaded dependencies remain cached; an importer that catches the error can retry initialization from the same captured bytes. A graph-collection failure or an initializer error escaping the root loader makes the session terminal and cannot be sealed as a successful closure.
|
|
14
|
+
|
|
15
|
+
The supported subset rejects nonliteral/aliased loaders, runtime `import()`, `require.resolve/cache/extensions`, `module` access other than `module.exports`, `createRequire`, generated code, reflective constructor/prototype access, nonliteral computed property access, and ambient APIs. Thus ordinary deterministic helpers using direct fields, destructuring, literal indexing and array methods work; arbitrary dynamic indexing requires a future reviewed adapter. Filesystem, subprocess, network, environment, argv/cwd, clocks, randomness, native addons and HRE/signer/RPC access are unavailable. Broad `ethers` or Hardhat imports can fail because their reachable code uses those capabilities. No ambient capability is granted to make such imports pass.
|
|
16
|
+
|
|
17
|
+
Only this collector's known VM Object/Array prototypes and ordinary host own-data prototypes are normalized. Normalization checks descriptors, symbols, dense arrays and cycles; it never uses getter execution, `toJSON`, or JSON stringify coercion to accept a foreign object. Returned business data and planning results are immutable.
|
|
18
|
+
|
|
19
|
+
## Business data and configuration
|
|
20
|
+
|
|
21
|
+
`readJson` and `readBytes` require declared file names confined to the task/business root, itself inside the project. Their exact project paths and byte digests bind into both observations and closure files. No directory or glob port exists. Imports and ports both reject traversal/escape, symlink components, hardlinks and nonregular leaves. The project-files boundary checks the lexical path before following it; a business-root symlink cannot disappear through `realpath` normalization.
|
|
22
|
+
|
|
23
|
+
Session construction, target rebinding and owned-session checks validate the business directory before normalization, even when no file port is used. Lexical `.`/`..` components, outside roots and existing symlink/non-directory components reject. The supplied project-root spelling and its canonical realpath are accepted aliases (including macOS temporary-directory aliases); an unused task directory may be absent.
|
|
24
|
+
|
|
25
|
+
The shared path policy denies credentials (`.env*`, `.npmrc`, keys, wallets, certificates), generated reports/status/results/releases/handoffs/manifests, deployment state and private deployment configuration, `.gate-template.json`, raw lockfiles, and project generated/cache directories. Package code may live in its own `dist` tree, but importing sensitive files is still forbidden. Public configuration/provenance will use a separate projection, not raw business reads.
|
|
26
|
+
|
|
27
|
+
The root `tsconfig.json` is read with TypeScript JSONC parsing and compiler-option conversion through confined captured reads. Local `extends` and explicit package JSON subpaths (for example `@tsconfig/node16/tsconfig.json`) join the closure; package extends require the same lock/payload identity as runtime packages. Single-string extends is supported; external extends, extends arrays, package-directory config discovery, aliases/baseUrl/rootDirs/moduleSuffixes, custom conditions, transformers/plugins/decorators/JSX and ts-node compiler/transpiler hooks are unsupported. Runtime target, `esModuleInterop` and class-field semantics are honored; other accepted type-check/build settings cannot override the fixed transpile-only loader options. An absent config has explicit deterministic ES2022/CommonJS defaults and its absence is rechecked. Nearest package metadata and absence of closer metadata are also rechecked.
|
|
28
|
+
|
|
29
|
+
Every config file inside a package is attributed by its physical project-relative location, including `./node_modules/pkg/tsconfig.json`, package-local relative parents and relative paths into another package. Spelling a package config as a relative path does not omit its lock or complete installed payload identity.
|
|
30
|
+
|
|
31
|
+
## npm package identity
|
|
32
|
+
|
|
33
|
+
Every bare specifier resolves from its actual importer using the running Node version's default CJS resolver, in a fresh Node child with an empty environment and `--preserve-symlinks`. Node's exports/conditions are authoritative. Evidence records the exact Node version and resolver policy/flag, including the version's default conditions such as `module-sync` and `node-addons`; it does not pretend that only `require`/`node`/`default` exist. Fresh children avoid stale host path/package-json caches at sealing.
|
|
34
|
+
|
|
35
|
+
Package-internal relative edges also use Node CJS extension/index/main resolution; the project-only ambiguity policy does not replace Node package semantics. The selected runtime file must be inside a regular local npm package. Nested duplicate and hoisted/peer dependencies have their own physical project-relative `lockLocation`; ancestor/global packages, NODE_PATH, custom conditions, absolute/file/http specifiers, `#imports`, workspace/directory links, PnP, and native/ESM-only loaders are unsupported. Local npm lock v2/v3 entries must match installed package name/version, have a supported integrity value and registry or `file:...tgz` source, and not be linked/extraneous.
|
|
36
|
+
|
|
37
|
+
Each used package binds package metadata digest, `type/main/exports/imports`, lock location, name/version/integrity, safe source identity, and the complete current unpacked payload: sorted portable regular-file paths and byte hashes. Nested `node_modules` are independent identities, never merged into the parent payload. There is no blanket omission of dotfiles, documentation, tests or unused payload files. Symlinks, hardlinked/nonregular payload files and native addons fail.
|
|
38
|
+
|
|
39
|
+
Tarball SRI identifies the locked tarball; it does **not** prove installed bytes. The installed payload digest is an independent identity. Local tarball source evidence uses its SRI-derived content identity, never its host path. Registry source URLs are represented only by opaque hashes. No resolved URL, credential-bearing lock metadata, `.npmrc`, full lockfile, or absolute path is exported.
|
|
40
|
+
|
|
41
|
+
The only host preload adapter is exactly `-r ts-node/register` (or `--require`), locally installed ts-node 10.9.2 and Hardhat 2.26.3 with matching local lock versions, the actual loaded local register entry and its byte digest, and captured package metadata identities. Companion preloads, loader/condition switches, NODE_OPTIONS/NODE_PATH and TS_NODE selectors fail. The adapter's host HRE bootstrap is trusted; custom code still uses the private loader. Full adapter/toolchain payload identity belongs to 5c.1c.
|
|
42
|
+
|
|
43
|
+
## Sealing and replay
|
|
44
|
+
|
|
45
|
+
`CustomPlanningSession.sealClosure()` rehashes all captured inputs, re-resolves every edge, checks previously absent config/metadata paths, and re-enumerates every package payload. Newly closer dependencies, newly ambiguous relative candidates and added/removed unused package files therefore invalidate the session even when previously selected file bytes stayed unchanged. These are ordinary before/after drift checks, not an atomic filesystem snapshot against a hostile writer.
|
|
46
|
+
|
|
47
|
+
A session accumulates roots from actual evaluations. `forTarget()` creates target-specific ports sharing that same private immutable-input collector; later roots and data cannot be excluded by passing a caller list. The collection checks the complete union after identity revalidation and again after the asynchronous fork audit. Replay recollects/evaluates current files and compares the canonical plan; changed unexecuted helpers change the plan identity. Evidence is portable across checkout roots, uses sorted canonical framed JSON, and excludes absolute paths and mtimes. There is no detached/offline source-execution replay API in this unit.
|
|
48
|
+
|
|
49
|
+
Injected sessions must be collector-owned and bound to the collection's project/business root. The launcher calls private captured operations, so replacing a genuine object's public `evaluate` or `sealClosure` methods cannot forge evidence. A self-consistent fake session or fake evidence cannot qualify collection. Pure parsers validate persisted structure/hash relationships; they do not attest to filesystem collection by themselves.
|
|
50
|
+
|
|
51
|
+
Closure parsing requires actual string fields and one edge per `(importer, specifier, kind)` key; identical and conflicting duplicates both reject. Roots and runtime importers must be modules, and runtime targets must be modules or imported JSON. Config edges and the compiler config reference must identify config JSON; a config also imported at runtime retains the `json` file kind and remains a valid config endpoint.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Tool-side development delivery
|
|
2
|
+
|
|
3
|
+
`gate-evm-tools/delivery-development` exports `createDevelopmentDelivery`. It connects an actual development `collectDeliveryAggregate` result to the existing EOA execution store, read-only business verification, recoverable project materialization, and actual CheckCode. This is the tool-side development entry; GateFlow host authorization, production orchestration, Safe execution, and release publication are separate work.
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
const aggregate = await collectDeliveryAggregate(source); // selection: 'development'
|
|
7
|
+
// Persist source + aggregate before sending. Resume with those original bytes.
|
|
8
|
+
const delivery = await createDevelopmentDelivery({
|
|
9
|
+
root: projectRoot, source, aggregate, target: 'localDev', hre,
|
|
10
|
+
execution: { context, store, signer, approval },
|
|
11
|
+
});
|
|
12
|
+
const result = await delivery.continue({ unsigned });
|
|
13
|
+
// Each call may sign/send one original operator transaction. Host supplies the
|
|
14
|
+
// complete type 0/1/2 envelope (nonce, gas and all fee fields); no defaults.
|
|
15
|
+
const progress = await delivery.continue();
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Use the actual project HRE loaded for the named target. Its provider is used for both execution and verification; fork HREs and fabricated HRE replacements are refused. The context is the existing EOA execution context, with immutable plan/execution/operator/chain/target identity and explicit host policy/finality. The host-injected approval capability remains mandatory for signing. Configured target confirmations are a minimum. The lifecycle does not reevaluate business modules or parameter producers to send transactions.
|
|
19
|
+
|
|
20
|
+
The method first reconciles the original durable transaction prefix. Unfinished external execution returns `waiting-external-execution`; callers can supply an explicit `hashReferences` map. Contract executors remain unsupported by the EOA observer. Missing receipts/finality remain pending. Reverted/blocked execution cannot produce acceptance.
|
|
21
|
+
|
|
22
|
+
After finality, all frozen manifest/native or emitted custom `check` calls run through the shared verify engine using `staticCall`. An empty assertion collection is not business acceptance. Assertion IDs, order, methods, ABI, addresses, typed arguments, definitions and expected values are checked against the sealed collection. Current eligible source, input files, installed runtime, effective HRE, artifacts and provider chain are rechecked.
|
|
23
|
+
|
|
24
|
+
Successful assertions permit materialization of `contractInfo.json`, `deploymentInfo.json`, an explicit per-execution `deployment.json`, and the official selected-target OpenZeppelin manifest for UUPS. The native adapter checks actual deployed bytecode, ERC-1967 implementation, official validation data and layout. Registry merges preserve unrelated entries and reject same-instance/base conflicts.
|
|
25
|
+
|
|
26
|
+
These are generated projections with different consumers: `contractInfo.json` is the lightweight current address lookup; `deploymentInfo.json` holds current contract/proxy metadata and points to its originating execution; `deployment.json` retains that execution's parameters, observations and assertions. The shared registration merge and recoverable file transaction own all three. Agents must not independently update the address and metadata files or copy them into a second registry in Markdown.
|
|
27
|
+
|
|
28
|
+
Ordinary dev preparation and direct-wallet execution need no public `calldata.json`. The frozen collection still retains exact transaction bytes and nested ABI/expected-argument validation. GateFlow publishes a public array when the current transaction requires external execution; an explicitly requested offline export can also project the original collection with `delivery-calldata.projectDeliveryCalls` and archive it with `archiveDeliveryCalls`. An optional exported file is not a prerequisite for direct execution or recovery.
|
|
29
|
+
|
|
30
|
+
New deployment tasks reference canonical inputs and actual JSON/code/acceptance evidence in Plan results. They need no separate analysis, requirement, qualification or validation Markdown report. Project-specific decisions or unusual recovery instructions may use one optional task-local README. Previously declared or frozen reports remain bound to their original paths and bytes.
|
|
31
|
+
|
|
32
|
+
`.gate-delivery/materialization/<executionId>.json` contains the exact old/new bytes and hashes for the multi-file intent. A SQLite transaction holds the process mutex; files and intent are atomically renamed and fsynced. The `prepared` journal is durable before the first project-file replacement. Recovery accepts only recognized old/new bytes, finishes remaining file writes, and marks `committed`. A process crash releases the mutex automatically. Conflicting edits or invalid journals fail closed. Do not delete these journals to retry a deployment.
|
|
33
|
+
|
|
34
|
+
CheckCode runs `npm run compile -- --network <target>` and the installed local `gate-tool check --scheme evm --network <target> --config <effective> --output <raw>`. Each new attempt gets a unique private directory. Actual artifacts are checked before and after both compilations. The current raw report must have exactly the expected selected-network keys, matching scheme/contract/address, `matches: true` and `error: null`. UUPS requires both the business implementation entry and `<Alias>_Proxy`.
|
|
35
|
+
|
|
36
|
+
An `accepted` result includes finalized transaction observations, complete business assertions, materialization identity, official manifest evidence, and CheckCode raw/registry/metadata/effective/artifact hashes. It is persisted at `.gate-delivery/development/<executionId>.acceptance.json`. Repeated `continue()` revalidates saved evidence and original finality without signing, sending, or rerunning completed CheckCode. Raw tampering is an error, not a new successful check.
|
|
37
|
+
|
|
38
|
+
The targeted crash test covers process death after a file rename. It is not an experimental power-loss guarantee. Filesystem durability depends on the platform honoring `fsync` and atomic rename semantics. The entry is for the installed new-core project/runtime; it performs no unrelated legacy migration.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Delivery EOA execution kernel
|
|
2
|
+
|
|
3
|
+
`gate-evm-tools/delivery-eoa` consumes the existing immutable `DeliveryPlan` and shared private `ExecutionStore`. It requires the delivery toolchain's ethers 6 and Node `^22.13.0 || ^24.0.0`. It is an injected execution kernel for a trusted host, not the production host, Safe support, development acceptance, or release readiness. `delivery-export` remains independent and does not import this entry.
|
|
4
|
+
|
|
5
|
+
The host supplies the RPC transport, immutable execution context (plan, release, operator, target, chain and policy identities, explicit finality policy), a **sign-only** signer, and an approval capability. These implementations must come from controlled host code. Agent-generated code and user JSON such as `authorized: true` must never be accepted as implementations or permission. The old combined custody sign/send API is unsuitable here.
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
const execution = createDeliveryEoaExecution({
|
|
9
|
+
plan,
|
|
10
|
+
context: {
|
|
11
|
+
executionId: plan.executionId, planHash: plan.planHash,
|
|
12
|
+
chainId: plan.chainId, target: plan.target, operator: plan.operator,
|
|
13
|
+
releaseHash: hostReleaseHash, policyHash: hostPolicyHash,
|
|
14
|
+
finality: { kind: 'confirmations', depth: '12' },
|
|
15
|
+
// Or { kind: 'rpc_finalized' }; unsupported RPC never falls back.
|
|
16
|
+
},
|
|
17
|
+
store, // openExecutionStore({ trustedRoot: hostSharedPrivateRoot })
|
|
18
|
+
provider: { request: (method, params) => hostRpc.send(method, [...params]) },
|
|
19
|
+
signer: hostSignOnlySigner,
|
|
20
|
+
approval: hostApprovalCapability,
|
|
21
|
+
});
|
|
22
|
+
await execution.execute(completeUnsignedEnvelope);
|
|
23
|
+
await execution.reconcile({ [externalTransactionId]: [explicitTransactionHash] });
|
|
24
|
+
const artifact = await execution.export();
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
`execute` handles one active contiguous operator transaction. Supply every `UnsignedEnvelope` field, including decimal-string nonce, gas, fees, exact value/data, explicit transaction type and access list; inapplicable fees are explicitly `null`. Types 0, 1 and 2 and EOA `operation: 0` are supported. Chain, signer and full envelope are verified against the plan. The signer must match the approved operator, and the executor must have empty code. No business script reruns, route changes, implicit export, or gas/nonce defaults occur.
|
|
28
|
+
|
|
29
|
+
The store freezes and reserves the envelope before the approval capability receives its complete immutable snapshot: context, exact plan transaction, frozen envelope and deterministic signing request ID. This snapshot is reproducible from the immutable context (bound by the durable context hash), durable plan and frozen envelope. The request ID commits to all those fields and cannot change after intent. `withApproval(snapshot, controlledWork)` must validate the whole snapshot and **await** `controlledWork()` while its authority remains active. Throw to deny. The kernel fences continuation if the approval scope ends during awaited signing. The store's lifetime claim remains held through all controlled work.
|
|
30
|
+
|
|
31
|
+
`sign(requestId, unsigned)` must only sign and durably retain its result under that ID. It must never broadcast. The kernel records signing intent first, decodes the actual signed RLP, recovers the signer, compares every frozen field using exact quantities, and durably commits the original bytes/hash before recording submission intent and calling `eth_sendRawTransaction`. A wrong returned hash is an error and never changes the original identity.
|
|
32
|
+
|
|
33
|
+
Recovery is deliberately finite:
|
|
34
|
+
|
|
35
|
+
- `signing`: only `signer.recover(requestId)` may retrieve the original result. This is a read-only lookup, never fresh signing. Missing recovery returns `signing-result-unavailable`.
|
|
36
|
+
- `signed`: after renewed exact approval/validation, submit the durable original bytes once.
|
|
37
|
+
- `submission-uncertain` or `included-unfinalized`: query only the original hash; missing transaction/receipt remains pending. Never resign or resend, even if submission intent was recorded just before a process died without sending.
|
|
38
|
+
- External work: provide explicit hash sets by transaction ID to `reconcile`. It never scans blocks. More than one matching included hash is ambiguous and requires a single reference.
|
|
39
|
+
|
|
40
|
+
`observeEoaTransaction` is a read-only producer for controlled hosts. It verifies RPC chain, full transaction/receipt identity, exact value/data, canonical block height/hash/index inclusion, executor code at that block, and the configured finality. Operator records additionally match the complete frozen envelope and original signature. Missing transactions, receipts or canonical blocks never prove success. Reverts never advance the prefix. Unknown permissions, unavailable signers, unsupported executors/operations, RPC failures and verification mismatches produce explicit errors; they do not authorize another route.
|
|
41
|
+
|
|
42
|
+
Only finalized success advances the contiguous prefix. A transaction hash cannot complete two entries, even if their calls are identical. Unfinalized observations can be reread after reorg/reblock. Every later execution, advancement and trusted-progress export rechecks already-finalized observations; loss of canonical finalized evidence permanently blocks this execution in the store. A transport exception stops the current call without inventing a finality loss. There is no automatic unblock, resubmission, block scanner, persistent scan checkpoint, or Safe adapter.
|
|
43
|
+
|
|
44
|
+
The store's business schema advances from version 1 to version 2 by adding only nullable `executions.blocked_reason`. The verified version 1 schema, existing records, original byte identities and nonce reservations are retained inside the same transactional migration. The authority database/protocol is unchanged. `blockExecution` is a structural store operation for trusted verifiers, not independent chain proof.
|
|
45
|
+
|
|
46
|
+
The focused test `test/delivery-eoa.test.mjs` covers actual ethers signatures, precision, controlled approval/send ordering, hash verification, finality loss and the three new signing/submission process crash boundaries. `test/integration/delivery-eoa.test.mjs` runs one disposable local EOA operator → external-hash → operator scenario with transfers and no contract compilation. These checks do not imply real-chain acceptance or production-host authorization.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# EVM explicit target manifest seam
|
|
2
|
+
|
|
3
|
+
`syncWithHre(options, hre, root)` routes EVM requests with `target` to the explicit project registry. The root must match the HRE project, the network and target must match the active HRE network, and the configured chain ID must match the provider. `config.yaml` selects `.openzeppelin.dev` or the configured production directory. A provider's Hardhat/Anvil metadata does not redirect this path to an OS temporary manifest. No-target EVM sync retains its legacy implementation.
|
|
4
|
+
|
|
5
|
+
Sync compiles and validates the candidate with official OpenZeppelin `getDeployData` and `assertUpgradeSafe`, reads the real ERC-1967 implementation, checks proxy/implementation code, and matches the artifact runtime using compiler immutable references. Reads use the active HRE provider. The implementation key is `version.linkedWithoutMetadata`, including encoded constructor arguments. Layout evidence is the full canonical SHA-256, including namespaces and nested metadata.
|
|
6
|
+
|
|
7
|
+
The existing manifest transaction confines paths, rejects simultaneous canonical/fallback files, and restores original filenames and bytes after ordinary failures. Sync preserves unrelated implementations, admin and proxy kinds; a conflicting proxy kind or same-version layout is refused. A second implementation address for the same version is added to `allAddresses`, preserving the original primary address and deployment hash. A supplied transaction hash fills a missing deployment hash only when its successful receipt proves creation of that implementation. Upgrade receipts are never used for that field. `skipTxHash` skips receipt lookup; immutable workflow evidence binds the actual upgrade receipt separately.
|
|
8
|
+
|
|
9
|
+
Canonical EVM UUPS preparation reads the registered UUPS proxy and current implementation layout from the explicit target registry before calling `assertStorageUpgradeSafe`. It uses official implementation validation and the full namespace-aware layout. It refuses missing baselines. The low-level adapter's documented validation/evidence dependency is a test seam; `prepareWorkflow` always uses the official default and has no request field to bypass storage checks.
|
|
10
|
+
|
|
11
|
+
Run the packed integration fixture from EvmGateTools:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
npm run build
|
|
15
|
+
node --test test/integration/evm-target-manifest.test.mjs
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
The fixture generates a core project through the sibling generator, installs actual packed dependencies offline, and starts an ordinary loopback Hardhat node. It deploys V1/proxy directly for this seam test, syncs dev and prod in separate processes on chain 31337, checks official version/layout/namespace evidence, repeats sync with a same-version deployment, and prepares compatible V2. Ordinary and namespaced incompatible storage and unsafe implementation validation are rejected. Preparation preserves manifests, file inventory and block height; the OpenZeppelin temporary manifest remains untouched. Focused unit tests cover rollback, fallback migration, conflicts, path refusal and receipt semantics.
|
|
19
|
+
|
|
20
|
+
This acceptance does not establish the full CREATE2/multicall lifecycle, execution engine, journal-provided baselines, release readiness, or crash-durable registry promotion. Those are separate delivery tasks.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Delivery export and durable execution records
|
|
2
|
+
|
|
3
|
+
`gate-evm-tools/delivery-export` renders the existing immutable `DeliveryPlan` without running business code, preparation, execution, HRE, a signer or a provider. `renderDeliveryExport(plan)` is a low-level internal renderer, synchronous and without filesystem or chain effects. Its JSON and Markdown contain the same canonical model, including all transactions, references and total-order dependencies, plus a separate current contiguous route/executor segment. Public production delivery uses the reviewed single CALL-array JSON described in [delivery-calldata](delivery-calldata.md), archived under its deployment release. Success means artifact delivery, not deployment or release readiness.
|
|
4
|
+
|
|
5
|
+
Completed progress requires `validateDeliveryProgress({plan, completed, finalized})`, where `completed` contains observation references and `finalized.readFinalized` is a trusted host-owned canonical/finality query. Its live opaque result can be passed to `renderDeliveryExport`. Serialization or copying loses provenance. `exportDelivery` is a convenience wrapper that resolves provenance before rendering. Structural plan/receipt parsing grants no host authorization. No release binding is invented here.
|
|
6
|
+
|
|
7
|
+
`gate-evm-tools/delivery-execution-store` lazily loads `node:sqlite` when `openExecutionStore` is called and requires Node `^22.13.0 || ^24.0.0`. Global package engines are unchanged. The trusted host and CLI must select the **same private local store root across projects and environments**. No project-local default or network filesystem support is provided. The root must be a canonical absolute path without symlink components, owned by the user with mode 0700. A missing final directory can be created only beneath a private parent. Fixed 0600 database files cannot be replaced, linked or aliased.
|
|
8
|
+
|
|
9
|
+
The store keeps a private `authority.sqlite` BEGIN IMMEDIATE lock across the complete awaited claim callback. One session runs globally, including across different nonces. A timeout reports busy; it never grants takeover. Short business commits use a distinct `execution.sqlite`, DELETE journaling, synchronous EXTRA, macOS fullfsync and strict directory synchronization. A UUID and initializing/ready bootstrap marker distinguish interrupted initialization from a missing/truncated established database. SQLite owns hot-journal recovery; this implementation never deletes journals or replaces the authority inode.
|
|
10
|
+
|
|
11
|
+
Typical host flow:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
const store = await openExecutionStore({ trustedRoot: hostSharedStoreRoot });
|
|
15
|
+
const previous = await store.readExecution(plan.executionId);
|
|
16
|
+
await store.withExecutionClaim({
|
|
17
|
+
plan, contextHash: immutableHostContextHash,
|
|
18
|
+
expectedRevision: previous?.revision ?? null,
|
|
19
|
+
}, async (claim, snapshot) => {
|
|
20
|
+
snapshot = store.freezeAndReserve(claim, snapshot.revision, transactionId, unsigned);
|
|
21
|
+
// Later signing/broadcast adapters must be awaited inside this scope.
|
|
22
|
+
});
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
`contextHash` identifies immutable execution context, independently of transaction approval. Each transaction freezes its own full unsigned envelope and digest without resealing the business plan. The same execution can wait for external finalized progress and freeze a later transaction. Reservations are permanent and unique by exact canonical chain/signer/nonce across all aliases, environments and executions in this store. Chain, nonce, value, gas, fees, heights, revisions and epochs use decimal strings/BigInt; bounded transaction indexes and types remain numbers.
|
|
26
|
+
|
|
27
|
+
Every mutation requires the original live claim, current revision/epoch and active transaction. Callback settlement/failure revokes the claim and closes its original connections. `markSigning` persists intent once; reopened signing uncertainty is **not permission to sign again**. `commitSigned` stores exactly one canonical byte record. It does not decode the signature, recover the signer or certify that the bytes match the unsigned envelope. `recordSubmissionIntent` persists uncertainty; it does not send or authorize resend. Signing, cryptographic checks, broadcasting and EOA/Safe reconciliation belong to subsequent units.
|
|
28
|
+
|
|
29
|
+
`recordObservation` accepts an observation reference and a trusted host-owned `readObservation` port, not caller JSON. The port must establish transaction identity, canonical inclusion, execution outcome and configured finality. Only finalized success advances the contiguous prefix; inclusion and revert never permit skipping. Port implementations and signing approvals must not be supplied by agent-generated code. Store snapshots are data, not proof of chain finality or send capabilities.
|
|
30
|
+
|
|
31
|
+
A SQL commit/directory-sync error may leave the original record committed. The live claim is fenced and no durable result is returned; recovery reacquires the lock and rereads original identities, nonce reservations and signed bytes. Do not infer an absent receipt or an uncertain response permits another signature. Tests cover actual process crashes, kernel locking and response loss; they are not power-loss experiments. Durability relies on the documented local-filesystem locking/sync contract.
|
|
32
|
+
|
|
33
|
+
EOA signing and trusted hash reconciliation are provided separately by [`delivery-eoa`](delivery-eoa.md). Business schema version 2 adds a durable execution-level finality block while retaining version 1 records and reservations; the authority protocol is unchanged. `blockedReason` prevents further mutations after a trusted verifier detects lost finalized progress.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Owned delivery business inputs
|
|
2
|
+
|
|
3
|
+
`gate-evm-tools/delivery-inputs` reads an actual full-project handoff and its business files. It provides an immutable business-input snapshot and owned parameter receipts. It does **not** qualify an aggregate plan, grant an execution action, or create a release. Full effective config/HRE correspondence, runtime package identity and the multi-target staging owner are separate gates.
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
import { openDeliveryInputs, consumeDeliveryInputParameters } from 'gate-evm-tools/delivery-inputs';
|
|
7
|
+
|
|
8
|
+
const inputs = openDeliveryInputs({
|
|
9
|
+
workspaceRoot: '/workspace',
|
|
10
|
+
projectRoot: 'contracts/vault',
|
|
11
|
+
request, // The strict delivery request identifying the actual handoff invocation.
|
|
12
|
+
selection: 'development',
|
|
13
|
+
});
|
|
14
|
+
const parameters = inputs.values('localDev'); // Immutable planning inputs.
|
|
15
|
+
const receipt = inputs.parameters('localDev');
|
|
16
|
+
const evidence = inputs.seal(); // Terminal rereads only; no producer invocation.
|
|
17
|
+
const sameParameters = consumeDeliveryInputParameters(receipt);
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The handoff invocation supplies `deploymentId`, `developmentNetwork` and `releaseTargetNetworks`. The reader derives `scripts/tasks/<deploymentId>/`, the ordered manifest steps, upstream canonical definitions and the selected target set. It accepts no caller steps, hashes, source roots, target objects, parameter overrides or pre-parsed documents. Canonical definitions exclude progress and unrelated tasks. Final rereading checks the current invocation's eligibility and the same business definitions. Dependencies may refer to another deployment package in the same project.
|
|
21
|
+
|
|
22
|
+
`selection: 'development'` requires complete effective values and provenance for the development target only. `release` requires every declared production target; `all` requires development and every production target. Effective values may inherit task-owned defaults. Selection controls data coverage. It does not authorize any additional invocation, environment or target action.
|
|
23
|
+
|
|
24
|
+
The new file contract is:
|
|
25
|
+
|
|
26
|
+
| File below the task directory | Shape |
|
|
27
|
+
| --- | --- |
|
|
28
|
+
| `task.yaml` | `{version: 1, id, requirementRef: {planKey, rev}, productionRequirementRef?, developmentNetwork, releaseTargetNetworks, referenceDeploymentId?}`; must match the actual handoff deployment scope |
|
|
29
|
+
| `manifest.yaml` | `{id, description?, steps}`; steps retain their source order |
|
|
30
|
+
| `parameters.schema.json` | Strict draft-07 schema with the existing leaf policies |
|
|
31
|
+
| `parameters.yaml` | `{defaults?: <shared values>, params: {<target>: <network overrides>}}`; without defaults, each selected target supplies complete values |
|
|
32
|
+
| `parameters.provenance.json` | `{version: 1, producers, defaults?: {manual, computed}, targets}` |
|
|
33
|
+
|
|
34
|
+
Each producer definition is `{version, module}`. Its module is a confined project-relative path below this task, for example `scripts/tasks/vault/producers/salt.ts`. Each target provenance entry is `{manual, computed}`, using the existing path maps and exact observation shapes. Copy policies read effective network values expanded from the same actual `parameters.yaml` document. There is no `params.global` or `run.targets` override. A manual observation's `source` is only a source label, never proof of human approval.
|
|
35
|
+
|
|
36
|
+
## Shared parameters and network exceptions
|
|
37
|
+
|
|
38
|
+
Keep one task/manifest/script set for a deployment batch. Put common business parameters in `defaults` and only exceptions in `params.<network>`. Network aliases must belong to the task's declared development/release scope; having defaults does not select additional Hardhat networks. For example:
|
|
39
|
+
|
|
40
|
+
```yaml
|
|
41
|
+
defaults:
|
|
42
|
+
owner: "0x1111111111111111111111111111111111111111"
|
|
43
|
+
feeBps: 100
|
|
44
|
+
params:
|
|
45
|
+
bscProd:
|
|
46
|
+
owner: "0x2222222222222222222222222222222222222222"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
All declared targets inherit `feeBps` and the common owner, except `bscProd`, whose owner is replaced. When `defaults` is present, unchanged networks need no parameter/provenance entry; `params: {}` and `targets: {}` suffice if every value and observation is shared. Both defaults and network overrides are objects. Objects merge recursively; arrays replace completely. Explicit `0`, `false`, empty strings, empty arrays and `null` are preserved; the complete effective value must still satisfy the schema. There is no deletion or fallback on null.
|
|
50
|
+
|
|
51
|
+
Record common observations once in provenance `defaults`, and exceptional observations under `targets.<network>`. With manual policies for the example above:
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"version": 1,
|
|
56
|
+
"producers": {},
|
|
57
|
+
"defaults": {
|
|
58
|
+
"manual": {
|
|
59
|
+
"/owner": {"source": "confirmed-requirement", "value": "0x1111111111111111111111111111111111111111"},
|
|
60
|
+
"/feeBps": {"source": "confirmed-requirement", "value": 100}
|
|
61
|
+
},
|
|
62
|
+
"computed": {}
|
|
63
|
+
},
|
|
64
|
+
"targets": {
|
|
65
|
+
"bscProd": {
|
|
66
|
+
"manual": {"/owner": {"source": "confirmed-network-exception", "value": "0x2222222222222222222222222222222222222222"}},
|
|
67
|
+
"computed": {}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
An explicitly overridden leaf needs its own target observation even if its value equals the default. Unchanged siblings inherit their default observations. Array replacement discards the entire default array's observations; supply observations for every replacement leaf (or the array pointer itself for an empty array). Network-specific computed values such as salts/addresses require matching target observations and verified producer inputs. Do not assume CREATE2 values are reusable when factory, constructor inputs, caller or policy differs.
|
|
74
|
+
|
|
75
|
+
Expansion happens only while opening development/qualification business inputs, before the existing schema and provenance checks. Every selected network gets its complete immutable envelope; computed producers are still verified in separate per-target sessions. Input file digests bind the default/exception definitions and their sources, and the sealed evidence binds the complete resolved values and observations. Simulation, execution and calldata preparation use that same envelope. Production consumes frozen values, with no new runtime parameter override mechanism. Historical dev validation keeps shared defaults and dev overrides bound, allowing only the existing bounded prod-target additions/changes.
|
|
76
|
+
|
|
77
|
+
Development and production share one ordered manifest. Reference business values and CREATE2 salt/predicted address through `$param`, and facilities through `$target`. Schemas constrain formats and types; a dev-specific owner constant must not constrain every network. Network exceptions may therefore produce different calldata and CREATE2 addresses.
|
|
78
|
+
|
|
79
|
+
After development acceptance, an additional confirmed analysis task may describe production targets and parameters under the original deployment ID and `requirementRef`. Production tasks directly depend on it and bind its exact revision through `productionRequirementRef`; task.yaml repeats that binding. Original development task definitions, revisions, confirmations and results remain unchanged. This supplement grants no signing authority and cannot change the original operation kinds or contract source.
|
|
80
|
+
|
|
81
|
+
The historical consumer permits declarative literal-to-parameter migration only when the complete resolved development operations remain identical, including order, arguments, value, salt and expected addresses. Existing parameter values and leaf provenance remain bound, new dev parameters must be used by the shared steps, and new or changed dev computations require new acceptance. Custom operations are excluded from this migration. Production is independently schema/provenance checked, simulated and frozen; historical files and acceptance bytes are never rewritten.
|
|
82
|
+
|
|
83
|
+
## Input ownership
|
|
84
|
+
|
|
85
|
+
Before any producer runs, every source step passes the existing strict native parser or the pure custom-step structural parser. Runtime ABI/reference validation still belongs to the engine. Documents reject duplicate members, aliases, anchors, merge keys, non-string mapping keys, unsafe numeric values and non-JSON data. Files must be confined regular single-link files; symlinks and traversal are rejected. This tightens the new delivery input boundary; the previous YAML parser already rejected duplicate mapping keys.
|
|
86
|
+
|
|
87
|
+
Producers export only synchronous `produce(inputs)`. Inputs are frozen strict JSON. The existing `CustomModuleClosure` owns loading, static dependencies, package resolution and returned-data normalization. There are no provider, state, environment or file-read ports. The actual output must match both the delivered computed observation and the parameter value. Each selected target resolves its envelope once with an isolated producer session. Evidence binds the actual input files, schema, target, producer ID/version/module, complete module closure, inputs/output and resolved envelope identity.
|
|
88
|
+
|
|
89
|
+
`inputs.values()` and `inputs.parameters()` are available while the owner is open. A receipt becomes consumable only after `seal()` succeeds. Sealing rereads input files, handoff eligibility and producer closures without rerunning producers. A failed seal permanently revokes every receipt. Sealing twice and reading through a terminal handle are rejected. `close()` explicitly revokes receipts, including after a successful seal. A copied or self-consistent JSON receipt has no authority. These receipts are process-local; durable production transport is not implemented by this API.
|
|
90
|
+
|
|
91
|
+
`snapshot.targets` contains only validated, frozen version-1 public targets: `id`, `network`, declared `chainId`, `environment`, `finality`, `openzeppelin`, and optional `admin`, `create2`, `uups`, `multicall`. CREATE2 supports `scheme`, `factory`, optional `leadingZeroBytes` and optional `caller`. Zero confirmations and zero leading bytes are retained; omitted fields remain absent. Invalid nulls and arbitrary extras are rejected. Business extensions belong in schema-checked parameters. `admin` and `create2.caller` are business addresses, not executor claims. Both native `$target` references and custom target declarations use the same scalar field boundary.
|
|
92
|
+
|
|
93
|
+
Admin retains the shared engine's semantics: absence, a string that trims to empty, and a case-insensitive `deployer` select the execution signer; valid address strings (including zero) select that address. The public definition retains its original spelling/whitespace and absence so these inputs remain distinct. Invalid types, nulls and invalid checksums are rejected before engine use. Facility address rules remain separate.
|
|
94
|
+
|
|
95
|
+
The public chain ID comes from the current project-owned Hardhat network declaration, with no network catalog. Config and business file evidence contains confined paths and digests, not RPC/account/header capabilities. This input module does not yet attest post-extender effective Hardhat settings. `businessInputHash` is deliberately named separately from the future aggregate `inputsHash`.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Delivery parameter and native-operation validation
|
|
2
|
+
|
|
3
|
+
This is the delivery-only development/consumption boundary. It does not replace legacy `resolveExecutionParameters(...overrides)`, qualify a release, or supply production parameters. Delivery requires the pinned ethers 6.15.0 runtime; this API makes no ethers 5 compatibility claim.
|
|
4
|
+
|
|
5
|
+
## Development and consumption
|
|
6
|
+
|
|
7
|
+
`gate-evm-tools/delivery-parameters` exports `resolveDeliveryParameters` and `consumeDeliveryParameters`. Development supplies the complete target `values`, including manual values and computed outputs. The task-file owner `openDeliveryInputs` can first expand explicit shared defaults and network exceptions; see [the input format](delivery-inputs.md#shared-parameters-and-network-exceptions). This low-level resolver still validates complete values rather than filling defaults, choosing a wallet identity, or silently copying missing target values. The returned version-1 envelope and every nested value are immutable.
|
|
8
|
+
|
|
9
|
+
The production consumer takes only the existing envelope and its independently supplied trusted `identity`. It revalidates schema, observations, provenance and the envelope hash, returns frozen values, and never invokes a producer. There are no overrides or fill-in arguments. The expected identity must come from the caller's trusted development evidence; hashing an arbitrary incoming envelope and trusting that same hash does not authenticate it.
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const resolved = resolveDeliveryParameters({
|
|
13
|
+
target: 'prod',
|
|
14
|
+
schema: {
|
|
15
|
+
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
16
|
+
type: 'object', additionalProperties: false, required: ['enabled'],
|
|
17
|
+
properties: { enabled: { type: 'boolean', 'x-policy': { kind: 'manual' } } },
|
|
18
|
+
},
|
|
19
|
+
values: { enabled: false },
|
|
20
|
+
manual: { '/enabled': { source: 'review-42', value: false } },
|
|
21
|
+
});
|
|
22
|
+
const values = consumeDeliveryParameters(resolved, trustedDevelopmentIdentity);
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Source/manual/computed observations and schema are included in the identity. These are business inputs, not a place for RPC URLs, account material, or secrets. Source files/modules/packages and the compiler, storage-layout and runtime aggregate identities are closed in later work. The producer registry and expected-identity input are versioned trusted seams, not independent production authority.
|
|
26
|
+
|
|
27
|
+
## Schema and JSON policy
|
|
28
|
+
|
|
29
|
+
Ajv 8.17.1 is a direct exact runtime dependency, with strict mode and all errors enabled. Coercion, defaults and removal of unknown properties are disabled. The only accepted dialect is the exact explicit URI `http://json-schema.org/draft-07/schema#`.
|
|
30
|
+
|
|
31
|
+
Supported schema keywords are `$schema` (root only), `title`, `description`, `type`, `properties`, `required`, `additionalProperties`, `items`, `minItems`, `maxItems`, `uniqueItems`, `minProperties`, `maxProperties`, `enum`, `const`, `minimum`, `maximum`, `exclusiveMinimum`, `exclusiveMaximum`, `multipleOf`, `minLength`, `maxLength`, `pattern`, and `x-policy`. Each node requires one explicit type. Objects require a properties map and `additionalProperties:false`; arrays require a single item schema. Formats, defaults, `$ref`, composition/conditional schemas, tuple-schema item lists, pattern properties, and every other dialect/keyword are rejected. No hand-validator fallback exists.
|
|
32
|
+
|
|
33
|
+
All JSON numbers, including schema numeric constraints, are safe integers. Fractional numbers, NaN, infinities, unsafe integers, bigint, undefined, cycles, sparse arrays, extra array properties, symbols, non-enumerable fields, getters and unsupported prototypes are rejected without invoking getters or `toJSON`. Use canonical decimal strings for large ABI integers. Plain objects and null-prototype objects are accepted; arrays require the ordinary array prototype.
|
|
34
|
+
|
|
35
|
+
The general own-data copier preserves own `__proto__`, `constructor`, and `prototype` keys deterministically using property definitions. Parameter schema property names explicitly reject these three names because Ajv's generated treatment of `__proto__` is unsuitable for this policy. They are never silently ignored or used to mutate prototypes.
|
|
36
|
+
|
|
37
|
+
## Per-leaf provenance
|
|
38
|
+
|
|
39
|
+
`x-policy` has one exact shape:
|
|
40
|
+
|
|
41
|
+
- `{kind:'copy', target:'dev', path:'/source/path'}`
|
|
42
|
+
- `{kind:'manual'}`
|
|
43
|
+
- `{kind:'computed', producer:'salt', version:'1'}`
|
|
44
|
+
|
|
45
|
+
Policies inherit down objects and array items until a child overrides them. A copy policy's JSON pointer anchors at the node declaring it; descendant paths append relative segments, including concrete array indexes. Children explicitly marked manual/computed must provide their own observations even when their parent is copied. Empty containers count as leaves. Ambiguous schema composition is unsupported.
|
|
46
|
+
|
|
47
|
+
Every actual leaf binds target, JSON pointer, policy and value hash. Copy observations additionally bind source target, source pointer, source leaf content and entire source-target identity, and compare the actual source value. Manual observations are keyed by target JSON pointer and have `{source, value}`; the source identifier must be nonempty and the value must match. Computed observations have `{producer, version, inputs, output}` and bind input/output identities. Development invokes the trusted registry's matching versioned producer over frozen inputs and compares its actual output. Unused manual/computed observations fail. Production verifies existing observations and identities without recomputation.
|
|
48
|
+
|
|
49
|
+
## Business references and ABI validation
|
|
50
|
+
|
|
51
|
+
Business references use `$param.path`, `$target.path`, `$state.path`, or an exact `{$ref:'param.path'}` / `target.path` / `state.path` object. Dot-separated segments contain only ASCII letters, digits, `_`, or `-`; numeric segments index arrays. Unknown namespaces, extra `$ref` fields, missing/undefined values, accessors and reference cycles fail. Referenced values are resolved recursively. Each resolution reads at most one state snapshot, safely traverses own enumerable data descriptors, and strictly validates the selected subtree. Unrelated optional runtime metadata may be undefined; a referenced undefined, accessor, non-plain or cyclic value still fails. Observation identities hash the selected source subtree and its resolved value. Schema `$ref` has no relationship to this syntax and is unsupported.
|
|
52
|
+
|
|
53
|
+
Public target references are scalar leaves only: `id`, `environment`, `chainId`, `admin`, `create2.scheme`, `create2.factory`, `uups.placeholderImplementation`, and `multicall.controlledMulticall`. The resolver never traverses or hashes the other target fields. Each resolved reference records its namespace/path and actual source/resolved content identities. `runDeliverySteps` returns immutable reference observations; `collectDeliveryPlan` exposes them by source step in `runtimeEvidence.references`. They remain internal evidence, not a release seal.
|
|
54
|
+
|
|
55
|
+
One ethers-parsed recursive ABI validator handles constructor/init/upgrade/call/view/check arguments and check expectations. Booleans must be booleans; integers accept safe integer numbers or canonical decimal strings and use exact BigInt ranges. Addresses must be valid EVM addresses; bytes are even hex with exact fixed sizes. Arrays enforce fixed lengths. Tuples accept positional arrays or exact named own-data objects with unique nonempty ABI names. Missing/extra arguments and fields fail. Runtime bigint and ethers Result values cross an explicit normalization function; arbitrary objects are never converted with `String`/`toString`.
|
|
56
|
+
|
|
57
|
+
## Execution and preparation guarantees
|
|
58
|
+
|
|
59
|
+
Delivery always installs its own validation adapter, replacing any caller-provided no-op shared port. Collection preflights the complete known native source list before sending. Each custom module's complete emitted list is independently preflighted before its first operation. Future custom modules are not executed speculatively. Static preflight resolves immutable params/target references and defers state-reference values without reading state. Methods, the outer argument count, known sibling values and known array/tuple shapes are still checked. An individual argument or nested tuple/array may come from future state; the entire outer argument list must have known shape. Final resolved arguments, check expectations and values validate again before encoding/invoking/sending.
|
|
60
|
+
|
|
61
|
+
Artifact ABI comes from the explicit runtime artifact reader, never an address resolver. The optional neutral core hook checks a detached actual artifact after compilation, before constructor or initializer encoding. Fresh, expected-replay and disk preparation paths all rederive semantics before evidence is journaled or transactions are planned/sent. Reuse never reruns fresh preparation, compilation, or deployment-status selection.
|
|
62
|
+
|
|
63
|
+
Supplied CREATE2 fields validate independently of constructor availability, including effective redeploy-policy fields. Factory, salt, expected address and leading-zero types/ranges cannot hide behind a deferred constructor. Resolved fields validate again before shared extraction; invalid supplied values never become absent or fall back to defaults. Forward values accept nonnegative safe integers or canonical decimal strings within uint256; safe integer numbers normalize explicitly to decimal strings, including zero. Only prediction-dependent comparisons wait for the constructor/factory/salt to resolve. Upgrade preflight requires both target factory and controlled multicall fields; deferred references remain allowed and their resolved addresses validate again before preparation.
|
|
64
|
+
|
|
65
|
+
CREATE2 derives constructor input and init-code hash from actual artifact ABI/bytecode, actual factory and salt. Every role's address, salt, constructor input and init-code hash is compared; false expected addresses or leading-zero policies fail. UUPS implementation uses `implementationSalt`; the actual ERC1967Proxy artifact uses `[placeholderImplementation,'0x']` and `proxySalt`. Full factory calldata/value and upgrade proxy/implementation/initializer data are compared, including reused/zero-transaction plans. Original `required`/`reused` status decisions remain part of existing preparation/replay evidence; this check establishes current artifact/request/calldata consistency, not independent chain-state or release authority. Legacy shared execution without the optional port retains its loading isolation and behavior.
|