Source Code
Overview
S Balance
More Info
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
22744597 | 15 days ago | 0 S |
Loading...
Loading
Contract Name:
PriceFeedOracle
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.18; import "../../interfaces/IPriceFeedOracle.sol"; contract PriceFeedOracle is IPriceFeedOracle { mapping(address => OracleAsset) public assets; address public constant ETH = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38; // 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address public immutable safeTracker; constructor( address[] memory _assetAddresses, address[] memory _assetAggregators, uint8[] memory _assetDecimals, address _safeTracker ) { require( _assetAddresses.length == _assetAggregators.length && _assetAggregators.length == _assetDecimals.length, "PriceFeedOracle: different args length" ); require(_safeTracker != address(0), "PriceFeedOracle: safeTracker cannot be zero address"); safeTracker = _safeTracker; assets[_safeTracker] = OracleAsset(Aggregator(_safeTracker), 18); for (uint i = 0; i < _assetAddresses.length; i++) { assets[_assetAddresses[i]] = OracleAsset(Aggregator(_assetAggregators[i]), _assetDecimals[i]); } } /** * @dev Returns the amount of ether in wei that are equivalent to 1 unit (10 ** decimals) of asset * @param assetAddress address of asset * @return price in ether */ function getAssetToEthRate(address assetAddress) public view returns (uint) { if (assetAddress == ETH || assetAddress == safeTracker) { return 1 ether; } OracleAsset memory asset = assets[assetAddress]; return _getAssetToEthRate(asset.aggregator); } /** * @dev Returns the amount of currency that is equivalent to ethIn amount of ether. * @param assetAddress address of asset * @param ethIn amount of ether to be converted to the asset * @return asset amount */ function getAssetForEth(address assetAddress, uint ethIn) external view returns (uint) { if (assetAddress == ETH || assetAddress == safeTracker) { return ethIn; } OracleAsset memory asset = assets[assetAddress]; uint price = _getAssetToEthRate(asset.aggregator); return ethIn * (10**uint(asset.decimals)) / price; } /** * @dev Returns the amount of eth that is equivalent to a given asset and amount * @param assetAddress address of asset * @param amount amount of asset * @return amount of ether */ function getEthForAsset(address assetAddress, uint amount) external view returns (uint) { if (assetAddress == ETH || assetAddress == safeTracker) { return amount; } OracleAsset memory asset = assets[assetAddress]; uint price = _getAssetToEthRate(asset.aggregator); return amount * (price) / 10**uint(asset.decimals); } /** * @dev Returns the amount of ether in wei that are equivalent to 1 unit (10 ** decimals) of asset * @param aggregator The asset aggregator * @return price in ether */ function _getAssetToEthRate(Aggregator aggregator) internal view returns (uint) { require(address(aggregator) != address(0), "PriceFeedOracle: Unknown asset"); // TODO: consider checking the latest timestamp and revert if it's *very* old int rate = aggregator.latestAnswer(); require(rate > 0, "PriceFeedOracle: Rate must be > 0"); return uint(rate); } }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface Aggregator { function decimals() external view returns (uint8); function latestAnswer() external view returns (int); } interface IPriceFeedOracle { struct OracleAsset { Aggregator aggregator; uint8 decimals; } function ETH() external view returns (address); function assets(address) external view returns (Aggregator, uint8); function getAssetToEthRate(address asset) external view returns (uint); function getAssetForEth(address asset, uint ethIn) external view returns (uint); function getEthForAsset(address asset, uint amount) external view returns (uint); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract ABI
API[{"inputs":[{"internalType":"address[]","name":"_assetAddresses","type":"address[]"},{"internalType":"address[]","name":"_assetAggregators","type":"address[]"},{"internalType":"uint8[]","name":"_assetDecimals","type":"uint8[]"},{"internalType":"address","name":"_safeTracker","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"assets","outputs":[{"internalType":"contract Aggregator","name":"aggregator","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"assetAddress","type":"address"},{"internalType":"uint256","name":"ethIn","type":"uint256"}],"name":"getAssetForEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"assetAddress","type":"address"}],"name":"getAssetToEthRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"assetAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getEthForAsset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safeTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b5060405162000bce38038062000bce833981016040819052620000349162000371565b8251845114801562000047575081518351145b620000a85760405162461bcd60e51b815260206004820152602660248201527f5072696365466565644f7261636c653a20646966666572656e742061726773206044820152650d8cadccee8d60d31b60648201526084015b60405180910390fd5b6001600160a01b038116620001265760405162461bcd60e51b815260206004820152603360248201527f5072696365466565644f7261636c653a2073616665547261636b65722063616e60448201527f6e6f74206265207a65726f20616464726573730000000000000000000000000060648201526084016200009f565b6001600160a01b03808216608081905260408051808201825282815260126020808301918252600094855284905291832090518154925160ff16600160a01b026001600160a81b0319909316941693909317179091555b84518110156200025e576040518060400160405280858381518110620001a757620001a762000481565b60200260200101516001600160a01b03168152602001848381518110620001d257620001d262000481565b602002602001015160ff16815250600080878481518110620001f857620001f862000481565b6020908102919091018101516001600160a01b03908116835282820193909352604090910160002083518154949092015160ff16600160a01b026001600160a81b0319909416919092161791909117905580620002558162000497565b9150506200017d565b5050505050620004bf565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620002aa57620002aa62000269565b604052919050565b60006001600160401b03821115620002ce57620002ce62000269565b5060051b60200190565b80516001600160a01b0381168114620002f057600080fd5b919050565b600082601f8301126200030757600080fd5b81516020620003206200031a83620002b2565b6200027f565b82815260059290921b840181019181810190868411156200034057600080fd5b8286015b8481101562000366576200035881620002d8565b835291830191830162000344565b509695505050505050565b600080600080608085870312156200038857600080fd5b84516001600160401b0380821115620003a057600080fd5b620003ae88838901620002f5565b9550602091508187015181811115620003c657600080fd5b620003d489828a01620002f5565b955050604087015181811115620003ea57600080fd5b87019050601f81018813620003fe57600080fd5b80516200040f6200031a82620002b2565b81815260059190911b8201830190838101908a8311156200042f57600080fd5b928401925b828410156200046057835160ff81168114620004505760008081fd5b8252928401929084019062000434565b80965050505050506200047660608601620002d8565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b600060018201620004b857634e487b7160e01b600052601160045260246000fd5b5060010190565b6080516106df620004ef6000396000818160920152818161018d01528181610272015261032e01526106df6000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806355c40e66146100675780635d8471e41461008d578063696ae5e3146100cc5780638322fff2146100df578063bbff4e5a146100fa578063f11b81881461010d575b600080fd5b61007a61007536600461050c565b610163565b6040519081526020015b60405180910390f35b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610084565b61007a6100da366004610536565b610248565b6100b473039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b61007a61010836600461050c565b610304565b61014261011b366004610536565b6000602081905290815260409020546001600160a01b03811690600160a01b900460ff1682565b604080516001600160a01b03909316835260ff909116602083015201610084565b60006001600160a01b03831673039e2fb66102314ce7b64ce5ce3e5183bc94ad3814806101c157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b156101cd575080610242565b6001600160a01b03838116600090815260208181526040808320815180830190925254938416808252600160a01b90940460ff169181019190915291610212906103d3565b905080826020015160ff16600a610229919061064b565b6102339086610657565b61023d919061066e565b925050505b92915050565b60006001600160a01b03821673039e2fb66102314ce7b64ce5ce3e5183bc94ad3814806102a657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b156102ba5750670de0b6b3a7640000919050565b6001600160a01b0382811660009081526020818152604091829020825180840190935254928316808352600160a01b90930460ff1690820152906102fd906103d3565b9392505050565b60006001600160a01b03831673039e2fb66102314ce7b64ce5ce3e5183bc94ad38148061036257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b1561036e575080610242565b6001600160a01b03838116600090815260208181526040808320815180830190925254938416808252600160a01b90940460ff1691810191909152916103b3906103d3565b9050816020015160ff16600a6103c9919061064b565b6102338286610657565b60006001600160a01b0382166104305760405162461bcd60e51b815260206004820152601e60248201527f5072696365466565644f7261636c653a20556e6b6e6f776e206173736574000060448201526064015b60405180910390fd5b6000826001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610470573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104949190610690565b9050600081136102425760405162461bcd60e51b815260206004820152602160248201527f5072696365466565644f7261636c653a2052617465206d757374206265203e206044820152600360fc1b6064820152608401610427565b80356001600160a01b038116811461050757600080fd5b919050565b6000806040838503121561051f57600080fd5b610528836104f0565b946020939093013593505050565b60006020828403121561054857600080fd5b6102fd826104f0565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156105a257816000190482111561058857610588610551565b8085161561059557918102915b93841c939080029061056c565b509250929050565b6000826105b957506001610242565b816105c657506000610242565b81600181146105dc57600281146105e657610602565b6001915050610242565b60ff8411156105f7576105f7610551565b50506001821b610242565b5060208310610133831016604e8410600b8410161715610625575081810a610242565b61062f8383610567565b806000190482111561064357610643610551565b029392505050565b60006102fd83836105aa565b808202811582820484141761024257610242610551565b60008261068b57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156106a257600080fd5b505191905056fea264697066735822122023547624834ca477711c912ec527761ead89fcf650adebe3ba2096de80eca9b164736f6c63430008120033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000053171be74d0ac87ce38fede85af530408bd135b100000000000000000000000000000000000000000000000000000000000000010000000000000000000000001570300e9cfec66c9fb0c8bc14366c86eb170ad0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000081caff07827aacfe953dd3168793073fad61d73500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000006
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100625760003560e01c806355c40e66146100675780635d8471e41461008d578063696ae5e3146100cc5780638322fff2146100df578063bbff4e5a146100fa578063f11b81881461010d575b600080fd5b61007a61007536600461050c565b610163565b6040519081526020015b60405180910390f35b6100b47f00000000000000000000000053171be74d0ac87ce38fede85af530408bd135b181565b6040516001600160a01b039091168152602001610084565b61007a6100da366004610536565b610248565b6100b473039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b61007a61010836600461050c565b610304565b61014261011b366004610536565b6000602081905290815260409020546001600160a01b03811690600160a01b900460ff1682565b604080516001600160a01b03909316835260ff909116602083015201610084565b60006001600160a01b03831673039e2fb66102314ce7b64ce5ce3e5183bc94ad3814806101c157507f00000000000000000000000053171be74d0ac87ce38fede85af530408bd135b16001600160a01b0316836001600160a01b0316145b156101cd575080610242565b6001600160a01b03838116600090815260208181526040808320815180830190925254938416808252600160a01b90940460ff169181019190915291610212906103d3565b905080826020015160ff16600a610229919061064b565b6102339086610657565b61023d919061066e565b925050505b92915050565b60006001600160a01b03821673039e2fb66102314ce7b64ce5ce3e5183bc94ad3814806102a657507f00000000000000000000000053171be74d0ac87ce38fede85af530408bd135b16001600160a01b0316826001600160a01b0316145b156102ba5750670de0b6b3a7640000919050565b6001600160a01b0382811660009081526020818152604091829020825180840190935254928316808352600160a01b90930460ff1690820152906102fd906103d3565b9392505050565b60006001600160a01b03831673039e2fb66102314ce7b64ce5ce3e5183bc94ad38148061036257507f00000000000000000000000053171be74d0ac87ce38fede85af530408bd135b16001600160a01b0316836001600160a01b0316145b1561036e575080610242565b6001600160a01b03838116600090815260208181526040808320815180830190925254938416808252600160a01b90940460ff1691810191909152916103b3906103d3565b9050816020015160ff16600a6103c9919061064b565b6102338286610657565b60006001600160a01b0382166104305760405162461bcd60e51b815260206004820152601e60248201527f5072696365466565644f7261636c653a20556e6b6e6f776e206173736574000060448201526064015b60405180910390fd5b6000826001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610470573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104949190610690565b9050600081136102425760405162461bcd60e51b815260206004820152602160248201527f5072696365466565644f7261636c653a2052617465206d757374206265203e206044820152600360fc1b6064820152608401610427565b80356001600160a01b038116811461050757600080fd5b919050565b6000806040838503121561051f57600080fd5b610528836104f0565b946020939093013593505050565b60006020828403121561054857600080fd5b6102fd826104f0565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156105a257816000190482111561058857610588610551565b8085161561059557918102915b93841c939080029061056c565b509250929050565b6000826105b957506001610242565b816105c657506000610242565b81600181146105dc57600281146105e657610602565b6001915050610242565b60ff8411156105f7576105f7610551565b50506001821b610242565b5060208310610133831016604e8410600b8410161715610625575081810a610242565b61062f8383610567565b806000190482111561064357610643610551565b029392505050565b60006102fd83836105aa565b808202811582820484141761024257610242610551565b60008261068b57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156106a257600080fd5b505191905056fea264697066735822122023547624834ca477711c912ec527761ead89fcf650adebe3ba2096de80eca9b164736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000053171be74d0ac87ce38fede85af530408bd135b100000000000000000000000000000000000000000000000000000000000000010000000000000000000000001570300e9cfec66c9fb0c8bc14366c86eb170ad0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000081caff07827aacfe953dd3168793073fad61d73500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000006
-----Decoded View---------------
Arg [0] : _assetAddresses (address[]): 0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0
Arg [1] : _assetAggregators (address[]): 0x81CaFF07827AacFe953dD3168793073fAd61d735
Arg [2] : _assetDecimals (uint8[]): 6
Arg [3] : _safeTracker (address): 0x53171BE74d0AC87CE38fede85af530408Bd135B1
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 00000000000000000000000053171be74d0ac87ce38fede85af530408bd135b1
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000001570300e9cfec66c9fb0c8bc14366c86eb170ad0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [7] : 00000000000000000000000081caff07827aacfe953dd3168793073fad61d735
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000006
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.