openOracleDataProviderV3

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

Tags:
Factory, Oracle|addr:0x123bcf06e29332897333ef0bcf2e45eb8fd8b2cd|verified:true|block:23540516|tx:0x3e535b9881cb50d4874f735e86de42385e99b4a87b1a99f43dbd2cbab15aac35|first_check:1760017004

Submitted on: 2025-10-09 15:36:44

Comments

Log in to comment.

No comments yet.