编译器
0.8.26+commit.8a97fa7a
文件 1 的 3:Errors.sol
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
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
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/"
]
}
[{"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"}]