Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 10147817 | 1562 days ago | IN | 0 ETH | 0.04108007 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DelayedProxyAdmin
Compiler Version
v0.5.16+commit.9c3226ce
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion, GNU GPLv3 license, Audited
Contract Source Code (Solidity)Audit Report
/** *Submitted for verification at Etherscan.io on 2020-05-28 */ pragma solidity 0.5.16; /** * @title ModuleKeys * @author Stability Labs Pty. Ltd. * @notice Provides system wide access to the byte32 represntations of system modules * This allows each system module to be able to reference and update one another in a * friendly way * @dev keccak256() values are hardcoded to avoid re-evaluation of the constants at runtime. */ contract ModuleKeys { // keccak256("Governance"); bytes32 internal constant KEY_GOVERNANCE = 0x9409903de1e6fd852dfc61c9dacb48196c48535b60e25abf92acc92dd689078d; //keccak256("Staking"); bytes32 internal constant KEY_STAKING = 0x1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034; //keccak256("ProxyAdmin"); bytes32 internal constant KEY_PROXY_ADMIN = 0x96ed0203eb7e975a4cbcaa23951943fa35c5d8288117d50c12b3d48b0fab48d1; // keccak256("OracleHub"); bytes32 internal constant KEY_ORACLE_HUB = 0x8ae3a082c61a7379e2280f3356a5131507d9829d222d853bfa7c9fe1200dd040; // keccak256("Manager"); bytes32 internal constant KEY_MANAGER = 0x6d439300980e333f0256d64be2c9f67e86f4493ce25f82498d6db7f4be3d9e6f; //keccak256("Recollateraliser"); bytes32 internal constant KEY_RECOLLATERALISER = 0x39e3ed1fc335ce346a8cbe3e64dd525cf22b37f1e2104a755e761c3c1eb4734f; //keccak256("MetaToken"); bytes32 internal constant KEY_META_TOKEN = 0xea7469b14936af748ee93c53b2fe510b9928edbdccac3963321efca7eb1a57a2; // keccak256("SavingsManager"); bytes32 internal constant KEY_SAVINGS_MANAGER = 0x12fe936c77a1e196473c4314f3bed8eeac1d757b319abb85bdda70df35511bf1; } /** * @title INexus * @dev Basic interface for interacting with the Nexus i.e. SystemKernel */ interface INexus { function governor() external view returns (address); function getModule(bytes32 key) external view returns (address); function proposeModule(bytes32 _key, address _addr) external; function cancelProposedModule(bytes32 _key) external; function acceptProposedModule(bytes32 _key) external; function acceptProposedModules(bytes32[] calldata _keys) external; function requestLockModule(bytes32 _key) external; function cancelLockModule(bytes32 _key) external; function lockModule(bytes32 _key) external; } /** * @title Module * @author Stability Labs Pty. Ltd. * @dev Subscribes to module updates from a given publisher by reading from its registry */ contract Module is ModuleKeys { INexus public nexus; /** * @dev Initialises the Module by setting publisher addresses, * and reading all available system module information */ constructor(address _nexus) internal { require(_nexus != address(0), "Nexus is zero address"); nexus = INexus(_nexus); } /** * @dev Modifier to allow function calls only from the Governor. */ modifier onlyGovernor() { require(msg.sender == _governor(), "Only governor can execute"); _; } /** * @dev Modifier to allow function calls only from the Governance. * Governance is either Governor address or Governance address. */ modifier onlyGovernance() { require( msg.sender == _governor() || msg.sender == _governance(), "Only governance can execute" ); _; } /** * @dev Modifier to allow function calls only from the ProxyAdmin. */ modifier onlyProxyAdmin() { require( msg.sender == _proxyAdmin(), "Only ProxyAdmin can execute" ); _; } /** * @dev Modifier to allow function calls only from the Manager. */ modifier onlyManager() { require(msg.sender == _manager(), "Only manager can execute"); _; } /** * @dev Returns Governor address from the Nexus * @return Address of Governor Contract */ function _governor() internal view returns (address) { return nexus.governor(); } /** * @dev Returns Governance Module address from the Nexus * @return Address of the Governance (Phase 2) */ function _governance() internal view returns (address) { return nexus.getModule(KEY_GOVERNANCE); } /** * @dev Return Staking Module address from the Nexus * @return Address of the Staking Module contract */ function _staking() internal view returns (address) { return nexus.getModule(KEY_STAKING); } /** * @dev Return ProxyAdmin Module address from the Nexus * @return Address of the ProxyAdmin Module contract */ function _proxyAdmin() internal view returns (address) { return nexus.getModule(KEY_PROXY_ADMIN); } /** * @dev Return MetaToken Module address from the Nexus * @return Address of the MetaToken Module contract */ function _metaToken() internal view returns (address) { return nexus.getModule(KEY_META_TOKEN); } /** * @dev Return OracleHub Module address from the Nexus * @return Address of the OracleHub Module contract */ function _oracleHub() internal view returns (address) { return nexus.getModule(KEY_ORACLE_HUB); } /** * @dev Return Manager Module address from the Nexus * @return Address of the Manager Module contract */ function _manager() internal view returns (address) { return nexus.getModule(KEY_MANAGER); } /** * @dev Return SavingsManager Module address from the Nexus * @return Address of the SavingsManager Module contract */ function _savingsManager() internal view returns (address) { return nexus.getModule(KEY_SAVINGS_MANAGER); } /** * @dev Return Recollateraliser Module address from the Nexus * @return Address of the Recollateraliser Module contract (Phase 2) */ function _recollateraliser() internal view returns (address) { return nexus.getModule(KEY_RECOLLATERALISER); } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. */ 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. * * _Available since v2.4.0._ */ 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. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 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. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @title Proxy * @dev Implements delegation of calls to other contracts, with proper * forwarding of return values and bubbling of failures. * It defines a fallback function that delegates all calls to the address * returned by the abstract _implementation() internal function. */ contract Proxy { /** * @dev Fallback function. * Implemented entirely in `_fallback`. */ function () payable external { _fallback(); } /** * @return The Address of the implementation. */ function _implementation() internal view returns (address); /** * @dev Delegates execution to an implementation contract. * This is a low level function that doesn't return to its internal call site. * It will return to the external caller whatever the implementation returns. * @param implementation Address to delegate. */ function _delegate(address implementation) internal { assembly { // Copy msg.data. We take full control of memory in this inline assembly // block because it will not return to Solidity code. We overwrite the // Solidity scratch pad at memory position 0. calldatacopy(0, 0, calldatasize) // Call the implementation. // out and outsize are 0 because we don't know the size yet. let result := delegatecall(gas, implementation, 0, calldatasize, 0, 0) // Copy the returned data. returndatacopy(0, 0, returndatasize) switch result // delegatecall returns 0 on error. case 0 { revert(0, returndatasize) } default { return(0, returndatasize) } } } /** * @dev Function that is run as the first thing in the fallback function. * Can be redefined in derived contracts to add functionality. * Redefinitions must call super._willFallback(). */ function _willFallback() internal { } /** * @dev fallback implementation. * Extracted to enable manual triggering. */ function _fallback() internal { _willFallback(); _delegate(_implementation()); } } /** * Utility library of inline functions on addresses * * Source https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-solidity/v2.1.3/contracts/utils/Address.sol * This contract is copied here and renamed from the original to avoid clashes in the compiled artifacts * when the user imports a zos-lib contract (that transitively causes this contract to be compiled and added to the * build/artifacts folder) as well as the vanilla Address implementation from an openzeppelin version. */ library OpenZeppelinUpgradesAddress { /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param account address of the account to check * @return whether the target address is a contract */ function isContract(address account) internal view returns (bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } /** * @title BaseUpgradeabilityProxy * @dev This contract implements a proxy that allows to change the * implementation address to which it will delegate. * Such a change is called an implementation upgrade. */ contract BaseUpgradeabilityProxy is Proxy { /** * @dev Emitted when the implementation is upgraded. * @param implementation Address of the new implementation. */ event Upgraded(address indexed implementation); /** * @dev Storage slot with the address of the current implementation. * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is * validated in the constructor. */ bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; /** * @dev Returns the current implementation. * @return Address of the current implementation */ function _implementation() internal view returns (address impl) { bytes32 slot = IMPLEMENTATION_SLOT; assembly { impl := sload(slot) } } /** * @dev Upgrades the proxy to a new implementation. * @param newImplementation Address of the new implementation. */ function _upgradeTo(address newImplementation) internal { _setImplementation(newImplementation); emit Upgraded(newImplementation); } /** * @dev Sets the implementation address of the proxy. * @param newImplementation Address of the new implementation. */ function _setImplementation(address newImplementation) internal { require(OpenZeppelinUpgradesAddress.isContract(newImplementation), "Cannot set a proxy implementation to a non-contract address"); bytes32 slot = IMPLEMENTATION_SLOT; assembly { sstore(slot, newImplementation) } } } /** * @title UpgradeabilityProxy * @dev Extends BaseUpgradeabilityProxy with a constructor for initializing * implementation and init data. */ contract UpgradeabilityProxy is BaseUpgradeabilityProxy { /** * @dev Contract constructor. * @param _logic Address of the initial implementation. * @param _data Data to send as msg.data to the implementation to initialize the proxied contract. * It should include the signature and the parameters of the function to be called, as described in * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped. */ constructor(address _logic, bytes memory _data) public payable { assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)); _setImplementation(_logic); if(_data.length > 0) { (bool success,) = _logic.delegatecall(_data); require(success); } } } /** * @title BaseAdminUpgradeabilityProxy * @dev This contract combines an upgradeability proxy with an authorization * mechanism for administrative tasks. * All external functions in this contract must be guarded by the * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity * feature proposal that would enable this to be done automatically. */ contract BaseAdminUpgradeabilityProxy is BaseUpgradeabilityProxy { /** * @dev Emitted when the administration has been transferred. * @param previousAdmin Address of the previous admin. * @param newAdmin Address of the new admin. */ event AdminChanged(address previousAdmin, address newAdmin); /** * @dev Storage slot with the admin of the contract. * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is * validated in the constructor. */ bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; /** * @dev Modifier to check whether the `msg.sender` is the admin. * If it is, it will run the function. Otherwise, it will delegate the call * to the implementation. */ modifier ifAdmin() { if (msg.sender == _admin()) { _; } else { _fallback(); } } /** * @return The address of the proxy admin. */ function admin() external ifAdmin returns (address) { return _admin(); } /** * @return The address of the implementation. */ function implementation() external ifAdmin returns (address) { return _implementation(); } /** * @dev Changes the admin of the proxy. * Only the current admin can call this function. * @param newAdmin Address to transfer proxy administration to. */ function changeAdmin(address newAdmin) external ifAdmin { require(newAdmin != address(0), "Cannot change the admin of a proxy to the zero address"); emit AdminChanged(_admin(), newAdmin); _setAdmin(newAdmin); } /** * @dev Upgrade the backing implementation of the proxy. * Only the admin can call this function. * @param newImplementation Address of the new implementation. */ function upgradeTo(address newImplementation) external ifAdmin { _upgradeTo(newImplementation); } /** * @dev Upgrade the backing implementation of the proxy and call a function * on the new implementation. * This is useful to initialize the proxied contract. * @param newImplementation Address of the new implementation. * @param data Data to send as msg.data in the low level call. * It should include the signature and the parameters of the function to be called, as described in * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. */ function upgradeToAndCall(address newImplementation, bytes calldata data) payable external ifAdmin { _upgradeTo(newImplementation); (bool success,) = newImplementation.delegatecall(data); require(success); } /** * @return The admin slot. */ function _admin() internal view returns (address adm) { bytes32 slot = ADMIN_SLOT; assembly { adm := sload(slot) } } /** * @dev Sets the address of the proxy admin. * @param newAdmin Address of the new proxy admin. */ function _setAdmin(address newAdmin) internal { bytes32 slot = ADMIN_SLOT; assembly { sstore(slot, newAdmin) } } /** * @dev Only fall back when the sender is not the admin. */ function _willFallback() internal { require(msg.sender != _admin(), "Cannot call fallback function from the proxy admin"); super._willFallback(); } } /** * @title AdminUpgradeabilityProxy * @dev Extends from BaseAdminUpgradeabilityProxy with a constructor for * initializing the implementation, admin, and init data. */ contract AdminUpgradeabilityProxy is BaseAdminUpgradeabilityProxy, UpgradeabilityProxy { /** * Contract constructor. * @param _logic address of the initial implementation. * @param _admin Address of the proxy administrator. * @param _data Data to send as msg.data to the implementation to initialize the proxied contract. * It should include the signature and the parameters of the function to be called, as described in * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped. */ constructor(address _logic, address _admin, bytes memory _data) UpgradeabilityProxy(_logic, _data) public payable { assert(ADMIN_SLOT == bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1)); _setAdmin(_admin); } } /** * @title DelayedProxyAdmin * @author Stability Labs Pty. Ltd. * @notice Proxy admin contract to upgrade the upgradable contracts. The upgradable contracts * are transparent proxy contracts from OpenZeppelin-SDK. * @dev The contract has a delyed upgradability. The Governor can propose a new implementation * for a proxy contract. After 1 week of opt-out delay, upgrade request can be accepted * and upgrade of contract is performed. * Part of the code taken from OpenZeppelin-SDK's ProxyAdmin.sol */ contract DelayedProxyAdmin is Module { using SafeMath for uint256; event UpgradeProposed(address indexed proxy, address implementation, bytes data); event UpgradeCancelled(address indexed proxy); event Upgraded(address indexed proxy, address oldImpl, address newImpl, bytes data); // Request struct to store proposed upgrade requests struct Request{ address implementation; // New contract implementation address bytes data; // Data to call a function on new contract implementation uint256 timestamp; // Timestamp when upgrade request is proposed } // Opt-out upgrade delay uint256 public constant UPGRADE_DELAY = 1 weeks; // ProxyAddress => Request mapping(address => Request) public requests; /** * @dev Constructor * @param _nexus Nexus contract address */ constructor(address _nexus) public Module(_nexus) {} /** * @dev The Governor can propose a new contract implementation for a given proxy. * @param _proxy Proxy address which is to be upgraded * @param _implementation Contract address of new implementation * @param _data calldata to execute initialization function upon upgrade */ function proposeUpgrade( address _proxy, address _implementation, bytes calldata _data ) external onlyGovernor { require(_proxy != address(0), "Proxy address is zero"); require(_implementation != address(0), "Implementation address is zero"); require(requests[_proxy].implementation == address(0), "Upgrade already proposed"); validateProxy(_proxy, _implementation); Request storage request = requests[_proxy]; request.implementation = _implementation; request.data = _data; request.timestamp = now; emit UpgradeProposed(_proxy, _implementation, _data); } /** * @dev The Governor can cancel any existing upgrade request. * @param _proxy The proxy address of the existing request */ function cancelUpgrade(address _proxy) external onlyGovernor { require(_proxy != address(0), "Proxy address is zero"); require(requests[_proxy].implementation != address(0), "No request found"); delete requests[_proxy]; emit UpgradeCancelled(_proxy); } /** * @dev The Governor can accept upgrade request after opt-out delay over. The function is * `payable`, to forward ETH to initialize function call upon upgrade. * @param _proxy The address of the proxy */ function acceptUpgradeRequest(address payable _proxy) external payable onlyGovernor { // _proxy is payable, because AdminUpgradeabilityProxy has fallback function require(_proxy != address(0), "Proxy address is zero"); Request memory request = requests[_proxy]; require(_isDelayOver(request.timestamp), "Delay not over"); address newImpl = request.implementation; bytes memory data = request.data; address oldImpl = getProxyImplementation(_proxy); // Deleting before to avoid re-entrancy delete requests[_proxy]; if(data.length == 0) { require(msg.value == 0, "msg.value should be zero"); AdminUpgradeabilityProxy(_proxy).upgradeTo(newImpl); } else { AdminUpgradeabilityProxy(_proxy).upgradeToAndCall.value(msg.value)(newImpl, data); } emit Upgraded(_proxy, oldImpl, newImpl, data); } /** * @dev Checks that the opt-out delay is over * @param _timestamp Timestamp when upgrade requested * @return Returns `true` when upgrade delay is over, otherwise `false` */ function _isDelayOver(uint256 _timestamp) private view returns (bool) { if(_timestamp > 0 && now >= _timestamp.add(UPGRADE_DELAY)) return true; return false; } /** * @dev Checks the given proxy address is a valid proxy for this contract * @param _proxy The address of the proxy * @param _newImpl New implementation contract address */ function validateProxy(address _proxy, address _newImpl) internal view { // Proxy has an implementation address currentImpl = getProxyImplementation(_proxy); // Existing implementation must not be same as new one require(_newImpl != currentImpl, "Implementation must be different"); // This contract is the Proxy admin of the given _proxy address address admin = getProxyAdmin(_proxy); require(admin == address(this), "Proxy admin not matched"); } /** * @dev Returns the admin of a proxy. Only the admin can query it. * @param _proxy Contract address of Proxy * @return The address of the current admin of the proxy. */ function getProxyAdmin(address _proxy) public view returns (address) { // We need to manually run the static call since the getter cannot be flagged as view // bytes4(keccak256("admin()")) == 0xf851a440 (bool success, bytes memory returndata) = _proxy.staticcall(hex"f851a440"); require(success, "Call failed"); return abi.decode(returndata, (address)); } /** * @dev Returns the current implementation of a proxy. * This is needed because only the proxy admin can query it. * @param _proxy Contract address of Proxy * @return The address of the current implementation of the proxy. */ function getProxyImplementation(address _proxy) public view returns (address) { // We need to manually run the static call since the getter cannot be flagged as view // bytes4(keccak256("implementation()")) == 0x5c60da1b (bool success, bytes memory returndata) = _proxy.staticcall(hex"5c60da1b"); require(success, "Call failed"); return abi.decode(returndata, (address)); } // NOTICE: This can be removed. However, kept it for us to remind that we are not calling this fn. // We are not allowing this function call from Governor or Governance. /** * @dev Changes the admin of a proxy. * @param proxy Proxy to change admin. * @param newAdmin Address to transfer proxy administration to. */ // function changeProxyAdmin(AdminUpgradeabilityProxy proxy, address newAdmin) public onlyGovernor { // proxy.changeAdmin(newAdmin); // } }
Contract Security Audit
- Consensys Diligence - August 10th, 2020 - Security Audit Report
[{"inputs":[{"internalType":"address","name":"_nexus","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proxy","type":"address"}],"name":"UpgradeCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":false,"internalType":"address","name":"implementation","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"UpgradeProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":false,"internalType":"address","name":"oldImpl","type":"address"},{"indexed":false,"internalType":"address","name":"newImpl","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Upgraded","type":"event"},{"constant":true,"inputs":[],"name":"UPGRADE_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_proxy","type":"address"}],"name":"acceptUpgradeRequest","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_proxy","type":"address"}],"name":"cancelUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_proxy","type":"address"}],"name":"getProxyAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_proxy","type":"address"}],"name":"getProxyImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nexus","outputs":[{"internalType":"contract INexus","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_proxy","type":"address"},{"internalType":"address","name":"_implementation","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"proposeUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"requests","outputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5060405161117f38038061117f8339818101604052602081101561003357600080fd5b5051806001600160a01b038116610091576040805162461bcd60e51b815260206004820152601560248201527f4e65787573206973207a65726f20616464726573730000000000000000000000604482015290519081900360640190fd5b600080546001600160a01b039092166001600160a01b0319909216919091179055506110bd806100c26000396000f3fe60806040526004361061007b5760003560e01c8063a3f5c1d21161004e578063a3f5c1d2146101df578063c44fb8ec146101f4578063c72eeaba14610227578063f3b7dead146102bd5761007b565b8063204e1c7a1461008057806347fe8b1d146100cf57806374adad1d146100f6578063912f061f146101b7575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b03166102f0565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e46103ba565b60408051918252519081900360200190f35b34801561010257600080fd5b506101296004803603602081101561011957600080fd5b50356001600160a01b03166103c1565b604080516001600160a01b0385168152908101829052606060208083018281528551928401929092528451608084019186019080838360005b8381101561017a578181015183820152602001610162565b50505050905090810190601f1680156101a75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b6101dd600480360360208110156101cd57600080fd5b50356001600160a01b031661047a565b005b3480156101eb57600080fd5b506100b3610933565b34801561020057600080fd5b506101dd6004803603602081101561021757600080fd5b50356001600160a01b0316610942565b34801561023357600080fd5b506101dd6004803603606081101561024a57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561027e57600080fd5b82018360208201111561029057600080fd5b803590602001918460018302840111640100000000831117156102b257600080fd5b509092509050610ad3565b3480156102c957600080fd5b506100b3600480360360208110156102e057600080fd5b50356001600160a01b0316610d22565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d806000811461034f576040519150601f19603f3d011682016040523d82523d6000602084013e610354565b606091505b509150915081610399576040805162461bcd60e51b815260206004820152600b60248201526a10d85b1b0819985a5b195960aa1b604482015290519081900360640190fd5b8080602001905160208110156103ae57600080fd5b5051925050505b919050565b62093a8081565b600160208181526000928352604092839020805481840180548651600261010097831615979097026000190190911695909504601f81018590048502860185019096528585526001600160a01b039091169491939290919083018282801561046a5780601f1061043f5761010080835404028352916020019161046a565b820191906000526020600020905b81548152906001019060200180831161044d57829003601f168201915b5050505050908060020154905083565b610482610d81565b6001600160a01b0316336001600160a01b0316146104e3576040805162461bcd60e51b81526020600482015260196024820152784f6e6c7920676f7665726e6f722063616e206578656375746560381b604482015290519081900360640190fd5b6001600160a01b038116610536576040805162461bcd60e51b815260206004820152601560248201527450726f78792061646472657373206973207a65726f60581b604482015290519081900360640190fd5b61053e610f7f565b6001600160a01b0382811660009081526001602081815260409283902083516060810185528154909516855280830180548551600261010096831615969096026000190190911694909404601f8101849004840285018401909552848452909385830193928301828280156105f45780601f106105c9576101008083540402835291602001916105f4565b820191906000526020600020905b8154815290600101906020018083116105d757829003601f168201915b5050505050815260200160028201548152505090506106168160400151610e02565b610658576040805162461bcd60e51b815260206004820152600e60248201526d2232b630bc903737ba1037bb32b960911b604482015290519081900360640190fd5b80516020820151600061066a856102f0565b6001600160a01b0386166000908152600160208190526040822080546001600160a01b03191681559293506106a190830182610fa9565b506000600291909101558151610779573415610704576040805162461bcd60e51b815260206004820152601860248201527f6d73672e76616c75652073686f756c64206265207a65726f0000000000000000604482015290519081900360640190fd5b846001600160a01b0316633659cfe6846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561075c57600080fd5b505af1158015610770573d6000803e3d6000fd5b50505050610855565b846001600160a01b0316634f1ef2863485856040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107ef5781810151838201526020016107d7565b50505050905090810190601f16801561081c5780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b15801561083b57600080fd5b505af115801561084f573d6000803e3d6000fd5b50505050505b846001600160a01b03167f05c037a2fdcf968f427b340f3c2caf5c895089d972c63bbfd4046aae1e21cc1582858560405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156108f05781810151838201526020016108d8565b50505050905090810190601f16801561091d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a25050505050565b6000546001600160a01b031681565b61094a610d81565b6001600160a01b0316336001600160a01b0316146109ab576040805162461bcd60e51b81526020600482015260196024820152784f6e6c7920676f7665726e6f722063616e206578656375746560381b604482015290519081900360640190fd5b6001600160a01b0381166109fe576040805162461bcd60e51b815260206004820152601560248201527450726f78792061646472657373206973207a65726f60581b604482015290519081900360640190fd5b6001600160a01b0381811660009081526001602052604090205416610a5d576040805162461bcd60e51b815260206004820152601060248201526f139bc81c995c5d595cdd08199bdd5b9960821b604482015290519081900360640190fd5b6001600160a01b0381166000908152600160208190526040822080546001600160a01b03191681559190610a9390830182610fa9565b5060006002919091018190556040516001600160a01b038316917f3198dc80249fcfedbd0d06e1ff49a7695a51b006592328ce0b127cdeab77e93691a250565b610adb610d81565b6001600160a01b0316336001600160a01b031614610b3c576040805162461bcd60e51b81526020600482015260196024820152784f6e6c7920676f7665726e6f722063616e206578656375746560381b604482015290519081900360640190fd5b6001600160a01b038416610b8f576040805162461bcd60e51b815260206004820152601560248201527450726f78792061646472657373206973207a65726f60581b604482015290519081900360640190fd5b6001600160a01b038316610bea576040805162461bcd60e51b815260206004820152601e60248201527f496d706c656d656e746174696f6e2061646472657373206973207a65726f0000604482015290519081900360640190fd5b6001600160a01b038481166000908152600160205260409020541615610c57576040805162461bcd60e51b815260206004820152601860248201527f5570677261646520616c72656164792070726f706f7365640000000000000000604482015290519081900360640190fd5b610c618484610e3a565b6001600160a01b03848116600090815260016020819052604090912080546001600160a01b031916928616929092178255610c9f9082018484610ff0565b50426002820155604080516001600160a01b038681168252602082018381529282018590528716917f291fbf65f4d270fdeb17bef05df6c8d87b6ca5f0f4388d92766d0da38c932d199187918791879160608201848480828437600083820152604051601f909101601f1916909201829003965090945050505050a25050505050565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d806000811461034f576040519150601f19603f3d011682016040523d82523d6000602084013e610354565b60008060009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015610dd057600080fd5b505afa158015610de4573d6000803e3d6000fd5b505050506040513d6020811015610dfa57600080fd5b505190505b90565b60008082118015610e255750610e218262093a8063ffffffff610f1e16565b4210155b15610e32575060016103b5565b506000919050565b6000610e45836102f0565b9050806001600160a01b0316826001600160a01b03161415610eae576040805162461bcd60e51b815260206004820181905260248201527f496d706c656d656e746174696f6e206d75737420626520646966666572656e74604482015290519081900360640190fd5b6000610eb984610d22565b90506001600160a01b0381163014610f18576040805162461bcd60e51b815260206004820152601760248201527f50726f78792061646d696e206e6f74206d617463686564000000000000000000604482015290519081900360640190fd5b50505050565b600082820183811015610f78576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b50805460018160011615610100020316600290046000825580601f10610fcf5750610fed565b601f016020900490600052602060002090810190610fed919061106e565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106110315782800160ff1982351617855561105e565b8280016001018555821561105e579182015b8281111561105e578235825591602001919060010190611043565b5061106a92915061106e565b5090565b610dff91905b8082111561106a576000815560010161107456fea265627a7a723158205f112f40e322b3a4cfb52b09ba8b0941dd1d6f5f6555cc079b884f0ee7e36e7564736f6c63430005100032000000000000000000000000afce80b19a8ce13dec0739a1aab7a028d6845eb3
Deployed Bytecode
0x60806040526004361061007b5760003560e01c8063a3f5c1d21161004e578063a3f5c1d2146101df578063c44fb8ec146101f4578063c72eeaba14610227578063f3b7dead146102bd5761007b565b8063204e1c7a1461008057806347fe8b1d146100cf57806374adad1d146100f6578063912f061f146101b7575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b03166102f0565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e46103ba565b60408051918252519081900360200190f35b34801561010257600080fd5b506101296004803603602081101561011957600080fd5b50356001600160a01b03166103c1565b604080516001600160a01b0385168152908101829052606060208083018281528551928401929092528451608084019186019080838360005b8381101561017a578181015183820152602001610162565b50505050905090810190601f1680156101a75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b6101dd600480360360208110156101cd57600080fd5b50356001600160a01b031661047a565b005b3480156101eb57600080fd5b506100b3610933565b34801561020057600080fd5b506101dd6004803603602081101561021757600080fd5b50356001600160a01b0316610942565b34801561023357600080fd5b506101dd6004803603606081101561024a57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561027e57600080fd5b82018360208201111561029057600080fd5b803590602001918460018302840111640100000000831117156102b257600080fd5b509092509050610ad3565b3480156102c957600080fd5b506100b3600480360360208110156102e057600080fd5b50356001600160a01b0316610d22565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d806000811461034f576040519150601f19603f3d011682016040523d82523d6000602084013e610354565b606091505b509150915081610399576040805162461bcd60e51b815260206004820152600b60248201526a10d85b1b0819985a5b195960aa1b604482015290519081900360640190fd5b8080602001905160208110156103ae57600080fd5b5051925050505b919050565b62093a8081565b600160208181526000928352604092839020805481840180548651600261010097831615979097026000190190911695909504601f81018590048502860185019096528585526001600160a01b039091169491939290919083018282801561046a5780601f1061043f5761010080835404028352916020019161046a565b820191906000526020600020905b81548152906001019060200180831161044d57829003601f168201915b5050505050908060020154905083565b610482610d81565b6001600160a01b0316336001600160a01b0316146104e3576040805162461bcd60e51b81526020600482015260196024820152784f6e6c7920676f7665726e6f722063616e206578656375746560381b604482015290519081900360640190fd5b6001600160a01b038116610536576040805162461bcd60e51b815260206004820152601560248201527450726f78792061646472657373206973207a65726f60581b604482015290519081900360640190fd5b61053e610f7f565b6001600160a01b0382811660009081526001602081815260409283902083516060810185528154909516855280830180548551600261010096831615969096026000190190911694909404601f8101849004840285018401909552848452909385830193928301828280156105f45780601f106105c9576101008083540402835291602001916105f4565b820191906000526020600020905b8154815290600101906020018083116105d757829003601f168201915b5050505050815260200160028201548152505090506106168160400151610e02565b610658576040805162461bcd60e51b815260206004820152600e60248201526d2232b630bc903737ba1037bb32b960911b604482015290519081900360640190fd5b80516020820151600061066a856102f0565b6001600160a01b0386166000908152600160208190526040822080546001600160a01b03191681559293506106a190830182610fa9565b506000600291909101558151610779573415610704576040805162461bcd60e51b815260206004820152601860248201527f6d73672e76616c75652073686f756c64206265207a65726f0000000000000000604482015290519081900360640190fd5b846001600160a01b0316633659cfe6846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561075c57600080fd5b505af1158015610770573d6000803e3d6000fd5b50505050610855565b846001600160a01b0316634f1ef2863485856040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107ef5781810151838201526020016107d7565b50505050905090810190601f16801561081c5780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b15801561083b57600080fd5b505af115801561084f573d6000803e3d6000fd5b50505050505b846001600160a01b03167f05c037a2fdcf968f427b340f3c2caf5c895089d972c63bbfd4046aae1e21cc1582858560405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156108f05781810151838201526020016108d8565b50505050905090810190601f16801561091d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a25050505050565b6000546001600160a01b031681565b61094a610d81565b6001600160a01b0316336001600160a01b0316146109ab576040805162461bcd60e51b81526020600482015260196024820152784f6e6c7920676f7665726e6f722063616e206578656375746560381b604482015290519081900360640190fd5b6001600160a01b0381166109fe576040805162461bcd60e51b815260206004820152601560248201527450726f78792061646472657373206973207a65726f60581b604482015290519081900360640190fd5b6001600160a01b0381811660009081526001602052604090205416610a5d576040805162461bcd60e51b815260206004820152601060248201526f139bc81c995c5d595cdd08199bdd5b9960821b604482015290519081900360640190fd5b6001600160a01b0381166000908152600160208190526040822080546001600160a01b03191681559190610a9390830182610fa9565b5060006002919091018190556040516001600160a01b038316917f3198dc80249fcfedbd0d06e1ff49a7695a51b006592328ce0b127cdeab77e93691a250565b610adb610d81565b6001600160a01b0316336001600160a01b031614610b3c576040805162461bcd60e51b81526020600482015260196024820152784f6e6c7920676f7665726e6f722063616e206578656375746560381b604482015290519081900360640190fd5b6001600160a01b038416610b8f576040805162461bcd60e51b815260206004820152601560248201527450726f78792061646472657373206973207a65726f60581b604482015290519081900360640190fd5b6001600160a01b038316610bea576040805162461bcd60e51b815260206004820152601e60248201527f496d706c656d656e746174696f6e2061646472657373206973207a65726f0000604482015290519081900360640190fd5b6001600160a01b038481166000908152600160205260409020541615610c57576040805162461bcd60e51b815260206004820152601860248201527f5570677261646520616c72656164792070726f706f7365640000000000000000604482015290519081900360640190fd5b610c618484610e3a565b6001600160a01b03848116600090815260016020819052604090912080546001600160a01b031916928616929092178255610c9f9082018484610ff0565b50426002820155604080516001600160a01b038681168252602082018381529282018590528716917f291fbf65f4d270fdeb17bef05df6c8d87b6ca5f0f4388d92766d0da38c932d199187918791879160608201848480828437600083820152604051601f909101601f1916909201829003965090945050505050a25050505050565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d806000811461034f576040519150601f19603f3d011682016040523d82523d6000602084013e610354565b60008060009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015610dd057600080fd5b505afa158015610de4573d6000803e3d6000fd5b505050506040513d6020811015610dfa57600080fd5b505190505b90565b60008082118015610e255750610e218262093a8063ffffffff610f1e16565b4210155b15610e32575060016103b5565b506000919050565b6000610e45836102f0565b9050806001600160a01b0316826001600160a01b03161415610eae576040805162461bcd60e51b815260206004820181905260248201527f496d706c656d656e746174696f6e206d75737420626520646966666572656e74604482015290519081900360640190fd5b6000610eb984610d22565b90506001600160a01b0381163014610f18576040805162461bcd60e51b815260206004820152601760248201527f50726f78792061646d696e206e6f74206d617463686564000000000000000000604482015290519081900360640190fd5b50505050565b600082820183811015610f78576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b50805460018160011615610100020316600290046000825580601f10610fcf5750610fed565b601f016020900490600052602060002090810190610fed919061106e565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106110315782800160ff1982351617855561105e565b8280016001018555821561105e579182015b8281111561105e578235825591602001919060010190611043565b5061106a92915061106e565b5090565b610dff91905b8082111561106a576000815560010161107456fea265627a7a723158205f112f40e322b3a4cfb52b09ba8b0941dd1d6f5f6555cc079b884f0ee7e36e7564736f6c63430005100032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000afce80b19a8ce13dec0739a1aab7a028d6845eb3
-----Decoded View---------------
Arg [0] : _nexus (address): 0xAFcE80b19A8cE13DEc0739a1aaB7A028d6845Eb3
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000afce80b19a8ce13dec0739a1aab7a028d6845eb3
Deployed Bytecode Sourcemap
23059:6585:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28709:423;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28709:423:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28709:423:0;-1:-1:-1;;;;;28709:423:0;;:::i;:::-;;;;-1:-1:-1;;;;;28709:423:0;;;;;;;;;;;;;;23729:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23729:47:0;;;:::i;:::-;;;;;;;;;;;;;;;;23817:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23817:43:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23817:43:0;-1:-1:-1;;;;;23817:43:0;;:::i;:::-;;;;-1:-1:-1;;;;;23817:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;23817:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25729:955;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25729:955:0;-1:-1:-1;;;;;25729:955:0;;:::i;:::-;;2516:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2516:19:0;;;:::i;25187:293::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25187:293:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25187:293:0;-1:-1:-1;;;;;25187:293:0;;:::i;24330:700::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24330:700:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;24330:700:0;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;24330:700:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;24330:700:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;24330:700:0;;-1:-1:-1;24330:700:0;-1:-1:-1;24330:700:0;:::i;28032:405::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28032:405:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28032:405:0;-1:-1:-1;;;;;28032:405:0;;:::i;28709:423::-;28778:7;28958:12;28972:23;28999:6;-1:-1:-1;;;;;28999:17:0;:32;;;;-1:-1:-1;;;28999:32:0;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;28957:74:0;;;;29050:7;29042:31;;;;;-1:-1:-1;;;29042:31:0;;;;;;;;;;;;-1:-1:-1;;;29042:31:0;;;;;;;;;;;;;;;29102:10;29091:33;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29091:33:0;;-1:-1:-1;;;28709:423:0;;;;:::o;23729:47::-;23769:7;23729:47;:::o;23817:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23817:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23817:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25729:955::-;2991:11;:9;:11::i;:::-;-1:-1:-1;;;;;2977:25:0;:10;-1:-1:-1;;;;;2977:25:0;;2969:63;;;;;-1:-1:-1;;;2969:63:0;;;;;;;;;;;;-1:-1:-1;;;2969:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25918:20:0;;25910:54;;;;;-1:-1:-1;;;25910:54:0;;;;;;;;;;;;-1:-1:-1;;;25910:54:0;;;;;;;;;;;;;;;25975:22;;:::i;:::-;-1:-1:-1;;;;;26000:16:0;;;;;;;:8;:16;;;;;;;;;25975:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25975:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;26000:16;;25975:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26035:31;26048:7;:17;;;26035:12;:31::i;:::-;26027:58;;;;;-1:-1:-1;;;26027:58:0;;;;;;;;;;;;-1:-1:-1;;;26027:58:0;;;;;;;;;;;;;;;26116:22;;26169:12;;;;26098:15;26212:30;26235:6;26212:22;:30::i;:::-;-1:-1:-1;;;;;26311:16:0;;;;;;:8;:16;;;;;;;26304:23;;-1:-1:-1;;;;;;26304:23:0;;;26194:48;;-1:-1:-1;26304:23:0;;;;26311:16;26304:23;:::i;:::-;-1:-1:-1;26304:23:0;;;;;;;26343:11;;26340:279;;26384:9;:14;26376:51;;;;;-1:-1:-1;;;26376:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26467:6;-1:-1:-1;;;;;26442:42:0;;26485:7;26442:51;;;;;;;;;;;;;-1:-1:-1;;;;;26442:51:0;-1:-1:-1;;;;;26442:51:0;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26442:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26442:51:0;;;;26340:279;;;26551:6;-1:-1:-1;;;;;26526:49:0;;26582:9;26593:7;26602:4;26526:81;;;;;;;;;;;;;-1:-1:-1;;;;;26526:81:0;-1:-1:-1;;;;;26526:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;26526:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26526:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26526:81:0;;;;;26340:279;26645:6;-1:-1:-1;;;;;26636:40:0;;26653:7;26662;26671:4;26636:40;;;;-1:-1:-1;;;;;26636:40:0;-1:-1:-1;;;;;26636:40:0;;;;;;-1:-1:-1;;;;;26636:40:0;-1:-1:-1;;;;;26636:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;26636:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3043:1;;;;25729:955;:::o;2516:19::-;;;-1:-1:-1;;;;;2516:19:0;;:::o;25187:293::-;2991:11;:9;:11::i;:::-;-1:-1:-1;;;;;2977:25:0;:10;-1:-1:-1;;;;;2977:25:0;;2969:63;;;;;-1:-1:-1;;;2969:63:0;;;;;;;;;;;;-1:-1:-1;;;2969:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25267:20:0;;25259:54;;;;;-1:-1:-1;;;25259:54:0;;;;;;;;;;;;-1:-1:-1;;;25259:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25332:16:0;;;25375:1;25332:16;;;:8;:16;;;;;:31;;25324:74;;;;;-1:-1:-1;;;25324:74:0;;;;;;;;;;;;-1:-1:-1;;;25324:74:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25416:16:0;;;;;;:8;:16;;;;;;;25409:23;;-1:-1:-1;;;;;;25409:23:0;;;25416:16;;25409:23;;;;25416:16;25409:23;:::i;:::-;-1:-1:-1;25409:23:0;;;;;;;;;25448:24;;-1:-1:-1;;;;;25448:24:0;;;;;;25187:293;:::o;24330:700::-;2991:11;:9;:11::i;:::-;-1:-1:-1;;;;;2977:25:0;:10;-1:-1:-1;;;;;2977:25:0;;2969:63;;;;;-1:-1:-1;;;2969:63:0;;;;;;;;;;;;-1:-1:-1;;;2969:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24515:20:0;;24507:54;;;;;-1:-1:-1;;;24507:54:0;;;;;;;;;;;;-1:-1:-1;;;24507:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24580:29:0;;24572:72;;;;;-1:-1:-1;;;24572:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24663:16:0;;;24706:1;24663:16;;;:8;:16;;;;;:31;;:45;24655:82;;;;;-1:-1:-1;;;24655:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24748:38;24762:6;24770:15;24748:13;:38::i;:::-;-1:-1:-1;;;;;24825:16:0;;;24799:23;24825:16;;;:8;:16;;;;;;;;24852:40;;-1:-1:-1;;;;;;24852:40:0;;;;;;;;;;24903:20;;:12;;24918:5;;24903:20;:::i;:::-;-1:-1:-1;24954:3:0;24934:17;;;:23;24975:47;;;-1:-1:-1;;;;;24975:47:0;;;;;;;;;;;;;;;;;;;;;;24999:15;;25016:5;;;;24975:47;;;25016:5;;;;24975:47;1:33:-1;99:1;81:16;;;74:27;24975:47:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;24975:47:0;;;;-1:-1:-1;24975:47:0;;-1:-1:-1;;;;;24975:47:0;3043:1;24330:700;;;;:::o;28032:405::-;28092:7;28263:12;28277:23;28304:6;-1:-1:-1;;;;;28304:17:0;:32;;;;-1:-1:-1;;;28304:32:0;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;3994:95:0;4038:7;4065:5;;;;;;;;;-1:-1:-1;;;;;4065:5:0;-1:-1:-1;;;;;4065:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4065:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4065:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4065:16:0;;-1:-1:-1;3994:95:0;;:::o;26897:195::-;26961:4;26994:1;26981:10;:14;:54;;;;-1:-1:-1;27006:29:0;:10;23769:7;27006:29;:14;:29;:::i;:::-;26999:3;:36;;26981:54;26978:83;;;-1:-1:-1;27057:4:0;27050:11;;26978:83;-1:-1:-1;27079:5:0;26897:195;;;:::o;27304:519::-;27426:19;27448:30;27471:6;27448:22;:30::i;:::-;27426:52;;27575:11;-1:-1:-1;;;;;27563:23:0;:8;-1:-1:-1;;;;;27563:23:0;;;27555:68;;;;;-1:-1:-1;;;27555:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27709:13;27725:21;27739:6;27725:13;:21::i;:::-;27709:37;-1:-1:-1;;;;;;27765:22:0;;27782:4;27765:22;27757:58;;;;;-1:-1:-1;;;27757:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27304:519;;;;:::o;6523:181::-;6581:7;6613:5;;;6637:6;;;;6629:46;;;;;-1:-1:-1;;;6629:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6695:1;6523:181;-1:-1:-1;;;6523:181:0:o;23059:6585::-;;;;;;;;;;-1:-1:-1;;;;;23059:6585:0;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23059:6585:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23059:6585:0;;;-1:-1:-1;23059:6585:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://5f112f40e322b3a4cfb52b09ba8b0941dd1d6f5f6555cc079b884f0ee7e36e75
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.