{"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":"isValidatorInFavorOf","inputs":[{"name":"appContract","type":"address","internalType":"address"},{"name":"lastProcessedBlockNumber","type":"uint256","internalType":"uint256"},{"name":"outputsMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isValidatorInFavorOfAnyClaimInEpoch","inputs":[{"name":"appContract","type":"address","internalType":"address"},{"name":"lastProcessedBlockNumber","type":"uint256","internalType":"uint256"},{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"numOfValidators","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"numOfValidatorsInFavorOf","inputs":[{"name":"appContract","type":"address","internalType":"address"},{"name":"lastProcessedBlockNumber","type":"uint256","internalType":"uint256"},{"name":"outputsMerkleRoot","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"numOfValidatorsInFavorOfAnyClaimInEpoch","inputs":[{"name":"appContract","type":"address","internalType":"address"},{"name":"lastProcessedBlockNumber","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"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":"function","name":"validatorById","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"validatorId","inputs":[{"name":"validator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"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","isValidatorInFavorOf(address,uint256,bytes32,uint256)":"4b84231c","isValidatorInFavorOfAnyClaimInEpoch(address,uint256,uint256)":"4b53459c","numOfValidators()":"1e526e45","numOfValidatorsInFavorOf(address,uint256,bytes32)":"7051bfd5","numOfValidatorsInFavorOfAnyClaimInEpoch(address,uint256)":"446ccbf0","submitClaim(address,uint256,bytes32)":"6470af00","supportsInterface(bytes4)":"01ffc9a7","validatorById(uint256)":"1c45396a","validatorId(address)":"0a6f1fe8"},"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\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"isValidatorInFavorOf\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"appContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lastProcessedBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"isValidatorInFavorOfAnyClaimInEpoch\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numOfValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"appContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lastProcessedBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"outputsMerkleRoot\",\"type\":\"bytes32\"}],\"name\":\"numOfValidatorsInFavorOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"appContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lastProcessedBlockNumber\",\"type\":\"uint256\"}],\"name\":\"numOfValidatorsInFavorOfAnyClaimInEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"validatorById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"validatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\"}},\"isValidatorInFavorOf(address,uint256,bytes32,uint256)\":{\"details\":\"Assumes the provided ID is valid.\",\"params\":{\"appContract\":\"The application contract address\",\"id\":\"The ID of the validator\",\"lastProcessedBlockNumber\":\"The number of the last processed block\",\"outputsMerkleRoot\":\"The outputs Merkle root\"},\"returns\":{\"_0\":\"Whether validator is in favor of claim\"}},\"isValidatorInFavorOfAnyClaimInEpoch(address,uint256,uint256)\":{\"details\":\"Assumes the provided ID is valid.\",\"params\":{\"appContract\":\"The application contract address\",\"id\":\"The ID of the validator\",\"lastProcessedBlockNumber\":\"The number of the last processed block\"},\"returns\":{\"_0\":\"Whether validator is in favor of any claim in the epoch\"}},\"numOfValidatorsInFavorOf(address,uint256,bytes32)\":{\"params\":{\"appContract\":\"The application contract address\",\"lastProcessedBlockNumber\":\"The number of the last processed block\",\"outputsMerkleRoot\":\"The outputs Merkle root\"},\"returns\":{\"_0\":\"Number of validators in favor of claim\"}},\"numOfValidatorsInFavorOfAnyClaimInEpoch(address,uint256)\":{\"params\":{\"appContract\":\"The application contract address\",\"lastProcessedBlockNumber\":\"The number of the last processed block\"},\"returns\":{\"_0\":\"Number of validators in favor of any claim in the epoch\"}},\"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.\"},\"validatorById(uint256)\":{\"details\":\"Validator IDs range from 1 to `N`, the total number of validators.Invalid IDs map to address zero.\",\"params\":{\"id\":\"The validator ID\"}},\"validatorId(address)\":{\"details\":\"Validators have IDs greater than zero.Non-validators are assigned to ID zero.\",\"params\":{\"validator\":\"The validator address\"}}},\"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.\"},\"isValidatorInFavorOf(address,uint256,bytes32,uint256)\":{\"notice\":\"Check whether a validator is in favor of a claim.\"},\"isValidatorInFavorOfAnyClaimInEpoch(address,uint256,uint256)\":{\"notice\":\"Check whether a validator is in favor of any claim in a given epoch.\"},\"numOfValidators()\":{\"notice\":\"Get the number of validators.\"},\"numOfValidatorsInFavorOf(address,uint256,bytes32)\":{\"notice\":\"Get the number of validators in favor of a claim.\"},\"numOfValidatorsInFavorOfAnyClaimInEpoch(address,uint256)\":{\"notice\":\"Get the number of validators in favor of any claim in a given epoch.\"},\"submitClaim(address,uint256,bytes32)\":{\"notice\":\"Submit a claim to the consensus.\"},\"validatorById(uint256)\":{\"notice\":\"Get the address of a validator by its ID.\"},\"validatorId(address)\":{\"notice\":\"Get the ID of a validator.\"}},\"notice\":\"A consensus model controlled by a small, immutable set of `n` validators.You can know the value of `n` by calling the `numOfValidators` function.Upon construction, each validator is assigned a unique number between 1 and `n`. These numbers are used internally instead of addresses for gas optimization reasons.You can list the validators in the quorum by calling the `validatorById` function for each ID from 1 to `n`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/consensus/quorum/IQuorum.sol\":\"IQuorum\"},\"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\"]},\"src/consensus/quorum/IQuorum.sol\":{\"keccak256\":\"0x32a8ba536cdd6e727f7f0046e4daf77a937fa2c5f132c5584086e3a1f042bee1\",\"license\":\"Apache-2.0 (see LICENSE)\",\"urls\":[\"bzz-raw://db9343aa57c1816640f8b05fe6d923ca5ef08ef28cbfdff4c133a74a6e3a0278\",\"dweb:/ipfs/QmYPA4CcB7fiEQFRGtoRqPnCdTwXGGCHCapX15NedEqwwP\"]}},\"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"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function","name":"isValidatorInFavorOf","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"appContract","type":"address"},{"internalType":"uint256","name":"lastProcessedBlockNumber","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function","name":"isValidatorInFavorOfAnyClaimInEpoch","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"numOfValidators","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"appContract","type":"address"},{"internalType":"uint256","name":"lastProcessedBlockNumber","type":"uint256"},{"internalType":"bytes32","name":"outputsMerkleRoot","type":"bytes32"}],"stateMutability":"view","type":"function","name":"numOfValidatorsInFavorOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"appContract","type":"address"},{"internalType":"uint256","name":"lastProcessedBlockNumber","type":"uint256"}],"stateMutability":"view","type":"function","name":"numOfValidatorsInFavorOfAnyClaimInEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"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":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function","name":"validatorById","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"validator","type":"address"}],"stateMutability":"view","type":"function","name":"validatorId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"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"}},"isValidatorInFavorOf(address,uint256,bytes32,uint256)":{"details":"Assumes the provided ID is valid.","params":{"appContract":"The application contract address","id":"The ID of the validator","lastProcessedBlockNumber":"The number of the last processed block","outputsMerkleRoot":"The outputs Merkle root"},"returns":{"_0":"Whether validator is in favor of claim"}},"isValidatorInFavorOfAnyClaimInEpoch(address,uint256,uint256)":{"details":"Assumes the provided ID is valid.","params":{"appContract":"The application contract address","id":"The ID of the validator","lastProcessedBlockNumber":"The number of the last processed block"},"returns":{"_0":"Whether validator is in favor of any claim in the epoch"}},"numOfValidatorsInFavorOf(address,uint256,bytes32)":{"params":{"appContract":"The application contract address","lastProcessedBlockNumber":"The number of the last processed block","outputsMerkleRoot":"The outputs Merkle root"},"returns":{"_0":"Number of validators in favor of claim"}},"numOfValidatorsInFavorOfAnyClaimInEpoch(address,uint256)":{"params":{"appContract":"The application contract address","lastProcessedBlockNumber":"The number of the last processed block"},"returns":{"_0":"Number of validators in favor of any claim in the epoch"}},"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."},"validatorById(uint256)":{"details":"Validator IDs range from 1 to `N`, the total number of validators.Invalid IDs map to address zero.","params":{"id":"The validator ID"}},"validatorId(address)":{"details":"Validators have IDs greater than zero.Non-validators are assigned to ID zero.","params":{"validator":"The validator address"}}},"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."},"isValidatorInFavorOf(address,uint256,bytes32,uint256)":{"notice":"Check whether a validator is in favor of a claim."},"isValidatorInFavorOfAnyClaimInEpoch(address,uint256,uint256)":{"notice":"Check whether a validator is in favor of any claim in a given epoch."},"numOfValidators()":{"notice":"Get the number of validators."},"numOfValidatorsInFavorOf(address,uint256,bytes32)":{"notice":"Get the number of validators in favor of a claim."},"numOfValidatorsInFavorOfAnyClaimInEpoch(address,uint256)":{"notice":"Get the number of validators in favor of any claim in a given epoch."},"submitClaim(address,uint256,bytes32)":{"notice":"Submit a claim to the consensus."},"validatorById(uint256)":{"notice":"Get the address of a validator by its ID."},"validatorId(address)":{"notice":"Get the ID of a validator."}},"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/quorum/IQuorum.sol":"IQuorum"},"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)"},"src/consensus/quorum/IQuorum.sol":{"keccak256":"0x32a8ba536cdd6e727f7f0046e4daf77a937fa2c5f132c5584086e3a1f042bee1","urls":["bzz-raw://db9343aa57c1816640f8b05fe6d923ca5ef08ef28cbfdff4c133a74a6e3a0278","dweb:/ipfs/QmYPA4CcB7fiEQFRGtoRqPnCdTwXGGCHCapX15NedEqwwP"],"license":"Apache-2.0 (see LICENSE)"}},"version":1},"id":33}