{"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":"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":"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","submitClaim(address,uint256,bytes32)":"6470af00","supportsInterface(bytes4)":"01ffc9a7"},"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\":[{\"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\"}],\"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\":\"Each application has its own stream of inputs. See the `IInputBox` interface for calldata-based on-chain data availability.When an input is fed to the application, it may yield several outputs.Since genesis, a Merkle tree of all outputs ever produced is maintained both inside and outside the Cartesi Machine.The claim that validators may submit to the consensus contract is the root of this Merkle tree after processing all base layer blocks until some height.A validator should be able to save transaction fees by not submitting a claim if it was... - already submitted by the validator (see the `ClaimSubmitted` event) or; - already accepted by the consensus (see the `ClaimAccepted` event).The acceptance criteria for claims may depend on the type of consensus, and is not specified by this interface. For example, a claim may be accepted if it was... - submitted by an authority or; - submitted by the majority of a quorum or; - submitted and not proven wrong after some period of time or; - submitted and proven correct through an on-chain tournament.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/consensus/IConsensus.sol\":\"IConsensus\"},\"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/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\"]}},\"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":[{"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"}]}],"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/IConsensus.sol":"IConsensus"},"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/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)"}},"version":1},"id":27}