Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Gold
Overview
Max Total Supply
114.96707 PMGT
Holders
211 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 5 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
AdminUpgradeabilityProxy
Compiler Version
v0.4.24+commit.e67f0147
Contract Source Code (Solidity Multiple files format)
pragma solidity ^0.4.24; import './UpgradeabilityProxy.sol'; /** * @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. */ contract AdminUpgradeabilityProxy is UpgradeabilityProxy { /** * @dev Event emitted whenever 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 "infinigold.proxy.admin", and is validated in the constructor. */ bytes32 private constant ADMIN_SLOT = 0x0d28943014d3bfed6af9cab5e6024c23fa2da10f7a6373bcd56c37313c24d93a; /** * @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(); } } /** * @dev Contract constructor. * @dev It sets the `msg.sender` as the proxy administrator. * * @param _implementation address of the initial implementation. */ constructor(address _implementation) UpgradeabilityProxy(_implementation) public { assert(ADMIN_SLOT == keccak256("infinigold.proxy.admin")); _setAdmin(msg.sender); } /** * @return The address of the proxy admin. */ function admin() external view ifAdmin returns (address) { return _admin(); } /** * @return The address of the implementation. */ function implementation() external view 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. * * The given `data` should include the signature and parameters of the function to be called. * See https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding * * @param newImplementation Address of the new implementation. * @param data Data to send as msg.data in the low level call. */ function upgradeToAndCall(address newImplementation, bytes data) payable external ifAdmin { _upgradeTo(newImplementation); require(address(this).call.value(msg.value)(data)); } /** * @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(); } }
pragma solidity ^0.4.24; /** * @title Address * * @dev Utility library of inline functions on addresses. */ library Address { /** * @dev Returns whether the target address is a contract. * 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 The address of the account to check * @return True if the target address is a contract, otherwise false */ 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; } }
pragma solidity ^0.4.24; /** * @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. // The 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()); } }
pragma solidity ^0.4.24; import './Proxy.sol'; import './Address.sol'; /** * @title UpgradeabilityProxy * * @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 UpgradeabilityProxy is Proxy { /** * @dev Emitted when the implementation is upgraded. * * @param implementation Address of the new implementation. */ event Upgraded(address implementation); /** * @dev Storage slot with the address of the current implementation. * This is the keccak-256 hash of "infinigold.proxy.implementation", and is validated in the constructor. */ bytes32 private constant IMPLEMENTATION_SLOT = 0x17a1a1520654e435f06928e17f36680bf83a0dd9ed240ed37d78f8289a559c70; /** * @dev Contract constructor. * * @param _implementation Address of the initial implementation. */ constructor(address _implementation) public { assert(IMPLEMENTATION_SLOT == keccak256("infinigold.proxy.implementation")); _setImplementation(_implementation); } /** * @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) private { require(Address.isContract(newImplementation), "Cannot set a proxy implementation to a non-contract address"); bytes32 slot = IMPLEMENTATION_SLOT; assembly { sstore(slot, newImplementation) } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newImplementation","type":"address"},{"name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_implementation","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"previousAdmin","type":"address"},{"indexed":false,"name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"implementation","type":"address"}],"name":"Upgraded","type":"event"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516020806108de83398101604081815291517f696e66696e69676f6c642e70726f78792e696d706c656d656e746174696f6e008252915190819003601f01902081906000805160206108be8339815191521461006b57fe5b61007d816401000000006100de810204565b50604080517f696e66696e69676f6c642e70726f78792e61646d696e000000000000000000008152905190819003601601902060008051602061089e833981519152146100c657fe5b6100d83364010000000061019c810204565b506101b6565b60006100f6826401000000006106a56101ae82021704565b151561018957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015290519081900360840190fd5b506000805160206108be83398151915255565b60008051602061089e83398151915255565b6000903b1190565b6106d9806101c56000396000f30060806040526004361061006c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633659cfe681146100765780634f1ef286146100a45780635c60da1b146100d15780638f2839701461010f578063f851a4401461013d575b610074610152565b005b34801561008257600080fd5b5061007473ffffffffffffffffffffffffffffffffffffffff6004351661016c565b6100746004803573ffffffffffffffffffffffffffffffffffffffff1690602480359081019101356101c0565b3480156100dd57600080fd5b506100e661025f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561011b57600080fd5b5061007473ffffffffffffffffffffffffffffffffffffffff600435166102b6565b34801561014957600080fd5b506100e66103fc565b61015a610441565b61016a6101656104fb565b610520565b565b610174610544565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101b5576101b081610569565b6101bd565b6101bd610152565b50565b6101c8610544565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102525761020483610569565b3073ffffffffffffffffffffffffffffffffffffffff163483836040518083838082843782019150509250505060006040518083038185875af192505050151561024d57600080fd5b61025a565b61025a610152565b505050565b6000610269610544565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102ab576102a46104fb565b90506102b3565b6102b3610152565b90565b6102be610544565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101b55773ffffffffffffffffffffffffffffffffffffffff8116151561039b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60448201527f787920746f20746865207a65726f206164647265737300000000000000000000606482015290519081900360840190fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103c4610544565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301528051918290030190a16101b0816105be565b6000610406610544565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102ab576102a4610544565b610449610544565b73ffffffffffffffffffffffffffffffffffffffff163314156104f357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015290519081900360840190fd5b61016a61016a565b7f17a1a1520654e435f06928e17f36680bf83a0dd9ed240ed37d78f8289a559c705490565b3660008037600080366000845af43d6000803e80801561053f573d6000f35b3d6000fd5b7f0d28943014d3bfed6af9cab5e6024c23fa2da10f7a6373bcd56c37313c24d93a5490565b610572816105e2565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9181900360200190a150565b7f0d28943014d3bfed6af9cab5e6024c23fa2da10f7a6373bcd56c37313c24d93a55565b60006105ed826106a5565b151561068057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015290519081900360840190fd5b507f17a1a1520654e435f06928e17f36680bf83a0dd9ed240ed37d78f8289a559c7055565b6000903b11905600a165627a7a723058200a1254f5499f71df0d106c57a820b5f02ac2470f6f5aeeff0bcc06cb68730a3900290d28943014d3bfed6af9cab5e6024c23fa2da10f7a6373bcd56c37313c24d93a17a1a1520654e435f06928e17f36680bf83a0dd9ed240ed37d78f8289a559c700000000000000000000000004dd653e7db14bb7e509861eb2b8888773798aaad
Deployed Bytecode
0x60806040526004361061006c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633659cfe681146100765780634f1ef286146100a45780635c60da1b146100d15780638f2839701461010f578063f851a4401461013d575b610074610152565b005b34801561008257600080fd5b5061007473ffffffffffffffffffffffffffffffffffffffff6004351661016c565b6100746004803573ffffffffffffffffffffffffffffffffffffffff1690602480359081019101356101c0565b3480156100dd57600080fd5b506100e661025f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561011b57600080fd5b5061007473ffffffffffffffffffffffffffffffffffffffff600435166102b6565b34801561014957600080fd5b506100e66103fc565b61015a610441565b61016a6101656104fb565b610520565b565b610174610544565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101b5576101b081610569565b6101bd565b6101bd610152565b50565b6101c8610544565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102525761020483610569565b3073ffffffffffffffffffffffffffffffffffffffff163483836040518083838082843782019150509250505060006040518083038185875af192505050151561024d57600080fd5b61025a565b61025a610152565b505050565b6000610269610544565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102ab576102a46104fb565b90506102b3565b6102b3610152565b90565b6102be610544565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101b55773ffffffffffffffffffffffffffffffffffffffff8116151561039b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60448201527f787920746f20746865207a65726f206164647265737300000000000000000000606482015290519081900360840190fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103c4610544565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301528051918290030190a16101b0816105be565b6000610406610544565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102ab576102a4610544565b610449610544565b73ffffffffffffffffffffffffffffffffffffffff163314156104f357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015290519081900360840190fd5b61016a61016a565b7f17a1a1520654e435f06928e17f36680bf83a0dd9ed240ed37d78f8289a559c705490565b3660008037600080366000845af43d6000803e80801561053f573d6000f35b3d6000fd5b7f0d28943014d3bfed6af9cab5e6024c23fa2da10f7a6373bcd56c37313c24d93a5490565b610572816105e2565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9181900360200190a150565b7f0d28943014d3bfed6af9cab5e6024c23fa2da10f7a6373bcd56c37313c24d93a55565b60006105ed826106a5565b151561068057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015290519081900360840190fd5b507f17a1a1520654e435f06928e17f36680bf83a0dd9ed240ed37d78f8289a559c7055565b6000903b11905600a165627a7a723058200a1254f5499f71df0d106c57a820b5f02ac2470f6f5aeeff0bcc06cb68730a390029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004dd653e7db14bb7e509861eb2b8888773798aaad
-----Decoded View---------------
Arg [0] : _implementation (address): 0x4dd653E7Db14BB7e509861eb2b8888773798AaAd
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004dd653e7db14bb7e509861eb2b8888773798aaad
Deployed Bytecode Sourcemap
419:3897:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;473:11:2;:9;:11::i;:::-;419:3897:1;2723:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2723:109:1;;;;;;;3373:196;;;;;;;;;;;;;;;;;;;1980:107;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1980:107:1;;;;;;;;;;;;;;;;;;;;;;;2282:238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2282:238:1;;;;;;;1819:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1819:89:1;;;;2119:100:2;2159:15;:13;:15::i;:::-;2184:28;2194:17;:15;:17::i;:::-;2184:9;:28::i;:::-;2119:100::o;2723:109:1:-;1282:8;:6;:8::i;:::-;1268:22;;:10;:22;;;1264:96;;;2796:29;2807:17;2796:10;:29::i;:::-;1264:96;;;1338:11;:9;:11::i;:::-;2723:109;:::o;3373:196::-;1282:8;:6;:8::i;:::-;1268:22;;:10;:22;;;1264:96;;;3473:29;3484:17;3473:10;:29::i;:::-;3528:4;3520:18;;3545:9;3556:4;;3520:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3512:50;;;;;;;;1264:96;;;1338:11;:9;:11::i;:::-;3373:196;;;:::o;1980:107::-;2037:7;1282:8;:6;:8::i;:::-;1268:22;;:10;:22;;;1264:96;;;2063:17;:15;:17::i;:::-;2056:24;;1264:96;;;1338:11;:9;:11::i;:::-;1980:107;:::o;2282:238::-;1282:8;:6;:8::i;:::-;1268:22;;:10;:22;;;1264:96;;;2356:22;;;;;2348:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2452:32;2465:8;:6;:8::i;:::-;2452:32;;;;;;;;;;;;;;;;;;;;;;;;;2494:19;2504:8;2494:9;:19::i;1819:89::-;1867:7;1282:8;:6;:8::i;:::-;1268:22;;:10;:22;;;1264:96;;;1893:8;:6;:8::i;4147:167::-;4213:8;:6;:8::i;:::-;4199:22;;:10;:22;;4191:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4286:21;:19;:21::i;1275:176:3:-;764:66;1424:11;;1402:43::o;929:823:2:-;1259:12;1256:1;1253;1240:32;1471:1;1468;1454:12;1451:1;1435:14;1430:3;1417:56;1547:14;1544:1;1541;1526:36;1583:6;1650:36;;;;1719:14;1716:1;1709:25;1650:36;1669:14;1666:1;1659:25;3622:156:1;974:66;3751:11;;3730:42::o;1603:152:3:-;1669:37;1688:17;1669:18;:37::i;:::-;1721:27;;;;;;;;;;;;;;;;;;;1603:152;:::o;3911:153:1:-;974:66;4026:22;4012:46::o;1909:308:3:-;2102:12;1990:37;2009:17;1990:18;:37::i;:::-;1982:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;764:66:3;2170:31;2156:55::o;520:616:0:-;580:4;1083:20;;1121:8;;520:616::o
Swarm Source
bzzr://0a1254f5499f71df0d106c57a820b5f02ac2470f6f5aeeff0bcc06cb68730a39
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.