Skip to content

Deploy workflow for the audited 0.1.30 orchestrator set - #314

Merged
thedavidmeister merged 1 commit into
mainfrom
2026-08-17-orchestrator-manual-sol-artifacts
Aug 27, 2026
Merged

Deploy workflow for the audited 0.1.30 orchestrator set#314
thedavidmeister merged 1 commit into
mainfrom
2026-08-17-orchestrator-manual-sol-artifacts

Conversation

@hardyjosh

@hardyjosh hardyjosh commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Why

The ST0xOrchestrator has no deploy workflow. manual-sol-artifacts-0-1-1.yaml ships only the audited 0.1.1 bootstrap set — which predates the orchestrator — and the current-source deploy path was deliberately removed (5680253: deploys must be audited versions only). This blocks shipping the orchestrator set to the bootstrap networks for the multichain rollout.

What

Follows the documented process for deploying a later audited version: freeze its numbered snapshot and give it its own version-specific deploy script.

  • src/generated/0_1_30/ — the frozen audited snapshot, deliberately PARTIAL: only the orchestrator's six-contract dependency closure (facet, receipt, receipt vault, OARV beacon-set deployer, orchestrator, orchestrator beacon-set deployer). The wrapped-token-vault chain, authorizers and unified deployer stay 0.1.1-only — their production instances come from the audited 0.1.1 bootstrap set. Each file extracted byte-identical from tag sol-v0.1.30 (= candidate at that commit). The tag's commit 4f126183 is the exact commit Protofire's st0x.deploy 6.0 report (Aug 2026) reviews — all issues marked fixed. Because the H01 remediation's optimizer change moved every address, there are no 0.1.1 twins: all six suites deploy fresh on every network, Base included.
  • src/generated/LibProdDeployV4.sol — regenerated by BuildPointers to emit the _0_1_30 alias set (+68 lines, no other changes; git-clean CI pins the regeneration).
  • script/DeployProdV4_0_1_30.sol — mirrors DeployProdV4_0_1_1.sol: stored _0_1_30 creation bytecode, _0_1_30 address/codehash pins, one suite per dispatch. Covers exactly the orchestrator's on-chain dependency closure, in deploy order: corporate-actions facet → receipt → receipt vault → OARV beacon-set deployer → orchestrator → orchestrator beacon-set deployer. Dependency pointers enforce the order structurally (including orchestrator → OARV set-deployer, since initialize hard-reverts via the vault-logic version lock until the set-deployer it was built against has code).
  • .github/workflows/manual-sol-artifacts-0-1-30.yaml — mirrors the 0.1.1 workflow; networks base / ethereum / hyperevm, --legacy on HyperEVM, verify: false (stored-bytecode deploys stay verifiable from the tag even after source drifts; verify manually).
  • Tests — frozen-redeploy coverage for the all six 0.1.30 contracts (no 0.1.1 twins exist at this release), and the 0.1.30 block in testTaggedRuntimeHashesToCodehash.
  • CLAUDE.md — documents the 0.1.8 deploy surface.

Current on-chain state (checked 2026-08-25)

Nothing at the 0.1.30 addresses on any chain — the optimizer change moved every address, so Base's 0.1.8-era closure does not carry over. All six suites are real deploys on base / ethereum / hyperevm.

Verification

  • LibProdDeployV4.t.sol: 39 pass.
  • slither .: 0 results. forge fmt --check, reuse lint, BuildPointers regeneration all clean/idempotent.
  • Fork simulation of a fresh suite against Ethereum: simulates the Zoltu deploy cleanly.
  • Full forge test locally: only failures are public-RPC 429s / missing private RPC env vars for fork tests (no logic failures).

Out of scope

Creating an orchestrator instance (ST0xOrchestratorBeaconSetDeployer.deploy(owner)) is a non-deterministic operation with a per-chain owner decision — that stays an ops step (dated script / runbook), not a suite.

🤖 Generated with Claude Code

https://claude.ai/code/session_01KbsbYN4C4YDa8pu9DdudoX

Summary by CodeRabbit

  • New Features

    • Added deployment support for the audited 0.1.30 ST0x orchestrator contract suite across Base, Ethereum, and HyperEVM.
    • Added selectable deployment suites with dependency-aware deployment ordering and network validation.
    • Added a manually triggered deployment workflow with network and suite selection.
  • Tests

    • Added coverage verifying frozen 0.1.30 deployments, runtime bytecode, and code hashes for six orchestrator components.

