Files
sre-06-oracles/packages/hardhat/deployments/sepolia/OptimisticOracle.json
han c18c66cca1
Some checks failed
Lint / ci (lts/*, ubuntu-latest) (push) Has been cancelled
feat: finish up challenges
2026-01-26 18:22:19 +07:00

972 lines
82 KiB
JSON

{
"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"
}
}
}
}