-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathIMessageQueue.json
More file actions
1 lines (1 loc) · 92.7 KB
/
IMessageQueue.json
File metadata and controls
1 lines (1 loc) · 92.7 KB
1
{"abi":[{"type":"function","name":"allowMessageProcessing","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"challengeRoot","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"disableChallengeRoot","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"emergencyStopAdmin","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"emergencyStopObservers","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"genesisBlock","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getMerkleRoot","inputs":[{"name":"blockNumber","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getMerkleRootTimestamp","inputs":[{"name":"merkleRoot","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"governanceAdmin","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"governancePauser","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"isChallengingRoot","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isEmergencyStopped","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isProcessed","inputs":[{"name":"messageNonce","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"maxBlockNumber","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"processMessage","inputs":[{"name":"blockNumber","type":"uint256","internalType":"uint256"},{"name":"totalLeaves","type":"uint256","internalType":"uint256"},{"name":"leafIndex","type":"uint256","internalType":"uint256"},{"name":"message","type":"tuple","internalType":"struct VaraMessage","components":[{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"source","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"}]},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitMerkleRoot","inputs":[{"name":"blockNumber","type":"uint256","internalType":"uint256"},{"name":"merkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"proof","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifier","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"ChallengeRootDisabled","inputs":[],"anonymous":false},{"type":"event","name":"ChallengeRootEnabled","inputs":[{"name":"untilTimestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EmergencyStopDisabled","inputs":[],"anonymous":false},{"type":"event","name":"EmergencyStopEnabled","inputs":[],"anonymous":false},{"type":"event","name":"MerkleRoot","inputs":[{"name":"blockNumber","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"merkleRoot","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"MessageProcessed","inputs":[{"name":"blockNumber","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"messageHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"messageNonce","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"messageDestination","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"MessageProcessingAllowed","inputs":[],"anonymous":false},{"type":"error","name":"BlockNumberBeforeGenesis","inputs":[{"name":"blockNumber","type":"uint256","internalType":"uint256"},{"name":"genesisBlock","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"BlockNumberTooFar","inputs":[{"name":"blockNumber","type":"uint256","internalType":"uint256"},{"name":"maxBlockNumber","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ChallengeRoot","inputs":[]},{"type":"error","name":"ChallengeRootNotEnabled","inputs":[]},{"type":"error","name":"EmergencyStop","inputs":[]},{"type":"error","name":"EmergencyStopNotEnabled","inputs":[]},{"type":"error","name":"InvalidMerkleProof","inputs":[]},{"type":"error","name":"InvalidPlonkProof","inputs":[]},{"type":"error","name":"MerkleRootAlreadySet","inputs":[{"name":"blockNumber","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"MerkleRootDelayNotPassed","inputs":[]},{"type":"error","name":"MerkleRootNotFound","inputs":[{"name":"blockNumber","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"MessageAlreadyProcessed","inputs":[{"name":"messageNonce","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NotEmergencyStopAdmin","inputs":[]},{"type":"error","name":"NotEmergencyStopObserver","inputs":[]}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"allowMessageProcessing()":"00490745","challengeRoot()":"87e97e8c","disableChallengeRoot()":"0f926c02","emergencyStopAdmin()":"b13f222c","emergencyStopObservers()":"76afc14f","genesisBlock()":"4cdc9c63","getMerkleRoot(uint256)":"0aab8ba5","getMerkleRootTimestamp(bytes32)":"4610d3aa","governanceAdmin()":"0058f6b8","governancePauser()":"c81eb797","isChallengingRoot()":"52d190f3","isEmergencyStopped()":"fddd4837","isProcessed(uint256)":"bfe7edd7","maxBlockNumber()":"a912fd25","pause()":"8456cb59","processMessage(uint256,uint256,uint256,(uint256,bytes32,address,bytes),bytes32[])":"93eb47e9","submitMerkleRoot(uint256,bytes32,bytes)":"cca66a9d","unpause()":"3f4ba83a","verifier()":"2b7ac3f3"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.33+commit.64118f21\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"genesisBlock\",\"type\":\"uint256\"}],\"name\":\"BlockNumberBeforeGenesis\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxBlockNumber\",\"type\":\"uint256\"}],\"name\":\"BlockNumberTooFar\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChallengeRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChallengeRootNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmergencyStop\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmergencyStopNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMerkleProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPlonkProof\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"MerkleRootAlreadySet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MerkleRootDelayNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"MerkleRootNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"}],\"name\":\"MessageAlreadyProcessed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEmergencyStopAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEmergencyStopObserver\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ChallengeRootDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"untilTimestamp\",\"type\":\"uint256\"}],\"name\":\"ChallengeRootEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EmergencyStopDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EmergencyStopEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"MerkleRoot\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"messageDestination\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"MessageProcessingAllowed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"allowMessageProcessing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableChallengeRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emergencyStopAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emergencyStopObservers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRootTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governanceAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governancePauser\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isChallengingRoot\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isEmergencyStopped\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"}],\"name\":\"isProcessed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalLeaves\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"leafIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"source\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"internalType\":\"struct VaraMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"submitMerkleRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the MessageQueue contract.\",\"errors\":{\"BlockNumberBeforeGenesis(uint256,uint256)\":[{\"details\":\"Block number is before genesis block.\"}],\"BlockNumberTooFar(uint256,uint256)\":[{\"details\":\"Block number is too far from max block number.\"}],\"ChallengeRoot()\":[{\"details\":\"Challenge root status is enabled.\"}],\"ChallengeRootNotEnabled()\":[{\"details\":\"Challenging root status is disabled.\"}],\"EmergencyStop()\":[{\"details\":\"Emergency stop status is enabled.\"}],\"EmergencyStopNotEnabled()\":[{\"details\":\"Emergency stop status is disabled.\"}],\"InvalidMerkleProof()\":[{\"details\":\"Merkle proof is invalid.\"}],\"InvalidPlonkProof()\":[{\"details\":\"The plonk proof is invalid.\"}],\"MerkleRootAlreadySet(uint256)\":[{\"details\":\"Merkle root is already set.\"}],\"MerkleRootDelayNotPassed()\":[{\"details\":\"Merkle root delay is not passed.\"}],\"MerkleRootNotFound(uint256)\":[{\"details\":\"Merkle root is not found for the block number in MessageQueue smart contract.\"}],\"MessageAlreadyProcessed(uint256)\":[{\"details\":\"Message nonce is already processed.\"}],\"NotEmergencyStopAdmin()\":[{\"details\":\"Caller is not emergency stop admin.\"}],\"NotEmergencyStopObserver()\":[{\"details\":\"Caller is not emergency stop observer.\"}]},\"events\":{\"ChallengeRootDisabled()\":{\"details\":\"Emitted when challenging root status is disabled.\"},\"ChallengeRootEnabled(uint256)\":{\"details\":\"Emitted when challenging root status is enabled.\"},\"EmergencyStopDisabled()\":{\"details\":\"Emitted when emergency stop status is disabled. Should be emitted on upgradeV2 function of the smart contract.\"},\"EmergencyStopEnabled()\":{\"details\":\"Emitted when emergency stop status is enabled.\"},\"MerkleRoot(uint256,bytes32)\":{\"details\":\"Emitted when block number and merkle root are stored.\"},\"MessageProcessed(uint256,bytes32,uint256,address)\":{\"details\":\"Emitted when message is processed.\"},\"MessageProcessingAllowed()\":{\"details\":\"Emitted when message processing is allowed during emergency stop.\"}},\"kind\":\"dev\",\"methods\":{\"allowMessageProcessing()\":{\"details\":\"Allows message processing when emergency stop is enabled.Reverts if: - msg.sender is not emergency stop admin with `NotEmergencyStopAdmin` error. - emergency stop status is not enabled with `EmergencyStopNotEnabled` error.\"},\"challengeRoot()\":{\"details\":\"Puts MessageQueue into a high-priority paused state. Only the emergency stop admin or time expiry (CHALLENGE_ROOT_DELAY) can lift it.Reverts if: - msg.sender is not emergency stop observer with `NotEmergencyStopObserver` error.Emits `ChallengeRootEnabled(block.timestamp + CHALLENGE_ROOT_DELAY)` event.\"},\"disableChallengeRoot()\":{\"details\":\"Disables challenging root status.Reverts if: - msg.sender is not emergency stop admin with `NotEmergencyStopAdmin` error. - challenging root status is not enabled with `ChallengeRootNotEnabled` error.Emits `ChallengeRootDisabled` event.\"},\"emergencyStopAdmin()\":{\"details\":\"Returns emergency stop admin address.\",\"returns\":{\"_0\":\"emergencyStopAdmin Emergency stop admin address.\"}},\"emergencyStopObservers()\":{\"details\":\"Returns list of emergency stop observers.\",\"returns\":{\"_0\":\"emergencyStopObservers List of emergency stop observers.\"}},\"genesisBlock()\":{\"details\":\"Returns genesis block number.\",\"returns\":{\"_0\":\"genesisBlock Genesis block number.\"}},\"getMerkleRoot(uint256)\":{\"details\":\"Returns merkle root for specified block number. Returns `bytes32(0)` if merkle root was not provided for specified block number.\",\"params\":{\"blockNumber\":\"Target block number.\"},\"returns\":{\"_0\":\"merkleRoot Merkle root for specified block number.\"}},\"getMerkleRootTimestamp(bytes32)\":{\"details\":\"Returns timestamp when merkle root was set. Returns `0` if merkle root was not provided for specified block number.\",\"params\":{\"merkleRoot\":\"Target merkle root.\"},\"returns\":{\"_0\":\"timestamp Timestamp when merkle root was set.\"}},\"governanceAdmin()\":{\"details\":\"Returns governance admin address.\",\"returns\":{\"_0\":\"governanceAdmin Governance admin address.\"}},\"governancePauser()\":{\"details\":\"Returns governance pauser address.\",\"returns\":{\"_0\":\"governancePauser Governance pauser address.\"}},\"isChallengingRoot()\":{\"details\":\"Returns challenging root status.\",\"returns\":{\"_0\":\"isChallengingRoot challenging root status.\"}},\"isEmergencyStopped()\":{\"details\":\"Returns emergency stop status.\",\"returns\":{\"_0\":\"isEmergencyStopped emergency stop status.\"}},\"isProcessed(uint256)\":{\"details\":\"Checks if message was already processed.\",\"params\":{\"messageNonce\":\"Message nonce to check.\"},\"returns\":{\"_0\":\"isProcessed `true` if message was already processed, `false` otherwise.\"}},\"maxBlockNumber()\":{\"details\":\"Returns maximum block number.\",\"returns\":{\"_0\":\"maxBlockNumber Maximum block number.\"}},\"pause()\":{\"details\":\"Pauses the contract.\"},\"processMessage(uint256,uint256,uint256,(uint256,bytes32,address,bytes),bytes32[])\":{\"details\":\"Verifies and processes message originated from Vara Network. In this process, MessageQueue smart contract will calculate Merkle root for message and validate that it corresponds to Merkle root which is already stored in MessageQueue smart contract for same block number. If proof is correct, nonce of received message will be stored in smart contract and message will be forwarded to adequate message processor, either ERC20Manager or Governance smart contract. Upon successful processing of the message `MessageProcessed` event is emitted. It is important to note that anyone can submit a message because all messages will be validated against previously stored Merkle roots in the MessageQueue smart contract.Reverts if: - MessageQueue is in challenging root status with `ChallengeRoot` error. - MessageQueue is paused and message source is not any governance address. - MessageQueue emergency stop status is enabled and caller is not emergency stop admin. - Message nonce is already processed. - Merkle root is not set for the block number in MessageQueue smart contract. - Merkle proof is invalid. - Message processing fails.\",\"params\":{\"blockNumber\":\"Block number of block containing target merkle tree.\",\"leafIndex\":\"Index of leaf containing target message.\",\"message\":\"Target message.\",\"proof\":\"Merkle proof of inclusion of leaf #`leafIndex` into target merkle tree that was included into `blockNumber`.\",\"totalLeaves\":\"Number of leaves in target merkle tree.\"}},\"submitMerkleRoot(uint256,bytes32,bytes)\":{\"details\":\"Receives, verifies and stores Merkle roots from Vara Network. Upon successfully storing data about block number and corresponding Merkle root, MessageQueue smart contract will emit a `MerkleRoot` event. It is important to note that anyone can submit a Merkle root because only validated Merkle roots will be stored in the MessageQueue smart contract.Reverts if emergency stop status is enabled with `EmergencyStop` error.Reverts if `proof` or `publicInputs` are malformed with `InvalidPlonkProof` error.\",\"params\":{\"blockNumber\":\"Block number on Vara Network\",\"merkleRoot\":\"Merkle root of transactions included in block with corresponding block number\",\"proof\":\"Serialised Plonk proof (using gnark's `MarshalSolidity`).\"}},\"unpause()\":{\"details\":\"Unpauses the contract.\"},\"verifier()\":{\"details\":\"Returns verifier address. Verifier is smart contract that is responsible for verifying the validity of the Merkle proof.\",\"returns\":{\"_0\":\"verifier Verifier address.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IMessageQueue.sol\":\"IMessageQueue\"},\"debug\":{\"revertStrings\":\"strip\"},\"evmVersion\":\"osaka\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":script/=script/\",\":src/=src/\",\":test/=test/\"],\"viaIR\":true},\"sources\":{\"src/interfaces/IMessageQueue.sol\":{\"keccak256\":\"0x6026aa0bd3556aeeff120f8b61a47ed89047e5d4f7bae8ac8598cc36ee307175\",\"license\":\"GPL-3.0-or-later WITH Classpath-exception-2.0\",\"urls\":[\"bzz-raw://fc1c9bdda29ec33b9f98e5b7acfb9c6972fc453d958050f5010053fc5c76dbfc\",\"dweb:/ipfs/QmTW2neXBP2HVw8qYqxXjR3uZD6JQtgTnEd3ZHrR1YE8pv\"]},\"src/interfaces/IPausable.sol\":{\"keccak256\":\"0x93cfd468192184d1213681e351117a24c66b5c652500ce50bdd23a00d7dfc342\",\"license\":\"GPL-3.0-or-later WITH Classpath-exception-2.0\",\"urls\":[\"bzz-raw://bc6722848f5a9576747f78197dd8c9a2cbc9c91237f922ba768dd373b71784b6\",\"dweb:/ipfs/QmUcJ7wvKEcWaiU49hBDxboiedPs7MsbRfRo5TRRt8Hzwu\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.33+commit.64118f21"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"uint256","name":"genesisBlock","type":"uint256"}],"type":"error","name":"BlockNumberBeforeGenesis"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"uint256","name":"maxBlockNumber","type":"uint256"}],"type":"error","name":"BlockNumberTooFar"},{"inputs":[],"type":"error","name":"ChallengeRoot"},{"inputs":[],"type":"error","name":"ChallengeRootNotEnabled"},{"inputs":[],"type":"error","name":"EmergencyStop"},{"inputs":[],"type":"error","name":"EmergencyStopNotEnabled"},{"inputs":[],"type":"error","name":"InvalidMerkleProof"},{"inputs":[],"type":"error","name":"InvalidPlonkProof"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"type":"error","name":"MerkleRootAlreadySet"},{"inputs":[],"type":"error","name":"MerkleRootDelayNotPassed"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"type":"error","name":"MerkleRootNotFound"},{"inputs":[{"internalType":"uint256","name":"messageNonce","type":"uint256"}],"type":"error","name":"MessageAlreadyProcessed"},{"inputs":[],"type":"error","name":"NotEmergencyStopAdmin"},{"inputs":[],"type":"error","name":"NotEmergencyStopObserver"},{"inputs":[],"type":"event","name":"ChallengeRootDisabled","anonymous":false},{"inputs":[{"internalType":"uint256","name":"untilTimestamp","type":"uint256","indexed":false}],"type":"event","name":"ChallengeRootEnabled","anonymous":false},{"inputs":[],"type":"event","name":"EmergencyStopDisabled","anonymous":false},{"inputs":[],"type":"event","name":"EmergencyStopEnabled","anonymous":false},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256","indexed":false},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32","indexed":false}],"type":"event","name":"MerkleRoot","anonymous":false},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256","indexed":false},{"internalType":"bytes32","name":"messageHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"messageNonce","type":"uint256","indexed":false},{"internalType":"address","name":"messageDestination","type":"address","indexed":false}],"type":"event","name":"MessageProcessed","anonymous":false},{"inputs":[],"type":"event","name":"MessageProcessingAllowed","anonymous":false},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"allowMessageProcessing"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"challengeRoot"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"disableChallengeRoot"},{"inputs":[],"stateMutability":"view","type":"function","name":"emergencyStopAdmin","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"emergencyStopObservers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"genesisBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"view","type":"function","name":"getMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getMerkleRootTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"governanceAdmin","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"governancePauser","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"isChallengingRoot","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"isEmergencyStopped","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"messageNonce","type":"uint256"}],"stateMutability":"view","type":"function","name":"isProcessed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"maxBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"uint256","name":"totalLeaves","type":"uint256"},{"internalType":"uint256","name":"leafIndex","type":"uint256"},{"internalType":"struct VaraMessage","name":"message","type":"tuple","components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"source","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"}]},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function","name":"processMessage"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"submitMerkleRoot"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[],"stateMutability":"view","type":"function","name":"verifier","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"allowMessageProcessing()":{"details":"Allows message processing when emergency stop is enabled.Reverts if: - msg.sender is not emergency stop admin with `NotEmergencyStopAdmin` error. - emergency stop status is not enabled with `EmergencyStopNotEnabled` error."},"challengeRoot()":{"details":"Puts MessageQueue into a high-priority paused state. Only the emergency stop admin or time expiry (CHALLENGE_ROOT_DELAY) can lift it.Reverts if: - msg.sender is not emergency stop observer with `NotEmergencyStopObserver` error.Emits `ChallengeRootEnabled(block.timestamp + CHALLENGE_ROOT_DELAY)` event."},"disableChallengeRoot()":{"details":"Disables challenging root status.Reverts if: - msg.sender is not emergency stop admin with `NotEmergencyStopAdmin` error. - challenging root status is not enabled with `ChallengeRootNotEnabled` error.Emits `ChallengeRootDisabled` event."},"emergencyStopAdmin()":{"details":"Returns emergency stop admin address.","returns":{"_0":"emergencyStopAdmin Emergency stop admin address."}},"emergencyStopObservers()":{"details":"Returns list of emergency stop observers.","returns":{"_0":"emergencyStopObservers List of emergency stop observers."}},"genesisBlock()":{"details":"Returns genesis block number.","returns":{"_0":"genesisBlock Genesis block number."}},"getMerkleRoot(uint256)":{"details":"Returns merkle root for specified block number. Returns `bytes32(0)` if merkle root was not provided for specified block number.","params":{"blockNumber":"Target block number."},"returns":{"_0":"merkleRoot Merkle root for specified block number."}},"getMerkleRootTimestamp(bytes32)":{"details":"Returns timestamp when merkle root was set. Returns `0` if merkle root was not provided for specified block number.","params":{"merkleRoot":"Target merkle root."},"returns":{"_0":"timestamp Timestamp when merkle root was set."}},"governanceAdmin()":{"details":"Returns governance admin address.","returns":{"_0":"governanceAdmin Governance admin address."}},"governancePauser()":{"details":"Returns governance pauser address.","returns":{"_0":"governancePauser Governance pauser address."}},"isChallengingRoot()":{"details":"Returns challenging root status.","returns":{"_0":"isChallengingRoot challenging root status."}},"isEmergencyStopped()":{"details":"Returns emergency stop status.","returns":{"_0":"isEmergencyStopped emergency stop status."}},"isProcessed(uint256)":{"details":"Checks if message was already processed.","params":{"messageNonce":"Message nonce to check."},"returns":{"_0":"isProcessed `true` if message was already processed, `false` otherwise."}},"maxBlockNumber()":{"details":"Returns maximum block number.","returns":{"_0":"maxBlockNumber Maximum block number."}},"pause()":{"details":"Pauses the contract."},"processMessage(uint256,uint256,uint256,(uint256,bytes32,address,bytes),bytes32[])":{"details":"Verifies and processes message originated from Vara Network. In this process, MessageQueue smart contract will calculate Merkle root for message and validate that it corresponds to Merkle root which is already stored in MessageQueue smart contract for same block number. If proof is correct, nonce of received message will be stored in smart contract and message will be forwarded to adequate message processor, either ERC20Manager or Governance smart contract. Upon successful processing of the message `MessageProcessed` event is emitted. It is important to note that anyone can submit a message because all messages will be validated against previously stored Merkle roots in the MessageQueue smart contract.Reverts if: - MessageQueue is in challenging root status with `ChallengeRoot` error. - MessageQueue is paused and message source is not any governance address. - MessageQueue emergency stop status is enabled and caller is not emergency stop admin. - Message nonce is already processed. - Merkle root is not set for the block number in MessageQueue smart contract. - Merkle proof is invalid. - Message processing fails.","params":{"blockNumber":"Block number of block containing target merkle tree.","leafIndex":"Index of leaf containing target message.","message":"Target message.","proof":"Merkle proof of inclusion of leaf #`leafIndex` into target merkle tree that was included into `blockNumber`.","totalLeaves":"Number of leaves in target merkle tree."}},"submitMerkleRoot(uint256,bytes32,bytes)":{"details":"Receives, verifies and stores Merkle roots from Vara Network. Upon successfully storing data about block number and corresponding Merkle root, MessageQueue smart contract will emit a `MerkleRoot` event. It is important to note that anyone can submit a Merkle root because only validated Merkle roots will be stored in the MessageQueue smart contract.Reverts if emergency stop status is enabled with `EmergencyStop` error.Reverts if `proof` or `publicInputs` are malformed with `InvalidPlonkProof` error.","params":{"blockNumber":"Block number on Vara Network","merkleRoot":"Merkle root of transactions included in block with corresponding block number","proof":"Serialised Plonk proof (using gnark's `MarshalSolidity`)."}},"unpause()":{"details":"Unpauses the contract."},"verifier()":{"details":"Returns verifier address. Verifier is smart contract that is responsible for verifying the validity of the Merkle proof.","returns":{"_0":"verifier Verifier address."}}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","script/=script/","src/=src/","test/=test/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/interfaces/IMessageQueue.sol":"IMessageQueue"},"evmVersion":"osaka","libraries":{},"viaIR":true},"sources":{"src/interfaces/IMessageQueue.sol":{"keccak256":"0x6026aa0bd3556aeeff120f8b61a47ed89047e5d4f7bae8ac8598cc36ee307175","urls":["bzz-raw://fc1c9bdda29ec33b9f98e5b7acfb9c6972fc453d958050f5010053fc5c76dbfc","dweb:/ipfs/QmTW2neXBP2HVw8qYqxXjR3uZD6JQtgTnEd3ZHrR1YE8pv"],"license":"GPL-3.0-or-later WITH Classpath-exception-2.0"},"src/interfaces/IPausable.sol":{"keccak256":"0x93cfd468192184d1213681e351117a24c66b5c652500ce50bdd23a00d7dfc342","urls":["bzz-raw://bc6722848f5a9576747f78197dd8c9a2cbc9c91237f922ba768dd373b71784b6","dweb:/ipfs/QmUcJ7wvKEcWaiU49hBDxboiedPs7MsbRfRo5TRRt8Hzwu"],"license":"GPL-3.0-or-later WITH Classpath-exception-2.0"}},"version":1},"storageLayout":{"storage":[],"types":{}},"irOptimized":"","ast":{"absolutePath":"src/interfaces/IMessageQueue.sol","id":68908,"exportedSymbols":{"Hasher":[68907],"IMessageQueue":[68857],"IPausable":[68919],"VaraMessage":[68645]},"nodeType":"SourceUnit","src":"74:10774:122","nodes":[{"id":68633,"nodeType":"PragmaDirective","src":"74:24:122","nodes":[],"literals":["solidity","^","0.8",".33"]},{"id":68635,"nodeType":"ImportDirective","src":"100:42:122","nodes":[],"absolutePath":"src/interfaces/IPausable.sol","file":"./IPausable.sol","nameLocation":"-1:-1:-1","scope":68908,"sourceUnit":68920,"symbolAliases":[{"foreign":{"id":68634,"name":"IPausable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68919,"src":"108:9:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":68645,"nodeType":"StructDefinition","src":"356:105:122","nodes":[],"canonicalName":"VaraMessage","documentation":{"id":68636,"nodeType":"StructuredDocumentation","src":"144:211:122","text":" @dev Type representing message being bridged from Gear-based chain (Vara Network) to Ethereum.\n - https://github.com/gear-tech/gear/blob/v1.9.2/pallets/gear-eth-bridge/primitives/src/lib.rs#L65"},"members":[{"constant":false,"id":68638,"mutability":"mutable","name":"nonce","nameLocation":"389:5:122","nodeType":"VariableDeclaration","scope":68645,"src":"381:13:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68637,"name":"uint256","nodeType":"ElementaryTypeName","src":"381:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":68640,"mutability":"mutable","name":"source","nameLocation":"408:6:122","nodeType":"VariableDeclaration","scope":68645,"src":"400:14:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68639,"name":"bytes32","nodeType":"ElementaryTypeName","src":"400:7:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":68642,"mutability":"mutable","name":"destination","nameLocation":"428:11:122","nodeType":"VariableDeclaration","scope":68645,"src":"420:19:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68641,"name":"address","nodeType":"ElementaryTypeName","src":"420:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":68644,"mutability":"mutable","name":"payload","nameLocation":"451:7:122","nodeType":"VariableDeclaration","scope":68645,"src":"445:13:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":68643,"name":"bytes","nodeType":"ElementaryTypeName","src":"445:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"VaraMessage","nameLocation":"363:11:122","scope":68908,"visibility":"public"},{"id":68857,"nodeType":"ContractDefinition","src":"520:9479:122","nodes":[{"id":68651,"nodeType":"ErrorDefinition","src":"625:22:122","nodes":[],"documentation":{"id":68649,"nodeType":"StructuredDocumentation","src":"563:57:122","text":" @dev Challenge root status is enabled."},"errorSelector":"4df7989c","name":"ChallengeRoot","nameLocation":"631:13:122","parameters":{"id":68650,"nodeType":"ParameterList","parameters":[],"src":"644:2:122"}},{"id":68654,"nodeType":"ErrorDefinition","src":"718:32:122","nodes":[],"documentation":{"id":68652,"nodeType":"StructuredDocumentation","src":"653:60:122","text":" @dev Challenging root status is disabled."},"errorSelector":"0cddaee9","name":"ChallengeRootNotEnabled","nameLocation":"724:23:122","parameters":{"id":68653,"nodeType":"ParameterList","parameters":[],"src":"747:2:122"}},{"id":68657,"nodeType":"ErrorDefinition","src":"818:22:122","nodes":[],"documentation":{"id":68655,"nodeType":"StructuredDocumentation","src":"756:57:122","text":" @dev Emergency stop status is enabled."},"errorSelector":"4e97bcfc","name":"EmergencyStop","nameLocation":"824:13:122","parameters":{"id":68656,"nodeType":"ParameterList","parameters":[],"src":"837:2:122"}},{"id":68660,"nodeType":"ErrorDefinition","src":"909:32:122","nodes":[],"documentation":{"id":68658,"nodeType":"StructuredDocumentation","src":"846:58:122","text":" @dev Emergency stop status is disabled."},"errorSelector":"ca56aa68","name":"EmergencyStopNotEnabled","nameLocation":"915:23:122","parameters":{"id":68659,"nodeType":"ParameterList","parameters":[],"src":"938:2:122"}},{"id":68663,"nodeType":"ErrorDefinition","src":"1003:26:122","nodes":[],"documentation":{"id":68661,"nodeType":"StructuredDocumentation","src":"947:51:122","text":" @dev The plonk proof is invalid."},"errorSelector":"d0b34d32","name":"InvalidPlonkProof","nameLocation":"1009:17:122","parameters":{"id":68662,"nodeType":"ParameterList","parameters":[],"src":"1026:2:122"}},{"id":68668,"nodeType":"ErrorDefinition","src":"1099:52:122","nodes":[],"documentation":{"id":68664,"nodeType":"StructuredDocumentation","src":"1035:59:122","text":" @dev Message nonce is already processed."},"errorSelector":"e140f8cc","name":"MessageAlreadyProcessed","nameLocation":"1105:23:122","parameters":{"id":68667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68666,"mutability":"mutable","name":"messageNonce","nameLocation":"1137:12:122","nodeType":"VariableDeclaration","scope":68668,"src":"1129:20:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68665,"name":"uint256","nodeType":"ElementaryTypeName","src":"1129:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1128:22:122"}},{"id":68673,"nodeType":"ErrorDefinition","src":"1263:46:122","nodes":[],"documentation":{"id":68669,"nodeType":"StructuredDocumentation","src":"1157:101:122","text":" @dev Merkle root is not found for the block number in MessageQueue smart contract."},"errorSelector":"55d7a68b","name":"MerkleRootNotFound","nameLocation":"1269:18:122","parameters":{"id":68672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68671,"mutability":"mutable","name":"blockNumber","nameLocation":"1296:11:122","nodeType":"VariableDeclaration","scope":68673,"src":"1288:19:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68670,"name":"uint256","nodeType":"ElementaryTypeName","src":"1288:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1287:21:122"}},{"id":68676,"nodeType":"ErrorDefinition","src":"1376:33:122","nodes":[],"documentation":{"id":68674,"nodeType":"StructuredDocumentation","src":"1315:56:122","text":" @dev Merkle root delay is not passed."},"errorSelector":"a4f7d3e9","name":"MerkleRootDelayNotPassed","nameLocation":"1382:24:122","parameters":{"id":68675,"nodeType":"ParameterList","parameters":[],"src":"1406:2:122"}},{"id":68679,"nodeType":"ErrorDefinition","src":"1468:27:122","nodes":[],"documentation":{"id":68677,"nodeType":"StructuredDocumentation","src":"1415:48:122","text":" @dev Merkle proof is invalid."},"errorSelector":"b05e92fa","name":"InvalidMerkleProof","nameLocation":"1474:18:122","parameters":{"id":68678,"nodeType":"ParameterList","parameters":[],"src":"1492:2:122"}},{"id":68684,"nodeType":"ErrorDefinition","src":"1557:48:122","nodes":[],"documentation":{"id":68680,"nodeType":"StructuredDocumentation","src":"1501:51:122","text":" @dev Merkle root is already set."},"errorSelector":"8d60c7ab","name":"MerkleRootAlreadySet","nameLocation":"1563:20:122","parameters":{"id":68683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68682,"mutability":"mutable","name":"blockNumber","nameLocation":"1592:11:122","nodeType":"VariableDeclaration","scope":68684,"src":"1584:19:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68681,"name":"uint256","nodeType":"ElementaryTypeName","src":"1584:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1583:21:122"}},{"id":68687,"nodeType":"ErrorDefinition","src":"1675:30:122","nodes":[],"documentation":{"id":68685,"nodeType":"StructuredDocumentation","src":"1611:59:122","text":" @dev Caller is not emergency stop admin."},"errorSelector":"662cadb5","name":"NotEmergencyStopAdmin","nameLocation":"1681:21:122","parameters":{"id":68686,"nodeType":"ParameterList","parameters":[],"src":"1702:2:122"}},{"id":68690,"nodeType":"ErrorDefinition","src":"1778:33:122","nodes":[],"documentation":{"id":68688,"nodeType":"StructuredDocumentation","src":"1711:62:122","text":" @dev Caller is not emergency stop observer."},"errorSelector":"d3e7b381","name":"NotEmergencyStopObserver","nameLocation":"1784:24:122","parameters":{"id":68689,"nodeType":"ParameterList","parameters":[],"src":"1808:2:122"}},{"id":68697,"nodeType":"ErrorDefinition","src":"1883:74:122","nodes":[],"documentation":{"id":68691,"nodeType":"StructuredDocumentation","src":"1817:61:122","text":" @dev Block number is before genesis block."},"errorSelector":"e370b92d","name":"BlockNumberBeforeGenesis","nameLocation":"1889:24:122","parameters":{"id":68696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68693,"mutability":"mutable","name":"blockNumber","nameLocation":"1922:11:122","nodeType":"VariableDeclaration","scope":68697,"src":"1914:19:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68692,"name":"uint256","nodeType":"ElementaryTypeName","src":"1914:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":68695,"mutability":"mutable","name":"genesisBlock","nameLocation":"1943:12:122","nodeType":"VariableDeclaration","scope":68697,"src":"1935:20:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68694,"name":"uint256","nodeType":"ElementaryTypeName","src":"1935:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1913:43:122"}},{"id":68704,"nodeType":"ErrorDefinition","src":"2038:69:122","nodes":[],"documentation":{"id":68698,"nodeType":"StructuredDocumentation","src":"1963:70:122","text":" @dev Block number is too far from max block number."},"errorSelector":"3263b70a","name":"BlockNumberTooFar","nameLocation":"2044:17:122","parameters":{"id":68703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68700,"mutability":"mutable","name":"blockNumber","nameLocation":"2070:11:122","nodeType":"VariableDeclaration","scope":68704,"src":"2062:19:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68699,"name":"uint256","nodeType":"ElementaryTypeName","src":"2062:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":68702,"mutability":"mutable","name":"maxBlockNumber","nameLocation":"2091:14:122","nodeType":"VariableDeclaration","scope":68704,"src":"2083:22:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68701,"name":"uint256","nodeType":"ElementaryTypeName","src":"2083:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2061:45:122"}},{"id":68709,"nodeType":"EventDefinition","src":"2190:51:122","nodes":[],"anonymous":false,"documentation":{"id":68705,"nodeType":"StructuredDocumentation","src":"2113:72:122","text":" @dev Emitted when challenging root status is enabled."},"eventSelector":"9a878a4ae6a3ebc7d241df3b1837491b2b9a9cdd0580170a7f2c555d7b15ad8b","name":"ChallengeRootEnabled","nameLocation":"2196:20:122","parameters":{"id":68708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68707,"indexed":false,"mutability":"mutable","name":"untilTimestamp","nameLocation":"2225:14:122","nodeType":"VariableDeclaration","scope":68709,"src":"2217:22:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68706,"name":"uint256","nodeType":"ElementaryTypeName","src":"2217:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2216:24:122"}},{"id":68712,"nodeType":"EventDefinition","src":"2325:30:122","nodes":[],"anonymous":false,"documentation":{"id":68710,"nodeType":"StructuredDocumentation","src":"2247:73:122","text":" @dev Emitted when challenging root status is disabled."},"eventSelector":"a6262a506984c4ee15f889b617462c54ac45d6d7739c9cdceea59098ee5edeb8","name":"ChallengeRootDisabled","nameLocation":"2331:21:122","parameters":{"id":68711,"nodeType":"ParameterList","parameters":[],"src":"2352:2:122"}},{"id":68715,"nodeType":"EventDefinition","src":"2436:29:122","nodes":[],"anonymous":false,"documentation":{"id":68713,"nodeType":"StructuredDocumentation","src":"2361:70:122","text":" @dev Emitted when emergency stop status is enabled."},"eventSelector":"015567d35557fdfcbb3bbfe9dbf4f5c651cb9e461e784ac02c8152fbdb731971","name":"EmergencyStopEnabled","nameLocation":"2442:20:122","parameters":{"id":68714,"nodeType":"ParameterList","parameters":[],"src":"2462:2:122"}},{"id":68718,"nodeType":"EventDefinition","src":"2622:30:122","nodes":[],"anonymous":false,"documentation":{"id":68716,"nodeType":"StructuredDocumentation","src":"2471:146:122","text":" @dev Emitted when emergency stop status is disabled.\n Should be emitted on upgradeV2 function of the smart contract."},"eventSelector":"733865ee5918bf41dfad0ca1d8ddaa4c1d18103ae3d21e7436828b52762b87e0","name":"EmergencyStopDisabled","nameLocation":"2628:21:122","parameters":{"id":68717,"nodeType":"ParameterList","parameters":[],"src":"2649:2:122"}},{"id":68725,"nodeType":"EventDefinition","src":"2740:58:122","nodes":[],"anonymous":false,"documentation":{"id":68719,"nodeType":"StructuredDocumentation","src":"2658:77:122","text":" @dev Emitted when block number and merkle root are stored."},"eventSelector":"48211a20c285b6b077b7917b8bb118eaa92efdfb8fa2e3b114ffa253e0b665ae","name":"MerkleRoot","nameLocation":"2746:10:122","parameters":{"id":68724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68721,"indexed":false,"mutability":"mutable","name":"blockNumber","nameLocation":"2765:11:122","nodeType":"VariableDeclaration","scope":68725,"src":"2757:19:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68720,"name":"uint256","nodeType":"ElementaryTypeName","src":"2757:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":68723,"indexed":false,"mutability":"mutable","name":"merkleRoot","nameLocation":"2786:10:122","nodeType":"VariableDeclaration","scope":68725,"src":"2778:18:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68722,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2778:7:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2756:41:122"}},{"id":68728,"nodeType":"EventDefinition","src":"2898:33:122","nodes":[],"anonymous":false,"documentation":{"id":68726,"nodeType":"StructuredDocumentation","src":"2804:89:122","text":" @dev Emitted when message processing is allowed during emergency stop."},"eventSelector":"9d3e19ea897a0042d94736364efa77853151ca0c20a04f5d4e930a1043122ef8","name":"MessageProcessingAllowed","nameLocation":"2904:24:122","parameters":{"id":68727,"nodeType":"ParameterList","parameters":[],"src":"2928:2:122"}},{"id":68739,"nodeType":"EventDefinition","src":"3000:115:122","nodes":[],"anonymous":false,"documentation":{"id":68729,"nodeType":"StructuredDocumentation","src":"2937:58:122","text":" @dev Emitted when message is processed."},"eventSelector":"994c669cfd9c0453d42c933a11c002a34d12d85563aebe99ca525fffc45454f8","name":"MessageProcessed","nameLocation":"3006:16:122","parameters":{"id":68738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68731,"indexed":false,"mutability":"mutable","name":"blockNumber","nameLocation":"3031:11:122","nodeType":"VariableDeclaration","scope":68739,"src":"3023:19:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68730,"name":"uint256","nodeType":"ElementaryTypeName","src":"3023:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":68733,"indexed":false,"mutability":"mutable","name":"messageHash","nameLocation":"3052:11:122","nodeType":"VariableDeclaration","scope":68739,"src":"3044:19:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68732,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3044:7:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":68735,"indexed":false,"mutability":"mutable","name":"messageNonce","nameLocation":"3073:12:122","nodeType":"VariableDeclaration","scope":68739,"src":"3065:20:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68734,"name":"uint256","nodeType":"ElementaryTypeName","src":"3065:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":68737,"indexed":false,"mutability":"mutable","name":"messageDestination","nameLocation":"3095:18:122","nodeType":"VariableDeclaration","scope":68739,"src":"3087:26:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68736,"name":"address","nodeType":"ElementaryTypeName","src":"3087:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3022:92:122"}},{"id":68745,"nodeType":"FunctionDefinition","src":"3240:59:122","nodes":[],"documentation":{"id":68740,"nodeType":"StructuredDocumentation","src":"3121:114:122","text":" @dev Returns governance admin address.\n @return governanceAdmin Governance admin address."},"functionSelector":"0058f6b8","implemented":false,"kind":"function","modifiers":[],"name":"governanceAdmin","nameLocation":"3249:15:122","parameters":{"id":68741,"nodeType":"ParameterList","parameters":[],"src":"3264:2:122"},"returnParameters":{"id":68744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68743,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68745,"src":"3290:7:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68742,"name":"address","nodeType":"ElementaryTypeName","src":"3290:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3289:9:122"},"scope":68857,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":68751,"nodeType":"FunctionDefinition","src":"3427:60:122","nodes":[],"documentation":{"id":68746,"nodeType":"StructuredDocumentation","src":"3305:117:122","text":" @dev Returns governance pauser address.\n @return governancePauser Governance pauser address."},"functionSelector":"c81eb797","implemented":false,"kind":"function","modifiers":[],"name":"governancePauser","nameLocation":"3436:16:122","parameters":{"id":68747,"nodeType":"ParameterList","parameters":[],"src":"3452:2:122"},"returnParameters":{"id":68750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68749,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68751,"src":"3478:7:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68748,"name":"address","nodeType":"ElementaryTypeName","src":"3478:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3477:9:122"},"scope":68857,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":68757,"nodeType":"FunctionDefinition","src":"3623:62:122","nodes":[],"documentation":{"id":68752,"nodeType":"StructuredDocumentation","src":"3493:125:122","text":" @dev Returns emergency stop admin address.\n @return emergencyStopAdmin Emergency stop admin address."},"functionSelector":"b13f222c","implemented":false,"kind":"function","modifiers":[],"name":"emergencyStopAdmin","nameLocation":"3632:18:122","parameters":{"id":68753,"nodeType":"ParameterList","parameters":[],"src":"3650:2:122"},"returnParameters":{"id":68756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68755,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68757,"src":"3676:7:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68754,"name":"address","nodeType":"ElementaryTypeName","src":"3676:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3675:9:122"},"scope":68857,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":68764,"nodeType":"FunctionDefinition","src":"3833:75:122","nodes":[],"documentation":{"id":68758,"nodeType":"StructuredDocumentation","src":"3691:137:122","text":" @dev Returns list of emergency stop observers.\n @return emergencyStopObservers List of emergency stop observers."},"functionSelector":"76afc14f","implemented":false,"kind":"function","modifiers":[],"name":"emergencyStopObservers","nameLocation":"3842:22:122","parameters":{"id":68759,"nodeType":"ParameterList","parameters":[],"src":"3864:2:122"},"returnParameters":{"id":68763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68762,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68764,"src":"3890:16:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":68760,"name":"address","nodeType":"ElementaryTypeName","src":"3890:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":68761,"nodeType":"ArrayTypeName","src":"3890:9:122","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3889:18:122"},"scope":68857,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":68770,"nodeType":"FunctionDefinition","src":"4129:52:122","nodes":[],"documentation":{"id":68765,"nodeType":"StructuredDocumentation","src":"3914:210:122","text":" @dev Returns verifier address.\n Verifier is smart contract that is responsible for verifying\n the validity of the Merkle proof.\n @return verifier Verifier address."},"functionSelector":"2b7ac3f3","implemented":false,"kind":"function","modifiers":[],"name":"verifier","nameLocation":"4138:8:122","parameters":{"id":68766,"nodeType":"ParameterList","parameters":[],"src":"4146:2:122"},"returnParameters":{"id":68769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68768,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68770,"src":"4172:7:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68767,"name":"address","nodeType":"ElementaryTypeName","src":"4172:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4171:9:122"},"scope":68857,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":68776,"nodeType":"FunctionDefinition","src":"4306:58:122","nodes":[],"documentation":{"id":68771,"nodeType":"StructuredDocumentation","src":"4187:114:122","text":" @dev Returns challenging root status.\n @return isChallengingRoot challenging root status."},"functionSelector":"52d190f3","implemented":false,"kind":"function","modifiers":[],"name":"isChallengingRoot","nameLocation":"4315:17:122","parameters":{"id":68772,"nodeType":"ParameterList","parameters":[],"src":"4332:2:122"},"returnParameters":{"id":68775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68774,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68776,"src":"4358:4:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":68773,"name":"bool","nodeType":"ElementaryTypeName","src":"4358:4:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4357:6:122"},"scope":68857,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":68782,"nodeType":"FunctionDefinition","src":"4486:59:122","nodes":[],"documentation":{"id":68777,"nodeType":"StructuredDocumentation","src":"4370:111:122","text":" @dev Returns emergency stop status.\n @return isEmergencyStopped emergency stop status."},"functionSelector":"fddd4837","implemented":false,"kind":"function","modifiers":[],"name":"isEmergencyStopped","nameLocation":"4495:18:122","parameters":{"id":68778,"nodeType":"ParameterList","parameters":[],"src":"4513:2:122"},"returnParameters":{"id":68781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68780,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68782,"src":"4539:4:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":68779,"name":"bool","nodeType":"ElementaryTypeName","src":"4539:4:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4538:6:122"},"scope":68857,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":68788,"nodeType":"FunctionDefinition","src":"4659:56:122","nodes":[],"documentation":{"id":68783,"nodeType":"StructuredDocumentation","src":"4551:103:122","text":" @dev Returns genesis block number.\n @return genesisBlock Genesis block number."},"functionSelector":"4cdc9c63","implemented":false,"kind":"function","modifiers":[],"name":"genesisBlock","nameLocation":"4668:12:122","parameters":{"id":68784,"nodeType":"ParameterList","parameters":[],"src":"4680:2:122"},"returnParameters":{"id":68787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68786,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68788,"src":"4706:7:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68785,"name":"uint256","nodeType":"ElementaryTypeName","src":"4706:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4705:9:122"},"scope":68857,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":68794,"nodeType":"FunctionDefinition","src":"4831:58:122","nodes":[],"documentation":{"id":68789,"nodeType":"StructuredDocumentation","src":"4721:105:122","text":" @dev Returns maximum block number.\n @return maxBlockNumber Maximum block number."},"functionSelector":"a912fd25","implemented":false,"kind":"function","modifiers":[],"name":"maxBlockNumber","nameLocation":"4840:14:122","parameters":{"id":68790,"nodeType":"ParameterList","parameters":[],"src":"4854:2:122"},"returnParameters":{"id":68793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68792,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68794,"src":"4880:7:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68791,"name":"uint256","nodeType":"ElementaryTypeName","src":"4880:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4879:9:122"},"scope":68857,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":68798,"nodeType":"FunctionDefinition","src":"5290:34:122","nodes":[],"documentation":{"id":68795,"nodeType":"StructuredDocumentation","src":"4895:390:122","text":" @dev Puts MessageQueue into a high-priority paused state.\n Only the emergency stop admin or time expiry (CHALLENGE_ROOT_DELAY) can lift it.\n @dev Reverts if:\n - msg.sender is not emergency stop observer with `NotEmergencyStopObserver` error.\n @dev Emits `ChallengeRootEnabled(block.timestamp + CHALLENGE_ROOT_DELAY)` event."},"functionSelector":"87e97e8c","implemented":false,"kind":"function","modifiers":[],"name":"challengeRoot","nameLocation":"5299:13:122","parameters":{"id":68796,"nodeType":"ParameterList","parameters":[],"src":"5312:2:122"},"returnParameters":{"id":68797,"nodeType":"ParameterList","parameters":[],"src":"5323:0:122"},"scope":68857,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":68802,"nodeType":"FunctionDefinition","src":"5659:41:122","nodes":[],"documentation":{"id":68799,"nodeType":"StructuredDocumentation","src":"5330:324:122","text":" @dev Disables challenging root status.\n @dev Reverts if:\n - msg.sender is not emergency stop admin with `NotEmergencyStopAdmin` error.\n - challenging root status is not enabled with `ChallengeRootNotEnabled` error.\n @dev Emits `ChallengeRootDisabled` event."},"functionSelector":"0f926c02","implemented":false,"kind":"function","modifiers":[],"name":"disableChallengeRoot","nameLocation":"5668:20:122","parameters":{"id":68800,"nodeType":"ParameterList","parameters":[],"src":"5688:2:122"},"returnParameters":{"id":68801,"nodeType":"ParameterList","parameters":[],"src":"5699:0:122"},"scope":68857,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":68806,"nodeType":"FunctionDefinition","src":"6001:43:122","nodes":[],"documentation":{"id":68803,"nodeType":"StructuredDocumentation","src":"5706:290:122","text":" @dev Allows message processing when emergency stop is enabled.\n @dev Reverts if:\n - msg.sender is not emergency stop admin with `NotEmergencyStopAdmin` error.\n - emergency stop status is not enabled with `EmergencyStopNotEnabled` error."},"functionSelector":"00490745","implemented":false,"kind":"function","modifiers":[],"name":"allowMessageProcessing","nameLocation":"6010:22:122","parameters":{"id":68804,"nodeType":"ParameterList","parameters":[],"src":"6032:2:122"},"returnParameters":{"id":68805,"nodeType":"ParameterList","parameters":[],"src":"6043:0:122"},"scope":68857,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":68816,"nodeType":"FunctionDefinition","src":"6913:98:122","nodes":[],"documentation":{"id":68807,"nodeType":"StructuredDocumentation","src":"6050:858:122","text":" @dev Receives, verifies and stores Merkle roots from Vara Network.\n Upon successfully storing data about block number and corresponding Merkle root,\n MessageQueue smart contract will emit a `MerkleRoot` event.\n It is important to note that anyone can submit a Merkle root because only\n validated Merkle roots will be stored in the MessageQueue smart contract.\n @param blockNumber Block number on Vara Network\n @param merkleRoot Merkle root of transactions included in block with corresponding block number\n @param proof Serialised Plonk proof (using gnark's `MarshalSolidity`).\n @dev Reverts if emergency stop status is enabled with `EmergencyStop` error.\n @dev Reverts if `proof` or `publicInputs` are malformed with `InvalidPlonkProof` error."},"functionSelector":"cca66a9d","implemented":false,"kind":"function","modifiers":[],"name":"submitMerkleRoot","nameLocation":"6922:16:122","parameters":{"id":68814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68809,"mutability":"mutable","name":"blockNumber","nameLocation":"6947:11:122","nodeType":"VariableDeclaration","scope":68816,"src":"6939:19:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68808,"name":"uint256","nodeType":"ElementaryTypeName","src":"6939:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":68811,"mutability":"mutable","name":"merkleRoot","nameLocation":"6968:10:122","nodeType":"VariableDeclaration","scope":68816,"src":"6960:18:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68810,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6960:7:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":68813,"mutability":"mutable","name":"proof","nameLocation":"6995:5:122","nodeType":"VariableDeclaration","scope":68816,"src":"6980:20:122","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":68812,"name":"bytes","nodeType":"ElementaryTypeName","src":"6980:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6938:63:122"},"returnParameters":{"id":68815,"nodeType":"ParameterList","parameters":[],"src":"7010:0:122"},"scope":68857,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":68824,"nodeType":"FunctionDefinition","src":"7299:76:122","nodes":[],"documentation":{"id":68817,"nodeType":"StructuredDocumentation","src":"7017:277:122","text":" @dev Returns merkle root for specified block number.\n Returns `bytes32(0)` if merkle root was not provided for specified block number.\n @param blockNumber Target block number.\n @return merkleRoot Merkle root for specified block number."},"functionSelector":"0aab8ba5","implemented":false,"kind":"function","modifiers":[],"name":"getMerkleRoot","nameLocation":"7308:13:122","parameters":{"id":68820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68819,"mutability":"mutable","name":"blockNumber","nameLocation":"7330:11:122","nodeType":"VariableDeclaration","scope":68824,"src":"7322:19:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68818,"name":"uint256","nodeType":"ElementaryTypeName","src":"7322:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7321:21:122"},"returnParameters":{"id":68823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68822,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68824,"src":"7366:7:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68821,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7366:7:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7365:9:122"},"scope":68857,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":68832,"nodeType":"FunctionDefinition","src":"7643:84:122","nodes":[],"documentation":{"id":68825,"nodeType":"StructuredDocumentation","src":"7381:257:122","text":" @dev Returns timestamp when merkle root was set.\n Returns `0` if merkle root was not provided for specified block number.\n @param merkleRoot Target merkle root.\n @return timestamp Timestamp when merkle root was set."},"functionSelector":"4610d3aa","implemented":false,"kind":"function","modifiers":[],"name":"getMerkleRootTimestamp","nameLocation":"7652:22:122","parameters":{"id":68828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68827,"mutability":"mutable","name":"merkleRoot","nameLocation":"7683:10:122","nodeType":"VariableDeclaration","scope":68832,"src":"7675:18:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68826,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7675:7:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7674:20:122"},"returnParameters":{"id":68831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68830,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68832,"src":"7718:7:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68829,"name":"uint256","nodeType":"ElementaryTypeName","src":"7718:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7717:9:122"},"scope":68857,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":68848,"nodeType":"FunctionDefinition","src":"9516:196:122","nodes":[],"documentation":{"id":68833,"nodeType":"StructuredDocumentation","src":"7733:1778:122","text":" @dev Verifies and processes message originated from Vara Network.\n In this process, MessageQueue smart contract will calculate Merkle root\n for message and validate that it corresponds to Merkle root which is already stored\n in MessageQueue smart contract for same block number. If proof is correct, nonce of received\n message will be stored in smart contract and message will be forwarded to adequate message\n processor, either ERC20Manager or Governance smart contract.\n Upon successful processing of the message `MessageProcessed` event is emitted.\n It is important to note that anyone can submit a message because all messages\n will be validated against previously stored Merkle roots in the MessageQueue smart contract.\n @param blockNumber Block number of block containing target merkle tree.\n @param totalLeaves Number of leaves in target merkle tree.\n @param leafIndex Index of leaf containing target message.\n @param message Target message.\n @param proof Merkle proof of inclusion of leaf #`leafIndex` into target merkle tree that\n was included into `blockNumber`.\n @dev Reverts if:\n - MessageQueue is in challenging root status with `ChallengeRoot` error.\n - MessageQueue is paused and message source is not any governance address.\n - MessageQueue emergency stop status is enabled and caller is not emergency stop admin.\n - Message nonce is already processed.\n - Merkle root is not set for the block number in MessageQueue smart contract.\n - Merkle proof is invalid.\n - Message processing fails."},"functionSelector":"93eb47e9","implemented":false,"kind":"function","modifiers":[],"name":"processMessage","nameLocation":"9525:14:122","parameters":{"id":68846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68835,"mutability":"mutable","name":"blockNumber","nameLocation":"9557:11:122","nodeType":"VariableDeclaration","scope":68848,"src":"9549:19:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68834,"name":"uint256","nodeType":"ElementaryTypeName","src":"9549:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":68837,"mutability":"mutable","name":"totalLeaves","nameLocation":"9586:11:122","nodeType":"VariableDeclaration","scope":68848,"src":"9578:19:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68836,"name":"uint256","nodeType":"ElementaryTypeName","src":"9578:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":68839,"mutability":"mutable","name":"leafIndex","nameLocation":"9615:9:122","nodeType":"VariableDeclaration","scope":68848,"src":"9607:17:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68838,"name":"uint256","nodeType":"ElementaryTypeName","src":"9607:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":68842,"mutability":"mutable","name":"message","nameLocation":"9655:7:122","nodeType":"VariableDeclaration","scope":68848,"src":"9634:28:122","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_VaraMessage_$68645_calldata_ptr","typeString":"struct VaraMessage"},"typeName":{"id":68841,"nodeType":"UserDefinedTypeName","pathNode":{"id":68840,"name":"VaraMessage","nameLocations":["9634:11:122"],"nodeType":"IdentifierPath","referencedDeclaration":68645,"src":"9634:11:122"},"referencedDeclaration":68645,"src":"9634:11:122","typeDescriptions":{"typeIdentifier":"t_struct$_VaraMessage_$68645_storage_ptr","typeString":"struct VaraMessage"}},"visibility":"internal"},{"constant":false,"id":68845,"mutability":"mutable","name":"proof","nameLocation":"9691:5:122","nodeType":"VariableDeclaration","scope":68848,"src":"9672:24:122","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":68843,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9672:7:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":68844,"nodeType":"ArrayTypeName","src":"9672:9:122","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"9539:163:122"},"returnParameters":{"id":68847,"nodeType":"ParameterList","parameters":[],"src":"9711:0:122"},"scope":68857,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":68856,"nodeType":"FunctionDefinition","src":"9925:72:122","nodes":[],"documentation":{"id":68849,"nodeType":"StructuredDocumentation","src":"9718:202:122","text":" @dev Checks if message was already processed.\n @param messageNonce Message nonce to check.\n @return isProcessed `true` if message was already processed, `false` otherwise."},"functionSelector":"bfe7edd7","implemented":false,"kind":"function","modifiers":[],"name":"isProcessed","nameLocation":"9934:11:122","parameters":{"id":68852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68851,"mutability":"mutable","name":"messageNonce","nameLocation":"9954:12:122","nodeType":"VariableDeclaration","scope":68856,"src":"9946:20:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68850,"name":"uint256","nodeType":"ElementaryTypeName","src":"9946:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9945:22:122"},"returnParameters":{"id":68855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68854,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68856,"src":"9991:4:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":68853,"name":"bool","nodeType":"ElementaryTypeName","src":"9991:4:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9990:6:122"},"scope":68857,"stateMutability":"view","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":68647,"name":"IPausable","nameLocations":["547:9:122"],"nodeType":"IdentifierPath","referencedDeclaration":68919,"src":"547:9:122"},"id":68648,"nodeType":"InheritanceSpecifier","src":"547:9:122"}],"canonicalName":"IMessageQueue","contractDependencies":[],"contractKind":"interface","documentation":{"id":68646,"nodeType":"StructuredDocumentation","src":"463:56:122","text":" @dev Interface for the MessageQueue contract."},"fullyImplemented":false,"linearizedBaseContracts":[68857,68919],"name":"IMessageQueue","nameLocation":"530:13:122","scope":68908,"usedErrors":[68651,68654,68657,68660,68663,68668,68673,68676,68679,68684,68687,68690,68697,68704],"usedEvents":[68709,68712,68715,68718,68725,68728,68739]},{"id":68907,"nodeType":"ContractDefinition","src":"10050:797:122","nodes":[{"id":68882,"nodeType":"FunctionDefinition","src":"10199:261:122","nodes":[],"body":{"id":68881,"nodeType":"Block","src":"10283:177:122","nodes":[],"statements":[{"documentation":"forge-lint: disable-next-line(asm-keccak256)","expression":{"arguments":[{"arguments":[{"expression":{"id":68870,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68862,"src":"10384:7:122","typeDescriptions":{"typeIdentifier":"t_struct$_VaraMessage_$68645_calldata_ptr","typeString":"struct VaraMessage calldata"}},"id":68871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10392:5:122","memberName":"nonce","nodeType":"MemberAccess","referencedDeclaration":68638,"src":"10384:13:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":68872,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68862,"src":"10399:7:122","typeDescriptions":{"typeIdentifier":"t_struct$_VaraMessage_$68645_calldata_ptr","typeString":"struct VaraMessage calldata"}},"id":68873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10407:6:122","memberName":"source","nodeType":"MemberAccess","referencedDeclaration":68640,"src":"10399:14:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":68874,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68862,"src":"10415:7:122","typeDescriptions":{"typeIdentifier":"t_struct$_VaraMessage_$68645_calldata_ptr","typeString":"struct VaraMessage calldata"}},"id":68875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10423:11:122","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":68642,"src":"10415:19:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":68876,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68862,"src":"10436:7:122","typeDescriptions":{"typeIdentifier":"t_struct$_VaraMessage_$68645_calldata_ptr","typeString":"struct VaraMessage calldata"}},"id":68877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10444:7:122","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":68644,"src":"10436:15:122","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":68868,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10367:3:122","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":68869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10371:12:122","memberName":"encodePacked","nodeType":"MemberAccess","src":"10367:16:122","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":68878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10367:85:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":68867,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10357:9:122","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":68879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10357:96:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":68866,"id":68880,"nodeType":"Return","src":"10350:103:122"}]},"documentation":{"id":68859,"nodeType":"StructuredDocumentation","src":"10071:123:122","text":" @dev Hashes VaraMessage.\n @param message Message to hash.\n @return hash Hash of the message."},"implemented":true,"kind":"function","modifiers":[],"name":"hashCalldata","nameLocation":"10208:12:122","parameters":{"id":68863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68862,"mutability":"mutable","name":"message","nameLocation":"10242:7:122","nodeType":"VariableDeclaration","scope":68882,"src":"10221:28:122","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_VaraMessage_$68645_calldata_ptr","typeString":"struct VaraMessage"},"typeName":{"id":68861,"nodeType":"UserDefinedTypeName","pathNode":{"id":68860,"name":"VaraMessage","nameLocations":["10221:11:122"],"nodeType":"IdentifierPath","referencedDeclaration":68645,"src":"10221:11:122"},"referencedDeclaration":68645,"src":"10221:11:122","typeDescriptions":{"typeIdentifier":"t_struct$_VaraMessage_$68645_storage_ptr","typeString":"struct VaraMessage"}},"visibility":"internal"}],"src":"10220:30:122"},"returnParameters":{"id":68866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68865,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68882,"src":"10274:7:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68864,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10274:7:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10273:9:122"},"scope":68907,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":68906,"nodeType":"FunctionDefinition","src":"10594:251:122","nodes":[],"body":{"id":68905,"nodeType":"Block","src":"10668:177:122","nodes":[],"statements":[{"documentation":"forge-lint: disable-next-line(asm-keccak256)","expression":{"arguments":[{"arguments":[{"expression":{"id":68894,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68886,"src":"10769:7:122","typeDescriptions":{"typeIdentifier":"t_struct$_VaraMessage_$68645_memory_ptr","typeString":"struct VaraMessage memory"}},"id":68895,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10777:5:122","memberName":"nonce","nodeType":"MemberAccess","referencedDeclaration":68638,"src":"10769:13:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":68896,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68886,"src":"10784:7:122","typeDescriptions":{"typeIdentifier":"t_struct$_VaraMessage_$68645_memory_ptr","typeString":"struct VaraMessage memory"}},"id":68897,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10792:6:122","memberName":"source","nodeType":"MemberAccess","referencedDeclaration":68640,"src":"10784:14:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":68898,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68886,"src":"10800:7:122","typeDescriptions":{"typeIdentifier":"t_struct$_VaraMessage_$68645_memory_ptr","typeString":"struct VaraMessage memory"}},"id":68899,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10808:11:122","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":68642,"src":"10800:19:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":68900,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68886,"src":"10821:7:122","typeDescriptions":{"typeIdentifier":"t_struct$_VaraMessage_$68645_memory_ptr","typeString":"struct VaraMessage memory"}},"id":68901,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10829:7:122","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":68644,"src":"10821:15:122","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":68892,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10752:3:122","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":68893,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10756:12:122","memberName":"encodePacked","nodeType":"MemberAccess","src":"10752:16:122","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":68902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10752:85:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":68891,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10742:9:122","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":68903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10742:96:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":68890,"id":68904,"nodeType":"Return","src":"10735:103:122"}]},"documentation":{"id":68883,"nodeType":"StructuredDocumentation","src":"10466:123:122","text":" @dev Hashes VaraMessage.\n @param message Message to hash.\n @return hash Hash of the message."},"implemented":true,"kind":"function","modifiers":[],"name":"hash","nameLocation":"10603:4:122","parameters":{"id":68887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68886,"mutability":"mutable","name":"message","nameLocation":"10627:7:122","nodeType":"VariableDeclaration","scope":68906,"src":"10608:26:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaraMessage_$68645_memory_ptr","typeString":"struct VaraMessage"},"typeName":{"id":68885,"nodeType":"UserDefinedTypeName","pathNode":{"id":68884,"name":"VaraMessage","nameLocations":["10608:11:122"],"nodeType":"IdentifierPath","referencedDeclaration":68645,"src":"10608:11:122"},"referencedDeclaration":68645,"src":"10608:11:122","typeDescriptions":{"typeIdentifier":"t_struct$_VaraMessage_$68645_storage_ptr","typeString":"struct VaraMessage"}},"visibility":"internal"}],"src":"10607:28:122"},"returnParameters":{"id":68890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68889,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68906,"src":"10659:7:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68888,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10659:7:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10658:9:122"},"scope":68907,"stateMutability":"pure","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[],"canonicalName":"Hasher","contractDependencies":[],"contractKind":"library","documentation":{"id":68858,"nodeType":"StructuredDocumentation","src":"10001:48:122","text":" @dev Library for hashing VaraMessage."},"fullyImplemented":true,"linearizedBaseContracts":[68907],"name":"Hasher","nameLocation":"10058:6:122","scope":68908,"usedErrors":[],"usedEvents":[]}],"license":"GPL-3.0-or-later WITH Classpath-exception-2.0"},"id":122}