43 lines
1.2 KiB
Solidity
43 lines
1.2 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity >=0.8.0 <0.9.0;
|
|
|
|
contract Decider {
|
|
address public owner;
|
|
IOptimisticOracle public oracle;
|
|
|
|
event DisputeSettled(uint256 indexed assertionId, bool resolvedValue);
|
|
|
|
constructor(address _oracle) {
|
|
owner = msg.sender;
|
|
oracle = IOptimisticOracle(_oracle);
|
|
}
|
|
|
|
/**
|
|
* @notice Settle a dispute by determining the true/false outcome
|
|
* @param assertionId The ID of the assertion to settle
|
|
* @param resolvedValue The true/false outcome determined by the decider
|
|
*/
|
|
function settleDispute(uint256 assertionId, bool resolvedValue) external {
|
|
require(assertionId >= 1, "Invalid assertion ID");
|
|
|
|
// Call the oracle's settleAssertion function
|
|
oracle.settleAssertion(assertionId, resolvedValue);
|
|
|
|
emit DisputeSettled(assertionId, resolvedValue);
|
|
}
|
|
|
|
function setOracle(address newOracle) external {
|
|
require(msg.sender == owner, "Only owner can set oracle");
|
|
oracle = IOptimisticOracle(newOracle);
|
|
}
|
|
|
|
/**
|
|
* @notice Allow the contract to receive ETH
|
|
*/
|
|
receive() external payable {}
|
|
}
|
|
|
|
interface IOptimisticOracle {
|
|
function settleAssertion(uint256, bool) external;
|
|
}
|