diff --git a/l1-contracts/contracts/bridgehub/Bridgehub.sol b/l1-contracts/contracts/bridgehub/Bridgehub.sol index 950b807f1..2427edf6c 100644 --- a/l1-contracts/contracts/bridgehub/Bridgehub.sol +++ b/l1-contracts/contracts/bridgehub/Bridgehub.sol @@ -9,7 +9,7 @@ import {EnumerableMap} from "@openzeppelin/contracts-v4/utils/structs/Enumerable import {Ownable2StepUpgradeable} from "@openzeppelin/contracts-upgradeable-v4/access/Ownable2StepUpgradeable.sol"; import {PausableUpgradeable} from "@openzeppelin/contracts-upgradeable-v4/security/PausableUpgradeable.sol"; -import {IBridgehub, L2TransactionRequestDirect, L2TransactionRequestTwoBridgesOuter, L2TransactionRequestTwoBridgesInner} from "./IBridgehub.sol"; +import {IBridgehub, L2TransactionRequestDirect, L2TransactionRequestTwoBridgesOuter, L2TransactionRequestTwoBridgesInner, BridgehubMintSTMAssetData, BridgehubBurnSTMAssetData} from "./IBridgehub.sol"; import {IL1AssetRouter} from "../bridge/interfaces/IL1AssetRouter.sol"; import {IL1BaseTokenAssetHandler} from "../bridge/interfaces/IL1BaseTokenAssetHandler.sol"; import {IStateTransitionManager} from "../state-transition/IStateTransitionManager.sol"; @@ -673,71 +673,87 @@ contract Bridgehub is IBridgehub, ReentrancyGuard, Ownable2StepUpgradeable, Paus ) external payable override onlyAssetRouter onlyL1 returns (bytes memory bridgehubMintData) { require(whitelistedSettlementLayers[_settlementChainId], "BH: SL not whitelisted"); - (uint256 _chainId, bytes memory _stmData, bytes memory _chainData) = abi.decode(_data, (uint256, bytes, bytes)); - require(_assetId == stmAssetIdFromChainId(_chainId), "BH: assetInfo 1"); - require(settlementLayer[_chainId] == block.chainid, "BH: not current SL"); - settlementLayer[_chainId] = _settlementChainId; + BridgehubBurnSTMAssetData memory bridgeData = abi.decode(_data, (BridgehubBurnSTMAssetData)); + require(_assetId == stmAssetIdFromChainId(bridgeData.chainId), "BH: assetInfo 1"); + require(settlementLayer[bridgeData.chainId] == block.chainid, "BH: not current SL"); + settlementLayer[bridgeData.chainId] = _settlementChainId; - address hyperchain = hyperchainMap.get(_chainId); + address hyperchain = hyperchainMap.get(bridgeData.chainId); require(hyperchain != address(0), "BH: hyperchain not registered"); require(_prevMsgSender == IZkSyncHyperchain(hyperchain).getAdmin(), "BH: incorrect sender"); - bytes memory stmMintData = IStateTransitionManager(stateTransitionManager[_chainId]).forwardedBridgeBurn( - _chainId, - _stmData - ); + bytes memory stmMintData = IStateTransitionManager(stateTransitionManager[bridgeData.chainId]) + .forwardedBridgeBurn(bridgeData.chainId, bridgeData.stmData); bytes memory chainMintData = IZkSyncHyperchain(hyperchain).forwardedBridgeBurn( hyperchainMap.get(_settlementChainId), _prevMsgSender, - _chainData + bridgeData.chainData ); - bridgehubMintData = abi.encode(_chainId, stmMintData, chainMintData); + BridgehubMintSTMAssetData memory bridgeMintStruct = BridgehubMintSTMAssetData({ + chainId: bridgeData.chainId, + stmData: stmMintData, + chainData: chainMintData + }); + bridgehubMintData = abi.encode(bridgeMintStruct); - emit MigrationStarted(_chainId, _assetId, _settlementChainId); + emit MigrationStarted(bridgeData.chainId, _assetId, _settlementChainId); } - /// @dev IL1AssetHandler interface, used to receive a chain on the settlement layer. - /// @param _assetId the assetId of the chain's STM - /// @param _bridgehubMintData the data for the mint function bridgeMint( uint256, // originChainId bytes32 _assetId, bytes calldata _bridgehubMintData ) external payable override onlyAssetRouter { - (uint256 _chainId, bytes memory _stmData, bytes memory _chainMintData) = abi.decode( - _bridgehubMintData, - (uint256, bytes, bytes) - ); + BridgehubMintSTMAssetData memory bridgeData = abi.decode(_bridgehubMintData, (BridgehubMintSTMAssetData)); + address stm = stmAssetIdToAddress[_assetId]; require(stm != address(0), "BH: assetInfo 2"); - require(settlementLayer[_chainId] != block.chainid, "BH: already current SL"); + require(settlementLayer[bridgeData.chainId] != block.chainid, "BH: already current SL"); - settlementLayer[_chainId] = block.chainid; - stateTransitionManager[_chainId] = stm; + settlementLayer[bridgeData.chainId] = block.chainid; + stateTransitionManager[bridgeData.chainId] = stm; address hyperchain; - if (hyperchainMap.contains(_chainId)) { - hyperchain = hyperchainMap.get(_chainId); + if (hyperchainMap.contains(bridgeData.chainId)) { + hyperchain = hyperchainMap.get(bridgeData.chainId); } else { - hyperchain = IStateTransitionManager(stm).forwardedBridgeMint(_chainId, _stmData); + hyperchain = IStateTransitionManager(stm).forwardedBridgeMint(bridgeData.chainId, bridgeData.stmData); } - messageRoot.addNewChainIfNeeded(_chainId); - _registerNewHyperchain(_chainId, hyperchain); - IZkSyncHyperchain(hyperchain).forwardedBridgeMint(_chainMintData); + messageRoot.addNewChainIfNeeded(bridgeData.chainId); + _registerNewHyperchain(bridgeData.chainId, hyperchain); + IZkSyncHyperchain(hyperchain).forwardedBridgeMint(bridgeData.chainData); - emit MigrationFinalized(_chainId, _assetId, hyperchain); + emit MigrationFinalized(bridgeData.chainId, _assetId, hyperchain); } /// @dev IL1AssetHandler interface, used to undo a failed migration of a chain. /// @param _chainId the chainId of the chain /// @param _assetId the assetId of the chain's STM - /// @param _data the data for the recovery + /// @param _data the data for the recovery. function bridgeRecoverFailedTransfer( uint256 _chainId, bytes32 _assetId, address _depositSender, bytes calldata _data - ) external payable override onlyAssetRouter onlyL1 {} + ) external payable override onlyAssetRouter onlyL1 { + BridgehubBurnSTMAssetData memory stmAssetData = abi.decode(_data, (BridgehubBurnSTMAssetData)); + + delete settlementLayer[_chainId]; + + IStateTransitionManager(stateTransitionManager[_chainId]).forwardedBridgeRecoverFailedTransfer({ + _chainId: _chainId, + _assetInfo: _assetId, + _depositSender: _depositSender, + _stmData: stmAssetData.stmData + }); + + IZkSyncHyperchain(getHyperchain(_chainId)).forwardedBridgeRecoverFailedTransfer({ + _chainId: _chainId, + _assetInfo: _assetId, + _prevMsgSender: _depositSender, + _chainData: stmAssetData.chainData + }); + } /*////////////////////////////////////////////////////////////// PAUSE diff --git a/l1-contracts/contracts/bridgehub/IBridgehub.sol b/l1-contracts/contracts/bridgehub/IBridgehub.sol index 914ba81bd..d41dbbc7e 100644 --- a/l1-contracts/contracts/bridgehub/IBridgehub.sol +++ b/l1-contracts/contracts/bridgehub/IBridgehub.sol @@ -40,6 +40,18 @@ struct L2TransactionRequestTwoBridgesInner { bytes32 txDataHash; } +struct BridgehubMintSTMAssetData { + uint256 chainId; + bytes stmData; + bytes chainData; +} + +struct BridgehubBurnSTMAssetData { + uint256 chainId; + bytes stmData; + bytes chainData; +} + /// @author Matter Labs /// @custom:security-contact security@matterlabs.dev interface IBridgehub is IL1AssetHandler { diff --git a/l1-contracts/contracts/state-transition/IStateTransitionManager.sol b/l1-contracts/contracts/state-transition/IStateTransitionManager.sol index 118fce3c7..9c2785259 100644 --- a/l1-contracts/contracts/state-transition/IStateTransitionManager.sol +++ b/l1-contracts/contracts/state-transition/IStateTransitionManager.sol @@ -165,10 +165,10 @@ interface IStateTransitionManager { function forwardedBridgeMint(uint256 _chainId, bytes calldata _data) external returns (address); - function bridgeClaimFailedBurn( + function forwardedBridgeRecoverFailedTransfer( uint256 _chainId, bytes32 _assetInfo, - address _prevMsgSender, - bytes calldata _data + address _depositSender, + bytes calldata _stmData ) external; } diff --git a/l1-contracts/contracts/state-transition/StateTransitionManager.sol b/l1-contracts/contracts/state-transition/StateTransitionManager.sol index c16ea9468..c42a5e298 100644 --- a/l1-contracts/contracts/state-transition/StateTransitionManager.sol +++ b/l1-contracts/contracts/state-transition/StateTransitionManager.sol @@ -501,16 +501,17 @@ contract StateTransitionManager is IStateTransitionManager, ReentrancyGuard, Own } /// @notice Called by the bridgehub during the failed migration of a chain. - /// @param _chainId the chainId of the chain - /// @param _assetInfo the assetInfo of the chain - /// @param _prevMsgSender the previous message sender - /// @param _data the data of the migration - function bridgeClaimFailedBurn( - uint256 _chainId, - bytes32 _assetInfo, - address _prevMsgSender, - bytes calldata _data + /// param _chainId the chainId of the chain + /// param _assetInfo the assetInfo of the chain + /// param _depositSender the address of that sent the deposit + /// param _stmData the data of the migration + function forwardedBridgeRecoverFailedTransfer( + uint256 /* _chainId */, + bytes32 /* _assetInfo */, + address /* _depositSender */, + bytes calldata /* _stmData */ ) external { - // todo + // Function is empty due to the fact that when calling `forwardedBridgeBurn` there are no + // state updates that occur. } } diff --git a/l1-contracts/contracts/state-transition/chain-deps/facets/Admin.sol b/l1-contracts/contracts/state-transition/chain-deps/facets/Admin.sol index 1a309964b..44c0ea487 100644 --- a/l1-contracts/contracts/state-transition/chain-deps/facets/Admin.sol +++ b/l1-contracts/contracts/state-transition/chain-deps/facets/Admin.sol @@ -249,14 +249,14 @@ contract AdminFacet is ZkSyncHyperchainBase, IAdmin { function forwardedBridgeBurn( address _settlementLayer, address _prevMsgSender, - bytes calldata + bytes calldata _data ) external payable override onlyBridgehub returns (bytes memory chainBridgeMintData) { require(s.settlementLayer == address(0), "Af: already migrated"); require(_prevMsgSender == s.admin, "Af: not chainAdmin"); - IStateTransitionManager stm = IStateTransitionManager(s.stateTransitionManager); + // As of now all we need in this function is the chainId so we encode it and pass it down in the _chainData field + uint256 protocolVersion = abi.decode(_data, (uint256)); uint256 currentProtocolVersion = s.protocolVersion; - uint256 protocolVersion = stm.protocolVersion(); require(currentProtocolVersion == protocolVersion, "STM: protocolVersion not up to date"); @@ -309,12 +309,26 @@ contract AdminFacet is ZkSyncHyperchainBase, IAdmin { } /// @inheritdoc IAdmin - function forwardedBridgeClaimFailedBurn( - uint256 _chainId, - bytes32 _assetInfo, - address _prevMsgSender, - bytes calldata _data - ) external payable override onlyBridgehub {} + /// @dev Note that this function does not check that the caller is the chain admin. + function forwardedBridgeRecoverFailedTransfer( + uint256 /* _chainId */, + bytes32 /* _assetInfo */, + address _depositSender, + bytes calldata _chainData + ) external payable override onlyBridgehub { + // As of now all we need in this function is the chainId so we encode it and pass it down in the _chainData field + uint256 protocolVersion = abi.decode(_chainData, (uint256)); + + require(s.settlementLayer != address(0), "Af: not migrated"); + // Sanity check that the _depositSender is the chain admin. + require(_depositSender == s.admin, "Af: not chainAdmin"); + + uint256 currentProtocolVersion = s.protocolVersion; + + require(currentProtocolVersion == protocolVersion, "STM: protocolVersion not up to date"); + + s.settlementLayer = address(0); + } /// @notice Returns the commitment for a chain. /// @dev Note, that this is a getter method helpful for debugging and should not be relied upon by clients. diff --git a/l1-contracts/contracts/state-transition/chain-interfaces/IAdmin.sol b/l1-contracts/contracts/state-transition/chain-interfaces/IAdmin.sol index 959dd7daa..332d31c1f 100644 --- a/l1-contracts/contracts/state-transition/chain-interfaces/IAdmin.sol +++ b/l1-contracts/contracts/state-transition/chain-interfaces/IAdmin.sol @@ -140,11 +140,11 @@ interface IAdmin is IZkSyncHyperchainBase { ) external payable returns (bytes memory _bridgeMintData); /// @dev Similar to IL1AssetHandler interface, used to claim failed chain transfers. - function forwardedBridgeClaimFailedBurn( + function forwardedBridgeRecoverFailedTransfer( uint256 _chainId, bytes32 _assetInfo, address _prevMsgSender, - bytes calldata _data + bytes calldata _chainData ) external payable; /// @dev Similar to IL1AssetHandler interface, used to receive chains. diff --git a/l1-contracts/deploy-scripts/Gateway.s.sol b/l1-contracts/deploy-scripts/Gateway.s.sol index 2398b48ab..51261b41c 100644 --- a/l1-contracts/deploy-scripts/Gateway.s.sol +++ b/l1-contracts/deploy-scripts/Gateway.s.sol @@ -8,7 +8,7 @@ import {Script, console2 as console} from "forge-std/Script.sol"; import {stdToml} from "forge-std/StdToml.sol"; import {Ownable} from "@openzeppelin/contracts-v4/access/Ownable.sol"; -import {IBridgehub} from "contracts/bridgehub/IBridgehub.sol"; +import {IBridgehub, BridgehubBurnSTMAssetData} from "contracts/bridgehub/IBridgehub.sol"; import {IZkSyncHyperchain} from "contracts/state-transition/chain-interfaces/IZkSyncHyperchain.sol"; // import {ValidatorTimelock} from "contracts/state-transition/ValidatorTimelock.sol"; // import {Governance} from "contracts/governance/Governance.sol"; @@ -154,8 +154,13 @@ contract GatewayScript is Script { bytes32 stmAssetId = bridgehub.stmAssetIdFromChainId(config.chainChainId); bytes memory diamondCutData = config.diamondCutData; // todo replace with config.zkDiamondCutData; bytes memory stmData = abi.encode(newAdmin, diamondCutData); - bytes memory chainData = abi.encode(address(1)); - bytes memory bridgehubData = abi.encode(config.chainChainId, stmData, chainData); + bytes memory chainData = abi.encode(chain.getProtocolVersion()); + BridgehubBurnSTMAssetData memory stmAssetData = BridgehubBurnSTMAssetData({ + chainId: config.chainChainId, + stmData: stmData, + chainData: chainData + }); + bytes memory bridgehubData = abi.encode(stmAssetData); bytes memory routerData = bytes.concat(bytes1(0x01), abi.encode(stmAssetId, bridgehubData)); vm.startBroadcast(chain.getAdmin()); diff --git a/l1-contracts/src.ts/deploy.ts b/l1-contracts/src.ts/deploy.ts index b485ce3d5..6f731c483 100644 --- a/l1-contracts/src.ts/deploy.ts +++ b/l1-contracts/src.ts/deploy.ts @@ -48,6 +48,7 @@ import { compileInitialCutHash, readBytecode, applyL1ToL2Alias, + BRIDGEHUB_STM_ASSET_DATA_ABI_STRING, // priorityTxMaxGasLimit, encodeNTVAssetId, ETH_ADDRESS_IN_CONTRACTS, @@ -1143,6 +1144,8 @@ export class Deployer { // Main function to move the current chain (that is hooked to l1), on top of the syncLayer chain. public async moveChainToGateway(gatewayChainId: string, gasPrice: BigNumberish) { + const protocolVersion = packSemver(...unpackStringSemVer(process.env.CONTRACTS_GENESIS_PROTOCOL_SEMANTIC_VERSION)); + const chainData = ethers.utils.defaultAbiCoder.encode(["uint256"], [protocolVersion]); const bridgehub = this.bridgehubContract(this.deployWallet); // Just some large gas limit that should always be enough const l2GasLimit = ethers.BigNumber.from(72_000_000); @@ -1156,10 +1159,9 @@ export class Deployer { const initialDiamondCut = new ethers.utils.AbiCoder().encode([DIAMOND_CUT_DATA_ABI_STRING], [diamondCutData]); const stmData = new ethers.utils.AbiCoder().encode(["uint256", "bytes"], [newAdmin, initialDiamondCut]); - const chainData = new ethers.utils.AbiCoder().encode(["uint256"], [ADDRESS_ONE]); // empty for now const bridgehubData = new ethers.utils.AbiCoder().encode( - ["uint256", "bytes", "bytes"], - [this.chainId, stmData, chainData] + [BRIDGEHUB_STM_ASSET_DATA_ABI_STRING], + [[this.chainId, stmData, chainData]] ); // console.log("bridgehubData", bridgehubData) diff --git a/l1-contracts/src.ts/utils.ts b/l1-contracts/src.ts/utils.ts index 5f931a330..3552a563d 100644 --- a/l1-contracts/src.ts/utils.ts +++ b/l1-contracts/src.ts/utils.ts @@ -38,8 +38,7 @@ export const DIAMOND_CUT_DATA_ABI_STRING = "tuple(tuple(address facet, uint8 action, bool isFreezable, bytes4[] selectors)[] facetCuts, address initAddress, bytes initCalldata)"; export const FORCE_DEPLOYMENT_ABI_STRING = "tuple(bytes32 bytecodeHash, address newAddress, bool callConstructor, uint256 value, bytes input)[]"; -export const HYPERCHAIN_COMMITMENT_ABI_STRING = - "tuple(uint256 totalBatchesExecuted, uint256 totalBatchesVerified, uint256 totalBatchesCommitted, bytes32 l2SystemContractsUpgradeTxHash, uint256 l2SystemContractsUpgradeBatchNumber, bytes32[] batchHashes, tuple(uint256 nextLeafIndex, uint256 startIndex, uint256 unprocessedIndex, bytes32[] sides) priorityTree)"; +export const BRIDGEHUB_STM_ASSET_DATA_ABI_STRING = "tuple(uint256 chainId, bytes stmData, bytes chainData)"; export function applyL1ToL2Alias(address: string): string { return ethers.utils.hexlify(ethers.BigNumber.from(address).add(L1_TO_L2_ALIAS_OFFSET).mod(ADDRESS_MODULO)); diff --git a/l1-contracts/test/foundry/integration/GatewayTests.t.sol b/l1-contracts/test/foundry/integration/GatewayTests.t.sol index 1a9159298..bfaa5755d 100644 --- a/l1-contracts/test/foundry/integration/GatewayTests.t.sol +++ b/l1-contracts/test/foundry/integration/GatewayTests.t.sol @@ -5,7 +5,7 @@ import {Test} from "forge-std/Test.sol"; import {Vm} from "forge-std/Vm.sol"; import "forge-std/console.sol"; -import {L2TransactionRequestDirect, L2TransactionRequestTwoBridgesOuter} from "contracts/bridgehub/IBridgehub.sol"; +import {L2TransactionRequestDirect, L2TransactionRequestTwoBridgesOuter, BridgehubMintSTMAssetData, BridgehubBurnSTMAssetData} from "contracts/bridgehub/IBridgehub.sol"; import {TestnetERC20Token} from "contracts/dev-contracts/TestnetERC20Token.sol"; import {MailboxFacet} from "contracts/state-transition/chain-deps/facets/Mailbox.sol"; import {GettersFacet} from "contracts/state-transition/chain-deps/facets/Getters.sol"; @@ -23,12 +23,14 @@ import {L2Message} from "contracts/common/Messaging.sol"; import {IBridgehub} from "contracts/bridgehub/IBridgehub.sol"; import {L2_BASE_TOKEN_SYSTEM_CONTRACT_ADDR} from "contracts/common/L2ContractAddresses.sol"; import {IL1ERC20Bridge} from "contracts/bridge/interfaces/IL1ERC20Bridge.sol"; +import {IL1AssetRouter} from "contracts/bridge/interfaces/IL1AssetRouter.sol"; import {Ownable} from "@openzeppelin/contracts-v4/access/Ownable.sol"; import {IZkSyncHyperchain} from "contracts/state-transition/chain-interfaces/IZkSyncHyperchain.sol"; import {IStateTransitionManager} from "contracts/state-transition/IStateTransitionManager.sol"; import {AdminFacet} from "contracts/state-transition/chain-deps/facets/Admin.sol"; import {AddressAliasHelper} from "contracts/vendor/AddressAliasHelper.sol"; +import {TxStatus} from "contracts/common/Messaging.sol"; contract GatewayTests is L1ContractDeployer, HyperchainDeployer, TokenDeployer, L2TxMocker, GatewayDeployer { uint256 constant TEST_USERS_COUNT = 10; @@ -164,6 +166,78 @@ contract GatewayTests is L1ContractDeployer, HyperchainDeployer, TokenDeployer, vm.stopBroadcast(); } + function test_recoverFromFailedChainMigration() public { + gatewayScript.registerGateway(); + gatewayScript.moveChainToGateway(); + + // Setup + IBridgehub bridgehub = IBridgehub(l1Script.getBridgehubProxyAddress()); + IStateTransitionManager stm = IStateTransitionManager(l1Script.getSTM()); + bytes32 assetId = bridgehub.stmAssetIdFromChainId(migratingChainId); + bytes memory transferData; + + { + IZkSyncHyperchain chain = IZkSyncHyperchain(bridgehub.getHyperchain(migratingChainId)); + bytes memory initialDiamondCut = l1Script.getInitialDiamondCutData(); + bytes memory chainData = abi.encode(chain.getProtocolVersion()); + bytes memory stmData = abi.encode(address(1), msg.sender, stm.protocolVersion(), initialDiamondCut); + BridgehubBurnSTMAssetData memory data = BridgehubBurnSTMAssetData({ + chainId: migratingChainId, + stmData: stmData, + chainData: chainData + }); + transferData = abi.encode(data); + } + + address chainAdmin = IZkSyncHyperchain(bridgehub.getHyperchain(migratingChainId)).getAdmin(); + IL1AssetRouter assetRouter = bridgehub.sharedBridge(); + bytes32 l2TxHash = keccak256("l2TxHash"); + uint256 l2BatchNumber = 5; + uint256 l2MessageIndex = 0; + uint16 l2TxNumberInBatch = 0; + bytes32[] memory merkleProof = new bytes32[](1); + bytes32 txDataHash = keccak256(bytes.concat(bytes1(0x01), abi.encode(chainAdmin, assetId, transferData))); + + // Mock Call for Msg Inclusion + vm.mockCall( + address(bridgehub), + abi.encodeWithSelector( + IBridgehub.proveL1ToL2TransactionStatus.selector, + migratingChainId, + l2TxHash, + l2BatchNumber, + l2MessageIndex, + l2TxNumberInBatch, + merkleProof, + TxStatus.Failure + ), + abi.encode(true) + ); + + // Set Deposit Happened + vm.startBroadcast(address(bridgeHub)); + assetRouter.bridgehubConfirmL2Transaction({ + _chainId: migratingChainId, + _txDataHash: txDataHash, + _txHash: l2TxHash + }); + vm.stopBroadcast(); + + vm.startBroadcast(); + assetRouter.bridgeRecoverFailedTransfer({ + _chainId: migratingChainId, + _depositSender: chainAdmin, + _assetId: assetId, + _assetData: transferData, + _l2TxHash: l2TxHash, + _l2BatchNumber: l2BatchNumber, + _l2MessageIndex: l2MessageIndex, + _l2TxNumberInBatch: l2TxNumberInBatch, + _merkleProof: merkleProof + }); + vm.stopBroadcast(); + } + function finishMoveChain() public { IBridgehub bridgehub = IBridgehub(l1Script.getBridgehubProxyAddress()); IStateTransitionManager stm = IStateTransitionManager(l1Script.getSTM()); @@ -173,7 +247,12 @@ contract GatewayTests is L1ContractDeployer, HyperchainDeployer, TokenDeployer, bytes memory initialDiamondCut = l1Script.getInitialDiamondCutData(); bytes memory chainData = abi.encode(AdminFacet(address(chain)).prepareChainCommitment()); bytes memory stmData = abi.encode(address(1), msg.sender, stm.protocolVersion(), initialDiamondCut); - bytes memory bridgehubMintData = abi.encode(mintChainId, stmData, chainData); + BridgehubMintSTMAssetData memory data = BridgehubMintSTMAssetData({ + chainId: mintChainId, + stmData: stmData, + chainData: chainData + }); + bytes memory bridgehubMintData = abi.encode(data); vm.startBroadcast(address(bridgehub.sharedBridge())); bridgehub.bridgeMint(gatewayChainId, assetId, bridgehubMintData); vm.stopBroadcast(); diff --git a/l1-contracts/test/foundry/integration/deploy-scripts/script-out/output-deploy-l1.toml b/l1-contracts/test/foundry/integration/deploy-scripts/script-out/output-deploy-l1.toml index e9d26848b..f81e096b5 100644 --- a/l1-contracts/test/foundry/integration/deploy-scripts/script-out/output-deploy-l1.toml +++ b/l1-contracts/test/foundry/integration/deploy-scripts/script-out/output-deploy-l1.toml @@ -2,13 +2,13 @@ create2_factory_addr = "0x4e59b44847b379578588920cA78FbF26c0B4956C" create2_factory_salt = "0x00000000000000000000000000000000000000000000000000000000000000ff" deployer_addr = "0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496" era_chain_id = 9 -force_deployments_data = "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002a044dab1170638e5acb1c036d7f2528bf6365021e89f5eb35fad0e98975382db5000000000000000000000000000000000000000000000000000000000000100020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000010e00000000000000000000000081aa7970c51812dc3a010c7d01b50e0d17dc8ad9d3de98fb9db900fd0eb69c4e082f0a9b60872c04e318308d2128ee8ac82d634900000000000000000000000000000000000000000000000000000000000100030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010e000000000000000000000000000000000000000000000000000000000000000900000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c800000000000000000000000000000000000000000000000000000000000000013927048defd1ff97c7b682da4c45b7f2f838b0ad9d56f6754033951c9e6f3e1800000000000000000000000000000000000000000000000000000000000100040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010e00000000000000000000000081aa7970c51812dc3a010c7d01b50e0d17dc8ad9349c400bc5cef9910dcd7cd1328960b14d2c095f0e5d26c14f4f8a467160578500000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c800000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000000000000000000000000000000000000000000000" +force_deployments_data = "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002a0bc59a5ff202d6a9b1ce2e00f9fda0f4e963deef77e8fc6952c887b780a04fb7400000000000000000000000000000000000000000000000000000000000100020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000010e00000000000000000000000081aa7970c51812dc3a010c7d01b50e0d17dc8ad9d3de98fb9db900fd0eb69c4e082f0a9b60872c04e318308d2128ee8ac82d634900000000000000000000000000000000000000000000000000000000000100030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010e000000000000000000000000000000000000000000000000000000000000000900000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c800000000000000000000000000000000000000000000000000000000000000013927048defd1ff97c7b682da4c45b7f2f838b0ad9d56f6754033951c9e6f3e1800000000000000000000000000000000000000000000000000000000000100040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010e00000000000000000000000081aa7970c51812dc3a010c7d01b50e0d17dc8ad9349c400bc5cef9910dcd7cd1328960b14d2c095f0e5d26c14f4f8a467160578500000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c800000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000000000000000000000000000000000000000000000" l1_chain_id = 31337 -multicall3_addr = "0x75ACdD102012453c342E06b01365a58d1108BbDB" +multicall3_addr = "0xA16c08D75103437F1cde2Bf27EFf7e37Be0d5f96" owner_address = "0x70997970C51812dc3A010C7d01b50e0d17dc79C8" [contracts_config] -diamond_cut_data = "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000007f722295ac20c28f6e955b20bd6916f1438d37ee0000000000000000000000000000000000000000000000000000000000000d6000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000009c00000000000000000000000000000000000000000000000000000000000000bc0000000000000000000000000ac53c895f55b6dfe255f594df843c1eef473036c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000130e18b681000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f000000000000000000000000000000000000000000000000000000001cc5d1030000000000000000000000000000000000000000000000000000000021f603d700000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000002878fe740000000000000000000000000000000000000000000000000000000041cf49bb000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000006223258e0000000000000000000000000000000000000000000000000000000064b554ad0000000000000000000000000000000000000000000000000000000064bf8d660000000000000000000000000000000000000000000000000000000082b5774900000000000000000000000000000000000000000000000000000000a37dc1d400000000000000000000000000000000000000000000000000000000a9f6d94100000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000e76db86500000000000000000000000000000000000000000000000000000000000000000000000000000000b80591023fc5e16f5a4f5976146b53ceed257469000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002d06d49e5b00000000000000000000000000000000000000000000000000000000086a56f8000000000000000000000000000000000000000000000000000000000ec6b0b700000000000000000000000000000000000000000000000000000000fe26699e0000000000000000000000000000000000000000000000000000000018e3a941000000000000000000000000000000000000000000000000000000001de72e340000000000000000000000000000000000000000000000000000000029b98c670000000000000000000000000000000000000000000000000000000033ce93fe000000000000000000000000000000000000000000000000000000003408e470000000000000000000000000000000000000000000000000000000003591c1a000000000000000000000000000000000000000000000000000000000396073820000000000000000000000000000000000000000000000000000000039d7d4aa0000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000052ef6b2c000000000000000000000000000000000000000000000000000000005518c73b000000000000000000000000000000000000000000000000000000005a59033500000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000006a27e8b5000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000074f4d30d0000000000000000000000000000000000000000000000000000000079823c9a000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000007b30c8da00000000000000000000000000000000000000000000000000000000960dcf240000000000000000000000000000000000000000000000000000000098acd7a6000000000000000000000000000000000000000000000000000000009cd939e4000000000000000000000000000000000000000000000000000000009d1b5a8100000000000000000000000000000000000000000000000000000000a1954fc500000000000000000000000000000000000000000000000000000000adfca15e00000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000b22dd78e00000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000cdffacc600000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000e5355c7500000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000f5c1182c00000000000000000000000000000000000000000000000000000000facd743b00000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000000000000000000000000000202e4967de0c9ade42e128aba6f540b42ad07cf6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b042901c70000000000000000000000000000000000000000000000000000000012f43dab0000000000000000000000000000000000000000000000000000000013f3756e00000000000000000000000000000000000000000000000000000000eb67241900000000000000000000000000000000000000000000000000000000263b7f8e000000000000000000000000000000000000000000000000000000006c0960f9000000000000000000000000000000000000000000000000000000007efda2ae00000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000dc8cc04600000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000e717bab700000000000000000000000000000000000000000000000000000000000000000000000000000000a5593addd22cf311a4d2bbb73cce2e920edbebba000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000400a22e22000000000000000000000000000000000000000000000000000000000f23da4300000000000000000000000000000000000000000000000000000000c37533bb000000000000000000000000000000000000000000000000000000006edd4f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000a3a0db4be1c102227fc9037a82af66f8dc8fb41f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c4b400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000001d4c00000000000000000000000000000000000000000000000000000000004c4b40000000000000000000000000000000000000000000000000000000000000182b8000000000000000000000000000000000000000000000000000000000ee6b280000000000000000000000000a4cb26d6933d2c3e76718d30de8547bcdf8dd241" +diamond_cut_data = "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000020975eebf38b4d893eae1556ac7372fc7435b5050000000000000000000000000000000000000000000000000000000000000d6000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000009c00000000000000000000000000000000000000000000000000000000000000bc000000000000000000000000092cf215a8374aca867648c5ab7b6dbd273ac630b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000130e18b681000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f000000000000000000000000000000000000000000000000000000001cc5d1030000000000000000000000000000000000000000000000000000000021f603d700000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000002878fe740000000000000000000000000000000000000000000000000000000041cf49bb000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000006223258e0000000000000000000000000000000000000000000000000000000064b554ad0000000000000000000000000000000000000000000000000000000064bf8d660000000000000000000000000000000000000000000000000000000082b5774900000000000000000000000000000000000000000000000000000000a9f6d94100000000000000000000000000000000000000000000000000000000b784610700000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000e76db86500000000000000000000000000000000000000000000000000000000000000000000000000000000f48946296df791b85ead742b0945a7b4f9659302000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002d06d49e5b00000000000000000000000000000000000000000000000000000000086a56f8000000000000000000000000000000000000000000000000000000000ec6b0b700000000000000000000000000000000000000000000000000000000fe26699e0000000000000000000000000000000000000000000000000000000018e3a941000000000000000000000000000000000000000000000000000000001de72e340000000000000000000000000000000000000000000000000000000029b98c670000000000000000000000000000000000000000000000000000000033ce93fe000000000000000000000000000000000000000000000000000000003408e470000000000000000000000000000000000000000000000000000000003591c1a000000000000000000000000000000000000000000000000000000000396073820000000000000000000000000000000000000000000000000000000039d7d4aa0000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000052ef6b2c000000000000000000000000000000000000000000000000000000005518c73b000000000000000000000000000000000000000000000000000000005a59033500000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000006a27e8b5000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000074f4d30d0000000000000000000000000000000000000000000000000000000079823c9a000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000007b30c8da00000000000000000000000000000000000000000000000000000000960dcf240000000000000000000000000000000000000000000000000000000098acd7a6000000000000000000000000000000000000000000000000000000009cd939e4000000000000000000000000000000000000000000000000000000009d1b5a8100000000000000000000000000000000000000000000000000000000a1954fc500000000000000000000000000000000000000000000000000000000adfca15e00000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000b22dd78e00000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000cdffacc600000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000e5355c7500000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000f5c1182c00000000000000000000000000000000000000000000000000000000facd743b00000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000000000000000000000000000e354c85b01b7de2ded968f4959484fe51da46c51000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b042901c70000000000000000000000000000000000000000000000000000000012f43dab0000000000000000000000000000000000000000000000000000000013f3756e00000000000000000000000000000000000000000000000000000000eb67241900000000000000000000000000000000000000000000000000000000263b7f8e000000000000000000000000000000000000000000000000000000006c0960f9000000000000000000000000000000000000000000000000000000007efda2ae00000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000dc8cc04600000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000e717bab700000000000000000000000000000000000000000000000000000000000000000000000000000000ba52c2746ce35de8b8a2ef92e5a0cc1048fb43cd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000400a22e22000000000000000000000000000000000000000000000000000000000f23da4300000000000000000000000000000000000000000000000000000000c37533bb000000000000000000000000000000000000000000000000000000006edd4f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000bd2803bf3ad46adead5d1d5c883b2cbc394eb396000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c4b400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000001d4c00000000000000000000000000000000000000000000000000000000004c4b40000000000000000000000000000000000000000000000000000000000000182b8000000000000000000000000000000000000000000000000000000000ee6b280000000000000000000000000a4cb26d6933d2c3e76718d30de8547bcdf8dd241" diamond_init_batch_overhead_l1_gas = 1000000 diamond_init_max_l2_gas_per_batch = 80000000 diamond_init_max_pubdata_per_batch = 120000 @@ -23,34 +23,34 @@ recursion_node_level_vk_hash = "0x0000000000000000000000000000000000000000000000 [deployed_addresses] blob_versioned_hash_retriever_addr = "0xA4cB26d6933D2c3E76718D30de8547bCDF8dD241" -governance_addr = "0xd5Fb39C4d0167d6C6D384d7e8962423a8A9BC9F4" -native_token_vault_addr = "0xfdc34403Ced925014265b405dea09e2d544F14e4" +governance_addr = "0x5ED60563e4ea8aD522DaC519Bd50D8ef491f6a9B" +native_token_vault_addr = "0xC3682AF58CC5F86A5Ccc4f8a98baE40169aa0C59" transparent_proxy_admin_addr = "0xD718d5A27a29FF1cD22403426084bA0d479869a0" -validator_timelock_addr = "0x44ce8b607943e2C347A7428B6629224AC69c694a" +validator_timelock_addr = "0xcf55a79136cfd934DE34473CDA109ADCFe4EE7dC" [deployed_addresses.bridgehub] -bridgehub_implementation_addr = "0xCbB1C57b5654539da50564891e7138Eba5C4bD25" -bridgehub_proxy_addr = "0x68Ec9f040eac6313825431C961badb4B60F3f47A" -message_root_implementation_addr = "0x2500F6900B10A3e28cEF8CDD60E1572fEBA9EFDC" -message_root_proxy_addr = "0xECeb557d7924f309C54c0A9965626Dd29ed96190" -stm_deployment_tracker_implementation_addr = "0xcD26f9140ce4B97CB3f3913F7A1A4f67493152C0" -stm_deployment_tracker_proxy_addr = "0x912557feB2272b56493bdA09917F79177dA6999c" +bridgehub_implementation_addr = "0x7A8C660e8581b601d899a25F0B2aAc26F3466751" +bridgehub_proxy_addr = "0x79f5bf4dabA9596F64d344d475d06f8781bC6c79" +message_root_implementation_addr = "0x4e072A3F1E3Abf44a42b8bC0fb6656F472bf7014" +message_root_proxy_addr = "0x505c23F0decBaFB1507c1FC2B590D149FDF45092" +stm_deployment_tracker_implementation_addr = "0xA8c661B86f4ca8011eD3528c7b45A44E54cFB3C2" +stm_deployment_tracker_proxy_addr = "0xe95354DDaE439580D0c2bB4877AA67b3b34cbd6a" [deployed_addresses.bridges] -erc20_bridge_implementation_addr = "0x234B7083590CEFB84D66F8FB34654311C04e3011" -erc20_bridge_proxy_addr = "0xD346E71659731bC8a1174d851887351E94Ea4bC5" -shared_bridge_implementation_addr = "0xA5B59647B78250F70ee28F4FA9e046b61dF9d192" -shared_bridge_proxy_addr = "0x254fd9fee79364c168F46fc83DD5B2D7b875d43e" +erc20_bridge_implementation_addr = "0xd2C471c66a8dE57e1D8f69E63F8C08b2a6042cB3" +erc20_bridge_proxy_addr = "0x27155C06862e0394dBF6feB738bf351C4b14571e" +shared_bridge_implementation_addr = "0x40ce021Ac45fE0f9E87c76d5fDF10141E61B7779" +shared_bridge_proxy_addr = "0xdd89ac0745987C2a568fAe443fdf4fe72a15f6C7" [deployed_addresses.state_transition] -admin_facet_addr = "0xac53c895F55b6DfE255F594Df843c1Eef473036C" -default_upgrade_addr = "0x4922A93BFb96BD099C271c0E44B978D13114C54F" -diamond_init_addr = "0x7f722295AC20c28F6e955b20Bd6916F1438D37EE" +admin_facet_addr = "0x92cF215A8374ACa867648c5ab7B6dbD273ac630b" +default_upgrade_addr = "0x69fa08Db88Ee2265501B0F135D2ba6EEA6aA018C" +diamond_init_addr = "0x20975EEbf38B4d893eae1556aC7372fC7435b505" diamond_proxy_addr = "0x0000000000000000000000000000000000000000" -executor_facet_addr = "0xA5593adDD22CF311a4d2Bbb73cCE2E920eDBebBa" -genesis_upgrade_addr = "0xD82BF872eFeCD50bffc43e4878A0F0ba6F9D55b6" -getters_facet_addr = "0xB80591023Fc5e16f5A4F5976146b53ceEd257469" -mailbox_facet_addr = "0x202E4967de0c9ade42E128aBA6F540b42Ad07cF6" -state_transition_implementation_addr = "0xe6c92418bF6e1B444dC3599cAA12b307cEf519af" -state_transition_proxy_addr = "0xD770F342986dd31fb0D35a23eD904c08646d6990" -verifier_addr = "0xa3a0Db4Be1c102227Fc9037A82aF66F8Dc8fb41F" +executor_facet_addr = "0xBa52c2746ce35de8B8A2Ef92e5A0Cc1048FB43CD" +genesis_upgrade_addr = "0x4C48D458bFb60ac226ce0708FEd8cA9c0215EC7C" +getters_facet_addr = "0xF48946296dF791B85Ead742b0945a7b4f9659302" +mailbox_facet_addr = "0xe354c85b01B7DE2dEd968f4959484Fe51da46C51" +state_transition_implementation_addr = "0xcFef01D82405C0b90B2bF5C4F431870145bAbf19" +state_transition_proxy_addr = "0x43194d1BF637f4113b93660F4132d9d15FfA2f71" +verifier_addr = "0xbD2803bF3aD46AdeAD5D1D5c883b2CBc394eB396"