More Info
Private Name Tags
ContractCreator
Latest 5 from a total of 5 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Report Arbitrati... | 36329431 | 872 days ago | IN | 0 POL | 0.00354492 | ||||
Handle Notified ... | 35708864 | 887 days ago | IN | 0 POL | 0.00099802 | ||||
Report Arbitrati... | 35704373 | 888 days ago | IN | 0 POL | 0.00174473 | ||||
Handle Notified ... | 35092271 | 903 days ago | IN | 0 POL | 0.00169085 | ||||
Set Fx Root Tunn... | 35024938 | 904 days ago | IN | 0 POL | 0.00138118 |
Loading...
Loading
Contract Name:
RealitioHomeArbitrationProxy
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT /** * @authors: [@hbarcelos, @shalzz] * @reviewers: [@ferittuncer*, @fnanni-0*, @nix1g*, @epiqueras*, @clesaege*, @unknownunknown1, @jaybuidl] * @auditors: [] * @bounties: [] * @deployments: [] */ pragma solidity ^0.8.0; import {FxBaseChildTunnel} from "./dependencies/FxBaseChildTunnel.sol"; import {RealitioInterface} from "./dependencies/RealitioInterface.sol"; import {IForeignArbitrationProxy, IHomeArbitrationProxy} from "./ArbitrationProxyInterfaces.sol"; /** * @title Arbitration proxy for Realitio on the side-chain side (A.K.A. the Home Chain). * @dev This contract is meant to be deployed to side-chains in which Reality.eth is deployed. */ contract RealitioHomeArbitrationProxy is IHomeArbitrationProxy, FxBaseChildTunnel { /// @dev The address of the Realitio contract (v3.0 required). TRUSTED. RealitioInterface public immutable realitio; /// @dev ID of the foreign chain, required for Realitio. bytes32 public immutable foreignChainId; /// @dev Metadata for Realitio interface. string public override metadata; enum Status { None, Rejected, Notified, AwaitingRuling, Ruled, Finished } struct Request { Status status; bytes32 arbitratorAnswer; } /// @dev Associates an arbitration request with a question ID and a requester address. requests[questionID][requester] mapping(bytes32 => mapping(address => Request)) public requests; /// @dev Associates a question ID with the requester who succeeded in requesting arbitration. questionIDToRequester[questionID] mapping(bytes32 => address) public questionIDToRequester; /** * @dev This is applied to functions called via the internal function * `_processMessageFromRoot` which is invoked via the Polygon bridge (see FxBaseChildTunnel) * * The functions requiring this modifier cannot simply be declared internal as * we still need the ABI generated of these functions to be able to call them * across contracts and have the compiler type check the function signatures. */ modifier onlyBridge() { require(msg.sender == address(this), "Can only be called via bridge"); _; } /** * @notice Creates an arbitration proxy on the home chain. * @param _fxChild Address of the FxChild contract of the Polygon bridge * @param _realitio Realitio contract address. * @param _foreignChainId The ID of foreign chain (Goerli/Mainnet). * @param _metadata Metadata for Realitio */ constructor( address _fxChild, RealitioInterface _realitio, uint256 _foreignChainId, string memory _metadata ) FxBaseChildTunnel(_fxChild) { realitio = _realitio; foreignChainId = bytes32(_foreignChainId); metadata = _metadata; } /** * @dev Receives the requested arbitration for a question. TRUSTED. * @param _questionID The ID of the question. * @param _requester The address of the user that requested arbitration. * @param _maxPrevious The maximum value of the previous bond for the question. */ function receiveArbitrationRequest( bytes32 _questionID, address _requester, uint256 _maxPrevious ) external override onlyBridge { Request storage request = requests[_questionID][_requester]; require(request.status == Status.None, "Request already exists"); try realitio.notifyOfArbitrationRequest(_questionID, _requester, _maxPrevious) { request.status = Status.Notified; questionIDToRequester[_questionID] = _requester; emit RequestNotified(_questionID, _requester, _maxPrevious); } catch Error(string memory reason) { /* * Will fail if: * - The question does not exist. * - The question was not answered yet. * - Another request was already accepted. * - Someone increased the bond on the question to a value > _maxPrevious */ request.status = Status.Rejected; emit RequestRejected(_questionID, _requester, _maxPrevious, reason); } catch { // In case `reject` did not have a reason string or some other error happened request.status = Status.Rejected; emit RequestRejected(_questionID, _requester, _maxPrevious, ""); } } /** * @notice Handles arbitration request after it has been notified to Realitio for a given question. * @dev This method exists because `receiveArbitrationRequest` is called by the Polygon Bridge * and cannot send messages back to it. * @param _questionID The ID of the question. * @param _requester The address of the user that requested arbitration. */ function handleNotifiedRequest(bytes32 _questionID, address _requester) external override { Request storage request = requests[_questionID][_requester]; require(request.status == Status.Notified, "Invalid request status"); request.status = Status.AwaitingRuling; bytes4 selector = IForeignArbitrationProxy.receiveArbitrationAcknowledgement.selector; bytes memory data = abi.encodeWithSelector(selector, _questionID, _requester); _sendMessageToRoot(data); emit RequestAcknowledged(_questionID, _requester); } /** * @notice Handles arbitration request after it has been rejected. * @dev This method exists because `receiveArbitrationRequest` is called by the Polygon Bridge * and cannot send messages back to it. * Reasons why the request might be rejected: * - The question does not exist * - The question was not answered yet * - The quesiton bond value changed while the arbitration was being requested * - Another request was already accepted * @param _questionID The ID of the question. * @param _requester The address of the user that requested arbitration. */ function handleRejectedRequest(bytes32 _questionID, address _requester) external override { Request storage request = requests[_questionID][_requester]; require(request.status == Status.Rejected, "Invalid request status"); // At this point, only the request.status is set, simply reseting the status to Status.None is enough. request.status = Status.None; bytes4 selector = IForeignArbitrationProxy.receiveArbitrationCancelation.selector; bytes memory data = abi.encodeWithSelector(selector, _questionID, _requester); _sendMessageToRoot(data); emit RequestCanceled(_questionID, _requester); } /** * @notice Receives a failed attempt to request arbitration. TRUSTED. * @dev Currently this can happen only if the arbitration cost increased. * @param _questionID The ID of the question. * @param _requester The address of the user that requested arbitration. */ function receiveArbitrationFailure(bytes32 _questionID, address _requester) external override onlyBridge { Request storage request = requests[_questionID][_requester]; require(request.status == Status.AwaitingRuling, "Invalid request status"); // At this point, only the request.status is set, simply reseting the status to Status.None is enough. request.status = Status.None; realitio.cancelArbitration(_questionID); emit ArbitrationFailed(_questionID, _requester); } /** * @notice Receives the answer to a specified question. TRUSTED. * @param _questionID The ID of the question. * @param _answer The answer from the arbitrator. */ function receiveArbitrationAnswer(bytes32 _questionID, bytes32 _answer) external override onlyBridge { address requester = questionIDToRequester[_questionID]; Request storage request = requests[_questionID][requester]; require(request.status == Status.AwaitingRuling, "Invalid request status"); request.status = Status.Ruled; request.arbitratorAnswer = _answer; emit ArbitratorAnswered(_questionID, _answer); } /** * @notice Reports the answer provided by the arbitrator to a specified question. * @dev The Realitio contract validates the input parameters passed to this method, * so making this publicly accessible is safe. * @param _questionID The ID of the question. * @param _lastHistoryHash The history hash given with the last answer to the question in the Realitio contract. * @param _lastAnswerOrCommitmentID The last answer given, or its commitment ID if it was a commitment, * to the question in the Realitio contract. * @param _lastAnswerer The last answerer to the question in the Realitio contract. */ function reportArbitrationAnswer( bytes32 _questionID, bytes32 _lastHistoryHash, bytes32 _lastAnswerOrCommitmentID, address _lastAnswerer ) external { address requester = questionIDToRequester[_questionID]; Request storage request = requests[_questionID][requester]; require(request.status == Status.Ruled, "Arbitrator has not ruled yet"); realitio.assignWinnerAndSubmitAnswerByArbitrator( _questionID, request.arbitratorAnswer, requester, _lastHistoryHash, _lastAnswerOrCommitmentID, _lastAnswerer ); request.status = Status.Finished; emit ArbitrationFinished(_questionID); } /** * @notice Realitio interface requires home proxy to return foreign proxy. */ function foreignProxy() external view returns (address) { return fxRootTunnel; } function _processMessageFromRoot( uint256 stateId, address sender, bytes memory _data ) internal override validateSender(sender) { // solhint-disable-next-line avoid-low-level-calls (bool success, ) = address(this).call(_data); require(success, "Failed to call contract"); } }
// SPDX-License-Identifier: MIT // https://github.com/fx-portal/contracts/blob/v1.0.5/contracts/tunnel/FxBaseChildTunnel.sol pragma solidity ^0.8.0; // IFxMessageProcessor represents interface to process message interface IFxMessageProcessor { function processMessageFromRoot( uint256 stateId, address rootMessageSender, bytes calldata data ) external; } /** * @notice Mock child tunnel contract to receive and send message from L2 */ abstract contract FxBaseChildTunnel is IFxMessageProcessor { // MessageTunnel on L1 will get data from this event event MessageSent(bytes message); // fx child address public fxChild; // fx root tunnel address public fxRootTunnel; constructor(address _fxChild) { fxChild = _fxChild; } // Sender must be fxRootTunnel in case of ERC20 tunnel modifier validateSender(address sender) { require(sender == fxRootTunnel, "FxBaseChildTunnel: INVALID_SENDER_FROM_ROOT"); _; } // set fxRootTunnel if not set already function setFxRootTunnel(address _fxRootTunnel) external { require(fxRootTunnel == address(0x0), "FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET"); fxRootTunnel = _fxRootTunnel; } function processMessageFromRoot( uint256 stateId, address rootMessageSender, bytes calldata data ) external override { require(msg.sender == fxChild, "FxBaseChildTunnel: INVALID_SENDER"); _processMessageFromRoot(stateId, rootMessageSender, data); } /** * @notice Emit message that can be received on Root Tunnel * @dev Call the internal function when need to emit message * @dev virtual is required to be able to mock this function in tests * @param message bytes message that will be sent to Root Tunnel * some message examples - * abi.encode(tokenId); * abi.encode(tokenId, tokenMetadata); * abi.encode(messageType, messageData); */ function _sendMessageToRoot(bytes memory message) internal virtual { emit MessageSent(message); } /** * @notice Process message received from Root Tunnel * @dev function needs to be implemented to handle message as per requirement * This is called by onStateReceive function. * Since it is called via a system call, any event will not be emitted during its execution. * @param stateId unique state id * @param sender root message sender * @param message bytes message that was sent from Root Tunnel */ function _processMessageFromRoot( uint256 stateId, address sender, bytes memory message ) internal virtual; }
/* solhint-disable var-name-mixedcase */ // SPDX-License-Identifier: MIT /** Interface of https://github.com/realitio/realitio-contracts/blob/master/truffle/contracts/Realitio_v2_1.sol original contract is to be reviewed. * @reviewers: [@hbarcelos, @fnanni-0, @nix1g, @unknownunknown1, @ferittuncer, @jaybuidl] * @auditors: [] * @bounties: [] * @deployments: [] */ pragma solidity ^0.8.0; interface RealitioInterface { event LogNewAnswer( bytes32 answer, bytes32 indexed question_id, bytes32 history_hash, address indexed user, uint256 bond, uint256 ts, bool is_commitment ); event LogNewTemplate(uint256 indexed template_id, address indexed user, string question_text); event LogNewQuestion( bytes32 indexed question_id, address indexed user, uint256 template_id, string question, bytes32 indexed content_hash, address arbitrator, uint32 timeout, uint32 opening_ts, uint256 nonce, uint256 created ); /** * @dev The arbitrator contract is trusted to only call this if they've been paid, and tell us who paid them. * @notice Notify the contract that the arbitrator has been paid for a question, freezing it pending their decision. * @param question_id The ID of the question. * @param requester The account that requested arbitration. * @param max_previous If specified, reverts if a bond higher than this was submitted after you sent your transaction. */ function notifyOfArbitrationRequest( bytes32 question_id, address requester, uint256 max_previous ) external; /** * @notice Cancel a previously-requested arbitration and extend the timeout * @dev Useful when doing arbitration across chains that can't be requested atomically * @param question_id The ID of the question */ function cancelArbitration(bytes32 question_id) external; /** * @notice Submit the answer for a question, for use by the arbitrator, working out the appropriate winner based on the last answer details. * @dev Doesn't require (or allow) a bond. * @param question_id The ID of the question * @param answer The answer, encoded into bytes32 * @param payee_if_wrong The account to be credited as winner if the last answer given is wrong, usually the account that paid the arbitrator * @param last_history_hash The history hash before the final one * @param last_answer_or_commitment_id The last answer given, or the commitment ID if it was a commitment. * @param last_answerer The address that supplied the last answer */ function assignWinnerAndSubmitAnswerByArbitrator( bytes32 question_id, bytes32 answer, address payee_if_wrong, bytes32 last_history_hash, bytes32 last_answer_or_commitment_id, address last_answerer ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {IArbitrable} from "@kleros/erc-792/contracts/IArbitrable.sol"; import {IEvidence} from "@kleros/erc-792/contracts/erc-1497/IEvidence.sol"; interface IHomeArbitrationProxy { /** * @notice To be emitted when the Realitio contract has been notified of an arbitration request. * @param _questionID The ID of the question. * @param _requester The address of the arbitration requester. * @param _maxPrevious The maximum value of the previous bond for the question. */ event RequestNotified(bytes32 indexed _questionID, address indexed _requester, uint256 _maxPrevious); /** * @notice To be emitted when arbitration request is rejected. * @dev This can happen if the current bond for the question is higher than maxPrevious * or if the question is already finalized. * @param _questionID The ID of the question. * @param _requester The address of the arbitration requester. * @param _maxPrevious The maximum value of the current bond for the question. * @param _reason The reason why the request was rejected. */ event RequestRejected( bytes32 indexed _questionID, address indexed _requester, uint256 _maxPrevious, string _reason ); /** * @notice To be emitted when the arbitration request acknowledgement is sent to the Foreign Chain. * @param _questionID The ID of the question. * @param _requester The address of the arbitration requester. */ event RequestAcknowledged(bytes32 indexed _questionID, address indexed _requester); /** * @notice To be emitted when the arbitration request is canceled. * @param _questionID The ID of the question. * @param _requester The address of the arbitration requester. */ event RequestCanceled(bytes32 indexed _questionID, address indexed _requester); /** * @notice To be emitted when the dispute could not be created on the Foreign Chain. * @dev This will happen if the arbitration fee increases in between the arbitration request and acknowledgement. * @param _questionID The ID of the question. * @param _requester The address of the arbitration requester. */ event ArbitrationFailed(bytes32 indexed _questionID, address indexed _requester); /** * @notice To be emitted when receiving the answer from the arbitrator. * @param _questionID The ID of the question. * @param _answer The answer from the arbitrator. */ event ArbitratorAnswered(bytes32 indexed _questionID, bytes32 _answer); /** * @notice To be emitted when reporting the arbitrator answer to Realitio. * @param _questionID The ID of the question. */ event ArbitrationFinished(bytes32 indexed _questionID); /** * @dev Receives the requested arbitration for a question. TRUSTED. * @param _questionID The ID of the question. * @param _requester The address of the arbitration requester. * @param _maxPrevious The maximum value of the current bond for the question. The arbitration request will get rejected if the current bond is greater than _maxPrevious. If set to 0, _maxPrevious is ignored. */ function receiveArbitrationRequest( bytes32 _questionID, address _requester, uint256 _maxPrevious ) external; /** * @notice Handles arbitration request after it has been notified to Realitio for a given question. * @dev This method exists because `receiveArbitrationRequest` is called by * the Polygon Bridge and cannot send messages back to it. * @param _questionID The ID of the question. * @param _requester The address of the arbitration requester. */ function handleNotifiedRequest(bytes32 _questionID, address _requester) external; /** * @notice Handles arbitration request after it has been rejected. * @dev This method exists because `receiveArbitrationRequest` is called by * the Polygon Bridge and cannot send messages back to it. * Reasons why the request might be rejected: * - The question does not exist * - The question was not answered yet * - The quesiton bond value changed while the arbitration was being requested * - Another request was already accepted * @param _questionID The ID of the question. * @param _requester The address of the arbitration requester. */ function handleRejectedRequest(bytes32 _questionID, address _requester) external; /** * @notice Receives a failed attempt to request arbitration. TRUSTED. * @dev Currently this can happen only if the arbitration cost increased. * @param _questionID The ID of the question. * @param _requester The address of the arbitration requester. */ function receiveArbitrationFailure(bytes32 _questionID, address _requester) external; /** * @notice Receives the answer to a specified question. TRUSTED. * @param _questionID The ID of the question. * @param _answer The answer from the arbitrator. */ function receiveArbitrationAnswer(bytes32 _questionID, bytes32 _answer) external; /** @notice Provides a string of json-encoded metadata with the following properties: - tos: A URI representing the location of a terms-of-service document for the arbitrator. - template_hashes: An array of hashes of templates supported by the arbitrator. If you have a numerical ID for a template registered with Reality.eth, you can look up this hash by calling the Reality.eth template_hashes() function. * @dev Template_hashes won't be used by this home proxy. */ function metadata() external view returns (string calldata); } interface IForeignArbitrationProxy is IArbitrable, IEvidence { /** * @notice Should be emitted when the arbitration is requested. * @param _questionID The ID of the question with the request for arbitration. * @param _requester The address of the arbitration requester. * @param _maxPrevious The maximum value of the current bond for the question. The arbitration request will get rejected if the current bond is greater than _maxPrevious. If set to 0, _maxPrevious is ignored. */ event ArbitrationRequested(bytes32 indexed _questionID, address indexed _requester, uint256 _maxPrevious); /** * @notice Should be emitted when the dispute is created. * @param _questionID The ID of the question with the request for arbitration. * @param _requester The address of the arbitration requester. * @param _disputeID The ID of the dispute. */ event ArbitrationCreated(bytes32 indexed _questionID, address indexed _requester, uint256 indexed _disputeID); /** * @notice Should be emitted when the arbitration is canceled by the Home Chain. * @param _questionID The ID of the question with the request for arbitration. * @param _requester The address of the arbitration requester. */ event ArbitrationCanceled(bytes32 indexed _questionID, address indexed _requester); /** * @notice Should be emitted when the dispute could not be created. * @dev This will happen if there is an increase in the arbitration fees * between the time the arbitration is made and the time it is acknowledged. * @param _questionID The ID of the question with the request for arbitration. * @param _requester The address of the arbitration requester. */ event ArbitrationFailed(bytes32 indexed _questionID, address indexed _requester); /** * @notice Requests arbitration for the given question. * @param _questionID The ID of the question. * @param _maxPrevious The maximum value of the current bond for the question. The arbitration request will get rejected if the current bond is greater than _maxPrevious. If set to 0, _maxPrevious is ignored. */ function requestArbitration(bytes32 _questionID, uint256 _maxPrevious) external payable; /** * @notice Receives the acknowledgement of the arbitration request for the given question and requester. TRUSTED. * @param _questionID The ID of the question. * @param _requester The address of the arbitration requester. */ function receiveArbitrationAcknowledgement(bytes32 _questionID, address _requester) external; /** * @notice Receives the cancelation of the arbitration request for the given question and requester. TRUSTED. * @param _questionID The ID of the question. * @param _requester The address of the arbitration requester. */ function receiveArbitrationCancelation(bytes32 _questionID, address _requester) external; /** * @notice Cancels the arbitration in case the dispute could not be created. * @param _questionID The ID of the question. * @param _requester The address of the arbitration requester. */ function handleFailedDisputeCreation(bytes32 _questionID, address _requester) external; /** * @notice Gets the fee to create a dispute. * @param _questionID the ID of the question. * @return The fee to create a dispute. */ function getDisputeFee(bytes32 _questionID) external view returns (uint256); }
/** * @authors: [@ferittuncer, @hbarcelos] * @reviewers: [@remedcu] * @auditors: [] * @bounties: [] * @deployments: [] * SPDX-License-Identifier: MIT */ pragma solidity ^0.8.0; import "./IArbitrator.sol"; /** * @title IArbitrable * Arbitrable interface. * When developing arbitrable contracts, we need to: * - Define the action taken when a ruling is received by the contract. * - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData); */ interface IArbitrable { /** * @dev To be raised when a ruling is given. * @param _arbitrator The arbitrator giving the ruling. * @param _disputeID ID of the dispute in the Arbitrator contract. * @param _ruling The ruling which was given. */ event Ruling(IArbitrator indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling); /** * @dev Give a ruling for a dispute. Must be called by the arbitrator. * The purpose of this function is to ensure that the address calling it has the right to rule on the contract. * @param _disputeID ID of the dispute in the Arbitrator contract. * @param _ruling Ruling given by the arbitrator. Note that 0 is reserved for "Not able/wanting to make a decision". */ function rule(uint256 _disputeID, uint256 _ruling) external; }
/** * @authors: [@ferittuncer, @hbarcelos] * @reviewers: [] * @auditors: [] * @bounties: [] * @deployments: [] * SPDX-License-Identifier: MIT */ pragma solidity ^0.8.0; import "../IArbitrator.sol"; /** @title IEvidence * ERC-1497: Evidence Standard */ interface IEvidence { /** * @dev To be emitted when meta-evidence is submitted. * @param _metaEvidenceID Unique identifier of meta-evidence. * @param _evidence IPFS path to metaevidence, example: '/ipfs/Qmarwkf7C9RuzDEJNnarT3WZ7kem5bk8DZAzx78acJjMFH/metaevidence.json' */ event MetaEvidence(uint256 indexed _metaEvidenceID, string _evidence); /** * @dev To be raised when evidence is submitted. Should point to the resource (evidences are not to be stored on chain due to gas considerations). * @param _arbitrator The arbitrator of the contract. * @param _evidenceGroupID Unique identifier of the evidence group the evidence belongs to. * @param _party The address of the party submiting the evidence. Note that 0x0 refers to evidence not submitted by any party. * @param _evidence IPFS path to evidence, example: '/ipfs/Qmarwkf7C9RuzDEJNnarT3WZ7kem5bk8DZAzx78acJjMFH/evidence.json' */ event Evidence( IArbitrator indexed _arbitrator, uint256 indexed _evidenceGroupID, address indexed _party, string _evidence ); /** * @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID. * @param _arbitrator The arbitrator of the contract. * @param _disputeID ID of the dispute in the Arbitrator contract. * @param _metaEvidenceID Unique identifier of meta-evidence. * @param _evidenceGroupID Unique identifier of the evidence group that is linked to this dispute. */ event Dispute( IArbitrator indexed _arbitrator, uint256 indexed _disputeID, uint256 _metaEvidenceID, uint256 _evidenceGroupID ); }
/** * @authors: [@ferittuncer, @hbarcelos] * @reviewers: [@remedcu] * @auditors: [] * @bounties: [] * @deployments: [] * SPDX-License-Identifier: MIT */ pragma solidity ^0.8.0; import "./IArbitrable.sol"; /** * @title Arbitrator * Arbitrator abstract contract. * When developing arbitrator contracts we need to: * - Define the functions for dispute creation (createDispute) and appeal (appeal). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes). * - Define the functions for cost display (arbitrationCost and appealCost). * - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling). */ interface IArbitrator { enum DisputeStatus { Waiting, Appealable, Solved } /** * @dev To be emitted when a dispute is created. * @param _disputeID ID of the dispute. * @param _arbitrable The contract which created the dispute. */ event DisputeCreation(uint256 indexed _disputeID, IArbitrable indexed _arbitrable); /** * @dev To be emitted when a dispute can be appealed. * @param _disputeID ID of the dispute. * @param _arbitrable The contract which created the dispute. */ event AppealPossible(uint256 indexed _disputeID, IArbitrable indexed _arbitrable); /** * @dev To be emitted when the current ruling is appealed. * @param _disputeID ID of the dispute. * @param _arbitrable The contract which created the dispute. */ event AppealDecision(uint256 indexed _disputeID, IArbitrable indexed _arbitrable); /** * @dev Create a dispute. Must be called by the arbitrable contract. * Must be paid at least arbitrationCost(_extraData). * @param _choices Amount of choices the arbitrator can make in this dispute. * @param _extraData Can be used to give additional info on the dispute to be created. * @return disputeID ID of the dispute created. */ function createDispute(uint256 _choices, bytes calldata _extraData) external payable returns (uint256 disputeID); /** * @dev Compute the cost of arbitration. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation. * @param _extraData Can be used to give additional info on the dispute to be created. * @return cost Amount to be paid. */ function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost); /** * @dev Appeal a ruling. Note that it has to be called before the arbitrator contract calls rule. * @param _disputeID ID of the dispute to be appealed. * @param _extraData Can be used to give extra info on the appeal. */ function appeal(uint256 _disputeID, bytes calldata _extraData) external payable; /** * @dev Compute the cost of appeal. It is recommended not to increase it often, as it can be higly time and gas consuming for the arbitrated contracts to cope with fee augmentation. * @param _disputeID ID of the dispute to be appealed. * @param _extraData Can be used to give additional info on the dispute to be created. * @return cost Amount to be paid. */ function appealCost(uint256 _disputeID, bytes calldata _extraData) external view returns (uint256 cost); /** * @dev Compute the start and end of the dispute's current or next appeal period, if possible. If not known or appeal is impossible: should return (0, 0). * @param _disputeID ID of the dispute. * @return start The start of the period. * @return end The end of the period. */ function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end); /** * @dev Return the status of a dispute. * @param _disputeID ID of the dispute to rule. * @return status The status of the dispute. */ function disputeStatus(uint256 _disputeID) external view returns (DisputeStatus status); /** * @dev Return the current ruling of a dispute. This is useful for parties to know if they should appeal. * @param _disputeID ID of the dispute. * @return ruling The ruling which has been given or the one which will be given if there is no appeal. */ function currentRuling(uint256 _disputeID) external view returns (uint256 ruling); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_fxChild","type":"address"},{"internalType":"contract RealitioInterface","name":"_realitio","type":"address"},{"internalType":"uint256","name":"_foreignChainId","type":"uint256"},{"internalType":"string","name":"_metadata","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_questionID","type":"bytes32"},{"indexed":true,"internalType":"address","name":"_requester","type":"address"}],"name":"ArbitrationFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_questionID","type":"bytes32"}],"name":"ArbitrationFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_questionID","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"_answer","type":"bytes32"}],"name":"ArbitratorAnswered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_questionID","type":"bytes32"},{"indexed":true,"internalType":"address","name":"_requester","type":"address"}],"name":"RequestAcknowledged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_questionID","type":"bytes32"},{"indexed":true,"internalType":"address","name":"_requester","type":"address"}],"name":"RequestCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_questionID","type":"bytes32"},{"indexed":true,"internalType":"address","name":"_requester","type":"address"},{"indexed":false,"internalType":"uint256","name":"_maxPrevious","type":"uint256"}],"name":"RequestNotified","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_questionID","type":"bytes32"},{"indexed":true,"internalType":"address","name":"_requester","type":"address"},{"indexed":false,"internalType":"uint256","name":"_maxPrevious","type":"uint256"},{"indexed":false,"internalType":"string","name":"_reason","type":"string"}],"name":"RequestRejected","type":"event"},{"inputs":[],"name":"foreignChainId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"foreignProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fxChild","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fxRootTunnel","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_questionID","type":"bytes32"},{"internalType":"address","name":"_requester","type":"address"}],"name":"handleNotifiedRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_questionID","type":"bytes32"},{"internalType":"address","name":"_requester","type":"address"}],"name":"handleRejectedRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"metadata","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stateId","type":"uint256"},{"internalType":"address","name":"rootMessageSender","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"processMessageFromRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"questionIDToRequester","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"realitio","outputs":[{"internalType":"contract RealitioInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_questionID","type":"bytes32"},{"internalType":"bytes32","name":"_answer","type":"bytes32"}],"name":"receiveArbitrationAnswer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_questionID","type":"bytes32"},{"internalType":"address","name":"_requester","type":"address"}],"name":"receiveArbitrationFailure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_questionID","type":"bytes32"},{"internalType":"address","name":"_requester","type":"address"},{"internalType":"uint256","name":"_maxPrevious","type":"uint256"}],"name":"receiveArbitrationRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_questionID","type":"bytes32"},{"internalType":"bytes32","name":"_lastHistoryHash","type":"bytes32"},{"internalType":"bytes32","name":"_lastAnswerOrCommitmentID","type":"bytes32"},{"internalType":"address","name":"_lastAnswerer","type":"address"}],"name":"reportArbitrationAnswer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"requests","outputs":[{"internalType":"enum RealitioHomeArbitrationProxy.Status","name":"status","type":"uint8"},{"internalType":"bytes32","name":"arbitratorAnswer","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_fxRootTunnel","type":"address"}],"name":"setFxRootTunnel","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b50604051620015b2380380620015b283398101604081905262000034916200012c565b600080546001600160a01b0319166001600160a01b038616179055606083901b6001600160601b03191660805260a082905280516200007b90600290602084019062000086565b50505050506200029d565b828054620000949062000231565b90600052602060002090601f016020900481019282620000b8576000855562000103565b82601f10620000d357805160ff191683800117855562000103565b8280016001018555821562000103579182015b8281111562000103578251825591602001919060010190620000e6565b506200011192915062000115565b5090565b5b8082111562000111576000815560010162000116565b6000806000806080858703121562000142578384fd5b84516200014f8162000284565b80945050602080860151620001648162000284565b6040870151606088015191955093506001600160401b038082111562000188578384fd5b818801915088601f8301126200019c578384fd5b815181811115620001b157620001b16200026e565b604051601f8201601f1916810185018381118282101715620001d757620001d76200026e565b60405281815283820185018b1015620001ee578586fd5b8592505b81831015620002115783830185015181840186015291840191620001f2565b818311156200022257858583830101525b979a9699509497505050505050565b6002810460018216806200024657607f821691505b602082108114156200026857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200029a57600080fd5b50565b60805160601c60a0516112d7620002db60003960006105a20152600081816102e101528181610637015281816106f4015261096a01526112d76000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806395e088fc11610097578063c510faf711610066578063c510faf7146101d9578063c77cccc9146101fa578063ccd6e8d21461020d578063d75a86e01461022057610100565b806395e088fc146101965780639a7c4b71146101ab578063bc8802a2146101be578063bf6569e0146101c657610100565b80636e190f17116100d35780636e190f17146101605780637f1e9cb014610168578063888370941461017057806391602fd71461018357610100565b80631865fed114610105578063241a9f821461012e578063392f37e914610143578063450d11f014610158575b600080fd5b610118610113366004610d15565b610233565b6040516101259190610eb5565b60405180910390f35b61014161013c366004610dad565b61024e565b005b61014b61038e565b6040516101259190610f3c565b61011861041c565b61011861042b565b61011861043b565b61014161017e366004610cf4565b61044a565b610141610191366004610d2d565b610495565b61019e6105a0565b6040516101259190610ec9565b6101416101b9366004610deb565b6105c4565b610118610635565b6101416101d4366004610d2d565b610659565b6101ec6101e7366004610d2d565b61079e565b604051610125929190610f4f565b610141610208366004610d2d565b6107c8565b61014161021b366004610d58565b6108d0565b61014161022e366004610d8c565b610b0a565b6004602052600090815260409020546001600160a01b031681565b600084815260046020818152604080842054600383528185206001600160a01b03909116808652925290922090815460ff16600581111561029f57634e487b7160e01b600052602160045260246000fd5b146102c55760405162461bcd60e51b81526004016102bc9061109e565b60405180910390fd5b60018101546040516335138a4f60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163d44e293c9161031e918a9187908b908b908b90600401610f08565b600060405180830381600087803b15801561033857600080fd5b505af115801561034c573d6000803e3d6000fd5b5050825460ff19166005178355505060405186907f2abf2fd86256e4607561adae782a4853682b6c0b976995a9a45c5fc3a175738690600090a2505050505050565b6002805461039b906111bb565b80601f01602080910402602001604051908101604052809291908181526020018280546103c7906111bb565b80156104145780601f106103e957610100808354040283529160200191610414565b820191906000526020600020905b8154815290600101906020018083116103f757829003601f168201915b505050505081565b6000546001600160a01b031681565b6001546001600160a01b03165b90565b6001546001600160a01b031681565b6001546001600160a01b0316156104735760405162461bcd60e51b81526004016102bc906110d5565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526003602090815260408083206001600160a01b038516845290915290206002815460ff1660058111156104dd57634e487b7160e01b600052602160045260246000fd5b146104fa5760405162461bcd60e51b81526004016102bc9061103e565b805460ff1916600317815560405163e742e2ed60e01b9060009082906105269087908790602401610ed2565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905061056381610beb565b6040516001600160a01b0385169086907fff09615c531ab8799ea1c67a0952ddbef1c864ef91d390995d0dc07656f4210f90600090a35050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146105ee5760405162461bcd60e51b81526004016102bc90610f7b565b61062f848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c2592505050565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b3330146106785760405162461bcd60e51b81526004016102bc9061111f565b60008281526003602081815260408084206001600160a01b038616855290915290912090815460ff1660058111156106c057634e487b7160e01b600052602160045260246000fd5b146106dd5760405162461bcd60e51b81526004016102bc9061103e565b805460ff19168155604051630ebbdd2b60e41b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ebbdd2b090610731908690600401610ec9565b600060405180830381600087803b15801561074b57600080fd5b505af115801561075f573d6000803e3d6000fd5b50506040516001600160a01b03851692508591507f9beda0c81abc1c65da7685f113195974dfddb781dfde6263e5a1b13a5356ffad90600090a3505050565b60036020908152600092835260408084209091529082529020805460019091015460ff9091169082565b60008281526003602090815260408083206001600160a01b038516845290915290206001815460ff16600581111561081057634e487b7160e01b600052602160045260246000fd5b1461082d5760405162461bcd60e51b81526004016102bc9061103e565b805460ff191681556040516317c4df9160e31b9060009082906108569087908790602401610ed2565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905061089381610beb565b6040516001600160a01b0385169086907ff313a768599b60b7f8aedb7757d867d09463365b79b55b86ed3c961e6da5a24990600090a35050505050565b3330146108ef5760405162461bcd60e51b81526004016102bc9061111f565b60008381526003602090815260408083206001600160a01b0386168452909152812090815460ff16600581111561093657634e487b7160e01b600052602160045260246000fd5b146109535760405162461bcd60e51b81526004016102bc9061106e565b60405163f6a94ecb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f6a94ecb906109a390879087908790600401610ee9565b600060405180830381600087803b1580156109bd57600080fd5b505af19250505080156109ce575060015b610a93576109da6111fc565b806109e55750610a3d565b815460ff191660011782556040516001600160a01b0385169086907ff677e762f2ddc710deec335dd0cfa8a65cc9c9c351b268243be8629f2e8d1b5f90610a2f9087908690611156565b60405180910390a350610a8e565b805460ff191660011781556040516001600160a01b0384169085907ff677e762f2ddc710deec335dd0cfa8a65cc9c9c351b268243be8629f2e8d1b5f90610a85908690611177565b60405180910390a35b61062f565b805460ff191660021781556000848152600460205260409081902080546001600160a01b0386166001600160a01b03199091168117909155905185907ff56e18fc84dbd66db78337b5bd0973943fa70c9b52243a540bdac79274f6682d90610afc908690610ec9565b60405180910390a350505050565b333014610b295760405162461bcd60e51b81526004016102bc9061111f565b60008281526004602090815260408083205460038084528285206001600160a01b0390921680865291909352922090815460ff166005811115610b7c57634e487b7160e01b600052602160045260246000fd5b14610b995760405162461bcd60e51b81526004016102bc9061103e565b805460ff191660041781556001810183905560405184907f1813d15d8cef51cff8bbd419a8e13e0655c1babea320dea4174d5e7bc40c429490610bdd908690610ec9565b60405180910390a250505050565b7f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681604051610c1a9190610f3c565b60405180910390a150565b60015482906001600160a01b03808316911614610c545760405162461bcd60e51b81526004016102bc90610ff3565b6000306001600160a01b031683604051610c6e9190610e99565b6000604051808303816000865af19150503d8060008114610cab576040519150601f19603f3d011682016040523d82523d6000602084013e610cb0565b606091505b5050905080610cd15760405162461bcd60e51b81526004016102bc90610fbc565b5050505050565b80356001600160a01b0381168114610cef57600080fd5b919050565b600060208284031215610d05578081fd5b610d0e82610cd8565b9392505050565b600060208284031215610d26578081fd5b5035919050565b60008060408385031215610d3f578081fd5b82359150610d4f60208401610cd8565b90509250929050565b600080600060608486031215610d6c578081fd5b83359250610d7c60208501610cd8565b9150604084013590509250925092565b60008060408385031215610d9e578182fd5b50508035926020909101359150565b60008060008060808587031215610dc2578081fd5b843593506020850135925060408501359150610de060608601610cd8565b905092959194509250565b60008060008060608587031215610e00578384fd5b84359350610e1060208601610cd8565b9250604085013567ffffffffffffffff80821115610e2c578384fd5b818701915087601f830112610e3f578384fd5b813581811115610e4d578485fd5b886020828501011115610e5e578485fd5b95989497505060200194505050565b60008151808452610e8581602086016020860161118f565b601f01601f19169290920160200192915050565b60008251610eab81846020870161118f565b9190910192915050565b6001600160a01b0391909116815260200190565b90815260200190565b9182526001600160a01b0316602082015260400190565b9283526001600160a01b03919091166020830152604082015260600190565b95865260208601949094526001600160a01b039283166040860152606085019190915260808401521660a082015260c00190565b600060208252610d0e6020830184610e6d565b6040810160068410610f7157634e487b7160e01b600052602160045260246000fd5b9281526020015290565b60208082526021908201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e44456040820152602960f91b606082015260800190565b60208082526017908201527f4661696c656420746f2063616c6c20636f6e7472616374000000000000000000604082015260600190565b6020808252602b908201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e444560408201526a1497d19493d357d493d3d560aa1b606082015260800190565b602080825260169082015275496e76616c696420726571756573742073746174757360501b604082015260600190565b6020808252601690820152755265717565737420616c72656164792065786973747360501b604082015260600190565b6020808252601c908201527f41726269747261746f7220686173206e6f742072756c65642079657400000000604082015260600190565b6020808252602a908201527f4678426173654368696c6454756e6e656c3a20524f4f545f54554e4e454c5f4160408201526913149150511657d4d15560b21b606082015260800190565b6020808252601d908201527f43616e206f6e6c792062652063616c6c65642076696120627269646765000000604082015260600190565b60008382526040602083015261116f6040830184610e6d565b949350505050565b90815260406020820181905260009082015260600190565b60005b838110156111aa578181015183820152602001611192565b8381111561062f5750506000910152565b6002810460018216806111cf57607f821691505b602082108114156111f057634e487b7160e01b600052602260045260246000fd5b50919050565b60e01c90565b600060443d101561120c57610438565b600481823e6308c379a061122082516111f6565b1461122a57610438565b6040513d600319016004823e80513d67ffffffffffffffff816024840111818411171561125a5750505050610438565b828401925082519150808211156112745750505050610438565b503d8301602082840101111561128c57505050610438565b601f01601f191681016020016040529150509056fea26469706673582212200b9f15a43d7c65e63097b78f599865f0eef1a2e17d3bcaa25c0d7f49791a6ddc64736f6c634300080000330000000000000000000000008397259c983751daf40400790063935a11afa28a00000000000000000000000060573b8dce539ae5bf9ad7932310668997ef04280000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000737b22746f73223a22697066733a2f2f516d4e56354e5777437564594b66694875686457786363725079787334446e624c4751616365326f4d4b486b5a762f5175657374696f6e5f5265736f6c7574696f6e5f506f6c6963792e706466222c2022666f726569676e50726f7879223a747275657d00000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101005760003560e01c806395e088fc11610097578063c510faf711610066578063c510faf7146101d9578063c77cccc9146101fa578063ccd6e8d21461020d578063d75a86e01461022057610100565b806395e088fc146101965780639a7c4b71146101ab578063bc8802a2146101be578063bf6569e0146101c657610100565b80636e190f17116100d35780636e190f17146101605780637f1e9cb014610168578063888370941461017057806391602fd71461018357610100565b80631865fed114610105578063241a9f821461012e578063392f37e914610143578063450d11f014610158575b600080fd5b610118610113366004610d15565b610233565b6040516101259190610eb5565b60405180910390f35b61014161013c366004610dad565b61024e565b005b61014b61038e565b6040516101259190610f3c565b61011861041c565b61011861042b565b61011861043b565b61014161017e366004610cf4565b61044a565b610141610191366004610d2d565b610495565b61019e6105a0565b6040516101259190610ec9565b6101416101b9366004610deb565b6105c4565b610118610635565b6101416101d4366004610d2d565b610659565b6101ec6101e7366004610d2d565b61079e565b604051610125929190610f4f565b610141610208366004610d2d565b6107c8565b61014161021b366004610d58565b6108d0565b61014161022e366004610d8c565b610b0a565b6004602052600090815260409020546001600160a01b031681565b600084815260046020818152604080842054600383528185206001600160a01b03909116808652925290922090815460ff16600581111561029f57634e487b7160e01b600052602160045260246000fd5b146102c55760405162461bcd60e51b81526004016102bc9061109e565b60405180910390fd5b60018101546040516335138a4f60e21b81526001600160a01b037f00000000000000000000000060573b8dce539ae5bf9ad7932310668997ef0428169163d44e293c9161031e918a9187908b908b908b90600401610f08565b600060405180830381600087803b15801561033857600080fd5b505af115801561034c573d6000803e3d6000fd5b5050825460ff19166005178355505060405186907f2abf2fd86256e4607561adae782a4853682b6c0b976995a9a45c5fc3a175738690600090a2505050505050565b6002805461039b906111bb565b80601f01602080910402602001604051908101604052809291908181526020018280546103c7906111bb565b80156104145780601f106103e957610100808354040283529160200191610414565b820191906000526020600020905b8154815290600101906020018083116103f757829003601f168201915b505050505081565b6000546001600160a01b031681565b6001546001600160a01b03165b90565b6001546001600160a01b031681565b6001546001600160a01b0316156104735760405162461bcd60e51b81526004016102bc906110d5565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526003602090815260408083206001600160a01b038516845290915290206002815460ff1660058111156104dd57634e487b7160e01b600052602160045260246000fd5b146104fa5760405162461bcd60e51b81526004016102bc9061103e565b805460ff1916600317815560405163e742e2ed60e01b9060009082906105269087908790602401610ed2565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905061056381610beb565b6040516001600160a01b0385169086907fff09615c531ab8799ea1c67a0952ddbef1c864ef91d390995d0dc07656f4210f90600090a35050505050565b7f000000000000000000000000000000000000000000000000000000000000000181565b6000546001600160a01b031633146105ee5760405162461bcd60e51b81526004016102bc90610f7b565b61062f848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c2592505050565b50505050565b7f00000000000000000000000060573b8dce539ae5bf9ad7932310668997ef042881565b3330146106785760405162461bcd60e51b81526004016102bc9061111f565b60008281526003602081815260408084206001600160a01b038616855290915290912090815460ff1660058111156106c057634e487b7160e01b600052602160045260246000fd5b146106dd5760405162461bcd60e51b81526004016102bc9061103e565b805460ff19168155604051630ebbdd2b60e41b81527f00000000000000000000000060573b8dce539ae5bf9ad7932310668997ef04286001600160a01b03169063ebbdd2b090610731908690600401610ec9565b600060405180830381600087803b15801561074b57600080fd5b505af115801561075f573d6000803e3d6000fd5b50506040516001600160a01b03851692508591507f9beda0c81abc1c65da7685f113195974dfddb781dfde6263e5a1b13a5356ffad90600090a3505050565b60036020908152600092835260408084209091529082529020805460019091015460ff9091169082565b60008281526003602090815260408083206001600160a01b038516845290915290206001815460ff16600581111561081057634e487b7160e01b600052602160045260246000fd5b1461082d5760405162461bcd60e51b81526004016102bc9061103e565b805460ff191681556040516317c4df9160e31b9060009082906108569087908790602401610ed2565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905061089381610beb565b6040516001600160a01b0385169086907ff313a768599b60b7f8aedb7757d867d09463365b79b55b86ed3c961e6da5a24990600090a35050505050565b3330146108ef5760405162461bcd60e51b81526004016102bc9061111f565b60008381526003602090815260408083206001600160a01b0386168452909152812090815460ff16600581111561093657634e487b7160e01b600052602160045260246000fd5b146109535760405162461bcd60e51b81526004016102bc9061106e565b60405163f6a94ecb60e01b81526001600160a01b037f00000000000000000000000060573b8dce539ae5bf9ad7932310668997ef0428169063f6a94ecb906109a390879087908790600401610ee9565b600060405180830381600087803b1580156109bd57600080fd5b505af19250505080156109ce575060015b610a93576109da6111fc565b806109e55750610a3d565b815460ff191660011782556040516001600160a01b0385169086907ff677e762f2ddc710deec335dd0cfa8a65cc9c9c351b268243be8629f2e8d1b5f90610a2f9087908690611156565b60405180910390a350610a8e565b805460ff191660011781556040516001600160a01b0384169085907ff677e762f2ddc710deec335dd0cfa8a65cc9c9c351b268243be8629f2e8d1b5f90610a85908690611177565b60405180910390a35b61062f565b805460ff191660021781556000848152600460205260409081902080546001600160a01b0386166001600160a01b03199091168117909155905185907ff56e18fc84dbd66db78337b5bd0973943fa70c9b52243a540bdac79274f6682d90610afc908690610ec9565b60405180910390a350505050565b333014610b295760405162461bcd60e51b81526004016102bc9061111f565b60008281526004602090815260408083205460038084528285206001600160a01b0390921680865291909352922090815460ff166005811115610b7c57634e487b7160e01b600052602160045260246000fd5b14610b995760405162461bcd60e51b81526004016102bc9061103e565b805460ff191660041781556001810183905560405184907f1813d15d8cef51cff8bbd419a8e13e0655c1babea320dea4174d5e7bc40c429490610bdd908690610ec9565b60405180910390a250505050565b7f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681604051610c1a9190610f3c565b60405180910390a150565b60015482906001600160a01b03808316911614610c545760405162461bcd60e51b81526004016102bc90610ff3565b6000306001600160a01b031683604051610c6e9190610e99565b6000604051808303816000865af19150503d8060008114610cab576040519150601f19603f3d011682016040523d82523d6000602084013e610cb0565b606091505b5050905080610cd15760405162461bcd60e51b81526004016102bc90610fbc565b5050505050565b80356001600160a01b0381168114610cef57600080fd5b919050565b600060208284031215610d05578081fd5b610d0e82610cd8565b9392505050565b600060208284031215610d26578081fd5b5035919050565b60008060408385031215610d3f578081fd5b82359150610d4f60208401610cd8565b90509250929050565b600080600060608486031215610d6c578081fd5b83359250610d7c60208501610cd8565b9150604084013590509250925092565b60008060408385031215610d9e578182fd5b50508035926020909101359150565b60008060008060808587031215610dc2578081fd5b843593506020850135925060408501359150610de060608601610cd8565b905092959194509250565b60008060008060608587031215610e00578384fd5b84359350610e1060208601610cd8565b9250604085013567ffffffffffffffff80821115610e2c578384fd5b818701915087601f830112610e3f578384fd5b813581811115610e4d578485fd5b886020828501011115610e5e578485fd5b95989497505060200194505050565b60008151808452610e8581602086016020860161118f565b601f01601f19169290920160200192915050565b60008251610eab81846020870161118f565b9190910192915050565b6001600160a01b0391909116815260200190565b90815260200190565b9182526001600160a01b0316602082015260400190565b9283526001600160a01b03919091166020830152604082015260600190565b95865260208601949094526001600160a01b039283166040860152606085019190915260808401521660a082015260c00190565b600060208252610d0e6020830184610e6d565b6040810160068410610f7157634e487b7160e01b600052602160045260246000fd5b9281526020015290565b60208082526021908201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e44456040820152602960f91b606082015260800190565b60208082526017908201527f4661696c656420746f2063616c6c20636f6e7472616374000000000000000000604082015260600190565b6020808252602b908201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e444560408201526a1497d19493d357d493d3d560aa1b606082015260800190565b602080825260169082015275496e76616c696420726571756573742073746174757360501b604082015260600190565b6020808252601690820152755265717565737420616c72656164792065786973747360501b604082015260600190565b6020808252601c908201527f41726269747261746f7220686173206e6f742072756c65642079657400000000604082015260600190565b6020808252602a908201527f4678426173654368696c6454756e6e656c3a20524f4f545f54554e4e454c5f4160408201526913149150511657d4d15560b21b606082015260800190565b6020808252601d908201527f43616e206f6e6c792062652063616c6c65642076696120627269646765000000604082015260600190565b60008382526040602083015261116f6040830184610e6d565b949350505050565b90815260406020820181905260009082015260600190565b60005b838110156111aa578181015183820152602001611192565b8381111561062f5750506000910152565b6002810460018216806111cf57607f821691505b602082108114156111f057634e487b7160e01b600052602260045260246000fd5b50919050565b60e01c90565b600060443d101561120c57610438565b600481823e6308c379a061122082516111f6565b1461122a57610438565b6040513d600319016004823e80513d67ffffffffffffffff816024840111818411171561125a5750505050610438565b828401925082519150808211156112745750505050610438565b503d8301602082840101111561128c57505050610438565b601f01601f191681016020016040529150509056fea26469706673582212200b9f15a43d7c65e63097b78f599865f0eef1a2e17d3bcaa25c0d7f49791a6ddc64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008397259c983751daf40400790063935a11afa28a00000000000000000000000060573b8dce539ae5bf9ad7932310668997ef04280000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000737b22746f73223a22697066733a2f2f516d4e56354e5777437564594b66694875686457786363725079787334446e624c4751616365326f4d4b486b5a762f5175657374696f6e5f5265736f6c7574696f6e5f506f6c6963792e706466222c2022666f726569676e50726f7879223a747275657d00000000000000000000000000
-----Decoded View---------------
Arg [0] : _fxChild (address): 0x8397259c983751DAf40400790063935a11afa28a
Arg [1] : _realitio (address): 0x60573B8DcE539aE5bF9aD7932310668997ef0428
Arg [2] : _foreignChainId (uint256): 1
Arg [3] : _metadata (string): {"tos":"ipfs://QmNV5NWwCudYKfiHuhdWxccrPyxs4DnbLGQace2oMKHkZv/Question_Resolution_Policy.pdf", "foreignProxy":true}
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000008397259c983751daf40400790063935a11afa28a
Arg [1] : 00000000000000000000000060573b8dce539ae5bf9ad7932310668997ef0428
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000073
Arg [5] : 7b22746f73223a22697066733a2f2f516d4e56354e5777437564594b66694875
Arg [6] : 686457786363725079787334446e624c4751616365326f4d4b486b5a762f5175
Arg [7] : 657374696f6e5f5265736f6c7574696f6e5f506f6c6963792e706466222c2022
Arg [8] : 666f726569676e50726f7879223a747275657d00000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.