{ "address": "0x4E23664C19a80Bc8Cc12EF03d0286B9A6C88874E", "abi": [ { "inputs": [ { "internalType": "address", "name": "_decider", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyClaimed", "type": "error" }, { "inputs": [], "name": "AlreadySettled", "type": "error" }, { "inputs": [], "name": "AssertionNotFound", "type": "error" }, { "inputs": [], "name": "AssertionProposed", "type": "error" }, { "inputs": [], "name": "AwaitingDecider", "type": "error" }, { "inputs": [], "name": "InvalidTime", "type": "error" }, { "inputs": [], "name": "InvalidValue", "type": "error" }, { "inputs": [], "name": "NotDisputedAssertion", "type": "error" }, { "inputs": [], "name": "NotProposedAssertion", "type": "error" }, { "inputs": [], "name": "OnlyDecider", "type": "error" }, { "inputs": [], "name": "OnlyOwner", "type": "error" }, { "inputs": [], "name": "ProposalDisputed", "type": "error" }, { "inputs": [], "name": "TransferFailed", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "assertionId", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "outcome", "type": "bool" }, { "indexed": false, "internalType": "address", "name": "winner", "type": "address" } ], "name": "AssertionSettled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldDecider", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newDecider", "type": "address" } ], "name": "DeciderUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "assertionId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "asserter", "type": "address" }, { "indexed": false, "internalType": "string", "name": "description", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "reward", "type": "uint256" } ], "name": "EventAsserted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "assertionId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "disputer", "type": "address" } ], "name": "OutcomeDisputed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "assertionId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "proposer", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "outcome", "type": "bool" } ], "name": "OutcomeProposed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "assertionId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "asserter", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RefundClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "assertionId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "winner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RewardClaimed", "type": "event" }, { "inputs": [], "name": "DISPUTE_WINDOW", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINIMUM_ASSERTION_WINDOW", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "description", "type": "string" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" } ], "name": "assertEvent", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "assertions", "outputs": [ { "internalType": "address", "name": "asserter", "type": "address" }, { "internalType": "address", "name": "proposer", "type": "address" }, { "internalType": "address", "name": "disputer", "type": "address" }, { "internalType": "bool", "name": "proposedOutcome", "type": "bool" }, { "internalType": "bool", "name": "resolvedOutcome", "type": "bool" }, { "internalType": "uint256", "name": "reward", "type": "uint256" }, { "internalType": "uint256", "name": "bond", "type": "uint256" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "bool", "name": "claimed", "type": "bool" }, { "internalType": "address", "name": "winner", "type": "address" }, { "internalType": "string", "name": "description", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assertionId", "type": "uint256" } ], "name": "claimDisputedReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assertionId", "type": "uint256" } ], "name": "claimRefund", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assertionId", "type": "uint256" } ], "name": "claimUndisputedReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decider", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assertionId", "type": "uint256" } ], "name": "disputeOutcome", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assertionId", "type": "uint256" } ], "name": "getAssertion", "outputs": [ { "components": [ { "internalType": "address", "name": "asserter", "type": "address" }, { "internalType": "address", "name": "proposer", "type": "address" }, { "internalType": "address", "name": "disputer", "type": "address" }, { "internalType": "bool", "name": "proposedOutcome", "type": "bool" }, { "internalType": "bool", "name": "resolvedOutcome", "type": "bool" }, { "internalType": "uint256", "name": "reward", "type": "uint256" }, { "internalType": "uint256", "name": "bond", "type": "uint256" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "bool", "name": "claimed", "type": "bool" }, { "internalType": "address", "name": "winner", "type": "address" }, { "internalType": "string", "name": "description", "type": "string" } ], "internalType": "struct OptimisticOracle.EventAssertion", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assertionId", "type": "uint256" } ], "name": "getResolution", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assertionId", "type": "uint256" } ], "name": "getState", "outputs": [ { "internalType": "enum OptimisticOracle.State", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextAssertionId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assertionId", "type": "uint256" }, { "internalType": "bool", "name": "outcome", "type": "bool" } ], "name": "proposeOutcome", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_decider", "type": "address" } ], "name": "setDecider", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assertionId", "type": "uint256" }, { "internalType": "bool", "name": "resolvedOutcome", "type": "bool" } ], "name": "settleAssertion", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "transactionHash": "0xceec2842f9aeb0aedb446627d4833ecee21c26d7a44635c7d77e7a225f42da4a", "receipt": { "to": null, "from": "0x23E53302800Ccd8a5b35cFA576B6eB73dab297B4", "contractAddress": "0x4E23664C19a80Bc8Cc12EF03d0286B9A6C88874E", "transactionIndex": 41, "gasUsed": "1650292", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "blockHash": "0xdbbd5d88fde32b0f1146c6291c45936825334adddb02caae5ddc381bd0c8107a", "transactionHash": "0xceec2842f9aeb0aedb446627d4833ecee21c26d7a44635c7d77e7a225f42da4a", "logs": [], "blockNumber": 10119862, "cumulativeGasUsed": "7386110", "status": 1, "byzantium": true }, "args": [ "0x0e59BE27d04248289DE58287473E5096F5B0487C" ], "numDeployments": 1, "solcInputHash": "dc16856801dd283672eccbfa93625e78", "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_decider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyClaimed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadySettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssertionNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssertionProposed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AwaitingDecider\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTime\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotDisputedAssertion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotProposedAssertion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDecider\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposalDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assertionId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"outcome\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"}],\"name\":\"AssertionSettled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldDecider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newDecider\",\"type\":\"address\"}],\"name\":\"DeciderUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assertionId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"}],\"name\":\"EventAsserted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assertionId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputer\",\"type\":\"address\"}],\"name\":\"OutcomeDisputed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assertionId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"outcome\",\"type\":\"bool\"}],\"name\":\"OutcomeProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assertionId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RefundClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assertionId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RewardClaimed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DISPUTE_WINDOW\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_ASSERTION_WINDOW\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"assertEvent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"assertions\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputer\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"proposedOutcome\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"resolvedOutcome\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"claimed\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assertionId\",\"type\":\"uint256\"}],\"name\":\"claimDisputedReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assertionId\",\"type\":\"uint256\"}],\"name\":\"claimRefund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assertionId\",\"type\":\"uint256\"}],\"name\":\"claimUndisputedReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assertionId\",\"type\":\"uint256\"}],\"name\":\"disputeOutcome\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assertionId\",\"type\":\"uint256\"}],\"name\":\"getAssertion\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputer\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"proposedOutcome\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"resolvedOutcome\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"claimed\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OptimisticOracle.EventAssertion\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assertionId\",\"type\":\"uint256\"}],\"name\":\"getResolution\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assertionId\",\"type\":\"uint256\"}],\"name\":\"getState\",\"outputs\":[{\"internalType\":\"enum OptimisticOracle.State\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextAssertionId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assertionId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"outcome\",\"type\":\"bool\"}],\"name\":\"proposeOutcome\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_decider\",\"type\":\"address\"}],\"name\":\"setDecider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assertionId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"resolvedOutcome\",\"type\":\"bool\"}],\"name\":\"settleAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"assertEvent(string,uint256,uint256)\":{\"details\":\"Requires ETH payment as reward for correct proposers. Bond requirement is 2x the reward. Sets default timestamps if not provided. Validates timing requirements.\",\"params\":{\"description\":\"Human-readable description of the event (e.g. \\\"Did X happen by time Y?\\\")\",\"endTime\":\"When the assertion expires (0 for startTime + minimum window)\",\"startTime\":\"When proposals can begin (0 for current block timestamp)\"},\"returns\":{\"_0\":\"The unique assertion ID for the newly created assertion\"}},\"claimDisputedReward(uint256)\":{\"details\":\"Anyone can trigger this function. Pays decider fee and transfers remaining rewards to winner. Can only be called after decider has settled the dispute.\",\"params\":{\"assertionId\":\"The unique identifier of the disputed assertion to claim rewards for\"}},\"claimRefund(uint256)\":{\"details\":\"Anyone can trigger this function. Returns the original reward to the asserter. Can only be called after assertion deadline has passed without any proposals.\",\"params\":{\"assertionId\":\"The unique identifier of the expired assertion to claim refund for\"}},\"claimUndisputedReward(uint256)\":{\"details\":\"Anyone can trigger this function. Transfers reward + bond to the proposer. Can only be called after dispute window has passed without disputes.\",\"params\":{\"assertionId\":\"The unique identifier of the assertion to claim rewards for\"}},\"disputeOutcome(uint256)\":{\"details\":\"Requires bonding ETH equal to the bond amount. Can only dispute once per assertion and must be within the dispute window after proposal.\",\"params\":{\"assertionId\":\"The unique identifier of the assertion to dispute\"}},\"getAssertion(uint256)\":{\"details\":\"Provides access to all fields of the EventAssertion struct\",\"params\":{\"assertionId\":\"The unique identifier of the assertion to retrieve\"},\"returns\":{\"_0\":\"The complete EventAssertion struct containing all assertion data\"}},\"getResolution(uint256)\":{\"details\":\"For undisputed assertions, returns the proposed outcome after dispute window. For disputed assertions, returns the decider's resolved outcome.\",\"params\":{\"assertionId\":\"The unique identifier of the assertion to get resolution for\"},\"returns\":{\"_0\":\"The final boolean outcome of the assertion\"}},\"getState(uint256)\":{\"details\":\"Evaluates assertion progress through states: Invalid, Asserted, Proposed, Disputed, Settled, Expired\",\"params\":{\"assertionId\":\"The unique identifier of the assertion to check state for\"},\"returns\":{\"_0\":\"The current State enum value representing the assertion's status\"}},\"proposeOutcome(uint256,bool)\":{\"details\":\"Requires bonding ETH equal to 2x the original reward. Sets dispute window deadline. Can only be called once per assertion and within the assertion time window.\",\"params\":{\"assertionId\":\"The unique identifier of the assertion to propose an outcome for\",\"outcome\":\"The proposed boolean outcome (true or false) for the event\"}},\"setDecider(address)\":{\"details\":\"Changes the address authorized to settle disputed assertions. Emits DeciderUpdated event with old and new addresses.\",\"params\":{\"_decider\":\"The new address that will act as decider for disputed assertions\"}},\"settleAssertion(uint256,bool)\":{\"details\":\"Sets the resolved outcome and determines winner based on proposal accuracy.\",\"params\":{\"assertionId\":\"The unique identifier of the disputed assertion to settle\",\"resolvedOutcome\":\"The decider's determination of the true outcome\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AssertionNotFound()\":[{\"notice\":\"Errors //////\"}]},\"events\":{\"EventAsserted(uint256,address,string,uint256)\":{\"notice\":\"Events /////\"}},\"kind\":\"user\",\"methods\":{\"assertEvent(string,uint256,uint256)\":{\"notice\":\"Creates a new assertion about an event with a true/false outcome\"},\"claimDisputedReward(uint256)\":{\"notice\":\"Claims reward for disputed assertions after decider settlement\"},\"claimRefund(uint256)\":{\"notice\":\"Claims refund for assertions that receive no proposals before deadline\"},\"claimUndisputedReward(uint256)\":{\"notice\":\"Claims reward for undisputed assertions after dispute window expires\"},\"constructor\":{\"notice\":\"Constructor ///\"},\"disputeOutcome(uint256)\":{\"notice\":\"Disputes a proposed outcome by bonding ETH\"},\"getAssertion(uint256)\":{\"notice\":\"Returns the complete assertion details for a given assertion ID\"},\"getResolution(uint256)\":{\"notice\":\"Returns the final resolved outcome of a settled assertion\"},\"getState(uint256)\":{\"notice\":\"Returns the current state of an assertion based on its lifecycle stage\"},\"proposeOutcome(uint256,bool)\":{\"notice\":\"Proposes the outcome (true or false) for an asserted event\"},\"setDecider(address)\":{\"notice\":\"Updates the decider address (only contract owner)\"},\"settleAssertion(uint256,bool)\":{\"notice\":\"Resolves disputed assertions by determining the correct outcome (only decider)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/02_Optimistic/OptimisticOracle.sol\":\"OptimisticOracle\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/02_Optimistic/OptimisticOracle.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.0 <0.9.0;\\n\\ncontract OptimisticOracle {\\n ////////////////\\n /// Enums //////\\n ////////////////\\n\\n enum State {\\n Invalid,\\n Asserted,\\n Proposed,\\n Disputed,\\n Settled,\\n Expired\\n }\\n\\n /////////////////\\n /// Errors //////\\n /////////////////\\n\\n error AssertionNotFound();\\n error AssertionProposed();\\n error InvalidValue();\\n error InvalidTime();\\n error ProposalDisputed();\\n error NotProposedAssertion();\\n error AlreadyClaimed();\\n error AlreadySettled();\\n error AwaitingDecider();\\n error NotDisputedAssertion();\\n error OnlyDecider();\\n error OnlyOwner();\\n error TransferFailed();\\n\\n //////////////////////\\n /// State Variables //\\n //////////////////////\\n\\n struct EventAssertion {\\n address asserter;\\n address proposer;\\n address disputer;\\n bool proposedOutcome;\\n bool resolvedOutcome;\\n uint256 reward;\\n uint256 bond;\\n uint256 startTime;\\n uint256 endTime;\\n bool claimed;\\n address winner;\\n string description;\\n }\\n\\n uint256 public constant MINIMUM_ASSERTION_WINDOW = 3 minutes;\\n uint256 public constant DISPUTE_WINDOW = 3 minutes;\\n address public decider;\\n address public owner;\\n uint256 public nextAssertionId = 1;\\n mapping(uint256 => EventAssertion) public assertions;\\n\\n ////////////////\\n /// Events /////\\n ////////////////\\n\\n event EventAsserted(uint256 assertionId, address asserter, string description, uint256 reward);\\n event OutcomeProposed(uint256 assertionId, address proposer, bool outcome);\\n event OutcomeDisputed(uint256 assertionId, address disputer);\\n event AssertionSettled(uint256 assertionId, bool outcome, address winner);\\n event DeciderUpdated(address oldDecider, address newDecider);\\n event RewardClaimed(uint256 assertionId, address winner, uint256 amount);\\n event RefundClaimed(uint256 assertionId, address asserter, uint256 amount);\\n\\n ///////////////////\\n /// Modifiers /////\\n ///////////////////\\n\\n /**\\n * @notice Modifier to restrict function access to the designated decider\\n * @dev Ensures only the decider can settle disputed assertions\\n */\\n modifier onlyDecider() {\\n if (msg.sender != decider) revert OnlyDecider();\\n _;\\n }\\n\\n /**\\n * @notice Modifier to restrict function access to the contract owner\\n * @dev Ensures only the owner can update critical contract parameters\\n */\\n modifier onlyOwner() {\\n if (msg.sender != owner) revert OnlyOwner();\\n _;\\n }\\n\\n ///////////////////\\n /// Constructor ///\\n ///////////////////\\n\\n constructor(address _decider) {\\n decider = _decider;\\n owner = msg.sender;\\n }\\n\\n ///////////////////\\n /// Functions /////\\n ///////////////////\\n\\n /**\\n * @notice Updates the decider address (only contract owner)\\n * @dev Changes the address authorized to settle disputed assertions.\\n * Emits DeciderUpdated event with old and new addresses.\\n * @param _decider The new address that will act as decider for disputed assertions\\n */\\n function setDecider(address _decider) external onlyOwner {\\n address oldDecider = address(decider);\\n decider = _decider;\\n emit DeciderUpdated(oldDecider, _decider);\\n }\\n\\n /**\\n * @notice Returns the complete assertion details for a given assertion ID\\n * @dev Provides access to all fields of the EventAssertion struct\\n * @param assertionId The unique identifier of the assertion to retrieve\\n * @return The complete EventAssertion struct containing all assertion data\\n */\\n function getAssertion(uint256 assertionId) external view returns (EventAssertion memory) {\\n return assertions[assertionId];\\n }\\n\\n /**\\n * @notice Creates a new assertion about an event with a true/false outcome\\n * @dev Requires ETH payment as reward for correct proposers. Bond requirement is 2x the reward.\\n * Sets default timestamps if not provided. Validates timing requirements.\\n * @param description Human-readable description of the event (e.g. \\\"Did X happen by time Y?\\\")\\n * @param startTime When proposals can begin (0 for current block timestamp)\\n * @param endTime When the assertion expires (0 for startTime + minimum window)\\n * @return The unique assertion ID for the newly created assertion\\n */\\n function assertEvent(\\n string memory description,\\n uint256 startTime,\\n uint256 endTime\\n ) external payable returns (uint256) {\\n uint256 assertionId = nextAssertionId;\\n nextAssertionId++;\\n if (msg.value == 0) revert InvalidValue();\\n \\n if (startTime == 0) startTime = block.timestamp;\\n if (endTime == 0) endTime = block.timestamp + MINIMUM_ASSERTION_WINDOW;\\n \\n if (startTime < block.timestamp) revert InvalidTime();\\n if (endTime < startTime + MINIMUM_ASSERTION_WINDOW) revert InvalidTime();\\n\\n assertions[assertionId] = EventAssertion({\\n asserter: msg.sender,\\n\\tproposer: address(0),\\n\\tdisputer: address(0),\\n\\tproposedOutcome: false,\\n\\tresolvedOutcome: false,\\n\\treward: msg.value,\\n\\tbond: msg.value * 2,\\n\\tstartTime: startTime,\\n\\tendTime: endTime,\\n\\tclaimed: false,\\n\\twinner: address(0),\\n\\tdescription: description\\n });\\n\\n emit EventAsserted(assertionId, msg.sender, description, msg.value);\\n return assertionId;\\n }\\n\\n /**\\n * @notice Proposes the outcome (true or false) for an asserted event\\n * @dev Requires bonding ETH equal to 2x the original reward. Sets dispute window deadline.\\n * Can only be called once per assertion and within the assertion time window.\\n * @param assertionId The unique identifier of the assertion to propose an outcome for\\n * @param outcome The proposed boolean outcome (true or false) for the event\\n */\\n function proposeOutcome(uint256 assertionId, bool outcome) external payable {\\n if (assertionId >= nextAssertionId) revert AssertionNotFound();\\n\\n EventAssertion storage eventAssertion = assertions[assertionId];\\n\\n if (eventAssertion.proposer != address(0)) revert AssertionProposed();\\n uint256 currentTime = block.timestamp;\\n if (currentTime < eventAssertion.startTime || currentTime > eventAssertion.endTime) revert InvalidTime();\\n if (msg.value != eventAssertion.bond) revert InvalidValue();\\n\\n eventAssertion.proposer = msg.sender;\\n eventAssertion.proposedOutcome = outcome;\\n eventAssertion.endTime = currentTime + DISPUTE_WINDOW;\\n\\n emit OutcomeProposed(assertionId, msg.sender, outcome);\\n }\\n\\n /**\\n * @notice Disputes a proposed outcome by bonding ETH\\n * @dev Requires bonding ETH equal to the bond amount. Can only dispute once per assertion\\n * and must be within the dispute window after proposal.\\n * @param assertionId The unique identifier of the assertion to dispute\\n */\\n function disputeOutcome(uint256 assertionId) external payable {\\n EventAssertion storage eventAssertion = assertions[assertionId];\\n\\n if (eventAssertion.asserter == address(0)) revert AssertionNotFound();\\n if (eventAssertion.proposer == address(0)) revert NotProposedAssertion();\\n if (eventAssertion.disputer != address(0)) revert ProposalDisputed();\\n if (block.timestamp > eventAssertion.endTime) revert InvalidTime();\\n if (msg.value != eventAssertion.bond) revert InvalidValue();\\n\\n eventAssertion.disputer = msg.sender;\\n\\n emit OutcomeDisputed(assertionId, msg.sender);\\n }\\n\\n /**\\n * @notice Claims reward for undisputed assertions after dispute window expires\\n * @dev Anyone can trigger this function. Transfers reward + bond to the proposer.\\n * Can only be called after dispute window has passed without disputes.\\n * @param assertionId The unique identifier of the assertion to claim rewards for\\n */\\n function claimUndisputedReward(uint256 assertionId) external {\\n EventAssertion storage assertion = assertions[assertionId];\\n if (assertion.proposer == address(0)) revert NotProposedAssertion();\\n if (assertion.disputer != address(0)) revert ProposalDisputed();\\n if (block.timestamp <= assertion.endTime) revert InvalidTime();\\n if (assertion.claimed) revert AlreadyClaimed();\\n\\n assertion.claimed = true;\\n assertion.resolvedOutcome = assertion.proposedOutcome;\\n assertion.winner = assertion.proposer;\\n uint256 totalValue = assertion.reward + assertion.bond;\\n (bool success,) = payable(assertion.proposer).call{value: totalValue}(\\\"\\\");\\n if (!success) revert TransferFailed();\\n\\n emit RewardClaimed(assertionId, assertion.proposer, totalValue);\\n }\\n\\n /**\\n * @notice Claims reward for disputed assertions after decider settlement\\n * @dev Anyone can trigger this function. Pays decider fee and transfers remaining rewards to winner.\\n * Can only be called after decider has settled the dispute.\\n * @param assertionId The unique identifier of the disputed assertion to claim rewards for\\n */\\n function claimDisputedReward(uint256 assertionId) external {\\n EventAssertion storage assertion = assertions[assertionId];\\n if (assertion.proposer == address(0)) revert NotProposedAssertion();\\n if (assertion.disputer == address(0)) revert NotDisputedAssertion();\\n if (assertion.winner == address(0)) revert AwaitingDecider();\\n if (assertion.claimed) revert AlreadyClaimed();\\n\\n assertion.claimed = true;\\n (bool successDecider,) = payable(decider).call{value: assertion.bond}(\\\"\\\");\\n if (!successDecider) revert TransferFailed();\\n\\n uint256 totalValue = assertion.reward + assertion.bond;\\n (bool success,) = payable(assertion.winner).call{value: totalValue}(\\\"\\\");\\n if (!success) revert TransferFailed();\\n\\n emit RewardClaimed(assertionId, assertion.winner, totalValue);\\n }\\n\\n /**\\n * @notice Claims refund for assertions that receive no proposals before deadline\\n * @dev Anyone can trigger this function. Returns the original reward to the asserter.\\n * Can only be called after assertion deadline has passed without any proposals.\\n * @param assertionId The unique identifier of the expired assertion to claim refund for\\n */\\n function claimRefund(uint256 assertionId) external {\\n EventAssertion storage assertion = assertions[assertionId];\\n if (assertion.asserter == address(0)) revert AssertionNotFound();\\n if (assertion.proposer != address(0)) revert AssertionProposed();\\n if (block.timestamp <= assertion.endTime) revert InvalidTime();\\n if (assertion.claimed) revert AlreadyClaimed();\\n\\n assertion.claimed = true;\\n uint256 totalValue = assertion.reward;\\n (bool success,) = payable(assertion.asserter).call{value: totalValue}(\\\"\\\");\\n if (!success) revert TransferFailed();\\n\\n emit RefundClaimed(assertionId, assertion.asserter, totalValue);\\n }\\n\\n /**\\n * @notice Resolves disputed assertions by determining the correct outcome (only decider)\\n * @dev Sets the resolved outcome and determines winner based on proposal accuracy.\\n * @param assertionId The unique identifier of the disputed assertion to settle\\n * @param resolvedOutcome The decider's determination of the true outcome\\n */\\n function settleAssertion(uint256 assertionId, bool resolvedOutcome) external onlyDecider {\\n EventAssertion storage assertion = assertions[assertionId];\\n if (assertion.proposer == address(0)) revert NotProposedAssertion();\\n if (assertion.disputer == address(0)) revert NotDisputedAssertion();\\n if (assertion.winner != address(0)) revert AlreadySettled();\\n\\n assertion.resolvedOutcome = resolvedOutcome;\\n assertion.winner = assertion.proposedOutcome == resolvedOutcome ? assertion.proposer : assertion.disputer;\\n\\n emit AssertionSettled(assertionId, resolvedOutcome, assertion.winner);\\n }\\n\\n /**\\n * @notice Returns the current state of an assertion based on its lifecycle stage\\n * @dev Evaluates assertion progress through states: Invalid, Asserted, Proposed, Disputed, Settled, Expired\\n * @param assertionId The unique identifier of the assertion to check state for\\n * @return The current State enum value representing the assertion's status\\n */\\n function getState(uint256 assertionId) external view returns (State) {\\n EventAssertion memory assertion = assertions[assertionId];\\n \\n if (assertion.asserter == address(0)) return State.Invalid;\\n if (assertion.winner != address(0)) return State.Settled;\\n if (assertion.disputer != address(0)) return State.Disputed;\\n if (assertion.proposer != address(0)) {\\n\\tif (block.timestamp >= assertion.endTime) return State.Settled;\\n return State.Proposed;\\n }\\n if (block.timestamp >= assertion.endTime) return State.Expired;\\n return State.Asserted;\\n }\\n\\n /**\\n * @notice Returns the final resolved outcome of a settled assertion\\n * @dev For undisputed assertions, returns the proposed outcome after dispute window.\\n * For disputed assertions, returns the decider's resolved outcome.\\n * @param assertionId The unique identifier of the assertion to get resolution for\\n * @return The final boolean outcome of the assertion\\n */\\n function getResolution(uint256 assertionId) external view returns (bool) {\\n EventAssertion memory assertion = assertions[assertionId];\\n\\n if (assertion.asserter == address(0)) revert AssertionNotFound();\\n if (assertion.proposer == address(0)) revert NotProposedAssertion();\\n\\n if (assertion.winner != address(0)) return assertion.resolvedOutcome;\\n if (assertion.disputer == address(0)) {\\n\\tif (block.timestamp <= assertion.endTime) revert InvalidTime();\\n return assertion.proposedOutcome;\\n }\\n\\n revert AwaitingDecider();\\n }\\n}\\n\",\"keccak256\":\"0x39cbe139f9ad84bf77517c78c64745f6cf7868cad094cd9b4898970cf7ded8a8\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x6080604052600160025534801561001557600080fd5b50604051611c41380380611c4183398101604081905261003491610062565b600080546001600160a01b039092166001600160a01b03199283161790556001805490911633179055610092565b60006020828403121561007457600080fd5b81516001600160a01b038116811461008b57600080fd5b9392505050565b611ba0806100a16000396000f3fe6080604052600436106100fe5760003560e01c806388553a2a11610095578063d21a727d11610064578063d21a727d146102aa578063d565a533146102ca578063db4295b7146102fa578063f585dc571461015b578063fc6def151461031a57600080fd5b806388553a2a146102395780638da5cb5b1461024c578063a9809c2b14610284578063b40b6d001461029757600080fd5b80634d7ba587116100d15780634d7ba587146101ab578063524232f6146101cb5780635b366bb9146102035780635b7baf641461021957600080fd5b806302f5ee7e146101035780631d99e167146101255780632db4f2331461015b57806344c9af281461017e575b600080fd5b34801561010f57600080fd5b5061012361011e36600461164e565b61033a565b005b34801561013157600080fd5b5061014561014036600461164e565b61051f565b60405161015291906116ad565b60405180910390f35b34801561016757600080fd5b5061017060b481565b604051908152602001610152565b34801561018a57600080fd5b5061019e61019936600461164e565b6106d4565b604051610152919061179a565b3480156101b757600080fd5b506101236101c63660046117c2565b6108c4565b3480156101d757600080fd5b506101eb6101e636600461164e565b610951565b6040516101529c9b9a999897969594939291906117f2565b34801561020f57600080fd5b5061017060025481565b34801561022557600080fd5b5061012361023436600461164e565b610a54565b610123610247366004611878565b610bcf565b34801561025857600080fd5b5060015461026c906001600160a01b031681565b6040516001600160a01b039091168152602001610152565b61012361029236600461164e565b610d04565b6101706102a53660046118c3565b610e28565b3480156102b657600080fd5b506101236102c536600461164e565b61107c565b3480156102d657600080fd5b506102ea6102e536600461164e565b6112aa565b6040519015158152602001610152565b34801561030657600080fd5b50610123610315366004611878565b6114c5565b34801561032657600080fd5b5060005461026c906001600160a01b031681565b600081815260036020526040902060018101546001600160a01b031661037357604051638a83969360e01b815260040160405180910390fd5b60028101546001600160a01b03161561039f5760405163ac9725ff60e01b815260040160405180910390fd5b806006015442116103c3576040516337bf561360e11b815260040160405180910390fd5b600781015460ff16156103e957604051630c8d9eab60e31b815260040160405180910390fd5b600781018054600283018054600160a01b810460ff161515600160a81b0260ff60a81b199091161790556001838101546001600160a01b0316610100026001600160a81b0319909216919091171790556004810154600382015460009161044f9161199d565b60018301546040519192506000916001600160a01b039091169083908381818185875af1925050503d80600081146104a3576040519150601f19603f3d011682016040523d82523d6000602084013e6104a8565b606091505b50509050806104ca576040516312171d8360e31b815260040160405180910390fd5b6001830154604080518681526001600160a01b03909216602083015281018390527f24b5efa61dd1cfc659205a97fb8ed868f3cb8c81922bab2b96423e5de1de2cb7906060015b60405180910390a150505050565b604080516101808101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e082018390526101008201839052610120820183905261014082019290925261016081019190915260008281526003602081815260409283902083516101808101855281546001600160a01b039081168252600183015481169382019390935260028201548084169582019590955260ff600160a01b8604811615156060830152600160a81b9095048516151560808201529281015460a0840152600481015460c0840152600581015460e084015260068101546101008085019190915260078201549485161515610120850152909304166101408201526008820180549192916101608401919061064b906119b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610677906119b6565b80156106c45780601f10610699576101008083540402835291602001916106c4565b820191906000526020600020905b8154815290600101906020018083116106a757829003601f168201915b5050505050815250509050919050565b600081815260036020818152604080842081516101808101835281546001600160a01b039081168252600183015481169482019490945260028201548085169382019390935260ff600160a01b8404811615156060830152600160a81b9093048316151560808201529381015460a0850152600481015460c0850152600581015460e0850152600681015461010080860191909152600782015492831615156101208601529091049091166101408301526008810180548493929161016084019161079e906119b6565b80601f01602080910402602001604051908101604052809291908181526020018280546107ca906119b6565b80156108175780601f106107ec57610100808354040283529160200191610817565b820191906000526020600020905b8154815290600101906020018083116107fa57829003601f168201915b5050509190925250508151919250506001600160a01b031661083c5750600092915050565b6101408101516001600160a01b0316156108595750600492915050565b60408101516001600160a01b0316156108755750600392915050565b60208101516001600160a01b0316156108a657806101000151421061089d5750600492915050565b50600292915050565b80610100015142106108bb5750600592915050565b50600192915050565b6001546001600160a01b031633146108ef57604051635fc483c560e01b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f44b195f672f12d3150e8ec40f5b2be271828f1e7be16b3a55e61f7a2c53efc3d91015b60405180910390a15050565b60036020819052600091825260409091208054600182015460028301549383015460048401546005850154600686015460078701546008880180546001600160a01b039889169a97891699888a169960ff600160a01b8b0481169a600160a81b90048116999897969590811694610100909104909116926109d1906119b6565b80601f01602080910402602001604051908101604052809291908181526020018280546109fd906119b6565b8015610a4a5780601f10610a1f57610100808354040283529160200191610a4a565b820191906000526020600020905b815481529060010190602001808311610a2d57829003601f168201915b505050505090508c565b600081815260036020526040902080546001600160a01b0316610a8a576040516325f67a0760e21b815260040160405180910390fd5b60018101546001600160a01b031615610ab65760405163062989cf60e11b815260040160405180910390fd5b80600601544211610ada576040516337bf561360e11b815260040160405180910390fd5b600781015460ff1615610b0057604051630c8d9eab60e31b815260040160405180910390fd5b60078101805460ff19166001179055600381015481546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610b60576040519150601f19603f3d011682016040523d82523d6000602084013e610b65565b606091505b5050905080610b87576040516312171d8360e31b815260040160405180910390fd5b8254604080518681526001600160a01b03909216602083015281018390527ff3f402280ef0a7905e124aa621b65eaeb2725c343e8b36d398ed78c29daf285c90606001610511565b6002548210610bf1576040516325f67a0760e21b815260040160405180910390fd5b600082815260036020526040902060018101546001600160a01b031615610c2b5760405163062989cf60e11b815260040160405180910390fd5b60058101544290811080610c425750816006015481115b15610c60576040516337bf561360e11b815260040160405180910390fd5b81600401543414610c8457604051632a9ffab760e21b815260040160405180910390fd5b6001820180546001600160a01b03191633179055600282018054841515600160a01b0260ff60a01b19909116179055610cbe60b48261199d565b600683015560408051858152336020820152841515918101919091527f2e97f40e66e2eaaa8ae31d3f66dfc8a18edb91c0bc70080dae0241aabc85f52b90606001610511565b600081815260036020526040902080546001600160a01b0316610d3a576040516325f67a0760e21b815260040160405180910390fd5b60018101546001600160a01b0316610d6557604051638a83969360e01b815260040160405180910390fd5b60028101546001600160a01b031615610d915760405163ac9725ff60e01b815260040160405180910390fd5b8060060154421115610db6576040516337bf561360e11b815260040160405180910390fd5b80600401543414610dda57604051632a9ffab760e21b815260040160405180910390fd5b6002810180546001600160a01b031916339081179091556040805184815260208101929092527f4d1c7c2acc2af4568b065391bf84e3526ed432777f4780c7c92956c68198cd4c9101610945565b60028054600091819083610e3b836119f0565b919050555034600003610e6157604051632a9ffab760e21b815260040160405180910390fd5b83600003610e6d574293505b82600003610e8357610e8060b44261199d565b92505b42841015610ea4576040516337bf561360e11b815260040160405180910390fd5b610eaf60b48561199d565b831015610ecf576040516337bf561360e11b815260040160405180910390fd5b60408051610180810182523381526000602082018190529181018290526060810182905260808101919091523460a0820181905260c0820190610f13906002611a09565b81526020808201879052604080830187905260006060808501829052608080860183905260a09586018c9052878352600380865292849020875181546001600160a01b03199081166001600160a01b0392831617835596890151600183018054909816908216179096559387015160028501805493890151928901519187166001600160a81b031994851617600160a01b931515939093029290921760ff60a81b1916600160a81b91151591909102179055938501519082015560c0840151600482015560e084015160058201556101008085015160068301556101208501516007830180546101408801519616911515610100600160a81b03191691909117949093160292909217905561016082015160088201906110339082611a6f565b509050507f4accbd7d2745189087b035e2702b3c41835f88430aa9adb958627224c1cbb3218133873460405161106c9493929190611b2f565b60405180910390a1949350505050565b600081815260036020526040902060018101546001600160a01b03166110b557604051638a83969360e01b815260040160405180910390fd5b60028101546001600160a01b03166110e05760405163e8ac3fab60e01b815260040160405180910390fd5b600781015461010090046001600160a01b031661111057604051630b4132af60e41b815260040160405180910390fd5b600781015460ff161561113657604051630c8d9eab60e31b815260040160405180910390fd5b60078101805460ff191660011790556000805460048301546040516001600160a01b03909216918381818185875af1925050503d8060008114611195576040519150601f19603f3d011682016040523d82523d6000602084013e61119a565b606091505b50509050806111bc576040516312171d8360e31b815260040160405180910390fd5b6000826004015483600301546111d2919061199d565b60078401546040519192506000916101009091046001600160a01b03169083908381818185875af1925050503d806000811461122a576040519150601f19603f3d011682016040523d82523d6000602084013e61122f565b606091505b5050905080611251576040516312171d8360e31b815260040160405180910390fd5b6007840154604080518781526101009092046001600160a01b0316602083015281018390527f24b5efa61dd1cfc659205a97fb8ed868f3cb8c81922bab2b96423e5de1de2cb79060600160405180910390a15050505050565b600081815260036020818152604080842081516101808101835281546001600160a01b039081168252600183015481169482019490945260028201548085169382019390935260ff600160a01b8404811615156060830152600160a81b9093048316151560808201529381015460a0850152600481015460c0850152600581015460e08501526006810154610100808601919091526007820154928316151561012086015290910490911661014083015260088101805484939291610160840191611374906119b6565b80601f01602080910402602001604051908101604052809291908181526020018280546113a0906119b6565b80156113ed5780601f106113c2576101008083540402835291602001916113ed565b820191906000526020600020905b8154815290600101906020018083116113d057829003601f168201915b5050509190925250508151919250506001600160a01b0316611422576040516325f67a0760e21b815260040160405180910390fd5b60208101516001600160a01b031661144d57604051638a83969360e01b815260040160405180910390fd5b6101408101516001600160a01b03161561146b576080015192915050565b60408101516001600160a01b03166114ac5780610100015142116114a2576040516337bf561360e11b815260040160405180910390fd5b6060015192915050565b604051630b4132af60e41b815260040160405180910390fd5b6000546001600160a01b031633146114f057604051631bc723a960e31b815260040160405180910390fd5b600082815260036020526040902060018101546001600160a01b031661152957604051638a83969360e01b815260040160405180910390fd5b60028101546001600160a01b03166115545760405163e8ac3fab60e01b815260040160405180910390fd5b600781015461010090046001600160a01b0316156115845760405162560ff960e81b815260040160405180910390fd5b600281018054831515600160a81b810260ff60a81b199092169190911791829055600160a01b90910460ff161515146115ca5760028101546001600160a01b03166115d9565b60018101546001600160a01b03165b600782018054610100600160a81b0319166101006001600160a01b039384168102919091179182905560408051878152861515602082015291909204909216908201527f27f6caee7bcd705e478ea4783620995916b1b3d562d683c8932a0c5d5998d9589060600160405180910390a1505050565b60006020828403121561166057600080fd5b5035919050565b6000815180845260005b8181101561168d57602081850181015186830182015201611671565b506000602082860101526020601f19601f83011685010191505092915050565b602081526116c76020820183516001600160a01b03169052565b600060208301516116e360408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151801515608084015250608083015180151560a08401525060a083015160c083015260c083015160e083015260e083015161010081818501528085015191505061012081818501528085015191505061014061175c8185018315159052565b8401519050610160611778848201836001600160a01b03169052565b8401516101808481015290506117926101a0840182611667565b949350505050565b60208101600683106117bc57634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156117d457600080fd5b81356001600160a01b03811681146117eb57600080fd5b9392505050565b6001600160a01b038d811682528c811660208301528b811660408301528a15156060830152891515608083015260a0820189905260c0820188905260e08201879052610100820186905284151561012083015283166101408201526000610180610160830152611866610180830184611667565b9e9d5050505050505050505050505050565b6000806040838503121561188b57600080fd5b82359150602083013580151581146118a257600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156118d857600080fd5b833567ffffffffffffffff808211156118f057600080fd5b818601915086601f83011261190457600080fd5b813581811115611916576119166118ad565b604051601f8201601f19908116603f0116810190838211818310171561193e5761193e6118ad565b8160405282815289602084870101111561195757600080fd5b82602086016020830137600060208483010152809750505050505060208401359150604084013590509250925092565b634e487b7160e01b600052601160045260246000fd5b808201808211156119b0576119b0611987565b92915050565b600181811c908216806119ca57607f821691505b6020821081036119ea57634e487b7160e01b600052602260045260246000fd5b50919050565b600060018201611a0257611a02611987565b5060010190565b80820281158282048414176119b0576119b0611987565b601f821115611a6a57600081815260208120601f850160051c81016020861015611a475750805b601f850160051c820191505b81811015611a6657828155600101611a53565b5050505b505050565b815167ffffffffffffffff811115611a8957611a896118ad565b611a9d81611a9784546119b6565b84611a20565b602080601f831160018114611ad25760008415611aba5750858301515b600019600386901b1c1916600185901b178555611a66565b600085815260208120601f198616915b82811015611b0157888601518255948401946001909101908401611ae2565b5085821015611b1f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8481526001600160a01b0384166020820152608060408201819052600090611b5990830185611667565b90508260608301529594505050505056fea2646970667358221220c3c4f85508b43dc74d746335745ee6ab25785c6bf0239b3b57f8c87949847fa964736f6c63430008140033", "deployedBytecode": "0x6080604052600436106100fe5760003560e01c806388553a2a11610095578063d21a727d11610064578063d21a727d146102aa578063d565a533146102ca578063db4295b7146102fa578063f585dc571461015b578063fc6def151461031a57600080fd5b806388553a2a146102395780638da5cb5b1461024c578063a9809c2b14610284578063b40b6d001461029757600080fd5b80634d7ba587116100d15780634d7ba587146101ab578063524232f6146101cb5780635b366bb9146102035780635b7baf641461021957600080fd5b806302f5ee7e146101035780631d99e167146101255780632db4f2331461015b57806344c9af281461017e575b600080fd5b34801561010f57600080fd5b5061012361011e36600461164e565b61033a565b005b34801561013157600080fd5b5061014561014036600461164e565b61051f565b60405161015291906116ad565b60405180910390f35b34801561016757600080fd5b5061017060b481565b604051908152602001610152565b34801561018a57600080fd5b5061019e61019936600461164e565b6106d4565b604051610152919061179a565b3480156101b757600080fd5b506101236101c63660046117c2565b6108c4565b3480156101d757600080fd5b506101eb6101e636600461164e565b610951565b6040516101529c9b9a999897969594939291906117f2565b34801561020f57600080fd5b5061017060025481565b34801561022557600080fd5b5061012361023436600461164e565b610a54565b610123610247366004611878565b610bcf565b34801561025857600080fd5b5060015461026c906001600160a01b031681565b6040516001600160a01b039091168152602001610152565b61012361029236600461164e565b610d04565b6101706102a53660046118c3565b610e28565b3480156102b657600080fd5b506101236102c536600461164e565b61107c565b3480156102d657600080fd5b506102ea6102e536600461164e565b6112aa565b6040519015158152602001610152565b34801561030657600080fd5b50610123610315366004611878565b6114c5565b34801561032657600080fd5b5060005461026c906001600160a01b031681565b600081815260036020526040902060018101546001600160a01b031661037357604051638a83969360e01b815260040160405180910390fd5b60028101546001600160a01b03161561039f5760405163ac9725ff60e01b815260040160405180910390fd5b806006015442116103c3576040516337bf561360e11b815260040160405180910390fd5b600781015460ff16156103e957604051630c8d9eab60e31b815260040160405180910390fd5b600781018054600283018054600160a01b810460ff161515600160a81b0260ff60a81b199091161790556001838101546001600160a01b0316610100026001600160a81b0319909216919091171790556004810154600382015460009161044f9161199d565b60018301546040519192506000916001600160a01b039091169083908381818185875af1925050503d80600081146104a3576040519150601f19603f3d011682016040523d82523d6000602084013e6104a8565b606091505b50509050806104ca576040516312171d8360e31b815260040160405180910390fd5b6001830154604080518681526001600160a01b03909216602083015281018390527f24b5efa61dd1cfc659205a97fb8ed868f3cb8c81922bab2b96423e5de1de2cb7906060015b60405180910390a150505050565b604080516101808101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e082018390526101008201839052610120820183905261014082019290925261016081019190915260008281526003602081815260409283902083516101808101855281546001600160a01b039081168252600183015481169382019390935260028201548084169582019590955260ff600160a01b8604811615156060830152600160a81b9095048516151560808201529281015460a0840152600481015460c0840152600581015460e084015260068101546101008085019190915260078201549485161515610120850152909304166101408201526008820180549192916101608401919061064b906119b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610677906119b6565b80156106c45780601f10610699576101008083540402835291602001916106c4565b820191906000526020600020905b8154815290600101906020018083116106a757829003601f168201915b5050505050815250509050919050565b600081815260036020818152604080842081516101808101835281546001600160a01b039081168252600183015481169482019490945260028201548085169382019390935260ff600160a01b8404811615156060830152600160a81b9093048316151560808201529381015460a0850152600481015460c0850152600581015460e0850152600681015461010080860191909152600782015492831615156101208601529091049091166101408301526008810180548493929161016084019161079e906119b6565b80601f01602080910402602001604051908101604052809291908181526020018280546107ca906119b6565b80156108175780601f106107ec57610100808354040283529160200191610817565b820191906000526020600020905b8154815290600101906020018083116107fa57829003601f168201915b5050509190925250508151919250506001600160a01b031661083c5750600092915050565b6101408101516001600160a01b0316156108595750600492915050565b60408101516001600160a01b0316156108755750600392915050565b60208101516001600160a01b0316156108a657806101000151421061089d5750600492915050565b50600292915050565b80610100015142106108bb5750600592915050565b50600192915050565b6001546001600160a01b031633146108ef57604051635fc483c560e01b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f44b195f672f12d3150e8ec40f5b2be271828f1e7be16b3a55e61f7a2c53efc3d91015b60405180910390a15050565b60036020819052600091825260409091208054600182015460028301549383015460048401546005850154600686015460078701546008880180546001600160a01b039889169a97891699888a169960ff600160a01b8b0481169a600160a81b90048116999897969590811694610100909104909116926109d1906119b6565b80601f01602080910402602001604051908101604052809291908181526020018280546109fd906119b6565b8015610a4a5780601f10610a1f57610100808354040283529160200191610a4a565b820191906000526020600020905b815481529060010190602001808311610a2d57829003601f168201915b505050505090508c565b600081815260036020526040902080546001600160a01b0316610a8a576040516325f67a0760e21b815260040160405180910390fd5b60018101546001600160a01b031615610ab65760405163062989cf60e11b815260040160405180910390fd5b80600601544211610ada576040516337bf561360e11b815260040160405180910390fd5b600781015460ff1615610b0057604051630c8d9eab60e31b815260040160405180910390fd5b60078101805460ff19166001179055600381015481546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610b60576040519150601f19603f3d011682016040523d82523d6000602084013e610b65565b606091505b5050905080610b87576040516312171d8360e31b815260040160405180910390fd5b8254604080518681526001600160a01b03909216602083015281018390527ff3f402280ef0a7905e124aa621b65eaeb2725c343e8b36d398ed78c29daf285c90606001610511565b6002548210610bf1576040516325f67a0760e21b815260040160405180910390fd5b600082815260036020526040902060018101546001600160a01b031615610c2b5760405163062989cf60e11b815260040160405180910390fd5b60058101544290811080610c425750816006015481115b15610c60576040516337bf561360e11b815260040160405180910390fd5b81600401543414610c8457604051632a9ffab760e21b815260040160405180910390fd5b6001820180546001600160a01b03191633179055600282018054841515600160a01b0260ff60a01b19909116179055610cbe60b48261199d565b600683015560408051858152336020820152841515918101919091527f2e97f40e66e2eaaa8ae31d3f66dfc8a18edb91c0bc70080dae0241aabc85f52b90606001610511565b600081815260036020526040902080546001600160a01b0316610d3a576040516325f67a0760e21b815260040160405180910390fd5b60018101546001600160a01b0316610d6557604051638a83969360e01b815260040160405180910390fd5b60028101546001600160a01b031615610d915760405163ac9725ff60e01b815260040160405180910390fd5b8060060154421115610db6576040516337bf561360e11b815260040160405180910390fd5b80600401543414610dda57604051632a9ffab760e21b815260040160405180910390fd5b6002810180546001600160a01b031916339081179091556040805184815260208101929092527f4d1c7c2acc2af4568b065391bf84e3526ed432777f4780c7c92956c68198cd4c9101610945565b60028054600091819083610e3b836119f0565b919050555034600003610e6157604051632a9ffab760e21b815260040160405180910390fd5b83600003610e6d574293505b82600003610e8357610e8060b44261199d565b92505b42841015610ea4576040516337bf561360e11b815260040160405180910390fd5b610eaf60b48561199d565b831015610ecf576040516337bf561360e11b815260040160405180910390fd5b60408051610180810182523381526000602082018190529181018290526060810182905260808101919091523460a0820181905260c0820190610f13906002611a09565b81526020808201879052604080830187905260006060808501829052608080860183905260a09586018c9052878352600380865292849020875181546001600160a01b03199081166001600160a01b0392831617835596890151600183018054909816908216179096559387015160028501805493890151928901519187166001600160a81b031994851617600160a01b931515939093029290921760ff60a81b1916600160a81b91151591909102179055938501519082015560c0840151600482015560e084015160058201556101008085015160068301556101208501516007830180546101408801519616911515610100600160a81b03191691909117949093160292909217905561016082015160088201906110339082611a6f565b509050507f4accbd7d2745189087b035e2702b3c41835f88430aa9adb958627224c1cbb3218133873460405161106c9493929190611b2f565b60405180910390a1949350505050565b600081815260036020526040902060018101546001600160a01b03166110b557604051638a83969360e01b815260040160405180910390fd5b60028101546001600160a01b03166110e05760405163e8ac3fab60e01b815260040160405180910390fd5b600781015461010090046001600160a01b031661111057604051630b4132af60e41b815260040160405180910390fd5b600781015460ff161561113657604051630c8d9eab60e31b815260040160405180910390fd5b60078101805460ff191660011790556000805460048301546040516001600160a01b03909216918381818185875af1925050503d8060008114611195576040519150601f19603f3d011682016040523d82523d6000602084013e61119a565b606091505b50509050806111bc576040516312171d8360e31b815260040160405180910390fd5b6000826004015483600301546111d2919061199d565b60078401546040519192506000916101009091046001600160a01b03169083908381818185875af1925050503d806000811461122a576040519150601f19603f3d011682016040523d82523d6000602084013e61122f565b606091505b5050905080611251576040516312171d8360e31b815260040160405180910390fd5b6007840154604080518781526101009092046001600160a01b0316602083015281018390527f24b5efa61dd1cfc659205a97fb8ed868f3cb8c81922bab2b96423e5de1de2cb79060600160405180910390a15050505050565b600081815260036020818152604080842081516101808101835281546001600160a01b039081168252600183015481169482019490945260028201548085169382019390935260ff600160a01b8404811615156060830152600160a81b9093048316151560808201529381015460a0850152600481015460c0850152600581015460e08501526006810154610100808601919091526007820154928316151561012086015290910490911661014083015260088101805484939291610160840191611374906119b6565b80601f01602080910402602001604051908101604052809291908181526020018280546113a0906119b6565b80156113ed5780601f106113c2576101008083540402835291602001916113ed565b820191906000526020600020905b8154815290600101906020018083116113d057829003601f168201915b5050509190925250508151919250506001600160a01b0316611422576040516325f67a0760e21b815260040160405180910390fd5b60208101516001600160a01b031661144d57604051638a83969360e01b815260040160405180910390fd5b6101408101516001600160a01b03161561146b576080015192915050565b60408101516001600160a01b03166114ac5780610100015142116114a2576040516337bf561360e11b815260040160405180910390fd5b6060015192915050565b604051630b4132af60e41b815260040160405180910390fd5b6000546001600160a01b031633146114f057604051631bc723a960e31b815260040160405180910390fd5b600082815260036020526040902060018101546001600160a01b031661152957604051638a83969360e01b815260040160405180910390fd5b60028101546001600160a01b03166115545760405163e8ac3fab60e01b815260040160405180910390fd5b600781015461010090046001600160a01b0316156115845760405162560ff960e81b815260040160405180910390fd5b600281018054831515600160a81b810260ff60a81b199092169190911791829055600160a01b90910460ff161515146115ca5760028101546001600160a01b03166115d9565b60018101546001600160a01b03165b600782018054610100600160a81b0319166101006001600160a01b039384168102919091179182905560408051878152861515602082015291909204909216908201527f27f6caee7bcd705e478ea4783620995916b1b3d562d683c8932a0c5d5998d9589060600160405180910390a1505050565b60006020828403121561166057600080fd5b5035919050565b6000815180845260005b8181101561168d57602081850181015186830182015201611671565b506000602082860101526020601f19601f83011685010191505092915050565b602081526116c76020820183516001600160a01b03169052565b600060208301516116e360408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151801515608084015250608083015180151560a08401525060a083015160c083015260c083015160e083015260e083015161010081818501528085015191505061012081818501528085015191505061014061175c8185018315159052565b8401519050610160611778848201836001600160a01b03169052565b8401516101808481015290506117926101a0840182611667565b949350505050565b60208101600683106117bc57634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156117d457600080fd5b81356001600160a01b03811681146117eb57600080fd5b9392505050565b6001600160a01b038d811682528c811660208301528b811660408301528a15156060830152891515608083015260a0820189905260c0820188905260e08201879052610100820186905284151561012083015283166101408201526000610180610160830152611866610180830184611667565b9e9d5050505050505050505050505050565b6000806040838503121561188b57600080fd5b82359150602083013580151581146118a257600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156118d857600080fd5b833567ffffffffffffffff808211156118f057600080fd5b818601915086601f83011261190457600080fd5b813581811115611916576119166118ad565b604051601f8201601f19908116603f0116810190838211818310171561193e5761193e6118ad565b8160405282815289602084870101111561195757600080fd5b82602086016020830137600060208483010152809750505050505060208401359150604084013590509250925092565b634e487b7160e01b600052601160045260246000fd5b808201808211156119b0576119b0611987565b92915050565b600181811c908216806119ca57607f821691505b6020821081036119ea57634e487b7160e01b600052602260045260246000fd5b50919050565b600060018201611a0257611a02611987565b5060010190565b80820281158282048414176119b0576119b0611987565b601f821115611a6a57600081815260208120601f850160051c81016020861015611a475750805b601f850160051c820191505b81811015611a6657828155600101611a53565b5050505b505050565b815167ffffffffffffffff811115611a8957611a896118ad565b611a9d81611a9784546119b6565b84611a20565b602080601f831160018114611ad25760008415611aba5750858301515b600019600386901b1c1916600185901b178555611a66565b600085815260208120601f198616915b82811015611b0157888601518255948401946001909101908401611ae2565b5085821015611b1f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8481526001600160a01b0384166020820152608060408201819052600090611b5990830185611667565b90508260608301529594505050505056fea2646970667358221220c3c4f85508b43dc74d746335745ee6ab25785c6bf0239b3b57f8c87949847fa964736f6c63430008140033", "devdoc": { "kind": "dev", "methods": { "assertEvent(string,uint256,uint256)": { "details": "Requires ETH payment as reward for correct proposers. Bond requirement is 2x the reward. Sets default timestamps if not provided. Validates timing requirements.", "params": { "description": "Human-readable description of the event (e.g. \"Did X happen by time Y?\")", "endTime": "When the assertion expires (0 for startTime + minimum window)", "startTime": "When proposals can begin (0 for current block timestamp)" }, "returns": { "_0": "The unique assertion ID for the newly created assertion" } }, "claimDisputedReward(uint256)": { "details": "Anyone can trigger this function. Pays decider fee and transfers remaining rewards to winner. Can only be called after decider has settled the dispute.", "params": { "assertionId": "The unique identifier of the disputed assertion to claim rewards for" } }, "claimRefund(uint256)": { "details": "Anyone can trigger this function. Returns the original reward to the asserter. Can only be called after assertion deadline has passed without any proposals.", "params": { "assertionId": "The unique identifier of the expired assertion to claim refund for" } }, "claimUndisputedReward(uint256)": { "details": "Anyone can trigger this function. Transfers reward + bond to the proposer. Can only be called after dispute window has passed without disputes.", "params": { "assertionId": "The unique identifier of the assertion to claim rewards for" } }, "disputeOutcome(uint256)": { "details": "Requires bonding ETH equal to the bond amount. Can only dispute once per assertion and must be within the dispute window after proposal.", "params": { "assertionId": "The unique identifier of the assertion to dispute" } }, "getAssertion(uint256)": { "details": "Provides access to all fields of the EventAssertion struct", "params": { "assertionId": "The unique identifier of the assertion to retrieve" }, "returns": { "_0": "The complete EventAssertion struct containing all assertion data" } }, "getResolution(uint256)": { "details": "For undisputed assertions, returns the proposed outcome after dispute window. For disputed assertions, returns the decider's resolved outcome.", "params": { "assertionId": "The unique identifier of the assertion to get resolution for" }, "returns": { "_0": "The final boolean outcome of the assertion" } }, "getState(uint256)": { "details": "Evaluates assertion progress through states: Invalid, Asserted, Proposed, Disputed, Settled, Expired", "params": { "assertionId": "The unique identifier of the assertion to check state for" }, "returns": { "_0": "The current State enum value representing the assertion's status" } }, "proposeOutcome(uint256,bool)": { "details": "Requires bonding ETH equal to 2x the original reward. Sets dispute window deadline. Can only be called once per assertion and within the assertion time window.", "params": { "assertionId": "The unique identifier of the assertion to propose an outcome for", "outcome": "The proposed boolean outcome (true or false) for the event" } }, "setDecider(address)": { "details": "Changes the address authorized to settle disputed assertions. Emits DeciderUpdated event with old and new addresses.", "params": { "_decider": "The new address that will act as decider for disputed assertions" } }, "settleAssertion(uint256,bool)": { "details": "Sets the resolved outcome and determines winner based on proposal accuracy.", "params": { "assertionId": "The unique identifier of the disputed assertion to settle", "resolvedOutcome": "The decider's determination of the true outcome" } } }, "version": 1 }, "userdoc": { "errors": { "AssertionNotFound()": [ { "notice": "Errors //////" } ] }, "events": { "EventAsserted(uint256,address,string,uint256)": { "notice": "Events /////" } }, "kind": "user", "methods": { "assertEvent(string,uint256,uint256)": { "notice": "Creates a new assertion about an event with a true/false outcome" }, "claimDisputedReward(uint256)": { "notice": "Claims reward for disputed assertions after decider settlement" }, "claimRefund(uint256)": { "notice": "Claims refund for assertions that receive no proposals before deadline" }, "claimUndisputedReward(uint256)": { "notice": "Claims reward for undisputed assertions after dispute window expires" }, "constructor": { "notice": "Constructor ///" }, "disputeOutcome(uint256)": { "notice": "Disputes a proposed outcome by bonding ETH" }, "getAssertion(uint256)": { "notice": "Returns the complete assertion details for a given assertion ID" }, "getResolution(uint256)": { "notice": "Returns the final resolved outcome of a settled assertion" }, "getState(uint256)": { "notice": "Returns the current state of an assertion based on its lifecycle stage" }, "proposeOutcome(uint256,bool)": { "notice": "Proposes the outcome (true or false) for an asserted event" }, "setDecider(address)": { "notice": "Updates the decider address (only contract owner)" }, "settleAssertion(uint256,bool)": { "notice": "Resolves disputed assertions by determining the correct outcome (only decider)" } }, "version": 1 }, "storageLayout": { "storage": [ { "astId": 70, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "decider", "offset": 0, "slot": "0", "type": "t_address" }, { "astId": 72, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "owner", "offset": 0, "slot": "1", "type": "t_address" }, { "astId": 75, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "nextAssertionId", "offset": 0, "slot": "2", "type": "t_uint256" }, { "astId": 80, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "assertions", "offset": 0, "slot": "3", "type": "t_mapping(t_uint256,t_struct(EventAssertion)62_storage)" } ], "types": { "t_address": { "encoding": "inplace", "label": "address", "numberOfBytes": "20" }, "t_bool": { "encoding": "inplace", "label": "bool", "numberOfBytes": "1" }, "t_mapping(t_uint256,t_struct(EventAssertion)62_storage)": { "encoding": "mapping", "key": "t_uint256", "label": "mapping(uint256 => struct OptimisticOracle.EventAssertion)", "numberOfBytes": "32", "value": "t_struct(EventAssertion)62_storage" }, "t_string_storage": { "encoding": "bytes", "label": "string", "numberOfBytes": "32" }, "t_struct(EventAssertion)62_storage": { "encoding": "inplace", "label": "struct OptimisticOracle.EventAssertion", "members": [ { "astId": 39, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "asserter", "offset": 0, "slot": "0", "type": "t_address" }, { "astId": 41, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "proposer", "offset": 0, "slot": "1", "type": "t_address" }, { "astId": 43, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "disputer", "offset": 0, "slot": "2", "type": "t_address" }, { "astId": 45, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "proposedOutcome", "offset": 20, "slot": "2", "type": "t_bool" }, { "astId": 47, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "resolvedOutcome", "offset": 21, "slot": "2", "type": "t_bool" }, { "astId": 49, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "reward", "offset": 0, "slot": "3", "type": "t_uint256" }, { "astId": 51, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "bond", "offset": 0, "slot": "4", "type": "t_uint256" }, { "astId": 53, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "startTime", "offset": 0, "slot": "5", "type": "t_uint256" }, { "astId": 55, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "endTime", "offset": 0, "slot": "6", "type": "t_uint256" }, { "astId": 57, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "claimed", "offset": 0, "slot": "7", "type": "t_bool" }, { "astId": 59, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "winner", "offset": 1, "slot": "7", "type": "t_address" }, { "astId": 61, "contract": "contracts/02_Optimistic/OptimisticOracle.sol:OptimisticOracle", "label": "description", "offset": 0, "slot": "8", "type": "t_string_storage" } ], "numberOfBytes": "288" }, "t_uint256": { "encoding": "inplace", "label": "uint256", "numberOfBytes": "32" } } } }