Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0xAFFCDd96531bCd66faED95FC61e443D08F79eFEf
Balance 0 ETH
Nonce 1
Code Size 1753 bytes
Last Active
Indexed Transactions 29 (10,702,50410,733,363)
Gas Used (indexed) 611,026
External Etherscan · Sourcify

Contract Bytecode

1753 bytes
0x60806040526004361061006c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633659cfe681146100765780634f1ef286146100a45780635c60da1b146100d15780638f2839701461010f578063f851a4401461013d575b610074610152565b005b34801561008257600080fd5b5061007473ffffffffffffffffffffffffffffffffffffffff6004351661016c565b6100746004803573ffffffffffffffffffffffffffffffffffffffff1690602480359081019101356101c0565b3480156100dd57600080fd5b506100e661025f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561011b57600080fd5b5061007473ffffffffffffffffffffffffffffffffffffffff600435166102b6565b34801561014957600080fd5b506100e66103fc565b61015a610441565b61016a6101656104fb565b610520565b565b610174610544565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101b5576101b081610569565b6101bd565b6101bd610152565b50565b6101c8610544565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102525761020483610569565b3073ffffffffffffffffffffffffffffffffffffffff163483836040518083838082843782019150509250505060006040518083038185875af192505050151561024d57600080fd5b61025a565b61025a610152565b505050565b6000610269610544565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102ab576102a46104fb565b90506102b3565b6102b3610152565b90565b6102be610544565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101b55773ffffffffffffffffffffffffffffffffffffffff8116151561039b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60448201527f787920746f20746865207a65726f206164647265737300000000000000000000606482015290519081900360840190fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103c4610544565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301528051918290030190a16101b0816105be565b6000610406610544565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102ab576102a4610544565b610449610544565b73ffffffffffffffffffffffffffffffffffffffff163314156104f357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015290519081900360840190fd5b61016a61016a565b7f17a1a1520654e435f06928e17f36680bf83a0dd9ed240ed37d78f8289a559c705490565b3660008037600080366000845af43d6000803e80801561053f573d6000f35b3d6000fd5b7f0d28943014d3bfed6af9cab5e6024c23fa2da10f7a6373bcd56c37313c24d93a5490565b610572816105e2565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9181900360200190a150565b7f0d28943014d3bfed6af9cab5e6024c23fa2da10f7a6373bcd56c37313c24d93a55565b60006105ed826106a5565b151561068057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015290519081900360840190fd5b507f17a1a1520654e435f06928e17f36680bf83a0dd9ed240ed37d78f8289a559c7055565b6000903b11905600a165627a7a723058200a1254f5499f71df0d106c57a820b5f02ac2470f6f5aeeff0bcc06cb68730a390029

Verified Source Code Partial Match

Compiler: v0.4.24+commit.e67f0147 EVM: byzantium Optimization: Yes (2000 runs)
Proxy.sol 69 lines
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());
    }
}
Address.sol 29 lines
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;
    }
}
UpgradeabilityProxy.sol 73 lines
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)
        }
    }
}
AdminUpgradeabilityProxy.sol 133 lines
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();
    }
}

Read Contract

admin 0xf851a440 → address
implementation 0x5c60da1b → address

Write Contract 3 functions

These functions modify contract state and require a wallet transaction to execute.

changeAdmin 0x8f283970
address newAdmin
upgradeTo 0x3659cfe6
address newImplementation
upgradeToAndCall 0x4f1ef286
address newImplementation
bytes data

Recent Transactions

CSV View All 29 Transactions →
|
Hash Method Block Age From/To Value Txn Fee Type
0x2f31347b...74ba59 transfer 10,733,363 IN 0xE408114a...b66C 0 ETH 0.00356418 ETH Legacy
0x3a90e307...b189f3 transfer 10,733,110 IN 0x2C7f2a6C...3041 0 ETH 0.00243864 ETH Legacy
0x76e49b03...e3fcb6 transfer 10,732,884 IN 0x2B5634C4...8258 0 ETH 0.00408983 ETH Legacy
0x6bf36ff8...63a9d0 transfer 10,732,810 IN 0xE408114a...b66C 0 ETH 0.00333792 ETH Legacy
0xf28fe05c...3d7557 transfer 10,732,748 IN 0xe81dD19E...2406 0 ETH 0.00333864 ETH Legacy
0xd49fef79...1c1cb1 transfer 10,731,894 IN 0x7b39D8cd...7b43 0 ETH 0.00223608 ETH Legacy
0x5a2e467b...1dc96c transfer 10,731,378 IN 0x2B5634C4...8258 0 ETH 0.00940105 ETH Legacy
0xdbc55caa...ab1282 transfer 10,730,014 IN 0x2504F740...9652 0 ETH 0.00851537 ETH Legacy
0x9d9967f0...11b19c 0xf6030aeb 10,730,009 IN 0x124Fcba2...660c 0 ETH 0.02069417 ETH Legacy
0xf4844b3c...04f68e 0xf6030aeb 10,702,504 IN 0x124Fcba2...660c 0 ETH 0.02627107 ETH Legacy