Skip to content

fix: use normal getter for chain tree#2060

Merged
StanislavBreadless merged 2 commits intodraft-v31from
normal-getter-for-chain-tree-draft-v31
Mar 2, 2026
Merged

fix: use normal getter for chain tree#2060
StanislavBreadless merged 2 commits intodraft-v31from
normal-getter-for-chain-tree-draft-v31

Conversation

@perekopskiy
Copy link
Contributor

What ❔

use normal getter for chain tree

Why ❔

auto-generated public mapping getter doesn't return struct's arrays

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.

Reviewed commit: 36daeffc8f

ℹ️ 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".

/// @dev On L1, these are empty leaves and are populated only during the addition of the chain
/// are not updated thereafter.
mapping(uint256 chainId => DynamicIncrementalMerkle.Bytes32PushTree tree) public chainTree;
mapping(uint256 chainId => DynamicIncrementalMerkle.Bytes32PushTree tree) internal chainTree;

Choose a reason for hiding this comment

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

P1 Badge Preserve chainTree(uint256) ABI on MessageRoot upgrades

Changing chainTree from public to internal removes the previously exposed selector chainTree(uint256) (0x2c3addb8) from MessageRootBase and its inheritors, so any existing indexer, script, or contract integration still calling that selector will start reverting immediately after the upgrade. Adding getChainTree(uint256) introduces a new API but does not maintain backward compatibility for already-deployed consumers.

Useful? React with 👍 / 👎.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It was added only to v31 which is not finalized, so it's okay

@github-actions
Copy link
Contributor

github-actions bot commented Mar 2, 2026

Coverage after merging normal-getter-for-chain-tree-draft-v31 into draft-v31 will be

90.79%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
contracts/bridge
   BridgeHelper.sol100%100%100%100%
   BridgedStandardERC20.sol96.25%100%92.31%97.01%231–232
   L1ERC20Bridge.sol97.78%100%100%97.30%267
   L1Nullifier.sol96.12%100%100%95.40%446–447, 450, 476, 729, 732, 734, 750
   UpgradeableBeaconDeployer.sol100%100%100%100%
contracts/bridge/asset-router
   AssetRouterBase.sol98.53%100%100%98.21%132
   L1AssetRouter.sol91.62%100%86.67%92.70%116, 331, 342, 424–425, 444, 602, 613, 627, 632
contracts/bridge/asset-tracker
   AssetTrackerBase.sol93.33%100%88.89%95.24%88
   GWAssetTracker.sol92.11%100%92.50%92.05%135–137, 158, 208–210, 212–214, 219–220, 348–350, 356, 369, 504, 694
   L1AssetTracker.sol91.75%100%100%90.61%113, 131–132, 145, 150, 162, 326, 328–329, 332, 566, 573, 579, 585, 591, 619, 84
   LegacySharedBridgeAddresses.sol83.33%100%100%81.82%39, 41
contracts/bridge/interfaces
   AssetHandlerModifiers.sol75%100%100%66.67%13
contracts/bridge/ntv
   L1NativeTokenVault.sol98.17%100%100%97.70%191, 193
   NativeTokenVaultBase.sol98.94%100%100%98.73%164, 170
contracts/common
   MessageVerification.sol88.24%100%87.50%88.46%34, 41–42
   ReentrancyGuard.sol100%100%100%100%
contracts/common/l2-helpers
   L2ContractHelper.sol98.11%100%100%97.78%102
   SystemContractsCaller.sol52.50%100%60%51.43%42–43, 45, 47, 49, 51, 64, 67, 70, 73, 76, 81, 87, 89, 91, 94, 96
contracts/common/libraries
   DataEncoding.sol95.90%100%95.83%95.92%193, 283, 301, 307
   DynamicIncrementalMerkle.sol100%100%100%100%
   DynamicIncrementalMerkleMemory.sol98.96%100%100%98.84%196
   FullMerkle.sol98.28%100%100%98.11%109
   FullMerkleMemory.sol93.81%100%100%93.33%114, 131, 149, 163, 194, 90
   Merkle.sol100%100%100%100%
   MessageHashing.sol98.67%100%100%98.46%154
   SemVer.sol100%100%100%100%
   UncheckedMath.sol100%100%100%100%
   UnsafeBytes.sol100%100%100%100%
   ZKSyncOSBytecodeInfo.sol100%100%100%100%
contracts/common/libraries/TransientPrimitives
   TransientPrimitives.sol100%100%100%100%
contracts/core/bridgehub
   BridgehubBase.sol96.86%100%100%96.23%155, 304, 320, 580, 584, 587
   L1Bridgehub.sol91.92%100%100%90.91%137, 218, 293, 297–298, 301, 311, 96
   L2Bridgehub.sol66.67%100%60%68.57%102–103, 111, 113–114, 123, 128–129, 131–132, 75