@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 307715a4-5cc7-458d-9074-155253e5604a

📥 Commits

Reviewing files that changed from the base of the PR and between 1c7e986 and 511811c.

⛔ Files ignored due to path filters (7)
  • src/generated/0_1_30/ST0xOrchestrator.pointers.sol is excluded by !**/generated/**
  • src/generated/0_1_30/ST0xOrchestratorBeaconSetDeployer.pointers.sol is excluded by !**/generated/**
  • src/generated/0_1_30/StoxCorporateActionsFacet.pointers.sol is excluded by !**/generated/**
  • src/generated/0_1_30/StoxOffchainAssetReceiptVaultBeaconSetDeployer.pointers.sol is excluded by !**/generated/**
  • src/generated/0_1_30/StoxReceipt.pointers.sol is excluded by !**/generated/**
  • src/generated/0_1_30/StoxReceiptVault.pointers.sol is excluded by !**/generated/**
  • src/generated/LibProdDeployV4.sol is excluded by !**/generated/**
📒 Files selected for processing (3)
  • .github/workflows/manual-sol-artifacts-0-1-30.yaml
  • script/DeployProdV4_0_1_30.sol
  • test/src/lib/LibProdDeployV4.t.sol

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The PR adds a 0.1.30 deterministic deployment script and manual workflow for six contracts across three networks. It also adds runtime-codehash assertions and frozen redeployment tests for the 0.1.30 dependency closure.

Changes

0.1.30 Frozen Deployment

Layer / File(s) Summary
Deployment script and dependency ordering
script/DeployProdV4_0_1_30.sol
The script validates networks and suites, then deploys six contracts with pinned bytecode, addresses, code hashes, and dependencies.
Manual deployment workflow
.github/workflows/manual-sol-artifacts-0-1-30.yaml
The workflow exposes suite and network choices, enables legacy transactions for HyperEVM, disables verification, and forwards deployment secrets.
Runtime and frozen redeployment validation
test/src/lib/LibProdDeployV4.t.sol
Tests verify six runtime codehashes and frozen redeployments. The 0.1.30 snapshot covers the receipt, receipt vault, corporate-actions facet, OARV beacon-set deployer, orchestrator, and orchestrator beacon-set deployer.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to 51181

This change adds the audited 0.1.30 orchestrator deployment workflow and its frozen artifacts; the listed checks and simulations pass, so no actionable merge-blocking risk remains beyond normal checks and review.

Sequence Diagram(s)

sequenceDiagram
  participant Operator
  participant ManualWorkflow
  participant Deploy
  participant LibRainDeploy
  participant TargetNetwork
  Operator->>ManualWorkflow: Select suite and network
  ManualWorkflow->>Deploy: Run Deploy.run()
  Deploy->>LibRainDeploy: Deploy pinned contract and dependencies
  LibRainDeploy->>TargetNetwork: Broadcast deployment transaction
  TargetNetwork-->>LibRainDeploy: Return deployed code and address
Loading

Poem

A rabbit checks the bytecode bright
Six frozen contracts stand just right
The workflow hops from choice to chain
Hashes match through sun and rain
“Deploy,” says Bun, “then test again!”

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main changes: adding a deployment workflow for the audited 0.1.30 orchestrator set. It matches the version and deployment focus shown in the changed files…
Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0 files. (3 skipped: 3 unsupported.)

Full details: Title check

Explanation

The title clearly and concisely describes the main changes: adding a deployment workflow for the audited 0.1.30 orchestrator set. It matches the version and deployment focus shown in the changed files.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 2026-08-17-orchestrator-manual-sol-artifacts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@hardyjosh
hardyjosh force-pushed the 2026-08-17-orchestrator-manual-sol-artifacts branch 2 times, most recently from 1c7e986 to 511811c Compare August 25, 2026 08:09
hardyjosh added a commit that referenced this pull request Aug 25, 2026
## Why

Main's test CI (and cron) has been red since **2026-08-22**, and #314's inherits it: the `20260810-revoke-fireblocks-service-signer` Safe bundles **executed on all three chains** (verified live — the retired signer `0x1C66…D1A9` holds no `DEPOSIT`/`WITHDRAW`/`CERTIFY` on Base, Ethereum, or HyperEVM), which flipped its forcing-function tests red by design: they demand this pin PR.

## What (per the script's own retire instructions)

- **Canonical grant map**: the retired signer's three rows leave `expectedGrants` (16 → 13 entries). The `GRANTEE_SERVICE_1C66` constant stays as the audit-trail record.
- **The revocation is pinned as an absence**: `assertExpectedGrants` gains `assertRetiredSignerAbsent` — any action role landing back on the retired signer red-lines cron with the new `UnexpectedRetiredSignerGrant`. Strictly stronger than the old presence rows.
- **Spent fixtures retire**: the script, its `run-script.yaml` registry entry, the `.prod.t.sol` forcing tests, the unit tests, and both harnesses are deleted — the standing absence assertion supersedes their pre-flight per the registry's deletion rule.

## Consumers of the retired rows (second round — surfaced by CI, masked locally by RPC rate limits)

- `20260619-deploy-v4-authoriser-clone`: `MIRROR_COUNT` 9 → 6 (the operational slice is now Safe + service signer) plus its replica test.
- `20260729-migrate-governance-to-timelock`: the governance-loop proof's sample no-op op re-granted `DEPOSIT` to the retired signer — post-revocation that's a real grant and trips the absence check. Now re-grants to the live signer (`GRANTEE_SERVICE_3D0C`, a genuine no-op again).
- `20260723-provision-additional-service-signer` drift test: drift is now created by revoking the Safe's `DEPOSIT` row instead of the departed retired-signer row.

## Verification

Against live forks on all three chains: the full previously-red set passes — provisioning prod tests (`AlreadyProvisioned` refusals restored), timelock-migration surface, cross-chain parity, Base prod-state, Ethereum clone pin. `slither .` 0, fmt/reuse clean.

## Merge order

This merges **first**; the orchestrator stack (#314#316#317) restacks on it and its inherited test failures disappear.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01KbsbYN4C4YDa8pu9DdudoX


<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

* **Updates**
  * Retired service signer access has been removed from the expected authorization configuration.
  * Authorization grants now reflect six operational grants, with Safe grants listed before service grants.
  * Governance validation now uses the active service signer for `DEPOSIT`.
  * Added checks to prevent accidental regranting of roles to the retired signer.

* **Maintenance**
  * Removed the retired signer revocation workflow and its associated validation tests.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
The ST0xOrchestrator had no deploy workflow: manual-sol-artifacts-0-1-1
ships only the audited 0.1.1 bootstrap set (which predates the
orchestrator) and the current-source deploy path was removed because
deploys must be audited versions only.

Restore src/generated/0_1_8/ — byte-identical to the same dir at tag
sol-v0.1.14 (commit ed767bf), the commit Protofire audited as
"st0x.deploy 5.0" (July 2026) and whose source compiles to this
snapshot byte-identically. BuildPointers regenerates LibProdDeployV4
with the _0_1_8 alias set (git-clean CI pins the regeneration).

script/DeployProdV4_0_1_8.sol + manual-sol-artifacts-0-1-8.yaml ship
the orchestrator's on-chain dependency closure from the stored 0.1.8
creation bytecode, one suite per dispatch, to base / ethereum /
hyperevm: corporate-actions facet -> receipt -> receipt vault -> OARV
beacon-set deployer -> orchestrator -> orchestrator beacon-set
deployer. All six are already live on Base at the pinned addresses
(dispatches there are idempotent no-ops); Ethereum and HyperEVM carry
only the 0.1.1 bootstrap set, so this workflow is the path to ship the
audited orchestrator set there.

Tests: frozen-redeploy coverage for the seven 0.1.8 contracts distinct
from 0.1.1, twin-equality pins for the five byte-identical 0.1.1
twins, and 0.1.8 runtime-hash consistency in
testTaggedRuntimeHashesToCodehash.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KbsbYN4C4YDa8pu9DdudoX
@hardyjosh
hardyjosh force-pushed the 2026-08-17-orchestrator-manual-sol-artifacts branch from 511811c to 985cfa0 Compare August 25, 2026 11:13
@thedavidmeister thedavidmeister changed the title Deploy workflow for the audited 0.1.8 orchestrator set Deploy workflow for the audited 0.1.30 orchestrator set Aug 27, 2026
@thedavidmeister
thedavidmeister merged commit c7c74eb into main Aug 27, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants