账户
0x2c...31e5
STONE Oracle

STONE Oracle

US$0.00
此合同的源代码已经过验证!
合同元数据
编译器
0.8.26+commit.8a97fa7a
语言
Solidity
合同源代码
文件 1 的 3:Errors.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.26;

error InvalidToken();

error InvalidAsset();

error InsufficientBalance();

error InvalidOracle();

error InvalidPrice();

error InvalidArrayLength();

error DepositCapped();

error DepositPaused();

error ZeroShares();

error NoRequestingShares();

error NoClaimableRedeem();

error ZeroAddress();

error InvalidRequest();

error InvalidRequestToken();

error CannotRemove();

error InvalidDecimals();

error InvalidFeeRate();

error NoFeeRecipient();
合同源代码
文件 2 的 3:Oracle.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.26;

abstract contract Oracle {
    address public immutable token;

    string public name;

    constructor(address _token, string memory _name) {
        token = _token;
        name = _name;
    }

    function getPrice() external view virtual returns (uint256 price) {}
}
合同源代码
文件 3 的 3:StoneOracle.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.26;

import {Oracle} from "./Oracle.sol";
import "../Errors.sol";

interface IStoneVault {
    function currentSharePrice() external returns (uint256 price);
}

contract StoneOracle is Oracle {
    uint256 public constant D18 = 1e18;

    IStoneVault public immutable stoneVault;

    uint256[] internal prices;

    constructor(
        address _token,
        string memory _name,
        address _stoneVault
    ) Oracle(_token, _name) {
        require(
            _token != address(0) && _stoneVault != address(0),
            "ZERO ADDRESS"
        );

        token = _token;
        name = _name;

        stoneVault = IStoneVault(_stoneVault);

        updatePrice();
    }

    function getPrice() external view override returns (uint256 price) {
        price = prices[prices.length - 1];
    }

    function updatePrice() public {
        uint256 price = stoneVault.currentSharePrice();
        if (price == 0) revert InvalidPrice();

        prices.push(price);
    }
}
设置
{
  "compilationTarget": {
    "src/oracle/StoneOracle.sol": "StoneOracle"
  },
  "evmVersion": "shanghai",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": [
    ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    ":@uniswap/v3-periphery/contracts/=lib/v3-periphery/contracts/",
    ":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/",
    ":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    ":forge-std/=lib/forge-std/src/",
    ":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
    ":openzeppelin-contracts/=lib/openzeppelin-contracts/",
    ":v3-periphery/=lib/v3-periphery/contracts/"
  ]
}
ABI
[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"address","name":"_stoneVault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidPrice","type":"error"},{"inputs":[],"name":"D18","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stoneVault","outputs":[{"internalType":"contract IStoneVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"}]