contracts/core/chain-asset-handler
   ChainAssetHandlerBase.sol85.86%100%92.31%84.88%114, 121–122, 140–142, 191, 194, 203–204, 340, 344, 366
   L1ChainAssetHandler.sol88.07%100%82.35%89.13%182, 271, 273–275, 314, 87–88, 92–93
   L2ChainAssetHandler.sol84.21%100%80%85.71%120, 124, 69, 93
contracts/core/chain-registration
   ChainRegistrationSender.sol89.13%100%100%86.84%104, 127, 47, 94, 98
contracts/core/ctm-deployment
   CTMDeploymentTracker.sol100%100%100%100%
contracts/core/message-root
   L1MessageRoot.sol95.24%100%91.67%96.08%170–171
   L2MessageRoot.sol62.22%100%45.45%67.65%109, 116, 120–121, 42–43, 52–53, 57, 64, 80
   MessageRootBase.sol90%100%94.12%89.16%110, 130, 134, 211, 282, 301, 345, 353–354
contracts/governance
   AccessControlRestriction.sol100%100%100%100%
   ChainAdmin.sol97.87%100%100%97.30%44
   ChainAdminOwnable.sol100%100%100%100%
   Governance.sol100%100%100%100%
   L2ProxyAdminDeployer.sol100%100%100%100%
   PermanentRestriction.sol100%100%100%100%
   ServerNotifier.sol100%100%100%100%
   TransitionaryOwner.sol100%100%100%100%
contracts/governance/restriction
   Restriction.sol100%100%100%100%
   RestrictionValidator.sol100%100%100%100%
contracts/interop
   AttributesDecoder.sol100%100%100%100%
   InteropCenter.sol95.56%100%88.46%96.48%120–121, 132, 176–177, 575, 659
   InteropDataEncoding.sol100%100%100%100%
   InteropHandler.sol96.58%100%100%96.15%346, 368, 373, 64
   L2InteropRootStorage.sol0%100%0%0%20–22, 41, 46, 52–53, 58, 60–62, 71, 73–74, 76–77, 81–82, 86, 88
   L2MessageVerification.sol100%100%100%100%
contracts/l2-system/zksync-os
   L1MessageGasLib.sol100%100%100%100%
   L1Messenger.sol94.12%100%100%92.86%29
   SystemContext.sol100%100%100%100%
   ZKOSContractDeployer.sol0%100%0%0%15–17, 23, 29, 33–34
contracts/l2-upgrades
   L2ComplexUpgrader.sol0%100%0%0%23–25, 39, 44, 46, 56, 62–63, 70, 79–81, 84, 86–87
   L2GenesisForceDeploymentsHelper.sol93.71%100%100%93.15%117, 150, 196, 198, 202, 204–205, 235, 241, 460
   L2GenesisUpgrade.sol0%100%0%0%30, 37, 39–40, 43, 47–50, 53, 55, 63
   L2V30TestnetSystemProxiesUpgrade.sol0%100%0%0%101, 107, 30, 35–36, 38, 49, 55, 60, 64, 69, 74, 79, 84, 89, 94
   L2V31Upgrade.sol0%100%0%0%14–15
   SystemContractProxy.sol88%100%66.67%90.91%23–24
   SystemContractProxyAdmin.sol60%100%66.67%57.14%12, 18–19
   V31AcrossRecovery.sol0%100%0%0%46–48, 67–68, 70–71, 75, 80–81, 96
contracts/state-transition
   AccessControlEnumerablePerChainAddressUpgradeable.sol98.25%100%100%97.83%179
   ChainTypeManagerBase.sol96.19%100%100%95.29%206, 209, 383, 473, 478, 620, 683, 721, 797
   EraChainTypeManager.sol94.12%100%100%92.86%39
   ZKsyncOSChainTypeManager.sol80%100%66.67%83.33%26–27
contracts/state-transition/chain-deps
   DiamondInit.sol94.23%100%100%94%72, 76, 80
   DiamondProxy.sol100%100%100%100%
   StoredBatchHashing.sol100%100%100%100%
contracts/state-transition/chain-deps/facets
   Admin.sol91.71%100%93.75%91.35%110–112, 197, 201, 205, 275, 300–301, 385, 424, 94–96, 98–99
   Committer.sol90.80%100%100%90%205, 230, 237,

@StanislavBreadless StanislavBreadless merged commit b76b832 into draft-v31 Mar 2, 2026
27 checks passed
@StanislavBreadless StanislavBreadless deleted the normal-getter-for-chain-tree-draft-v31 branch March 2, 2026 14:54
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.

3 participants