Skip to content

chore(deps): bump OpenZeppelin 5.6.1 → 5.7.0 — only the wrapped vault's bytecode moves - #300

Open
thedavidmeister wants to merge 1 commit into
mainfrom
chore/bump-oz-5-7-0
Open

chore(deps): bump OpenZeppelin 5.6.1 → 5.7.0 — only the wrapped vault's bytecode moves#300
thedavidmeister wants to merge 1 commit into
mainfrom
chore/bump-oz-5-7-0

Conversation

@thedavidmeister

Copy link
Copy Markdown
Contributor

What

Bumps @openzeppelin-contracts and @openzeppelin-contracts-upgradeable soldeer deps 5.6.1 → 5.7.0, sweeps the versioned import prefixes across src/test/script, regenerates the candidate pointers to a fixpoint, and records the result in the CHANGELOG.

The byte-level answer this PR exists to give

  • Governance timelock: byte-identical. testTimelockPinsMatchCompiledDependency passes unchanged against the 5.7.0 dependency — the frozen TIMELOCK_CREATION_CODE / TIMELOCK_RUNTIME_CODEHASH pins (and therefore the three live deployments) are reproduced exactly. Independently cross-checked by compiling both tags standalone under the repo's exact profile: identical 8,149-byte creation code, identical runtime keccak 0xb623…6993.
  • Exactly one contract's bytecode moves: StoxWrappedTokenVault. 5.7.0's ERC4626Upgradeable swaps its private _tryGetAssetDecimals for the shared SafeERC20.tryGetDecimals helper. The candidate pointer regeneration cascades through everything embedding the vault's Zoltu address: its beacon, the beacon-set deployer, the unified deployer, and the orchestrator pair. Frozen release-tag snapshots are untouched — nothing deployed changes until a release is cut, at which point this is a new-tag event per the versioning rules.
  • Everything else (receipt vault, receipt, authoriser machinery, deployers on the receipt side) compiles byte-identical.

Reviewer decision

rain-vats 0.1.6 still imports @openzeppelin-contracts-5.6.1/ prefixes internally, so two remappings.txt lines bridge those onto the 5.7.0 install (same class of bridge as the existing @openzeppelin/contracts/ line, documented in the CHANGELOG; soldeer regenerating the file would need them re-applied). The alternative is waiting for rain-vats to republish against 5.7.0 and bumping in lockstep — this PR takes the bridge; call it out if you'd rather wait.

QA

  • Discriminating tests: testCandidateSelfConsistent — fails on base source combined with this branch's regenerated pointers, and was observed failing live on this branch before the pointer fixpoint (candidate constants vs 5.7.0 compile mismatch); testTimelockPinsMatchCompiledDependency deliberately does NOT discriminate — its passing under 5.7.0 IS the byte-identity claim.
  • Mutations applied: reverting any regenerated pointer constant to its 5.6.1 value → killed by testCandidateSelfConsistent (observed directly: the pre-fixpoint tree, where the beacon pointer still carried the 5.6.1-era embedded vault address, failed exactly there with the mismatched bytecode in the assertion output). Dep-version line itself: reverting foundry.toml to 5.6.1 alone → build breaks on the swept import prefixes (compile-time kill).
  • Oracle: the compiled artifacts of the version-locked OZ deps under the repo's single [profile.default] (solc 0.8.25, optimizer 2000, cancun, no metadata) — pointer expectations come from the compiler over the dependency, never hand-written; for the timelock additionally the three live on-chain deployments the frozen pins describe.
  • Category check: no linked issue — scope is the bump itself: both OZ deps moved together, import sweep verified grep-zero on old prefixes (sole survivor is the frozen-pin provenance doc, deliberate), pointer cascade regenerated to fixpoint (3 passes), CHANGELOG entry added.

🤖 Generated with Claude Code

The only production bytecode this moves is StoxWrappedTokenVault: 5.7.0's
ERC4626Upgradeable swaps its private _tryGetAssetDecimals for the shared
SafeERC20.tryGetDecimals helper. The candidate pointers regenerate to a
fixpoint, cascading through everything that embeds the vault's Zoltu
address: its beacon, the beacon-set deployer, the unified deployer and the
orchestrator pair. Frozen release-tag snapshots are untouched; nothing
deployed changes until a release is cut.

