{"abi":[{"type":"function","name":"getEpochLength","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNumberOfAcceptedClaims","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNumberOfSubmittedClaims","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"isOutputsMerkleRootValid","inputs":[{"name":"appContract","type":"address","internalType":"address"},{"name":"outputsMerkleRoot","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitClaim","inputs":[{"name":"appContract","type":"address","internalType":"address"},{"name":"lastProcessedBlockNumber","type":"uint256","internalType":"uint256"},{"name":"outputsMerkleRoot","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ClaimAccepted","inputs":[{"name":"appContract","type":"address","indexed":true,"internalType":"address"},{"name":"lastProcessedBlockNumber","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"outputsMerkleRoot","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ClaimSubmitted","inputs":[{"name":"submitter","type":"address","indexed":true,"internalType":"address"},{"name":"appContract","type":"address","indexed":true,"internalType":"address"},{"name":"lastProcessedBlockNumber","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"outputsMerkleRoot","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"error","name":"NotEpochFinalBlock","inputs":[{"name":"lastProcessedBlockNumber","type":"uint256","internalType":"uint256"},{"name":"epochLength","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NotFirstClaim","inputs":[{"name":"appContract","type":"address","internalType":"address"},{"name":"lastProcessedBlockNumber","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NotPastBlock","inputs":[{"name":"lastProcessedBlockNumber","type":"uint256","internalType":"uint256"},{"name":"currentBlockNumber","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"getEpochLength()":"cfe8a73b","getNumberOfAcceptedClaims()":"d574f4d7","getNumberOfSubmittedClaims()":"ee5e0faa","isOutputsMerkleRootValid(address,bytes32)":"e5cc8664","owner()":"8da5cb5b","renounceOwnership()":"715018a6","submitClaim(address,uint256,bytes32)":"6470af00","supportsInterface(bytes4)":"01ffc9a7","transferOwnership(address)":"f2fde38b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"lastProcessedBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochLength\",\"type\":\"uint256\"}],\"name\":\"NotEpochFinalBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"appContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lastProcessedBlockNumber\",\"type\":\"uint256\"}],\"name\":\"NotFirstClaim\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"lastProcessedBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentBlockNumber\",\"type\":\"uint256\"}],\"name\":\"NotPastBlock\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"appContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lastProcessedBlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"outputsMerkleRoot\",\"type\":\"bytes32\"}],\"name\":\"ClaimAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"submitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"appContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lastProcessedBlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"outputsMerkleRoot\",\"type\":\"bytes32\"}],\"name\":\"ClaimSubmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getEpochLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNumberOfAcceptedClaims\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNumberOfSubmittedClaims\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"appContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"outputsMerkleRoot\",\"type\":\"bytes32\"}],\"name\":\"isOutputsMerkleRootValid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"appContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lastProcessedBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"outputsMerkleRoot\",\"type\":\"bytes32\"}],\"name\":\"submitClaim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"NotEpochFinalBlock(uint256,uint256)\":[{\"params\":{\"epochLength\":\"The epoch length\",\"lastProcessedBlockNumber\":\"The number of the last processed block\"}}],\"NotFirstClaim(address,uint256)\":[{\"params\":{\"appContract\":\"The application contract address\",\"lastProcessedBlockNumber\":\"The number of the last processed block\"}}],\"NotPastBlock(uint256,uint256)\":[{\"params\":{\"currentBlockNumber\":\"The number of the current block\",\"lastProcessedBlockNumber\":\"The number of the last processed block\"}}]},\"events\":{\"ClaimAccepted(address,uint256,bytes32)\":{\"details\":\"For each application and lastProcessedBlockNumber, there can be at most one accepted claim.\",\"params\":{\"appContract\":\"The application contract address\",\"lastProcessedBlockNumber\":\"The number of the last processed block\",\"outputsMerkleRoot\":\"The outputs Merkle root\"}},\"ClaimSubmitted(address,address,uint256,bytes32)\":{\"params\":{\"appContract\":\"The application contract address\",\"lastProcessedBlockNumber\":\"The number of the last processed block\",\"outputsMerkleRoot\":\"The outputs Merkle root\",\"submitter\":\"The submitter address\"}}},\"kind\":\"dev\",\"methods\":{\"getEpochLength()\":{\"details\":\"The epoch number of a block is defined as the integer division of the block number by the epoch length.\"},\"isOutputsMerkleRootValid(address,bytes32)\":{\"params\":{\"appContract\":\"The application contract address\",\"outputsMerkleRoot\":\"The outputs Merkle root\"}},\"submitClaim(address,uint256,bytes32)\":{\"details\":\"MUST fire a `ClaimSubmitted` event.MAY fire a `ClaimAccepted` event, if the acceptance criteria is met.\",\"params\":{\"appContract\":\"The application contract address\",\"lastProcessedBlockNumber\":\"The number of the last processed block\",\"outputsMerkleRoot\":\"The outputs Merkle root\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"NotEpochFinalBlock(uint256,uint256)\":[{\"notice\":\"The claim contains the number of a block that is not at the end of an epoch (its modulo epoch length is not epoch length - 1).\"}],\"NotFirstClaim(address,uint256)\":[{\"notice\":\"A claim for that application and epoch was already submitted by the validator.\"}],\"NotPastBlock(uint256,uint256)\":[{\"notice\":\"The claim contains the number of a block in the future (it is greater or equal to the current block number).\"}]},\"events\":{\"ClaimAccepted(address,uint256,bytes32)\":{\"notice\":\"MUST trigger when a claim is accepted.\"},\"ClaimSubmitted(address,address,uint256,bytes32)\":{\"notice\":\"MUST trigger when a claim is submitted.\"}},\"kind\":\"user\",\"methods\":{\"getEpochLength()\":{\"notice\":\"Get the epoch length, in number of base layer blocks.\"},\"getNumberOfAcceptedClaims()\":{\"notice\":\"Get the number of claims accepted by the consensus.\"},\"getNumberOfSubmittedClaims()\":{\"notice\":\"Get the number of claims submitted to the consensus.\"},\"isOutputsMerkleRootValid(address,bytes32)\":{\"notice\":\"Check whether an outputs Merkle root is valid.\"},\"submitClaim(address,uint256,bytes32)\":{\"notice\":\"Submit a claim to the consensus.\"}},\"notice\":\"A consensus contract controlled by a single address, the owner.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/consensus/authority/IAuthority.sol\":\"IAuthority\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin-contracts-5.2.0/=dependencies/@openzeppelin-contracts-5.2.0/\",\":forge-std-1.9.6/=dependencies/forge-std-1.9.6/\"],\"viaIR\":true},\"sources\":{\"dependencies/@openzeppelin-contracts-5.2.0/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"src/access/IOwnable.sol\":{\"keccak256\":\"0x826f366603fe6fd715bd912d40e9b4e851c110aea5895522523d800015532f6d\",\"license\":\"Apache-2.0 (see LICENSE)\",\"urls\":[\"bzz-raw://bb115a4a30824bf77e10b63727cea83e7e1e9bf4c3079ed65e3e7c0eaa290272\",\"dweb:/ipfs/QmYpjBNmELeX1NKdPjXcqnssz65pgYpX2g6ahKXisr9aWM\"]},\"src/consensus/IConsensus.sol\":{\"keccak256\":\"0x26491d6a13136dfed5c07b4553c86f8ec3ec2e0de803085620523db9c4f94dd3\",\"license\":\"Apache-2.0 (see LICENSE)\",\"urls\":[\"bzz-raw://6a0efccda9973ca9da9b8a1fa18fba0df9a457a3b46c6d101ee06f6da43eb468\",\"dweb:/ipfs/QmehZJHU6fEmGuA2QkthA9Mka38phw4q4ioX34rqXKp9Pi\"]},\"src/consensus/IOutputsMerkleRootValidator.sol\":{\"keccak256\":\"0x133dfa71847fd6478489e983d53b08b22f5f578634c2103e96a11cd128e81d68\",\"license\":\"Apache-2.0 (see LICENSE)\",\"urls\":[\"bzz-raw://eb43c0a4aa7cd21753a3b92820da37ef58cf29aa4ef5c18a6f2face3e6e94e25\",\"dweb:/ipfs/QmezZmVZV1cfygDYPC8XheVVxaSZt92xQNdEpnRV6Xdh3M\"]},\"src/consensus/authority/IAuthority.sol\":{\"keccak256\":\"0x6b63b7eb9c7deac1184052e58a2fba6e45bc630f1a38225d35cafbd0d5b98b04\",\"license\":\"Apache-2.0 (see LICENSE)\",\"urls\":[\"bzz-raw://a5775335d8d7fbb9d8470259af3fe924fdfc14c35c36f4d860fb3f70f8b9ef3b\",\"dweb:/ipfs/QmdpkdekUhZF1mEeKwkLWw3gDt6M8zTeS148rJ4vhUs8Eb\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"lastProcessedBlockNumber","type":"uint256"},{"internalType":"uint256","name":"epochLength","type":"uint256"}],"type":"error","name":"NotEpochFinalBlock"},{"inputs":[{"internalType":"address","name":"appContract","type":"address"},{"internalType":"uint256","name":"lastProcessedBlockNumber","type":"uint256"}],"type":"error","name":"NotFirstClaim"},{"inputs":[{"internalType":"uint256","name":"lastProcessedBlockNumber","type":"uint256"},{"internalType":"uint256","name":"currentBlockNumber","type":"uint256"}],"type":"error","name":"NotPastBlock"},{"inputs":[{"internalType":"address","name":"appContract","type":"address","indexed":true},{"internalType":"uint256","name":"lastProcessedBlockNumber","type":"uint256","indexed":false},{"internalType":"bytes32","name":"outputsMerkleRoot","type":"bytes32","indexed":false}],"type":"event","name":"ClaimAccepted","anonymous":false},{"inputs":[{"internalType":"address","name":"submitter","type":"address","indexed":true},{"internalType":"address","name":"appContract","type":"address","indexed":true},{"internalType":"uint256","name":"lastProcessedBlockNumber","type":"uint256","indexed":false},{"internalType":"bytes32","name":"outputsMerkleRoot","type":"bytes32","indexed":false}],"type":"event","name":"ClaimSubmitted","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"getEpochLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getNumberOfAcceptedClaims","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getNumberOfSubmittedClaims","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"appContract","type":"address"},{"internalType":"bytes32","name":"outputsMerkleRoot","type":"bytes32"}],"stateMutability":"view","type":"function","name":"isOutputsMerkleRootValid","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"appContract","type":"address"},{"internalType":"uint256","name":"lastProcessedBlockNumber","type":"uint256"},{"internalType":"bytes32","name":"outputsMerkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"submitClaim"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"}],"devdoc":{"kind":"dev","methods":{"getEpochLength()":{"details":"The epoch number of a block is defined as the integer division of the block number by the epoch length."},"isOutputsMerkleRootValid(address,bytes32)":{"params":{"appContract":"The application contract address","outputsMerkleRoot":"The outputs Merkle root"}},"submitClaim(address,uint256,bytes32)":{"details":"MUST fire a `ClaimSubmitted` event.MAY fire a `ClaimAccepted` event, if the acceptance criteria is met.","params":{"appContract":"The application contract address","lastProcessedBlockNumber":"The number of the last processed block","outputsMerkleRoot":"The outputs Merkle root"}},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"version":1},"userdoc":{"kind":"user","methods":{"getEpochLength()":{"notice":"Get the epoch length, in number of base layer blocks."},"getNumberOfAcceptedClaims()":{"notice":"Get the number of claims accepted by the consensus."},"getNumberOfSubmittedClaims()":{"notice":"Get the number of claims submitted to the consensus."},"isOutputsMerkleRootValid(address,bytes32)":{"notice":"Check whether an outputs Merkle root is valid."},"submitClaim(address,uint256,bytes32)":{"notice":"Submit a claim to the consensus."}},"version":1}},"settings":{"remappings":["@openzeppelin-contracts-5.2.0/=dependencies/@openzeppelin-contracts-5.2.0/","forge-std-1.9.6/=dependencies/forge-std-1.9.6/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/consensus/authority/IAuthority.sol":"IAuthority"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"dependencies/@openzeppelin-contracts-5.2.0/utils/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"license":"MIT"},"src/access/IOwnable.sol":{"keccak256":"0x826f366603fe6fd715bd912d40e9b4e851c110aea5895522523d800015532f6d","urls":["bzz-raw://bb115a4a30824bf77e10b63727cea83e7e1e9bf4c3079ed65e3e7c0eaa290272","dweb:/ipfs/QmYpjBNmELeX1NKdPjXcqnssz65pgYpX2g6ahKXisr9aWM"],"license":"Apache-2.0 (see LICENSE)"},"src/consensus/IConsensus.sol":{"keccak256":"0x26491d6a13136dfed5c07b4553c86f8ec3ec2e0de803085620523db9c4f94dd3","urls":["bzz-raw://6a0efccda9973ca9da9b8a1fa18fba0df9a457a3b46c6d101ee06f6da43eb468","dweb:/ipfs/QmehZJHU6fEmGuA2QkthA9Mka38phw4q4ioX34rqXKp9Pi"],"license":"Apache-2.0 (see LICENSE)"},"src/consensus/IOutputsMerkleRootValidator.sol":{"keccak256":"0x133dfa71847fd6478489e983d53b08b22f5f578634c2103e96a11cd128e81d68","urls":["bzz-raw://eb43c0a4aa7cd21753a3b92820da37ef58cf29aa4ef5c18a6f2face3e6e94e25","dweb:/ipfs/QmezZmVZV1cfygDYPC8XheVVxaSZt92xQNdEpnRV6Xdh3M"],"license":"Apache-2.0 (see LICENSE)"},"src/consensus/authority/IAuthority.sol":{"keccak256":"0x6b63b7eb9c7deac1184052e58a2fba6e45bc630f1a38225d35cafbd0d5b98b04","urls":["bzz-raw://a5775335d8d7fbb9d8470259af3fe924fdfc14c35c36f4d860fb3f70f8b9ef3b","dweb:/ipfs/QmdpkdekUhZF1mEeKwkLWw3gDt6M8zTeS148rJ4vhUs8Eb"],"license":"Apache-2.0 (see LICENSE)"}},"version":1},"id":31}