Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 12 from a total of 12 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Set Custom Oracl... | 19865692 | 52 days ago | IN | 0 ETH | 0.00019218 | ||||
Set Custom Oracl... | 19865689 | 52 days ago | IN | 0 ETH | 0.00019218 | ||||
Set Custom Oracl... | 19865687 | 52 days ago | IN | 0 ETH | 0.00019218 | ||||
Set Custom Oracl... | 19615733 | 87 days ago | IN | 0 ETH | 0.00096092 | ||||
Set Custom Oracl... | 19615731 | 87 days ago | IN | 0 ETH | 0.00096092 | ||||
Set Custom Oracl... | 19452923 | 109 days ago | IN | 0 ETH | 0.00120115 | ||||
Set Custom Oracl... | 19416708 | 115 days ago | IN | 0 ETH | 0.00216207 | ||||
Set Custom Oracl... | 19416707 | 115 days ago | IN | 0 ETH | 0.00216207 | ||||
Set Custom Oracl... | 19416706 | 115 days ago | IN | 0 ETH | 0.00216207 | ||||
Transfer Ownersh... | 19280759 | 134 days ago | IN | 0 ETH | 0.00167422 | ||||
Initialize | 19182460 | 147 days ago | IN | 0 ETH | 0.0034441 | ||||
0x60806040 | 19182459 | 147 days ago | IN | Create: GenericOracle | 0 ETH | 0.02715665 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
GenericOracle
Compiler Version
v0.8.22+commit.4fc1097e
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.22; import '@openzeppelin/contracts/access/Ownable2Step.sol'; import '../../interfaces/IOracle.sol'; contract GenericOracle is IOracle, Ownable2Step { error ZeroAddress(); event CustomOracleAdded(address token, address oracle); mapping(address => IOracle) public customOracles; IOracle internal _chainlinkOracle; IOracle internal _curveLpOracle; constructor() Ownable(msg.sender) {} function initialize(address curveLpOracle, address chainlinkOracle) external onlyOwner { require(address(curveLpOracle) != address(0), 'curveLpOracle zero address'); require(address(chainlinkOracle) != address(0), 'chainlinkOracle zero address'); require(address(_curveLpOracle) == address(0), 'already initialized'); _chainlinkOracle = IOracle(chainlinkOracle); _curveLpOracle = IOracle(curveLpOracle); } function isTokenSupported(address token) external view override returns (bool) { return address(customOracles[token]) != address(0) || _chainlinkOracle.isTokenSupported(token) || _curveLpOracle.isTokenSupported(token); } function getUSDPrice(address token) external view virtual returns (uint256) { if (_chainlinkOracle.isTokenSupported(token)) { return _chainlinkOracle.getUSDPrice(token); } if (address(customOracles[token]) != address(0)) { return customOracles[token].getUSDPrice(token); } return _curveLpOracle.getUSDPrice(token); } function setCustomOracle(address token, address oracle) external onlyOwner { if (token == address(0)) revert ZeroAddress(); if (oracle == address(0)) revert ZeroAddress(); customOracles[token] = IOracle(oracle); emit CustomOracleAdded(token, oracle); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol) pragma solidity ^0.8.20; import {Ownable} from "./Ownable.sol"; /** * @dev Contract module which provides access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is specified at deployment time in the constructor for `Ownable`. This * can later be changed with {transferOwnership} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() public virtual { address sender = _msgSender(); if (pendingOwner() != sender) { revert OwnableUnauthorizedAccount(sender); } _transferOwnership(sender); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.22; interface IOracle { /// @notice returns the price in USD of symbol. function getUSDPrice(address token) external view returns (uint256); /// @notice returns if the given token is supported for pricing. function isTokenSupported(address token) external view returns (bool); }
{ "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"oracle","type":"address"}],"name":"CustomOracleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"customOracles","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getUSDPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"curveLpOracle","type":"address"},{"internalType":"address","name":"chainlinkOracle","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"isTokenSupported","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"oracle","type":"address"}],"name":"setCustomOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b506100b2565b600180546001600160a01b031916905561005f81610062565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610858806100c16000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80637c4be525116100665780637c4be525146101035780638b2f0f4f146101445780638da5cb5b14610165578063e30c397814610176578063f2fde38b1461018757600080fd5b8063485cc955146100a357806367b7b289146100b8578063715018a6146100cb57806375151b63146100d357806379ba5097146100fb575b600080fd5b6100b66100b1366004610792565b61019a565b005b6100b66100c6366004610792565b6102d3565b6100b6610394565b6100e66100e13660046107c5565b6103a8565b60405190151581526020015b60405180910390f35b6100b66104b7565b61012c6101113660046107c5565b6002602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016100f2565b6101576101523660046107c5565b6104fb565b6040519081526020016100f2565b6000546001600160a01b031661012c565b6001546001600160a01b031661012c565b6100b66101953660046107c5565b610674565b6101a26106e5565b6001600160a01b0382166101fd5760405162461bcd60e51b815260206004820152601a60248201527f63757276654c704f7261636c65207a65726f206164647265737300000000000060448201526064015b60405180910390fd5b6001600160a01b0381166102535760405162461bcd60e51b815260206004820152601c60248201527f636861696e6c696e6b4f7261636c65207a65726f20616464726573730000000060448201526064016101f4565b6004546001600160a01b0316156102a25760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016101f4565b600380546001600160a01b039283166001600160a01b03199182161790915560048054939092169216919091179055565b6102db6106e5565b6001600160a01b0382166103025760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166103295760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382811660008181526002602090815260409182902080546001600160a01b031916948616948517905581519283528201929092527f1b4b9cd5d281236804584b516042a4e440806fdd4d36fe010c13c54c9544f292910160405180910390a15050565b61039c6106e5565b6103a66000610712565b565b6001600160a01b0381811660009081526002602052604081205490911615158061043b57506003546040516375151b6360e01b81526001600160a01b038481166004830152909116906375151b6390602401602060405180830381865afa158015610417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043b91906107e7565b806104b15750600480546040516375151b6360e01b81526001600160a01b03858116938201939093529116906375151b6390602401602060405180830381865afa15801561048d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b191906107e7565b92915050565b60015433906001600160a01b031681146104ef5760405163118cdaa760e01b81526001600160a01b03821660048201526024016101f4565b6104f881610712565b50565b6003546040516375151b6360e01b81526001600160a01b03838116600483015260009216906375151b6390602401602060405180830381865afa158015610546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056a91906107e7565b156105de57600354604051638b2f0f4f60e01b81526001600160a01b03848116600483015290911690638b2f0f4f906024015b602060405180830381865afa1580156105ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b19190610809565b6001600160a01b038281166000908152600260205260409020541615610640576001600160a01b0382811660008181526002602052604090819020549051638b2f0f4f60e01b8152600481019290925290911690638b2f0f4f9060240161059d565b60048054604051638b2f0f4f60e01b81526001600160a01b0385811693820193909352911690638b2f0f4f9060240161059d565b61067c6106e5565b600180546001600160a01b0383166001600160a01b031990911681179091556106ad6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000546001600160a01b031633146103a65760405163118cdaa760e01b81523360048201526024016101f4565b600180546001600160a01b03191690556104f881600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461078d57600080fd5b919050565b600080604083850312156107a557600080fd5b6107ae83610776565b91506107bc60208401610776565b90509250929050565b6000602082840312156107d757600080fd5b6107e082610776565b9392505050565b6000602082840312156107f957600080fd5b815180151581146107e057600080fd5b60006020828403121561081b57600080fd5b505191905056fea2646970667358221220e6f30022c017912e7e325e273c2760cada61b1a9ed43aa5ff62a2153ea8acc7d64736f6c63430008160033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80637c4be525116100665780637c4be525146101035780638b2f0f4f146101445780638da5cb5b14610165578063e30c397814610176578063f2fde38b1461018757600080fd5b8063485cc955146100a357806367b7b289146100b8578063715018a6146100cb57806375151b63146100d357806379ba5097146100fb575b600080fd5b6100b66100b1366004610792565b61019a565b005b6100b66100c6366004610792565b6102d3565b6100b6610394565b6100e66100e13660046107c5565b6103a8565b60405190151581526020015b60405180910390f35b6100b66104b7565b61012c6101113660046107c5565b6002602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016100f2565b6101576101523660046107c5565b6104fb565b6040519081526020016100f2565b6000546001600160a01b031661012c565b6001546001600160a01b031661012c565b6100b66101953660046107c5565b610674565b6101a26106e5565b6001600160a01b0382166101fd5760405162461bcd60e51b815260206004820152601a60248201527f63757276654c704f7261636c65207a65726f206164647265737300000000000060448201526064015b60405180910390fd5b6001600160a01b0381166102535760405162461bcd60e51b815260206004820152601c60248201527f636861696e6c696e6b4f7261636c65207a65726f20616464726573730000000060448201526064016101f4565b6004546001600160a01b0316156102a25760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016101f4565b600380546001600160a01b039283166001600160a01b03199182161790915560048054939092169216919091179055565b6102db6106e5565b6001600160a01b0382166103025760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166103295760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382811660008181526002602090815260409182902080546001600160a01b031916948616948517905581519283528201929092527f1b4b9cd5d281236804584b516042a4e440806fdd4d36fe010c13c54c9544f292910160405180910390a15050565b61039c6106e5565b6103a66000610712565b565b6001600160a01b0381811660009081526002602052604081205490911615158061043b57506003546040516375151b6360e01b81526001600160a01b038481166004830152909116906375151b6390602401602060405180830381865afa158015610417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043b91906107e7565b806104b15750600480546040516375151b6360e01b81526001600160a01b03858116938201939093529116906375151b6390602401602060405180830381865afa15801561048d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b191906107e7565b92915050565b60015433906001600160a01b031681146104ef5760405163118cdaa760e01b81526001600160a01b03821660048201526024016101f4565b6104f881610712565b50565b6003546040516375151b6360e01b81526001600160a01b03838116600483015260009216906375151b6390602401602060405180830381865afa158015610546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056a91906107e7565b156105de57600354604051638b2f0f4f60e01b81526001600160a01b03848116600483015290911690638b2f0f4f906024015b602060405180830381865afa1580156105ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b19190610809565b6001600160a01b038281166000908152600260205260409020541615610640576001600160a01b0382811660008181526002602052604090819020549051638b2f0f4f60e01b8152600481019290925290911690638b2f0f4f9060240161059d565b60048054604051638b2f0f4f60e01b81526001600160a01b0385811693820193909352911690638b2f0f4f9060240161059d565b61067c6106e5565b600180546001600160a01b0383166001600160a01b031990911681179091556106ad6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000546001600160a01b031633146103a65760405163118cdaa760e01b81523360048201526024016101f4565b600180546001600160a01b03191690556104f881600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461078d57600080fd5b919050565b600080604083850312156107a557600080fd5b6107ae83610776565b91506107bc60208401610776565b90509250929050565b6000602082840312156107d757600080fd5b6107e082610776565b9392505050565b6000602082840312156107f957600080fd5b815180151581146107e057600080fd5b60006020828403121561081b57600080fd5b505191905056fea2646970667358221220e6f30022c017912e7e325e273c2760cada61b1a9ed43aa5ff62a2153ea8acc7d64736f6c63430008160033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.