Everything else compiles byte-identical under 5.7.0 — in particular the
governance timelock: testTimelockPinsMatchCompiledDependency passes
unchanged against the 5.7.0 dependency, proving the frozen
TIMELOCK_CREATION_CODE / TIMELOCK_RUNTIME_CODEHASH pins (and therefore the
three live deployments) are exactly reproduced by the new version.

rain-vats 0.1.6 still imports @openzeppelin-contracts-5.6.1/ prefixes
internally; two remappings.txt bridge lines point those at the 5.7.0
install so exactly one OZ copy compiles (same class of bridge as the
existing @openzeppelin/contracts/ line; re-apply if soldeer regenerates
the file) until rain-vats republishes against 5.7.0.

Bump-protocol suites all green: LibERC20Storage + LibERC1155Storage
(ERC-7201 layout pins), LibStockSplit, LibRebase sequential precision,
LibTotalSupply fuzz, LibTimelockInvariants, testCandidateSelfConsistent.
StoxReceiptVault runtime 24,058 bytes (518 under EIP-170).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@thedavidmeister thedavidmeister self-assigned this Aug 11, 2026
@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@thedavidmeister, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 58 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 5f68e16a-025a-44f4-a6b9-a1ce31db1222

📥 Commits

Reviewing files that changed from the base of the PR and between bb14c7b and 046940a.

