From 7304c6eb81534f238ed9da48dab798b1d50db60a Mon Sep 17 00:00:00 2001 From: Artyom Veremeenko Date: Sat, 4 Apr 2026 21:40:59 +0400 Subject: [PATCH 01/35] feat: add mantle meta core config --- .../mantle/mainnet/meta/meta_core_config.yaml | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 config_samples/mantle/mainnet/meta/meta_core_config.yaml diff --git a/config_samples/mantle/mainnet/meta/meta_core_config.yaml b/config_samples/mantle/mainnet/meta/meta_core_config.yaml new file mode 100644 index 0000000..bdc1a1c --- /dev/null +++ b/config_samples/mantle/mainnet/meta/meta_core_config.yaml @@ -0,0 +1,135 @@ +# Core implementations and factories — Mantle deployment +# + +contracts: + # Factory + "0x00000000741292C88f9fF5050b07051C4f592EBf": TransparentUpgradeableProxy # FactoryFactory + "0x0000000072BAfCeAff1AD0237Ea58f06cfc4467F": Factory + + # Consensus + "0xAfef40968b5304135677f0C89203948e1A145105": TransparentUpgradeableProxy # ConsensusFactory + "0x000000007e6b679B9196a1609e5Bc2405eDFd6Aa": Consensus + + # DepositQueue + "0xF429ba2a8437E7de85078CF7481E8Ad52df7E58c": TransparentUpgradeableProxy # DepositQueueFactory + "0x00000000B2d2373aAF1C370cFE4e1Ee8BDE7C546": DepositQueue + "0x000000001CC8c3E40856E956db870095EF6C98bd": SyncDepositQueue + "0x000000000Af33501e5BDAF9B481Ad2712a024727": SignatureDepositQueue + + # FeeManager + "0x52d56c20B0C8d403888880d0A1610e5ed17addA8": TransparentUpgradeableProxy # FeeManagerFactory + "0x00000000C18039E1F415fe07C33A316232238648": FeeManager + + # Oracle + "0x727c295b5D99b15280Ca8736b6F97ABA6aEd0E88": TransparentUpgradeableProxy # OracleFactory + "0x000000009adE4dAE1f868775A3f087945983f062": Oracle + + # RedeemQueue + "0xe08dc488bD6756323F8bf478869529D03db627ef": TransparentUpgradeableProxy # RedeemQueueFactory + "0x0000000045d70ee8145135f08309fF5B1A63d43F": RedeemQueue + "0x000000008D14Ef3658805765107d9F12776f4138": SignatureRedeemQueue + + # RiskManager + "0x9885215ef8DB25C87466E73018061e532784D716": TransparentUpgradeableProxy # RiskManagerFactory + "0x00000000CC26BC741E75B181738Ac2B16156179b": RiskManager + + # ShareManager + "0xDA2a7aE07B6803feF9d95E47Ab83c8a5A09929F0": TransparentUpgradeableProxy # ShareManagerFactory + "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": TokenizedShareManager + "0x00000000e5F0cddA56447b2a29e2847A52c8725D": BasicShareManager + "0x00000000C534B8680e3aa7165DeDc3Ab8781f602": BurnableTokenizedShareManager + + # Subvault + "0xA64e324DFF04e3C0613ff0706867868C7b370a45": TransparentUpgradeableProxy # SubvaultFactory + "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault + + # Verifier + "0x9fBAF5AEB9F52bA57E1cC1D3050eac6d75Df8ae7": TransparentUpgradeableProxy # VerifierFactory + "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier + + # Vault + "0xBBCD2aC50aF2EA12Cc9cb7B16dBDa85859BeB3da": TransparentUpgradeableProxy # VaultFactory + "0x0000000070f44289ec5ea3E5972f058f75B29801": Vault + + # SwapModule + "0xC5a52E4bB718Dfe86938e5cB967362EdA1E62698": TransparentUpgradeableProxy # SwapModuleFactory + "0x0000000042E248f84Df6BA1E768F878b1f2Bae9f": SwapModule + + "0x0000000009E9368ad21fc19DCE1cFcf9Af6dE339": BitmaskVerifier + + # ERC20Verifier + "0x711F6236e325634AA8c1F692b5312bfF3A8558D0": TransparentUpgradeableProxy # ERC20VerifierFactory + "0x00000000ACD80376E999Af8c424e5e33BD224A08": ERC20Verifier + + "0x0000000005a67199ABE0f9C995EAB9DaDfA31Ccd": VaultConfigurator + + # Hooks + "0x00000000176dD23550c3845746b2036E90DC5912": BasicRedeemHook + "0x0000000024ABbd08686Abb2987831dEa88eF1180": RedirectingDepositHook + + "0x000000007d2552AD746Af5c13f91B5e72f97c2B7": OracleHelper + + # MellowAccount + "0x870DB41df0905cc5a790f6582a3dA99A4A33F923": TransparentUpgradeableProxy # AccountFactory + "0x00000000860913f37fab81ce8ce4E5BD1f664482": MellowAccountV1 + +explorer_hostname: api.etherscan.io +explorer_token_env_var: ETHERSCAN_EXPLORER_TOKEN +explorer_chain_id: 5000 + +github_repo: + url: https://github.com/mellow-finance/flexible-vaults + commit: c9c71818f0a8bead183f9860db3b8bbceb7b8f37 + relative_root: "" + +dependencies: + lib/contracts: + url: https://github.com/cowprotocol/contracts + commit: c94c595a791681cf8ba7495117dcde397b932885 + relative_root: "" + lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts + commit: e4f70216d759d8e6a64144a9e1f7bbeed78e7079 + relative_root: contracts + # version 5.3.0 + lib/openzeppelin-contracts-upgradeable/contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable + commit: 60b305a8f3ff0c7688f02ac470417b6bbf1c4d27 + relative_root: contracts + # version 5.3.0 + +bytecode_comparison: + constructor_calldata: + "0x00000000741292C88f9fF5050b07051C4f592EBf": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000072BAfCeAff1AD0237Ea58f06cfc4467F": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Factory + "0xAfef40968b5304135677f0C89203948e1A145105": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x000000007e6b679B9196a1609e5Bc2405eDFd6Aa": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Consensus + "0xF429ba2a8437E7de85078CF7481E8Ad52df7E58c": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000B2d2373aAF1C370cFE4e1Ee8BDE7C546": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # DepositQueue + "0x000000001CC8c3E40856E956db870095EF6C98bd": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SyncDepositQueue + "0x000000000Af33501e5BDAF9B481Ad2712a024727": "00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000afef40968b5304135677f0c89203948e1a14510500000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SignatureDepositQueue + "0x52d56c20B0C8d403888880d0A1610e5ed17addA8": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000C18039E1F415fe07C33A316232238648": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # FeeManager + "0x727c295b5D99b15280Ca8736b6F97ABA6aEd0E88": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x000000009adE4dAE1f868775A3f087945983f062": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Oracle + "0xe08dc488bD6756323F8bf478869529D03db627ef": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000045d70ee8145135f08309fF5B1A63d43F": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RedeemQueue + "0x000000008D14Ef3658805765107d9F12776f4138": "00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000afef40968b5304135677f0c89203948e1a14510500000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SignatureRedeemQueue + "0x9885215ef8DB25C87466E73018061e532784D716": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000CC26BC741E75B181738Ac2B16156179b": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RiskManager + "0xDA2a7aE07B6803feF9d95E47Ab83c8a5A09929F0": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # TokenizedShareManager + "0x00000000e5F0cddA56447b2a29e2847A52c8725D": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # BasicShareManager + "0x00000000C534B8680e3aa7165DeDc3Ab8781f602": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # BurnableTokenizedShareManager + "0xA64e324DFF04e3C0613ff0706867868C7b370a45": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000CA30010B8417f791250AE221FdaD5920": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault + "0x9fBAF5AEB9F52bA57E1cC1D3050eac6d75Df8ae7": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x000000007e86a96e279662108cc19bA4c32EdE3C": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier + "0xBBCD2aC50aF2EA12Cc9cb7B16dBDa85859BeB3da": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000070f44289ec5ea3E5972f058f75B29801": "00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f429ba2a8437e7de85078cf7481e8ad52df7e58c000000000000000000000000e08dc488bd6756323f8bf478869529d03db627ef000000000000000000000000a64e324dff04e3c0613ff0706867868c7b370a450000000000000000000000009fbaf5aeb9f52ba57e1cc1d3050eac6d75df8ae700000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Vault + "0xC5a52E4bB718Dfe86938e5cB967362EdA1E62698": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000042E248f84Df6BA1E768F878b1f2Bae9f": "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe011000000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb800000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SwapModule + "0x711F6236e325634AA8c1F692b5312bfF3A8558D0": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000ACD80376E999Af8c424e5e33BD224A08": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # ERC20Verifier + "0x0000000005a67199ABE0f9C995EAB9DaDfA31Ccd": "000000000000000000000000da2a7ae07b6803fef9d95e47ab83c8a5a09929f000000000000000000000000052d56c20b0c8d403888880d0a1610e5ed17adda80000000000000000000000009885215ef8db25c87466e73018061e532784d716000000000000000000000000727c295b5d99b15280ca8736b6f97aba6aed0e88000000000000000000000000bbcd2ac50af2ea12cc9cb7b16dbda85859beb3da" # VaultConfigurator + "0x870DB41df0905cc5a790f6582a3dA99A4A33F923": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy From 4344cc7dfc3f372dddfc37ac30476c19fc571180 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Sun, 5 Apr 2026 18:30:28 +0100 Subject: [PATCH 02/35] feat: add Cancun EVM opcodes (EIP-1153, EIP-4844, EIP-5656, EIP-7516) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add missing opcodes introduced in the Cancun/Dencun upgrade: - TLOAD (0x5C), TSTORE (0x5D) — transient storage (EIP-1153) - MCOPY (0x5E) — memory copy (EIP-5656) - BLOBHASH (0x49), BLOBBASEFEE (0x4A) — blob gas (EIP-4844, EIP-7516) Replace individual opcode tests with parametrized coverage of all 149 opcodes in the table, plus PUSH0..PUSH32 byte-length verification. --- diffyscan/utils/constants.py | 2 ++ tests/test_binary_verifier.py | 57 ++++++++++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/diffyscan/utils/constants.py b/diffyscan/utils/constants.py index ad6802b..86dc5b9 100644 --- a/diffyscan/utils/constants.py +++ b/diffyscan/utils/constants.py @@ -35,9 +35,11 @@ def _get_cache_home() -> str: 0x3C: 'EXTCODECOPY', 0x3D: 'RETURNDATASIZE', 0x3E: 'RETURNDATACOPY', 0x3F: 'EXTCODEHASH', 0x40: 'BLOCKHASH', 0x41: 'COINBASE', 0x42: 'TIMESTAMP', 0x43: 'NUMBER', 0x44: 'PREVRANDAO', 0x45: 'GASLIMIT', 0x46: 'CHAINID', 0x47: 'SELFBALANCE', 0x48: 'BASEFEE', + 0x49: 'BLOBHASH', 0x4A: 'BLOBBASEFEE', # Cancun — EIP-4844, EIP-7516 0x50: 'POP', 0x51: 'MLOAD', 0x52: 'MSTORE', 0x53: 'MSTORE8', 0x54: 'SLOAD', 0x55: 'SSTORE', 0x56: 'JUMP', 0x57: 'JUMPI', 0x58: 'PC', 0x59: 'MSIZE', 0x5A: 'GAS', 0x5B: 'JUMPDEST', + 0x5C: 'TLOAD', 0x5D: 'TSTORE', 0x5E: 'MCOPY', # Cancun — EIP-1153, EIP-5656 0x5F: 'PUSH0', 0x60: 'PUSH1', 0x61: 'PUSH2', 0x62: 'PUSH3', 0x63: 'PUSH4', 0x64: 'PUSH5', 0x65: 'PUSH6', 0x66: 'PUSH7', 0x67: 'PUSH8', 0x68: 'PUSH9', 0x69: 'PUSH10', 0x6A: 'PUSH11', 0x6B: 'PUSH12', 0x6C: 'PUSH13', 0x6D: 'PUSH14', 0x6E: 'PUSH15', 0x6F: 'PUSH16', 0x70: 'PUSH17', diff --git a/tests/test_binary_verifier.py b/tests/test_binary_verifier.py index 90d75bb..1784eef 100644 --- a/tests/test_binary_verifier.py +++ b/tests/test_binary_verifier.py @@ -1,6 +1,7 @@ import pytest -from diffyscan.utils.binary_verifier import deep_match_bytecode +from diffyscan.utils.binary_verifier import deep_match_bytecode, parse +from diffyscan.utils.constants import OPCODES, PUSH0, PUSH32 from diffyscan.utils.custom_exceptions import BinVerifierError @@ -25,3 +26,57 @@ def test_non_immutable_diff_raises(): with pytest.raises(BinVerifierError, match="differences not on the immutable"): deep_match_bytecode(actual, expected, immutables={}) + + +# --- Opcode parsing --- + + +@pytest.mark.parametrize( + "code,name", + sorted(OPCODES.items()), + ids=[f"0x{code:02x}_{name}" for code, name in sorted(OPCODES.items())], +) +def test_parse_every_opcode(code, name): + """Every opcode in the OPCODES table should be parsed without unknown warnings.""" + if PUSH0 <= code <= PUSH32: + # PUSHn needs n bytes of immediate data after the opcode + n = code - PUSH0 + bytecode = format(code, "02x") + "00" * n + else: + bytecode = format(code, "02x") + + instructions, unknown = parse(bytecode) + assert unknown == set(), f"opcode 0x{code:02x} ({name}) flagged as unknown" + assert len(instructions) == 1 + assert instructions[0]["op"]["name"] == name + assert instructions[0]["op"]["code"] == code + + +@pytest.mark.parametrize("n", range(0, 33), ids=[f"PUSH{n}" for n in range(0, 33)]) +def test_push_consumes_n_bytes(n): + """PUSH0..PUSH32 should consume exactly 1 + n bytes.""" + code = PUSH0 + n + immediate = "ab" * n + bytecode = format(code, "02x") + immediate + + instructions, unknown = parse(bytecode) + assert unknown == set() + assert len(instructions) == 1 + assert instructions[0]["length"] == 1 + n + assert instructions[0]["start"] == 0 + + +def test_parse_unknown_opcode_detected(): + # 0x0C is not a valid EVM opcode + instructions, unknown = parse("0c") + assert unknown == {"0xc"} + assert instructions[0]["op"]["name"] == "INVALID" + + +def test_parse_mixed_sequence(): + # STOP, ADD, PUSH1 0xff, TLOAD, MCOPY, BLOBHASH, JUMP + bytecode = "000160ff5c5e4956" + instructions, unknown = parse(bytecode) + assert unknown == set() + names = [i["op"]["name"] for i in instructions] + assert names == ["STOP", "ADD", "PUSH1", "TLOAD", "MCOPY", "BLOBHASH", "JUMP"] From 19813d9620782385a25d0322ced9afaeacf9dd11 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Sun, 5 Apr 2026 18:31:54 +0100 Subject: [PATCH 03/35] feat: add --contract flag to check specific addresses Add -C / --contract CLI option to filter which contracts are checked. Can be passed multiple times. Case-insensitive address matching. Usage: diffyscan config.yaml -C 0xAddr1 -C 0xAddr2 --- README.md | 7 ++++ diffyscan/diffyscan.py | 19 +++++++++ tests/test_contract_filter.py | 78 +++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 tests/test_contract_filter.py diff --git a/README.md b/README.md index a2b67d9..83ebca0 100644 --- a/README.md +++ b/README.md @@ -174,6 +174,13 @@ diffyscan /path/to/config.json diffyscan /path/to/config.yaml ``` +To check only specific contracts (can be passed multiple times): + +```bash +diffyscan /path/to/config.json -C 0xContractAddress +diffyscan /path/to/config.json -C 0xFirst -C 0xSecond +``` + To skip binary comparison (which is enabled by default): ```bash diff --git a/diffyscan/diffyscan.py b/diffyscan/diffyscan.py index 6d41b14..5a3b271 100644 --- a/diffyscan/diffyscan.py +++ b/diffyscan/diffyscan.py @@ -413,6 +413,7 @@ def process_config( cache_explorer: bool, cache_github: bool, skip_user_input: bool = False, + contract_filter: list[str] | None = None, ): """Process a config file and run source + bytecode comparisons.""" # Reset exception handler to default before each config @@ -448,7 +449,16 @@ def process_config( remote_chain_id = get_chain_id(remote_rpc_url) logger.okay("Remote chain ID", remote_chain_id) + # Apply contract filter if specified + filter_set = ( + set(addr.lower() for addr in contract_filter) + if contract_filter + else None + ) + for contract_address, contract_name in config["contracts"].items(): + if filter_set and contract_address.lower() not in filter_set: + continue try: contract_code = get_contract_from_explorer( explorer_token, @@ -582,6 +592,14 @@ def parse_arguments() -> argparse.Namespace: help="Hide info messages, show okay/warn/error (shorthand for --log-level okay)", action="store_true", ) + parser.add_argument( + "--contract", + "-C", + dest="contract_filter", + action="append", + default=[], + help="Only check specific contract address (0x...). Can be passed multiple times.", + ) return parser.parse_args() @@ -727,6 +745,7 @@ def main() -> None: args.cache_explorer, args.cache_github, skip_user_input, + args.contract_filter, ) all_results.append(result) diff --git a/tests/test_contract_filter.py b/tests/test_contract_filter.py new file mode 100644 index 0000000..d0f3d6d --- /dev/null +++ b/tests/test_contract_filter.py @@ -0,0 +1,78 @@ +"""Tests for the --contract / -C filter flag.""" + +import pytest + + +CONTRACTS = { + "0xAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa": "ContractA", + "0xBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBb": "ContractB", + "0xCcCcCcCcCcCcCcCcCcCcCcCcCcCcCcCcCcCcCcCc": "ContractC", +} + + +def apply_filter(contracts, contract_filter): + """Reproduce the filter logic from process_config.""" + filter_set = ( + set(addr.lower() for addr in contract_filter) if contract_filter else None + ) + result = {} + for addr, name in contracts.items(): + if filter_set and addr.lower() not in filter_set: + continue + result[addr] = name + return result + + +def test_no_filter_returns_all(): + assert apply_filter(CONTRACTS, None) == CONTRACTS + assert apply_filter(CONTRACTS, []) == CONTRACTS + + +def test_filter_single_contract(): + filtered = apply_filter( + CONTRACTS, ["0xAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa"] + ) + assert list(filtered.keys()) == [ + "0xAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa" + ] + assert filtered["0xAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa"] == "ContractA" + + +def test_filter_multiple_contracts(): + filtered = apply_filter( + CONTRACTS, + [ + "0xAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa", + "0xCcCcCcCcCcCcCcCcCcCcCcCcCcCcCcCcCcCcCcCc", + ], + ) + assert len(filtered) == 2 + assert "0xBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBb" not in filtered + + +def test_filter_is_case_insensitive(): + filtered = apply_filter( + CONTRACTS, ["0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"] + ) + assert len(filtered) == 1 + assert "ContractA" in filtered.values() + + +def test_filter_nonexistent_address_returns_empty(): + filtered = apply_filter( + CONTRACTS, ["0x0000000000000000000000000000000000000000"] + ) + assert filtered == {} + + +def test_filter_mixed_case_multiple(): + filtered = apply_filter( + CONTRACTS, + [ + "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + "0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", + ], + ) + assert len(filtered) == 2 + names = set(filtered.values()) + assert names == {"ContractB", "ContractC"} From 55761f16ca2300e1a35753f7170fcc878c17c20a Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Sun, 5 Apr 2026 18:33:23 +0100 Subject: [PATCH 04/35] feat: add per-config RPC URL, local RPC override, and configurable gas limit - Add rpc_url_env_var config field to specify chain-specific RPC env var (falls back to REMOTE_RPC_URL for backward compatibility) - Add -L / --local-rpc flag to override with LOCAL_RPC_URL (e.g. anvil) - Add deployment_gas_limit config field for chains with inflated gas costs (e.g. Mantle needs 30B gas for deployment simulation) --- README.md | 8 ++++++++ diffyscan/diffyscan.py | 24 +++++++++++++++++++----- diffyscan/utils/node_handler.py | 6 +++--- tests/test_bytecode_metadata.py | 28 ++++++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 83ebca0..f5a1dc0 100644 --- a/README.md +++ b/README.md @@ -181,6 +181,14 @@ diffyscan /path/to/config.json -C 0xContractAddress diffyscan /path/to/config.json -C 0xFirst -C 0xSecond ``` +To use a local RPC node (e.g. anvil fork) for bytecode comparison, overriding the config's `rpc_url_env_var`: + +```bash +diffyscan /path/to/config.yaml -L +``` + +This reads `LOCAL_RPC_URL` from `.env` instead of the chain-specific RPC URL. + To skip binary comparison (which is enabled by default): ```bash diff --git a/diffyscan/diffyscan.py b/diffyscan/diffyscan.py index 5a3b271..06885bc 100644 --- a/diffyscan/diffyscan.py +++ b/diffyscan/diffyscan.py @@ -172,7 +172,9 @@ def run_bytecode_diff( ) deployment_call_data = _append_calldata(contract_creation_code, calldata) - local_deployed_bytecode = simulate_deployment(deployment_call_data, remote_rpc_url) + gas_limit = config.get("deployment_gas_limit") + extra = {"gas_limit": gas_limit} if gas_limit else {} + local_deployed_bytecode = simulate_deployment(deployment_call_data, remote_rpc_url, **extra) is_fully_matched = local_deployed_bytecode == remote_deployed_bytecode @@ -353,9 +355,13 @@ def _load_explorer_token(config: dict) -> str: raise ValueError(error_msg) -def _setup_binary_comparison(config: dict) -> str: - """Load REMOTE_RPC_URL and configure exception handling for bytecode comparison.""" - remote_rpc_url = load_env("REMOTE_RPC_URL", masked=True, required=True) +def _setup_binary_comparison(config: dict, use_local_rpc: bool = False) -> str: + """Load RPC URL and configure exception handling for bytecode comparison.""" + rpc_env_var = ( + "LOCAL_RPC_URL" if use_local_rpc + else config.get("rpc_url_env_var", "REMOTE_RPC_URL") + ) + remote_rpc_url = load_env(rpc_env_var, masked=True, required=True) ExceptionHandler.initialize(config.get("fail_on_bytecode_comparison_error", True)) return remote_rpc_url @@ -414,6 +420,7 @@ def process_config( cache_github: bool, skip_user_input: bool = False, contract_filter: list[str] | None = None, + use_local_rpc: bool = False, ): """Process a config file and run source + bytecode comparisons.""" # Reset exception handler to default before each config @@ -430,7 +437,7 @@ def process_config( # Setup binary comparison if enabled remote_rpc_url = None if enable_binary_comparison: - remote_rpc_url = _setup_binary_comparison(config) + remote_rpc_url = _setup_binary_comparison(config, use_local_rpc) # Check if source comparison is enabled enable_source_comparison = config.get("source_comparison", True) @@ -600,6 +607,12 @@ def parse_arguments() -> argparse.Namespace: default=[], help="Only check specific contract address (0x...). Can be passed multiple times.", ) + parser.add_argument( + "--local-rpc", + "-L", + action="store_true", + help="Use LOCAL_RPC_URL env var for bytecode comparison, overriding config rpc_url_env_var.", + ) return parser.parse_args() @@ -746,6 +759,7 @@ def main() -> None: args.cache_github, skip_user_input, args.contract_filter, + args.local_rpc, ) all_results.append(result) diff --git a/diffyscan/utils/node_handler.py b/diffyscan/utils/node_handler.py index a112854..6583117 100644 --- a/diffyscan/utils/node_handler.py +++ b/diffyscan/utils/node_handler.py @@ -5,7 +5,7 @@ from .custom_exceptions import NodeError DEFAULT_CALLER = "0x0000000000000000000000000000000000000000" -DEPLOYMENT_SIMULATION_GAS_LIMIT = 100_000_000 +DEFAULT_DEPLOYMENT_GAS_LIMIT = 100_000_000 def _rpc_call(rpc_url: str, method: str, params: list): @@ -44,7 +44,7 @@ def get_chain_id(rpc_url: str) -> int: return chain_id -def simulate_deployment(data: str, rpc_url: str, caller: str = DEFAULT_CALLER) -> str: +def simulate_deployment(data: str, rpc_url: str, caller: str = DEFAULT_CALLER, gas_limit: int = DEFAULT_DEPLOYMENT_GAS_LIMIT) -> str: """Simulate contract deployment via eth_call and return deployed runtime bytecode.""" logger.info(f'Simulating deployment via eth_call on "{mask_text(rpc_url)}" ...') @@ -55,7 +55,7 @@ def simulate_deployment(data: str, rpc_url: str, caller: str = DEFAULT_CALLER) - { "from": caller, "to": None, - "gas": hex(DEPLOYMENT_SIMULATION_GAS_LIMIT), + "gas": hex(gas_limit), "data": data, }, "latest", diff --git a/tests/test_bytecode_metadata.py b/tests/test_bytecode_metadata.py index 2a06de0..bf5fdfe 100644 --- a/tests/test_bytecode_metadata.py +++ b/tests/test_bytecode_metadata.py @@ -105,6 +105,34 @@ def fake_pull(rpc_url, payload, headers): assert captured["payload"]["params"][0]["data"] == "0x6001600055" +def test_simulate_deployment_uses_default_gas_limit(monkeypatch): + captured = {} + + def fake_pull(rpc_url, payload, headers): + captured["payload"] = json.loads(payload) + return DummyResponse({"result": "0x6001"}) + + monkeypatch.setattr("diffyscan.utils.node_handler.pull", fake_pull) + + simulate_deployment("0x6001", "https://rpc.example") + + assert captured["payload"]["params"][0]["gas"] == hex(100_000_000) + + +def test_simulate_deployment_uses_custom_gas_limit(monkeypatch): + captured = {} + + def fake_pull(rpc_url, payload, headers): + captured["payload"] = json.loads(payload) + return DummyResponse({"result": "0x6001"}) + + monkeypatch.setattr("diffyscan.utils.node_handler.pull", fake_pull) + + simulate_deployment("0x6001", "https://rpc.example", gas_limit=1_000_000_000) + + assert captured["payload"]["params"][0]["gas"] == hex(1_000_000_000) + + def test_simulate_deployment_surfaces_rpc_errors(monkeypatch): def fake_pull(rpc_url, payload, headers): return DummyResponse( From 97a646cb5295e252762feedcb1bf964a703a94fe Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Sun, 5 Apr 2026 18:34:00 +0100 Subject: [PATCH 05/35] feat: update mantle meta core config Add rpc_url_env_var, deployment_gas_limit (30B for Mantle's inflated gas), and full bytecode_comparison constructor_calldata for all contracts. --- .env.example | 12 +++---- .../mantle/mainnet/meta/meta_core_config.yaml | 34 +++++++++++-------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/.env.example b/.env.example index 61a972d..239a1b9 100644 --- a/.env.example +++ b/.env.example @@ -4,17 +4,13 @@ GITHUB_API_TOKEN=github_pat_xxx # Explorer API tokens (set the ones you need for your target chains) ETHERSCAN_TOKEN= ETHERSCAN_EXPLORER_TOKEN= -BSCSCAN_TOKEN= -OPTISCAN_EXPLORER_TOKEN= -LINEA_EXPLORER_TOKEN= -INK_API_KEY= -MEGAETH_API_KEY= -PLASMA_API_KEY= # Explorer hostnames (used when hostname is not hardcoded in config) L1_EXPLORER_API_HOSTNAME= L2_EXPLORER_API_HOSTNAME= # RPC URLs (required for bytecode comparison) -LOCAL_RPC_URL=http://127.0.0.1:7545 -REMOTE_RPC_URL= +LOCAL_RPC_URL=http://127.0.0.1:8545 +REMOTE_RPC_URL=https://eth.drpc.org +ETHEREUM_RPC_URL=https://eth.drpc.org +MANTLE_RPC_URL=https://rpc.mantle.xyz diff --git a/config_samples/mantle/mainnet/meta/meta_core_config.yaml b/config_samples/mantle/mainnet/meta/meta_core_config.yaml index bdc1a1c..98891f3 100644 --- a/config_samples/mantle/mainnet/meta/meta_core_config.yaml +++ b/config_samples/mantle/mainnet/meta/meta_core_config.yaml @@ -3,62 +3,62 @@ contracts: # Factory - "0x00000000741292C88f9fF5050b07051C4f592EBf": TransparentUpgradeableProxy # FactoryFactory + "0x00000000741292C88f9fF5050b07051C4f592EBf": TransparentUpgradeableProxy "0x0000000072BAfCeAff1AD0237Ea58f06cfc4467F": Factory # Consensus - "0xAfef40968b5304135677f0C89203948e1A145105": TransparentUpgradeableProxy # ConsensusFactory + "0xAfef40968b5304135677f0C89203948e1A145105": TransparentUpgradeableProxy "0x000000007e6b679B9196a1609e5Bc2405eDFd6Aa": Consensus # DepositQueue - "0xF429ba2a8437E7de85078CF7481E8Ad52df7E58c": TransparentUpgradeableProxy # DepositQueueFactory + "0xF429ba2a8437E7de85078CF7481E8Ad52df7E58c": TransparentUpgradeableProxy "0x00000000B2d2373aAF1C370cFE4e1Ee8BDE7C546": DepositQueue "0x000000001CC8c3E40856E956db870095EF6C98bd": SyncDepositQueue "0x000000000Af33501e5BDAF9B481Ad2712a024727": SignatureDepositQueue # FeeManager - "0x52d56c20B0C8d403888880d0A1610e5ed17addA8": TransparentUpgradeableProxy # FeeManagerFactory + "0x52d56c20B0C8d403888880d0A1610e5ed17addA8": TransparentUpgradeableProxy "0x00000000C18039E1F415fe07C33A316232238648": FeeManager # Oracle - "0x727c295b5D99b15280Ca8736b6F97ABA6aEd0E88": TransparentUpgradeableProxy # OracleFactory + "0x727c295b5D99b15280Ca8736b6F97ABA6aEd0E88": TransparentUpgradeableProxy "0x000000009adE4dAE1f868775A3f087945983f062": Oracle # RedeemQueue - "0xe08dc488bD6756323F8bf478869529D03db627ef": TransparentUpgradeableProxy # RedeemQueueFactory + "0xe08dc488bD6756323F8bf478869529D03db627ef": TransparentUpgradeableProxy "0x0000000045d70ee8145135f08309fF5B1A63d43F": RedeemQueue "0x000000008D14Ef3658805765107d9F12776f4138": SignatureRedeemQueue # RiskManager - "0x9885215ef8DB25C87466E73018061e532784D716": TransparentUpgradeableProxy # RiskManagerFactory + "0x9885215ef8DB25C87466E73018061e532784D716": TransparentUpgradeableProxy "0x00000000CC26BC741E75B181738Ac2B16156179b": RiskManager # ShareManager - "0xDA2a7aE07B6803feF9d95E47Ab83c8a5A09929F0": TransparentUpgradeableProxy # ShareManagerFactory + "0xDA2a7aE07B6803feF9d95E47Ab83c8a5A09929F0": TransparentUpgradeableProxy "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": TokenizedShareManager "0x00000000e5F0cddA56447b2a29e2847A52c8725D": BasicShareManager "0x00000000C534B8680e3aa7165DeDc3Ab8781f602": BurnableTokenizedShareManager # Subvault - "0xA64e324DFF04e3C0613ff0706867868C7b370a45": TransparentUpgradeableProxy # SubvaultFactory + "0xA64e324DFF04e3C0613ff0706867868C7b370a45": TransparentUpgradeableProxy "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault # Verifier - "0x9fBAF5AEB9F52bA57E1cC1D3050eac6d75Df8ae7": TransparentUpgradeableProxy # VerifierFactory + "0x9fBAF5AEB9F52bA57E1cC1D3050eac6d75Df8ae7": TransparentUpgradeableProxy "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier # Vault - "0xBBCD2aC50aF2EA12Cc9cb7B16dBDa85859BeB3da": TransparentUpgradeableProxy # VaultFactory + "0xBBCD2aC50aF2EA12Cc9cb7B16dBDa85859BeB3da": TransparentUpgradeableProxy "0x0000000070f44289ec5ea3E5972f058f75B29801": Vault # SwapModule - "0xC5a52E4bB718Dfe86938e5cB967362EdA1E62698": TransparentUpgradeableProxy # SwapModuleFactory + "0xC5a52E4bB718Dfe86938e5cB967362EdA1E62698": TransparentUpgradeableProxy "0x0000000042E248f84Df6BA1E768F878b1f2Bae9f": SwapModule "0x0000000009E9368ad21fc19DCE1cFcf9Af6dE339": BitmaskVerifier # ERC20Verifier - "0x711F6236e325634AA8c1F692b5312bfF3A8558D0": TransparentUpgradeableProxy # ERC20VerifierFactory + "0x711F6236e325634AA8c1F692b5312bfF3A8558D0": TransparentUpgradeableProxy "0x00000000ACD80376E999Af8c424e5e33BD224A08": ERC20Verifier "0x0000000005a67199ABE0f9C995EAB9DaDfA31Ccd": VaultConfigurator @@ -70,15 +70,21 @@ contracts: "0x000000007d2552AD746Af5c13f91B5e72f97c2B7": OracleHelper # MellowAccount - "0x870DB41df0905cc5a790f6582a3dA99A4A33F923": TransparentUpgradeableProxy # AccountFactory + "0x870DB41df0905cc5a790f6582a3dA99A4A33F923": TransparentUpgradeableProxy "0x00000000860913f37fab81ce8ce4E5BD1f664482": MellowAccountV1 +rpc_url_env_var: MANTLE_RPC_URL + explorer_hostname: api.etherscan.io explorer_token_env_var: ETHERSCAN_EXPLORER_TOKEN explorer_chain_id: 5000 +deployment_gas_limit: 30000000000 # Mantle has inflated gas costs + github_repo: url: https://github.com/mellow-finance/flexible-vaults + # See https://docs.lido.fi/earn/audits + # Latest one: https://docs.lido.fi/assets/files/2026-03-02_Nethermind_NM-0758_Mellow-16bc93dbff41496cfb995655c453cf0f.pdf commit: c9c71818f0a8bead183f9860db3b8bbceb7b8f37 relative_root: "" From 037f203dc447f7d2dffe6c8108e48bb16d4a2e51 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Sun, 5 Apr 2026 18:37:38 +0100 Subject: [PATCH 06/35] refactor: remove skip_user_input local var, use args.yes directly --- diffyscan/diffyscan.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/diffyscan/diffyscan.py b/diffyscan/diffyscan.py index 06885bc..ba22aac 100644 --- a/diffyscan/diffyscan.py +++ b/diffyscan/diffyscan.py @@ -701,7 +701,6 @@ def main() -> None: """Main entry point for the diffyscan application.""" load_dotenv() args = parse_arguments() - skip_user_input = args.yes if args.quiet: logger.set_level("okay") else: @@ -757,7 +756,7 @@ def main() -> None: enable_binary_comparison, args.cache_explorer, args.cache_github, - skip_user_input, + args.yes, args.contract_filter, args.local_rpc, ) From de92d2ddc87620f66ff60a49aeb01ada93149842 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Sun, 5 Apr 2026 18:46:54 +0100 Subject: [PATCH 07/35] feat: add arbitrum meta core config Add Arbitrum mainnet Mellow core config with all contract addresses, constructor calldata for bytecode comparison, and rpc_url_env_var. Known diff: RedeemQueue deployed from commit f164438c2d0d before shareManager_.burn() was added in later commits. --- .env.example | 1 + .../mainnet/meta/meta_core_config.yaml | 126 ++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 config_samples/arbitrum/mainnet/meta/meta_core_config.yaml diff --git a/.env.example b/.env.example index 239a1b9..904c517 100644 --- a/.env.example +++ b/.env.example @@ -14,3 +14,4 @@ LOCAL_RPC_URL=http://127.0.0.1:8545 REMOTE_RPC_URL=https://eth.drpc.org ETHEREUM_RPC_URL=https://eth.drpc.org MANTLE_RPC_URL=https://rpc.mantle.xyz +ARBITRUM_RPC_URL=https://arb1.arbitrum.io/rpc diff --git a/config_samples/arbitrum/mainnet/meta/meta_core_config.yaml b/config_samples/arbitrum/mainnet/meta/meta_core_config.yaml new file mode 100644 index 0000000..64b4ac4 --- /dev/null +++ b/config_samples/arbitrum/mainnet/meta/meta_core_config.yaml @@ -0,0 +1,126 @@ +# Core implementations and factories — Arbitrum deployment +# + +contracts: + # Factory + "0x0000000f9686896836C39cf721141922Ce42639f": TransparentUpgradeableProxy + "0x0000000397b71C8f3182Fd40D247330D218fdC72": Factory + + # Consensus + "0xaEEB06CBd91A18b51a2D30b61477eAeE3a9633C3": TransparentUpgradeableProxy + "0x0000000167598d2C78E2313fD5328E16bD9A0b13": Consensus + + # DepositQueue + "0xBB92A7B9695750e1234BaB18F83b73686dd09854": TransparentUpgradeableProxy + "0x00000006dA9f179BFE250Dd1c51cD2d3581930c8": DepositQueue + "0x00000003887dfBCEbD1e4097Ad89B690de7eFbf9": SignatureDepositQueue + + # FeeManager + "0xF7223356819Ea48f25880b6c2ab3e907CC336D45": TransparentUpgradeableProxy + "0x0000000dE74e5D51651326E0A3e1ACA94bEAF6E1": FeeManager + + # Oracle + "0x0CdFf250C7a071fdc72340D820C5C8e29507Aaad": TransparentUpgradeableProxy + "0x0000000F0d3D1c31b72368366A4049C05E291D58": Oracle + + # RedeemQueue + "0xfe76b5fd238553D65Ce6dd0A572C0fda629F8421": TransparentUpgradeableProxy + "0x0000000285805eac535DADdb9648F1E10DfdC411": RedeemQueue + "0x0000000b2082667589A16c4cF18e9f923781c471": SignatureRedeemQueue + + # RiskManager + "0xa51E4FA916b939Fa451520D2B7600c740d86E5A0": TransparentUpgradeableProxy + "0x0000000714cf2851baC1AE2f41871862e9D216fD": RiskManager + + # ShareManager + "0x952f39AA62E94db3Ad0d1C7D1E43C1a8519E45D8": TransparentUpgradeableProxy + "0x0000000E8eb7173fA1a3ba60eCA325bcB6aaf378": TokenizedShareManager + "0x00000005564AAE40D88e2F08dA71CBe156767977": BasicShareManager + + # Subvault + "0x75FE0d73d3C64cdC1C6449D9F977Be6857c4d011": TransparentUpgradeableProxy + "0x0000000E535B4E063f8372933A55470e67910a66": Subvault + + # Verifier + "0x04B30b1e98950e6A13550d84e991bE0d734C2c61": TransparentUpgradeableProxy + "0x000000047Fc878662006E78D5174FB4285637966": Verifier + + # Vault + "0x4E38F679e46B3216f0bd4B314E9C429AFfB1dEE3": TransparentUpgradeableProxy + "0x0000000615B2771511dAa693aC07BE5622869E01": Vault + + "0x0000000263Fb29C3D6B0C5837883519eF05ea20A": BitmaskVerifier + + # ERC20Verifier + "0x77A83AcBf7A6df20f1D681b4810437d74AE790F8": TransparentUpgradeableProxy + "0x00000009207D366cBB8549837F8Ae4bf800Af2D6": ERC20Verifier + + "0x000000028be48f9E62E13403480B60C4822C5aa5": VaultConfigurator + + # Hooks + "0x0000000637f1b1ccDA4Af2dB6CDDf5e5Ec45fd93": BasicRedeemHook + "0x00000004d3B17e5391eb571dDb8fDF95646ca827": RedirectingDepositHook + + "0x000000005F543c38d5ea6D0bF10A50974Eb55E35": OracleHelper + +rpc_url_env_var: ARBITRUM_RPC_URL +explorer_hostname: api.etherscan.io +explorer_token_env_var: ETHERSCAN_EXPLORER_TOKEN +explorer_chain_id: 42161 + +github_repo: + url: https://github.com/mellow-finance/flexible-vaults + commit: c9c71818f0a8bead183f9860db3b8bbceb7b8f37 + relative_root: "" + +dependencies: + lib/contracts: + url: https://github.com/cowprotocol/contracts + commit: c94c595a791681cf8ba7495117dcde397b932885 + relative_root: "" + lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts + commit: e4f70216d759d8e6a64144a9e1f7bbeed78e7079 + relative_root: contracts + # version 5.3.0 + lib/openzeppelin-contracts-upgradeable/contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable + commit: 60b305a8f3ff0c7688f02ac470417b6bbf1c4d27 + relative_root: contracts + # version 5.3.0 + +bytecode_comparison: + constructor_calldata: + "0x0000000f9686896836C39cf721141922Ce42639f": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000397b71C8f3182Fd40D247330D218fdC72": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Factory + "0xaEEB06CBd91A18b51a2D30b61477eAeE3a9633C3": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000167598d2C78E2313fD5328E16bD9A0b13": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Consensus + "0xBB92A7B9695750e1234BaB18F83b73686dd09854": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000006dA9f179BFE250Dd1c51cD2d3581930c8": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # DepositQueue + "0x00000003887dfBCEbD1e4097Ad89B690de7eFbf9": "00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000aeeb06cbd91a18b51a2d30b61477eaee3a9633c300000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SignatureDepositQueue + "0x0000000dE74e5D51651326E0A3e1ACA94bEAF6E1": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # FeeManager + "0xF7223356819Ea48f25880b6c2ab3e907CC336D45": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000F0d3D1c31b72368366A4049C05E291D58": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Oracle + "0x0CdFf250C7a071fdc72340D820C5C8e29507Aaad": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000285805eac535DADdb9648F1E10DfdC411": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RedeemQueue + "0xfe76b5fd238553D65Ce6dd0A572C0fda629F8421": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000b2082667589A16c4cF18e9f923781c471": "00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000aeeb06cbd91a18b51a2d30b61477eaee3a9633c300000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SignatureRedeemQueue + "0x0000000714cf2851baC1AE2f41871862e9D216fD": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RiskManager + "0xa51E4FA916b939Fa451520D2B7600c740d86E5A0": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000E8eb7173fA1a3ba60eCA325bcB6aaf378": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # TokenizedShareManager + "0x952f39AA62E94db3Ad0d1C7D1E43C1a8519E45D8": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000005564AAE40D88e2F08dA71CBe156767977": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # BasicShareManager + "0x0000000E535B4E063f8372933A55470e67910a66": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault + "0x75FE0d73d3C64cdC1C6449D9F977Be6857c4d011": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x000000047Fc878662006E78D5174FB4285637966": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier + "0x04B30b1e98950e6A13550d84e991bE0d734C2c61": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000615B2771511dAa693aC07BE5622869E01": "00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000bb92a7b9695750e1234bab18f83b73686dd09854000000000000000000000000fe76b5fd238553d65ce6dd0a572c0fda629f842100000000000000000000000075fe0d73d3c64cdc1c6449d9f977be6857c4d01100000000000000000000000004b30b1e98950e6a13550d84e991be0d734c2c6100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Vault + "0x4E38F679e46B3216f0bd4B314E9C429AFfB1dEE3": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x77A83AcBf7A6df20f1D681b4810437d74AE790F8": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000009207D366cBB8549837F8Ae4bf800Af2D6": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # ERC20Verifier + "0x000000028be48f9E62E13403480B60C4822C5aa5": "000000000000000000000000952f39aa62e94db3ad0d1c7d1e43c1a8519e45d8000000000000000000000000f7223356819ea48f25880b6c2ab3e907cc336d45000000000000000000000000a51e4fa916b939fa451520d2b7600c740d86e5a00000000000000000000000000cdff250c7a071fdc72340d820c5c8e29507aaad0000000000000000000000004e38f679e46b3216f0bd4b314e9c429affb1dee3" # VaultConfigurator + +# Known source diffs: +# - RedeemQueue (0x0000000285805eac535DADdb9648F1E10DfdC411): +# deployed from commit f164438c2d0d before shareManager_.burn() call was added +# (fixed in 685be8395aef: "fix") From d830945cd783ba47013cbd1441e45c98a9a6bd0a Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Sun, 5 Apr 2026 21:21:28 +0100 Subject: [PATCH 08/35] feat: add base meta configs with mainnet directory scheme Move base meta configs to mainnet/ directory. Add full constructor calldata for bytecode comparison (shared CREATE2 addresses with Mantle). Add BurnableTokenizedShareManager missing from docs. Known diff: SyncDepositQueue deployed from commit 173e06c99f4f before immutable keyword was added to _syncDepositQueueStorageSlot. --- .../base/mainnet/meta/meta_core_config.yaml | 139 ++++++++++++++++++ .../meta/meta_usdc_base_config.yaml | 1 + 2 files changed, 140 insertions(+) create mode 100644 config_samples/base/mainnet/meta/meta_core_config.yaml rename config_samples/base/{ => mainnet}/meta/meta_usdc_base_config.yaml (99%) diff --git a/config_samples/base/mainnet/meta/meta_core_config.yaml b/config_samples/base/mainnet/meta/meta_core_config.yaml new file mode 100644 index 0000000..7c33210 --- /dev/null +++ b/config_samples/base/mainnet/meta/meta_core_config.yaml @@ -0,0 +1,139 @@ +# Core implementations and factories — Base deployment +# + +contracts: + # Factory + "0x00000000741292C88f9fF5050b07051C4f592EBf": TransparentUpgradeableProxy + "0x0000000072BAfCeAff1AD0237Ea58f06cfc4467F": Factory + + # Consensus + "0xAfef40968b5304135677f0C89203948e1A145105": TransparentUpgradeableProxy + "0x000000007e6b679B9196a1609e5Bc2405eDFd6Aa": Consensus + + # DepositQueue + "0xF429ba2a8437E7de85078CF7481E8Ad52df7E58c": TransparentUpgradeableProxy + "0x00000000B2d2373aAF1C370cFE4e1Ee8BDE7C546": DepositQueue + "0x00000000c4Bf4fdF6Be7BD1e8A833A9007393445": SyncDepositQueue + "0x000000000Af33501e5BDAF9B481Ad2712a024727": SignatureDepositQueue + + # FeeManager + "0x52d56c20B0C8d403888880d0A1610e5ed17addA8": TransparentUpgradeableProxy + "0x00000000C18039E1F415fe07C33A316232238648": FeeManager + + # Oracle + "0x727c295b5D99b15280Ca8736b6F97ABA6aEd0E88": TransparentUpgradeableProxy + "0x000000009adE4dAE1f868775A3f087945983f062": Oracle + + # RedeemQueue + "0xe08dc488bD6756323F8bf478869529D03db627ef": TransparentUpgradeableProxy + "0x0000000045d70ee8145135f08309fF5B1A63d43F": RedeemQueue + "0x000000008D14Ef3658805765107d9F12776f4138": SignatureRedeemQueue + + # RiskManager + "0x9885215ef8DB25C87466E73018061e532784D716": TransparentUpgradeableProxy + "0x00000000CC26BC741E75B181738Ac2B16156179b": RiskManager + + # ShareManager + "0xDA2a7aE07B6803feF9d95E47Ab83c8a5A09929F0": TransparentUpgradeableProxy + "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": TokenizedShareManager + "0x00000000e5F0cddA56447b2a29e2847A52c8725D": BasicShareManager + "0x00000000C534B8680e3aa7165DeDc3Ab8781f602": BurnableTokenizedShareManager + + # Subvault + "0xA64e324DFF04e3C0613ff0706867868C7b370a45": TransparentUpgradeableProxy + "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault + + # Verifier + "0x9fBAF5AEB9F52bA57E1cC1D3050eac6d75Df8ae7": TransparentUpgradeableProxy + "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier + + # Vault + "0xBBCD2aC50aF2EA12Cc9cb7B16dBDa85859BeB3da": TransparentUpgradeableProxy + "0x0000000070f44289ec5ea3E5972f058f75B29801": Vault + + # SwapModule + "0xC5a52E4bB718Dfe86938e5cB967362EdA1E62698": TransparentUpgradeableProxy + "0x0000000022B540Fe06d7a9c32d81163971b583D6": SwapModule + + "0x0000000009E9368ad21fc19DCE1cFcf9Af6dE339": BitmaskVerifier + + # ERC20Verifier + "0x711F6236e325634AA8c1F692b5312bfF3A8558D0": TransparentUpgradeableProxy + "0x00000000ACD80376E999Af8c424e5e33BD224A08": ERC20Verifier + + "0x0000000005a67199ABE0f9C995EAB9DaDfA31Ccd": VaultConfigurator + + # Hooks + "0x00000000176dD23550c3845746b2036E90DC5912": BasicRedeemHook + "0x0000000024ABbd08686Abb2987831dEa88eF1180": RedirectingDepositHook + + "0x000000007d2552AD746Af5c13f91B5e72f97c2B7": OracleHelper + + # MellowAccount + "0x870DB41df0905cc5a790f6582a3dA99A4A33F923": TransparentUpgradeableProxy + "0x00000000860913f37fab81ce8ce4E5BD1f664482": MellowAccountV1 + +rpc_url_env_var: BASE_RPC_URL +explorer_hostname: api.etherscan.io +explorer_token_env_var: ETHERSCAN_EXPLORER_TOKEN +explorer_chain_id: 8453 + +github_repo: + url: https://github.com/mellow-finance/flexible-vaults + commit: c9c71818f0a8bead183f9860db3b8bbceb7b8f37 + relative_root: "" + +dependencies: + lib/contracts: + url: https://github.com/cowprotocol/contracts + commit: c94c595a791681cf8ba7495117dcde397b932885 + relative_root: "" + lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts + commit: e4f70216d759d8e6a64144a9e1f7bbeed78e7079 + relative_root: contracts + # version 5.3.0 + lib/openzeppelin-contracts-upgradeable/contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable + commit: 60b305a8f3ff0c7688f02ac470417b6bbf1c4d27 + relative_root: contracts + # version 5.3.0 + +bytecode_comparison: + constructor_calldata: + "0x00000000741292C88f9fF5050b07051C4f592EBf": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000072BAfCeAff1AD0237Ea58f06cfc4467F": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Factory + "0xAfef40968b5304135677f0C89203948e1A145105": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x000000007e6b679B9196a1609e5Bc2405eDFd6Aa": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Consensus + "0xF429ba2a8437E7de85078CF7481E8Ad52df7E58c": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000B2d2373aAF1C370cFE4e1Ee8BDE7C546": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # DepositQueue + "0x000000000Af33501e5BDAF9B481Ad2712a024727": "00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000afef40968b5304135677f0c89203948e1a14510500000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SignatureDepositQueue + "0x52d56c20B0C8d403888880d0A1610e5ed17addA8": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000C18039E1F415fe07C33A316232238648": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # FeeManager + "0x727c295b5D99b15280Ca8736b6F97ABA6aEd0E88": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x000000009adE4dAE1f868775A3f087945983f062": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Oracle + "0xe08dc488bD6756323F8bf478869529D03db627ef": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000045d70ee8145135f08309fF5B1A63d43F": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RedeemQueue + "0x000000008D14Ef3658805765107d9F12776f4138": "00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000afef40968b5304135677f0c89203948e1a14510500000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SignatureRedeemQueue + "0x9885215ef8DB25C87466E73018061e532784D716": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000CC26BC741E75B181738Ac2B16156179b": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RiskManager + "0xDA2a7aE07B6803feF9d95E47Ab83c8a5A09929F0": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # TokenizedShareManager + "0x00000000e5F0cddA56447b2a29e2847A52c8725D": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # BasicShareManager + "0x00000000C534B8680e3aa7165DeDc3Ab8781f602": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # BurnableTokenizedShareManager + "0xA64e324DFF04e3C0613ff0706867868C7b370a45": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000CA30010B8417f791250AE221FdaD5920": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault + "0x9fBAF5AEB9F52bA57E1cC1D3050eac6d75Df8ae7": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x000000007e86a96e279662108cc19bA4c32EdE3C": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier + "0xBBCD2aC50aF2EA12Cc9cb7B16dBDa85859BeB3da": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000070f44289ec5ea3E5972f058f75B29801": "00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f429ba2a8437e7de85078cf7481e8ad52df7e58c000000000000000000000000e08dc488bd6756323f8bf478869529d03db627ef000000000000000000000000a64e324dff04e3c0613ff0706867868c7b370a450000000000000000000000009fbaf5aeb9f52ba57e1cc1d3050eac6d75df8ae700000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Vault + "0xC5a52E4bB718Dfe86938e5cB967362EdA1E62698": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x711F6236e325634AA8c1F692b5312bfF3A8558D0": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000ACD80376E999Af8c424e5e33BD224A08": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # ERC20Verifier + "0x0000000005a67199ABE0f9C995EAB9DaDfA31Ccd": "000000000000000000000000da2a7ae07b6803fef9d95e47ab83c8a5a09929f000000000000000000000000052d56c20b0c8d403888880d0a1610e5ed17adda80000000000000000000000009885215ef8db25c87466e73018061e532784d716000000000000000000000000727c295b5d99b15280ca8736b6f97aba6aed0e88000000000000000000000000bbcd2ac50af2ea12cc9cb7b16dbda85859beb3da" # VaultConfigurator + "0x870DB41df0905cc5a790f6582a3dA99A4A33F923": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + +# Known source diffs: +# - SyncDepositQueue (0x00000000c4Bf4fdF6Be7BD1e8A833A9007393445): +# deployed from commit 173e06c99f4f before `immutable` was added to _syncDepositQueueStorageSlot +# (fixed in c9c71818: "add fix + test for SyncDepositQueue") diff --git a/config_samples/base/meta/meta_usdc_base_config.yaml b/config_samples/base/mainnet/meta/meta_usdc_base_config.yaml similarity index 99% rename from config_samples/base/meta/meta_usdc_base_config.yaml rename to config_samples/base/mainnet/meta/meta_usdc_base_config.yaml index 85ee9bf..cf3772d 100644 --- a/config_samples/base/meta/meta_usdc_base_config.yaml +++ b/config_samples/base/mainnet/meta/meta_usdc_base_config.yaml @@ -43,6 +43,7 @@ contracts: "0x0555306F5063f62a3A7896A9eaBA0754c1185a67": TimelockController "0x8A6a1648A39C7F3dE64282e8bF2fcD783CCF08b0": OracleSubmitter +rpc_url_env_var: BASE_RPC_URL explorer_hostname: api.etherscan.io explorer_token_env_var: ETHERSCAN_EXPLORER_TOKEN explorer_chain_id: 8453 From a98d7c1b2249c5996fe999160025a780b6037ba6 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Sun, 5 Apr 2026 21:21:47 +0100 Subject: [PATCH 09/35] chore: update .env.example with chain-specific RPC URLs --- .env.example | 1 + 1 file changed, 1 insertion(+) diff --git a/.env.example b/.env.example index 904c517..9c4b3a9 100644 --- a/.env.example +++ b/.env.example @@ -15,3 +15,4 @@ REMOTE_RPC_URL=https://eth.drpc.org ETHEREUM_RPC_URL=https://eth.drpc.org MANTLE_RPC_URL=https://rpc.mantle.xyz ARBITRUM_RPC_URL=https://arb1.arbitrum.io/rpc +BASE_RPC_URL=https://base.drpc.org From 83dceced98932342dbfdb8658672cb82f700dc8c Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Sun, 5 Apr 2026 21:26:54 +0100 Subject: [PATCH 10/35] style: apply black formatting --- diffyscan/diffyscan.py | 11 ++++++----- diffyscan/utils/node_handler.py | 7 ++++++- tests/test_contract_filter.py | 17 ++++------------- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/diffyscan/diffyscan.py b/diffyscan/diffyscan.py index ba22aac..f5fca42 100644 --- a/diffyscan/diffyscan.py +++ b/diffyscan/diffyscan.py @@ -174,7 +174,9 @@ def run_bytecode_diff( deployment_call_data = _append_calldata(contract_creation_code, calldata) gas_limit = config.get("deployment_gas_limit") extra = {"gas_limit": gas_limit} if gas_limit else {} - local_deployed_bytecode = simulate_deployment(deployment_call_data, remote_rpc_url, **extra) + local_deployed_bytecode = simulate_deployment( + deployment_call_data, remote_rpc_url, **extra + ) is_fully_matched = local_deployed_bytecode == remote_deployed_bytecode @@ -358,7 +360,8 @@ def _load_explorer_token(config: dict) -> str: def _setup_binary_comparison(config: dict, use_local_rpc: bool = False) -> str: """Load RPC URL and configure exception handling for bytecode comparison.""" rpc_env_var = ( - "LOCAL_RPC_URL" if use_local_rpc + "LOCAL_RPC_URL" + if use_local_rpc else config.get("rpc_url_env_var", "REMOTE_RPC_URL") ) remote_rpc_url = load_env(rpc_env_var, masked=True, required=True) @@ -458,9 +461,7 @@ def process_config( # Apply contract filter if specified filter_set = ( - set(addr.lower() for addr in contract_filter) - if contract_filter - else None + set(addr.lower() for addr in contract_filter) if contract_filter else None ) for contract_address, contract_name in config["contracts"].items(): diff --git a/diffyscan/utils/node_handler.py b/diffyscan/utils/node_handler.py index 6583117..97eb89a 100644 --- a/diffyscan/utils/node_handler.py +++ b/diffyscan/utils/node_handler.py @@ -44,7 +44,12 @@ def get_chain_id(rpc_url: str) -> int: return chain_id -def simulate_deployment(data: str, rpc_url: str, caller: str = DEFAULT_CALLER, gas_limit: int = DEFAULT_DEPLOYMENT_GAS_LIMIT) -> str: +def simulate_deployment( + data: str, + rpc_url: str, + caller: str = DEFAULT_CALLER, + gas_limit: int = DEFAULT_DEPLOYMENT_GAS_LIMIT, +) -> str: """Simulate contract deployment via eth_call and return deployed runtime bytecode.""" logger.info(f'Simulating deployment via eth_call on "{mask_text(rpc_url)}" ...') diff --git a/tests/test_contract_filter.py b/tests/test_contract_filter.py index d0f3d6d..3c99c91 100644 --- a/tests/test_contract_filter.py +++ b/tests/test_contract_filter.py @@ -2,7 +2,6 @@ import pytest - CONTRACTS = { "0xAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa": "ContractA", "0xBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBb": "ContractB", @@ -29,12 +28,8 @@ def test_no_filter_returns_all(): def test_filter_single_contract(): - filtered = apply_filter( - CONTRACTS, ["0xAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa"] - ) - assert list(filtered.keys()) == [ - "0xAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa" - ] + filtered = apply_filter(CONTRACTS, ["0xAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa"]) + assert list(filtered.keys()) == ["0xAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa"] assert filtered["0xAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa"] == "ContractA" @@ -51,17 +46,13 @@ def test_filter_multiple_contracts(): def test_filter_is_case_insensitive(): - filtered = apply_filter( - CONTRACTS, ["0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"] - ) + filtered = apply_filter(CONTRACTS, ["0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]) assert len(filtered) == 1 assert "ContractA" in filtered.values() def test_filter_nonexistent_address_returns_empty(): - filtered = apply_filter( - CONTRACTS, ["0x0000000000000000000000000000000000000000"] - ) + filtered = apply_filter(CONTRACTS, ["0x0000000000000000000000000000000000000000"]) assert filtered == {} From fb8909e737cb1c0e3806c23507b08b2422a7b5be Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 7 Apr 2026 10:39:14 +0100 Subject: [PATCH 11/35] feat: rewrite arbitrum config with new CREATE2 deployment addresses Mellow redeployed on Arbitrum with deterministic CREATE2 addresses matching Mantle/Base. Update all contract addresses and constructor calldata accordingly. Only SwapModule has a unique Arbitrum address (0x00000000c324E2d1). --- .../mainnet/meta/meta_core_config.yaml | 140 ++++++++++-------- 1 file changed, 75 insertions(+), 65 deletions(-) diff --git a/config_samples/arbitrum/mainnet/meta/meta_core_config.yaml b/config_samples/arbitrum/mainnet/meta/meta_core_config.yaml index 64b4ac4..9361f45 100644 --- a/config_samples/arbitrum/mainnet/meta/meta_core_config.yaml +++ b/config_samples/arbitrum/mainnet/meta/meta_core_config.yaml @@ -3,65 +3,75 @@ contracts: # Factory - "0x0000000f9686896836C39cf721141922Ce42639f": TransparentUpgradeableProxy - "0x0000000397b71C8f3182Fd40D247330D218fdC72": Factory + "0x00000000741292C88f9fF5050b07051C4f592EBf": TransparentUpgradeableProxy + "0x0000000072BAfCeAff1AD0237Ea58f06cfc4467F": Factory # Consensus - "0xaEEB06CBd91A18b51a2D30b61477eAeE3a9633C3": TransparentUpgradeableProxy - "0x0000000167598d2C78E2313fD5328E16bD9A0b13": Consensus + "0xAfef40968b5304135677f0C89203948e1A145105": TransparentUpgradeableProxy + "0x000000007e6b679B9196a1609e5Bc2405eDFd6Aa": Consensus # DepositQueue - "0xBB92A7B9695750e1234BaB18F83b73686dd09854": TransparentUpgradeableProxy - "0x00000006dA9f179BFE250Dd1c51cD2d3581930c8": DepositQueue - "0x00000003887dfBCEbD1e4097Ad89B690de7eFbf9": SignatureDepositQueue + "0xF429ba2a8437E7de85078CF7481E8Ad52df7E58c": TransparentUpgradeableProxy + "0x00000000B2d2373aAF1C370cFE4e1Ee8BDE7C546": DepositQueue + "0x000000001CC8c3E40856E956db870095EF6C98bd": SyncDepositQueue + "0x000000000Af33501e5BDAF9B481Ad2712a024727": SignatureDepositQueue # FeeManager - "0xF7223356819Ea48f25880b6c2ab3e907CC336D45": TransparentUpgradeableProxy - "0x0000000dE74e5D51651326E0A3e1ACA94bEAF6E1": FeeManager + "0x52d56c20B0C8d403888880d0A1610e5ed17addA8": TransparentUpgradeableProxy + "0x00000000C18039E1F415fe07C33A316232238648": FeeManager # Oracle - "0x0CdFf250C7a071fdc72340D820C5C8e29507Aaad": TransparentUpgradeableProxy - "0x0000000F0d3D1c31b72368366A4049C05E291D58": Oracle + "0x727c295b5D99b15280Ca8736b6F97ABA6aEd0E88": TransparentUpgradeableProxy + "0x000000009adE4dAE1f868775A3f087945983f062": Oracle # RedeemQueue - "0xfe76b5fd238553D65Ce6dd0A572C0fda629F8421": TransparentUpgradeableProxy - "0x0000000285805eac535DADdb9648F1E10DfdC411": RedeemQueue - "0x0000000b2082667589A16c4cF18e9f923781c471": SignatureRedeemQueue + "0xe08dc488bD6756323F8bf478869529D03db627ef": TransparentUpgradeableProxy + "0x0000000045d70ee8145135f08309fF5B1A63d43F": RedeemQueue + "0x000000008D14Ef3658805765107d9F12776f4138": SignatureRedeemQueue # RiskManager - "0xa51E4FA916b939Fa451520D2B7600c740d86E5A0": TransparentUpgradeableProxy - "0x0000000714cf2851baC1AE2f41871862e9D216fD": RiskManager + "0x9885215ef8DB25C87466E73018061e532784D716": TransparentUpgradeableProxy + "0x00000000CC26BC741E75B181738Ac2B16156179b": RiskManager # ShareManager - "0x952f39AA62E94db3Ad0d1C7D1E43C1a8519E45D8": TransparentUpgradeableProxy - "0x0000000E8eb7173fA1a3ba60eCA325bcB6aaf378": TokenizedShareManager - "0x00000005564AAE40D88e2F08dA71CBe156767977": BasicShareManager + "0xDA2a7aE07B6803feF9d95E47Ab83c8a5A09929F0": TransparentUpgradeableProxy + "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": TokenizedShareManager + "0x00000000e5F0cddA56447b2a29e2847A52c8725D": BasicShareManager + "0x00000000C534B8680e3aa7165DeDc3Ab8781f602": BurnableTokenizedShareManager # Subvault - "0x75FE0d73d3C64cdC1C6449D9F977Be6857c4d011": TransparentUpgradeableProxy - "0x0000000E535B4E063f8372933A55470e67910a66": Subvault + "0xA64e324DFF04e3C0613ff0706867868C7b370a45": TransparentUpgradeableProxy + "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault # Verifier - "0x04B30b1e98950e6A13550d84e991bE0d734C2c61": TransparentUpgradeableProxy - "0x000000047Fc878662006E78D5174FB4285637966": Verifier + "0x9fBAF5AEB9F52bA57E1cC1D3050eac6d75Df8ae7": TransparentUpgradeableProxy + "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier # Vault - "0x4E38F679e46B3216f0bd4B314E9C429AFfB1dEE3": TransparentUpgradeableProxy - "0x0000000615B2771511dAa693aC07BE5622869E01": Vault + "0xBBCD2aC50aF2EA12Cc9cb7B16dBDa85859BeB3da": TransparentUpgradeableProxy + "0x0000000070f44289ec5ea3E5972f058f75B29801": Vault - "0x0000000263Fb29C3D6B0C5837883519eF05ea20A": BitmaskVerifier + # SwapModule + "0xC5a52E4bB718Dfe86938e5cB967362EdA1E62698": TransparentUpgradeableProxy + "0x00000000c324E2d11EcCB03A061F69B5FE123645": SwapModule + + "0x0000000009E9368ad21fc19DCE1cFcf9Af6dE339": BitmaskVerifier # ERC20Verifier - "0x77A83AcBf7A6df20f1D681b4810437d74AE790F8": TransparentUpgradeableProxy - "0x00000009207D366cBB8549837F8Ae4bf800Af2D6": ERC20Verifier + "0x711F6236e325634AA8c1F692b5312bfF3A8558D0": TransparentUpgradeableProxy + "0x00000000ACD80376E999Af8c424e5e33BD224A08": ERC20Verifier - "0x000000028be48f9E62E13403480B60C4822C5aa5": VaultConfigurator + "0x0000000005a67199ABE0f9C995EAB9DaDfA31Ccd": VaultConfigurator # Hooks - "0x0000000637f1b1ccDA4Af2dB6CDDf5e5Ec45fd93": BasicRedeemHook - "0x00000004d3B17e5391eb571dDb8fDF95646ca827": RedirectingDepositHook + "0x00000000176dD23550c3845746b2036E90DC5912": BasicRedeemHook + "0x0000000024ABbd08686Abb2987831dEa88eF1180": RedirectingDepositHook + + "0x000000007d2552AD746Af5c13f91B5e72f97c2B7": OracleHelper - "0x000000005F543c38d5ea6D0bF10A50974Eb55E35": OracleHelper + # MellowAccount + "0x870DB41df0905cc5a790f6582a3dA99A4A33F923": TransparentUpgradeableProxy + "0x00000000860913f37fab81ce8ce4E5BD1f664482": MellowAccountV1 rpc_url_env_var: ARBITRUM_RPC_URL explorer_hostname: api.etherscan.io @@ -91,36 +101,36 @@ dependencies: bytecode_comparison: constructor_calldata: - "0x0000000f9686896836C39cf721141922Ce42639f": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x0000000397b71C8f3182Fd40D247330D218fdC72": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Factory - "0xaEEB06CBd91A18b51a2D30b61477eAeE3a9633C3": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x0000000167598d2C78E2313fD5328E16bD9A0b13": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Consensus - "0xBB92A7B9695750e1234BaB18F83b73686dd09854": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x00000006dA9f179BFE250Dd1c51cD2d3581930c8": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # DepositQueue - "0x00000003887dfBCEbD1e4097Ad89B690de7eFbf9": "00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000aeeb06cbd91a18b51a2d30b61477eaee3a9633c300000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SignatureDepositQueue - "0x0000000dE74e5D51651326E0A3e1ACA94bEAF6E1": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # FeeManager - "0xF7223356819Ea48f25880b6c2ab3e907CC336D45": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x0000000F0d3D1c31b72368366A4049C05E291D58": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Oracle - "0x0CdFf250C7a071fdc72340D820C5C8e29507Aaad": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x0000000285805eac535DADdb9648F1E10DfdC411": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RedeemQueue - "0xfe76b5fd238553D65Ce6dd0A572C0fda629F8421": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x0000000b2082667589A16c4cF18e9f923781c471": "00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000aeeb06cbd91a18b51a2d30b61477eaee3a9633c300000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SignatureRedeemQueue - "0x0000000714cf2851baC1AE2f41871862e9D216fD": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RiskManager - "0xa51E4FA916b939Fa451520D2B7600c740d86E5A0": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x0000000E8eb7173fA1a3ba60eCA325bcB6aaf378": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # TokenizedShareManager - "0x952f39AA62E94db3Ad0d1C7D1E43C1a8519E45D8": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x00000005564AAE40D88e2F08dA71CBe156767977": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # BasicShareManager - "0x0000000E535B4E063f8372933A55470e67910a66": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault - "0x75FE0d73d3C64cdC1C6449D9F977Be6857c4d011": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x000000047Fc878662006E78D5174FB4285637966": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier - "0x04B30b1e98950e6A13550d84e991bE0d734C2c61": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x0000000615B2771511dAa693aC07BE5622869E01": "00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000bb92a7b9695750e1234bab18f83b73686dd09854000000000000000000000000fe76b5fd238553d65ce6dd0a572c0fda629f842100000000000000000000000075fe0d73d3c64cdc1c6449d9f977be6857c4d01100000000000000000000000004b30b1e98950e6a13550d84e991be0d734c2c6100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Vault - "0x4E38F679e46B3216f0bd4B314E9C429AFfB1dEE3": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x77A83AcBf7A6df20f1D681b4810437d74AE790F8": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x00000009207D366cBB8549837F8Ae4bf800Af2D6": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # ERC20Verifier - "0x000000028be48f9E62E13403480B60C4822C5aa5": "000000000000000000000000952f39aa62e94db3ad0d1c7d1e43c1a8519e45d8000000000000000000000000f7223356819ea48f25880b6c2ab3e907cc336d45000000000000000000000000a51e4fa916b939fa451520d2b7600c740d86e5a00000000000000000000000000cdff250c7a071fdc72340d820c5c8e29507aaad0000000000000000000000004e38f679e46b3216f0bd4b314e9c429affb1dee3" # VaultConfigurator - -# Known source diffs: -# - RedeemQueue (0x0000000285805eac535DADdb9648F1E10DfdC411): -# deployed from commit f164438c2d0d before shareManager_.burn() call was added -# (fixed in 685be8395aef: "fix") + "0x00000000741292C88f9fF5050b07051C4f592EBf": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000072BAfCeAff1AD0237Ea58f06cfc4467F": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Factory + "0xAfef40968b5304135677f0C89203948e1A145105": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x000000007e6b679B9196a1609e5Bc2405eDFd6Aa": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Consensus + "0xF429ba2a8437E7de85078CF7481E8Ad52df7E58c": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000B2d2373aAF1C370cFE4e1Ee8BDE7C546": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # DepositQueue + "0x000000001CC8c3E40856E956db870095EF6C98bd": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SyncDepositQueue + "0x000000000Af33501e5BDAF9B481Ad2712a024727": "00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000afef40968b5304135677f0c89203948e1a14510500000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SignatureDepositQueue + "0x52d56c20B0C8d403888880d0A1610e5ed17addA8": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000C18039E1F415fe07C33A316232238648": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # FeeManager + "0x727c295b5D99b15280Ca8736b6F97ABA6aEd0E88": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x000000009adE4dAE1f868775A3f087945983f062": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Oracle + "0xe08dc488bD6756323F8bf478869529D03db627ef": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000045d70ee8145135f08309fF5B1A63d43F": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RedeemQueue + "0x000000008D14Ef3658805765107d9F12776f4138": "00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000afef40968b5304135677f0c89203948e1a14510500000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SignatureRedeemQueue + "0x9885215ef8DB25C87466E73018061e532784D716": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000CC26BC741E75B181738Ac2B16156179b": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RiskManager + "0xDA2a7aE07B6803feF9d95E47Ab83c8a5A09929F0": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # TokenizedShareManager + "0x00000000e5F0cddA56447b2a29e2847A52c8725D": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # BasicShareManager + "0x00000000C534B8680e3aa7165DeDc3Ab8781f602": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # BurnableTokenizedShareManager + "0xA64e324DFF04e3C0613ff0706867868C7b370a45": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000CA30010B8417f791250AE221FdaD5920": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault + "0x9fBAF5AEB9F52bA57E1cC1D3050eac6d75Df8ae7": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x000000007e86a96e279662108cc19bA4c32EdE3C": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier + "0xBBCD2aC50aF2EA12Cc9cb7B16dBDa85859BeB3da": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000070f44289ec5ea3E5972f058f75B29801": "00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f429ba2a8437e7de85078cf7481e8ad52df7e58c000000000000000000000000e08dc488bd6756323f8bf478869529d03db627ef000000000000000000000000a64e324dff04e3c0613ff0706867868c7b370a450000000000000000000000009fbaf5aeb9f52ba57e1cc1d3050eac6d75df8ae700000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Vault + "0xC5a52E4bB718Dfe86938e5cB967362EdA1E62698": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x711F6236e325634AA8c1F692b5312bfF3A8558D0": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000ACD80376E999Af8c424e5e33BD224A08": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # ERC20Verifier + "0x0000000005a67199ABE0f9C995EAB9DaDfA31Ccd": "000000000000000000000000da2a7ae07b6803fef9d95e47ab83c8a5a09929f000000000000000000000000052d56c20b0c8d403888880d0a1610e5ed17adda80000000000000000000000009885215ef8db25c87466e73018061e532784d716000000000000000000000000727c295b5d99b15280ca8736b6f97aba6aed0e88000000000000000000000000bbcd2ac50af2ea12cc9cb7b16dbda85859beb3da" # VaultConfigurator + "0x870DB41df0905cc5a790f6582a3dA99A4A33F923": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + # SwapModule (0x00000000c324E2d11EcCB03A061F69B5FE123645) calldata not yet available From 24f85219b3ae2b78ca878efe8300bac42503432f Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 7 Apr 2026 10:52:41 +0100 Subject: [PATCH 12/35] feat: update base SyncDepositQueue to new CREATE2 address SyncDepositQueue on Base updated from 0x00000000c4Bf4fdF6... (old, pre-audit deployment without immutable fix) to 0x000000001CC8c3E40856E956db870095EF6C98bd (same as Mantle, matches audited commit c9c71818). --- config_samples/base/mainnet/meta/meta_core_config.yaml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/config_samples/base/mainnet/meta/meta_core_config.yaml b/config_samples/base/mainnet/meta/meta_core_config.yaml index 7c33210..838e446 100644 --- a/config_samples/base/mainnet/meta/meta_core_config.yaml +++ b/config_samples/base/mainnet/meta/meta_core_config.yaml @@ -13,7 +13,7 @@ contracts: # DepositQueue "0xF429ba2a8437E7de85078CF7481E8Ad52df7E58c": TransparentUpgradeableProxy "0x00000000B2d2373aAF1C370cFE4e1Ee8BDE7C546": DepositQueue - "0x00000000c4Bf4fdF6Be7BD1e8A833A9007393445": SyncDepositQueue + "0x000000001CC8c3E40856E956db870095EF6C98bd": SyncDepositQueue "0x000000000Af33501e5BDAF9B481Ad2712a024727": SignatureDepositQueue # FeeManager @@ -132,8 +132,4 @@ bytecode_comparison: "0x00000000ACD80376E999Af8c424e5e33BD224A08": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # ERC20Verifier "0x0000000005a67199ABE0f9C995EAB9DaDfA31Ccd": "000000000000000000000000da2a7ae07b6803fef9d95e47ab83c8a5a09929f000000000000000000000000052d56c20b0c8d403888880d0a1610e5ed17adda80000000000000000000000009885215ef8db25c87466e73018061e532784d716000000000000000000000000727c295b5d99b15280ca8736b6f97aba6aed0e88000000000000000000000000bbcd2ac50af2ea12cc9cb7b16dbda85859beb3da" # VaultConfigurator "0x870DB41df0905cc5a790f6582a3dA99A4A33F923": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - -# Known source diffs: -# - SyncDepositQueue (0x00000000c4Bf4fdF6Be7BD1e8A833A9007393445): -# deployed from commit 173e06c99f4f before `immutable` was added to _syncDepositQueueStorageSlot -# (fixed in c9c71818: "add fix + test for SyncDepositQueue") + "0x000000001CC8c3E40856E956db870095EF6C98bd": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SyncDepositQueue From c74a1cb329537e85b2d00b2d04b577811bd8caa3 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 7 Apr 2026 11:14:03 +0100 Subject: [PATCH 13/35] feat: add plasma meta core config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add Plasma (chain ID 9745) Mellow core config with CREATE2 addresses. Contracts not yet verified on Etherscan v2 — config prepared for when verification becomes available. SwapModule address unique to Plasma: 0x00000000015fa996bCA8c842AFEdC334616F283A. --- .../plasma/mainnet/meta/meta_core_config.yaml | 137 ++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 config_samples/plasma/mainnet/meta/meta_core_config.yaml diff --git a/config_samples/plasma/mainnet/meta/meta_core_config.yaml b/config_samples/plasma/mainnet/meta/meta_core_config.yaml new file mode 100644 index 0000000..b3f5f75 --- /dev/null +++ b/config_samples/plasma/mainnet/meta/meta_core_config.yaml @@ -0,0 +1,137 @@ +# Core implementations and factories — Plasma deployment +# NOTE: contracts not yet verified on Etherscan v2 (chain ID 9745) +# + +contracts: + # Factory + "0x00000000741292C88f9fF5050b07051C4f592EBf": TransparentUpgradeableProxy + "0x0000000072BAfCeAff1AD0237Ea58f06cfc4467F": Factory + + # Consensus + "0xAfef40968b5304135677f0C89203948e1A145105": TransparentUpgradeableProxy + "0x000000007e6b679B9196a1609e5Bc2405eDFd6Aa": Consensus + + # DepositQueue + "0xF429ba2a8437E7de85078CF7481E8Ad52df7E58c": TransparentUpgradeableProxy + "0x00000000B2d2373aAF1C370cFE4e1Ee8BDE7C546": DepositQueue + "0x000000001CC8c3E40856E956db870095EF6C98bd": SyncDepositQueue + "0x000000000Af33501e5BDAF9B481Ad2712a024727": SignatureDepositQueue + + # FeeManager + "0x52d56c20B0C8d403888880d0A1610e5ed17addA8": TransparentUpgradeableProxy + "0x00000000C18039E1F415fe07C33A316232238648": FeeManager + + # Oracle + "0x727c295b5D99b15280Ca8736b6F97ABA6aEd0E88": TransparentUpgradeableProxy + "0x000000009adE4dAE1f868775A3f087945983f062": Oracle + + # RedeemQueue + "0xe08dc488bD6756323F8bf478869529D03db627ef": TransparentUpgradeableProxy + "0x0000000045d70ee8145135f08309fF5B1A63d43F": RedeemQueue + "0x000000008D14Ef3658805765107d9F12776f4138": SignatureRedeemQueue + + # RiskManager + "0x9885215ef8DB25C87466E73018061e532784D716": TransparentUpgradeableProxy + "0x00000000CC26BC741E75B181738Ac2B16156179b": RiskManager + + # ShareManager + "0xDA2a7aE07B6803feF9d95E47Ab83c8a5A09929F0": TransparentUpgradeableProxy + "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": TokenizedShareManager + "0x00000000e5F0cddA56447b2a29e2847A52c8725D": BasicShareManager + "0x00000000C534B8680e3aa7165DeDc3Ab8781f602": BurnableTokenizedShareManager + + # Subvault + "0xA64e324DFF04e3C0613ff0706867868C7b370a45": TransparentUpgradeableProxy + "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault + + # Verifier + "0x9fBAF5AEB9F52bA57E1cC1D3050eac6d75Df8ae7": TransparentUpgradeableProxy + "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier + + # Vault + "0xBBCD2aC50aF2EA12Cc9cb7B16dBDa85859BeB3da": TransparentUpgradeableProxy + "0x0000000070f44289ec5ea3E5972f058f75B29801": Vault + + # SwapModule + "0xC5a52E4bB718Dfe86938e5cB967362EdA1E62698": TransparentUpgradeableProxy + "0x00000000015fa996bCA8c842AFEdC334616F283A": SwapModule + + "0x0000000009E9368ad21fc19DCE1cFcf9Af6dE339": BitmaskVerifier + + # ERC20Verifier + "0x711F6236e325634AA8c1F692b5312bfF3A8558D0": TransparentUpgradeableProxy + "0x00000000ACD80376E999Af8c424e5e33BD224A08": ERC20Verifier + + "0x0000000005a67199ABE0f9C995EAB9DaDfA31Ccd": VaultConfigurator + + # Hooks + "0x00000000176dD23550c3845746b2036E90DC5912": BasicRedeemHook + "0x0000000024ABbd08686Abb2987831dEa88eF1180": RedirectingDepositHook + + "0x000000007d2552AD746Af5c13f91B5e72f97c2B7": OracleHelper + + # MellowAccount + "0x870DB41df0905cc5a790f6582a3dA99A4A33F923": TransparentUpgradeableProxy + "0x00000000860913f37fab81ce8ce4E5BD1f664482": MellowAccountV1 + +rpc_url_env_var: PLASMA_RPC_URL +explorer_hostname: api.etherscan.io +explorer_token_env_var: ETHERSCAN_EXPLORER_TOKEN +explorer_chain_id: 9745 + +github_repo: + url: https://github.com/mellow-finance/flexible-vaults + commit: c9c71818f0a8bead183f9860db3b8bbceb7b8f37 + relative_root: "" + +dependencies: + lib/contracts: + url: https://github.com/cowprotocol/contracts + commit: c94c595a791681cf8ba7495117dcde397b932885 + relative_root: "" + lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts + commit: e4f70216d759d8e6a64144a9e1f7bbeed78e7079 + relative_root: contracts + # version 5.3.0 + lib/openzeppelin-contracts-upgradeable/contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable + commit: 60b305a8f3ff0c7688f02ac470417b6bbf1c4d27 + relative_root: contracts + # version 5.3.0 + +bytecode_comparison: + constructor_calldata: + "0x00000000741292C88f9fF5050b07051C4f592EBf": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000072BAfCeAff1AD0237Ea58f06cfc4467F": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Factory + "0xAfef40968b5304135677f0C89203948e1A145105": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x000000007e6b679B9196a1609e5Bc2405eDFd6Aa": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Consensus + "0xF429ba2a8437E7de85078CF7481E8Ad52df7E58c": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000B2d2373aAF1C370cFE4e1Ee8BDE7C546": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # DepositQueue + "0x000000001CC8c3E40856E956db870095EF6C98bd": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SyncDepositQueue + "0x000000000Af33501e5BDAF9B481Ad2712a024727": "00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000afef40968b5304135677f0c89203948e1a14510500000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SignatureDepositQueue + "0x52d56c20B0C8d403888880d0A1610e5ed17addA8": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000C18039E1F415fe07C33A316232238648": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # FeeManager + "0x727c295b5D99b15280Ca8736b6F97ABA6aEd0E88": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x000000009adE4dAE1f868775A3f087945983f062": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Oracle + "0xe08dc488bD6756323F8bf478869529D03db627ef": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000045d70ee8145135f08309fF5B1A63d43F": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RedeemQueue + "0x000000008D14Ef3658805765107d9F12776f4138": "00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000afef40968b5304135677f0c89203948e1a14510500000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SignatureRedeemQueue + "0x9885215ef8DB25C87466E73018061e532784D716": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000CC26BC741E75B181738Ac2B16156179b": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RiskManager + "0xDA2a7aE07B6803feF9d95E47Ab83c8a5A09929F0": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # TokenizedShareManager + "0x00000000e5F0cddA56447b2a29e2847A52c8725D": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # BasicShareManager + "0x00000000C534B8680e3aa7165DeDc3Ab8781f602": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # BurnableTokenizedShareManager + "0xA64e324DFF04e3C0613ff0706867868C7b370a45": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000CA30010B8417f791250AE221FdaD5920": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault + "0x9fBAF5AEB9F52bA57E1cC1D3050eac6d75Df8ae7": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x000000007e86a96e279662108cc19bA4c32EdE3C": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier + "0xBBCD2aC50aF2EA12Cc9cb7B16dBDa85859BeB3da": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x0000000070f44289ec5ea3E5972f058f75B29801": "00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f429ba2a8437e7de85078cf7481e8ad52df7e58c000000000000000000000000e08dc488bd6756323f8bf478869529d03db627ef000000000000000000000000a64e324dff04e3c0613ff0706867868c7b370a450000000000000000000000009fbaf5aeb9f52ba57e1cc1d3050eac6d75df8ae700000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Vault + "0xC5a52E4bB718Dfe86938e5cB967362EdA1E62698": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x711F6236e325634AA8c1F692b5312bfF3A8558D0": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + "0x00000000ACD80376E999Af8c424e5e33BD224A08": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # ERC20Verifier + "0x0000000005a67199ABE0f9C995EAB9DaDfA31Ccd": "000000000000000000000000da2a7ae07b6803fef9d95e47ab83c8a5a09929f000000000000000000000000052d56c20b0c8d403888880d0a1610e5ed17adda80000000000000000000000009885215ef8db25c87466e73018061e532784d716000000000000000000000000727c295b5d99b15280ca8736b6f97aba6aed0e88000000000000000000000000bbcd2ac50af2ea12cc9cb7b16dbda85859beb3da" # VaultConfigurator + "0x870DB41df0905cc5a790f6582a3dA99A4A33F923": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + # SwapModule (0x00000000015fa996bCA8c842AFEdC334616F283A) calldata not yet available From 15db6b402dab27202e23a0da1d2c5430f27a937c Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 7 Apr 2026 21:19:35 +0100 Subject: [PATCH 14/35] feat: add earnUSDe contracts to meta USD config --- .../ethereum/mainnet/meta/meta_usd_config.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml b/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml index f2a5efc..d9449c4 100644 --- a/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml +++ b/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml @@ -33,6 +33,21 @@ contracts: "0xD0e9094E7E26ff133C349ACd9993743DCc15cA5c": TimelockController "0x03852b7138c6704F8F46e87768399616D31Cf733": OracleSubmitter + # earnUSDe (Experimental) + "0x0E27abEF8C0390DB326be61Da660cEAb5D7A01c0": TransparentUpgradeableProxy # Vault + "0x1ABBef01954e2F58AFa0153A50e78674D5f12F4b": TransparentUpgradeableProxy # SwapModule 0 + "0x6082A97Bbb2e51d5aa429DE7DAa5a7Cb04c1B17A": TransparentUpgradeableProxy # Subvault 0 + "0x6445DC7C182386997D894A8dA2872E0e0a002F8b": TransparentUpgradeableProxy # Verifier 0 + "0x0c48c1eA0Bb779F2B747d9a89EDEb4199000Fa90": TransparentUpgradeableProxy # SyncDepositQueue (USDC) + "0xAeF472489Ae2405c4B9ece09642e1ce7A9233446": TransparentUpgradeableProxy # RedeemQueue (USDC) + "0xdbd555288BA3C789156718D7C94c568a0E4e0023": TransparentUpgradeableProxy # SyncDepositQueue (USDT) + "0x248cA260BfecD194e9596aa7bf50f0E49a5fa43a": TransparentUpgradeableProxy # Oracle + "0x18bf9c3004da28bA2Ad4Dc676aF2091E38CcB414": TransparentUpgradeableProxy # ShareManager + "0xeffE4750254e520b39E5bf872b821Aa5973B69eC": TransparentUpgradeableProxy # FeeManager + "0xb48c3b3ed0D12fbFA0f2bD9c9E11AB44B8317BA3": TransparentUpgradeableProxy # RiskManager + "0xFf06E4D42Bc59Dc47DbE2CEBE4E05A0ddA27378A": TimelockController + "0xd114BCC2a5b683CF6568789d9B0B8702eD56948d": OracleSubmitter + # Shared implementations "0x0000000615B2771511dAa693aC07BE5622869E01": Vault "0x00000006dA9f179BFE250Dd1c51cD2d3581930c8": DepositQueue From 56e08ed18f593eb9bd85b6fd1eb6cc8721f5d9aa Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 7 Apr 2026 21:35:37 +0100 Subject: [PATCH 15/35] feat: add earnUSDe plasma meta config --- .../mainnet/meta/meta_usde_plasma_config.yaml | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 config_samples/plasma/mainnet/meta/meta_usde_plasma_config.yaml diff --git a/config_samples/plasma/mainnet/meta/meta_usde_plasma_config.yaml b/config_samples/plasma/mainnet/meta/meta_usde_plasma_config.yaml new file mode 100644 index 0000000..5586082 --- /dev/null +++ b/config_samples/plasma/mainnet/meta/meta_usde_plasma_config.yaml @@ -0,0 +1,90 @@ +# earnUSDe - Experimental earnUSD (earnUSDe) Plasma +# https://metavaults.mellow.finance/deployments.md + +contracts: + # Vault + "0x3Ce1F83E9c95fc8b60e7ab36B3238A8257710862": TransparentUpgradeableProxy + "0x0000000070f44289ec5ea3E5972f058f75B29801": Vault + + # Oracle + "0xE2aaefF18a0FA0389D6e5B64199727C21530b787": TransparentUpgradeableProxy + "0x000000009adE4dAE1f868775A3f087945983f062": Oracle + + # ShareManager + "0x134eA36E03b5e59dbddf2535084e342d84f2A043": TransparentUpgradeableProxy + "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": TokenizedShareManager + + # FeeManager + "0x038E3cc0FaE5092C92E87C6371d0Dc55357cd2E5": TransparentUpgradeableProxy + "0x00000000C18039E1F415fe07C33A316232238648": FeeManager + + # RiskManager + "0x9111E027ABB6269E7f1a10860b4DaA3f66054735": TransparentUpgradeableProxy + "0x00000000CC26BC741E75B181738Ac2B16156179b": RiskManager + + # Subvault + "0xbd33C99D72BDfe71BE4eFD5b6B2A42d3Daf96e0f": TransparentUpgradeableProxy # 0 + "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault + + # Verifier + "0x96383b3120B4437FE679c21aCb75ae19429b446D": TransparentUpgradeableProxy # 0 + "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier + + # SwapModule + "0x1818D85D411938667AE13d34f32878F067793FeC": TransparentUpgradeableProxy # 0 + "0x00000000015fa996bCA8c842AFEdC334616F283A": SwapModule + + # Governance + "0x61fB5220a2bA26dF7a1635625e5b3305b333FD7f": TimelockController + +rpc_url_env_var: PLASMA_RPC_URL +explorer_hostname: api.etherscan.io +explorer_token_env_var: ETHERSCAN_EXPLORER_TOKEN +explorer_chain_id: 9745 + +github_repo: + url: https://github.com/mellow-finance/flexible-vaults + commit: c9c71818f0a8bead183f9860db3b8bbceb7b8f37 + relative_root: "" + +dependencies: + contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts + commit: e4f70216d759d8e6a64144a9e1f7bbeed78e7079 + relative_root: contracts + # version 5.3.0 + lib/contracts: + url: https://github.com/cowprotocol/contracts + commit: c94c595a791681cf8ba7495117dcde397b932885 + relative_root: "" + lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts + commit: e4f70216d759d8e6a64144a9e1f7bbeed78e7079 + relative_root: contracts + # version 5.3.0 + lib/openzeppelin-contracts-upgradeable/contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable + commit: 60b305a8f3ff0c7688f02ac470417b6bbf1c4d27 + relative_root: contracts + # version 5.3.0 + +bytecode_comparison: + constructor_calldata: + # Implementations (CREATE2 via deterministic deployer) + "0x0000000070f44289ec5ea3E5972f058f75B29801": "00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f429ba2a8437e7de85078cf7481e8ad52df7e58c000000000000000000000000e08dc488bd6756323f8bf478869529d03db627ef000000000000000000000000a64e324dff04e3c0613ff0706867868c7b370a450000000000000000000000009fbaf5aeb9f52ba57e1cc1d3050eac6d75df8ae700000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Vault + "0x000000009adE4dAE1f868775A3f087945983f062": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Oracle + "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # TokenizedShareManager + "0x00000000C18039E1F415fe07C33A316232238648": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # FeeManager + "0x00000000CC26BC741E75B181738Ac2B16156179b": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RiskManager + "0x00000000CA30010B8417f791250AE221FdaD5920": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault + "0x000000007e86a96e279662108cc19bA4c32EdE3C": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier + "0x00000000015fa996bCA8c842AFEdC334616F283A": "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe01100000000000000000000000006100e367285b01f48d07953803a2d8dca5d1987300000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SwapModule + # Proxies (factory-created) + "0x3Ce1F83E9c95fc8b60e7ab36B3238A8257710862": "0000000000000000000000000000000070f44289ec5ea3e5972f058f75b2980100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000284439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000134ea36e03b5e59dbddf2535084e342d84f2a043000000000000000000000000038e3cc0fae5092c92e87c6371d0dc55357cd2e50000000000000000000000009111e027abb6269e7f1a10860b4daa3f66054735000000000000000000000000e2aaeff18a0fa0389d6e5b64199727c21530b78700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000004877766a829235d063c3ba37802a4874fcf1b575d310fbe898df17d8ebabee4630000000000000000000000009745f161b0160a99924845befce1d7b9daee6899fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e9302400000000000000000000000061fb5220a2ba26df7a1635625e5b3305b333fd7f85c2023fdfb1e93dedf5d18f9bc0e79347e071d12740ba71aeb84a4fcbdc4b79000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # Vault proxy + "0xE2aaefF18a0FA0389D6e5B64199727C21530b787": "000000000000000000000000000000009ade4dae1f868775a3f087945983f06200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000164439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000007fffffff000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Oracle proxy + "0x134eA36E03b5e59dbddf2535084e342d84f2A043": "00000000000000000000000000000000861e8b90b81f35c18ca14858cc91d1df00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144578706572696d656e74616c206561726e55534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000086561726e5553446500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # ShareManager proxy + "0x038E3cc0FaE5092C92E87C6371d0Dc55357cd2E5": "00000000000000000000000000000000c18039e1f415fe07c33a31623223864800000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000ccf2daba8bb04a232a2fda0d01010d4ef6c69b85000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # FeeManager proxy + "0x9111E027ABB6269E7f1a10860b4DaA3f66054735": "00000000000000000000000000000000cc26bc741e75b181738ac2b16156179b00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # RiskManager proxy + "0xbd33C99D72BDfe71BE4eFD5b6B2A42d3Daf96e0f": "00000000000000000000000000000000ca30010b8417f791250ae221fdad592000000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab910000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000096383b3120b4437fe679c21acb75ae19429b446d0000000000000000000000003ce1f83e9c95fc8b60e7ab36b3238a825771086200000000000000000000000000000000000000000000000000000000" # Subvault0 proxy + "0x96383b3120B4437FE679c21aCb75ae19429b446D": "000000000000000000000000000000007e86a96e279662108cc19ba4c32ede3c00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000003ce1f83e9c95fc8b60e7ab36b3238a8257710862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier0 proxy + "0x1818D85D411938667AE13d34f32878F067793FeC": "00000000000000000000000000000000015fa996bca8c842afedc334616f283a00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000344439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000bd33c99d72bdfe71be4efd5b6b2a42d3daf96e0f00000000000000000000000033e0b3fc976dc9c516926ba48cfc0a9e10a2aaa50000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000080000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000b8ce59fc3717ada4c02eadf9682a9e934f625ebb0000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d2000000000000000000000000b8ce59fc3717ada4c02eadf9682a9e934f625ebb0000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d20000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b50000000000000000000000000000000000000000000000000000000000000008aef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule0 proxy From ed042f7d93dda07db521a6cdb18e7caf1e8cc68e Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 7 Apr 2026 22:30:55 +0100 Subject: [PATCH 16/35] feat: add earnUSDe meta configs for Arbitrum and Mantle --- .../mainnet/meta/meta_usde_arb_config.yaml | 89 ++++++++++++++++++ .../mainnet/meta/meta_usde_mantle_config.yaml | 90 +++++++++++++++++++ 2 files changed, 179 insertions(+) create mode 100644 config_samples/arbitrum/mainnet/meta/meta_usde_arb_config.yaml create mode 100644 config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml diff --git a/config_samples/arbitrum/mainnet/meta/meta_usde_arb_config.yaml b/config_samples/arbitrum/mainnet/meta/meta_usde_arb_config.yaml new file mode 100644 index 0000000..ed683cb --- /dev/null +++ b/config_samples/arbitrum/mainnet/meta/meta_usde_arb_config.yaml @@ -0,0 +1,89 @@ +# earnUSDe - Experimental earnUSD (earnUSDe) Arbitrum + +contracts: + # Vault + "0xe5002a0e63B339a26eaebDcaaf8Bd54AbA941ef4": TransparentUpgradeableProxy + "0x0000000070f44289ec5ea3E5972f058f75B29801": Vault + + # Oracle + "0xE2aaefF18a0FA0389D6e5B64199727C21530b787": TransparentUpgradeableProxy + "0x000000009adE4dAE1f868775A3f087945983f062": Oracle + + # ShareManager + "0x134eA36E03b5e59dbddf2535084e342d84f2A043": TransparentUpgradeableProxy + "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": TokenizedShareManager + + # FeeManager + "0x038E3cc0FaE5092C92E87C6371d0Dc55357cd2E5": TransparentUpgradeableProxy + "0x00000000C18039E1F415fe07C33A316232238648": FeeManager + + # RiskManager + "0x9111E027ABB6269E7f1a10860b4DaA3f66054735": TransparentUpgradeableProxy + "0x00000000CC26BC741E75B181738Ac2B16156179b": RiskManager + + # Subvault + "0x57B3997728bFa5c4D98937A234EB6005cdF68a60": TransparentUpgradeableProxy # 0 + "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault + + # Verifier + "0x7313484208310C60723ACB79739cb01121F00d03": TransparentUpgradeableProxy # 0 + "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier + + # SwapModule + "0x2adA48d90B4c9316b64420b93c895327ec2DC0f8": TransparentUpgradeableProxy # 0 + "0x00000000c324E2d11EcCB03A061F69B5FE123645": SwapModule + + # Governance + "0xcA47d07A8044Bf93397fA0df7917c5E37968DFBD": TimelockController + +rpc_url_env_var: ARBITRUM_RPC_URL +explorer_hostname: api.etherscan.io +explorer_token_env_var: ETHERSCAN_EXPLORER_TOKEN +explorer_chain_id: 42161 + +github_repo: + url: https://github.com/mellow-finance/flexible-vaults + commit: c9c71818f0a8bead183f9860db3b8bbceb7b8f37 + relative_root: "" + +dependencies: + contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts + commit: e4f70216d759d8e6a64144a9e1f7bbeed78e7079 + relative_root: contracts + # version 5.3.0 + lib/contracts: + url: https://github.com/cowprotocol/contracts + commit: c94c595a791681cf8ba7495117dcde397b932885 + relative_root: "" + lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts + commit: e4f70216d759d8e6a64144a9e1f7bbeed78e7079 + relative_root: contracts + # version 5.3.0 + lib/openzeppelin-contracts-upgradeable/contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable + commit: 60b305a8f3ff0c7688f02ac470417b6bbf1c4d27 + relative_root: contracts + # version 5.3.0 + +bytecode_comparison: + constructor_calldata: + # Implementations (CREATE2 via deterministic deployer) + "0x0000000070f44289ec5ea3E5972f058f75B29801": "00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f429ba2a8437e7de85078cf7481e8ad52df7e58c000000000000000000000000e08dc488bd6756323f8bf478869529d03db627ef000000000000000000000000a64e324dff04e3c0613ff0706867868c7b370a450000000000000000000000009fbaf5aeb9f52ba57e1cc1d3050eac6d75df8ae700000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Vault + "0x000000009adE4dAE1f868775A3f087945983f062": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Oracle + "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # TokenizedShareManager + "0x00000000C18039E1F415fe07C33A316232238648": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # FeeManager + "0x00000000CC26BC741E75B181738Ac2B16156179b": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RiskManager + "0x00000000CA30010B8417f791250AE221FdaD5920": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault + "0x000000007e86a96e279662108cc19bA4c32EdE3C": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier + "0x00000000c324E2d11EcCB03A061F69B5FE123645": "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe011000000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SwapModule + # Proxies (factory-created) + "0xe5002a0e63B339a26eaebDcaaf8Bd54AbA941ef4": "0000000000000000000000000000000070f44289ec5ea3e5972f058f75b2980100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000284439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000134ea36e03b5e59dbddf2535084e342d84f2a043000000000000000000000000038e3cc0fae5092c92e87c6371d0dc55357cd2e50000000000000000000000009111e027abb6269e7f1a10860b4daa3f66054735000000000000000000000000e2aaeff18a0fa0389d6e5b64199727c21530b78700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000004877766a829235d063c3ba37802a4874fcf1b575d310fbe898df17d8ebabee4630000000000000000000000009745f161b0160a99924845befce1d7b9daee6899fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000ca47d07a8044bf93397fa0df7917c5e37968dfbd85c2023fdfb1e93dedf5d18f9bc0e79347e071d12740ba71aeb84a4fcbdc4b79000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # Vault proxy + "0xE2aaefF18a0FA0389D6e5B64199727C21530b787": "000000000000000000000000000000009ade4dae1f868775a3f087945983f06200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000164439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000007fffffff000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Oracle proxy + "0x134eA36E03b5e59dbddf2535084e342d84f2A043": "00000000000000000000000000000000861e8b90b81f35c18ca14858cc91d1df00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144578706572696d656e74616c206561726e55534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000086561726e5553446500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # ShareManager proxy + "0x038E3cc0FaE5092C92E87C6371d0Dc55357cd2E5": "00000000000000000000000000000000c18039e1f415fe07c33a31623223864800000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000ccf2daba8bb04a232a2fda0d01010d4ef6c69b85000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # FeeManager proxy + "0x9111E027ABB6269E7f1a10860b4DaA3f66054735": "00000000000000000000000000000000cc26bc741e75b181738ac2b16156179b00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # RiskManager proxy + "0x57B3997728bFa5c4D98937A234EB6005cdF68a60": "00000000000000000000000000000000ca30010b8417f791250ae221fdad592000000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000007313484208310c60723acb79739cb01121f00d03000000000000000000000000e5002a0e63b339a26eaebdcaaf8bd54aba941ef400000000000000000000000000000000000000000000000000000000" # Subvault0 proxy + "0x7313484208310C60723ACB79739cb01121F00d03": "000000000000000000000000000000007e86a96e279662108cc19ba4c32ede3c00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000e5002a0e63b339a26eaebdcaaf8bd54aba941ef4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier0 proxy + diff --git a/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml b/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml new file mode 100644 index 0000000..8134c88 --- /dev/null +++ b/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml @@ -0,0 +1,90 @@ +# earnUSDe - Experimental earnUSD (earnUSDe) Mantle + +contracts: + # Vault + "0x8e85760747F7280254575F4e911A7a2814Fc266E": TransparentUpgradeableProxy + "0x0000000070f44289ec5ea3E5972f058f75B29801": Vault + + # Oracle + "0xE2aaefF18a0FA0389D6e5B64199727C21530b787": TransparentUpgradeableProxy + "0x000000009adE4dAE1f868775A3f087945983f062": Oracle + + # ShareManager + "0x134eA36E03b5e59dbddf2535084e342d84f2A043": TransparentUpgradeableProxy + "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": TokenizedShareManager + + # FeeManager + "0x038E3cc0FaE5092C92E87C6371d0Dc55357cd2E5": TransparentUpgradeableProxy + "0x00000000C18039E1F415fe07C33A316232238648": FeeManager + + # RiskManager + "0x9111E027ABB6269E7f1a10860b4DaA3f66054735": TransparentUpgradeableProxy + "0x00000000CC26BC741E75B181738Ac2B16156179b": RiskManager + + # Subvault + "0xdF309792cb9feD4C453fA3B6aC0DDc5FBA8fa7f2": TransparentUpgradeableProxy # 0 + "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault + + # Verifier + "0xcd0Aa7d031d37C85AB3b77478e2FF8A260a865a3": TransparentUpgradeableProxy # 0 + "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier + + # SwapModule + "0x8b3270b6bC2272126dD350944D17bcB23A32C624": TransparentUpgradeableProxy # 0 + "0x0000000042E248f84Df6BA1E768F878b1f2Bae9f": SwapModule + + # Governance + # "0xFb492a69ab7329a28180B55B0756b80d2f15c5b0": TimelockController # not verified on Mantle explorer + +rpc_url_env_var: MANTLE_RPC_URL +explorer_hostname: api.etherscan.io +explorer_token_env_var: ETHERSCAN_EXPLORER_TOKEN +explorer_chain_id: 5000 + +github_repo: + url: https://github.com/mellow-finance/flexible-vaults + commit: c9c71818f0a8bead183f9860db3b8bbceb7b8f37 + relative_root: "" + +dependencies: + contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts + commit: e4f70216d759d8e6a64144a9e1f7bbeed78e7079 + relative_root: contracts + # version 5.3.0 + lib/contracts: + url: https://github.com/cowprotocol/contracts + commit: c94c595a791681cf8ba7495117dcde397b932885 + relative_root: "" + lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts + commit: e4f70216d759d8e6a64144a9e1f7bbeed78e7079 + relative_root: contracts + # version 5.3.0 + lib/openzeppelin-contracts-upgradeable/contracts: + url: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable + commit: 60b305a8f3ff0c7688f02ac470417b6bbf1c4d27 + relative_root: contracts + # version 5.3.0 + +bytecode_comparison: + constructor_calldata: + # Implementations (CREATE2 via deterministic deployer) + "0x0000000070f44289ec5ea3E5972f058f75B29801": "00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f429ba2a8437e7de85078cf7481e8ad52df7e58c000000000000000000000000e08dc488bd6756323f8bf478869529d03db627ef000000000000000000000000a64e324dff04e3c0613ff0706867868c7b370a450000000000000000000000009fbaf5aeb9f52ba57e1cc1d3050eac6d75df8ae700000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Vault + "0x000000009adE4dAE1f868775A3f087945983f062": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Oracle + "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # TokenizedShareManager + "0x00000000C18039E1F415fe07C33A316232238648": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # FeeManager + "0x00000000CC26BC741E75B181738Ac2B16156179b": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RiskManager + "0x00000000CA30010B8417f791250AE221FdaD5920": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault + "0x000000007e86a96e279662108cc19bA4c32EdE3C": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier + "0x0000000042E248f84Df6BA1E768F878b1f2Bae9f": "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe011000000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb800000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SwapModule + # Proxies (factory-created) + "0x8e85760747F7280254575F4e911A7a2814Fc266E": "0000000000000000000000000000000070f44289ec5ea3e5972f058f75b2980100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000284439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000134ea36e03b5e59dbddf2535084e342d84f2a043000000000000000000000000038e3cc0fae5092c92e87c6371d0dc55357cd2e50000000000000000000000009111e027abb6269e7f1a10860b4daa3f66054735000000000000000000000000e2aaeff18a0fa0389d6e5b64199727c21530b78700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000004877766a829235d063c3ba37802a4874fcf1b575d310fbe898df17d8ebabee4630000000000000000000000009745f161b0160a99924845befce1d7b9daee6899fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000fb492a69ab7329a28180b55b0756b80d2f15c5b085c2023fdfb1e93dedf5d18f9bc0e79347e071d12740ba71aeb84a4fcbdc4b79000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # Vault proxy + "0xE2aaefF18a0FA0389D6e5B64199727C21530b787": "000000000000000000000000000000009ade4dae1f868775a3f087945983f06200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000164439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000007fffffff000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Oracle proxy + "0x134eA36E03b5e59dbddf2535084e342d84f2A043": "00000000000000000000000000000000861e8b90b81f35c18ca14858cc91d1df00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144578706572696d656e74616c206561726e55534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000086561726e5553446500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # ShareManager proxy + "0x038E3cc0FaE5092C92E87C6371d0Dc55357cd2E5": "00000000000000000000000000000000c18039e1f415fe07c33a31623223864800000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000ccf2daba8bb04a232a2fda0d01010d4ef6c69b85000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # FeeManager proxy + "0x9111E027ABB6269E7f1a10860b4DaA3f66054735": "00000000000000000000000000000000cc26bc741e75b181738ac2b16156179b00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # RiskManager proxy + "0xdF309792cb9feD4C453fA3B6aC0DDc5FBA8fa7f2": "00000000000000000000000000000000ca30010b8417f791250ae221fdad592000000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000cd0aa7d031d37c85ab3b77478e2ff8a260a865a30000000000000000000000008e85760747f7280254575f4e911a7a2814fc266e00000000000000000000000000000000000000000000000000000000" # Subvault0 proxy + "0xcd0Aa7d031d37C85AB3b77478e2FF8A260a865a3": "000000000000000000000000000000007e86a96e279662108cc19ba4c32ede3c00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000008e85760747f7280254575f4e911a7a2814fc266e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier0 proxy + "0x8b3270b6bC2272126dD350944D17bcB23A32C624": "0000000000000000000000000000000042e248f84df6ba1e768f878b1f2bae9f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003c4439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000df309792cb9fed4c453fa3b6ac0ddc5fba8fa7f200000000000000000000000047a063cfda980532267970d478ec340c0f80e8df0000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000779ded0c9e1022225f8e0630b35a9b54be7137360000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d200000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb8000000000000000000000000779ded0c9e1022225f8e0630b35a9b54be7137360000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d200000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb80000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000000000000000000000000000000000aaef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule0 proxy + # "0xFb492a69ab7329a28180B55B0756b80d2f15c5b0": TimelockController not verified on Mantle explorer From 099f57bff40f9f79525ead74b9b75afc9f512fcb Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 7 Apr 2026 22:31:43 +0100 Subject: [PATCH 17/35] docs: update skills with troubleshooting and proxy calldata tips --- .claude/skills/debug-diff/SKILL.md | 5 ++++ .claude/skills/new-config/SKILL.md | 41 ++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/.claude/skills/debug-diff/SKILL.md b/.claude/skills/debug-diff/SKILL.md index e9cd847..d2a6d22 100644 --- a/.claude/skills/debug-diff/SKILL.md +++ b/.claude/skills/debug-diff/SKILL.md @@ -70,6 +70,11 @@ ls digest//diffs// | Single contract fails | May need a per-contract `constructor_calldata` or `constructor_args` entry | | `"Bytecodes have differences not on the immutable reference position"` | Real bytecode mismatch -- check compiler version, optimizer settings, EVM version, and library addresses | | `"Exiting with non-zero code due to unallowed diffs"` | Either fix the diffs or use `--allow-source-diff 0xAddr` / `--allow-bytecode-diff 0xAddr` for known acceptable diffs | +| `"Contract name in config does not match with blockchain explorer ... !="` | Contract not verified on explorer — comment it out or verify it on the explorer first | +| `"Failed to get calldata: Explorer metadata has empty constructor calldata for 0x..."` | Factory-created contract — Etherscan has no constructor args. Add `constructor_calldata` manually (extract via `getsourcecode` API `ConstructorArguments`, `debug_traceTransaction` trace, or cross-chain reuse) | +| `"HTTP error: 404 ... contents/.sol"` | Missing or wrong `dependencies` entry — the explorer source uses a path prefix not covered by config dependencies. Add a mapping for that prefix | +| `"err: intrinsic gas too low"` | Chain gas model incompatible with `eth_call` deployment simulation (known on Mantle) — use `--skip-binary-comparison` | +| All proxy bytecode diffs say "immutable reference position" | Normal for TransparentUpgradeableProxy — ProxyAdmin address baked in as immutable. Use `--allow-bytecode-diff` or accept as expected | ### 4. Suggest a re-run command After fixing, suggest: diff --git a/.claude/skills/new-config/SKILL.md b/.claude/skills/new-config/SKILL.md index e22b6d5..d9874ab 100644 --- a/.claude/skills/new-config/SKILL.md +++ b/.claude/skills/new-config/SKILL.md @@ -119,9 +119,46 @@ Save configs to `config_samples///` following existing naming co - **Include `audit_url`** — link to the relevant audit report when available for cross-reference - **Keep configs strict** — prefer explicit over implicit; include all fields even if optional, so verification is as thorough as possible +## Extracting proxy constructor calldata + +Factory-created proxies (e.g. TransparentUpgradeableProxy) often need `constructor_calldata` for bytecode comparison. Three methods, in order of preference: + +**Method 1: Etherscan v2 API** (preferred) +```bash +curl -s "https://api.etherscan.io/v2/api?chainid=&module=contract&action=getsourcecode&address=&apikey=" \ + | python3 -c "import sys,json; print(json.load(sys.stdin)['result'][0].get('ConstructorArguments',''))" +``` +Factory-created contracts sometimes return empty — fall through to Method 2. + +**Method 2: debug_traceTransaction** (when Etherscan has empty args) +1. Get creation tx hash via `getcontractcreation` API +2. Trace with `{"tracer": "callTracer"}` to find CREATE/CREATE2 opcodes +3. Constructor args are appended to initcode in the CREATE2 input. Find the implementation address (padded to 32 bytes) in the hex input — everything from that point on is the constructor args. +4. Alternatively, if you know the exact initcode size (e.g. from a reference deployment on another chain), slice at that offset. + +**Method 3: Cross-chain reuse** (when traces unavailable) +CREATE2 with same factory + same init code + same salt = same address on every chain. If a proxy has the same address on two chains, its constructor calldata is identical. Copy from the chain where you already have it. + +### Verifying proxy implementations +Always verify implementations on-chain before writing the config: +```bash +cast implementation --rpc-url +``` + +### Chain-specific RPC limitations +- Some chains (Arbitrum, Mantle) do NOT support `debug_traceTransaction` on public RPCs — use Etherscan API or cross-chain reuse instead. +- Mantle's gas model causes `eth_call` to fail with "intrinsic gas too low" for large deployment simulations — use `--skip-binary-comparison`. +- Unverified contracts on a chain's explorer should be commented out in the config. + +### Dependencies: matching explorer source paths +If diffyscan fails with 404 fetching a GitHub file, the explorer source uses a path prefix that isn't covered by `dependencies`. Each key in `dependencies` maps a source path prefix → a GitHub repo. Check the explorer source file paths and add the missing prefix mapping. + ## Workflow 1. Gather required info from user (ask for missing pieces) 2. Look at existing configs in the same chain directory for reference patterns -3. Create the config file -4. Suggest running: `uv run diffyscan --yes --cache-explorer --cache-github` +3. Verify implementations on-chain with `cast implementation` +4. Extract constructor calldata (Etherscan API → trace → cross-chain reuse) +5. Create the config file with all needed dependencies +6. Run: `uv run diffyscan --yes --cache-explorer --cache-github` +7. Expected: source diffs = 0; bytecode diffs on proxies (immutable reference) is normal From 922bcacda550255b2df2a9515a755174dd6c0d69 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Thu, 30 Apr 2026 15:17:40 +0100 Subject: [PATCH 18/35] feat: update earnUSDe meta configs with AaveOracle and SwapModule --- .../arbitrum/mainnet/meta/meta_usde_arb_config.yaml | 12 +++++++++++- .../ethereum/mainnet/meta/meta_usd_config.yaml | 13 ++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/config_samples/arbitrum/mainnet/meta/meta_usde_arb_config.yaml b/config_samples/arbitrum/mainnet/meta/meta_usde_arb_config.yaml index ed683cb..a95f74b 100644 --- a/config_samples/arbitrum/mainnet/meta/meta_usde_arb_config.yaml +++ b/config_samples/arbitrum/mainnet/meta/meta_usde_arb_config.yaml @@ -30,9 +30,12 @@ contracts: "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier # SwapModule - "0x2adA48d90B4c9316b64420b93c895327ec2DC0f8": TransparentUpgradeableProxy # 0 + "0xCe50daADf0e3AaE397ad756Bf93650f9047818b4": TransparentUpgradeableProxy # 0 "0x00000000c324E2d11EcCB03A061F69B5FE123645": SwapModule + # AaveOracle (deployed by AaveOracleFactory 0x00000000DDc33fB8d6F89dC5d9725F5e27B53D6f) + "0x1e69c602dD0b0881d0E6403228aB31a494031D9D": AaveOracle + # Governance "0xcA47d07A8044Bf93397fA0df7917c5E37968DFBD": TimelockController @@ -66,6 +69,12 @@ dependencies: commit: 60b305a8f3ff0c7688f02ac470417b6bbf1c4d27 relative_root: contracts # version 5.3.0 + lib/aave-v3-core: + url: https://github.com/aave/aave-v3-core + commit: b74526a7bc67a3a117a1963fc871b3eb8cea8435 + relative_root: "" + # version v1.19.4 + # Audits: https://github.com/aave/aave-v3-core/tree/master/audits bytecode_comparison: constructor_calldata: @@ -86,4 +95,5 @@ bytecode_comparison: "0x9111E027ABB6269E7f1a10860b4DaA3f66054735": "00000000000000000000000000000000cc26bc741e75b181738ac2b16156179b00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # RiskManager proxy "0x57B3997728bFa5c4D98937A234EB6005cdF68a60": "00000000000000000000000000000000ca30010b8417f791250ae221fdad592000000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000007313484208310c60723acb79739cb01121f00d03000000000000000000000000e5002a0e63b339a26eaebdcaaf8bd54aba941ef400000000000000000000000000000000000000000000000000000000" # Subvault0 proxy "0x7313484208310C60723ACB79739cb01121F00d03": "000000000000000000000000000000007e86a96e279662108cc19ba4c32ede3c00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000e5002a0e63b339a26eaebdcaaf8bd54aba941ef4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier0 proxy + "0xCe50daADf0e3AaE397ad756Bf93650f9047818b4": "00000000000000000000000000000000c324e2d11eccb03a061f69b5fe12364500000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000344439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e00000000000000000000000057b3997728bfa5c4d98937a234eb6005cdf68a600000000000000000000000001e69c602dd0b0881d0e6403228ab31a494031d9d0000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000080000000000000000000000009745f161b0160a99924845befce1d7b9daee68990000000000000000000000000a1a1a107e45b7ced86833863f482bc5f4ed82ef0000000000000000000000000b2b2b2076d95dda7817e785989fe353fe955ef9000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e58310000000000000000000000000a1a1a107e45b7ced86833863f482bc5f4ed82ef0000000000000000000000000b2b2b2076d95dda7817e785989fe353fe955ef9000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e58310000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b50000000000000000000000000000000000000000000000000000000000000008aef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule0 proxy diff --git a/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml b/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml index d9449c4..b882f6f 100644 --- a/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml +++ b/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml @@ -35,7 +35,7 @@ contracts: # earnUSDe (Experimental) "0x0E27abEF8C0390DB326be61Da660cEAb5D7A01c0": TransparentUpgradeableProxy # Vault - "0x1ABBef01954e2F58AFa0153A50e78674D5f12F4b": TransparentUpgradeableProxy # SwapModule 0 + "0xe49f6A72476b58c4DDA7d1F2613ac660B11Fbc4c": TransparentUpgradeableProxy # SwapModule 0 "0x6082A97Bbb2e51d5aa429DE7DAa5a7Cb04c1B17A": TransparentUpgradeableProxy # Subvault 0 "0x6445DC7C182386997D894A8dA2872E0e0a002F8b": TransparentUpgradeableProxy # Verifier 0 "0x0c48c1eA0Bb779F2B747d9a89EDEb4199000Fa90": TransparentUpgradeableProxy # SyncDepositQueue (USDC) @@ -47,6 +47,7 @@ contracts: "0xb48c3b3ed0D12fbFA0f2bD9c9E11AB44B8317BA3": TransparentUpgradeableProxy # RiskManager "0xFf06E4D42Bc59Dc47DbE2CEBE4E05A0ddA27378A": TimelockController "0xd114BCC2a5b683CF6568789d9B0B8702eD56948d": OracleSubmitter + "0xaf00f9561cf64ec5777c36f1f76974a8200c24fc": AaveOracle # deployed by AaveOracleFactory 0x00000000DDc33fB8d6F89dC5d9725F5e27B53D6f # Shared implementations "0x0000000615B2771511dAa693aC07BE5622869E01": Vault @@ -85,6 +86,12 @@ dependencies: url: https://github.com/cowprotocol/contracts commit: c94c595a791681cf8ba7495117dcde397b932885 relative_root: src/contracts + lib/aave-v3-core: + url: https://github.com/aave/aave-v3-core + commit: b74526a7bc67a3a117a1963fc871b3eb8cea8435 + relative_root: "" + # version v1.19.4 + # Audits: https://github.com/aave/aave-v3-core/tree/master/audits bytecode_comparison: constructor_calldata: @@ -129,3 +136,7 @@ bytecode_comparison: "0x0000000E535B4E063f8372933A55470e67910a66": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault "0x000000047Fc878662006E78D5174FB4285637966": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier "0x00000000d681E85e5783588f87A9573Cb97Eda01": "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe0110000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SwapModule + # earnUSDe OracleSubmitter — Etherscan reports empty ctor args (CREATE2); args taken from creation bytecode tail + "0xd114BCC2a5b683CF6568789d9B0B8702eD56948d": "000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000093a797643d74fc81e7a51f3f84a9d78f930435d10000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000248ca260bfecd194e9596aa7bf50f0e49a5fa43a" # OracleSubmitter + # earnUSDe SwapModule 0 proxy — Etherscan reports empty ctor args; args taken from creation bytecode tail + "0xe49f6A72476b58c4DDA7d1F2613ac660B11Fbc4c": "00000000000000000000000000000000d681e85e5783588f87a9573cb97eda0100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000604439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000005c00000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e0000000000000000000000006082a97bbb2e51d5aa429de7daa5a7cb04c1b17a000000000000000000000000af00f9561cf64ec5777c36f1f76974a8200c24fc0000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000000130000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000009d39a5de30e57443bff2a8307a4256c8797a34970000000000000000000000004c9edd5852cd905f086c759e8383e09bff1e68b3000000000000000000000000cacd6fd266af91b8aed52accc382b4e165586e29000000000000000000000000ab5eb14c09d416f0ac63661e57edb7aecdb9befa0000000000000000000000003d7d6fdf07ee548b939a80edbc9b2256d0cdc00300000000000000000000000004acaf8d2865c0714f79da09645c13fd2888977f000000000000000000000000808507121b80c02388fad14726482e061b8da827000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd52000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000009d39a5de30e57443bff2a8307a4256c8797a34970000000000000000000000004c9edd5852cd905f086c759e8383e09bff1e68b3000000000000000000000000cacd6fd266af91b8aed52accc382b4e165586e29000000000000000000000000ab5eb14c09d416f0ac63661e57edb7aecdb9befa0000000000000000000000003d7d6fdf07ee548b939a80edbc9b2256d0cdc0030000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b50000000000000000000000000000000000000000000000000000000000000013aef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule 0 proxy From 231d1a2286773dc505b295b05f1c2f6c0b5e778d Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Mon, 1 Jun 2026 11:59:14 +0100 Subject: [PATCH 19/35] fix: update earnUSDe SwapModule to redeployed proxies - eth/plasma SwapModule proxies -> redeployed addresses + ctor calldata - add missing ctor calldata for earnUSDe proxies (explorer returns empty) - drop orphaned AaveOracle wrapper (SwapModule now reads Aave oracle directly) --- .../ethereum/mainnet/meta/meta_usd_config.yaml | 18 ++++++++++++++---- .../mainnet/meta/meta_usde_plasma_config.yaml | 5 +++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml b/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml index b882f6f..7be928d 100644 --- a/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml +++ b/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml @@ -35,7 +35,7 @@ contracts: # earnUSDe (Experimental) "0x0E27abEF8C0390DB326be61Da660cEAb5D7A01c0": TransparentUpgradeableProxy # Vault - "0xe49f6A72476b58c4DDA7d1F2613ac660B11Fbc4c": TransparentUpgradeableProxy # SwapModule 0 + "0xD8E9300d1a838791cC76393fD78B1fD3C73DBEeb": TransparentUpgradeableProxy # SwapModule 0 "0x6082A97Bbb2e51d5aa429DE7DAa5a7Cb04c1B17A": TransparentUpgradeableProxy # Subvault 0 "0x6445DC7C182386997D894A8dA2872E0e0a002F8b": TransparentUpgradeableProxy # Verifier 0 "0x0c48c1eA0Bb779F2B747d9a89EDEb4199000Fa90": TransparentUpgradeableProxy # SyncDepositQueue (USDC) @@ -47,7 +47,6 @@ contracts: "0xb48c3b3ed0D12fbFA0f2bD9c9E11AB44B8317BA3": TransparentUpgradeableProxy # RiskManager "0xFf06E4D42Bc59Dc47DbE2CEBE4E05A0ddA27378A": TimelockController "0xd114BCC2a5b683CF6568789d9B0B8702eD56948d": OracleSubmitter - "0xaf00f9561cf64ec5777c36f1f76974a8200c24fc": AaveOracle # deployed by AaveOracleFactory 0x00000000DDc33fB8d6F89dC5d9725F5e27B53D6f # Shared implementations "0x0000000615B2771511dAa693aC07BE5622869E01": Vault @@ -136,7 +135,18 @@ bytecode_comparison: "0x0000000E535B4E063f8372933A55470e67910a66": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault "0x000000047Fc878662006E78D5174FB4285637966": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier "0x00000000d681E85e5783588f87A9573Cb97Eda01": "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe0110000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SwapModule + # earnUSDe proxies — Etherscan reports empty ctor args (CREATE2); args taken from creation bytecode tail + "0x0E27abEF8C0390DB326be61Da660cEAb5D7A01c0": "0000000000000000000000000000000615b2771511daa693ac07be5622869e0100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000644439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e00000000000000000000000018bf9c3004da28ba2ad4dc676af2091e38ccb414000000000000000000000000effe4750254e520b39e5bf872b821aa5973b69ec000000000000000000000000b48c3b3ed0d12fbfa0f2bd9c9e11ab44b8317ba3000000000000000000000000248ca260bfecd194e9596aa7bf50f0e49a5fa43a00000000000000000000000000000004d3b17e5391eb571ddb8fdf95646ca8270000000000000000000000000000000637f1b1ccda4af2db6cddf5e5ec45fd930000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000132b2a32ecca586a148d15aea321ddbb421a2a3ac6b4d56c0a9ad9de32e84cf5c4000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef10253eb39d0edc77da10bbc4bcaa23c44e40e3c67ed649fbecb18a3f7c51bfbb10000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef104a899e3e648ea55418d9c99177e5c522df621b1953c0ad7e99da3711043ba1c1000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef1094b8a54d503c6b752e707c591f9345ae8ccc138255588e460ee15622d499fdba000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef10a7ecfd54b0ab6ce6ecc88746fe62beba4e9a103dbb00d88cfedffbc0c6069ce8000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef10877766a829235d063c3ba37802a4874fcf1b575d310fbe898df17d8ebabee4630000000000000000000000009745f161b0160a99924845befce1d7b9daee689968895691ff006f290ca74825ce06ed17fffab55af49f0274f49b7424f752583a0000000000000000000000009745f161b0160a99924845befce1d7b9daee689932a781031f04cc60b32394e40124d1e87f54273bf26d0532a115a424f6a932980000000000000000000000009745f161b0160a99924845befce1d7b9daee689978b235a1fa2fd5e00dba7867d599bed6f088684010a7fee7b9fe05fa1082d01e000000000000000000000000ff06e4d42bc59dc47dbe2cebe4e05a0dda27378afc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000ff06e4d42bc59dc47dbe2cebe4e05a0dda27378a6618a6d92147bbcacfb2ef2375976fc4c529eeeaeb72a66048296571370c6946000000000000000000000000ff06e4d42bc59dc47dbe2cebe4e05a0dda27378a78b235a1fa2fd5e00dba7867d599bed6f088684010a7fee7b9fe05fa1082d01e000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a358258f737b9cea9d7da81a3a12943f800a9668a2494235fec0d84cc60ad04cff000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a36788636e7899d6d227901dc9f8c4c785401c0991724cf908dc65388af686da6f000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a385c2023fdfb1e93dedf5d18f9bc0e79347e071d12740ba71aeb84a4fcbdc4b79000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a34a899e3e648ea55418d9c99177e5c522df621b1953c0ad7e99da3711043ba1c1000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3253eb39d0edc77da10bbc4bcaa23c44e40e3c67ed649fbecb18a3f7c51bfbb10000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # Vault + "0x6082A97Bbb2e51d5aa429DE7DAa5a7Cb04c1B17A": "0000000000000000000000000000000e535b4e063f8372933a55470e67910a6600000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000006445dc7c182386997d894a8da2872e0e0a002f8b0000000000000000000000000e27abef8c0390db326be61da660ceab5d7a01c000000000000000000000000000000000000000000000000000000000" # Subvault 0 + "0x6445DC7C182386997D894A8dA2872E0e0a002F8b": "000000000000000000000000000000047fc878662006e78d5174fb428563796600000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000e27abef8c0390db326be61da660ceab5d7a01c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier 0 + "0x0c48c1eA0Bb779F2B747d9a89EDEb4199000Fa90": "000000000000000000000000000000000b98f77a017b5d3468400c5c597a3bde00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000e27abef8c0390db326be61da660ceab5d7a01c0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000" # SyncDepositQueue (USDC) + "0xAeF472489Ae2405c4B9ece09642e1ce7A9233446": "000000000000000000000000000000000c139266ba06170ed1deaca6d11903c100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c4439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000e27abef8c0390db326be61da660ceab5d7a01c00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # RedeemQueue (USDC) + "0xdbd555288BA3C789156718D7C94c568a0E4e0023": "000000000000000000000000000000000b98f77a017b5d3468400c5c597a3bde00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000e27abef8c0390db326be61da660ceab5d7a01c0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000" # SyncDepositQueue (USDT) + "0x248cA260BfecD194e9596aa7bf50f0E49a5fa43a": "0000000000000000000000000000000f0d3d1c31b72368366a4049c05e291d5800000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000119400000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000000002a30000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000" # Oracle + "0x18bf9c3004da28bA2Ad4Dc676aF2091E38CcB414": "000000000000000000000000000000000c79d2b5cd58ae545afc83030233d7b600000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144578706572696d656e74616c206561726e55534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000086561726e5553446500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # ShareManager + "0xeffE4750254e520b39E5bf872b821Aa5973B69eC": "0000000000000000000000000000000de74e5d51651326e0a3e1aca94beaf6e100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3000000000000000000000000ccf2daba8bb04a232a2fda0d01010d4ef6c69b85000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # FeeManager + "0xb48c3b3ed0D12fbFA0f2bD9c9E11AB44B8317BA3": "0000000000000000000000000000000714cf2851bac1ae2f41871862e9d216fd00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000203fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000" # RiskManager # earnUSDe OracleSubmitter — Etherscan reports empty ctor args (CREATE2); args taken from creation bytecode tail "0xd114BCC2a5b683CF6568789d9B0B8702eD56948d": "000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000093a797643d74fc81e7a51f3f84a9d78f930435d10000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000248ca260bfecd194e9596aa7bf50f0e49a5fa43a" # OracleSubmitter - # earnUSDe SwapModule 0 proxy — Etherscan reports empty ctor args; args taken from creation bytecode tail - "0xe49f6A72476b58c4DDA7d1F2613ac660B11Fbc4c": "00000000000000000000000000000000d681e85e5783588f87a9573cb97eda0100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000604439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000005c00000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e0000000000000000000000006082a97bbb2e51d5aa429de7daa5a7cb04c1b17a000000000000000000000000af00f9561cf64ec5777c36f1f76974a8200c24fc0000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000000130000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000009d39a5de30e57443bff2a8307a4256c8797a34970000000000000000000000004c9edd5852cd905f086c759e8383e09bff1e68b3000000000000000000000000cacd6fd266af91b8aed52accc382b4e165586e29000000000000000000000000ab5eb14c09d416f0ac63661e57edb7aecdb9befa0000000000000000000000003d7d6fdf07ee548b939a80edbc9b2256d0cdc00300000000000000000000000004acaf8d2865c0714f79da09645c13fd2888977f000000000000000000000000808507121b80c02388fad14726482e061b8da827000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd52000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000009d39a5de30e57443bff2a8307a4256c8797a34970000000000000000000000004c9edd5852cd905f086c759e8383e09bff1e68b3000000000000000000000000cacd6fd266af91b8aed52accc382b4e165586e29000000000000000000000000ab5eb14c09d416f0ac63661e57edb7aecdb9befa0000000000000000000000003d7d6fdf07ee548b939a80edbc9b2256d0cdc0030000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b50000000000000000000000000000000000000000000000000000000000000013aef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule 0 proxy + # earnUSDe SwapModule 0 proxy — redeployed; Etherscan reports empty ctor args, args taken from creation bytecode tail + "0xD8E9300d1a838791cC76393fD78B1fD3C73DBEeb": "00000000000000000000000000000000d681e85e5783588f87a9573cb97eda0100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000444439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e0000000000000000000000006082a97bbb2e51d5aa429de7daa5a7cb04c1b17a00000000000000000000000054586be62e3c3580375ae3723c145253060ca0c20000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000009d39a5de30e57443bff2a8307a4256c8797a34970000000000000000000000004c9edd5852cd905f086c759e8383e09bff1e68b3000000000000000000000000356b8d89c1e1239cbbb9de4815c39a1474d5ba7d000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000009d39a5de30e57443bff2a8307a4256c8797a34970000000000000000000000004c9edd5852cd905f086c759e8383e09bff1e68b3000000000000000000000000356b8d89c1e1239cbbb9de4815c39a1474d5ba7d0000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b5000000000000000000000000000000000000000000000000000000000000000caef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule 0 proxy diff --git a/config_samples/plasma/mainnet/meta/meta_usde_plasma_config.yaml b/config_samples/plasma/mainnet/meta/meta_usde_plasma_config.yaml index 5586082..c73d29f 100644 --- a/config_samples/plasma/mainnet/meta/meta_usde_plasma_config.yaml +++ b/config_samples/plasma/mainnet/meta/meta_usde_plasma_config.yaml @@ -31,7 +31,7 @@ contracts: "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier # SwapModule - "0x1818D85D411938667AE13d34f32878F067793FeC": TransparentUpgradeableProxy # 0 + "0xf9C8b4D0fBAcCfc341feBC852b750997b4a72fc8": TransparentUpgradeableProxy # 0 "0x00000000015fa996bCA8c842AFEdC334616F283A": SwapModule # Governance @@ -87,4 +87,5 @@ bytecode_comparison: "0x9111E027ABB6269E7f1a10860b4DaA3f66054735": "00000000000000000000000000000000cc26bc741e75b181738ac2b16156179b00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # RiskManager proxy "0xbd33C99D72BDfe71BE4eFD5b6B2A42d3Daf96e0f": "00000000000000000000000000000000ca30010b8417f791250ae221fdad592000000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab910000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000096383b3120b4437fe679c21acb75ae19429b446d0000000000000000000000003ce1f83e9c95fc8b60e7ab36b3238a825771086200000000000000000000000000000000000000000000000000000000" # Subvault0 proxy "0x96383b3120B4437FE679c21aCb75ae19429b446D": "000000000000000000000000000000007e86a96e279662108cc19ba4c32ede3c00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000003ce1f83e9c95fc8b60e7ab36b3238a8257710862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier0 proxy - "0x1818D85D411938667AE13d34f32878F067793FeC": "00000000000000000000000000000000015fa996bca8c842afedc334616f283a00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000344439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000bd33c99d72bdfe71be4efd5b6b2a42d3daf96e0f00000000000000000000000033e0b3fc976dc9c516926ba48cfc0a9e10a2aaa50000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000080000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000b8ce59fc3717ada4c02eadf9682a9e934f625ebb0000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d2000000000000000000000000b8ce59fc3717ada4c02eadf9682a9e934f625ebb0000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d20000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b50000000000000000000000000000000000000000000000000000000000000008aef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule0 proxy + # SwapModule 0 proxy — redeployed; Etherscan reports empty ctor args (CREATE2), args taken from creation bytecode tail + "0xf9C8b4D0fBAcCfc341feBC852b750997b4a72fc8": "00000000000000000000000000000000015fa996bca8c842afedc334616f283a00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c4439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000bd33c99d72bdfe71be4efd5b6b2a42d3daf96e0f00000000000000000000000033e0b3fc976dc9c516926ba48cfc0a9e10a2aaa50000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000060000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000b8ce59fc3717ada4c02eadf9682a9e934f625ebb000000000000000000000000c4374775489cb9c56003bf2c9b12495fc64f0771000000000000000000000000b8ce59fc3717ada4c02eadf9682a9e934f625ebb000000000000000000000000c4374775489cb9c56003bf2c9b12495fc64f07710000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b50000000000000000000000000000000000000000000000000000000000000006aef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule0 proxy From bab053b3a549653b6b82b617bfc718cd93287a01 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 15:07:56 +0100 Subject: [PATCH 20/35] fix: update earnUSDe to full redeploy - replace all earnUSDe contract addresses with the new deployment - add SyncDepositQueue (USDe) - ctor calldata extracted from on-chain creation traces (CREATE2 proxies return empty args on Etherscan) --- .../mainnet/meta/meta_usd_config.yaml | 54 ++++++++++--------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml b/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml index 7be928d..f4979e8 100644 --- a/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml +++ b/config_samples/ethereum/mainnet/meta/meta_usd_config.yaml @@ -34,19 +34,20 @@ contracts: "0x03852b7138c6704F8F46e87768399616D31Cf733": OracleSubmitter # earnUSDe (Experimental) - "0x0E27abEF8C0390DB326be61Da660cEAb5D7A01c0": TransparentUpgradeableProxy # Vault - "0xD8E9300d1a838791cC76393fD78B1fD3C73DBEeb": TransparentUpgradeableProxy # SwapModule 0 - "0x6082A97Bbb2e51d5aa429DE7DAa5a7Cb04c1B17A": TransparentUpgradeableProxy # Subvault 0 - "0x6445DC7C182386997D894A8dA2872E0e0a002F8b": TransparentUpgradeableProxy # Verifier 0 - "0x0c48c1eA0Bb779F2B747d9a89EDEb4199000Fa90": TransparentUpgradeableProxy # SyncDepositQueue (USDC) - "0xAeF472489Ae2405c4B9ece09642e1ce7A9233446": TransparentUpgradeableProxy # RedeemQueue (USDC) - "0xdbd555288BA3C789156718D7C94c568a0E4e0023": TransparentUpgradeableProxy # SyncDepositQueue (USDT) - "0x248cA260BfecD194e9596aa7bf50f0E49a5fa43a": TransparentUpgradeableProxy # Oracle - "0x18bf9c3004da28bA2Ad4Dc676aF2091E38CcB414": TransparentUpgradeableProxy # ShareManager - "0xeffE4750254e520b39E5bf872b821Aa5973B69eC": TransparentUpgradeableProxy # FeeManager - "0xb48c3b3ed0D12fbFA0f2bD9c9E11AB44B8317BA3": TransparentUpgradeableProxy # RiskManager - "0xFf06E4D42Bc59Dc47DbE2CEBE4E05A0ddA27378A": TimelockController - "0xd114BCC2a5b683CF6568789d9B0B8702eD56948d": OracleSubmitter + "0x0cC65147BF7F615A8dD9E78e2c53158F8E01754d": TransparentUpgradeableProxy # Vault + "0xC99DaA2dC366cFd115130a0b7D21Df01CB5FcF7b": TransparentUpgradeableProxy # SwapModule 0 + "0x31B7d5A2B1CE1871Dd642F6aeCC0Ef68d126B95A": TransparentUpgradeableProxy # Subvault 0 + "0x87631dbf0224234107B593c874f63f577e1336Da": TransparentUpgradeableProxy # Verifier 0 + "0xBb647898e0CF0aE81Ac480d04A8a9973763eBD2D": TransparentUpgradeableProxy # SyncDepositQueue (USDC) + "0x8B857170F2a6C10Ce64ec8b920428ca977fb7710": TransparentUpgradeableProxy # RedeemQueue (USDC) + "0xa01aEfeC7A3384C8440e99084458030BDbdD7404": TransparentUpgradeableProxy # SyncDepositQueue (USDT) + "0xAcb2E510e8FcdaB3808cC5B9d206374cAB527947": TransparentUpgradeableProxy # SyncDepositQueue (USDe) + "0xBcdFaf92783B2C391A1c80682e75Bb6EF47B9c3C": TransparentUpgradeableProxy # Oracle + "0x3D561e1E0204d47b45C23B65356a4536c36d1AF6": TransparentUpgradeableProxy # ShareManager + "0xE90b8D7DfFB816b2895DE67307b4A8f9061CEF52": TransparentUpgradeableProxy # FeeManager + "0x5D7e237BD77d3671fFb33FC9bC8c37d49aAE6153": TransparentUpgradeableProxy # RiskManager + "0x7589b8645F61F151D6c28Eaf8cE2fD9F23E09AbF": TimelockController + "0xDa5508789B5f93fb49b644c87Ef9D8CddB699d59": OracleSubmitter # Shared implementations "0x0000000615B2771511dAa693aC07BE5622869E01": Vault @@ -136,17 +137,18 @@ bytecode_comparison: "0x000000047Fc878662006E78D5174FB4285637966": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier "0x00000000d681E85e5783588f87A9573Cb97Eda01": "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe0110000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SwapModule # earnUSDe proxies — Etherscan reports empty ctor args (CREATE2); args taken from creation bytecode tail - "0x0E27abEF8C0390DB326be61Da660cEAb5D7A01c0": "0000000000000000000000000000000615b2771511daa693ac07be5622869e0100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000644439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e00000000000000000000000018bf9c3004da28ba2ad4dc676af2091e38ccb414000000000000000000000000effe4750254e520b39e5bf872b821aa5973b69ec000000000000000000000000b48c3b3ed0d12fbfa0f2bd9c9e11ab44b8317ba3000000000000000000000000248ca260bfecd194e9596aa7bf50f0e49a5fa43a00000000000000000000000000000004d3b17e5391eb571ddb8fdf95646ca8270000000000000000000000000000000637f1b1ccda4af2db6cddf5e5ec45fd930000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000132b2a32ecca586a148d15aea321ddbb421a2a3ac6b4d56c0a9ad9de32e84cf5c4000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef10253eb39d0edc77da10bbc4bcaa23c44e40e3c67ed649fbecb18a3f7c51bfbb10000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef104a899e3e648ea55418d9c99177e5c522df621b1953c0ad7e99da3711043ba1c1000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef1094b8a54d503c6b752e707c591f9345ae8ccc138255588e460ee15622d499fdba000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef10a7ecfd54b0ab6ce6ecc88746fe62beba4e9a103dbb00d88cfedffbc0c6069ce8000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef10877766a829235d063c3ba37802a4874fcf1b575d310fbe898df17d8ebabee4630000000000000000000000009745f161b0160a99924845befce1d7b9daee689968895691ff006f290ca74825ce06ed17fffab55af49f0274f49b7424f752583a0000000000000000000000009745f161b0160a99924845befce1d7b9daee689932a781031f04cc60b32394e40124d1e87f54273bf26d0532a115a424f6a932980000000000000000000000009745f161b0160a99924845befce1d7b9daee689978b235a1fa2fd5e00dba7867d599bed6f088684010a7fee7b9fe05fa1082d01e000000000000000000000000ff06e4d42bc59dc47dbe2cebe4e05a0dda27378afc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000ff06e4d42bc59dc47dbe2cebe4e05a0dda27378a6618a6d92147bbcacfb2ef2375976fc4c529eeeaeb72a66048296571370c6946000000000000000000000000ff06e4d42bc59dc47dbe2cebe4e05a0dda27378a78b235a1fa2fd5e00dba7867d599bed6f088684010a7fee7b9fe05fa1082d01e000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a358258f737b9cea9d7da81a3a12943f800a9668a2494235fec0d84cc60ad04cff000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a36788636e7899d6d227901dc9f8c4c785401c0991724cf908dc65388af686da6f000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a385c2023fdfb1e93dedf5d18f9bc0e79347e071d12740ba71aeb84a4fcbdc4b79000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a34a899e3e648ea55418d9c99177e5c522df621b1953c0ad7e99da3711043ba1c1000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3253eb39d0edc77da10bbc4bcaa23c44e40e3c67ed649fbecb18a3f7c51bfbb10000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # Vault - "0x6082A97Bbb2e51d5aa429DE7DAa5a7Cb04c1B17A": "0000000000000000000000000000000e535b4e063f8372933a55470e67910a6600000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000006445dc7c182386997d894a8da2872e0e0a002f8b0000000000000000000000000e27abef8c0390db326be61da660ceab5d7a01c000000000000000000000000000000000000000000000000000000000" # Subvault 0 - "0x6445DC7C182386997D894A8dA2872E0e0a002F8b": "000000000000000000000000000000047fc878662006e78d5174fb428563796600000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000e27abef8c0390db326be61da660ceab5d7a01c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier 0 - "0x0c48c1eA0Bb779F2B747d9a89EDEb4199000Fa90": "000000000000000000000000000000000b98f77a017b5d3468400c5c597a3bde00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000e27abef8c0390db326be61da660ceab5d7a01c0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000" # SyncDepositQueue (USDC) - "0xAeF472489Ae2405c4B9ece09642e1ce7A9233446": "000000000000000000000000000000000c139266ba06170ed1deaca6d11903c100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c4439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000e27abef8c0390db326be61da660ceab5d7a01c00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # RedeemQueue (USDC) - "0xdbd555288BA3C789156718D7C94c568a0E4e0023": "000000000000000000000000000000000b98f77a017b5d3468400c5c597a3bde00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000e27abef8c0390db326be61da660ceab5d7a01c0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000" # SyncDepositQueue (USDT) - "0x248cA260BfecD194e9596aa7bf50f0E49a5fa43a": "0000000000000000000000000000000f0d3d1c31b72368366a4049c05e291d5800000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000119400000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000000002a30000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000" # Oracle - "0x18bf9c3004da28bA2Ad4Dc676aF2091E38CcB414": "000000000000000000000000000000000c79d2b5cd58ae545afc83030233d7b600000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144578706572696d656e74616c206561726e55534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000086561726e5553446500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # ShareManager - "0xeffE4750254e520b39E5bf872b821Aa5973B69eC": "0000000000000000000000000000000de74e5d51651326e0a3e1aca94beaf6e100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3000000000000000000000000ccf2daba8bb04a232a2fda0d01010d4ef6c69b85000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # FeeManager - "0xb48c3b3ed0D12fbFA0f2bD9c9E11AB44B8317BA3": "0000000000000000000000000000000714cf2851bac1ae2f41871862e9d216fd00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000203fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000" # RiskManager + "0x0cC65147BF7F615A8dD9E78e2c53158F8E01754d": "0000000000000000000000000000000615b2771511daa693ac07be5622869e0100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000644439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e0000000000000000000000003d561e1e0204d47b45c23b65356a4536c36d1af6000000000000000000000000e90b8d7dffb816b2895de67307b4a8f9061cef520000000000000000000000005d7e237bd77d3671ffb33fc9bc8c37d49aae6153000000000000000000000000bcdfaf92783b2c391a1c80682e75bb6ef47b9c3c00000000000000000000000000000004d3b17e5391eb571ddb8fdf95646ca8270000000000000000000000000000000637f1b1ccda4af2db6cddf5e5ec45fd930000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000132b2a32ecca586a148d15aea321ddbb421a2a3ac6b4d56c0a9ad9de32e84cf5c4000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef10253eb39d0edc77da10bbc4bcaa23c44e40e3c67ed649fbecb18a3f7c51bfbb10000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef104a899e3e648ea55418d9c99177e5c522df621b1953c0ad7e99da3711043ba1c1000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef1094b8a54d503c6b752e707c591f9345ae8ccc138255588e460ee15622d499fdba000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef10a7ecfd54b0ab6ce6ecc88746fe62beba4e9a103dbb00d88cfedffbc0c6069ce8000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef10877766a829235d063c3ba37802a4874fcf1b575d310fbe898df17d8ebabee4630000000000000000000000009745f161b0160a99924845befce1d7b9daee689968895691ff006f290ca74825ce06ed17fffab55af49f0274f49b7424f752583a0000000000000000000000009745f161b0160a99924845befce1d7b9daee689932a781031f04cc60b32394e40124d1e87f54273bf26d0532a115a424f6a932980000000000000000000000009745f161b0160a99924845befce1d7b9daee689978b235a1fa2fd5e00dba7867d599bed6f088684010a7fee7b9fe05fa1082d01e0000000000000000000000007589b8645f61f151d6c28eaf8ce2fd9f23e09abffc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e930240000000000000000000000007589b8645f61f151d6c28eaf8ce2fd9f23e09abf6618a6d92147bbcacfb2ef2375976fc4c529eeeaeb72a66048296571370c69460000000000000000000000007589b8645f61f151d6c28eaf8ce2fd9f23e09abf78b235a1fa2fd5e00dba7867d599bed6f088684010a7fee7b9fe05fa1082d01e000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a358258f737b9cea9d7da81a3a12943f800a9668a2494235fec0d84cc60ad04cff000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a36788636e7899d6d227901dc9f8c4c785401c0991724cf908dc65388af686da6f000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a385c2023fdfb1e93dedf5d18f9bc0e79347e071d12740ba71aeb84a4fcbdc4b79000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a34a899e3e648ea55418d9c99177e5c522df621b1953c0ad7e99da3711043ba1c1000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3253eb39d0edc77da10bbc4bcaa23c44e40e3c67ed649fbecb18a3f7c51bfbb10000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # Vault + "0x31B7d5A2B1CE1871Dd642F6aeCC0Ef68d126B95A": "0000000000000000000000000000000e535b4e063f8372933a55470e67910a6600000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab910000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000087631dbf0224234107b593c874f63f577e1336da0000000000000000000000000cc65147bf7f615a8dd9e78e2c53158f8e01754d00000000000000000000000000000000000000000000000000000000" # Subvault 0 + "0x87631dbf0224234107B593c874f63f577e1336Da": "000000000000000000000000000000047fc878662006e78d5174fb428563796600000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000cc65147bf7f615a8dd9e78e2c53158f8e01754d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier 0 + "0xBb647898e0CF0aE81Ac480d04A8a9973763eBD2D": "000000000000000000000000000000000b98f77a017b5d3468400c5c597a3bde00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000cc65147bf7f615a8dd9e78e2c53158f8e01754d000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000" # SyncDepositQueue (USDC) + "0x8B857170F2a6C10Ce64ec8b920428ca977fb7710": "000000000000000000000000000000000c139266ba06170ed1deaca6d11903c100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c4439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000cc65147bf7f615a8dd9e78e2c53158f8e01754d0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # RedeemQueue (USDC) + "0xa01aEfeC7A3384C8440e99084458030BDbdD7404": "000000000000000000000000000000000b98f77a017b5d3468400c5c597a3bde00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000cc65147bf7f615a8dd9e78e2c53158f8e01754d000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000" # SyncDepositQueue (USDT) + "0xAcb2E510e8FcdaB3808cC5B9d206374cAB527947": "000000000000000000000000000000000b98f77a017b5d3468400c5c597a3bde00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000004c9edd5852cd905f086c759e8383e09bff1e68b30000000000000000000000000cc65147bf7f615a8dd9e78e2c53158f8e01754d000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000" # SyncDepositQueue (USDe) + "0xBcdFaf92783B2C391A1c80682e75Bb6EF47B9c3C": "0000000000000000000000000000000f0d3d1c31b72368366a4049c05e291d5800000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c4439fab910000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000001027e72f1f128130880000000000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000119400000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000000002a30000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000004c9edd5852cd905f086c759e8383e09bff1e68b300000000000000000000000000000000000000000000000000000000" # Oracle + "0x3D561e1E0204d47b45C23B65356a4536c36d1AF6": "000000000000000000000000000000000c79d2b5cd58ae545afc83030233d7b600000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144578706572696d656e74616c206561726e55534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000086561726e5553446500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # ShareManager + "0xE90b8D7DfFB816b2895DE67307b4A8f9061CEF52": "0000000000000000000000000000000de74e5d51651326e0a3e1aca94beaf6e100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3000000000000000000000000ccf2daba8bb04a232a2fda0d01010d4ef6c69b85000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # FeeManager + "0x5D7e237BD77d3671fFb33FC9bC8c37d49aAE6153": "0000000000000000000000000000000714cf2851bac1ae2f41871862e9d216fd00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000203fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000" # RiskManager # earnUSDe OracleSubmitter — Etherscan reports empty ctor args (CREATE2); args taken from creation bytecode tail - "0xd114BCC2a5b683CF6568789d9B0B8702eD56948d": "000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000093a797643d74fc81e7a51f3f84a9d78f930435d10000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000248ca260bfecd194e9596aa7bf50f0e49a5fa43a" # OracleSubmitter - # earnUSDe SwapModule 0 proxy — redeployed; Etherscan reports empty ctor args, args taken from creation bytecode tail - "0xD8E9300d1a838791cC76393fD78B1fD3C73DBEeb": "00000000000000000000000000000000d681e85e5783588f87a9573cb97eda0100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000444439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e0000000000000000000000006082a97bbb2e51d5aa429de7daa5a7cb04c1b17a00000000000000000000000054586be62e3c3580375ae3723c145253060ca0c20000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000009d39a5de30e57443bff2a8307a4256c8797a34970000000000000000000000004c9edd5852cd905f086c759e8383e09bff1e68b3000000000000000000000000356b8d89c1e1239cbbb9de4815c39a1474d5ba7d000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000009d39a5de30e57443bff2a8307a4256c8797a34970000000000000000000000004c9edd5852cd905f086c759e8383e09bff1e68b3000000000000000000000000356b8d89c1e1239cbbb9de4815c39a1474d5ba7d0000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b5000000000000000000000000000000000000000000000000000000000000000caef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule 0 proxy + "0xDa5508789B5f93fb49b644c87Ef9D8CddB699d59": "000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000093a797643d74fc81e7a51f3f84a9d78f930435d10000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000bcdfaf92783b2c391a1c80682e75bb6ef47b9c3c" # OracleSubmitter + # earnUSDe SwapModule 0 proxy — Etherscan reports empty ctor args (CREATE2); args taken from creation bytecode tail + "0xC99DaA2dC366cFd115130a0b7D21Df01CB5FcF7b": "00000000000000000000000000000000d681e85e5783588f87a9573cb97eda0100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000444439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e00000000000000000000000031b7d5a2b1ce1871dd642f6aecc0ef68d126b95a00000000000000000000000054586be62e3c3580375ae3723c145253060ca0c20000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000009d39a5de30e57443bff2a8307a4256c8797a34970000000000000000000000004c9edd5852cd905f086c759e8383e09bff1e68b3000000000000000000000000356b8d89c1e1239cbbb9de4815c39a1474d5ba7d000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000009d39a5de30e57443bff2a8307a4256c8797a34970000000000000000000000004c9edd5852cd905f086c759e8383e09bff1e68b3000000000000000000000000356b8d89c1e1239cbbb9de4815c39a1474d5ba7d0000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b5000000000000000000000000000000000000000000000000000000000000000caef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule 0 proxy From 4c25dde614ad89ded76246424b28bc2a7d6b3161 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 15:31:11 +0100 Subject: [PATCH 21/35] fix: update earnUSDe Mantle deploy to new proxies - replace 8 earnUSDe proxy addresses with the new Mantle deployment - ctor calldata extracted from on-chain creation traces - bump commented TimelockController address (still unverified on explorer) --- .../mainnet/meta/meta_usde_mantle_config.yaml | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml b/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml index 8134c88..1baac22 100644 --- a/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml +++ b/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml @@ -2,39 +2,39 @@ contracts: # Vault - "0x8e85760747F7280254575F4e911A7a2814Fc266E": TransparentUpgradeableProxy + "0x699fc7C0CD3941f2be28aBeD604d42d24B856C1B": TransparentUpgradeableProxy "0x0000000070f44289ec5ea3E5972f058f75B29801": Vault # Oracle - "0xE2aaefF18a0FA0389D6e5B64199727C21530b787": TransparentUpgradeableProxy + "0xf9806b3130484b2E01723d29c05d7831b8b9F050": TransparentUpgradeableProxy "0x000000009adE4dAE1f868775A3f087945983f062": Oracle # ShareManager - "0x134eA36E03b5e59dbddf2535084e342d84f2A043": TransparentUpgradeableProxy + "0x4317Ec3515BB673a87232Ee6d975Bd7abbdfD01C": TransparentUpgradeableProxy "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": TokenizedShareManager # FeeManager - "0x038E3cc0FaE5092C92E87C6371d0Dc55357cd2E5": TransparentUpgradeableProxy + "0xCC0B1393AF58A7427a2384dAa981e7d3E58706D9": TransparentUpgradeableProxy "0x00000000C18039E1F415fe07C33A316232238648": FeeManager # RiskManager - "0x9111E027ABB6269E7f1a10860b4DaA3f66054735": TransparentUpgradeableProxy + "0x4f5Cf078F6eB2b01972Bd546fd1f292d8Ae449A5": TransparentUpgradeableProxy "0x00000000CC26BC741E75B181738Ac2B16156179b": RiskManager # Subvault - "0xdF309792cb9feD4C453fA3B6aC0DDc5FBA8fa7f2": TransparentUpgradeableProxy # 0 + "0x9d61Ea4833CC36081fD16BF20396fb3b21A23F4D": TransparentUpgradeableProxy # 0 "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault # Verifier - "0xcd0Aa7d031d37C85AB3b77478e2FF8A260a865a3": TransparentUpgradeableProxy # 0 + "0xEd67d52694581dcD481B09682311f91F740C6353": TransparentUpgradeableProxy # 0 "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier # SwapModule - "0x8b3270b6bC2272126dD350944D17bcB23A32C624": TransparentUpgradeableProxy # 0 + "0x0F707393f83F6d16F807a49B73Ca8A2B63a9e78B": TransparentUpgradeableProxy # 0 "0x0000000042E248f84Df6BA1E768F878b1f2Bae9f": SwapModule # Governance - # "0xFb492a69ab7329a28180B55B0756b80d2f15c5b0": TimelockController # not verified on Mantle explorer + # "0x345c509005bF56490a7550731aD85a412854A19b": TimelockController # not verified on Mantle explorer rpc_url_env_var: MANTLE_RPC_URL explorer_hostname: api.etherscan.io @@ -79,12 +79,12 @@ bytecode_comparison: "0x000000007e86a96e279662108cc19bA4c32EdE3C": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier "0x0000000042E248f84Df6BA1E768F878b1f2Bae9f": "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe011000000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb800000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SwapModule # Proxies (factory-created) - "0x8e85760747F7280254575F4e911A7a2814Fc266E": "0000000000000000000000000000000070f44289ec5ea3e5972f058f75b2980100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000284439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000134ea36e03b5e59dbddf2535084e342d84f2a043000000000000000000000000038e3cc0fae5092c92e87c6371d0dc55357cd2e50000000000000000000000009111e027abb6269e7f1a10860b4daa3f66054735000000000000000000000000e2aaeff18a0fa0389d6e5b64199727c21530b78700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000004877766a829235d063c3ba37802a4874fcf1b575d310fbe898df17d8ebabee4630000000000000000000000009745f161b0160a99924845befce1d7b9daee6899fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000fb492a69ab7329a28180b55b0756b80d2f15c5b085c2023fdfb1e93dedf5d18f9bc0e79347e071d12740ba71aeb84a4fcbdc4b79000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # Vault proxy - "0xE2aaefF18a0FA0389D6e5B64199727C21530b787": "000000000000000000000000000000009ade4dae1f868775a3f087945983f06200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000164439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000007fffffff000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Oracle proxy - "0x134eA36E03b5e59dbddf2535084e342d84f2A043": "00000000000000000000000000000000861e8b90b81f35c18ca14858cc91d1df00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144578706572696d656e74616c206561726e55534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000086561726e5553446500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # ShareManager proxy - "0x038E3cc0FaE5092C92E87C6371d0Dc55357cd2E5": "00000000000000000000000000000000c18039e1f415fe07c33a31623223864800000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000ccf2daba8bb04a232a2fda0d01010d4ef6c69b85000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # FeeManager proxy - "0x9111E027ABB6269E7f1a10860b4DaA3f66054735": "00000000000000000000000000000000cc26bc741e75b181738ac2b16156179b00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # RiskManager proxy - "0xdF309792cb9feD4C453fA3B6aC0DDc5FBA8fa7f2": "00000000000000000000000000000000ca30010b8417f791250ae221fdad592000000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000cd0aa7d031d37c85ab3b77478e2ff8a260a865a30000000000000000000000008e85760747f7280254575f4e911a7a2814fc266e00000000000000000000000000000000000000000000000000000000" # Subvault0 proxy - "0xcd0Aa7d031d37C85AB3b77478e2FF8A260a865a3": "000000000000000000000000000000007e86a96e279662108cc19ba4c32ede3c00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000008e85760747f7280254575f4e911a7a2814fc266e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier0 proxy - "0x8b3270b6bC2272126dD350944D17bcB23A32C624": "0000000000000000000000000000000042e248f84df6ba1e768f878b1f2bae9f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003c4439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000df309792cb9fed4c453fa3b6ac0ddc5fba8fa7f200000000000000000000000047a063cfda980532267970d478ec340c0f80e8df0000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000779ded0c9e1022225f8e0630b35a9b54be7137360000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d200000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb8000000000000000000000000779ded0c9e1022225f8e0630b35a9b54be7137360000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d200000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb80000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000000000000000000000000000000000aaef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule0 proxy + "0x699fc7C0CD3941f2be28aBeD604d42d24B856C1B": "0000000000000000000000000000000070f44289ec5ea3e5972f058f75b2980100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000284439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e0000000000000000000000004317ec3515bb673a87232ee6d975bd7abbdfd01c000000000000000000000000cc0b1393af58a7427a2384daa981e7d3e58706d90000000000000000000000004f5cf078f6eb2b01972bd546fd1f292d8ae449a5000000000000000000000000f9806b3130484b2e01723d29c05d7831b8b9f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000004877766a829235d063c3ba37802a4874fcf1b575d310fbe898df17d8ebabee4630000000000000000000000009745f161b0160a99924845befce1d7b9daee6899fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000345c509005bf56490a7550731ad85a412854a19b85c2023fdfb1e93dedf5d18f9bc0e79347e071d12740ba71aeb84a4fcbdc4b79000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # Vault proxy + "0xf9806b3130484b2E01723d29c05d7831b8b9F050": "000000000000000000000000000000009ade4dae1f868775a3f087945983f06200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000164439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000007fffffff000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Oracle proxy + "0x4317Ec3515BB673a87232Ee6d975Bd7abbdfD01C": "00000000000000000000000000000000861e8b90b81f35c18ca14858cc91d1df00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144578706572696d656e74616c206561726e55534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000086561726e5553446500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # ShareManager proxy + "0xCC0B1393AF58A7427a2384dAa981e7d3E58706D9": "00000000000000000000000000000000c18039e1f415fe07c33a31623223864800000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000ccf2daba8bb04a232a2fda0d01010d4ef6c69b85000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # FeeManager proxy + "0x4f5Cf078F6eB2b01972Bd546fd1f292d8Ae449A5": "00000000000000000000000000000000cc26bc741e75b181738ac2b16156179b00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # RiskManager proxy + "0x9d61Ea4833CC36081fD16BF20396fb3b21A23F4D": "00000000000000000000000000000000ca30010b8417f791250ae221fdad592000000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000ed67d52694581dcd481b09682311f91f740c6353000000000000000000000000699fc7c0cd3941f2be28abed604d42d24b856c1b00000000000000000000000000000000000000000000000000000000" # Subvault0 proxy + "0xEd67d52694581dcD481B09682311f91F740C6353": "000000000000000000000000000000007e86a96e279662108cc19ba4c32ede3c00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000699fc7c0cd3941f2be28abed604d42d24b856c1b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier0 proxy + "0x0F707393f83F6d16F807a49B73Ca8A2B63a9e78B": "0000000000000000000000000000000042e248f84df6ba1e768f878b1f2bae9f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003c4439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e0000000000000000000000009d61ea4833cc36081fd16bf20396fb3b21a23f4d00000000000000000000000047a063cfda980532267970d478ec340c0f80e8df0000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000779ded0c9e1022225f8e0630b35a9b54be7137360000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d200000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb8000000000000000000000000779ded0c9e1022225f8e0630b35a9b54be7137360000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d200000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb80000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000000000000000000000000000000000aaef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule0 proxy # "0xFb492a69ab7329a28180B55B0756b80d2f15c5b0": TimelockController not verified on Mantle explorer From 8db55839b9a06bbba58a404f89bae7b6c3789113 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 15:35:44 +0100 Subject: [PATCH 22/35] chore: reorder Mantle earnUSDe contracts, enable TimelockController - order contract groups to match the Ethereum earnUSDe config - enable TimelockController (relies on explorer ctor args, as on Ethereum) --- .../mainnet/meta/meta_usde_mantle_config.yaml | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml b/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml index 1baac22..acd120b 100644 --- a/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml +++ b/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml @@ -5,6 +5,18 @@ contracts: "0x699fc7C0CD3941f2be28aBeD604d42d24B856C1B": TransparentUpgradeableProxy "0x0000000070f44289ec5ea3E5972f058f75B29801": Vault + # SwapModule + "0x0F707393f83F6d16F807a49B73Ca8A2B63a9e78B": TransparentUpgradeableProxy # 0 + "0x0000000042E248f84Df6BA1E768F878b1f2Bae9f": SwapModule + + # Subvault + "0x9d61Ea4833CC36081fD16BF20396fb3b21A23F4D": TransparentUpgradeableProxy # 0 + "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault + + # Verifier + "0xEd67d52694581dcD481B09682311f91F740C6353": TransparentUpgradeableProxy # 0 + "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier + # Oracle "0xf9806b3130484b2E01723d29c05d7831b8b9F050": TransparentUpgradeableProxy "0x000000009adE4dAE1f868775A3f087945983f062": Oracle @@ -21,20 +33,8 @@ contracts: "0x4f5Cf078F6eB2b01972Bd546fd1f292d8Ae449A5": TransparentUpgradeableProxy "0x00000000CC26BC741E75B181738Ac2B16156179b": RiskManager - # Subvault - "0x9d61Ea4833CC36081fD16BF20396fb3b21A23F4D": TransparentUpgradeableProxy # 0 - "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault - - # Verifier - "0xEd67d52694581dcD481B09682311f91F740C6353": TransparentUpgradeableProxy # 0 - "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier - - # SwapModule - "0x0F707393f83F6d16F807a49B73Ca8A2B63a9e78B": TransparentUpgradeableProxy # 0 - "0x0000000042E248f84Df6BA1E768F878b1f2Bae9f": SwapModule - # Governance - # "0x345c509005bF56490a7550731aD85a412854A19b": TimelockController # not verified on Mantle explorer + "0x345c509005bF56490a7550731aD85a412854A19b": TimelockController rpc_url_env_var: MANTLE_RPC_URL explorer_hostname: api.etherscan.io @@ -71,20 +71,20 @@ bytecode_comparison: constructor_calldata: # Implementations (CREATE2 via deterministic deployer) "0x0000000070f44289ec5ea3E5972f058f75B29801": "00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f429ba2a8437e7de85078cf7481e8ad52df7e58c000000000000000000000000e08dc488bd6756323f8bf478869529d03db627ef000000000000000000000000a64e324dff04e3c0613ff0706867868c7b370a450000000000000000000000009fbaf5aeb9f52ba57e1cc1d3050eac6d75df8ae700000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Vault + "0x0000000042E248f84Df6BA1E768F878b1f2Bae9f": "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe011000000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb800000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SwapModule + "0x00000000CA30010B8417f791250AE221FdaD5920": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault + "0x000000007e86a96e279662108cc19bA4c32EdE3C": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier "0x000000009adE4dAE1f868775A3f087945983f062": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Oracle "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # TokenizedShareManager "0x00000000C18039E1F415fe07C33A316232238648": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # FeeManager "0x00000000CC26BC741E75B181738Ac2B16156179b": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RiskManager - "0x00000000CA30010B8417f791250AE221FdaD5920": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault - "0x000000007e86a96e279662108cc19bA4c32EdE3C": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier - "0x0000000042E248f84Df6BA1E768F878b1f2Bae9f": "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe011000000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb800000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SwapModule # Proxies (factory-created) "0x699fc7C0CD3941f2be28aBeD604d42d24B856C1B": "0000000000000000000000000000000070f44289ec5ea3e5972f058f75b2980100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000284439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e0000000000000000000000004317ec3515bb673a87232ee6d975bd7abbdfd01c000000000000000000000000cc0b1393af58a7427a2384daa981e7d3e58706d90000000000000000000000004f5cf078f6eb2b01972bd546fd1f292d8ae449a5000000000000000000000000f9806b3130484b2e01723d29c05d7831b8b9f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000004877766a829235d063c3ba37802a4874fcf1b575d310fbe898df17d8ebabee4630000000000000000000000009745f161b0160a99924845befce1d7b9daee6899fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000345c509005bf56490a7550731ad85a412854a19b85c2023fdfb1e93dedf5d18f9bc0e79347e071d12740ba71aeb84a4fcbdc4b79000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # Vault proxy + "0x0F707393f83F6d16F807a49B73Ca8A2B63a9e78B": "0000000000000000000000000000000042e248f84df6ba1e768f878b1f2bae9f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003c4439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e0000000000000000000000009d61ea4833cc36081fd16bf20396fb3b21a23f4d00000000000000000000000047a063cfda980532267970d478ec340c0f80e8df0000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000779ded0c9e1022225f8e0630b35a9b54be7137360000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d200000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb8000000000000000000000000779ded0c9e1022225f8e0630b35a9b54be7137360000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d200000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb80000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000000000000000000000000000000000aaef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule0 proxy + "0x9d61Ea4833CC36081fD16BF20396fb3b21A23F4D": "00000000000000000000000000000000ca30010b8417f791250ae221fdad592000000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000ed67d52694581dcd481b09682311f91f740c6353000000000000000000000000699fc7c0cd3941f2be28abed604d42d24b856c1b00000000000000000000000000000000000000000000000000000000" # Subvault0 proxy + "0xEd67d52694581dcD481B09682311f91F740C6353": "000000000000000000000000000000007e86a96e279662108cc19ba4c32ede3c00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000699fc7c0cd3941f2be28abed604d42d24b856c1b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier0 proxy "0xf9806b3130484b2E01723d29c05d7831b8b9F050": "000000000000000000000000000000009ade4dae1f868775a3f087945983f06200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000164439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000007fffffff000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Oracle proxy "0x4317Ec3515BB673a87232Ee6d975Bd7abbdfD01C": "00000000000000000000000000000000861e8b90b81f35c18ca14858cc91d1df00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144578706572696d656e74616c206561726e55534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000086561726e5553446500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # ShareManager proxy "0xCC0B1393AF58A7427a2384dAa981e7d3E58706D9": "00000000000000000000000000000000c18039e1f415fe07c33a31623223864800000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000ccf2daba8bb04a232a2fda0d01010d4ef6c69b85000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # FeeManager proxy "0x4f5Cf078F6eB2b01972Bd546fd1f292d8Ae449A5": "00000000000000000000000000000000cc26bc741e75b181738ac2b16156179b00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # RiskManager proxy - "0x9d61Ea4833CC36081fD16BF20396fb3b21A23F4D": "00000000000000000000000000000000ca30010b8417f791250ae221fdad592000000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000ed67d52694581dcd481b09682311f91f740c6353000000000000000000000000699fc7c0cd3941f2be28abed604d42d24b856c1b00000000000000000000000000000000000000000000000000000000" # Subvault0 proxy - "0xEd67d52694581dcD481B09682311f91F740C6353": "000000000000000000000000000000007e86a96e279662108cc19ba4c32ede3c00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000699fc7c0cd3941f2be28abed604d42d24b856c1b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier0 proxy - "0x0F707393f83F6d16F807a49B73Ca8A2B63a9e78B": "0000000000000000000000000000000042e248f84df6ba1e768f878b1f2bae9f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003c4439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e0000000000000000000000009d61ea4833cc36081fd16bf20396fb3b21a23f4d00000000000000000000000047a063cfda980532267970d478ec340c0f80e8df0000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000779ded0c9e1022225f8e0630b35a9b54be7137360000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d200000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb8000000000000000000000000779ded0c9e1022225f8e0630b35a9b54be7137360000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d200000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb80000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000000000000000000000000000000000aaef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule0 proxy - # "0xFb492a69ab7329a28180B55B0756b80d2f15c5b0": TimelockController not verified on Mantle explorer + # 0x345c509005bF56490a7550731aD85a412854A19b: TimelockController — ctor args resolved from explorer (no manual calldata, as on Ethereum) From 285a5b4a4bde2d1adf1bc8305c3499120ff654f9 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 16:04:07 +0100 Subject: [PATCH 23/35] fix: update earnUSDe Plasma deploy to new contracts - replace 5 core proxies + SwapModule + Subvault 0 / Verifier 0 - add Subvault 1 / Verifier 1 (new in this deploy) - switch ShareManager impl to BurnableTokenizedShareManager - add OracleSubmitter (unverified on explorer yet) and enable TimelockController - ctor calldata extracted from on-chain creation traces - reorder contract groups to match the Ethereum earnUSDe config --- .../mainnet/meta/meta_usde_plasma_config.yaml | 74 +++++++++++-------- 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/config_samples/plasma/mainnet/meta/meta_usde_plasma_config.yaml b/config_samples/plasma/mainnet/meta/meta_usde_plasma_config.yaml index c73d29f..75e32ca 100644 --- a/config_samples/plasma/mainnet/meta/meta_usde_plasma_config.yaml +++ b/config_samples/plasma/mainnet/meta/meta_usde_plasma_config.yaml @@ -3,39 +3,44 @@ contracts: # Vault - "0x3Ce1F83E9c95fc8b60e7ab36B3238A8257710862": TransparentUpgradeableProxy + "0x49DAb986A4288bE616f44733d56397d3410fD331": TransparentUpgradeableProxy "0x0000000070f44289ec5ea3E5972f058f75B29801": Vault + # SwapModule + "0x351C5644D4d8502385b28Fe3Ef36B44C4b4cEb1c": TransparentUpgradeableProxy # 0 + "0x00000000015fa996bCA8c842AFEdC334616F283A": SwapModule + + # Subvault + "0xa11BE438F1961dB47F6660BDAF59b05C0200ADC5": TransparentUpgradeableProxy # 0 + "0xbaaE2F02d3a4f33eC164902e5A9E980Cb4c71afB": TransparentUpgradeableProxy # 1 + "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault + + # Verifier + "0xeF886da65AA032ce51517a555540339d08effd83": TransparentUpgradeableProxy # 0 + "0xDCa60DBDa06418dB843779486D61cc89208634DE": TransparentUpgradeableProxy # 1 + "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier + # Oracle - "0xE2aaefF18a0FA0389D6e5B64199727C21530b787": TransparentUpgradeableProxy + "0xdB8837c1946f28d9766d9CA7470160B663198DD9": TransparentUpgradeableProxy "0x000000009adE4dAE1f868775A3f087945983f062": Oracle # ShareManager - "0x134eA36E03b5e59dbddf2535084e342d84f2A043": TransparentUpgradeableProxy - "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": TokenizedShareManager + "0x906703a4e566D04828845b6C2918B1767E24752A": TransparentUpgradeableProxy + "0x00000000C534B8680e3aa7165DeDc3Ab8781f602": BurnableTokenizedShareManager # FeeManager - "0x038E3cc0FaE5092C92E87C6371d0Dc55357cd2E5": TransparentUpgradeableProxy + "0x4FD8e72bEA84dc3B947672E49734e457a196bbdb": TransparentUpgradeableProxy "0x00000000C18039E1F415fe07C33A316232238648": FeeManager # RiskManager - "0x9111E027ABB6269E7f1a10860b4DaA3f66054735": TransparentUpgradeableProxy + "0x6B2EaDFD25947b6eD2657f9DCb5bf4413113cc9E": TransparentUpgradeableProxy "0x00000000CC26BC741E75B181738Ac2B16156179b": RiskManager - # Subvault - "0xbd33C99D72BDfe71BE4eFD5b6B2A42d3Daf96e0f": TransparentUpgradeableProxy # 0 - "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault - - # Verifier - "0x96383b3120B4437FE679c21aCb75ae19429b446D": TransparentUpgradeableProxy # 0 - "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier - - # SwapModule - "0xf9C8b4D0fBAcCfc341feBC852b750997b4a72fc8": TransparentUpgradeableProxy # 0 - "0x00000000015fa996bCA8c842AFEdC334616F283A": SwapModule - # Governance - "0x61fB5220a2bA26dF7a1635625e5b3305b333FD7f": TimelockController + "0xFC950F8C0064071a5D762783Cf726Fa0CC2722Fe": TimelockController + + # OracleSubmitter + "0x9d84510ED5dA4adc6Be2726F6C27B3AD68fDAd92": OracleSubmitter rpc_url_env_var: PLASMA_RPC_URL explorer_hostname: api.etherscan.io @@ -72,20 +77,25 @@ bytecode_comparison: constructor_calldata: # Implementations (CREATE2 via deterministic deployer) "0x0000000070f44289ec5ea3E5972f058f75B29801": "00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f429ba2a8437e7de85078cf7481e8ad52df7e58c000000000000000000000000e08dc488bd6756323f8bf478869529d03db627ef000000000000000000000000a64e324dff04e3c0613ff0706867868c7b370a450000000000000000000000009fbaf5aeb9f52ba57e1cc1d3050eac6d75df8ae700000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Vault + "0x00000000015fa996bCA8c842AFEdC334616F283A": "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe01100000000000000000000000006100e367285b01f48d07953803a2d8dca5d1987300000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SwapModule + "0x00000000CA30010B8417f791250AE221FdaD5920": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault + "0x000000007e86a96e279662108cc19bA4c32EdE3C": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier "0x000000009adE4dAE1f868775A3f087945983f062": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Oracle - "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # TokenizedShareManager + "0x00000000C534B8680e3aa7165DeDc3Ab8781f602": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # BurnableTokenizedShareManager "0x00000000C18039E1F415fe07C33A316232238648": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # FeeManager "0x00000000CC26BC741E75B181738Ac2B16156179b": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RiskManager - "0x00000000CA30010B8417f791250AE221FdaD5920": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault - "0x000000007e86a96e279662108cc19bA4c32EdE3C": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier - "0x00000000015fa996bCA8c842AFEdC334616F283A": "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe01100000000000000000000000006100e367285b01f48d07953803a2d8dca5d1987300000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SwapModule # Proxies (factory-created) - "0x3Ce1F83E9c95fc8b60e7ab36B3238A8257710862": "0000000000000000000000000000000070f44289ec5ea3e5972f058f75b2980100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000284439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000134ea36e03b5e59dbddf2535084e342d84f2a043000000000000000000000000038e3cc0fae5092c92e87c6371d0dc55357cd2e50000000000000000000000009111e027abb6269e7f1a10860b4daa3f66054735000000000000000000000000e2aaeff18a0fa0389d6e5b64199727c21530b78700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000004877766a829235d063c3ba37802a4874fcf1b575d310fbe898df17d8ebabee4630000000000000000000000009745f161b0160a99924845befce1d7b9daee6899fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e9302400000000000000000000000061fb5220a2ba26df7a1635625e5b3305b333fd7f85c2023fdfb1e93dedf5d18f9bc0e79347e071d12740ba71aeb84a4fcbdc4b79000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # Vault proxy - "0xE2aaefF18a0FA0389D6e5B64199727C21530b787": "000000000000000000000000000000009ade4dae1f868775a3f087945983f06200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000164439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000007fffffff000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Oracle proxy - "0x134eA36E03b5e59dbddf2535084e342d84f2A043": "00000000000000000000000000000000861e8b90b81f35c18ca14858cc91d1df00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144578706572696d656e74616c206561726e55534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000086561726e5553446500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # ShareManager proxy - "0x038E3cc0FaE5092C92E87C6371d0Dc55357cd2E5": "00000000000000000000000000000000c18039e1f415fe07c33a31623223864800000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000ccf2daba8bb04a232a2fda0d01010d4ef6c69b85000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # FeeManager proxy - "0x9111E027ABB6269E7f1a10860b4DaA3f66054735": "00000000000000000000000000000000cc26bc741e75b181738ac2b16156179b00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # RiskManager proxy - "0xbd33C99D72BDfe71BE4eFD5b6B2A42d3Daf96e0f": "00000000000000000000000000000000ca30010b8417f791250ae221fdad592000000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab910000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000096383b3120b4437fe679c21acb75ae19429b446d0000000000000000000000003ce1f83e9c95fc8b60e7ab36b3238a825771086200000000000000000000000000000000000000000000000000000000" # Subvault0 proxy - "0x96383b3120B4437FE679c21aCb75ae19429b446D": "000000000000000000000000000000007e86a96e279662108cc19ba4c32ede3c00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000003ce1f83e9c95fc8b60e7ab36b3238a8257710862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier0 proxy - # SwapModule 0 proxy — redeployed; Etherscan reports empty ctor args (CREATE2), args taken from creation bytecode tail - "0xf9C8b4D0fBAcCfc341feBC852b750997b4a72fc8": "00000000000000000000000000000000015fa996bca8c842afedc334616f283a00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c4439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000bd33c99d72bdfe71be4efd5b6b2a42d3daf96e0f00000000000000000000000033e0b3fc976dc9c516926ba48cfc0a9e10a2aaa50000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000060000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000b8ce59fc3717ada4c02eadf9682a9e934f625ebb000000000000000000000000c4374775489cb9c56003bf2c9b12495fc64f0771000000000000000000000000b8ce59fc3717ada4c02eadf9682a9e934f625ebb000000000000000000000000c4374775489cb9c56003bf2c9b12495fc64f07710000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b50000000000000000000000000000000000000000000000000000000000000006aef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule0 proxy + "0x49DAb986A4288bE616f44733d56397d3410fD331": "0000000000000000000000000000000070f44289ec5ea3e5972f058f75b2980100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000544439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000906703a4e566d04828845b6c2918b1767e24752a0000000000000000000000004fd8e72bea84dc3b947672e49734e457a196bbdb0000000000000000000000006b2eadfd25947b6ed2657f9dcb5bf4413113cc9e000000000000000000000000db8837c1946f28d9766d9ca7470160b663198dd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000f2b2a32ecca586a148d15aea321ddbb421a2a3ac6b4d56c0a9ad9de32e84cf5c4000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef10253eb39d0edc77da10bbc4bcaa23c44e40e3c67ed649fbecb18a3f7c51bfbb10000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef104a899e3e648ea55418d9c99177e5c522df621b1953c0ad7e99da3711043ba1c1000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef1094b8a54d503c6b752e707c591f9345ae8ccc138255588e460ee15622d499fdba000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef10a7ecfd54b0ab6ce6ecc88746fe62beba4e9a103dbb00d88cfedffbc0c6069ce8000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef10877766a829235d063c3ba37802a4874fcf1b575d310fbe898df17d8ebabee4630000000000000000000000009745f161b0160a99924845befce1d7b9daee689968895691ff006f290ca74825ce06ed17fffab55af49f0274f49b7424f752583a0000000000000000000000009745f161b0160a99924845befce1d7b9daee689932a781031f04cc60b32394e40124d1e87f54273bf26d0532a115a424f6a932980000000000000000000000009745f161b0160a99924845befce1d7b9daee689978b235a1fa2fd5e00dba7867d599bed6f088684010a7fee7b9fe05fa1082d01e000000000000000000000000fc950f8c0064071a5d762783cf726fa0cc2722fefc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000fc950f8c0064071a5d762783cf726fa0cc2722fe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a385c2023fdfb1e93dedf5d18f9bc0e79347e071d12740ba71aeb84a4fcbdc4b79000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a34a899e3e648ea55418d9c99177e5c522df621b1953c0ad7e99da3711043ba1c1000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3253eb39d0edc77da10bbc4bcaa23c44e40e3c67ed649fbecb18a3f7c51bfbb10000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # Vault proxy + "0x351C5644D4d8502385b28Fe3Ef36B44C4b4cEb1c": "00000000000000000000000000000000015fa996bca8c842afedc334616f283a00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003c4439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000a11be438f1961db47f6660bdaf59b05c0200adc500000000000000000000000033e0b3fc976dc9c516926ba48cfc0a9e10a2aaa50000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000b8ce59fc3717ada4c02eadf9682a9e934f625ebb000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d20000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000c4374775489cb9c56003bf2c9b12495fc64f0771000000000000000000000000b8ce59fc3717ada4c02eadf9682a9e934f625ebb000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d20000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000c4374775489cb9c56003bf2c9b12495fc64f07710000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b5000000000000000000000000000000000000000000000000000000000000000aaef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule0 proxy + "0xa11BE438F1961dB47F6660BDAF59b05C0200ADC5": "00000000000000000000000000000000ca30010b8417f791250ae221fdad592000000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000ef886da65aa032ce51517a555540339d08effd8300000000000000000000000049dab986a4288be616f44733d56397d3410fd33100000000000000000000000000000000000000000000000000000000" # Subvault0 proxy + "0xbaaE2F02d3a4f33eC164902e5A9E980Cb4c71afB": "00000000000000000000000000000000ca30010b8417f791250ae221fdad592000000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000dca60dbda06418db843779486d61cc89208634de00000000000000000000000049dab986a4288be616f44733d56397d3410fd33100000000000000000000000000000000000000000000000000000000" # Subvault1 proxy + "0xeF886da65AA032ce51517a555540339d08effd83": "000000000000000000000000000000007e86a96e279662108cc19ba4c32ede3c00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab910000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000049dab986a4288be616f44733d56397d3410fd331000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier0 proxy + "0xDCa60DBDa06418dB843779486D61cc89208634DE": "000000000000000000000000000000007e86a96e279662108cc19ba4c32ede3c00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab910000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000049dab986a4288be616f44733d56397d3410fd331000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier1 proxy + "0xdB8837c1946f28d9766d9CA7470160B663198DD9": "000000000000000000000000000000009ade4dae1f868775a3f087945983f06200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001e4439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000001027e72f1f128130880000000000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000119400000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000000002a30000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000b8ce59fc3717ada4c02eadf9682a9e934f625ebb0000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d2000000000000000000000000c4374775489cb9c56003bf2c9b12495fc64f077100000000000000000000000000000000000000000000000000000000" # Oracle proxy + "0x906703a4e566D04828845b6C2918B1767E24752A": "00000000000000000000000000000000c534b8680e3aa7165dedc3ab8781f60200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144578706572696d656e74616c206561726e55534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000086561726e5553446500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # ShareManager proxy + "0x4FD8e72bEA84dc3B947672E49734e457a196bbdb": "00000000000000000000000000000000c18039e1f415fe07c33a31623223864800000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3000000000000000000000000ccf2daba8bb04a232a2fda0d01010d4ef6c69b85000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # FeeManager proxy + "0x6B2EaDFD25947b6eD2657f9DCb5bf4413113cc9E": "00000000000000000000000000000000cc26bc741e75b181738ac2b16156179b00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000203fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000" # RiskManager proxy + # OracleSubmitter + "0x9d84510ED5dA4adc6Be2726F6C27B3AD68fDAd92": "000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000093a797643d74fc81e7a51f3f84a9d78f930435d10000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000db8837c1946f28d9766d9ca7470160b663198dd9" # OracleSubmitter + # TimelockController — verified on Plasma but explorer returns empty ctor args (CREATE2); args taken from creation bytecode tail + "0xFC950F8C0064071a5D762783Cf726Fa0CC2722Fe": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a30000000000000000000000000000000000000000000000000000000000000002000000000000000000000000a916fd5252160a7e56a6405741de76dc0da5a0cd0000000000000000000000006e887af318c6b29cee42ea28953bd0badb3ce638" # TimelockController From 0688b413fc529551c94bf2262740235f457f922f Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 16:44:51 +0100 Subject: [PATCH 24/35] fix: update earnUSDe Mantle to latest redeploy - replace all 8 proxy addresses with the new deployment - switch ShareManager impl to BurnableTokenizedShareManager - add OracleSubmitter and TimelockController (both unverified on explorer yet) - ctor calldata (proxies, OracleSubmitter, Timelock) from on-chain creation traces --- .../mainnet/meta/meta_usde_mantle_config.yaml | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml b/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml index acd120b..168f4ee 100644 --- a/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml +++ b/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml @@ -2,39 +2,42 @@ contracts: # Vault - "0x699fc7C0CD3941f2be28aBeD604d42d24B856C1B": TransparentUpgradeableProxy + "0xF9DD401ff0f806b71dE62a936c34B930d0876022": TransparentUpgradeableProxy "0x0000000070f44289ec5ea3E5972f058f75B29801": Vault # SwapModule - "0x0F707393f83F6d16F807a49B73Ca8A2B63a9e78B": TransparentUpgradeableProxy # 0 + "0x72b4c5Dc7E7e26BD077d78D5417F0Bf5b86a00EA": TransparentUpgradeableProxy # 0 "0x0000000042E248f84Df6BA1E768F878b1f2Bae9f": SwapModule # Subvault - "0x9d61Ea4833CC36081fD16BF20396fb3b21A23F4D": TransparentUpgradeableProxy # 0 + "0x18b50CbAAf4C48855b29E548E4d0248C71A15392": TransparentUpgradeableProxy # 0 "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault # Verifier - "0xEd67d52694581dcD481B09682311f91F740C6353": TransparentUpgradeableProxy # 0 + "0xd6d0cA0e4d5dE8df1BD3cb9c96E2ae1c473e9bf7": TransparentUpgradeableProxy # 0 "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier # Oracle - "0xf9806b3130484b2E01723d29c05d7831b8b9F050": TransparentUpgradeableProxy + "0x6020b7dEa8df4C82Fe3EbD202FF76bcdbcBe12BA": TransparentUpgradeableProxy "0x000000009adE4dAE1f868775A3f087945983f062": Oracle # ShareManager - "0x4317Ec3515BB673a87232Ee6d975Bd7abbdfD01C": TransparentUpgradeableProxy - "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": TokenizedShareManager + "0x266E1084a88c78D18D42152b6a29873F67F2B586": TransparentUpgradeableProxy + "0x00000000C534B8680e3aa7165DeDc3Ab8781f602": BurnableTokenizedShareManager # FeeManager - "0xCC0B1393AF58A7427a2384dAa981e7d3E58706D9": TransparentUpgradeableProxy + "0x25958e9965B76f0B3a7809FcCc934066Aa80A540": TransparentUpgradeableProxy "0x00000000C18039E1F415fe07C33A316232238648": FeeManager # RiskManager - "0x4f5Cf078F6eB2b01972Bd546fd1f292d8Ae449A5": TransparentUpgradeableProxy + "0xc93f1B04CDEFB5C7F86f7F2f3df4CA26c5a098Ce": TransparentUpgradeableProxy "0x00000000CC26BC741E75B181738Ac2B16156179b": RiskManager # Governance - "0x345c509005bF56490a7550731aD85a412854A19b": TimelockController + "0x3032f5eCf95B2F8FA216Df50d588E2aAe4256f33": TimelockController + + # OracleSubmitter + "0xbe580d9C5C24b0A06C19660c058937BB8434BBa5": OracleSubmitter rpc_url_env_var: MANTLE_RPC_URL explorer_hostname: api.etherscan.io @@ -75,16 +78,19 @@ bytecode_comparison: "0x00000000CA30010B8417f791250AE221FdaD5920": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault "0x000000007e86a96e279662108cc19bA4c32EdE3C": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier "0x000000009adE4dAE1f868775A3f087945983f062": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Oracle - "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # TokenizedShareManager + "0x00000000C534B8680e3aa7165DeDc3Ab8781f602": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # BurnableTokenizedShareManager "0x00000000C18039E1F415fe07C33A316232238648": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # FeeManager "0x00000000CC26BC741E75B181738Ac2B16156179b": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RiskManager # Proxies (factory-created) - "0x699fc7C0CD3941f2be28aBeD604d42d24B856C1B": "0000000000000000000000000000000070f44289ec5ea3e5972f058f75b2980100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000284439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e0000000000000000000000004317ec3515bb673a87232ee6d975bd7abbdfd01c000000000000000000000000cc0b1393af58a7427a2384daa981e7d3e58706d90000000000000000000000004f5cf078f6eb2b01972bd546fd1f292d8ae449a5000000000000000000000000f9806b3130484b2e01723d29c05d7831b8b9f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000004877766a829235d063c3ba37802a4874fcf1b575d310fbe898df17d8ebabee4630000000000000000000000009745f161b0160a99924845befce1d7b9daee6899fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000345c509005bf56490a7550731ad85a412854a19b85c2023fdfb1e93dedf5d18f9bc0e79347e071d12740ba71aeb84a4fcbdc4b79000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # Vault proxy - "0x0F707393f83F6d16F807a49B73Ca8A2B63a9e78B": "0000000000000000000000000000000042e248f84df6ba1e768f878b1f2bae9f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003c4439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e0000000000000000000000009d61ea4833cc36081fd16bf20396fb3b21a23f4d00000000000000000000000047a063cfda980532267970d478ec340c0f80e8df0000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000779ded0c9e1022225f8e0630b35a9b54be7137360000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d200000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb8000000000000000000000000779ded0c9e1022225f8e0630b35a9b54be7137360000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d200000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb80000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000000000000000000000000000000000aaef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule0 proxy - "0x9d61Ea4833CC36081fD16BF20396fb3b21A23F4D": "00000000000000000000000000000000ca30010b8417f791250ae221fdad592000000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000ed67d52694581dcd481b09682311f91f740c6353000000000000000000000000699fc7c0cd3941f2be28abed604d42d24b856c1b00000000000000000000000000000000000000000000000000000000" # Subvault0 proxy - "0xEd67d52694581dcD481B09682311f91F740C6353": "000000000000000000000000000000007e86a96e279662108cc19ba4c32ede3c00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000699fc7c0cd3941f2be28abed604d42d24b856c1b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier0 proxy - "0xf9806b3130484b2E01723d29c05d7831b8b9F050": "000000000000000000000000000000009ade4dae1f868775a3f087945983f06200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000164439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000007fffffff000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Oracle proxy - "0x4317Ec3515BB673a87232Ee6d975Bd7abbdfD01C": "00000000000000000000000000000000861e8b90b81f35c18ca14858cc91d1df00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144578706572696d656e74616c206561726e55534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000086561726e5553446500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # ShareManager proxy - "0xCC0B1393AF58A7427a2384dAa981e7d3E58706D9": "00000000000000000000000000000000c18039e1f415fe07c33a31623223864800000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000ccf2daba8bb04a232a2fda0d01010d4ef6c69b85000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # FeeManager proxy - "0x4f5Cf078F6eB2b01972Bd546fd1f292d8Ae449A5": "00000000000000000000000000000000cc26bc741e75b181738ac2b16156179b00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # RiskManager proxy - # 0x345c509005bF56490a7550731aD85a412854A19b: TimelockController — ctor args resolved from explorer (no manual calldata, as on Ethereum) + "0xF9DD401ff0f806b71dE62a936c34B930d0876022": "0000000000000000000000000000000070f44289ec5ea3e5972f058f75b2980100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000584439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000005400000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000266e1084a88c78d18d42152b6a29873f67f2b58600000000000000000000000025958e9965b76f0b3a7809fccc934066aa80a540000000000000000000000000c93f1b04cdefb5c7f86f7f2f3df4ca26c5a098ce0000000000000000000000006020b7dea8df4c82fe3ebd202ff76bcdbcbe12ba000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000102b2a32ecca586a148d15aea321ddbb421a2a3ac6b4d56c0a9ad9de32e84cf5c4000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef10253eb39d0edc77da10bbc4bcaa23c44e40e3c67ed649fbecb18a3f7c51bfbb10000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef104a899e3e648ea55418d9c99177e5c522df621b1953c0ad7e99da3711043ba1c1000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef1094b8a54d503c6b752e707c591f9345ae8ccc138255588e460ee15622d499fdba000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef10a7ecfd54b0ab6ce6ecc88746fe62beba4e9a103dbb00d88cfedffbc0c6069ce8000000000000000000000000982ab69785f5329bb59c36b19cbd4865353fef10877766a829235d063c3ba37802a4874fcf1b575d310fbe898df17d8ebabee4630000000000000000000000009745f161b0160a99924845befce1d7b9daee689968895691ff006f290ca74825ce06ed17fffab55af49f0274f49b7424f752583a0000000000000000000000009745f161b0160a99924845befce1d7b9daee689932a781031f04cc60b32394e40124d1e87f54273bf26d0532a115a424f6a932980000000000000000000000009745f161b0160a99924845befce1d7b9daee689978b235a1fa2fd5e00dba7867d599bed6f088684010a7fee7b9fe05fa1082d01e0000000000000000000000003032f5ecf95b2f8fa216df50d588e2aae4256f33fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e930240000000000000000000000003032f5ecf95b2f8fa216df50d588e2aae4256f336618a6d92147bbcacfb2ef2375976fc4c529eeeaeb72a66048296571370c69460000000000000000000000003032f5ecf95b2f8fa216df50d588e2aae4256f330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a385c2023fdfb1e93dedf5d18f9bc0e79347e071d12740ba71aeb84a4fcbdc4b79000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a34a899e3e648ea55418d9c99177e5c522df621b1953c0ad7e99da3711043ba1c1000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3253eb39d0edc77da10bbc4bcaa23c44e40e3c67ed649fbecb18a3f7c51bfbb10000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # Vault proxy + "0x72b4c5Dc7E7e26BD077d78D5417F0Bf5b86a00EA": "0000000000000000000000000000000042e248f84df6ba1e768f878b1f2bae9f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003c4439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e00000000000000000000000018b50cbaaf4c48855b29e548e4d0248c71a1539200000000000000000000000047a063cfda980532267970d478ec340c0f80e8df0000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000009745f161b0160a99924845befce1d7b9daee6899000000000000000000000000779ded0c9e1022225f8e0630b35a9b54be713736000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d20000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef3400000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb8000000000000000000000000779ded0c9e1022225f8e0630b35a9b54be713736000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d20000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef3400000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb80000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b5000000000000000000000000000000000000000000000000000000000000000aaef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule0 proxy + "0x18b50CbAAf4C48855b29E548E4d0248C71A15392": "00000000000000000000000000000000ca30010b8417f791250ae221fdad592000000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000d6d0ca0e4d5de8df1bd3cb9c96e2ae1c473e9bf7000000000000000000000000f9dd401ff0f806b71de62a936c34b930d087602200000000000000000000000000000000000000000000000000000000" # Subvault0 proxy + "0xd6d0cA0e4d5dE8df1BD3cb9c96E2ae1c473e9bf7": "000000000000000000000000000000007e86a96e279662108cc19ba4c32ede3c00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000f9dd401ff0f806b71de62a936c34b930d0876022000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier0 proxy + "0x6020b7dEa8df4C82Fe3EbD202FF76bcdbcBe12BA": "000000000000000000000000000000009ade4dae1f868775a3f087945983f06200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c4439fab910000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000001027e72f1f128130880000000000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000119400000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000000002a30000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000779ded0c9e1022225f8e0630b35a9b54be7137360000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000211cc4dd073734da055fbf44a2b4667d5e5fe5d200000000000000000000000000000000000000000000000000000000" # Oracle proxy + "0x266E1084a88c78D18D42152b6a29873F67F2B586": "00000000000000000000000000000000c534b8680e3aa7165dedc3ab8781f60200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144578706572696d656e74616c206561726e55534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000086561726e5553446500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # ShareManager proxy + "0x25958e9965B76f0B3a7809FcCc934066Aa80A540": "00000000000000000000000000000000c18039e1f415fe07c33a31623223864800000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3000000000000000000000000ccf2daba8bb04a232a2fda0d01010d4ef6c69b85000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # FeeManager proxy + "0xc93f1B04CDEFB5C7F86f7F2f3df4CA26c5a098Ce": "00000000000000000000000000000000cc26bc741e75b181738ac2b16156179b00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000203fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000" # RiskManager proxy + # OracleSubmitter — not yet verified on explorer; ctor args from creation bytecode tail + "0xbe580d9C5C24b0A06C19660c058937BB8434BBa5": "000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000093a797643d74fc81e7a51f3f84a9d78f930435d10000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e0000000000000000000000006020b7dea8df4c82fe3ebd202ff76bcdbcbe12ba" # OracleSubmitter + # TimelockController — explorer returns empty ctor args (CREATE2); args taken from creation bytecode tail + "0x3032f5eCf95B2F8FA216Df50d588E2aAe4256f33": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a30000000000000000000000000000000000000000000000000000000000000002000000000000000000000000a916fd5252160a7e56a6405741de76dc0da5a0cd0000000000000000000000006e887af318c6b29cee42ea28953bd0badb3ce638" # TimelockController From ab8575b24193b582e96398d3b60f29d816cb350d Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 16:50:06 +0100 Subject: [PATCH 25/35] chore: remove outdated Arbitrum earnUSDe config No current Arbitrum earnUSDe deployment to track; meta_core_config stays. --- .../mainnet/meta/meta_usde_arb_config.yaml | 99 ------------------- 1 file changed, 99 deletions(-) delete mode 100644 config_samples/arbitrum/mainnet/meta/meta_usde_arb_config.yaml diff --git a/config_samples/arbitrum/mainnet/meta/meta_usde_arb_config.yaml b/config_samples/arbitrum/mainnet/meta/meta_usde_arb_config.yaml deleted file mode 100644 index a95f74b..0000000 --- a/config_samples/arbitrum/mainnet/meta/meta_usde_arb_config.yaml +++ /dev/null @@ -1,99 +0,0 @@ -# earnUSDe - Experimental earnUSD (earnUSDe) Arbitrum - -contracts: - # Vault - "0xe5002a0e63B339a26eaebDcaaf8Bd54AbA941ef4": TransparentUpgradeableProxy - "0x0000000070f44289ec5ea3E5972f058f75B29801": Vault - - # Oracle - "0xE2aaefF18a0FA0389D6e5B64199727C21530b787": TransparentUpgradeableProxy - "0x000000009adE4dAE1f868775A3f087945983f062": Oracle - - # ShareManager - "0x134eA36E03b5e59dbddf2535084e342d84f2A043": TransparentUpgradeableProxy - "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": TokenizedShareManager - - # FeeManager - "0x038E3cc0FaE5092C92E87C6371d0Dc55357cd2E5": TransparentUpgradeableProxy - "0x00000000C18039E1F415fe07C33A316232238648": FeeManager - - # RiskManager - "0x9111E027ABB6269E7f1a10860b4DaA3f66054735": TransparentUpgradeableProxy - "0x00000000CC26BC741E75B181738Ac2B16156179b": RiskManager - - # Subvault - "0x57B3997728bFa5c4D98937A234EB6005cdF68a60": TransparentUpgradeableProxy # 0 - "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault - - # Verifier - "0x7313484208310C60723ACB79739cb01121F00d03": TransparentUpgradeableProxy # 0 - "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier - - # SwapModule - "0xCe50daADf0e3AaE397ad756Bf93650f9047818b4": TransparentUpgradeableProxy # 0 - "0x00000000c324E2d11EcCB03A061F69B5FE123645": SwapModule - - # AaveOracle (deployed by AaveOracleFactory 0x00000000DDc33fB8d6F89dC5d9725F5e27B53D6f) - "0x1e69c602dD0b0881d0E6403228aB31a494031D9D": AaveOracle - - # Governance - "0xcA47d07A8044Bf93397fA0df7917c5E37968DFBD": TimelockController - -rpc_url_env_var: ARBITRUM_RPC_URL -explorer_hostname: api.etherscan.io -explorer_token_env_var: ETHERSCAN_EXPLORER_TOKEN -explorer_chain_id: 42161 - -github_repo: - url: https://github.com/mellow-finance/flexible-vaults - commit: c9c71818f0a8bead183f9860db3b8bbceb7b8f37 - relative_root: "" - -dependencies: - contracts: - url: https://github.com/OpenZeppelin/openzeppelin-contracts - commit: e4f70216d759d8e6a64144a9e1f7bbeed78e7079 - relative_root: contracts - # version 5.3.0 - lib/contracts: - url: https://github.com/cowprotocol/contracts - commit: c94c595a791681cf8ba7495117dcde397b932885 - relative_root: "" - lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts: - url: https://github.com/OpenZeppelin/openzeppelin-contracts - commit: e4f70216d759d8e6a64144a9e1f7bbeed78e7079 - relative_root: contracts - # version 5.3.0 - lib/openzeppelin-contracts-upgradeable/contracts: - url: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable - commit: 60b305a8f3ff0c7688f02ac470417b6bbf1c4d27 - relative_root: contracts - # version 5.3.0 - lib/aave-v3-core: - url: https://github.com/aave/aave-v3-core - commit: b74526a7bc67a3a117a1963fc871b3eb8cea8435 - relative_root: "" - # version v1.19.4 - # Audits: https://github.com/aave/aave-v3-core/tree/master/audits - -bytecode_comparison: - constructor_calldata: - # Implementations (CREATE2 via deterministic deployer) - "0x0000000070f44289ec5ea3E5972f058f75B29801": "00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f429ba2a8437e7de85078cf7481e8ad52df7e58c000000000000000000000000e08dc488bd6756323f8bf478869529d03db627ef000000000000000000000000a64e324dff04e3c0613ff0706867868c7b370a450000000000000000000000009fbaf5aeb9f52ba57e1cc1d3050eac6d75df8ae700000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Vault - "0x000000009adE4dAE1f868775A3f087945983f062": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Oracle - "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # TokenizedShareManager - "0x00000000C18039E1F415fe07C33A316232238648": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # FeeManager - "0x00000000CC26BC741E75B181738Ac2B16156179b": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RiskManager - "0x00000000CA30010B8417f791250AE221FdaD5920": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault - "0x000000007e86a96e279662108cc19bA4c32EdE3C": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier - "0x00000000c324E2d11EcCB03A061F69B5FE123645": "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe011000000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SwapModule - # Proxies (factory-created) - "0xe5002a0e63B339a26eaebDcaaf8Bd54AbA941ef4": "0000000000000000000000000000000070f44289ec5ea3e5972f058f75b2980100000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000284439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000134ea36e03b5e59dbddf2535084e342d84f2a043000000000000000000000000038e3cc0fae5092c92e87c6371d0dc55357cd2e50000000000000000000000009111e027abb6269e7f1a10860b4daa3f66054735000000000000000000000000e2aaeff18a0fa0389d6e5b64199727c21530b78700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000004877766a829235d063c3ba37802a4874fcf1b575d310fbe898df17d8ebabee4630000000000000000000000009745f161b0160a99924845befce1d7b9daee6899fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000ca47d07a8044bf93397fa0df7917c5e37968dfbd85c2023fdfb1e93dedf5d18f9bc0e79347e071d12740ba71aeb84a4fcbdc4b79000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a3fc199f685d023b44b528c5fcb9cebfe292e64340dd5729b20761da4ad1e93024000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # Vault proxy - "0xE2aaefF18a0FA0389D6e5B64199727C21530b787": "000000000000000000000000000000009ade4dae1f868775a3f087945983f06200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000164439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000007fffffff000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Oracle proxy - "0x134eA36E03b5e59dbddf2535084e342d84f2A043": "00000000000000000000000000000000861e8b90b81f35c18ca14858cc91d1df00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000144578706572696d656e74616c206561726e55534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000086561726e5553446500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # ShareManager proxy - "0x038E3cc0FaE5092C92E87C6371d0Dc55357cd2E5": "00000000000000000000000000000000c18039e1f415fe07c33a31623223864800000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000104439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e000000000000000000000000ccf2daba8bb04a232a2fda0d01010d4ef6c69b85000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # FeeManager proxy - "0x9111E027ABB6269E7f1a10860b4DaA3f66054735": "00000000000000000000000000000000cc26bc741e75b181738ac2b16156179b00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # RiskManager proxy - "0x57B3997728bFa5c4D98937A234EB6005cdF68a60": "00000000000000000000000000000000ca30010b8417f791250ae221fdad592000000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000007313484208310c60723acb79739cb01121f00d03000000000000000000000000e5002a0e63b339a26eaebdcaaf8bd54aba941ef400000000000000000000000000000000000000000000000000000000" # Subvault0 proxy - "0x7313484208310C60723ACB79739cb01121F00d03": "000000000000000000000000000000007e86a96e279662108cc19ba4c32ede3c00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000084439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000e5002a0e63b339a26eaebdcaaf8bd54aba941ef4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" # Verifier0 proxy - "0xCe50daADf0e3AaE397ad756Bf93650f9047818b4": "00000000000000000000000000000000c324e2d11eccb03a061f69b5fe12364500000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000344439fab91000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000dd73341d6158a72b4d224541f1094188f57076e00000000000000000000000057b3997728bfa5c4d98937a234eb6005cdf68a600000000000000000000000001e69c602dd0b0881d0e6403228ab31a494031d9d0000000000000000000000000000000000000000000000000000000005ee3fe000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000080000000000000000000000009745f161b0160a99924845befce1d7b9daee68990000000000000000000000000a1a1a107e45b7ced86833863f482bc5f4ed82ef0000000000000000000000000b2b2b2076d95dda7817e785989fe353fe955ef9000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e58310000000000000000000000000a1a1a107e45b7ced86833863f482bc5f4ed82ef0000000000000000000000000b2b2b2076d95dda7817e785989fe353fe955ef9000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e58310000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b50000000000000000000000000000000000000000000000000000000000000008aef53ff2a64da421565efa45c50a96f070d7bb66ffc4ca806c77c72a0e763f6635f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c25319d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c253159a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d9000000000000000000000000000000000000000000000000000000000" # SwapModule0 proxy - From ea789f0340936b589fd19fa2ca80d21dac93d3ab Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 17:00:48 +0100 Subject: [PATCH 26/35] fix: don't abort the run when a contract errors A contract that can't be fetched/compared (e.g. unverified on the explorer) no longer aborts the whole run. It is logged, recorded in a new errored_contracts list, and processing continues with the next contract. Errored contracts are shown in the final summary and still cause a non-zero exit code, so they aren't masked as success. --- diffyscan/diffyscan.py | 44 +++++++++++++++++++----- tests/test_error_resilience.py | 62 ++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 8 deletions(-) create mode 100644 tests/test_error_resilience.py diff --git a/diffyscan/diffyscan.py b/diffyscan/diffyscan.py index f5fca42..16efced 100644 --- a/diffyscan/diffyscan.py +++ b/diffyscan/diffyscan.py @@ -3,7 +3,6 @@ import time import argparse import os -import traceback from pathlib import Path from dotenv import load_dotenv @@ -452,6 +451,7 @@ def process_config( # Statistics tracking source_stats = [] bytecode_stats = [] + errored_contracts = [] try: if enable_binary_comparison: @@ -520,14 +520,24 @@ def process_config( } ) except BaseCustomException as custom_exc: - ExceptionHandler.raise_exception_or_log(custom_exc) - traceback.print_exc() + # A contract that can't be fetched/compared (e.g. unverified on the + # explorer) must not abort the whole run — log it, record it as an + # error, and move on to the next contract. + logger.error(str(custom_exc)) + errored_contracts.append( + { + "contract_address": contract_address, + "contract_name": contract_name, + "error": str(custom_exc), + } + ) except KeyboardInterrupt: logger.info("Keyboard interrupt by user") return { "source_stats": source_stats, "bytecode_stats": bytecode_stats, + "errored_contracts": errored_contracts, "config_path": path, } @@ -694,6 +704,17 @@ def print_final_summary( for contract in bytecode_mismatches: logger.warn(f" • {contract['name']} ({contract['address']})") + # Contracts skipped because of errors (e.g. unverified on the explorer) + errored = [e for result in all_results for e in result.get("errored_contracts", [])] + if errored: + logger.divider() + logger.info("ERRORED CONTRACTS (not compared):") + logger.warn(f"Contracts skipped due to errors: {len(errored)}") + for e in errored: + logger.warn( + f" • {e['contract_name']} ({e['contract_address']}): {e['error']}" + ) + logger.divider() logger.info("=" * 80) @@ -811,16 +832,23 @@ def main() -> None: ", ".join(sorted(allowed_bytecode_addrs)), ) - # Decide exit code: non-zero if any unallowed diffs exist - has_unallowed_diffs = (unallowed_source_diffs > 0) or (unallowed_bytecode_diffs > 0) + # Contracts that could not be fetched/compared at all (e.g. unverified) + errored_count = sum(len(r.get("errored_contracts", [])) for r in all_results) + + # Decide exit code: non-zero if any unallowed diffs or errored contracts exist + has_failures = ( + (unallowed_source_diffs > 0) + or (unallowed_bytecode_diffs > 0) + or (errored_count > 0) + ) logger.okay(f"Done in {round(execution_time, 3)}s ✨" + " " * 100) - if has_unallowed_diffs: + if has_failures: # Explicitly log a final line explaining failure condition logger.error( - "Exiting with non-zero code due to unallowed diffs", - f"source={unallowed_source_diffs}, bytecode={unallowed_bytecode_diffs}", + "Exiting with non-zero code due to unallowed diffs or errors", + f"source={unallowed_source_diffs}, bytecode={unallowed_bytecode_diffs}, errored={errored_count}", ) sys.exit(1) else: diff --git a/tests/test_error_resilience.py b/tests/test_error_resilience.py new file mode 100644 index 0000000..9cc1110 --- /dev/null +++ b/tests/test_error_resilience.py @@ -0,0 +1,62 @@ +"""A contract that errors (e.g. unverified on the explorer) must not abort the run.""" + +import diffyscan.diffyscan as ds +from diffyscan.utils.custom_exceptions import ExplorerError + +ADDR_BAD = "0xAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa" +ADDR_OK = "0xBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBb" + + +def _patch_common(monkeypatch, config): + monkeypatch.setattr(ds, "load_config", lambda path: config) + monkeypatch.setattr(ds, "_warn_deprecated_hardhat_settings", lambda *a, **k: None) + monkeypatch.setattr(ds, "_load_explorer_token", lambda config: "token") + monkeypatch.setattr(ds, "load_env", lambda *a, **k: "gh-token") + monkeypatch.setattr(ds, "get_explorer_hostname", lambda config: "host") + monkeypatch.setattr(ds, "get_explorer_chain_id", lambda config: 1) + monkeypatch.setattr( + ds, + "run_source_diff", + lambda addr, code, *a, **k: { + "files_count": 1, + "files_found": 1, + "identical_files": 1, + "files_with_diffs": 0, + "contract_address": addr, + "contract_name": code["name"], + }, + ) + + +def test_unverified_contract_does_not_abort_run(monkeypatch): + config = {"contracts": {ADDR_BAD: "Foo", ADDR_OK: "Bar"}} + _patch_common(monkeypatch, config) + + def fake_fetch(token, host, addr, name, chain_id, cache): + if addr == ADDR_BAD: + raise ExplorerError("Contract name in config does not match") + return {"name": name} + + monkeypatch.setattr(ds, "get_contract_from_explorer", fake_fetch) + + # binary comparison disabled so no RPC is needed + result = ds.process_config("cfg", None, False, False, False, False, True) + + # the failing contract is recorded, the run did NOT raise + assert len(result["errored_contracts"]) == 1 + assert result["errored_contracts"][0]["contract_address"] == ADDR_BAD + # the second, healthy contract was still processed + assert [s["contract_address"] for s in result["source_stats"]] == [ADDR_OK] + + +def test_all_contracts_ok_yields_no_errors(monkeypatch): + config = {"contracts": {ADDR_OK: "Bar"}} + _patch_common(monkeypatch, config) + monkeypatch.setattr( + ds, "get_contract_from_explorer", lambda *a, **k: {"name": "Bar"} + ) + + result = ds.process_config("cfg", None, False, False, False, False, True) + + assert result["errored_contracts"] == [] + assert len(result["source_stats"]) == 1 From b93d6e19f340abd6a518403fb91dc6e2db9e709d Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 17:19:47 +0100 Subject: [PATCH 27/35] fix: add missing impl constructor_calldata to Ethereum meta_core Vault, DepositQueue, Oracle, TokenizedShareManager, FeeManager, RiskManager, Subvault, Verifier implementations had no constructor_calldata and the explorer returns empty args, so diffyscan couldn't simulate them and reported bytecode mismatches. Add their calldata (mirrors the shared implementations in meta_usd; TokenizedShareManager from creation trace). All 8 now fully match. --- .../ethereum/mainnet/meta/meta_core_config.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/config_samples/ethereum/mainnet/meta/meta_core_config.yaml b/config_samples/ethereum/mainnet/meta/meta_core_config.yaml index ac05087..d06ba5d 100644 --- a/config_samples/ethereum/mainnet/meta/meta_core_config.yaml +++ b/config_samples/ethereum/mainnet/meta/meta_core_config.yaml @@ -138,3 +138,12 @@ bytecode_comparison: "0x000000028be48f9E62E13403480B60C4822C5aa5": "000000000000000000000000952f39aa62e94db3ad0d1c7d1e43c1a8519e45d8000000000000000000000000f7223356819ea48f25880b6c2ab3e907cc336d45000000000000000000000000a51e4fa916b939fa451520d2b7600c740d86e5a00000000000000000000000000cdff250c7a071fdc72340d820c5c8e29507aaad0000000000000000000000004e38f679e46b3216f0bd4b314e9c429affb1dee3" # VaultConfigurator "0x000000065d1A7bD71f52886910aaBE6555b7317c": "0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000004d3b17e5391eb571ddb8fdf95646ca827" # LidoDepositHook "0xCa027f59521E808EFdaF6f338D4269833451118A": "0000000000000000000000000000000397b71c8f3182fd40d247330d218fdc7200000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy + # Core implementations with constructor args (calldata mirrors meta_usd shared implementations) + "0x0000000615B2771511dAa693aC07BE5622869E01": "00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000bb92a7b9695750e1234bab18f83b73686dd09854000000000000000000000000fe76b5fd238553d65ce6dd0a572c0fda629f842100000000000000000000000075fe0d73d3c64cdc1c6449d9f977be6857c4d01100000000000000000000000004b30b1e98950e6a13550d84e991be0d734c2c6100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Vault + "0x00000006dA9f179BFE250Dd1c51cD2d3581930c8": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # DepositQueue + "0x0000000F0d3D1c31b72368366A4049C05E291D58": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Oracle + "0x0000000E8eb7173fA1a3ba60eCA325bcB6aaf378": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # TokenizedShareManager + "0x0000000dE74e5D51651326E0A3e1ACA94bEAF6E1": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # FeeManager + "0x0000000714cf2851baC1AE2f41871862e9D216fD": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RiskManager + "0x0000000E535B4E063f8372933A55470e67910a66": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault + "0x000000047Fc878662006E78D5174FB4285637966": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier From b7566457a13a98bf90890f4e5d9c8d9eb336b292 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 17:35:34 +0100 Subject: [PATCH 28/35] refactor: make bytecode comparison errors fatal, drop dead ExceptionHandler Addresses Copilot review: - bytecode comparison errors (missing/bad calldata, compile/RPC failure) now abort the run instead of being silently downgraded to a mismatch; a plain bytecode mismatch still returns False and is reported as a diff - source/verification errors (e.g. unverified on explorer) stay non-fatal: logged, recorded, run continues - remove the now-dead ExceptionHandler / fail_on_bytecode_comparison_error mechanism (raise_exception_or_log was no longer called anywhere) from code, types, README, skills, tests and fixtures - errored-contract summary and log now include the config file path Note: the fail_on_bytecode_comparison_error key remains in config_samples as a harmless no-op (loader ignores unknown keys); cleaning those is left out of this PR to avoid a large unrelated diff. --- .claude/skills/new-config/SKILL.md | 1 - .claude/skills/validate-config/SKILL.md | 2 - CLAUDE.md | 2 +- README.md | 1 - diffyscan/diffyscan.py | 75 +++++++++++-------------- diffyscan/utils/custom_exceptions.py | 17 ------ diffyscan/utils/custom_types.py | 1 - tests/fixtures/full_config.json | 1 - tests/fixtures/full_config.yaml | 1 - tests/test_config_loading.py | 4 -- tests/test_error_resilience.py | 24 +++++++- 11 files changed, 57 insertions(+), 72 deletions(-) diff --git a/.claude/skills/new-config/SKILL.md b/.claude/skills/new-config/SKILL.md index d9874ab..63bfd41 100644 --- a/.claude/skills/new-config/SKILL.md +++ b/.claude/skills/new-config/SKILL.md @@ -51,7 +51,6 @@ YAML gotcha: addresses and hex strings MUST be quoted (`"0xabc..."`) — unquote - `constructor_args` — typed args per address: `{"0xAddr": ["0xarg1", true, 42]}` - `libraries` — per source path: `{"contracts/lib/Foo.sol": {"Foo": "0xLibAddr"}}` - `hardhat_config_name` — (deprecated) name of a hardhat config file -- `fail_on_bytecode_comparison_error` — set to `true` for strict mode - `source_comparison` — set to `false` to skip source diffs (bytecode-only check) - `explorer_hostname_env_var` — config convention for external CI/tooling to pass the explorer hostname via env var (used for soneium, unichain). Note: diffyscan itself does NOT resolve this at runtime — `get_explorer_hostname()` only reads `explorer_hostname`. External scripts must set `explorer_hostname` before invoking diffyscan. - `audit_url` — optional link to an audit report for documentation purposes diff --git a/.claude/skills/validate-config/SKILL.md b/.claude/skills/validate-config/SKILL.md index 391c5e5..e3b673c 100644 --- a/.claude/skills/validate-config/SKILL.md +++ b/.claude/skills/validate-config/SKILL.md @@ -23,7 +23,6 @@ The `Config` TypedDict (`diffyscan/utils/custom_types.py`) defines: - `explorer_token_env_var` — `str` - `explorer_chain_id` — `int` - `bytecode_comparison` — `BinaryConfig` -- `fail_on_bytecode_comparison_error` — `bool` - `source_comparison` — `bool` **Additional fields found in real configs but not in the TypedDict:** @@ -107,7 +106,6 @@ Recommended cross-reference warnings: ### 9. Optional flags -- `fail_on_bytecode_comparison_error` defaults to `true` if absent - `source_comparison` defaults to `true` if absent; set to `false` to skip source diffs ## Output diff --git a/CLAUDE.md b/CLAUDE.md index 9c255f8..40443f1 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -56,7 +56,7 @@ Entry point: `diffyscan/diffyscan.py:main` — parses CLI args, loads config (JS - **node_handler.py** — RPC calls: `eth_getCode`, `eth_chainId`, `eth_call` - **common.py** — config loading (with YAML hex address validation), HTTP helpers, caching with SHA256 validation - **custom_types.py** — TypedDict definitions: `Config`, `BinaryConfig`, `ExplorerContract`, `GithubRepo` -- **custom_exceptions.py** — exception hierarchy; `ExceptionHandler` controls fail-or-log behavior +- **custom_exceptions.py** — exception hierarchy (`BaseCustomException` and subtypes) ### Config schema diff --git a/README.md b/README.md index f5a1dc0..632a5c9 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,6 @@ Alternatively, create a new config file near `diffyscan.py`. Configs can be writ "relative_root": "contracts" } }, - "fail_on_bytecode_comparison_error": true, "bytecode_comparison": { "constructor_calldata": { "0x28FAB2059C713A7F9D8c86Db49f9bb0e96Af1ef8": "000000000000000000000000ab89ed3d8f31bcf8bb7de53f02084d1e6f043d34000000000000000000000000e92329ec7ddb11d25e25b3c21eebf11f15eb325d00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" diff --git a/diffyscan/diffyscan.py b/diffyscan/diffyscan.py index 16efced..6c0a0aa 100644 --- a/diffyscan/diffyscan.py +++ b/diffyscan/diffyscan.py @@ -36,7 +36,6 @@ ) from .utils.calldata import get_calldata from .utils.custom_exceptions import ( - ExceptionHandler, BaseCustomException, CompileError, ) @@ -357,14 +356,13 @@ def _load_explorer_token(config: dict) -> str: def _setup_binary_comparison(config: dict, use_local_rpc: bool = False) -> str: - """Load RPC URL and configure exception handling for bytecode comparison.""" + """Load the RPC URL for bytecode comparison.""" rpc_env_var = ( "LOCAL_RPC_URL" if use_local_rpc else config.get("rpc_url_env_var", "REMOTE_RPC_URL") ) remote_rpc_url = load_env(rpc_env_var, masked=True, required=True) - ExceptionHandler.initialize(config.get("fail_on_bytecode_comparison_error", True)) return remote_rpc_url @@ -425,9 +423,6 @@ def process_config( use_local_rpc: bool = False, ): """Process a config file and run source + bytecode comparisons.""" - # Reset exception handler to default before each config - ExceptionHandler.initialize(True) - logger.info(f"Loading config {path}...") config = load_config(path) _warn_deprecated_hardhat_settings(config, hardhat_config_path) @@ -488,47 +483,41 @@ def process_config( skip_user_input, ) source_stats.append(source_result) - - if enable_binary_comparison: - try: - bytecode_match = run_bytecode_diff( - contract_address, - contract_name, - contract_code, - config, - github_api_token, - recursive_parsing, - cache_github, - remote_rpc_url, - ) - bytecode_stats.append( - { - "contract_address": contract_address, - "contract_name": contract_name, - "match": bytecode_match, - } - ) - except BaseCustomException as exc: - # Treat bytecode comparison errors as reportable diffs; final - # allowlist handling happens after all contracts are processed. - logger.error(str(exc)) - bytecode_stats.append( - { - "contract_address": contract_address, - "contract_name": contract_name, - "match": False, - } - ) except BaseCustomException as custom_exc: - # A contract that can't be fetched/compared (e.g. unverified on the - # explorer) must not abort the whole run — log it, record it as an - # error, and move on to the next contract. - logger.error(str(custom_exc)) + # A contract that can't be fetched/source-checked (e.g. unverified on + # the explorer) must not abort the whole run — log it with its config + # for context, record it, and move on to the next contract. + logger.error(f"{custom_exc} [config: {path}]") errored_contracts.append( { "contract_address": contract_address, "contract_name": contract_name, "error": str(custom_exc), + "config_path": path, + } + ) + continue + + # Bytecode comparison errors are fatal: a contract whose deployment can't + # be simulated (missing/bad calldata, compile or RPC failure) is a hard + # failure, not a skip. A plain bytecode mismatch returns False instead and + # is reported as a diff. + if enable_binary_comparison: + bytecode_match = run_bytecode_diff( + contract_address, + contract_name, + contract_code, + config, + github_api_token, + recursive_parsing, + cache_github, + remote_rpc_url, + ) + bytecode_stats.append( + { + "contract_address": contract_address, + "contract_name": contract_name, + "match": bytecode_match, } ) except KeyboardInterrupt: @@ -711,8 +700,10 @@ def print_final_summary( logger.info("ERRORED CONTRACTS (not compared):") logger.warn(f"Contracts skipped due to errors: {len(errored)}") for e in errored: + cfg = e.get("config_path") + loc = f" [{cfg}]" if cfg else "" logger.warn( - f" • {e['contract_name']} ({e['contract_address']}): {e['error']}" + f" • {e['contract_name']} ({e['contract_address']}){loc}: {e['error']}" ) logger.divider() diff --git a/diffyscan/utils/custom_exceptions.py b/diffyscan/utils/custom_exceptions.py index f274a06..3befb1c 100644 --- a/diffyscan/utils/custom_exceptions.py +++ b/diffyscan/utils/custom_exceptions.py @@ -1,6 +1,3 @@ -from .logger import logger - - class BaseCustomException(Exception): prefix = "" @@ -32,17 +29,3 @@ class ExplorerError(BaseCustomException): class BinVerifierError(BaseCustomException): prefix = "Failed in binary comparison" - - -class ExceptionHandler: - raise_exception = True - - @staticmethod - def initialize(raise_exception: bool) -> None: - ExceptionHandler.raise_exception = raise_exception - - @staticmethod - def raise_exception_or_log(custom_exception: BaseCustomException) -> None: - if ExceptionHandler.raise_exception: - raise custom_exception - logger.error(str(custom_exception)) diff --git a/diffyscan/utils/custom_types.py b/diffyscan/utils/custom_types.py index de98d6e..6647f1b 100644 --- a/diffyscan/utils/custom_types.py +++ b/diffyscan/utils/custom_types.py @@ -32,5 +32,4 @@ class Config(TypedDict): explorer_token_env_var: NotRequired[str] explorer_chain_id: NotRequired[int] bytecode_comparison: NotRequired[BinaryConfig] - fail_on_bytecode_comparison_error: NotRequired[bool] source_comparison: NotRequired[bool] diff --git a/tests/fixtures/full_config.json b/tests/fixtures/full_config.json index 1c40a08..4df2af4 100644 --- a/tests/fixtures/full_config.json +++ b/tests/fixtures/full_config.json @@ -27,7 +27,6 @@ "relative_root": "contracts" } }, - "fail_on_bytecode_comparison_error": true, "bytecode_comparison": { "hardhat_config_name": "mainnet_hardhat_config.js", "constructor_calldata": { diff --git a/tests/fixtures/full_config.yaml b/tests/fixtures/full_config.yaml index 9b39892..05e80fc 100644 --- a/tests/fixtures/full_config.yaml +++ b/tests/fixtures/full_config.yaml @@ -30,7 +30,6 @@ dependencies: relative_root: contracts # version 5.3.0 -fail_on_bytecode_comparison_error: true bytecode_comparison: hardhat_config_name: mainnet_hardhat_config.js diff --git a/tests/test_config_loading.py b/tests/test_config_loading.py index 9ce4a06..4065f92 100644 --- a/tests/test_config_loading.py +++ b/tests/test_config_loading.py @@ -20,7 +20,6 @@ "explorer_hostname_env_var", "explorer_chain_id", "bytecode_comparison", - "fail_on_bytecode_comparison_error", "audit_url", "metadata", } @@ -271,9 +270,6 @@ def test_full_fixture_nested_types(): assert result["explorer_chain_id"] == 1 assert isinstance(result["explorer_chain_id"], int) - # fail_on_bytecode_comparison_error stays bool - assert result["fail_on_bytecode_comparison_error"] is True - # bytecode_comparison.constructor_args values are lists of strings for addr, args in result["bytecode_comparison"]["constructor_args"].items(): assert isinstance(args, list), f"constructor_args for {addr} should be list" diff --git a/tests/test_error_resilience.py b/tests/test_error_resilience.py index 9cc1110..cd0a525 100644 --- a/tests/test_error_resilience.py +++ b/tests/test_error_resilience.py @@ -1,7 +1,9 @@ """A contract that errors (e.g. unverified on the explorer) must not abort the run.""" +import pytest + import diffyscan.diffyscan as ds -from diffyscan.utils.custom_exceptions import ExplorerError +from diffyscan.utils.custom_exceptions import ExplorerError, CalldataError ADDR_BAD = "0xAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa" ADDR_OK = "0xBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBb" @@ -60,3 +62,23 @@ def test_all_contracts_ok_yields_no_errors(monkeypatch): assert result["errored_contracts"] == [] assert len(result["source_stats"]) == 1 + + +def test_bytecode_comparison_error_aborts_run(monkeypatch): + """A bytecode comparison error (not a mismatch) is fatal and must propagate.""" + config = {"contracts": {ADDR_OK: "Bar"}} + _patch_common(monkeypatch, config) + monkeypatch.setattr( + ds, "get_contract_from_explorer", lambda *a, **k: {"name": "Bar"} + ) + monkeypatch.setattr(ds, "_setup_binary_comparison", lambda *a, **k: "http://rpc") + monkeypatch.setattr(ds, "get_chain_id", lambda url: 1) + + def boom(*a, **k): + raise CalldataError("empty constructor calldata") + + monkeypatch.setattr(ds, "run_bytecode_diff", boom) + + with pytest.raises(CalldataError): + # enable_binary_comparison=True (4th positional arg) + ds.process_config("cfg", None, False, True, False, False, True) From 2c0911ded0139d67792d4a78e28d7df6f64be41d Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 17:48:43 +0100 Subject: [PATCH 29/35] revert: drop error-handling changes from this PR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reverts the resilience fix (ea789f0) and the bytecode-error-fatal refactor (b756645). The fatal-on-bytecode-error behavior broke a valid case (eth_call revert during deploy simulation, previously reported as an allowed diff — hoodi_vaults_testnet regression). Error-handling will be reworked in a separate PR. earnUSDe configs and the Ethereum meta_core calldata fix (b93d6e1) are kept. --- .claude/skills/new-config/SKILL.md | 1 + .claude/skills/validate-config/SKILL.md | 2 + CLAUDE.md | 2 +- README.md | 1 + diffyscan/diffyscan.py | 109 ++++++++++-------------- diffyscan/utils/custom_exceptions.py | 17 ++++ diffyscan/utils/custom_types.py | 1 + tests/fixtures/full_config.json | 1 + tests/fixtures/full_config.yaml | 1 + tests/test_config_loading.py | 4 + tests/test_error_resilience.py | 84 ------------------ 11 files changed, 74 insertions(+), 149 deletions(-) delete mode 100644 tests/test_error_resilience.py diff --git a/.claude/skills/new-config/SKILL.md b/.claude/skills/new-config/SKILL.md index 63bfd41..d9874ab 100644 --- a/.claude/skills/new-config/SKILL.md +++ b/.claude/skills/new-config/SKILL.md @@ -51,6 +51,7 @@ YAML gotcha: addresses and hex strings MUST be quoted (`"0xabc..."`) — unquote - `constructor_args` — typed args per address: `{"0xAddr": ["0xarg1", true, 42]}` - `libraries` — per source path: `{"contracts/lib/Foo.sol": {"Foo": "0xLibAddr"}}` - `hardhat_config_name` — (deprecated) name of a hardhat config file +- `fail_on_bytecode_comparison_error` — set to `true` for strict mode - `source_comparison` — set to `false` to skip source diffs (bytecode-only check) - `explorer_hostname_env_var` — config convention for external CI/tooling to pass the explorer hostname via env var (used for soneium, unichain). Note: diffyscan itself does NOT resolve this at runtime — `get_explorer_hostname()` only reads `explorer_hostname`. External scripts must set `explorer_hostname` before invoking diffyscan. - `audit_url` — optional link to an audit report for documentation purposes diff --git a/.claude/skills/validate-config/SKILL.md b/.claude/skills/validate-config/SKILL.md index e3b673c..391c5e5 100644 --- a/.claude/skills/validate-config/SKILL.md +++ b/.claude/skills/validate-config/SKILL.md @@ -23,6 +23,7 @@ The `Config` TypedDict (`diffyscan/utils/custom_types.py`) defines: - `explorer_token_env_var` — `str` - `explorer_chain_id` — `int` - `bytecode_comparison` — `BinaryConfig` +- `fail_on_bytecode_comparison_error` — `bool` - `source_comparison` — `bool` **Additional fields found in real configs but not in the TypedDict:** @@ -106,6 +107,7 @@ Recommended cross-reference warnings: ### 9. Optional flags +- `fail_on_bytecode_comparison_error` defaults to `true` if absent - `source_comparison` defaults to `true` if absent; set to `false` to skip source diffs ## Output diff --git a/CLAUDE.md b/CLAUDE.md index 40443f1..9c255f8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -56,7 +56,7 @@ Entry point: `diffyscan/diffyscan.py:main` — parses CLI args, loads config (JS - **node_handler.py** — RPC calls: `eth_getCode`, `eth_chainId`, `eth_call` - **common.py** — config loading (with YAML hex address validation), HTTP helpers, caching with SHA256 validation - **custom_types.py** — TypedDict definitions: `Config`, `BinaryConfig`, `ExplorerContract`, `GithubRepo` -- **custom_exceptions.py** — exception hierarchy (`BaseCustomException` and subtypes) +- **custom_exceptions.py** — exception hierarchy; `ExceptionHandler` controls fail-or-log behavior ### Config schema diff --git a/README.md b/README.md index 632a5c9..f5a1dc0 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,7 @@ Alternatively, create a new config file near `diffyscan.py`. Configs can be writ "relative_root": "contracts" } }, + "fail_on_bytecode_comparison_error": true, "bytecode_comparison": { "constructor_calldata": { "0x28FAB2059C713A7F9D8c86Db49f9bb0e96Af1ef8": "000000000000000000000000ab89ed3d8f31bcf8bb7de53f02084d1e6f043d34000000000000000000000000e92329ec7ddb11d25e25b3c21eebf11f15eb325d00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" diff --git a/diffyscan/diffyscan.py b/diffyscan/diffyscan.py index 6c0a0aa..f5fca42 100644 --- a/diffyscan/diffyscan.py +++ b/diffyscan/diffyscan.py @@ -3,6 +3,7 @@ import time import argparse import os +import traceback from pathlib import Path from dotenv import load_dotenv @@ -36,6 +37,7 @@ ) from .utils.calldata import get_calldata from .utils.custom_exceptions import ( + ExceptionHandler, BaseCustomException, CompileError, ) @@ -356,13 +358,14 @@ def _load_explorer_token(config: dict) -> str: def _setup_binary_comparison(config: dict, use_local_rpc: bool = False) -> str: - """Load the RPC URL for bytecode comparison.""" + """Load RPC URL and configure exception handling for bytecode comparison.""" rpc_env_var = ( "LOCAL_RPC_URL" if use_local_rpc else config.get("rpc_url_env_var", "REMOTE_RPC_URL") ) remote_rpc_url = load_env(rpc_env_var, masked=True, required=True) + ExceptionHandler.initialize(config.get("fail_on_bytecode_comparison_error", True)) return remote_rpc_url @@ -423,6 +426,9 @@ def process_config( use_local_rpc: bool = False, ): """Process a config file and run source + bytecode comparisons.""" + # Reset exception handler to default before each config + ExceptionHandler.initialize(True) + logger.info(f"Loading config {path}...") config = load_config(path) _warn_deprecated_hardhat_settings(config, hardhat_config_path) @@ -446,7 +452,6 @@ def process_config( # Statistics tracking source_stats = [] bytecode_stats = [] - errored_contracts = [] try: if enable_binary_comparison: @@ -483,50 +488,46 @@ def process_config( skip_user_input, ) source_stats.append(source_result) - except BaseCustomException as custom_exc: - # A contract that can't be fetched/source-checked (e.g. unverified on - # the explorer) must not abort the whole run — log it with its config - # for context, record it, and move on to the next contract. - logger.error(f"{custom_exc} [config: {path}]") - errored_contracts.append( - { - "contract_address": contract_address, - "contract_name": contract_name, - "error": str(custom_exc), - "config_path": path, - } - ) - continue - # Bytecode comparison errors are fatal: a contract whose deployment can't - # be simulated (missing/bad calldata, compile or RPC failure) is a hard - # failure, not a skip. A plain bytecode mismatch returns False instead and - # is reported as a diff. - if enable_binary_comparison: - bytecode_match = run_bytecode_diff( - contract_address, - contract_name, - contract_code, - config, - github_api_token, - recursive_parsing, - cache_github, - remote_rpc_url, - ) - bytecode_stats.append( - { - "contract_address": contract_address, - "contract_name": contract_name, - "match": bytecode_match, - } - ) + if enable_binary_comparison: + try: + bytecode_match = run_bytecode_diff( + contract_address, + contract_name, + contract_code, + config, + github_api_token, + recursive_parsing, + cache_github, + remote_rpc_url, + ) + bytecode_stats.append( + { + "contract_address": contract_address, + "contract_name": contract_name, + "match": bytecode_match, + } + ) + except BaseCustomException as exc: + # Treat bytecode comparison errors as reportable diffs; final + # allowlist handling happens after all contracts are processed. + logger.error(str(exc)) + bytecode_stats.append( + { + "contract_address": contract_address, + "contract_name": contract_name, + "match": False, + } + ) + except BaseCustomException as custom_exc: + ExceptionHandler.raise_exception_or_log(custom_exc) + traceback.print_exc() except KeyboardInterrupt: logger.info("Keyboard interrupt by user") return { "source_stats": source_stats, "bytecode_stats": bytecode_stats, - "errored_contracts": errored_contracts, "config_path": path, } @@ -693,19 +694,6 @@ def print_final_summary( for contract in bytecode_mismatches: logger.warn(f" • {contract['name']} ({contract['address']})") - # Contracts skipped because of errors (e.g. unverified on the explorer) - errored = [e for result in all_results for e in result.get("errored_contracts", [])] - if errored: - logger.divider() - logger.info("ERRORED CONTRACTS (not compared):") - logger.warn(f"Contracts skipped due to errors: {len(errored)}") - for e in errored: - cfg = e.get("config_path") - loc = f" [{cfg}]" if cfg else "" - logger.warn( - f" • {e['contract_name']} ({e['contract_address']}){loc}: {e['error']}" - ) - logger.divider() logger.info("=" * 80) @@ -823,23 +811,16 @@ def main() -> None: ", ".join(sorted(allowed_bytecode_addrs)), ) - # Contracts that could not be fetched/compared at all (e.g. unverified) - errored_count = sum(len(r.get("errored_contracts", [])) for r in all_results) - - # Decide exit code: non-zero if any unallowed diffs or errored contracts exist - has_failures = ( - (unallowed_source_diffs > 0) - or (unallowed_bytecode_diffs > 0) - or (errored_count > 0) - ) + # Decide exit code: non-zero if any unallowed diffs exist + has_unallowed_diffs = (unallowed_source_diffs > 0) or (unallowed_bytecode_diffs > 0) logger.okay(f"Done in {round(execution_time, 3)}s ✨" + " " * 100) - if has_failures: + if has_unallowed_diffs: # Explicitly log a final line explaining failure condition logger.error( - "Exiting with non-zero code due to unallowed diffs or errors", - f"source={unallowed_source_diffs}, bytecode={unallowed_bytecode_diffs}, errored={errored_count}", + "Exiting with non-zero code due to unallowed diffs", + f"source={unallowed_source_diffs}, bytecode={unallowed_bytecode_diffs}", ) sys.exit(1) else: diff --git a/diffyscan/utils/custom_exceptions.py b/diffyscan/utils/custom_exceptions.py index 3befb1c..f274a06 100644 --- a/diffyscan/utils/custom_exceptions.py +++ b/diffyscan/utils/custom_exceptions.py @@ -1,3 +1,6 @@ +from .logger import logger + + class BaseCustomException(Exception): prefix = "" @@ -29,3 +32,17 @@ class ExplorerError(BaseCustomException): class BinVerifierError(BaseCustomException): prefix = "Failed in binary comparison" + + +class ExceptionHandler: + raise_exception = True + + @staticmethod + def initialize(raise_exception: bool) -> None: + ExceptionHandler.raise_exception = raise_exception + + @staticmethod + def raise_exception_or_log(custom_exception: BaseCustomException) -> None: + if ExceptionHandler.raise_exception: + raise custom_exception + logger.error(str(custom_exception)) diff --git a/diffyscan/utils/custom_types.py b/diffyscan/utils/custom_types.py index 6647f1b..de98d6e 100644 --- a/diffyscan/utils/custom_types.py +++ b/diffyscan/utils/custom_types.py @@ -32,4 +32,5 @@ class Config(TypedDict): explorer_token_env_var: NotRequired[str] explorer_chain_id: NotRequired[int] bytecode_comparison: NotRequired[BinaryConfig] + fail_on_bytecode_comparison_error: NotRequired[bool] source_comparison: NotRequired[bool] diff --git a/tests/fixtures/full_config.json b/tests/fixtures/full_config.json index 4df2af4..1c40a08 100644 --- a/tests/fixtures/full_config.json +++ b/tests/fixtures/full_config.json @@ -27,6 +27,7 @@ "relative_root": "contracts" } }, + "fail_on_bytecode_comparison_error": true, "bytecode_comparison": { "hardhat_config_name": "mainnet_hardhat_config.js", "constructor_calldata": { diff --git a/tests/fixtures/full_config.yaml b/tests/fixtures/full_config.yaml index 05e80fc..9b39892 100644 --- a/tests/fixtures/full_config.yaml +++ b/tests/fixtures/full_config.yaml @@ -30,6 +30,7 @@ dependencies: relative_root: contracts # version 5.3.0 +fail_on_bytecode_comparison_error: true bytecode_comparison: hardhat_config_name: mainnet_hardhat_config.js diff --git a/tests/test_config_loading.py b/tests/test_config_loading.py index 4065f92..9ce4a06 100644 --- a/tests/test_config_loading.py +++ b/tests/test_config_loading.py @@ -20,6 +20,7 @@ "explorer_hostname_env_var", "explorer_chain_id", "bytecode_comparison", + "fail_on_bytecode_comparison_error", "audit_url", "metadata", } @@ -270,6 +271,9 @@ def test_full_fixture_nested_types(): assert result["explorer_chain_id"] == 1 assert isinstance(result["explorer_chain_id"], int) + # fail_on_bytecode_comparison_error stays bool + assert result["fail_on_bytecode_comparison_error"] is True + # bytecode_comparison.constructor_args values are lists of strings for addr, args in result["bytecode_comparison"]["constructor_args"].items(): assert isinstance(args, list), f"constructor_args for {addr} should be list" diff --git a/tests/test_error_resilience.py b/tests/test_error_resilience.py deleted file mode 100644 index cd0a525..0000000 --- a/tests/test_error_resilience.py +++ /dev/null @@ -1,84 +0,0 @@ -"""A contract that errors (e.g. unverified on the explorer) must not abort the run.""" - -import pytest - -import diffyscan.diffyscan as ds -from diffyscan.utils.custom_exceptions import ExplorerError, CalldataError - -ADDR_BAD = "0xAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa" -ADDR_OK = "0xBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBb" - - -def _patch_common(monkeypatch, config): - monkeypatch.setattr(ds, "load_config", lambda path: config) - monkeypatch.setattr(ds, "_warn_deprecated_hardhat_settings", lambda *a, **k: None) - monkeypatch.setattr(ds, "_load_explorer_token", lambda config: "token") - monkeypatch.setattr(ds, "load_env", lambda *a, **k: "gh-token") - monkeypatch.setattr(ds, "get_explorer_hostname", lambda config: "host") - monkeypatch.setattr(ds, "get_explorer_chain_id", lambda config: 1) - monkeypatch.setattr( - ds, - "run_source_diff", - lambda addr, code, *a, **k: { - "files_count": 1, - "files_found": 1, - "identical_files": 1, - "files_with_diffs": 0, - "contract_address": addr, - "contract_name": code["name"], - }, - ) - - -def test_unverified_contract_does_not_abort_run(monkeypatch): - config = {"contracts": {ADDR_BAD: "Foo", ADDR_OK: "Bar"}} - _patch_common(monkeypatch, config) - - def fake_fetch(token, host, addr, name, chain_id, cache): - if addr == ADDR_BAD: - raise ExplorerError("Contract name in config does not match") - return {"name": name} - - monkeypatch.setattr(ds, "get_contract_from_explorer", fake_fetch) - - # binary comparison disabled so no RPC is needed - result = ds.process_config("cfg", None, False, False, False, False, True) - - # the failing contract is recorded, the run did NOT raise - assert len(result["errored_contracts"]) == 1 - assert result["errored_contracts"][0]["contract_address"] == ADDR_BAD - # the second, healthy contract was still processed - assert [s["contract_address"] for s in result["source_stats"]] == [ADDR_OK] - - -def test_all_contracts_ok_yields_no_errors(monkeypatch): - config = {"contracts": {ADDR_OK: "Bar"}} - _patch_common(monkeypatch, config) - monkeypatch.setattr( - ds, "get_contract_from_explorer", lambda *a, **k: {"name": "Bar"} - ) - - result = ds.process_config("cfg", None, False, False, False, False, True) - - assert result["errored_contracts"] == [] - assert len(result["source_stats"]) == 1 - - -def test_bytecode_comparison_error_aborts_run(monkeypatch): - """A bytecode comparison error (not a mismatch) is fatal and must propagate.""" - config = {"contracts": {ADDR_OK: "Bar"}} - _patch_common(monkeypatch, config) - monkeypatch.setattr( - ds, "get_contract_from_explorer", lambda *a, **k: {"name": "Bar"} - ) - monkeypatch.setattr(ds, "_setup_binary_comparison", lambda *a, **k: "http://rpc") - monkeypatch.setattr(ds, "get_chain_id", lambda url: 1) - - def boom(*a, **k): - raise CalldataError("empty constructor calldata") - - monkeypatch.setattr(ds, "run_bytecode_diff", boom) - - with pytest.raises(CalldataError): - # enable_binary_comparison=True (4th positional arg) - ds.process_config("cfg", None, False, True, False, False, True) From 35e96dbe7b763a13f83e8f92e42019c82341adf3 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 18:15:39 +0100 Subject: [PATCH 30/35] docs: fix AI-doc drift vs code - new-config: fail_on_bytecode_comparison_error defaults to true (not an opt-in 'strict mode'); document the rpc_url_env_var and deployment_gas_limit config keys that the code actually reads - debug-diff: BinVerifierError is caught in process_config and recorded as a non-match (match=False), it does not abort the run; quote the full 'Failed in binary comparison: ...' log line - CLAUDE.md: HTML diffs are saved under digest//diffs/ --- .claude/skills/debug-diff/SKILL.md | 4 ++-- .claude/skills/new-config/SKILL.md | 4 +++- CLAUDE.md | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.claude/skills/debug-diff/SKILL.md b/.claude/skills/debug-diff/SKILL.md index d2a6d22..206b09a 100644 --- a/.claude/skills/debug-diff/SKILL.md +++ b/.claude/skills/debug-diff/SKILL.md @@ -41,7 +41,7 @@ ls digest//diffs// - Missing or wrong constructor arguments -- see `constructor_calldata` or `constructor_args` under the `bytecode_comparison` config key - Missing libraries -- check if the contract uses external libraries that need addresses in `bytecode_comparison.libraries` - Wrong EVM version -- the explorer may report a different version than expected -- Immutable variables -- `deep_match_bytecode()` in `diffyscan/utils/binary_verifier.py` compares instruction-by-instruction and tolerates differences that fall within known immutable reference regions. If all diffs are in immutable positions it logs a warning and returns `False` (still reported as a non-match — use `--allow-bytecode-diff 0xAddr` to accept). Differences outside immutable regions raise `BinVerifierError` +- Immutable variables -- `deep_match_bytecode()` in `diffyscan/utils/binary_verifier.py` compares instruction-by-instruction and tolerates differences that fall within known immutable reference regions. If all diffs are in immutable positions it logs a warning and returns `False` (still reported as a non-match — use `--allow-bytecode-diff 0xAddr` to accept). Differences outside immutable regions raise `BinVerifierError`, which `process_config` catches and records as a non-match (`match=False`) — it does not abort the run - Optimizer settings mismatch -- the solcInput from the explorer includes optimizer settings; the GitHub recompilation must match - Flat-source contracts -- see **Known limitations** section below @@ -68,7 +68,7 @@ ls digest//diffs// | `"Failed to infer source path for library '...' from explorer metadata"` | Add library addresses to `bytecode_comparison.libraries` keyed by `"path/to/File.sol": {"LibName": "0xAddr"}` | | All files show diffs | Wrong `commit` or `relative_root` in `github_repo` | | Single contract fails | May need a per-contract `constructor_calldata` or `constructor_args` entry | -| `"Bytecodes have differences not on the immutable reference position"` | Real bytecode mismatch -- check compiler version, optimizer settings, EVM version, and library addresses | +| `"Failed in binary comparison: Bytecodes have differences not on the immutable reference position"` | Real bytecode mismatch -- check compiler version, optimizer settings, EVM version, and library addresses | | `"Exiting with non-zero code due to unallowed diffs"` | Either fix the diffs or use `--allow-source-diff 0xAddr` / `--allow-bytecode-diff 0xAddr` for known acceptable diffs | | `"Contract name in config does not match with blockchain explorer ... !="` | Contract not verified on explorer — comment it out or verify it on the explorer first | | `"Failed to get calldata: Explorer metadata has empty constructor calldata for 0x..."` | Factory-created contract — Etherscan has no constructor args. Add `constructor_calldata` manually (extract via `getsourcecode` API `ConstructorArguments`, `debug_traceTransaction` trace, or cross-chain reuse) | diff --git a/.claude/skills/new-config/SKILL.md b/.claude/skills/new-config/SKILL.md index d9874ab..4e9d32c 100644 --- a/.claude/skills/new-config/SKILL.md +++ b/.claude/skills/new-config/SKILL.md @@ -51,8 +51,10 @@ YAML gotcha: addresses and hex strings MUST be quoted (`"0xabc..."`) — unquote - `constructor_args` — typed args per address: `{"0xAddr": ["0xarg1", true, 42]}` - `libraries` — per source path: `{"contracts/lib/Foo.sol": {"Foo": "0xLibAddr"}}` - `hardhat_config_name` — (deprecated) name of a hardhat config file -- `fail_on_bytecode_comparison_error` — set to `true` for strict mode +- `fail_on_bytecode_comparison_error` — defaults to `true` (strict); set to `false` to log bytecode comparison errors instead of failing the run - `source_comparison` — set to `false` to skip source diffs (bytecode-only check) +- `rpc_url_env_var` — name of the env var holding the RPC URL for bytecode comparison (defaults to `REMOTE_RPC_URL`; e.g. `MANTLE_RPC_URL`, `PLASMA_RPC_URL`) +- `deployment_gas_limit` — optional gas limit for the `eth_call` deployment simulation (helps on chains where the default reverts with "intrinsic gas too low") - `explorer_hostname_env_var` — config convention for external CI/tooling to pass the explorer hostname via env var (used for soneium, unichain). Note: diffyscan itself does NOT resolve this at runtime — `get_explorer_hostname()` only reads `explorer_hostname`. External scripts must set `explorer_hostname` before invoking diffyscan. - `audit_url` — optional link to an audit report for documentation purposes - `metadata` — optional object for deployment metadata (e.g. `chain_name`, `deployment_date`, `timelock_address`, `timelock_requirements`) diff --git a/CLAUDE.md b/CLAUDE.md index 9c255f8..c6acc96 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -6,7 +6,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co Diffyscan verifies deployed EVM smart contracts match their GitHub source by: 1. Fetching verified source from blockchain explorers (Etherscan, Blockscout, zkSync, Mantle) -2. Diffing against GitHub repo sources (HTML diff reports saved to `digest/`) +2. Diffing against GitHub repo sources (HTML diff reports saved under `digest//diffs/`) 3. Optionally recompiling from GitHub and comparing bytecode against on-chain bytecode, handling constructor args, libraries, and immutable references ## Commands From 69a4aced3c07fd7c159468d8b944ecb257db0a27 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 18:35:40 +0100 Subject: [PATCH 31/35] docs: correct fail_on_bytecode_comparison_error description Per Copilot review on #164: bytecode comparison errors are always caught and recorded as match=False; the flag actually controls whether a per-contract exception (e.g. explorer fetch/verify failure) aborts the run. --- .claude/skills/new-config/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.claude/skills/new-config/SKILL.md b/.claude/skills/new-config/SKILL.md index 4e9d32c..9b26d7b 100644 --- a/.claude/skills/new-config/SKILL.md +++ b/.claude/skills/new-config/SKILL.md @@ -51,7 +51,7 @@ YAML gotcha: addresses and hex strings MUST be quoted (`"0xabc..."`) — unquote - `constructor_args` — typed args per address: `{"0xAddr": ["0xarg1", true, 42]}` - `libraries` — per source path: `{"contracts/lib/Foo.sol": {"Foo": "0xLibAddr"}}` - `hardhat_config_name` — (deprecated) name of a hardhat config file -- `fail_on_bytecode_comparison_error` — defaults to `true` (strict); set to `false` to log bytecode comparison errors instead of failing the run +- `fail_on_bytecode_comparison_error` — defaults to `true`; when `false`, a per-contract exception (e.g. failing to fetch/verify a contract from the explorer) is logged and the run continues instead of aborting. Despite the name, an actual error inside `run_bytecode_diff` is always caught and recorded as a mismatch (`match=False`) regardless of this flag. - `source_comparison` — set to `false` to skip source diffs (bytecode-only check) - `rpc_url_env_var` — name of the env var holding the RPC URL for bytecode comparison (defaults to `REMOTE_RPC_URL`; e.g. `MANTLE_RPC_URL`, `PLASMA_RPC_URL`) - `deployment_gas_limit` — optional gas limit for the `eth_call` deployment simulation (helps on chains where the default reverts with "intrinsic gas too low") From d8c9c8eb69b6855233299a14c7054ad8bfea72d8 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 20:49:13 +0100 Subject: [PATCH 32/35] chore: remove arbitrum --- .../mainnet/meta/meta_core_config.yaml | 136 ------------------ 1 file changed, 136 deletions(-) delete mode 100644 config_samples/arbitrum/mainnet/meta/meta_core_config.yaml diff --git a/config_samples/arbitrum/mainnet/meta/meta_core_config.yaml b/config_samples/arbitrum/mainnet/meta/meta_core_config.yaml deleted file mode 100644 index 9361f45..0000000 --- a/config_samples/arbitrum/mainnet/meta/meta_core_config.yaml +++ /dev/null @@ -1,136 +0,0 @@ -# Core implementations and factories — Arbitrum deployment -# - -contracts: - # Factory - "0x00000000741292C88f9fF5050b07051C4f592EBf": TransparentUpgradeableProxy - "0x0000000072BAfCeAff1AD0237Ea58f06cfc4467F": Factory - - # Consensus - "0xAfef40968b5304135677f0C89203948e1A145105": TransparentUpgradeableProxy - "0x000000007e6b679B9196a1609e5Bc2405eDFd6Aa": Consensus - - # DepositQueue - "0xF429ba2a8437E7de85078CF7481E8Ad52df7E58c": TransparentUpgradeableProxy - "0x00000000B2d2373aAF1C370cFE4e1Ee8BDE7C546": DepositQueue - "0x000000001CC8c3E40856E956db870095EF6C98bd": SyncDepositQueue - "0x000000000Af33501e5BDAF9B481Ad2712a024727": SignatureDepositQueue - - # FeeManager - "0x52d56c20B0C8d403888880d0A1610e5ed17addA8": TransparentUpgradeableProxy - "0x00000000C18039E1F415fe07C33A316232238648": FeeManager - - # Oracle - "0x727c295b5D99b15280Ca8736b6F97ABA6aEd0E88": TransparentUpgradeableProxy - "0x000000009adE4dAE1f868775A3f087945983f062": Oracle - - # RedeemQueue - "0xe08dc488bD6756323F8bf478869529D03db627ef": TransparentUpgradeableProxy - "0x0000000045d70ee8145135f08309fF5B1A63d43F": RedeemQueue - "0x000000008D14Ef3658805765107d9F12776f4138": SignatureRedeemQueue - - # RiskManager - "0x9885215ef8DB25C87466E73018061e532784D716": TransparentUpgradeableProxy - "0x00000000CC26BC741E75B181738Ac2B16156179b": RiskManager - - # ShareManager - "0xDA2a7aE07B6803feF9d95E47Ab83c8a5A09929F0": TransparentUpgradeableProxy - "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": TokenizedShareManager - "0x00000000e5F0cddA56447b2a29e2847A52c8725D": BasicShareManager - "0x00000000C534B8680e3aa7165DeDc3Ab8781f602": BurnableTokenizedShareManager - - # Subvault - "0xA64e324DFF04e3C0613ff0706867868C7b370a45": TransparentUpgradeableProxy - "0x00000000CA30010B8417f791250AE221FdaD5920": Subvault - - # Verifier - "0x9fBAF5AEB9F52bA57E1cC1D3050eac6d75Df8ae7": TransparentUpgradeableProxy - "0x000000007e86a96e279662108cc19bA4c32EdE3C": Verifier - - # Vault - "0xBBCD2aC50aF2EA12Cc9cb7B16dBDa85859BeB3da": TransparentUpgradeableProxy - "0x0000000070f44289ec5ea3E5972f058f75B29801": Vault - - # SwapModule - "0xC5a52E4bB718Dfe86938e5cB967362EdA1E62698": TransparentUpgradeableProxy - "0x00000000c324E2d11EcCB03A061F69B5FE123645": SwapModule - - "0x0000000009E9368ad21fc19DCE1cFcf9Af6dE339": BitmaskVerifier - - # ERC20Verifier - "0x711F6236e325634AA8c1F692b5312bfF3A8558D0": TransparentUpgradeableProxy - "0x00000000ACD80376E999Af8c424e5e33BD224A08": ERC20Verifier - - "0x0000000005a67199ABE0f9C995EAB9DaDfA31Ccd": VaultConfigurator - - # Hooks - "0x00000000176dD23550c3845746b2036E90DC5912": BasicRedeemHook - "0x0000000024ABbd08686Abb2987831dEa88eF1180": RedirectingDepositHook - - "0x000000007d2552AD746Af5c13f91B5e72f97c2B7": OracleHelper - - # MellowAccount - "0x870DB41df0905cc5a790f6582a3dA99A4A33F923": TransparentUpgradeableProxy - "0x00000000860913f37fab81ce8ce4E5BD1f664482": MellowAccountV1 - -rpc_url_env_var: ARBITRUM_RPC_URL -explorer_hostname: api.etherscan.io -explorer_token_env_var: ETHERSCAN_EXPLORER_TOKEN -explorer_chain_id: 42161 - -github_repo: - url: https://github.com/mellow-finance/flexible-vaults - commit: c9c71818f0a8bead183f9860db3b8bbceb7b8f37 - relative_root: "" - -dependencies: - lib/contracts: - url: https://github.com/cowprotocol/contracts - commit: c94c595a791681cf8ba7495117dcde397b932885 - relative_root: "" - lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts: - url: https://github.com/OpenZeppelin/openzeppelin-contracts - commit: e4f70216d759d8e6a64144a9e1f7bbeed78e7079 - relative_root: contracts - # version 5.3.0 - lib/openzeppelin-contracts-upgradeable/contracts: - url: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable - commit: 60b305a8f3ff0c7688f02ac470417b6bbf1c4d27 - relative_root: contracts - # version 5.3.0 - -bytecode_comparison: - constructor_calldata: - "0x00000000741292C88f9fF5050b07051C4f592EBf": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x0000000072BAfCeAff1AD0237Ea58f06cfc4467F": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Factory - "0xAfef40968b5304135677f0C89203948e1A145105": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x000000007e6b679B9196a1609e5Bc2405eDFd6Aa": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Consensus - "0xF429ba2a8437E7de85078CF7481E8Ad52df7E58c": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x00000000B2d2373aAF1C370cFE4e1Ee8BDE7C546": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # DepositQueue - "0x000000001CC8c3E40856E956db870095EF6C98bd": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SyncDepositQueue - "0x000000000Af33501e5BDAF9B481Ad2712a024727": "00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000afef40968b5304135677f0c89203948e1a14510500000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SignatureDepositQueue - "0x52d56c20B0C8d403888880d0A1610e5ed17addA8": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x00000000C18039E1F415fe07C33A316232238648": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # FeeManager - "0x727c295b5D99b15280Ca8736b6F97ABA6aEd0E88": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x000000009adE4dAE1f868775A3f087945983f062": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Oracle - "0xe08dc488bD6756323F8bf478869529D03db627ef": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x0000000045d70ee8145135f08309fF5B1A63d43F": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RedeemQueue - "0x000000008D14Ef3658805765107d9F12776f4138": "00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000afef40968b5304135677f0c89203948e1a14510500000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # SignatureRedeemQueue - "0x9885215ef8DB25C87466E73018061e532784D716": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x00000000CC26BC741E75B181738Ac2B16156179b": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # RiskManager - "0xDA2a7aE07B6803feF9d95E47Ab83c8a5A09929F0": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x00000000861e8B90B81f35C18cA14858Cc91d1Df": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # TokenizedShareManager - "0x00000000e5F0cddA56447b2a29e2847A52c8725D": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # BasicShareManager - "0x00000000C534B8680e3aa7165DeDc3Ab8781f602": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # BurnableTokenizedShareManager - "0xA64e324DFF04e3C0613ff0706867868C7b370a45": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x00000000CA30010B8417f791250AE221FdaD5920": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Subvault - "0x9fBAF5AEB9F52bA57E1cC1D3050eac6d75Df8ae7": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x000000007e86a96e279662108cc19bA4c32EdE3C": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Verifier - "0xBBCD2aC50aF2EA12Cc9cb7B16dBDa85859BeB3da": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x0000000070f44289ec5ea3E5972f058f75B29801": "00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f429ba2a8437e7de85078cf7481e8ad52df7e58c000000000000000000000000e08dc488bd6756323f8bf478869529d03db627ef000000000000000000000000a64e324dff04e3c0613ff0706867868c7b370a450000000000000000000000009fbaf5aeb9f52ba57e1cc1d3050eac6d75df8ae700000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # Vault - "0xC5a52E4bB718Dfe86938e5cB967362EdA1E62698": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x711F6236e325634AA8c1F692b5312bfF3A8558D0": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - "0x00000000ACD80376E999Af8c424e5e33BD224A08": "0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000064d656c6c6f770000000000000000000000000000000000000000000000000000" # ERC20Verifier - "0x0000000005a67199ABE0f9C995EAB9DaDfA31Ccd": "000000000000000000000000da2a7ae07b6803fef9d95e47ab83c8a5a09929f000000000000000000000000052d56c20b0c8d403888880d0a1610e5ed17adda80000000000000000000000009885215ef8db25c87466e73018061e532784d716000000000000000000000000727c295b5d99b15280ca8736b6f97aba6aed0e88000000000000000000000000bbcd2ac50af2ea12cc9cb7b16dbda85859beb3da" # VaultConfigurator - "0x870DB41df0905cc5a790f6582a3dA99A4A33F923": "0000000000000000000000000000000072bafceaff1ad0237ea58f06cfc4467f00000000000000000000000081698f87c6482bf1ce9bfcfc0f103c4a0adf0af000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064439fab9100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e98be1e5538fcbd716c506052eb1fd5d6fc495a300000000000000000000000000000000000000000000000000000000" # TransparentUpgradeableProxy - # SwapModule (0x00000000c324E2d11EcCB03A061F69B5FE123645) calldata not yet available From 7f679cb5bfefcfc1fecafd3d0a67d1cd18961651 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 20:51:55 +0100 Subject: [PATCH 33/35] feat: error when --contract filter matches nothing --- diffyscan/diffyscan.py | 11 +++++++++++ tests/test_contract_filter.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/diffyscan/diffyscan.py b/diffyscan/diffyscan.py index f5fca42..448a3ad 100644 --- a/diffyscan/diffyscan.py +++ b/diffyscan/diffyscan.py @@ -452,6 +452,7 @@ def process_config( # Statistics tracking source_stats = [] bytecode_stats = [] + matched_count = 0 try: if enable_binary_comparison: @@ -467,6 +468,7 @@ def process_config( for contract_address, contract_name in config["contracts"].items(): if filter_set and contract_address.lower() not in filter_set: continue + matched_count += 1 try: contract_code = get_contract_from_explorer( explorer_token, @@ -529,6 +531,7 @@ def process_config( "source_stats": source_stats, "bytecode_stats": bytecode_stats, "config_path": path, + "matched_count": matched_count, } @@ -763,6 +766,14 @@ def main() -> None: ) all_results.append(result) + # A contract filter that matches nothing across all configs is a usage error + if args.contract_filter and sum(r["matched_count"] for r in all_results) == 0: + logger.error( + "No contracts matched the --contract filter", + ", ".join(args.contract_filter), + ) + sys.exit(1) + execution_time = time.time() - START_TIME # Determine what comparisons were enabled (check first result) diff --git a/tests/test_contract_filter.py b/tests/test_contract_filter.py index 3c99c91..a05c464 100644 --- a/tests/test_contract_filter.py +++ b/tests/test_contract_filter.py @@ -51,11 +51,44 @@ def test_filter_is_case_insensitive(): assert "ContractA" in filtered.values() +def filter_matched_any(config_contracts, contract_filter): + """Reproduce the run-level check from main: did the filter match any contract?""" + if not contract_filter: + return True + return any( + apply_filter(contracts, contract_filter) for contracts in config_contracts + ) + + def test_filter_nonexistent_address_returns_empty(): filtered = apply_filter(CONTRACTS, ["0x0000000000000000000000000000000000000000"]) assert filtered == {} +def test_filter_matching_nothing_is_an_error(): + # A filter that matches no contract in any config is a usage error (exit non-zero). + assert ( + filter_matched_any([CONTRACTS], ["0x0000000000000000000000000000000000000000"]) + is False + ) + + +def test_filter_matching_in_any_config_is_ok(): + # Matching at least one contract in one of several configs is fine. + other = {"0xDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdDd": "ContractD"} + assert ( + filter_matched_any( + [other, CONTRACTS], ["0xAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa"] + ) + is True + ) + + +def test_no_filter_is_never_an_error(): + assert filter_matched_any([CONTRACTS], None) is True + assert filter_matched_any([CONTRACTS], []) is True + + def test_filter_mixed_case_multiple(): filtered = apply_filter( CONTRACTS, From 313597336c87e88d94fc929785b67799b7a35147 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 20:51:56 +0100 Subject: [PATCH 34/35] chore: align meta config env and gas settings --- .env.example | 2 +- config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml | 2 ++ config_samples/plasma/mainnet/meta/meta_core_config.yaml | 2 -- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index 9c4b3a9..74939bf 100644 --- a/.env.example +++ b/.env.example @@ -14,5 +14,5 @@ LOCAL_RPC_URL=http://127.0.0.1:8545 REMOTE_RPC_URL=https://eth.drpc.org ETHEREUM_RPC_URL=https://eth.drpc.org MANTLE_RPC_URL=https://rpc.mantle.xyz -ARBITRUM_RPC_URL=https://arb1.arbitrum.io/rpc +PLASMA_RPC_URL=https://rpc.plasma.to BASE_RPC_URL=https://base.drpc.org diff --git a/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml b/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml index 168f4ee..3693c71 100644 --- a/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml +++ b/config_samples/mantle/mainnet/meta/meta_usde_mantle_config.yaml @@ -44,6 +44,8 @@ explorer_hostname: api.etherscan.io explorer_token_env_var: ETHERSCAN_EXPLORER_TOKEN explorer_chain_id: 5000 +deployment_gas_limit: 30000000000 # Mantle has inflated gas costs + github_repo: url: https://github.com/mellow-finance/flexible-vaults commit: c9c71818f0a8bead183f9860db3b8bbceb7b8f37 diff --git a/config_samples/plasma/mainnet/meta/meta_core_config.yaml b/config_samples/plasma/mainnet/meta/meta_core_config.yaml index b3f5f75..d9888c7 100644 --- a/config_samples/plasma/mainnet/meta/meta_core_config.yaml +++ b/config_samples/plasma/mainnet/meta/meta_core_config.yaml @@ -1,6 +1,4 @@ # Core implementations and factories — Plasma deployment -# NOTE: contracts not yet verified on Etherscan v2 (chain ID 9745) -# contracts: # Factory From 6802c2f4e9160e32197c81d40dd5e674120b5955 Mon Sep 17 00:00:00 2001 From: Yuri Tkachenko Date: Tue, 2 Jun 2026 20:55:25 +0100 Subject: [PATCH 35/35] chore: remove --local-rpc option --- .claude/skills/debug-diff/SKILL.md | 2 +- .env.example | 1 - README.md | 8 -------- diffyscan/diffyscan.py | 18 +++--------------- 4 files changed, 4 insertions(+), 25 deletions(-) diff --git a/.claude/skills/debug-diff/SKILL.md b/.claude/skills/debug-diff/SKILL.md index 206b09a..b59a2b6 100644 --- a/.claude/skills/debug-diff/SKILL.md +++ b/.claude/skills/debug-diff/SKILL.md @@ -73,7 +73,7 @@ ls digest//diffs// | `"Contract name in config does not match with blockchain explorer ... !="` | Contract not verified on explorer — comment it out or verify it on the explorer first | | `"Failed to get calldata: Explorer metadata has empty constructor calldata for 0x..."` | Factory-created contract — Etherscan has no constructor args. Add `constructor_calldata` manually (extract via `getsourcecode` API `ConstructorArguments`, `debug_traceTransaction` trace, or cross-chain reuse) | | `"HTTP error: 404 ... contents/.sol"` | Missing or wrong `dependencies` entry — the explorer source uses a path prefix not covered by config dependencies. Add a mapping for that prefix | -| `"err: intrinsic gas too low"` | Chain gas model incompatible with `eth_call` deployment simulation (known on Mantle) — use `--skip-binary-comparison` | +| `"err: intrinsic gas too low"` | Chain gas model needs a higher deployment gas cap (known on Mantle) — set `deployment_gas_limit` in the config (e.g. `30000000000`) | | All proxy bytecode diffs say "immutable reference position" | Normal for TransparentUpgradeableProxy — ProxyAdmin address baked in as immutable. Use `--allow-bytecode-diff` or accept as expected | ### 4. Suggest a re-run command diff --git a/.env.example b/.env.example index 74939bf..50df99a 100644 --- a/.env.example +++ b/.env.example @@ -10,7 +10,6 @@ L1_EXPLORER_API_HOSTNAME= L2_EXPLORER_API_HOSTNAME= # RPC URLs (required for bytecode comparison) -LOCAL_RPC_URL=http://127.0.0.1:8545 REMOTE_RPC_URL=https://eth.drpc.org ETHEREUM_RPC_URL=https://eth.drpc.org MANTLE_RPC_URL=https://rpc.mantle.xyz diff --git a/README.md b/README.md index be05f86..6970e17 100644 --- a/README.md +++ b/README.md @@ -181,14 +181,6 @@ diffyscan /path/to/config.json -C 0xContractAddress diffyscan /path/to/config.json -C 0xFirst -C 0xSecond ``` -To use a local RPC node (e.g. anvil fork) for bytecode comparison, overriding the config's `rpc_url_env_var`: - -```bash -diffyscan /path/to/config.yaml -L -``` - -This reads `LOCAL_RPC_URL` from `.env` instead of the chain-specific RPC URL. - To skip binary comparison (which is enabled by default): ```bash diff --git a/diffyscan/diffyscan.py b/diffyscan/diffyscan.py index 448a3ad..48f60ab 100644 --- a/diffyscan/diffyscan.py +++ b/diffyscan/diffyscan.py @@ -357,13 +357,9 @@ def _load_explorer_token(config: dict) -> str: raise ValueError(error_msg) -def _setup_binary_comparison(config: dict, use_local_rpc: bool = False) -> str: +def _setup_binary_comparison(config: dict) -> str: """Load RPC URL and configure exception handling for bytecode comparison.""" - rpc_env_var = ( - "LOCAL_RPC_URL" - if use_local_rpc - else config.get("rpc_url_env_var", "REMOTE_RPC_URL") - ) + rpc_env_var = config.get("rpc_url_env_var", "REMOTE_RPC_URL") remote_rpc_url = load_env(rpc_env_var, masked=True, required=True) ExceptionHandler.initialize(config.get("fail_on_bytecode_comparison_error", True)) return remote_rpc_url @@ -423,7 +419,6 @@ def process_config( cache_github: bool, skip_user_input: bool = False, contract_filter: list[str] | None = None, - use_local_rpc: bool = False, ): """Process a config file and run source + bytecode comparisons.""" # Reset exception handler to default before each config @@ -440,7 +435,7 @@ def process_config( # Setup binary comparison if enabled remote_rpc_url = None if enable_binary_comparison: - remote_rpc_url = _setup_binary_comparison(config, use_local_rpc) + remote_rpc_url = _setup_binary_comparison(config) # Check if source comparison is enabled enable_source_comparison = config.get("source_comparison", True) @@ -611,12 +606,6 @@ def parse_arguments() -> argparse.Namespace: default=[], help="Only check specific contract address (0x...). Can be passed multiple times.", ) - parser.add_argument( - "--local-rpc", - "-L", - action="store_true", - help="Use LOCAL_RPC_URL env var for bytecode comparison, overriding config rpc_url_env_var.", - ) return parser.parse_args() @@ -762,7 +751,6 @@ def main() -> None: args.cache_github, args.yes, args.contract_filter, - args.local_rpc, ) all_results.append(result)