Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 16 from a total of 16 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Updated Inte... | 96723279 | 711 days ago | IN | 0 ETH | 0.000439351252 | ||||
Set Keeper | 64115982 | 827 days ago | IN | 0 ETH | 0.00005941782 | ||||
Set Keeper | 64113316 | 827 days ago | IN | 0 ETH | 0.000065158453 | ||||
Set Gov | 25048965 | 936 days ago | IN | 0 ETH | 0.000016155379 | ||||
Set Keeper | 18470307 | 982 days ago | IN | 0 ETH | 0.000111923788 | ||||
Set Keeper | 18470248 | 982 days ago | IN | 0 ETH | 0.000111591397 | ||||
Set Keeper | 18444230 | 982 days ago | IN | 0 ETH | 0.000109710412 | ||||
Set Keeper | 18444203 | 982 days ago | IN | 0 ETH | 0.000109405156 | ||||
Set Keeper | 18444180 | 982 days ago | IN | 0 ETH | 0.000110037569 | ||||
Set Keeper | 18318744 | 983 days ago | IN | 0 ETH | 0.000113725035 | ||||
Set Updated Inte... | 17599627 | 987 days ago | IN | 0 ETH | 0.00002471436 | ||||
Set Updated Inte... | 15511794 | 999 days ago | IN | 0 ETH | 0.000064876444 | ||||
Set Keeper | 15451416 | 999 days ago | IN | 0 ETH | 0.000024132318 | ||||
Set Keeper | 15451399 | 999 days ago | IN | 0 ETH | 0.000024199355 | ||||
Set Keeper | 15451372 | 999 days ago | IN | 0 ETH | 0.000018458079 | ||||
Set Default Spre... | 15388077 | 1000 days ago | IN | 0 ETH | 0.000064418965 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
107558238 | 627 days ago | 0 ETH | ||||
107557929 | 627 days ago | 0 ETH | ||||
107557619 | 627 days ago | 0 ETH | ||||
107557309 | 627 days ago | 0 ETH | ||||
107556999 | 627 days ago | 0 ETH | ||||
107556690 | 627 days ago | 0 ETH | ||||
107556388 | 627 days ago | 0 ETH | ||||
107556080 | 627 days ago | 0 ETH | ||||
107555778 | 627 days ago | 0 ETH | ||||
107555469 | 627 days ago | 0 ETH | ||||
107555167 | 627 days ago | 0 ETH | ||||
107555167 | 627 days ago | 0 ETH | ||||
107555167 | 627 days ago | 0 ETH | ||||
107555167 | 627 days ago | 0 ETH | ||||
107555167 | 627 days ago | 0 ETH | ||||
107555167 | 627 days ago | 0 ETH | ||||
107555167 | 627 days ago | 0 ETH | ||||
107555107 | 627 days ago | 0 ETH | ||||
107555107 | 627 days ago | 0 ETH | ||||
107555107 | 627 days ago | 0 ETH | ||||
107555107 | 627 days ago | 0 ETH | ||||
107555107 | 627 days ago | 0 ETH | ||||
107555107 | 627 days ago | 0 ETH | ||||
107555107 | 627 days ago | 0 ETH | ||||
107554828 | 627 days ago | 0 ETH |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xe32CaCD7...78cffB86d The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
PikaPriceFeed
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV2V3Interface.sol"; import "../access/Governable.sol"; contract PikaPriceFeed is Governable { using SafeMath for uint256; address owner; uint256 public lastUpdatedTime; uint256 public priceDuration = 600; // 10 mins uint256 public updateInterval = 120; // 2 mins mapping (address => uint256) public priceMap; mapping (address => uint256) public maxPriceDiffs; mapping (address => uint256) public spreads; mapping (address => uint256) lastUpdatedTimes; mapping(address => bool) public keepers; mapping (address => bool) public voters; mapping (address => bool) public disableFastOracleVotes; uint256 public minVoteCount = 2; uint256 public disableFastOracleVote; bool public isChainlinkOnly = false; bool public isPikaOracleOnly = false; bool public isSpreadEnabled = false; uint256 public delta = 20; // 20bp uint256 public decay = 9000; // 0.9 uint256 public defaultMaxPriceDiff = 2e16; // 2% uint256 public defaultSpread = 30; // 0.3% event PriceSet(address token, uint256 price, uint256 timestamp); event PriceDurationSet(uint256 priceDuration); event UpdateIntervalSet(uint256 updateInterval); event DefaultMaxPriceDiffSet(uint256 maxPriceDiff); event MaxPriceDiffSet(address token, uint256 maxPriceDiff); event KeeperSet(address keeper, bool isActive); event VoterSet(address voter, bool isActive); event DeltaAndDecaySet(uint256 delta, uint256 decay); event IsSpreadEnabledSet(bool isSpreadEnabled); event DefaultSpreadSet(uint256 defaultSpread); event SpreadSet(address token, uint256 spread); event IsChainlinkOnlySet(bool isChainlinkOnlySet); event IsPikaOracleOnlySet(bool isPikaOracleOnlySet); event SetOwner(address owner); event DisableFastOracle(address voter); event EnableFastOracle(address voter); event MinVoteCountSet(uint256 minVoteCount); uint256 public constant MAX_PRICE_DURATION = 30 minutes; uint256 public constant PRICE_BASE = 10000; constructor() { owner = msg.sender; keepers[msg.sender] = true; } function getPrice(address token, bool isMax) external view returns (uint256) { (uint256 price, bool isChainlink) = getPriceAndSource(token); if (isSpreadEnabled || isChainlink || disableFastOracleVote >= minVoteCount) { uint256 spread = spreads[token] == 0 ? defaultSpread : spreads[token]; return isMax ? price * (PRICE_BASE + spread) / PRICE_BASE : price * (PRICE_BASE - spread) / PRICE_BASE; } return price; } function shouldHaveSpread(address token) external view returns (bool) { (,bool isChainlink) = getPriceAndSource(token); return isSpreadEnabled || isChainlink || disableFastOracleVote >= minVoteCount; } function shouldUpdatePrice() external view returns (bool) { return lastUpdatedTime + updateInterval < block.timestamp; } function shouldUpdatePriceForToken(address token) external view returns (bool) { return lastUpdatedTimes[token] + updateInterval < block.timestamp; } function shouldUpdatePriceForTokens(address[] calldata tokens) external view returns (bool) { for (uint256 i = 0; i < tokens.length; i++) { if (lastUpdatedTimes[tokens[i]] + updateInterval < block.timestamp) { return true; } } return false; } function getPrice(address token) public view returns (uint256) { (uint256 price,) = getPriceAndSource(token); return price; } function getPriceAndSource(address token) public view returns (uint256, bool) { (uint256 chainlinkPrice, uint256 chainlinkTimestamp) = getChainlinkPrice(token); if (isChainlinkOnly || (!isPikaOracleOnly && (block.timestamp > lastUpdatedTimes[token].add(priceDuration) && chainlinkTimestamp > lastUpdatedTimes[token]))) { return (chainlinkPrice, true); } uint256 pikaPrice = priceMap[token]; uint256 priceDiff = pikaPrice > chainlinkPrice ? (pikaPrice.sub(chainlinkPrice)).mul(1e18).div(chainlinkPrice) : (chainlinkPrice.sub(pikaPrice)).mul(1e18).div(chainlinkPrice); uint256 maxPriceDiff = maxPriceDiffs[token] == 0 ? defaultMaxPriceDiff : maxPriceDiffs[token]; if (priceDiff > maxPriceDiff) { return (chainlinkPrice, true); } return (pikaPrice, false); } function getChainlinkPrice(address token) public view returns (uint256 priceToReturn, uint256 chainlinkTimestamp) { require(token != address(0), '!feed-error'); (,int256 price,,uint256 timeStamp,) = AggregatorV3Interface(token).latestRoundData(); require(price > 0, '!price'); require(timeStamp > 0, '!timeStamp'); uint8 decimals = AggregatorV3Interface(token).decimals(); chainlinkTimestamp = timeStamp; if (decimals != 8) { priceToReturn = uint256(price) * (10**8) / (10**uint256(decimals)); } else { priceToReturn = uint256(price); } } function getPrices(address[] memory tokens) external view returns (uint256[] memory){ uint256[] memory curPrices = new uint256[](tokens.length); for (uint256 i = 0; i < tokens.length; i++) { curPrices[i] = getPrice(tokens[i]); } return curPrices; } function getLastNPrices(address token, uint256 n) external view returns(uint256[] memory) { require(token != address(0), '!feed-error'); uint256[] memory prices = new uint256[](n); uint8 decimals = AggregatorV3Interface(token).decimals(); (uint80 roundId,,,,) = AggregatorV3Interface(token).latestRoundData(); for (uint256 i = 0; i < n; i++) { (,int256 price,,,) = AggregatorV3Interface(token).getRoundData(roundId - uint80(i)); require(price > 0, '!price'); uint256 priceToReturn; if (decimals != 8) { priceToReturn = uint256(price) * (10**8) / (10**uint256(decimals)); } else { priceToReturn = uint256(price); } prices[i] = priceToReturn; } return prices; } function setPrices(address[] memory tokens, uint256[] memory prices) external onlyKeeper { require(tokens.length == prices.length, "!length"); for (uint256 i = 0; i < tokens.length; i++) { address token = tokens[i]; priceMap[token] = prices[i]; lastUpdatedTimes[token] = block.timestamp; emit PriceSet(token, prices[i], block.timestamp); } lastUpdatedTime = block.timestamp; } function disableFastOracle() external onlyVoter { require(!disableFastOracleVotes[msg.sender], "already voted"); disableFastOracleVotes[msg.sender] = true; disableFastOracleVote = disableFastOracleVote + 1; emit DisableFastOracle(msg.sender); } function enableFastOracle() external onlyVoter { require(disableFastOracleVotes[msg.sender], "already enabled"); disableFastOracleVotes[msg.sender] = false; disableFastOracleVote = disableFastOracleVote - 1; emit EnableFastOracle(msg.sender); } function setMinVoteCount(uint256 _minVoteCount) external onlyOwner { minVoteCount = _minVoteCount; emit MinVoteCountSet(_minVoteCount); } function setPriceDuration(uint256 _priceDuration) external onlyOwner { require(_priceDuration <= MAX_PRICE_DURATION, "!priceDuration"); priceDuration = _priceDuration; emit PriceDurationSet(_priceDuration); } function setUpdatedInterval(uint256 _updateInterval) external onlyOwner { updateInterval = _updateInterval; emit UpdateIntervalSet(_updateInterval); } function setDefaultMaxPriceDiff(uint256 _defaultMaxPriceDiff) external onlyOwner { require(_defaultMaxPriceDiff < 3e16, "too big"); // must be smaller than 3% defaultMaxPriceDiff = _defaultMaxPriceDiff; emit DefaultMaxPriceDiffSet(_defaultMaxPriceDiff); } function setMaxPriceDiff(address _token, uint256 _maxPriceDiff) external onlyOwner { require(_maxPriceDiff < 3e16, "too big"); // must be smaller than 3% maxPriceDiffs[_token] = _maxPriceDiff; emit MaxPriceDiffSet(_token, _maxPriceDiff); } function setKeeper(address _keeper, bool _isActive) external onlyOwner { keepers[_keeper] = _isActive; emit KeeperSet(_keeper, _isActive); } function setVoter(address _voter, bool _isActive) external onlyOwner { voters[_voter] = _isActive; emit VoterSet(_voter, _isActive); } function setIsChainlinkOnly(bool _isChainlinkOnly) external onlyOwner { isChainlinkOnly = _isChainlinkOnly; emit IsChainlinkOnlySet(isChainlinkOnly); } function setIsPikaOracleOnly(bool _isPikaOracleOnly) external onlyOwner { isPikaOracleOnly = _isPikaOracleOnly; emit IsPikaOracleOnlySet(isPikaOracleOnly); } function setDeltaAndDecay(uint256 _delta, uint256 _decay) external onlyOwner { delta = _delta; decay = _decay; emit DeltaAndDecaySet(delta, decay); } function setIsSpreadEnabled(bool _isSpreadEnabled) external onlyOwner { isSpreadEnabled = _isSpreadEnabled; emit IsSpreadEnabledSet(_isSpreadEnabled); } function setDefaultSpread(uint256 _defaultSpread) external onlyOwner { defaultSpread = _defaultSpread; emit DefaultSpreadSet(_defaultSpread); } function setSpread(address _token, uint256 _spread) external onlyOwner { spreads[_token] = _spread; emit SpreadSet(_token, _spread); } function setOwner(address _owner) external onlyGov { owner = _owner; emit SetOwner(_owner); } modifier onlyVoter() { require(voters[msg.sender], "!voter"); _; } modifier onlyKeeper() { require(keepers[msg.sender], "!keepers"); _; } modifier onlyOwner() { require(msg.sender == owner, "!owner"); _; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../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. * * By default, the owner account will be the one that deploys the contract. 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; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing 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 { require(newOwner != address(0), "Ownable: new owner is the zero address"); _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 pragma solidity ^0.8.0; import "./AggregatorInterface.sol"; import "./AggregatorV3Interface.sol"; interface AggregatorV2V3Interface is AggregatorInterface, AggregatorV3Interface { }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Governable { address public gov; constructor() public { gov = msg.sender; } modifier onlyGov() { require(msg.sender == gov, "Governable: forbidden"); _; } function setGov(address _gov) external onlyGov { gov = _gov; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @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: MIT pragma solidity ^0.8.0; interface AggregatorInterface { function latestAnswer() external view returns ( int256 ); function latestTimestamp() external view returns ( uint256 ); function latestRound() external view returns ( uint256 ); function getAnswer( uint256 roundId ) external view returns ( int256 ); function getTimestamp( uint256 roundId ) external view returns ( uint256 ); event AnswerUpdated( int256 indexed current, uint256 indexed roundId, uint256 updatedAt ); event NewRound( uint256 indexed roundId, address indexed startedBy, uint256 startedAt ); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns ( uint8 ); function description() external view returns ( string memory ); function version() external view returns ( uint256 ); // getRoundData and latestRoundData should both raise "No data present" // if they do not have data to report, instead of returning unset values // which could be misinterpreted as actual reported values. function getRoundData( uint80 _roundId ) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxPriceDiff","type":"uint256"}],"name":"DefaultMaxPriceDiffSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"defaultSpread","type":"uint256"}],"name":"DefaultSpreadSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"delta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"decay","type":"uint256"}],"name":"DeltaAndDecaySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"}],"name":"DisableFastOracle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"}],"name":"EnableFastOracle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isChainlinkOnlySet","type":"bool"}],"name":"IsChainlinkOnlySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isPikaOracleOnlySet","type":"bool"}],"name":"IsPikaOracleOnlySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isSpreadEnabled","type":"bool"}],"name":"IsSpreadEnabledSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"bool","name":"isActive","type":"bool"}],"name":"KeeperSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"maxPriceDiff","type":"uint256"}],"name":"MaxPriceDiffSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minVoteCount","type":"uint256"}],"name":"MinVoteCountSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"priceDuration","type":"uint256"}],"name":"PriceDurationSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PriceSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"SetOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"spread","type":"uint256"}],"name":"SpreadSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updateInterval","type":"uint256"}],"name":"UpdateIntervalSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"bool","name":"isActive","type":"bool"}],"name":"VoterSet","type":"event"},{"inputs":[],"name":"MAX_PRICE_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultMaxPriceDiff","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultSpread","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableFastOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableFastOracleVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"disableFastOracleVotes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableFastOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getChainlinkPrice","outputs":[{"internalType":"uint256","name":"priceToReturn","type":"uint256"},{"internalType":"uint256","name":"chainlinkTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"getLastNPrices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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"},{"internalType":"bool","name":"isMax","type":"bool"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getPriceAndSource","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"getPrices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isChainlinkOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPikaOracleOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSpreadEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"keepers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdatedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxPriceDiffs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minVoteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"priceMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_defaultMaxPriceDiff","type":"uint256"}],"name":"setDefaultMaxPriceDiff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_defaultSpread","type":"uint256"}],"name":"setDefaultSpread","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_delta","type":"uint256"},{"internalType":"uint256","name":"_decay","type":"uint256"}],"name":"setDeltaAndDecay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isChainlinkOnly","type":"bool"}],"name":"setIsChainlinkOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPikaOracleOnly","type":"bool"}],"name":"setIsPikaOracleOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isSpreadEnabled","type":"bool"}],"name":"setIsSpreadEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_keeper","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_maxPriceDiff","type":"uint256"}],"name":"setMaxPriceDiff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minVoteCount","type":"uint256"}],"name":"setMinVoteCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceDuration","type":"uint256"}],"name":"setPriceDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"setPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_spread","type":"uint256"}],"name":"setSpread","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_updateInterval","type":"uint256"}],"name":"setUpdatedInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setVoter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"shouldHaveSpread","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"shouldUpdatePrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"shouldUpdatePriceForToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"shouldUpdatePriceForTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"spreads","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updateInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"voters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102bb5760003560e01c806366a6693911610182578063ce7d49a6116100e9578063dbd0a2e7116100a2578063e9c594ad1161007c578063e9c594ad1461065a578063eaa8972914610662578063f15674d714610682578063fd2c80ae1461068f57600080fd5b8063dbd0a2e714610621578063df017c4f14610634578063e1f174fb1461064757600080fd5b8063ce7d49a61461059a578063ce98dfa8146105c2578063cfad57a2146105d5578063d1b9e853146105e8578063d340396c146105fb578063da3209bf1461060e57600080fd5b8063a3ec138d1161013b578063a3ec138d14610523578063acfd8c3014610546578063ba9ac3b71461054e578063bd58fe5614610561578063bf85689514610589578063ca6dd1501461059257600080fd5b806366a66939146104b1578063695d4184146104c45780636b14fcd6146104d757806376d69760146104ea57806383e2cd2d146104fd5780638fb5a4821461051057600080fd5b806341976e091161022657806353bfb7d2116101df57806353bfb7d21461045757806354fac919146104605780635dc3c0ba146104695780636245a0541461048c578063658ca8e714610495578063668d3d65146104a857600080fd5b806341976e09146103e2578063419de026146103f557806341ce15c2146104085780634352fa9f1461041157806344c231931461042457806348f6b7411461043757600080fd5b80631ddd1bf6116102785780631ddd1bf61461035a57806326bd553d14610363578063352cddea146103835780633bbd64bc146103a3578063407bc73f146103c657806340be2883146103d957600080fd5b806303cd2571146102c05780630de93781146102dc57806312b495a8146102f157806312d43a51146102fa57806313af4035146103255780631738c65c14610338575b600080fd5b6102c960035481565b6040519081526020015b60405180910390f35b6102ef6102ea366004611ba7565b610698565b005b6102c9600f5481565b60005461030d906001600160a01b031681565b6040516001600160a01b0390911681526020016102d3565b6102ef610333366004611b59565b610724565b600e5461034a90610100900460ff1681565b60405190151581526020016102d3565b6102c961271081565b6102c9610371366004611b59565b60076020526000908152604090205481565b610396610391366004611ba7565b6107cb565b6040516102d39190611e0e565b61034a6103b1366004611b59565b60096020526000908152604090205460ff1681565b6102ef6103d4366004611d60565b610aa3565b6102c9600c5481565b6102c96103f0366004611b59565b610b02565b6102ef610403366004611ba7565b610b16565b6102c960125481565b6102ef61041f366004611c83565b610bd1565b6102ef610432366004611d60565b610d49565b6102c9610445366004611b59565b60066020526000908152604090205481565b6102c960115481565b6102c960105481565b61034a610477366004611b59565b600b6020526000908152604090205460ff1681565b6102c9600d5481565b6102ef6104a3366004611d60565b610deb565b6102c961070881565b61034a6104bf366004611bd1565b610e4a565b600e5461034a9062010000900460ff1681565b6102ef6104e5366004611d60565b610edc565b6102c96104f8366004611b74565b610f7b565b61034a61050b366004611b59565b61104e565b61039661051e366004611c46565b61107f565b61034a610531366004611b59565b600a6020526000908152604090205460ff1681565b61034a61112d565b6102ef61055c366004611d45565b611146565b61057461056f366004611b59565b6111c1565b604080519283526020830191909152016102d3565b6102c960025481565b6102ef6113b5565b6105ad6105a8366004611b59565b6114af565b604080519283529015156020830152016102d3565b6102ef6105d0366004611d45565b61160e565b6102ef6105e3366004611b59565b611683565b6102ef6105f6366004611b74565b6116f7565b61034a610609366004611b59565b61177d565b6102ef61061c366004611d45565b6117b8565b6102ef61062f366004611d79565b611829565b6102ef610642366004611d60565b611893565b6102ef610655366004611b74565b6118f2565b6102ef611978565b6102c9610670366004611b59565b60056020526000908152604090205481565b600e5461034a9060ff1681565b6102c960045481565b6001546001600160a01b031633146106cb5760405162461bcd60e51b81526004016106c290611e52565b60405180910390fd5b6001600160a01b038216600081815260076020908152604091829020849055815192835282018390527f2d5ef9b0cb34a616c375dc41007f7cd5f0faca3f1d08b648df785be6390e11f091015b60405180910390a15050565b6000546001600160a01b031633146107765760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b60448201526064016106c2565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f167d3e9c1016ab80e58802ca9da10ce5c6a0f4debc46a2e7a2cd9e56899a4fb5906020015b60405180910390a150565b60606001600160a01b0383166108115760405162461bcd60e51b815260206004820152600b60248201526a10b332b2b216b2b93937b960a91b60448201526064016106c2565b60008267ffffffffffffffff81111561082c5761082c612094565b604051908082528060200260200182016040528015610855578160200160208202803683370190505b5090506000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561089357600080fd5b505afa1580156108a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cb9190611deb565b90506000856001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561090857600080fd5b505afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109409190611d9b565b50505050905060005b85811015610a965760006001600160a01b038816639a6fc8f561096c8486612022565b6040516001600160e01b031960e084901b16815269ffffffffffffffffffff909116600482015260240160a06040518083038186803b1580156109ae57600080fd5b505afa1580156109c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e69190611d9b565b50505091505060008113610a255760405162461bcd60e51b815260206004820152600660248201526521707269636560d01b60448201526064016106c2565b60008460ff16600814610a5f57610a4060ff8616600a611f44565b610a4e836305f5e100611fec565b610a589190611edf565b9050610a62565b50805b80868481518110610a7557610a7561207e565b60200260200101818152505050508080610a8e9061204d565b915050610949565b5091925050505b92915050565b6001546001600160a01b03163314610acd5760405162461bcd60e51b81526004016106c290611e52565b60048190556040518181527f06a60a6a9bd26df0b38af118b3bfbf636cfe2705ef44a124c5baa2502c68c666906020016107c0565b600080610b0e836114af565b509392505050565b6001546001600160a01b03163314610b405760405162461bcd60e51b81526004016106c290611e52565b666a94d74f4300008110610b805760405162461bcd60e51b8152602060048201526007602482015266746f6f2062696760c81b60448201526064016106c2565b6001600160a01b038216600081815260066020908152604091829020849055815192835282018390527fc6cfe9beb856639c4aedf4b8a068c978062f042347bda6eeeb71122a06e942fe9101610718565b3360009081526009602052604090205460ff16610c1b5760405162461bcd60e51b8152602060048201526008602482015267216b65657065727360c01b60448201526064016106c2565b8051825114610c565760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b60448201526064016106c2565b60005b8251811015610d40576000838281518110610c7657610c7661207e565b60200260200101519050828281518110610c9257610c9261207e565b6020908102919091018101516001600160a01b0383166000908152600583526040808220929092556008909252902042905582517fd9359f6744c286382115ed720fc5e2e5da40d7aa33113ed0f1a3a4557c87ae40908290859085908110610cfc57610cfc61207e565b602090810291909101810151604080516001600160a01b03909416845291830152429082015260600160405180910390a15080610d388161204d565b915050610c59565b50504260025550565b6001546001600160a01b03163314610d735760405162461bcd60e51b81526004016106c290611e52565b610708811115610db65760405162461bcd60e51b815260206004820152600e60248201526d10b83934b1b2a23ab930ba34b7b760911b60448201526064016106c2565b60038190556040518181527faae603f964fc53413c0d185db74230b99137c662c6e21ccd59e55990fcd51097906020016107c0565b6001546001600160a01b03163314610e155760405162461bcd60e51b81526004016106c290611e52565b600c8190556040518181527f2ccdd3902dbf7bb1eb87a44a596a5e91355b8f7a9c3e5f0b2c0d95d999067e8f906020016107c0565b6000805b82811015610ed2574260045460086000878786818110610e7057610e7061207e565b9050602002016020810190610e859190611b59565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610eb09190611ec7565b1015610ec0576001915050610a9d565b80610eca8161204d565b915050610e4e565b5060009392505050565b6001546001600160a01b03163314610f065760405162461bcd60e51b81526004016106c290611e52565b666a94d74f4300008110610f465760405162461bcd60e51b8152602060048201526007602482015266746f6f2062696760c81b60448201526064016106c2565b60118190556040518181527f059d2b139b2c3687c7c5484afad23259b0520f9481a8b917b2ca75e9d8e357d0906020016107c0565b6000806000610f89856114af565b600e54919350915062010000900460ff1680610fa25750805b80610fb15750600c54600d5410155b15610b0e576001600160a01b03851660009081526007602052604081205415610ff2576001600160a01b038616600090815260076020526040902054610ff6565b6012545b9050846110235761271061100a828261200b565b6110149085611fec565b61101e9190611edf565b611044565b6127106110308282611ec7565b61103a9085611fec565b6110449190611edf565b9350505050610a9d565b6004546001600160a01b038216600090815260086020526040812054909142916110789190611ec7565b1092915050565b60606000825167ffffffffffffffff81111561109d5761109d612094565b6040519080825280602002602001820160405280156110c6578160200160208202803683370190505b50905060005b8351811015611126576110f78482815181106110ea576110ea61207e565b6020026020010151610b02565b8282815181106111095761110961207e565b60209081029190910101528061111e8161204d565b9150506110cc565b5092915050565b6000426004546002546111409190611ec7565b10905090565b6001546001600160a01b031633146111705760405162461bcd60e51b81526004016106c290611e52565b600e805461ff0019166101008315158102919091179182905560405160ff9190920416151581527f40c0a55e30f4418ff663e46680209ac47a8ba56a135fefd05384117aab450e00906020016107c0565b6000806001600160a01b0383166112085760405162461bcd60e51b815260206004820152600b60248201526a10b332b2b216b2b93937b960a91b60448201526064016106c2565b600080846001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561124457600080fd5b505afa158015611258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127c9190611d9b565b50935050925050600082136112bc5760405162461bcd60e51b815260206004820152600660248201526521707269636560d01b60448201526064016106c2565b600081116112f95760405162461bcd60e51b815260206004820152600a60248201526902174696d655374616d760b41b60448201526064016106c2565b6000856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561133457600080fd5b505afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190611deb565b90508193508060ff166008146113a95761138a60ff8216600a611f44565b611398846305f5e100611fec565b6113a29190611edf565b94506113ad565b8294505b505050915091565b336000908152600a602052604090205460ff166113fd5760405162461bcd60e51b815260206004820152600660248201526510bb37ba32b960d11b60448201526064016106c2565b336000908152600b602052604090205460ff161561144d5760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b60448201526064016106c2565b336000908152600b60205260409020805460ff19166001908117909155600d5461147691611ec7565b600d556040513381527fd04220b4b74741673631b166295bb6f1c8f1371ecc44f4b878093b24948ae3ee906020015b60405180910390a1565b6000806000806114be856111c1565b600e54919350915060ff168061152c5750600e54610100900460ff1615801561152c57506003546001600160a01b03861660009081526008602052604090205461150791611a6a565b4211801561152c57506001600160a01b03851660009081526008602052604090205481115b1561153c57509360019350915050565b6001600160a01b03851660009081526005602052604081205490838211611588576115838461157d670de0b6b3a76400006115778387611a76565b90611a82565b90611a8e565b6115a2565b6115a28461157d670de0b6b3a76400006115778684611a76565b6001600160a01b03881660009081526006602052604081205491925090156115e2576001600160a01b0388166000908152600660205260409020546115e6565b6011545b9050808211156115ff5750929660019650945050505050565b50909660009650945050505050565b6001546001600160a01b031633146116385760405162461bcd60e51b81526004016106c290611e52565b600e8054821515620100000262ff0000199091161790556040517f6c0cb64e5d260cc47a1ea64398a932541c60472ce94dc487536f4293e53c04b9906107c090831515815260200190565b6000546001600160a01b031633146116d55760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b60448201526064016106c2565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146117215760405162461bcd60e51b81526004016106c290611e52565b6001600160a01b038216600081815260096020908152604091829020805460ff19168515159081179091558251938452908301527f8dd62d4e1f60b96148552898e743aa2b571686baa26f4f1b647565dc3996c1a79101610718565b600080611789836114af565b600e5490925062010000900460ff169050806117a25750805b806117b15750600c54600d5410155b9392505050565b6001546001600160a01b031633146117e25760405162461bcd60e51b81526004016106c290611e52565b600e805460ff191682151590811790915560405160ff909116151581527f1de4009ffeed59089b78dfcc86c467a69a1f088673ab3133482f357fb15d3958906020016107c0565b6001546001600160a01b031633146118535760405162461bcd60e51b81526004016106c290611e52565b600f829055601081905560408051838152602081018390527f12b03d9d0c361bdac0e2512be47c0f2ed4b28996d8405e2f3178f23447552c029101610718565b6001546001600160a01b031633146118bd5760405162461bcd60e51b81526004016106c290611e52565b60128190556040518181527febd7469950ccdf722c62c34900b47e189e1e06935064e002b4b7a56a834a90a1906020016107c0565b6001546001600160a01b0316331461191c5760405162461bcd60e51b81526004016106c290611e52565b6001600160a01b0382166000818152600a6020908152604091829020805460ff19168515159081179091558251938452908301527fd4042c5d41e8f745237a14a4da0665c5024a9fdd5e986a292dc5904f090dccdf9101610718565b336000908152600a602052604090205460ff166119c05760405162461bcd60e51b815260206004820152600660248201526510bb37ba32b960d11b60448201526064016106c2565b336000908152600b602052604090205460ff16611a115760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b60448201526064016106c2565b336000908152600b60205260409020805460ff19169055600d54611a379060019061200b565b600d556040513381527f0dbb7c2b2dc33de0583531c2aae82bd270cb2cd1a12921ebfca824d2ceca6449906020016114a5565b60006117b18284611ec7565b60006117b1828461200b565b60006117b18284611fec565b60006117b18284611edf565b80356001600160a01b0381168114611ab157600080fd5b919050565b600082601f830112611ac757600080fd5b81356020611adc611ad783611ea3565b611e72565b80838252828201915082860187848660051b8901011115611afc57600080fd5b60005b85811015611b2257611b1082611a9a565b84529284019290840190600101611aff565b5090979650505050505050565b80358015158114611ab157600080fd5b805169ffffffffffffffffffff81168114611ab157600080fd5b600060208284031215611b6b57600080fd5b6117b182611a9a565b60008060408385031215611b8757600080fd5b611b9083611a9a565b9150611b9e60208401611b2f565b90509250929050565b60008060408385031215611bba57600080fd5b611bc383611a9a565b946020939093013593505050565b60008060208385031215611be457600080fd5b823567ffffffffffffffff80821115611bfc57600080fd5b818501915085601f830112611c1057600080fd5b813581811115611c1f57600080fd5b8660208260051b8501011115611c3457600080fd5b60209290920196919550909350505050565b600060208284031215611c5857600080fd5b813567ffffffffffffffff811115611c6f57600080fd5b611c7b84828501611ab6565b949350505050565b60008060408385031215611c9657600080fd5b823567ffffffffffffffff80821115611cae57600080fd5b611cba86838701611ab6565b9350602091508185013581811115611cd157600080fd5b85019050601f81018613611ce457600080fd5b8035611cf2611ad782611ea3565b80828252848201915084840189868560051b8701011115611d1257600080fd5b600094505b83851015611d35578035835260019490940193918501918501611d17565b5080955050505050509250929050565b600060208284031215611d5757600080fd5b6117b182611b2f565b600060208284031215611d7257600080fd5b5035919050565b60008060408385031215611d8c57600080fd5b50508035926020909101359150565b600080600080600060a08688031215611db357600080fd5b611dbc86611b3f565b9450602086015193506040860151925060608601519150611ddf60808701611b3f565b90509295509295909350565b600060208284031215611dfd57600080fd5b815160ff811681146117b157600080fd5b6020808252825182820181905260009190848201906040850190845b81811015611e4657835183529284019291840191600101611e2a565b50909695505050505050565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715611e9b57611e9b612094565b604052919050565b600067ffffffffffffffff821115611ebd57611ebd612094565b5060051b60200190565b60008219821115611eda57611eda612068565b500190565b600082611efc57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115611f3c578160001904821115611f2257611f22612068565b80851615611f2f57918102915b93841c9390800290611f06565b509250929050565b60006117b18383600082611f5a57506001610a9d565b81611f6757506000610a9d565b8160018114611f7d5760028114611f8757611fa3565b6001915050610a9d565b60ff841115611f9857611f98612068565b50506001821b610a9d565b5060208310610133831016604e8410600b8410161715611fc6575081810a610a9d565b611fd08383611f01565b8060001904821115611fe457611fe4612068565b029392505050565b600081600019048311821515161561200657612006612068565b500290565b60008282101561201d5761201d612068565b500390565b600069ffffffffffffffffffff8381169083168181101561204557612045612068565b039392505050565b600060001982141561206157612061612068565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea264697066735822122026df9fb6d34b90dccfe28f4eb84ce3cc00aab301a69dd9c7f11619c9c9516b4864736f6c63430008070033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.