Description:
Smart contract deployed on Ethereum with Factory, Oracle features.
Blockchain: Ethereum
Source Code: View Code On The Blockchain
Solidity Source Code:
{{
"language": "Solidity",
"sources": {
"src/DataProvider.sol": {
"content": "// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
import {IOpenOracle} from "./interfaces/IOpenOracle.sol";
contract openOracleDataProviderV3 {
/* ─── immutables & constants ────────────────────────────── */
IOpenOracle public immutable oracle;
/* ─── constructor ──────────────────────────────────────── */
constructor(address oracleAddress) {
require(oracleAddress != address(0), "oracle 0");
oracle = IOpenOracle(oracleAddress);
}
struct botStruct {
//reportId
uint256 reportId;
//reportMeta
uint256 exactToken1Report;
uint256 escalationHalt;
uint256 fee;
uint256 settlerReward;
address token1;
uint48 settlementTime;
address token2;
bool timeType;
uint24 feePercentage;
uint24 protocolFee;
uint16 multiplier;
uint24 disputeDelay;
//reportStatus
uint256 currentAmount1;
uint256 currentAmount2;
uint256 price;
address payable currentReporter;
uint48 reportTimestamp;
uint48 settlementTimestamp;
address payable initialReporter;
uint48 lastReportOppoTime;
bool disputeOccurred;
bool isDistributed;
//extraData
bytes32 stateHash;
address callbackContract;
uint32 numReports;
uint32 callbackGasLimit;
bytes4 callbackSelector;
bool trackDisputes;
bool keepFee;
}
function getData(uint256 reportId) external view returns (botStruct[] memory) {
botStruct[] memory data = new botStruct[](1);
for (uint256 i = reportId; i < reportId + 1; i++) {
IOpenOracle.ReportMeta memory _reportMeta = oracle.reportMeta(i);
IOpenOracle.ReportStatus memory _reportStatus = oracle.reportStatus(i);
IOpenOracle.extraReportData memory _reportExtra = oracle.extraData(i);
data[0] = botStruct(
i,
_reportMeta.exactToken1Report,
_reportMeta.escalationHalt,
_reportMeta.fee,
_reportMeta.settlerReward,
_reportMeta.token1,
_reportMeta.settlementTime,
_reportMeta.token2,
_reportMeta.timeType,
_reportMeta.feePercentage,
_reportMeta.protocolFee,
_reportMeta.multiplier,
_reportMeta.disputeDelay,
_reportStatus.currentAmount1,
_reportStatus.currentAmount2,
_reportStatus.price,
_reportStatus.currentReporter,
_reportStatus.reportTimestamp,
_reportStatus.settlementTimestamp,
_reportStatus.initialReporter,
_reportStatus.lastReportOppoTime,
_reportStatus.disputeOccurred,
_reportStatus.isDistributed,
_reportExtra.stateHash,
_reportExtra.callbackContract,
_reportExtra.numReports,
_reportExtra.callbackGasLimit,
_reportExtra.callbackSelector,
_reportExtra.trackDisputes,
_reportExtra.keepFee
);
}
return data;
}
function getData(uint256 startId, uint256 endId) external view returns (botStruct[] memory) {
botStruct[] memory data = new botStruct[](endId - startId);
for (uint256 i = 0; i < (endId - startId); i++) {
IOpenOracle.ReportMeta memory _reportMeta = oracle.reportMeta(startId + i);
IOpenOracle.ReportStatus memory _reportStatus = oracle.reportStatus(startId + i);
IOpenOracle.extraReportData memory _reportExtra = oracle.extraData(startId + i);
data[i] = botStruct(
startId + i,
_reportMeta.exactToken1Report,
_reportMeta.escalationHalt,
_reportMeta.fee,
_reportMeta.settlerReward,
_reportMeta.token1,
_reportMeta.settlementTime,
_reportMeta.token2,
_reportMeta.timeType,
_reportMeta.feePercentage,
_reportMeta.protocolFee,
_reportMeta.multiplier,
_reportMeta.disputeDelay,
_reportStatus.currentAmount1,
_reportStatus.currentAmount2,
_reportStatus.price,
_reportStatus.currentReporter,
_reportStatus.reportTimestamp,
_reportStatus.settlementTimestamp,
_reportStatus.initialReporter,
_reportStatus.lastReportOppoTime,
_reportStatus.disputeOccurred,
_reportStatus.isDistributed,
_reportExtra.stateHash,
_reportExtra.callbackContract,
_reportExtra.numReports,
_reportExtra.callbackGasLimit,
_reportExtra.callbackSelector,
_reportExtra.trackDisputes,
_reportExtra.keepFee
);
}
return data;
}
}
"
},
"src/interfaces/IOpenOracle.sol": {
"content": "// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
interface IOpenOracle {
struct disputeRecord {
uint256 amount1;
uint256 amount2;
address tokenToSwap;
uint48 reportTimestamp;
}
struct extraReportData {
bytes32 stateHash;
address callbackContract;
uint32 numReports;
uint32 callbackGasLimit;
bytes4 callbackSelector;
address protocolFeeRecipient;
bool trackDisputes;
bool keepFee;
}
struct ReportMeta {
uint256 exactToken1Report;
uint256 escalationHalt;
uint256 fee;
uint256 settlerReward;
address token1;
uint48 settlementTime;
address token2;
bool timeType;
uint24 feePercentage;
uint24 protocolFee;
uint16 multiplier;
uint24 disputeDelay;
}
struct ReportStatus {
uint256 currentAmount1;
uint256 currentAmount2;
uint256 price;
address payable currentReporter;
uint48 reportTimestamp;
uint48 settlementTimestamp;
address payable initialReporter;
uint48 lastReportOppoTime;
bool disputeOccurred;
bool isDistributed;
}
struct CreateReportParams {
uint256 exactToken1Report;
uint256 escalationHalt;
uint256 settlerReward;
address token1Address;
uint48 settlementTime;
uint24 disputeDelay;
uint24 protocolFee;
address token2Address;
uint32 callbackGasLimit;
uint24 feePercentage;
uint16 multiplier;
bool timeType;
bool trackDisputes;
bool keepFee;
address callbackContract;
bytes4 callbackSelector;
address protocolFeeRecipient;
}
function createReportInstance(CreateReportParams calldata params) external payable returns (uint256 reportId);
/* initial report overload with reporter */
function submitInitialReport(
uint256 reportId,
uint256 amount1,
uint256 amount2,
bytes32 stateHash,
address reporter
) external;
function disputeAndSwap(
uint256 reportId,
address tokenToSwap,
uint256 newAmount1,
uint256 newAmount2,
address disputer,
uint256 amt2Expected,
bytes32 stateHash
) external;
function settle(uint256 id) external returns (uint256 price, uint256 settlementTimestamp);
function nextReportId() external view returns (uint256);
function reportMeta(uint256 id) external view returns (ReportMeta memory);
function reportStatus(uint256 id) external view returns (ReportStatus memory);
function extraData(uint256 id) external view returns (extraReportData memory);
}
"
}
},
"settings": {
"viaIR": true,
"optimizer": {
"enabled": true,
"runs": 190
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}
}}
Submitted on: 2025-10-09 15:36:44
Comments
Log in to comment.
No comments yet.