编译器
0.8.19+commit.7dd6d404
文件 1 的 5:IAddressesProvider.sol
pragma solidity ^0.8.0;
interface IAddressesProvider {
event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);
function WETH() external view returns (address);
function timelock() external view returns (address);
function priceOracle() external view returns (address);
function indexPriceOracle() external view returns (address);
function fundingRate() external view returns (address);
function executionLogic() external view returns (address);
function liquidationLogic() external view returns (address);
function roleManager() external view returns (address);
function backtracker() external view returns (address);
}
文件 2 的 5:IIndexPriceFeed.sol
pragma solidity ^0.8.0;
import "./IPriceFeed.sol";
interface IIndexPriceFeed is IPriceFeed {
event UpdateExecutorAddress(address sender, address oldAddress, address newAddress);
event PriceUpdate(address asset, uint256 price, address sender);
function updatePrice(address[] calldata tokens, uint256[] memory prices) external;
}
文件 3 的 5:IPriceFeed.sol
pragma solidity ^0.8.0;
interface IPriceFeed {
event PriceAgeUpdated(uint256 oldAge, uint256 newAge);
function getPrice(address token) external view returns (uint256);
function getPriceSafely(address token) external view returns (uint256);
function decimals() external pure returns (uint256);
}
文件 4 的 5:IRoleManager.sol
pragma solidity ^0.8.0;
interface IRoleManager {
function setRoleAdmin(bytes32 role, bytes32 adminRole) external;
function isAdmin(address) external view returns (bool);
function isPoolAdmin(address poolAdmin) external view returns (bool);
function isOperator(address operator) external view returns (bool);
function isTreasurer(address treasurer) external view returns (bool);
function isKeeper(address) external view returns (bool);
function isBlackList(address account) external view returns (bool);
}
文件 5 的 5:IndexPriceFeed.sol
pragma solidity ^0.8.0;
import "../interfaces/IIndexPriceFeed.sol";
import "../interfaces/IAddressesProvider.sol";
import "../interfaces/IRoleManager.sol";
contract IndexPriceFeed is IIndexPriceFeed {
IAddressesProvider public immutable ADDRESS_PROVIDER;
uint256 public immutable PRICE_DECIMALS = 30;
mapping(address => uint256) public assetPrices;
address public executor;
constructor(
IAddressesProvider addressProvider,
address[] memory assets,
uint256[] memory prices,
address _executor
) {
ADDRESS_PROVIDER = addressProvider;
_setAssetPrices(assets, prices);
executor = _executor;
}
modifier onlyExecutorOrPoolAdmin() {
require(executor == msg.sender || IRoleManager(ADDRESS_PROVIDER.roleManager()).isPoolAdmin(msg.sender), "oep");
_;
}
modifier onlyPoolAdmin() {
require(
IRoleManager(ADDRESS_PROVIDER.roleManager()).isPoolAdmin(msg.sender),
"onlyPoolAdmin"
);
_;
}
function updateExecutorAddress(address _executor) external onlyPoolAdmin {
address oldAddress = executor;
executor = _executor;
emit UpdateExecutorAddress(msg.sender, oldAddress, _executor);
}
function decimals() public pure override returns (uint256) {
return PRICE_DECIMALS;
}
function updatePrice(
address[] calldata tokens,
uint256[] memory prices
) external override onlyExecutorOrPoolAdmin {
_setAssetPrices(tokens, prices);
}
function getPrice(address token) external view override returns (uint256) {
return assetPrices[token];
}
function getPriceSafely(address token) external view override returns (uint256) {
return assetPrices[token];
}
function _setAssetPrices(address[] memory assets, uint256[] memory prices) private {
require(assets.length == prices.length, "inconsistent params length");
for (uint256 i = 0; i < assets.length; i++) {
assetPrices[assets[i]] = prices[i];
emit PriceUpdate(assets[i], prices[i], msg.sender);
}
}
}
{
"compilationTarget": {
"contracts/oracle/IndexPriceFeed.sol": "IndexPriceFeed"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs",
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [],
"viaIR": true
}
[{"inputs":[{"internalType":"contract IAddressesProvider","name":"addressProvider","type":"address"},{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"},{"internalType":"address","name":"_executor","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldAge","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAge","type":"uint256"}],"name":"PriceAgeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"PriceUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"UpdateExecutorAddress","type":"event"},{"inputs":[],"name":"ADDRESS_PROVIDER","outputs":[{"internalType":"contract IAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"assetPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"executor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getPriceSafely","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_executor","type":"address"}],"name":"updateExecutorAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"}]