Skip to content

Conversation

@0xValera
Copy link
Collaborator

What ❔

Why ❔

Checklist

  • PR title corresponds to the body of PR (we generate changelog entries from PRs).
  • Tests for the changes have been added / updated.
  • Documentation comments have been added / updated.

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines 30 to 35
/// @param _plonkVerifier The address of the PLONK verifier contract.
/// @param _initialOwner The address of the initial owner of this contract.
constructor(IVerifierV2 _fflonkVerifier, IVerifier _plonkVerifier, address _initialOwner) {
fflonkVerifiers[0] = _fflonkVerifier;
/// @dev FFLONK is not supported for ZKsync OS as it has been deprecated.
constructor(IVerifier _plonkVerifier, address _initialOwner) {
plonkVerifiers[0] = _plonkVerifier;
_transferOwnership(_initialOwner);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Constructor signature now incompatible with existing callers

The constructor at this location now accepts only a PLONK verifier and the owner, but the rest of the repo still constructs ZKsyncOSDualVerifier with the old three-argument signature (e.g., ZKsyncOSTestnetVerifier calls ZKsyncOSDualVerifier(_fflonkVerifier, _plonkVerifier, _initialOwner) at l1-contracts/contracts/state-transition/verifiers/ZKsyncOSTestnetVerifier.sol:15-20 and GatewayCTMDeployer instantiates it with fflonk + plonk addresses at l1-contracts/contracts/state-transition/chain-deps/GatewayCTMDeployer.sol:328-347). With this change the project no longer compiles because those call sites supply too many arguments.

Useful? React with 👍 / 👎.

Comment on lines +38 to 43
/// @notice Adds a new PLONK verifier for the specified version.
/// @param version The version number for the verifier.
/// @param _plonkVerifier The address of the PLONK verifier contract.
/// @dev Only PLONK verifiers are supported. FFLONK has been deprecated for ZKsync OS.
function addVerifier(uint32 version, IVerifier _plonkVerifier) external onlyOwner {
plonkVerifiers[version] = _plonkVerifier;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge addVerifier API change breaks existing deployment script

The addVerifier function now only accepts a PLONK verifier, but the deployment script still calls addVerifier(DEFAULT_ZKSYNC_OS_VERIFIER_VERSION, IVerifierV2(...), IVerifier(...)) (see l1-contracts/deploy-scripts/DeployCTM.s.sol:223-227). This mismatch causes a compile-time error and prevents the deployment script from building.

Useful? React with 👍 / 👎.

@0xValera 0xValera requested a review from Deniallugo as a code owner December 2, 2025 19:12
@github-actions
Copy link

github-actions bot commented Dec 2, 2025

Coverage after merging vg/oz-zkos-L-10 into draft-v30 will be

81.94%

Coverage Report<
FileStmtsBranchesFuncsLinesUncovered Lines
contracts/bridge
   BridgeHelper.sol100%100%100%100%
   BridgedStandardERC20.sol82.14%100%92.31%80.28%120–121, 126–127, 139–140, 164, 205, 212, 219, 229–230, 63, 91
   L1ERC20Bridge.sol94%100%100%92.86%189, 208, 270
   L1Nullifier.sol83.18%100%86.21%82.70%115, 129–131, 161, 222, 225, 235, 238, 248, 251, 419–421, 425–426, 453, 519, 603, 615, 653, 655, 699, 711, 714, 716, 729, 742–743, 747–748, 768
   UpgradeableBeaconDeployer.sol0%100%0%0%15–16, 18, 20–21
contracts/bridge/asset-router
   AssetRouterBase.sol82.93%100%66.67%87.50%163, 53, 67, 84
   L1AssetRouter.sol87.83%100%86.21%88.13%101, 109, 235, 273, 289, 376, 387, 418, 457–458, 472, 503, 575, 664, 675, 689, 694, 75, 93
contracts/bridge/interfaces
   AssetHandlerModifiers.sol75%100%100%66.67%13
contracts/bridge/ntv
   L1NativeTokenVault.sol86.72%100%90.48%85.98%173–179, 181, 249–250, 252, 263, 265, 271, 95
   NativeTokenVaultBase.sol79.90%100%64.71%83.13%170, 222, 227, 244, 262, 267, 271, 283, 302, 310, 421, 428, 44, 46, 479, 48, 494, 50, 505, 522, 545, 555–556, 560–561, 74, 90
contracts/bridgehub
   BridgehubBase.sol80.10%100%78.38%80.49%128, 133, 135–136, 143, 161, 191, 201–202, 211, 226, 265, 268, 287, 303, 334, 38, 40, 42, 454, 458, 462–463, 482, 485, 541, 545, 548, 586–587, 591–592
   CTMDeploymentTracker.sol73.47%100%81.82%71.05%107, 111, 115, 140, 144–145, 33, 41, 66, 79–80
   ChainAssetHandlerBase.sol46.05%100%22.22%53.45%106, 113–114, 147, 164, 167, 179–180, 225, 242–243, 247–248, 252–253, 257–258, 45, 48, 51, 54, 57, 63, 65, 67, 69, 71
   L1Bridgehub.sol88.14%100%92.31%87.62%102, 112, 124, 241, 314, 318–319, 322, 64–65, 88, 92–93
   L1ChainAssetHandler.sol81.82%100%75%84%42–43, 51–52
   L1MessageRoot.sol78.57%100%75%80%36–37
   L2Bridgehub.sol80.56%100%75%82.14%107, 64, 80–81, 92
   L2ChainAssetHandler.sol80.65%100%75%82.61%50–51, 73, 97
   L2MessageRoot.sol34.38%100%50%30.77%36–37, 41–42, 48, 66, 72–73, 77, 79, 81, 84–85, 87, 91–94
   L2MessageVerification.sol100%100%100%100%
   MessageRootBase.sol54.24%100%58.33%53.19%111–113, 119–121, 130, 142, 152, 157–162, 164–168, 35, 37
contracts/common
   ReentrancyGuard.sol95%100%100%94.12%79
contracts/common/l2-helpers
   L2ContractHelper.sol84.91%100%100%82.22%102, 108, 112, 129, 134, 73, 79, 83
   SystemContractsCaller.sol0%100%0%0%102, 114, 122–125, 128, 135–139, 141–142, 32–34, 37, 44–45, 47, 49, 51, 53, 66, 69, 72, 75, 78, 83, 89, 91, 93, 96, 98
contracts/common/libraries
   DataEncoding.sol81.63%100%81.82%81.58%109–110, 117–118, 163, 177, 45
   DynamicIncrementalMerkle.sol73.91%100%80%73.17%66–70, 72–74, 76–78
   FullMerkle.sol100%100%100%100%
   Merkle.sol98.15%100%100%97.96%83
   MessageHashing.sol95.16%100%100%94.64%113, 77, 94
   SemVer.sol100%100%100%100%
   UncheckedMath.sol100%100%100%100%
   UnsafeBytes.sol100%100%100%100%
contracts/governance
   AccessControlRestriction.sol100%100%100%100%
   ChainAdmin.sol97.87%100%100%97.30%39
   ChainAdminOwnable.sol44.83%100%40%45.83%28, 38–40, 46–48, 57, 66, 77–79, 81
   Governance.sol100%100%100%100%
   L2ProxyAdminDeployer.sol0%100%0%0%16–18, 20
   PermanentRestriction.sol88.80%100%100%87.39%104, 111–112, 200–201, 204–205, 208, 210–211, 240, 288, 310, 341
   ServerNotifier.sol93.10%100%100%90.91%55, 65
   TransitionaryOwner.sol0%100%0%0%16–17, 21–23
contracts/governance/restriction
   Restriction.sol60%100%50%66.67%21
   RestrictionValidator.sol100%100%100%100%
contracts/l2-upgrades
   L2ComplexUpgrader.sol0%100%0%0%23–25, 39, 44, 46, 56, 62–63, 70, 79–81, 84, 86–87
   L2GenesisForceDeploymentsHelper.sol95.18%100%100%94.67%108, 114, 260, 67
   L2GenesisUpgrade.sol0%100%0%0%24, 31–32, 37–38, 42, 50
   SystemContractProxy.sol87.50%100%66.67%90.48%16–17
   SystemContractProxyAdmin.sol60%100%66.67%57.14%12, 18–19
contracts/state-transition
   AccessControlEnumerablePerChainAddressUpgradeable.sol94.92%100%91.67%95.74%179, 192
   ChainTypeManagerBase.sol84.65%100%80.95%85.63%112, 124, 130, 138–139, 165, 255–258, 271–274, 283, 426, 488, 516, 523, 550, 598, 606–607
   EraChainTypeManager.sol81.82%100%100%77.78%27, 47
   ValidatorTimelock.sol91.40%100%83.33%93.33%120, 163, 273, 292, 97

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