@kleros/vea-contracts
Version:
Smart contracts for Vea
368 lines (367 loc) • 50.7 kB
JSON
{
"address": "0xbD6c557295cBDd57e0efC408b20096f3fe55C8a6",
"abi": [
{
"inputs": [
{
"internalType": "contract IBridge",
"name": "_bridge",
"type": "address"
},
{
"internalType": "contract IAMB",
"name": "_amb",
"type": "address"
},
{
"internalType": "address",
"name": "_veaInboxArbToGnosis",
"type": "address"
},
{
"internalType": "address",
"name": "_veaOutboxArbToGnosis",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "_epoch",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "_ticketID",
"type": "bytes32"
}
],
"name": "Routed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "_requestedSequencerDelayLimit",
"type": "uint256"
}
],
"name": "SequencerDelayLimitDecreaseRequested",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bytes32",
"name": "_ticketID",
"type": "bytes32"
}
],
"name": "SequencerDelayLimitSent",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "_newSequencerDelayLimit",
"type": "uint256"
}
],
"name": "SequencerDelayLimitUpdated",
"type": "event"
},
{
"inputs": [],
"name": "amb",
"outputs": [
{
"internalType": "contract IAMB",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "bridge",
"outputs": [
{
"internalType": "contract IBridge",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "executeSequencerDelayLimitDecreaseRequest",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_epoch",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "_stateroot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "_gasLimit",
"type": "uint256"
},
{
"components": [
{
"internalType": "bytes32",
"name": "stateRoot",
"type": "bytes32"
},
{
"internalType": "address",
"name": "claimer",
"type": "address"
},
{
"internalType": "uint32",
"name": "timestampClaimed",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "timestampVerification",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "blocknumberVerification",
"type": "uint32"
},
{
"internalType": "enum Party",
"name": "honest",
"type": "uint8"
},
{
"internalType": "address",
"name": "challenger",
"type": "address"
}
],
"internalType": "struct Claim",
"name": "_claim",
"type": "tuple"
}
],
"name": "route",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "sequencerDelayLimit",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "sequencerDelayLimitDecreaseRequest",
"outputs": [
{
"internalType": "uint256",
"name": "requestedSequencerLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "timestamp",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "updateSequencerDelayLimit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "veaInboxArbToGnosis",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "veaOutboxArbToGnosis",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"transactionHash": "0x141f23085283f2c63c2de9664722dbd9360ddbd1bb9a0a0ac0d2c77f22696e85",
"receipt": {
"to": null,
"from": "0xFa00D29d378EDC57AA1006946F0fc6230a5E3288",
"contractAddress": "0xbD6c557295cBDd57e0efC408b20096f3fe55C8a6",
"transactionIndex": 205,
"gasUsed": "861074",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"blockHash": "0x9b439f9387d0fbc03dd66e001d2e8b4306df67298015455b3311ccb2f2a6605d",
"transactionHash": "0x141f23085283f2c63c2de9664722dbd9360ddbd1bb9a0a0ac0d2c77f22696e85",
"logs": [],
"blockNumber": 7825242,
"cumulativeGasUsed": "28522039",
"status": 1,
"byzantium": true
},
"args": [
"0x38f918D0E9F1b721EDaA41302E399fa1B79333a9",
"0x99Ca51a3534785ED619f46A79C7Ad65Fa8d85e7a",
"0xF6286b9C6c7F1B33Ea976FA43434027c7b8421A7",
"0xE24B2838962207F585F4fa5C5bE3e1AcA43a1a1B"
],
"numDeployments": 2,
"solcInputHash": "c9b5f40be4cc59cdaa11ec8b822d1bfe",
"metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IBridge\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"contract IAMB\",\"name\":\"_amb\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_veaInboxArbToGnosis\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_veaOutboxArbToGnosis\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_ticketID\",\"type\":\"bytes32\"}],\"name\":\"Routed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_requestedSequencerDelayLimit\",\"type\":\"uint256\"}],\"name\":\"SequencerDelayLimitDecreaseRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_ticketID\",\"type\":\"bytes32\"}],\"name\":\"SequencerDelayLimitSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newSequencerDelayLimit\",\"type\":\"uint256\"}],\"name\":\"SequencerDelayLimitUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"amb\",\"outputs\":[{\"internalType\":\"contract IAMB\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contract IBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeSequencerDelayLimitDecreaseRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_stateroot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"route\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerDelayLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerDelayLimitDecreaseRequest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"requestedSequencerLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateSequencerDelayLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"veaInboxArbToGnosis\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"veaOutboxArbToGnosis\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Router from Arbitrum to Gnosis Chain. Note: This contract is deployed on Ethereum.\",\"events\":{\"Routed(uint256,bytes32)\":{\"details\":\"Event emitted when a message is relayed to another Safe Bridge.\",\"params\":{\"_epoch\":\"The epoch of the batch requested to send.\",\"_ticketID\":\"The unique identifier provided by the underlying canonical bridge.\"}},\"SequencerDelayLimitDecreaseRequested(uint256)\":{\"details\":\"This event indicates that a request to decrease the sequencer limit has been made.\",\"params\":{\"_requestedSequencerDelayLimit\":\"The new sequencer limit requested.\"}},\"SequencerDelayLimitSent(bytes32)\":{\"details\":\"This event indicates a cross-chain message was sent to inform the veaOutbox of the sequencer limit value\",\"params\":{\"_ticketID\":\"The ticketID from the AMB of the cross-chain message.\"}},\"SequencerDelayLimitUpdated(uint256)\":{\"details\":\"This event indicates the sequencer limit updated.\",\"params\":{\"_newSequencerDelayLimit\":\"The new sequencer delay limit.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"_amb\":\"The address of the AMB contract on Ethereum.\",\"_bridge\":\"The address of the arbitrum bridge contract on Ethereum.\",\"_veaInboxArbToGnosis\":\"The vea inbox on Arbitrum.\",\"_veaOutboxArbToGnosis\":\"The vea outbox on Gnosis Chain.\"}},\"executeSequencerDelayLimitDecreaseRequest()\":{\"details\":\"execute sequencerDelayLimitDecreaseRequest\"},\"route(uint256,bytes32,uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Resolves any challenge of the optimistic claim for '_epoch'.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch to verify.\",\"_gasLimit\":\"The true batch gas limit for the epoch.\",\"_stateroot\":\"The true batch merkle root for the epoch.\"}},\"updateSequencerDelayLimit()\":{\"details\":\"Update the sequencerDelayLimit. If decreasing, a delayed request is created for later execution.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"route(uint256,bytes32,uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"notice\":\"Note: Access restricted to arbitrum canonical bridge.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitrumToGnosis/RouterArbToGnosis.sol\":\"RouterArbToGnosis\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src/arbitrumToGnosis/RouterArbToGnosis.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@shotaronowhere, @jaybuidl]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"../canonical/gnosis-chain/IAMB.sol\\\";\\nimport \\\"../canonical/arbitrum/IBridge.sol\\\";\\nimport \\\"../canonical/arbitrum/IOutbox.sol\\\";\\nimport \\\"../canonical/arbitrum/ISequencerInbox.sol\\\";\\nimport \\\"../interfaces/routers/IRouterToGnosis.sol\\\";\\nimport \\\"../interfaces/outboxes/IVeaOutboxOnL1.sol\\\";\\nimport \\\"../interfaces/updaters/ISequencerDelayUpdatable.sol\\\";\\n\\n/// @dev Router from Arbitrum to Gnosis Chain.\\n/// Note: This contract is deployed on Ethereum.\\ncontract RouterArbToGnosis is IRouterToGnosis {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n IBridge public immutable bridge; // The address of the Arbitrum bridge contract.\\n IAMB public immutable amb; // The address of the AMB contract on Ethereum.\\n address public immutable veaInboxArbToGnosis; // The address of the veaInbox on Arbitrum.\\n address public immutable veaOutboxArbToGnosis; // The address of the veaOutbox on Gnosis Chain.\\n\\n uint256 public sequencerDelayLimit; // This is MaxTimeVariation.delaySeconds from the arbitrum sequencer inbox, it is the maximum seconds the sequencer can backdate L2 txns relative to the L1 clock.\\n SequencerLimitDecreaseRequest public sequencerDelayLimitDecreaseRequest; // Decreasing the sequencerDelayLimit requires a delay to avoid griefing by sequencer, so we keep track of the request here.\\n\\n struct SequencerLimitDecreaseRequest {\\n uint256 requestedSequencerLimit;\\n uint256 timestamp;\\n }\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Event emitted when a message is relayed to another Safe Bridge.\\n /// @param _epoch The epoch of the batch requested to send.\\n /// @param _ticketID The unique identifier provided by the underlying canonical bridge.\\n event Routed(uint256 indexed _epoch, bytes32 _ticketID);\\n\\n /// @dev This event indicates a cross-chain message was sent to inform the veaOutbox of the sequencer limit value\\n /// @param _ticketID The ticketID from the AMB of the cross-chain message.\\n event SequencerDelayLimitSent(bytes32 _ticketID);\\n\\n /// @dev This event indicates the sequencer limit updated.\\n /// @param _newSequencerDelayLimit The new sequencer delay limit.\\n event SequencerDelayLimitUpdated(uint256 _newSequencerDelayLimit);\\n\\n /// @dev This event indicates that a request to decrease the sequencer limit has been made.\\n /// @param _requestedSequencerDelayLimit The new sequencer limit requested.\\n event SequencerDelayLimitDecreaseRequested(uint256 _requestedSequencerDelayLimit);\\n\\n /// @dev Constructor.\\n /// @param _bridge The address of the arbitrum bridge contract on Ethereum.\\n /// @param _amb The address of the AMB contract on Ethereum.\\n /// @param _veaInboxArbToGnosis The vea inbox on Arbitrum.\\n /// @param _veaOutboxArbToGnosis The vea outbox on Gnosis Chain.\\n constructor(IBridge _bridge, IAMB _amb, address _veaInboxArbToGnosis, address _veaOutboxArbToGnosis) {\\n bridge = _bridge;\\n amb = _amb;\\n veaInboxArbToGnosis = _veaInboxArbToGnosis;\\n veaOutboxArbToGnosis = _veaOutboxArbToGnosis;\\n (, , sequencerDelayLimit, ) = ISequencerInbox(bridge.sequencerInbox()).maxTimeVariation();\\n }\\n\\n // ************************************* //\\n // * Parameter Updates * //\\n // ************************************* //\\n\\n /// @dev Update the sequencerDelayLimit. If decreasing, a delayed request is created for later execution.\\n function updateSequencerDelayLimit() public {\\n // the maximum asynchronous lag between the L2 and L1 clocks\\n (, , uint256 newSequencerDelayLimit, ) = ISequencerInbox(bridge.sequencerInbox()).maxTimeVariation();\\n\\n if (newSequencerDelayLimit > sequencerDelayLimit) {\\n // For sequencerDelayLimit / epochPeriod > timeoutEpochs, claims cannot be verified by the timeout period and the bridge will shutdown.\\n sequencerDelayLimit = newSequencerDelayLimit;\\n sendSequencerDelayLimit();\\n emit SequencerDelayLimitUpdated(newSequencerDelayLimit);\\n } else if (newSequencerDelayLimit < sequencerDelayLimit) {\\n require(\\n sequencerDelayLimitDecreaseRequest.timestamp == 0,\\n \\\"Sequencer limit decrease request already pending.\\\"\\n );\\n\\n sequencerDelayLimitDecreaseRequest = SequencerLimitDecreaseRequest({\\n requestedSequencerLimit: newSequencerDelayLimit,\\n timestamp: block.timestamp\\n });\\n emit SequencerDelayLimitDecreaseRequested(newSequencerDelayLimit);\\n }\\n }\\n\\n /// @dev execute sequencerDelayLimitDecreaseRequest\\n function executeSequencerDelayLimitDecreaseRequest() external {\\n require(sequencerDelayLimitDecreaseRequest.timestamp != 0, \\\"No pending sequencer limit decrease request.\\\");\\n require(\\n block.timestamp > sequencerDelayLimitDecreaseRequest.timestamp + sequencerDelayLimit,\\n \\\"Sequencer limit decrease request is still pending.\\\"\\n );\\n\\n uint256 requestedSequencerDelayLimit = sequencerDelayLimitDecreaseRequest.requestedSequencerLimit;\\n delete sequencerDelayLimitDecreaseRequest;\\n\\n (, , uint256 currentSequencerDelayLimit, ) = ISequencerInbox(bridge.sequencerInbox()).maxTimeVariation();\\n\\n // check the request is still consistent with the arbitrum bridge\\n if (currentSequencerDelayLimit == requestedSequencerDelayLimit) {\\n sequencerDelayLimit = requestedSequencerDelayLimit;\\n sendSequencerDelayLimit();\\n emit SequencerDelayLimitUpdated(requestedSequencerDelayLimit);\\n }\\n }\\n\\n /// @dev Send the sequencer delay limit.\\n function sendSequencerDelayLimit() internal {\\n bytes memory data = abi.encodeCall(\\n ISequencerDelayUpdatable.updateSequencerDelayLimit,\\n (sequencerDelayLimit, block.timestamp)\\n );\\n // Note: using maxGasPerTx here means the relaying txn on Gnosis will need to pass that (large) amount of gas, though almost all will be unused and refunded. This is preferred over hardcoding a gas limit.\\n bytes32 ticketID = amb.requireToPassMessage(veaOutboxArbToGnosis, data, amb.maxGasPerTx());\\n emit SequencerDelayLimitSent(ticketID);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// Note: Access restricted to arbitrum canonical bridge.\\n /// @dev Resolves any challenge of the optimistic claim for '_epoch'.\\n /// @param _epoch The epoch to verify.\\n /// @param _stateroot The true batch merkle root for the epoch.\\n /// @param _gasLimit The true batch gas limit for the epoch.\\n /// @param _claim The claim associated with the epoch.\\n function route(uint256 _epoch, bytes32 _stateroot, uint256 _gasLimit, Claim calldata _claim) external {\\n // Arbitrum -> Ethereum message sender authentication\\n // docs: https://developer.arbitrum.io/arbos/l2-to-l1-messaging/\\n // example: https://github.com/OffchainLabs/arbitrum-tutorials/blob/2c1b7d2db8f36efa496e35b561864c0f94123a5f/packages/greeter/contracts/ethereum/GreeterL1.sol#L50\\n // example: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/dfef6a68ee18dbd2e1f5a099061a3b8a0e404485/contracts/crosschain/arbitrum/LibArbitrumL1.sol#L34\\n // note: we use the bridge address as a source of truth for the activeOutbox address\\n\\n require(msg.sender == address(bridge), \\\"Not from bridge.\\\");\\n require(IOutbox(bridge.activeOutbox()).l2ToL1Sender() == veaInboxArbToGnosis, \\\"veaInbox only.\\\");\\n\\n // Ethereum -> Gnosis message passing with the AMB, the canonical Ethereum <-> Gnosis bridge.\\n // https://docs.tokenbridge.net/amb-bridge/development-of-a-cross-chain-application/how-to-develop-xchain-apps-by-amb#receive-a-method-call-from-the-amb-bridge\\n\\n bytes memory data = abi.encodeCall(IVeaOutboxOnL1.resolveDisputedClaim, (_epoch, _stateroot, _claim));\\n\\n uint256 maxGasPerTx = amb.maxGasPerTx();\\n uint256 gasLimitCapped = _gasLimit > maxGasPerTx ? maxGasPerTx : _gasLimit;\\n\\n bytes32 ticketID = amb.requireToPassMessage(veaOutboxArbToGnosis, data, gasLimitCapped);\\n emit Routed(_epoch, ticketID);\\n }\\n}\\n\",\"keccak256\":\"0x3932a80a80038c13f48f487c2bb0b18884df1af22656addd6a0d0362e146420a\",\"license\":\"MIT\"},\"src/canonical/arbitrum/IBridge.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\n// https://github.com/OffchainLabs/nitro-contracts/blob/08ac127e966fa87a4d5ba3d23cd3132b57701132/src/bridge/IBridge.sol\\n// proxy: https://etherscan.io/address/0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a\\n// implementation: https://etherscan.io/address/0x1066cecc8880948fe55e427e94f1ff221d626591#code\\n// interface is pruned for relevant function stubs\\n\\npragma solidity 0.8.24;\\n\\ninterface IBridge {\\n function activeOutbox() external view returns (address);\\n\\n function sequencerInbox() external view returns (address);\\n\\n function allowedDelayedInboxList(uint256) external returns (address);\\n}\\n\",\"keccak256\":\"0x0e7981b3e9b179caa0085d1ad900b19e88e29fec65923f41fde0315773fa9a3c\",\"license\":\"BUSL-1.1\"},\"src/canonical/arbitrum/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\n// https://github.com/OffchainLabs/nitro-contracts/blob/08ac127e966fa87a4d5ba3d23cd3132b57701132/src/bridge/IBridge.sol\\n// proxy: https://etherscan.io/address/0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840#code\\n// implementation: https://etherscan.io/address/0x0ea7372338a589e7f0b00e463a53aa464ef04e17#code\\n// interface is pruned for relevant function stubs\\n\\npragma solidity 0.8.24;\\n\\ninterface IOutbox {\\n /// @notice When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account\\n /// When the return value is zero, that means this is a system message\\n /// @dev the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies\\n function l2ToL1Sender() external view returns (address);\\n}\\n\",\"keccak256\":\"0x4d815542262727a2a3182332a7c16b0b1d33c031997de91c12e67e87e748b8ca\",\"license\":\"BUSL-1.1\"},\"src/canonical/arbitrum/ISequencerInbox.sol\":{\"content\":\"// Copyright 2021-2022, Offchain Labs, Inc.\\n// For license information, see https://github.com/nitro/blob/master/LICENSE\\n// SPDX-License-Identifier: BUSL-1.1\\n// https://github.com/OffchainLabs/nitro-contracts/blob/08ac127e966fa87a4d5ba3d23cd3132b57701132/src/bridge/ISequencerInbox.sol\\n// proxy: https://etherscan.io/address/0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6#code\\n// implementation: https://etherscan.io/address/0xD03bFe2CE83632F4E618a97299cc91B1335BB2d9#code\\n// interface is pruned for relevant function stubs\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IBridge.sol\\\";\\n\\ninterface ISequencerInbox {\\n struct MaxTimeVariation {\\n uint256 delayBlocks;\\n uint256 futureBlocks;\\n uint256 delaySeconds;\\n uint256 futureSeconds;\\n }\\n\\n function maxTimeVariation() external view returns (uint256, uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0xf972282dbad5eae92a352e0de6b588000bf4c58f45d90a30ef8863d5878313bc\",\"license\":\"BUSL-1.1\"},\"src/canonical/gnosis-chain/IAMB.sol\":{\"content\":\"// https://docs.gnosischain.com/bridges/tokenbridge/amb-bridge#gnosis\\n// https://github.com/omni/tokenbridge-contracts/blob/908a48107919d4ab127f9af07d44d47eac91547e/contracts/interfaces/IAMB.sol\\n// interface is pruned for relevant function stubs\\n\\npragma solidity 0.8.24;\\n\\ninterface IAMB {\\n function requireToPassMessage(address _contract, bytes memory _data, uint256 _gas) external returns (bytes32);\\n\\n function maxGasPerTx() external view returns (uint256);\\n\\n function messageSender() external view returns (address);\\n\\n function messageSourceChainId() external view returns (bytes32);\\n\\n event AffirmationCompleted(\\n address indexed sender,\\n address indexed executor,\\n bytes32 indexed messageId,\\n bool status\\n );\\n}\\n\",\"keccak256\":\"0x2639860b13972492cc59610e95b54e7d3e75cacb2dcdacf07bb2d52c2b183d67\"},\"src/interfaces/outboxes/IVeaOutboxOnL1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"../types/VeaClaim.sol\\\";\\n\\n/// @dev Interface of the Vea Outbox on L1 chains like Ethereum, Gnosis, Polygon POS where storage is expensive.\\ninterface IVeaOutboxOnL1 {\\n /// @dev Verifies and relays the message.\\n /// Note: Gateways expect first argument of message call to be the arbitrum message sender, used for authentication.\\n /// @param _proof The merkle proof to prove the message.\\n /// @param _msgId The zero based index of the message in the inbox.\\n /// @param _to The address to send the message to.\\n /// @param _message The message to relay.\\n function sendMessage(bytes32[] calldata _proof, uint64 _msgId, address _to, bytes calldata _message) external;\\n\\n /// @dev Resolves any challenge of the optimistic claim for 'epoch' using the canonical bridge.\\n /// Note: Access restricted to canonical bridge.\\n /// @param _epoch The epoch to verify.\\n /// @param _stateRoot The true state root for the epoch.\\n /// @param _claim The claim associated with the epoch.\\n function resolveDisputedClaim(uint256 _epoch, bytes32 _stateRoot, Claim memory _claim) external;\\n}\\n\",\"keccak256\":\"0xf1d52e289e790088502b7909f11f47bc33ddd3fc545636b7fb29c01ed00d3ff3\",\"license\":\"MIT\"},\"src/interfaces/routers/IRouterToGnosis.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"../types/VeaClaim.sol\\\";\\n\\n/// @dev Interface of the Vea Router which routes messages to Gnosis through the AMB.\\n/// @dev eg. L2 on Ethereum -> Ethereum (L1) -> Gnosis (L1), the IRouterToL1 will be deployed on Ethereum (L1) routing messages to Gnosis (L1).\\ninterface IRouterToGnosis {\\n /// @dev Routes state root snapshots through intermediary chains to the final destination L1 chain.\\n /// Note: Access restricted to canonical sending-chain bridge.\\n /// @param _epoch The epoch to verify.\\n /// @param _stateRoot The true state root for the epoch.\\n /// @param _gasLimit The gas limit for the AMB message.\\n /// @param _claim The claim associated with the epoch.\\n function route(uint256 _epoch, bytes32 _stateRoot, uint256 _gasLimit, Claim memory _claim) external;\\n}\\n\",\"keccak256\":\"0x9d78c7872bd2bc3b206fc6d6dfa8f8b2dab4122b10bfe0d0ab1f76bec92613b6\",\"license\":\"MIT\"},\"src/interfaces/types/VeaClaim.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nenum Party {\\n None,\\n Claimer,\\n Challenger\\n}\\n\\nstruct Claim {\\n bytes32 stateRoot;\\n address claimer;\\n uint32 timestampClaimed;\\n uint32 timestampVerification;\\n uint32 blocknumberVerification;\\n Party honest;\\n address challenger;\\n}\\n\",\"keccak256\":\"0xfef781e359c97aebbe8dbfcb75edb7cb962139fd9ea538b8b89a3f2e13a05bfe\",\"license\":\"MIT\"},\"src/interfaces/updaters/ISequencerDelayUpdatable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\n/// @dev Interface of a contract which is updatable, receiving parameter updates from an L1 contract through a cross-chain call.\\n/// @dev eg. Arbitrum (L2) -> Ethereum (L1) -> Gnosis (L1), the veaOutbox on Gnosis will be an ISequencerDelayUpdatable contract which receives updates from the router on Ethereum.\\ninterface ISequencerDelayUpdatable {\\n /// @dev Updates the sequencer limit.\\n /// Note: Access restricted to ensure the argument is passed from the Sequencer contract.\\n /// @param _newSequencerDelayLimit The delaySeconds from the MaxTimeVariation struct in the Arbitrum Sequencer contract.\\n /// @param _timestamp The timestamp of the message.\\n function updateSequencerDelayLimit(uint256 _newSequencerDelayLimit, uint256 _timestamp) external;\\n}\\n\",\"keccak256\":\"0x95ca3cc0dfaddee5c94a7e6b68bb9a90ce6d1b9cdd3b59241f5b1b5831ed89ec\",\"license\":\"MIT\"}},\"version\":1}",
"bytecode": "0x6101006040523480156200001257600080fd5b506040516200102d3803806200102d833981016040819052620000359162000147565b6001600160a01b03808516608081905284821660a05283821660c05290821660e0526040805163ee35f32760e01b8152905163ee35f327916004808201926020929091908290030181865afa15801562000093573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b99190620001af565b6001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa158015620000f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200011d9190620001d6565b50600055506200020d945050505050565b6001600160a01b03811681146200014457600080fd5b50565b600080600080608085870312156200015e57600080fd5b84516200016b816200012e565b60208601519094506200017e816200012e565b604086015190935062000191816200012e565b6060860151909250620001a4816200012e565b939692955090935050565b600060208284031215620001c257600080fd5b8151620001cf816200012e565b9392505050565b60008060008060808587031215620001ed57600080fd5b505082516020840151604085015160609095015191969095509092509050565b60805160a05160c05160e051610da16200028c6000396000818161010e015281816108b20152610a0401526000818161013d015261064c01526000818160cf015281816107fe0152818161088301526109db015260008181610177015281816102c1015281816103e7015281816105ea01526106760152610da16000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80635f43a47f116100665780635f43a47f146101305780638c5f173f14610138578063b1126dad1461015f578063e78cea9214610172578063e813a7551461019957600080fd5b8063051d1970146100985780630c63fa84146100c05780631062b39a146100ca5780632fa70aa714610109575b600080fd5b6001546002546100a6919082565b604080519283526020830191909152015b60405180910390f35b6100c86101b0565b005b6100f17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b7565b6100f17f000000000000000000000000000000000000000000000000000000000000000081565b6100c86103e3565b6100f17f000000000000000000000000000000000000000000000000000000000000000081565b6100c861016d366004610b05565b6105df565b6100f17f000000000000000000000000000000000000000000000000000000000000000081565b6101a260005481565b6040519081526020016100b7565b60025460000361021c5760405162461bcd60e51b815260206004820152602c60248201527f4e6f2070656e64696e672073657175656e636572206c696d697420646563726560448201526b30b9b2903932b8bab2b9ba1760a11b60648201526084015b60405180910390fd5b60005460025461022c9190610b4f565b42116102955760405162461bcd60e51b815260206004820152603260248201527f53657175656e636572206c696d697420646563726561736520726571756573746044820152711034b99039ba34b636103832b73234b7339760711b6064820152608401610213565b6001805460009182905560028290556040805163ee35f32760e01b815290519192916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ee35f3279160048083019260209291908290030181865afa15801561030c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103309190610b8b565b6001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa15801561036d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103919190610baf565b50925050508181036103df5760008290556103aa61097a565b6040518281527f823e4a64a225e5e0cfa0d1aae07413331b43ea819eecd97f2cb0293ea048140d906020015b60405180910390a15b5050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee35f3276040518163ffffffff1660e01b8152600401602060405180830381865afa158015610443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104679190610b8b565b6001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c89190610baf565b509250505060005481111561051a5760008190556104e461097a565b6040518181527f823e4a64a225e5e0cfa0d1aae07413331b43ea819eecd97f2cb0293ea048140d9060200160405180910390a150565b6000548110156105dc576002541561058e5760405162461bcd60e51b815260206004820152603160248201527f53657175656e636572206c696d697420646563726561736520726571756573746044820152701030b63932b0b23c903832b73234b7339760791b6064820152608401610213565b604080518082018252828152426020918201819052600184905560025590518281527f3b2dbb1656f3f4d178ea9682fda1179201413bca521502ceb89db37fcf4fa3b8910160405180910390a15b50565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461064a5760405162461bcd60e51b815260206004820152601060248201526f2737ba10333937b690313934b233b29760811b6044820152606401610213565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ab5d89436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610b8b565b6001600160a01b03166380648b026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107579190610b8b565b6001600160a01b03161461079e5760405162461bcd60e51b815260206004820152600e60248201526d3b32b0a4b73137bc1037b7363c9760911b6044820152606401610213565b60008484836040516024016107b593929190610c3a565b60408051601f19818403018152918152602080830180516001600160e01b0316630f0adca560e01b179052815163e5789d0360e01b815291519293506000926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e5789d039260048083019391928290030181865afa158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a9190610cec565b9050600081851161087b578461087d565b815b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dc8601b37f000000000000000000000000000000000000000000000000000000000000000086856040518463ffffffff1660e01b81526004016108f193929190610d05565b6020604051808303816000875af1158015610910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109349190610cec565b9050877f888a9bef5168f83425ebe9503cb6d29081cf58d52c60126f8a85a22c9d9935548260405161096891815260200190565b60405180910390a25050505050505050565b60008054604051602481019190915242604482015260640160408051601f19818403018152918152602080830180516001600160e01b0316632c19251960e01b179052815163e5789d0360e01b815291519293506000926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263dc8601b3927f0000000000000000000000000000000000000000000000000000000000000000928792869263e5789d03926004808401938290030181865afa158015610a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a719190610cec565b6040518463ffffffff1660e01b8152600401610a8f93929190610d05565b6020604051808303816000875af1158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190610cec565b90507f06ad66b880ac49cbe1e57edbb98b3b9f7824c4b4f0a8ec9f702a7c10ce92a850816040516103d691815260200190565b600080600080848603610140811215610b1d57600080fd5b85359450602086013593506040860135925060e0605f1982011215610b4157600080fd5b509295919450926060019150565b80820180821115610b7057634e487b7160e01b600052601160045260246000fd5b92915050565b6001600160a01b03811681146105dc57600080fd5b600060208284031215610b9d57600080fd5b8151610ba881610b76565b9392505050565b60008060008060808587031215610bc557600080fd5b505082516020840151604085015160609095015191969095509092509050565b8035610bf081610b76565b919050565b803563ffffffff81168114610bf057600080fd5b803560038110610bf057600080fd5b60038110610c3657634e487b7160e01b600052602160045260246000fd5b9052565b838152602080820184905282356040830152610120820190830135610c5e81610b76565b6001600160a01b03166060830152610c7860408401610bf5565b63ffffffff808216608085015280610c9260608701610bf5565b1660a085015280610ca560808701610bf5565b1660c08501525050610cb960a08401610c09565b610cc660e0840182610c18565b50610cd360c08401610be5565b6001600160a01b03811661010084015250949350505050565b600060208284031215610cfe57600080fd5b5051919050565b60018060a01b03841681526000602060606020840152845180606085015260005b81811015610d4257868101830151858201608001528201610d26565b506000608082860101526080601f19601f8301168501019250505082604083015294935050505056fea264697066735822122080a2ea080fca72f4142b77e2572d40e6fcdbd2d189ebb20b061b0b78c802716464736f6c63430008180033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80635f43a47f116100665780635f43a47f146101305780638c5f173f14610138578063b1126dad1461015f578063e78cea9214610172578063e813a7551461019957600080fd5b8063051d1970146100985780630c63fa84146100c05780631062b39a146100ca5780632fa70aa714610109575b600080fd5b6001546002546100a6919082565b604080519283526020830191909152015b60405180910390f35b6100c86101b0565b005b6100f17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b7565b6100f17f000000000000000000000000000000000000000000000000000000000000000081565b6100c86103e3565b6100f17f000000000000000000000000000000000000000000000000000000000000000081565b6100c861016d366004610b05565b6105df565b6100f17f000000000000000000000000000000000000000000000000000000000000000081565b6101a260005481565b6040519081526020016100b7565b60025460000361021c5760405162461bcd60e51b815260206004820152602c60248201527f4e6f2070656e64696e672073657175656e636572206c696d697420646563726560448201526b30b9b2903932b8bab2b9ba1760a11b60648201526084015b60405180910390fd5b60005460025461022c9190610b4f565b42116102955760405162461bcd60e51b815260206004820152603260248201527f53657175656e636572206c696d697420646563726561736520726571756573746044820152711034b99039ba34b636103832b73234b7339760711b6064820152608401610213565b6001805460009182905560028290556040805163ee35f32760e01b815290519192916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ee35f3279160048083019260209291908290030181865afa15801561030c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103309190610b8b565b6001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa15801561036d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103919190610baf565b50925050508181036103df5760008290556103aa61097a565b6040518281527f823e4a64a225e5e0cfa0d1aae07413331b43ea819eecd97f2cb0293ea048140d906020015b60405180910390a15b5050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee35f3276040518163ffffffff1660e01b8152600401602060405180830381865afa158015610443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104679190610b8b565b6001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c89190610baf565b509250505060005481111561051a5760008190556104e461097a565b6040518181527f823e4a64a225e5e0cfa0d1aae07413331b43ea819eecd97f2cb0293ea048140d9060200160405180910390a150565b6000548110156105dc576002541561058e5760405162461bcd60e51b815260206004820152603160248201527f53657175656e636572206c696d697420646563726561736520726571756573746044820152701030b63932b0b23c903832b73234b7339760791b6064820152608401610213565b604080518082018252828152426020918201819052600184905560025590518281527f3b2dbb1656f3f4d178ea9682fda1179201413bca521502ceb89db37fcf4fa3b8910160405180910390a15b50565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461064a5760405162461bcd60e51b815260206004820152601060248201526f2737ba10333937b690313934b233b29760811b6044820152606401610213565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ab5d89436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610b8b565b6001600160a01b03166380648b026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107579190610b8b565b6001600160a01b03161461079e5760405162461bcd60e51b815260206004820152600e60248201526d3b32b0a4b73137bc1037b7363c9760911b6044820152606401610213565b60008484836040516024016107b593929190610c3a565b60408051601f19818403018152918152602080830180516001600160e01b0316630f0adca560e01b179052815163e5789d0360e01b815291519293506000926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e5789d039260048083019391928290030181865afa158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a9190610cec565b9050600081851161087b578461087d565b815b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dc8601b37f000000000000000000000000000000000000000000000000000000000000000086856040518463ffffffff1660e01b81526004016108f193929190610d05565b6020604051808303816000875af1158015610910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109349190610cec565b9050877f888a9bef5168f83425ebe9503cb6d29081cf58d52c60126f8a85a22c9d9935548260405161096891815260200190565b60405180910390a25050505050505050565b60008054604051602481019190915242604482015260640160408051601f19818403018152918152602080830180516001600160e01b0316632c19251960e01b179052815163e5789d0360e01b815291519293506000926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263dc8601b3927f0000000000000000000000000000000000000000000000000000000000000000928792869263e5789d03926004808401938290030181865afa158015610a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a719190610cec565b6040518463ffffffff1660e01b8152600401610a8f93929190610d05565b6020604051808303816000875af1158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190610cec565b90507f06ad66b880ac49cbe1e57edbb98b3b9f7824c4b4f0a8ec9f702a7c10ce92a850816040516103d691815260200190565b600080600080848603610140811215610b1d57600080fd5b85359450602086013593506040860135925060e0605f1982011215610b4157600080fd5b509295919450926060019150565b80820180821115610b7057634e487b7160e01b600052601160045260246000fd5b92915050565b6001600160a01b03811681146105dc57600080fd5b600060208284031215610b9d57600080fd5b8151610ba881610b76565b9392505050565b60008060008060808587031215610bc557600080fd5b505082516020840151604085015160609095015191969095509092509050565b8035610bf081610b76565b919050565b803563ffffffff81168114610bf057600080fd5b803560038110610bf057600080fd5b60038110610c3657634e487b7160e01b600052602160045260246000fd5b9052565b838152602080820184905282356040830152610120820190830135610c5e81610b76565b6001600160a01b03166060830152610c7860408401610bf5565b63ffffffff808216608085015280610c9260608701610bf5565b1660a085015280610ca560808701610bf5565b1660c08501525050610cb960a08401610c09565b610cc660e0840182610c18565b50610cd360c08401610be5565b6001600160a01b03811661010084015250949350505050565b600060208284031215610cfe57600080fd5b5051919050565b60018060a01b03841681526000602060606020840152845180606085015260005b81811015610d4257868101830151858201608001528201610d26565b506000608082860101526080601f19601f8301168501019250505082604083015294935050505056fea264697066735822122080a2ea080fca72f4142b77e2572d40e6fcdbd2d189ebb20b061b0b78c802716464736f6c63430008180033",
"devdoc": {
"details": "Router from Arbitrum to Gnosis Chain. Note: This contract is deployed on Ethereum.",
"events": {
"Routed(uint256,bytes32)": {
"details": "Event emitted when a message is relayed to another Safe Bridge.",
"params": {
"_epoch": "The epoch of the batch requested to send.",
"_ticketID": "The unique identifier provided by the underlying canonical bridge."
}
},
"SequencerDelayLimitDecreaseRequested(uint256)": {
"details": "This event indicates that a request to decrease the sequencer limit has been made.",
"params": {
"_requestedSequencerDelayLimit": "The new sequencer limit requested."
}
},
"SequencerDelayLimitSent(bytes32)": {
"details": "This event indicates a cross-chain message was sent to inform the veaOutbox of the sequencer limit value",
"params": {
"_ticketID": "The ticketID from the AMB of the cross-chain message."
}
},
"SequencerDelayLimitUpdated(uint256)": {
"details": "This event indicates the sequencer limit updated.",
"params": {
"_newSequencerDelayLimit": "The new sequencer delay limit."
}
}
},
"kind": "dev",
"methods": {
"constructor": {
"details": "Constructor.",
"params": {
"_amb": "The address of the AMB contract on Ethereum.",
"_bridge": "The address of the arbitrum bridge contract on Ethereum.",
"_veaInboxArbToGnosis": "The vea inbox on Arbitrum.",
"_veaOutboxArbToGnosis": "The vea outbox on Gnosis Chain."
}
},
"executeSequencerDelayLimitDecreaseRequest()": {
"details": "execute sequencerDelayLimitDecreaseRequest"
},
"route(uint256,bytes32,uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))": {
"details": "Resolves any challenge of the optimistic claim for '_epoch'.",
"params": {
"_claim": "The claim associated with the epoch.",
"_epoch": "The epoch to verify.",
"_gasLimit": "The true batch gas limit for the epoch.",
"_stateroot": "The true batch merkle root for the epoch."
}
},
"updateSequencerDelayLimit()": {
"details": "Update the sequencerDelayLimit. If decreasing, a delayed request is created for later execution."
}
},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {
"route(uint256,bytes32,uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))": {
"notice": "Note: Access restricted to arbitrum canonical bridge."
}
},
"version": 1
},
"storageLayout": {
"storage": [
{
"astId": 1922,
"contract": "src/arbitrumToGnosis/RouterArbToGnosis.sol:RouterArbToGnosis",
"label": "sequencerDelayLimit",
"offset": 0,
"slot": "0",
"type": "t_uint256"
},
{
"astId": 1925,
"contract": "src/arbitrumToGnosis/RouterArbToGnosis.sol:RouterArbToGnosis",
"label": "sequencerDelayLimitDecreaseRequest",
"offset": 0,
"slot": "1",
"type": "t_struct(SequencerLimitDecreaseRequest)1930_storage"
}
],
"types": {
"t_struct(SequencerLimitDecreaseRequest)1930_storage": {
"encoding": "inplace",
"label": "struct RouterArbToGnosis.SequencerLimitDecreaseRequest",