Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xBaCf7652...8edd8D88A The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
ShortsTrackerTimelock
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 10 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT import "../libraries/math/SafeMath.sol"; import "../access/Governable.sol"; import "../core/interfaces/IShortsTracker.sol"; import "./interfaces/IHandlerTarget.sol"; pragma solidity 0.6.12; contract ShortsTrackerTimelock { using SafeMath for uint256; uint256 public constant BASIS_POINTS_DIVISOR = 10000; uint256 public constant MAX_BUFFER = 5 days; mapping (bytes32 => uint256) public pendingActions; address public admin; uint256 public buffer; mapping (address => bool) public isHandler; mapping (address => uint256) public lastUpdated; uint256 public averagePriceUpdateDelay; uint256 public maxAveragePriceChange; event GlobalShortAveragePriceUpdated(address indexed token, uint256 oldAveragePrice, uint256 newAveragePrice); event SignalSetGov(address target, address gov); event SetGov(address target, address gov); event SignalSetAdmin(address admin); event SetAdmin(address admin); event SetContractHandler(address indexed handler, bool isHandler); event SignalSetHandler(address target, address handler, bool isActive, bytes32 action); event SignalSetMaxAveragePriceChange(uint256 maxAveragePriceChange); event SetMaxAveragePriceChange(uint256 maxAveragePriceChange); event SignalSetAveragePriceUpdateDelay(uint256 averagePriceUpdateDelay); event SetAveragePriceUpdateDelay(uint256 averagePriceUpdateDelay); event SignalSetIsGlobalShortDataReady(address target, bool isGlobalShortDataReady); event SetIsGlobalShortDataReady(address target, bool isGlobalShortDataReady); event SignalPendingAction(bytes32 action); event ClearAction(bytes32 action); constructor( address _admin, uint256 _buffer, uint256 _averagePriceUpdateDelay, uint256 _maxAveragePriceChange ) public { admin = _admin; buffer = _buffer; averagePriceUpdateDelay = _averagePriceUpdateDelay; maxAveragePriceChange = _maxAveragePriceChange; } modifier onlyAdmin() { require(msg.sender == admin, "ShortsTrackerTimelock: admin forbidden"); _; } modifier onlyHandler() { require(isHandler[msg.sender] || msg.sender == admin, "ShortsTrackerTimelock: handler forbidden"); _; } function setBuffer(uint256 _buffer) external onlyAdmin { require(_buffer <= MAX_BUFFER, "ShortsTrackerTimelock: invalid buffer"); // require(_buffer > buffer, "ShortsTrackerTimelock: buffer cannot be decreased"); buffer = _buffer; } function signalSetAdmin(address _admin) external onlyAdmin { require(_admin != address(0), "ShortsTrackerTimelock: invalid admin"); bytes32 action = keccak256(abi.encodePacked("setAdmin", _admin)); _setPendingAction(action); emit SignalSetAdmin(_admin); } function setAdmin(address _admin) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setAdmin", _admin)); _validateAction(action); _clearAction(action); admin = _admin; emit SetAdmin(_admin); } function setContractHandler(address _handler, bool _isActive) external onlyAdmin { isHandler[_handler] = _isActive; emit SetContractHandler(_handler, _isActive); } function signalSetGov(address _shortsTracker, address _gov) external onlyAdmin { require(_gov != address(0), "ShortsTrackerTimelock: invalid gov"); bytes32 action = keccak256(abi.encodePacked("setGov", _shortsTracker, _gov)); _setPendingAction(action); emit SignalSetGov(_shortsTracker, _gov); } function setGov(address _shortsTracker, address _gov) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setGov", _shortsTracker, _gov)); _validateAction(action); _clearAction(action); Governable(_shortsTracker).setGov(_gov); emit SetGov(_shortsTracker, _gov); } function signalSetHandler(address _target, address _handler, bool _isActive) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setHandler", _target, _handler, _isActive)); _setPendingAction(action); emit SignalSetHandler(_target, _handler, _isActive, action); } function setHandler(address _target, address _handler, bool _isActive) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setHandler", _target, _handler, _isActive)); _validateAction(action); _clearAction(action); IHandlerTarget(_target).setHandler(_handler, _isActive); } function signalSetAveragePriceUpdateDelay(uint256 _averagePriceUpdateDelay) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setAveragePriceUpdateDelay", _averagePriceUpdateDelay)); _setPendingAction(action); emit SignalSetAveragePriceUpdateDelay(_averagePriceUpdateDelay); } function setAveragePriceUpdateDelay(uint256 _averagePriceUpdateDelay) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setAveragePriceUpdateDelay", _averagePriceUpdateDelay)); _validateAction(action); _clearAction(action); averagePriceUpdateDelay = _averagePriceUpdateDelay; emit SetAveragePriceUpdateDelay(_averagePriceUpdateDelay); } function signalSetMaxAveragePriceChange(uint256 _maxAveragePriceChange) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setMaxAveragePriceChange", _maxAveragePriceChange)); _setPendingAction(action); emit SignalSetMaxAveragePriceChange(_maxAveragePriceChange); } function setMaxAveragePriceChange(uint256 _maxAveragePriceChange) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setMaxAveragePriceChange", _maxAveragePriceChange)); _validateAction(action); _clearAction(action); maxAveragePriceChange = _maxAveragePriceChange; emit SetMaxAveragePriceChange(_maxAveragePriceChange); } function signalSetIsGlobalShortDataReady(IShortsTracker _shortsTracker, bool _value) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setIsGlobalShortDataReady", address(_shortsTracker), _value)); _setPendingAction(action); emit SignalSetIsGlobalShortDataReady(address(_shortsTracker), _value); } function setIsGlobalShortDataReady(IShortsTracker _shortsTracker, bool _value) external onlyAdmin { bytes32 action = keccak256(abi.encodePacked("setIsGlobalShortDataReady", address(_shortsTracker), _value)); _validateAction(action); _clearAction(action); _shortsTracker.setIsGlobalShortDataReady(_value); emit SetIsGlobalShortDataReady(address(_shortsTracker), _value); } function disableIsGlobalShortDataReady(IShortsTracker _shortsTracker) external onlyAdmin { _shortsTracker.setIsGlobalShortDataReady(false); emit SetIsGlobalShortDataReady(address(_shortsTracker), false); } function setGlobalShortAveragePrices(IShortsTracker _shortsTracker, address[] calldata _tokens, uint256[] calldata _averagePrices) external onlyHandler { _shortsTracker.setIsGlobalShortDataReady(false); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; uint256 oldAveragePrice = _shortsTracker.globalShortAveragePrices(token); uint256 newAveragePrice = _averagePrices[i]; uint256 diff = newAveragePrice > oldAveragePrice ? newAveragePrice.sub(oldAveragePrice) : oldAveragePrice.sub(newAveragePrice); require(diff.mul(BASIS_POINTS_DIVISOR).div(oldAveragePrice) < maxAveragePriceChange, "ShortsTrackerTimelock: too big change"); require(block.timestamp >= lastUpdated[token].add(averagePriceUpdateDelay), "ShortsTrackerTimelock: too early"); lastUpdated[token] = block.timestamp; emit GlobalShortAveragePriceUpdated(token, oldAveragePrice, newAveragePrice); } _shortsTracker.setInitData(_tokens, _averagePrices); } function cancelAction(bytes32 _action) external onlyAdmin { _clearAction(_action); } function _setPendingAction(bytes32 _action) private { require(pendingActions[_action] == 0, "ShortsTrackerTimelock: action already signalled"); pendingActions[_action] = block.timestamp.add(buffer); emit SignalPendingAction(_action); } function _validateAction(bytes32 _action) private view { require(pendingActions[_action] != 0, "ShortsTrackerTimelock: action not signalled"); require(pendingActions[_action] <= block.timestamp, "ShortsTrackerTimelock: action time not yet passed"); } function _clearAction(bytes32 _action) private { require(pendingActions[_action] != 0, "ShortsTrackerTimelock: invalid _action"); delete pendingActions[_action]; emit ClearAction(_action); } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; 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 pragma solidity 0.6.12; interface IShortsTracker { function isGlobalShortDataReady() external view returns (bool); function globalShortAveragePrices(address _token) external view returns (uint256); function getNextGlobalShortData( address _account, address _collateralToken, address _indexToken, uint256 _nextPrice, uint256 _sizeDelta, bool _isIncrease ) external view returns (uint256, uint256); function updateGlobalShortData( address _account, address _collateralToken, address _indexToken, bool _isLong, uint256 _sizeDelta, uint256 _markPrice, bool _isIncrease ) external; function setIsGlobalShortDataReady(bool value) external; function setInitData(address[] calldata _tokens, uint256[] calldata _averagePrices) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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 sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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 mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IHandlerTarget { function isHandler(address _account) external returns (bool); function setHandler(address _handler, bool _isActive) external; }
{ "optimizer": { "enabled": true, "runs": 10 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"uint256","name":"_buffer","type":"uint256"},{"internalType":"uint256","name":"_averagePriceUpdateDelay","type":"uint256"},{"internalType":"uint256","name":"_maxAveragePriceChange","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"action","type":"bytes32"}],"name":"ClearAction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldAveragePrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAveragePrice","type":"uint256"}],"name":"GlobalShortAveragePriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"SetAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"averagePriceUpdateDelay","type":"uint256"}],"name":"SetAveragePriceUpdateDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"handler","type":"address"},{"indexed":false,"internalType":"bool","name":"isHandler","type":"bool"}],"name":"SetContractHandler","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"gov","type":"address"}],"name":"SetGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"isGlobalShortDataReady","type":"bool"}],"name":"SetIsGlobalShortDataReady","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxAveragePriceChange","type":"uint256"}],"name":"SetMaxAveragePriceChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"action","type":"bytes32"}],"name":"SignalPendingAction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"SignalSetAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"averagePriceUpdateDelay","type":"uint256"}],"name":"SignalSetAveragePriceUpdateDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"gov","type":"address"}],"name":"SignalSetGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"handler","type":"address"},{"indexed":false,"internalType":"bool","name":"isActive","type":"bool"},{"indexed":false,"internalType":"bytes32","name":"action","type":"bytes32"}],"name":"SignalSetHandler","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"isGlobalShortDataReady","type":"bool"}],"name":"SignalSetIsGlobalShortDataReady","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxAveragePriceChange","type":"uint256"}],"name":"SignalSetMaxAveragePriceChange","type":"event"},{"inputs":[],"name":"BASIS_POINTS_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BUFFER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"averagePriceUpdateDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_action","type":"bytes32"}],"name":"cancelAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IShortsTracker","name":"_shortsTracker","type":"address"}],"name":"disableIsGlobalShortDataReady","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHandler","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastUpdated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAveragePriceChange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"pendingActions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_averagePriceUpdateDelay","type":"uint256"}],"name":"setAveragePriceUpdateDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buffer","type":"uint256"}],"name":"setBuffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_handler","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setContractHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IShortsTracker","name":"_shortsTracker","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_averagePrices","type":"uint256[]"}],"name":"setGlobalShortAveragePrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_shortsTracker","type":"address"},{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_handler","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IShortsTracker","name":"_shortsTracker","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setIsGlobalShortDataReady","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxAveragePriceChange","type":"uint256"}],"name":"setMaxAveragePriceChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"signalSetAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_averagePriceUpdateDelay","type":"uint256"}],"name":"signalSetAveragePriceUpdateDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_shortsTracker","type":"address"},{"internalType":"address","name":"_gov","type":"address"}],"name":"signalSetGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_handler","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"signalSetHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IShortsTracker","name":"_shortsTracker","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"signalSetIsGlobalShortDataReady","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxAveragePriceChange","type":"uint256"}],"name":"signalSetMaxAveragePriceChange","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061013e5760003560e01c80630a6f93e6146101435780631154e8081461017b578063126082cf146101b5578063185051c1146101bd5780631ab8fe04146101eb57806324ccbe30146101f35780632591d4831461022b5780632c166c411461025957806333156639146102765780633976e5661461029357806342588a671461036157806342773c2c1461037e57806346ea87af146103865780634882fa13146103c057806351a6de0d146103ee5780635c3bca361461041c57806361d0756914610439578063627395eb14610441578063704b6c0214610467578063717cf5d61461048d578063781cc3d3146104b3578063996a7a1e146104d0578063adc7ea37146104fe578063e30569e51461051b578063edaafe2014610538578063f851a44014610540575b600080fd5b6101696004803603602081101561015957600080fd5b50356001600160a01b0316610564565b60408051918252519081900360200190f35b6101b36004803603606081101561019157600080fd5b506001600160a01b038135811691602081013590911690604001351515610576565b005b6101696106a3565b6101b3600480360360408110156101d357600080fd5b506001600160a01b03813516906020013515156106a9565b610169610752565b6101b36004803603606081101561020957600080fd5b506001600160a01b038135811691602081013590911690604001351515610758565b6101b36004803603604081101561024157600080fd5b506001600160a01b038135169060200135151561085d565b6101b36004803603602081101561026f57600080fd5b50356109b0565b6101b36004803603602081101561028c57600080fd5b5035610a8f565b6101b3600480360360608110156102a957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156102d357600080fd5b8201836020820111156102e557600080fd5b803590602001918460208302840111600160201b8311171561030657600080fd5b919390929091602081019035600160201b81111561032357600080fd5b82018360208201111561033557600080fd5b803590602001918460208302840111600160201b8311171561035657600080fd5b509092509050610b70565b6101b36004803603602081101561037757600080fd5b5035610f0f565b610169610fe2565b6103ac6004803603602081101561039c57600080fd5b50356001600160a01b0316610fe8565b604080519115158252519081900360200190f35b6101b3600480360360408110156103d657600080fd5b506001600160a01b0381351690602001351515610ffd565b6101b36004803603604081101561040457600080fd5b506001600160a01b03813581169160200135166110f9565b6101b36004803603602081101561043257600080fd5b5035611251565b610169611322565b6101b36004803603602081101561045757600080fd5b50356001600160a01b0316611329565b6101b36004803603602081101561047d57600080fd5b50356001600160a01b0316611405565b6101b3600480360360208110156104a357600080fd5b50356001600160a01b03166114f9565b6101b3600480360360208110156104c957600080fd5b5035611614565b6101b3600480360360408110156104e657600080fd5b506001600160a01b0381358116916020013516611669565b6101b36004803603602081101561051457600080fd5b5035611796565b6101696004803603602081101561053157600080fd5b5035611826565b610169611838565b61054861183e565b604080516001600160a01b039092168252519081900360200190f35b60046020526000908152604090205481565b6001546001600160a01b031633146105bf5760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b605283015282516033818403018152605390920190925280519101206106238161184d565b61062c816118e4565b836001600160a01b0316639cb7de4b84846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b15801561068557600080fd5b505af1158015610699573d6000803e3d6000fd5b5050505050505050565b61271081565b6001546001600160a01b031633146106f25760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b6001600160a01b038216600081815260036020908152604091829020805460ff1916851515908117909155825190815291517f0c7e57410cc008b0b1abd8a03240abc3921d41be4ca09611330825622d5866cf9281900390910190a25050565b60055481565b6001546001600160a01b031633146107a15760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b604080516939b2ba2430b7323632b960b11b6020808301919091526001600160601b0319606087811b8216602a85015286901b16603e83015283151560f81b6052830152825160338184030181526053909201909252805191012061080581611975565b604080516001600160a01b03808716825285166020820152831515818301526060810183905290517f1929c4e13b0dbbad7856b9ce1fc9dca98c7bf7cedd56e22c04dd60ad1d34fe4b9181900360800190a150505050565b6001546001600160a01b031633146108a65760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b60408051787365744973476c6f62616c53686f727444617461526561647960381b6020808301919091526001600160601b0319606086901b16603983015283151560f81b604d8301528251602e818403018152604e909201909252805191012061090f8161184d565b610918816118e4565b826001600160a01b0316633d30cabf836040518263ffffffff1660e01b8152600401808215158152602001915050600060405180830381600087803b15801561096057600080fd5b505af1158015610974573d6000803e3d6000fd5b5050604080516001600160a01b038716815285151560208201528151600080516020611cc28339815191529450908190039091019150a1505050565b6001546001600160a01b031633146109f95760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b60408051777365744d61784176657261676550726963654368616e676560401b60208083019190915260388083018590528351808403909101815260589092019092528051910120610a4a8161184d565b610a53816118e4565b60068290556040805183815290517fe846c28c10eef345d8d4fea8b403bfac624c32c3e64ce0b666f23404f2edb5149181900360200190a15050565b6001546001600160a01b03163314610ad85760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b604080517973657441766572616765507269636555706461746544656c617960301b602080830191909152603a80830185905283518084039091018152605a9092019092528051910120610b2b8161184d565b610b34816118e4565b60058290556040805183815290517fa043b6b847902bb85c2a2575e9bce3a077bcaad8ec888ac941f50a6f4acdbb3d9181900360200190a15050565b3360009081526003602052604090205460ff1680610b9857506001546001600160a01b031633145b610bd35760405162461bcd60e51b8152600401808060200182810382526028815260200180611d086028913960400191505060405180910390fd5b60408051633d30cabf60e01b815260006004820181905291516001600160a01b03881692633d30cabf926024808201939182900301818387803b158015610c1957600080fd5b505af1158015610c2d573d6000803e3d6000fd5b5050505060005b83811015610e4a576000858583818110610c4a57fe5b905060200201356001600160a01b031690506000876001600160a01b03166362749803836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610cab57600080fd5b505afa158015610cbf573d6000803e3d6000fd5b505050506040513d6020811015610cd557600080fd5b505190506000858585818110610ce757fe5b9050602002013590506000828211610d0857610d038383611a17565b610d12565b610d128284611a17565b600654909150610d2e84610d2884612710611a62565b90611abb565b10610d6a5760405162461bcd60e51b8152600401808060200182810382526025815260200180611dfa6025913960400191505060405180910390fd5b6005546001600160a01b038516600090815260046020526040902054610d8f91611afa565b421015610de3576040805162461bcd60e51b815260206004820181905260248201527f53686f727473547261636b657254696d656c6f636b3a20746f6f206561726c79604482015290519081900360640190fd5b6001600160a01b038416600081815260046020908152604091829020429055815186815290810185905281517fa6a58ff784b1e07988de90568885d7bbd8e5485c3ec4344195c7306108553256929181900390910190a2505060019092019150610c349050565b50846001600160a01b031663bbd97187858585856040518563ffffffff1660e01b81526004018080602001806020018381038352878782818152602001925060200280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610ef057600080fd5b505af1158015610f04573d6000803e3d6000fd5b505050505050505050565b6001546001600160a01b03163314610f585760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b604080517973657441766572616765507269636555706461746544656c617960301b602080830191909152603a80830185905283518084039091018152605a9092019092528051910120610fab81611975565b6040805183815290517fc226c48cee6a025ab009e01969a2e89f1ce4d455cfa2900745b2237cb0bb8d619181900360200190a15050565b60065481565b60036020526000908152604090205460ff1681565b6001546001600160a01b031633146110465760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b60408051787365744973476c6f62616c53686f727444617461526561647960381b6020808301919091526001600160601b0319606086901b16603983015283151560f81b604d8301528251602e818403018152604e90920190925280519101206110af81611975565b604080516001600160a01b0385168152831515602082015281517f362e5bba25647700de1a7562fc07672df837bef17125e07a6f79abea31ee5a48929181900390910190a1505050565b6001546001600160a01b031633146111425760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e90920190925280519101206111978161184d565b6111a0816118e4565b826001600160a01b031663cfad57a2836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156111ef57600080fd5b505af1158015611203573d6000803e3d6000fd5b5050604080516001600160a01b0380881682528616602082015281517f53351836099c03ffc3b1727d8abd4b0222afa87d4ed76ae3102d51369ef7f7859450908190039091019150a1505050565b6001546001600160a01b0316331461129a5760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b60408051777365744d61784176657261676550726963654368616e676560401b602080830191909152603880830185905283518084039091018152605890920190925280519101206112eb81611975565b6040805183815290517f21f68305d262b9ce144019f5d9f755a2dd1b5c2d35996cd4b649c285d7525cd19181900360200190a15050565b6206978081565b6001546001600160a01b031633146113725760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b60408051633d30cabf60e01b815260006004820181905291516001600160a01b03841692633d30cabf926024808201939182900301818387803b1580156113b857600080fd5b505af11580156113cc573d6000803e3d6000fd5b5050604080516001600160a01b0385168152600060208201528151600080516020611cc28339815191529450908190039091019150a150565b6001546001600160a01b0316331461144e5760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b604080516739b2ba20b236b4b760c11b6020808301919091526001600160601b0319606085901b1660288301528251601c818403018152603c909201909252805191012061149b8161184d565b6114a4816118e4565b600180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19181900360200190a15050565b6001546001600160a01b031633146115425760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b6001600160a01b0381166115875760405162461bcd60e51b8152600401808060200182810382526024815260200180611db16024913960400191505060405180910390fd5b604080516739b2ba20b236b4b760c11b6020808301919091526001600160601b0319606085901b1660288301528251601c818403018152603c90920190925280519101206115d481611975565b604080516001600160a01b038416815290517fbccacda50126e9efa231593d2a9d4394d7cda7909ab2e14d2ae878ab2a306b3f9181900360200190a15050565b6001546001600160a01b0316331461165d5760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b611666816118e4565b50565b6001546001600160a01b031633146116b25760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b6001600160a01b0381166116f75760405162461bcd60e51b8152600401808060200182810382526022815260200180611c4f6022913960400191505060405180910390fd5b604080516539b2ba23b7bb60d11b6020808301919091526001600160601b0319606086811b8216602685015285901b16603a8301528251602e818403018152604e909201909252805191012061174c81611975565b604080516001600160a01b0380861682528416602082015281517f84f5d90471bb5811423318895e49ef4de52f5a6f4dac67af85e4202410bb66a4929181900390910190a1505050565b6001546001600160a01b031633146117df5760405162461bcd60e51b8152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b620697808111156118215760405162461bcd60e51b8152600401808060200182810382526025815260200180611dd56025913960400191505060405180910390fd5b600255565b60006020819052908152604090205481565b60025481565b6001546001600160a01b031681565b6000818152602081905260409020546118975760405162461bcd60e51b815260040180806020018281038252602b815260200180611c97602b913960400191505060405180910390fd5b6000818152602081905260409020544210156116665760405162461bcd60e51b8152600401808060200182810382526031815260200180611d806031913960400191505060405180910390fd5b60008181526020819052604090205461192e5760405162461bcd60e51b8152600401808060200182810382526026815260200180611c716026913960400191505060405180910390fd5b60008181526020818152604080832092909255815183815291517f194ed6dd5e37e2acc44a19455c3f208c4831ee695fe362d9c4ef2d316bc53aec9281900390910190a150565b600081815260208190526040902054156119c05760405162461bcd60e51b815260040180806020018281038252602f815260200180611d30602f913960400191505060405180910390fd5b6002546119ce904290611afa565b6000828152602081815260409182902092909255805183815290517f5fb9c0ecf7b4a28c4c480212e868f9da7f373a2ed4d23498b0be6aadf35242fb929181900390910190a150565b6000611a5983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b52565b90505b92915050565b600082611a7157506000611a5c565b82820282848281611a7e57fe5b0414611a595760405162461bcd60e51b8152600401808060200182810382526021815260200180611d5f6021913960400191505060405180910390fd5b6000611a5983836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250611be9565b600082820183811015611a59576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b60008184841115611be15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ba6578181015183820152602001611b8e565b50505050905090810190601f168015611bd35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611c385760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611ba6578181015183820152602001611b8e565b506000838581611c4457fe5b049594505050505056fe53686f727473547261636b657254696d656c6f636b3a20696e76616c696420676f7653686f727473547261636b657254696d656c6f636b3a20696e76616c6964205f616374696f6e53686f727473547261636b657254696d656c6f636b3a20616374696f6e206e6f74207369676e616c6c6564177de4361fc37a0e8defe8ac0c685d3472789b507959897eec32350c9d2c366653686f727473547261636b657254696d656c6f636b3a2061646d696e20666f7262696464656e53686f727473547261636b657254696d656c6f636b3a2068616e646c657220666f7262696464656e53686f727473547261636b657254696d656c6f636b3a20616374696f6e20616c7265616479207369676e616c6c6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753686f727473547261636b657254696d656c6f636b3a20616374696f6e2074696d65206e6f74207965742070617373656453686f727473547261636b657254696d656c6f636b3a20696e76616c69642061646d696e53686f727473547261636b657254696d656c6f636b3a20696e76616c69642062756666657253686f727473547261636b657254696d656c6f636b3a20746f6f20626967206368616e6765a2646970667358221220f16ccc222fc779351ee454cf1d2a27539c1d32bb1b0c47fdb96aa4a11751364a64736f6c634300060c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 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.