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 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
10988740 | 1446 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
AdminUpgradeabilityProxy
Compiler Version
v0.6.8+commit.0bbfe453
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-04 */ // SPDX-License-Identifier: MIT pragma solidity 0.6.8; // /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // /** * @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. * * Credit: https://github.com/OpenZeppelin/openzeppelin-sdk/blob/master/packages/lib/contracts/upgradeability/Proxy.sol */ abstract contract Proxy { /** * @dev Receive function. * Implemented entirely in `_fallback`. */ receive () payable external { _fallback(); } /** * @dev Fallback function. * Implemented entirely in `_fallback`. */ fallback () payable external { _fallback(); } /** * @return The Address of the implementation. */ function _implementation() internal virtual 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 virtual { } /** * @dev fallback implementation. * Extracted to enable manual triggering. */ function _fallback() internal { _willFallback(); _delegate(_implementation()); } } // /** * @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. * * Credit: https://github.com/OpenZeppelin/openzeppelin-sdk/blob/master/packages/lib/contracts/upgradeability/BaseUpgradeabilityProxy.sol */ 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 impl Address of the current implementation */ function _implementation() internal override view returns (address impl) { bytes32 slot = IMPLEMENTATION_SLOT; assembly { impl := sload(slot) } } /** * @dev Sets the implementation address of the proxy. * @param newImplementation Address of the new implementation. */ function _setImplementation(address newImplementation) internal { require( Address.isContract(newImplementation), "Implementation not set" ); bytes32 slot = IMPLEMENTATION_SLOT; assembly { sstore(slot, newImplementation) } emit Upgraded(newImplementation); } } // /** * @title AdminUpgradeabilityProxy * @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. * Credit: https://github.com/OpenZeppelin/openzeppelin-sdk/blob/master/packages/lib/contracts/upgradeability/BaseAdminUpgradeabilityProxy.sol */ contract AdminUpgradeabilityProxy 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; /** * Contract constructor. * @param _logic address of the initial implementation. * @param _admin Address of the proxy administrator. * 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) public payable { assert(ADMIN_SLOT == bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1)); assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1)); _setImplementation(_logic); _setAdmin(_admin); } /** * @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 { 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 changeImplementation(address newImplementation) external ifAdmin { _setImplementation(newImplementation); } /** * @return adm 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) } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"_admin","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"changeImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526040516106323803806106328339818101604052604081101561002657600080fd5b508051602090910151604080517f656970313936372e70726f78792e61646d696e00000000000000000000000000815290519081900360130190206000805160206105f28339815191526000199091011461007d57fe5b604080517f656970313936372e70726f78792e696d706c656d656e746174696f6e000000008152905190819003601c019020600080516020610612833981519152600019909101146100cb57fe5b6100dd826001600160e01b036100f616565b6100ef816001600160e01b036101a416565b50506101f2565b610109816101b660201b6102371760201c565b61015a576040805162461bcd60e51b815260206004820152601660248201527f496d706c656d656e746174696f6e206e6f742073657400000000000000000000604482015290519081900360640190fd5b6000805160206106128339815191528181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000805160206105f283398151915255565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906101ea57508115155b949350505050565b6103f1806102016000396000f3fe6080604052600436106100435760003560e01c806317a68dd81461005a5780635c60da1b1461008d5780638f283970146100be578063f851a440146100f157610052565b3661005257610050610106565b005b610050610106565b34801561006657600080fd5b506100506004803603602081101561007d57600080fd5b50356001600160a01b0316610120565b34801561009957600080fd5b506100a261015a565b604080516001600160a01b039092168252519081900360200190f35b3480156100ca57600080fd5b50610050600480360360208110156100e157600080fd5b50356001600160a01b0316610197565b3480156100fd57600080fd5b506100a261020c565b61010e61011e565b61011e610119610273565b610298565b565b6101286102bc565b6001600160a01b0316336001600160a01b0316141561014f5761014a816102e1565b610157565b610157610106565b50565b60006101646102bc565b6001600160a01b0316336001600160a01b0316141561018c57610185610273565b9050610194565b610194610106565b90565b61019f6102bc565b6001600160a01b0316336001600160a01b0316141561014f577f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6101e16102bc565b604080516001600160a01b03928316815291841660208301528051918290030190a161014a81610397565b60006102166102bc565b6001600160a01b0316336001600160a01b0316141561018c576101856102bc565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061026b57508115155b949350505050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e8080156102b7573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6102ea81610237565b61033b576040805162461bcd60e51b815260206004820152601660248201527f496d706c656d656e746174696f6e206e6f742073657400000000000000000000604482015290519081900360640190fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035556fea2646970667358221220b05794efb34ed3573a1cd849d7708118c953609dfa210dac3dcfeef5e82fd4e664736f6c63430006080033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc000000000000000000000000cb6ead646878f84dc603e76605f970b83b9272b100000000000000000000000047016545d9e196095324f37b6c5736859c8baf5a
Deployed Bytecode
0x6080604052600436106100435760003560e01c806317a68dd81461005a5780635c60da1b1461008d5780638f283970146100be578063f851a440146100f157610052565b3661005257610050610106565b005b610050610106565b34801561006657600080fd5b506100506004803603602081101561007d57600080fd5b50356001600160a01b0316610120565b34801561009957600080fd5b506100a261015a565b604080516001600160a01b039092168252519081900360200190f35b3480156100ca57600080fd5b50610050600480360360208110156100e157600080fd5b50356001600160a01b0316610197565b3480156100fd57600080fd5b506100a261020c565b61010e61011e565b61011e610119610273565b610298565b565b6101286102bc565b6001600160a01b0316336001600160a01b0316141561014f5761014a816102e1565b610157565b610157610106565b50565b60006101646102bc565b6001600160a01b0316336001600160a01b0316141561018c57610185610273565b9050610194565b610194610106565b90565b61019f6102bc565b6001600160a01b0316336001600160a01b0316141561014f577f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6101e16102bc565b604080516001600160a01b03928316815291841660208301528051918290030190a161014a81610397565b60006102166102bc565b6001600160a01b0316336001600160a01b0316141561018c576101856102bc565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061026b57508115155b949350505050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e8080156102b7573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6102ea81610237565b61033b576040805162461bcd60e51b815260206004820152601660248201527f496d706c656d656e746174696f6e206e6f742073657400000000000000000000604482015290519081900360640190fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035556fea2646970667358221220b05794efb34ed3573a1cd849d7708118c953609dfa210dac3dcfeef5e82fd4e664736f6c63430006080033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cb6ead646878f84dc603e76605f970b83b9272b100000000000000000000000047016545d9e196095324f37b6c5736859c8baf5a
-----Decoded View---------------
Arg [0] : _logic (address): 0xcB6EAD646878f84dC603E76605f970b83b9272b1
Arg [1] : _admin (address): 0x47016545d9E196095324F37b6c5736859C8bAF5A
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000cb6ead646878f84dc603e76605f970b83b9272b1
Arg [1] : 00000000000000000000000047016545d9e196095324f37b6c5736859c8baf5a
Deployed Bytecode Sourcemap
10913:3114:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6805:11;:9;:11::i;:::-;10913:3114;;6951:11;:9;:11::i;13444:124::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13444:124:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13444:124:0;-1:-1:-1;;;;;13444:124:0;;:::i;12840:98::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12840:98:0;;;:::i;:::-;;;;-1:-1:-1;;;;;12840:98:0;;;;;;;;;;;;;;13121:132;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13121:132:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13121:132:0;-1:-1:-1;;;;;13121:132:0;;:::i;12691:80::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12691:80:0;;;:::i;8525:93::-;8562:15;:13;:15::i;:::-;8584:28;8594:17;:15;:17::i;:::-;8584:9;:28::i;:::-;8525:93::o;13444:124::-;12558:8;:6;:8::i;:::-;-1:-1:-1;;;;;12544:22:0;:10;-1:-1:-1;;;;;12544:22:0;;12540:80;;;13525:37:::1;13544:17;13525:18;:37::i;:::-;12540:80:::0;;;12601:11;:9;:11::i;:::-;13444:124;:::o;12840:98::-;12892:7;12558:8;:6;:8::i;:::-;-1:-1:-1;;;;;12544:22:0;:10;-1:-1:-1;;;;;12544:22:0;;12540:80;;;12915:17:::1;:15;:17::i;:::-;12908:24;;12540:80:::0;;;12601:11;:9;:11::i;:::-;12840:98;:::o;13121:132::-;12558:8;:6;:8::i;:::-;-1:-1:-1;;;;;12544:22:0;:10;-1:-1:-1;;;;;12544:22:0;;12540:80;;;13189:32:::1;13202:8;:6;:8::i;:::-;13189:32;::::0;;-1:-1:-1;;;;;13189:32:0;;::::1;::::0;;;;::::1;;::::0;::::1;::::0;;;;;;;;;::::1;13228:19;13238:8;13228:9;:19::i;12691:80::-:0;12734:7;12558:8;:6;:8::i;:::-;-1:-1:-1;;;;;12544:22:0;:10;-1:-1:-1;;;;;12544:22:0;;12540:80;;;12757:8:::1;:6;:8::i;747:619::-:0;807:4;1275:20;;1118:66;1315:23;;;;;;:42;;-1:-1:-1;1342:15:0;;;1315:42;1307:51;747:619;-1:-1:-1;;;;747:619:0:o;9693:190::-;9498:66;9854:11;;9831:45::o;7398:762::-;7705:14;7702:1;7699;7686:34;7905:1;7902;7886:14;7883:1;7867:14;7860:5;7847:60;7972:16;7969:1;7966;7951:38;8006:6;8063:38;;;;8129:16;8126:1;8119:27;8063:38;8082:16;8079:1;8072:27;13622:141;11460:66;13740:11;;13724:34::o;10030:360::-;10127:37;10146:17;10127:18;:37::i;:::-;10105:109;;;;;-1:-1:-1;;;10105:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9498:66;10298:31;;;10355:27;;-1:-1:-1;;;;;10355:27:0;;;;;10227:12;;10355:27;10030:360;;:::o;13885:139::-;11460:66;13990:22;13981:38::o
Swarm Source
ipfs://b05794efb34ed3573a1cd849d7708118c953609dfa210dac3dcfeef5e82fd4e6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 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.