⛔ Files ignored due to path filters (9)
  • soldeer.lock is excluded by !**/*.lock
  • src/generated/LibProdDeployCurrent.sol is excluded by !**/generated/**
  • src/generated/LibProdDeployV4.sol is excluded by !**/generated/**
  • src/generated/candidate/ST0xOrchestrator.pointers.sol is excluded by !**/generated/**
  • src/generated/candidate/ST0xOrchestratorBeaconSetDeployer.pointers.sol is excluded by !**/generated/**
  • src/generated/candidate/StoxUnifiedDeployer.pointers.sol is excluded by !**/generated/**
  • src/generated/candidate/StoxWrappedTokenVault.pointers.sol is excluded by !**/generated/**
  • src/generated/candidate/StoxWrappedTokenVaultBeacon.pointers.sol is excluded by !**/generated/**
  • src/generated/candidate/StoxWrappedTokenVaultBeaconSetDeployer.pointers.sol is excluded by !**/generated/**
📒 Files selected for processing (76)
  • CHANGELOG.md
  • foundry.toml
  • remappings.txt
  • script/20260619-deploy-v4-authoriser-clone.s.sol
  • script/20260623-upgrade-receipt-vaults-to-v4.s.sol
  • script/20260706-deploy-tokens-ethereum.s.sol
  • script/20260716-migrate-beacon-owners-ethereum.s.sol
  • script/20260722-migrate-beacon-owners-hyperevm.s.sol
  • script/20260722-swap-remaining-vault-authorisers.s.sol
  • script/20260722-swap-rklb-authoriser.s.sol
  • script/20260723-provision-additional-service-signer.s.sol
  • script/20260807-deploy-missing-tokens.s.sol
  • script/MigrateBeaconOwners.s.sol
  • src/concrete/ST0xOrchestrator.sol
  • src/concrete/StoxReceipt.sol
  • src/concrete/StoxReceiptVault.sol
  • src/concrete/StoxWrappedTokenVault.sol
  • src/concrete/StoxWrappedTokenVaultBeacon.sol
  • src/concrete/deploy/ST0xOrchestratorBeaconSetDeployer.sol
  • src/concrete/deploy/StoxUnifiedDeployer.sol
  • src/concrete/deploy/StoxWrappedTokenVaultBeaconSetDeployer.sol
  • src/interface/IST0xVaultBeaconSet.sol
  • src/lib/LibAuthoriserInvariants.sol
  • src/lib/LibBeaconInvariants.sol
  • src/lib/LibSafeOps.sol
  • src/lib/LibTimelockInvariants.sol
  • test/concrete/MockERC20.sol
  • test/script/20260619-deploy-v4-authoriser-clone.t.sol
  • test/script/20260623-upgrade-receipt-vaults-to-v4.t.sol
  • test/script/20260706-deploy-tokens-ethereum.t.sol
  • test/script/20260723-provision-additional-service-signer.prod.t.sol
  • test/script/20260723-provision-additional-service-signer.t.sol
  • test/script/20260807-deploy-missing-tokens.t.sol
  • test/src/concrete/InvariantVault.sol
  • test/src/concrete/Mock1271.sol
  • test/src/concrete/ST0xOrchestrator.t.sol
  • test/src/concrete/StoxCorporateActionsFacet.authorizerIntegration.t.sol
  • test/src/concrete/StoxReceipt.t.sol
  • test/src/concrete/StoxReceiptRebaseIntegrationTest.t.sol
  • test/src/concrete/StoxReceiptVault.setAuthorizerGuard.t.sol
  • test/src/concrete/StoxReceiptVault.t.sol
  • test/src/concrete/StoxReceiptVaultMigrationIntegrationTest.t.sol
  • test/src/concrete/StoxWrappedTokenVault.t.sol
  • test/src/concrete/StoxWrappedTokenVaultBeacon.t.sol
  • test/src/concrete/StoxWrappedTokenVaultV1.prod.base.t.sol
  • test/src/concrete/TestStoxReceiptVault.sol
  • test/src/concrete/authorize/StoxOffchainAssetReceiptVaultAuthorizerV1.initializeGuard.t.sol
  • test/src/concrete/authorize/StoxOffchainAssetReceiptVaultAuthorizerV1.t.sol
  • test/src/concrete/authorize/StoxOffchainAssetReceiptVaultPaymentMintAuthorizerV1.corporateActionPairingGap.t.sol
  • test/src/concrete/authorize/StoxOffchainAssetReceiptVaultPaymentMintAuthorizerV1.t.sol
  • test/src/concrete/deploy/BeaconOwnerMigrationPin.t.sol
  • test/src/concrete/deploy/ST0xOrchestratorBeaconSetDeployer.t.sol
  • test/src/concrete/deploy/StoxCrossChainParity.t.sol
  • test/src/concrete/deploy/StoxProdV2.t.sol
  • test/src/concrete/deploy/StoxProdV4.t.sol
  • test/src/concrete/deploy/StoxUnifiedDeployer.ierc165.t.sol
  • test/src/concrete/deploy/StoxUnifiedDeployer.prod.base.t.sol
  • test/src/concrete/deploy/StoxWrappedTokenVaultBeaconSetDeployer.ierc165.t.sol
  • test/src/concrete/deploy/StoxWrappedTokenVaultBeaconSetDeployer.t.sol
  • test/src/concrete/integration/BurnAfterForwardSplit.t.sol
  • test/src/concrete/integration/BurnFractionalSplitTruncationDust.t.sol
  • test/src/concrete/integration/BurnHappyPath.t.sol
  • test/src/concrete/integration/BurnInfoAuditTrail.t.sol
  • test/src/concrete/integration/CertificationLapse.t.sol
  • test/src/concrete/integration/GuardHaltsAfterVaultBeaconUpgrade.t.sol
  • test/src/concrete/integration/MintWithEcdsaSignature.t.sol
  • test/src/concrete/integration/OrchestratorIntegrationTest.sol
  • test/src/concrete/integration/ReceiptTransferInLowersPointer.t.sol
  • test/src/concrete/upgrade/V3UpgradeShadowFork.t.sol
  • test/src/lib/LibAuthoriserInvariants.t.sol
  • test/src/lib/LibBeaconInvariants.t.sol
  • test/src/lib/LibProdTokenConfig.t.sol
  • test/src/lib/LibTimelockInvariants.t.sol
  • test/src/lib/LibTokenInvariants.addresses.t.sol
  • test/src/lib/TestERC1155.sol
  • test/src/lib/TestERC20.sol

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.

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.

1 participant