ETH Price: $3,393.31 (-1.25%)
Gas: 2 Gwei

Contract

0x6d596FdFD3381eBB5eCd526eBcAec8cC2BA019fF
 

Overview

ETH Balance

0.01939 ETH

Eth Value

$65.80 (@ $3,393.31/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Repay201937562024-06-29 0:26:3512 hrs ago1719620795IN
0x6d596FdF...C2BA019fF
0 ETH0.000288111.85853579
Repay201836812024-06-27 14:40:1146 hrs ago1719499211IN
0x6d596FdF...C2BA019fF
0 ETH0.002078813.40850274
Supply201829502024-06-27 12:13:112 days ago1719490391IN
0x6d596FdF...C2BA019fF
0 ETH0.001210637.95202456
Supply201829482024-06-27 12:12:472 days ago1719490367IN
0x6d596FdF...C2BA019fF
0 ETH0.001387538.44305077
Repay201828852024-06-27 12:00:112 days ago1719489611IN
0x6d596FdF...C2BA019fF
0 ETH0.000672564.07696287
Supply201818232024-06-27 8:26:592 days ago1719476819IN
0x6d596FdF...C2BA019fF
0 ETH0.000695364.17951844
Repay201813362024-06-27 6:48:592 days ago1719470939IN
0x6d596FdF...C2BA019fF
0 ETH0.000728194.41353793
Supply201805822024-06-27 4:17:352 days ago1719461855IN
0x6d596FdF...C2BA019fF
0 ETH0.00073955.21303654
Repay201802662024-06-27 3:14:112 days ago1719458051IN
0x6d596FdF...C2BA019fF
0 ETH0.001047616.82998716
Repay201802502024-06-27 3:10:592 days ago1719457859IN
0x6d596FdF...C2BA019fF
0 ETH0.000879275.93777931
Supply ERC721201792902024-06-26 23:58:112 days ago1719446291IN
0x6d596FdF...C2BA019fF
0 ETH0.000808362.61561186
Repay201790542024-06-26 23:10:472 days ago1719443447IN
0x6d596FdF...C2BA019fF
0 ETH0.000785833.61860382
Repay201768382024-06-26 15:43:592 days ago1719416639IN
0x6d596FdF...C2BA019fF
0 ETH0.002121912.46193792
Repay201752562024-06-26 10:26:233 days ago1719397583IN
0x6d596FdF...C2BA019fF
0 ETH0.000575663.88779934
Repay201746032024-06-26 8:15:233 days ago1719389723IN
0x6d596FdF...C2BA019fF
0 ETH0.000582912.68404615
Repay201745802024-06-26 8:10:353 days ago1719389435IN
0x6d596FdF...C2BA019fF
0 ETH0.000470332.16417274
Repay201724472024-06-26 1:01:593 days ago1719363719IN
0x6d596FdF...C2BA019fF
0 ETH0.000443832.04246647
Repay201670142024-06-25 6:49:594 days ago1719298199IN
0x6d596FdF...C2BA019fF
0 ETH0.000578593.50732572
Claim Paired Ape...201668282024-06-25 6:12:234 days ago1719295943IN
0x6d596FdF...C2BA019fF
0 ETH0.010203233
Claim Ape And Co...201668242024-06-25 6:11:354 days ago1719295895IN
0x6d596FdF...C2BA019fF
0 ETH0.032756773
Claim Ape And Co...201668222024-06-25 6:11:114 days ago1719295871IN
0x6d596FdF...C2BA019fF
0 ETH0.012834283
Claim Ape And Co...201668192024-06-25 6:10:354 days ago1719295835IN
0x6d596FdF...C2BA019fF
0 ETH0.003847093
Claim Ape And Co...201668162024-06-25 6:09:594 days ago1719295799IN
0x6d596FdF...C2BA019fF
0 ETH0.051871753
Repay201660782024-06-25 3:41:234 days ago1719286883IN
0x6d596FdF...C2BA019fF
0 ETH0.000763874.78404544
Repay201660652024-06-25 3:38:474 days ago1719286727IN
0x6d596FdF...C2BA019fF
0 ETH0.000721754.5202663
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
201498402024-06-22 21:11:236 days ago1719090683
0x6d596FdF...C2BA019fF
1.44 ETH
201498402024-06-22 21:11:236 days ago1719090683
0x6d596FdF...C2BA019fF
1.44 ETH
201483302024-06-22 16:07:236 days ago1719072443
0x6d596FdF...C2BA019fF
1.32 ETH
201483302024-06-22 16:07:236 days ago1719072443
0x6d596FdF...C2BA019fF
1.32 ETH
197124962024-04-22 17:42:1167 days ago1713807731
0x6d596FdF...C2BA019fF
0.03892211 ETH
197124962024-04-22 17:42:1167 days ago1713807731
0x6d596FdF...C2BA019fF
0.40911788 ETH
197118262024-04-22 15:26:3567 days ago1713799595
0x6d596FdF...C2BA019fF
0.14769595 ETH
197118242024-04-22 15:26:1167 days ago1713799571
0x6d596FdF...C2BA019fF
0.14769595 ETH
197118222024-04-22 15:25:4767 days ago1713799547
0x6d596FdF...C2BA019fF
0.14769595 ETH
196779392024-04-17 21:41:3572 days ago1713390095
0x6d596FdF...C2BA019fF
0.00050033 ETH
196779392024-04-17 21:41:3572 days ago1713390095
0x6d596FdF...C2BA019fF
0.41340766 ETH
196779382024-04-17 21:41:2372 days ago1713390083
0x6d596FdF...C2BA019fF
0.00068979 ETH
196779382024-04-17 21:41:2372 days ago1713390083
0x6d596FdF...C2BA019fF
0.4132182 ETH
196779372024-04-17 21:41:1172 days ago1713390071
0x6d596FdF...C2BA019fF
0.00037403 ETH
196779372024-04-17 21:41:1172 days ago1713390071
0x6d596FdF...C2BA019fF
0.41353396 ETH
196779172024-04-17 21:37:1172 days ago1713389831
0x6d596FdF...C2BA019fF
0.00068979 ETH
196779172024-04-17 21:37:1172 days ago1713389831
0x6d596FdF...C2BA019fF
0.4132182 ETH
196779162024-04-17 21:36:5972 days ago1713389819
0x6d596FdF...C2BA019fF
0.00056349 ETH
196779162024-04-17 21:36:5972 days ago1713389819
0x6d596FdF...C2BA019fF
0.4133445 ETH
196779152024-04-17 21:36:4772 days ago1713389807
0x6d596FdF...C2BA019fF
0.00043718 ETH
196779152024-04-17 21:36:4772 days ago1713389807
0x6d596FdF...C2BA019fF
0.41347081 ETH
196775062024-04-17 20:13:3572 days ago1713384815
0x6d596FdF...C2BA019fF
0.00298151 ETH
196775062024-04-17 20:13:3572 days ago1713384815
0x6d596FdF...C2BA019fF
0.45149848 ETH
195925562024-04-05 22:36:4784 days ago1712356607
0x6d596FdF...C2BA019fF
0.02117613 ETH
195925562024-04-05 22:36:4784 days ago1712356607
0x6d596FdF...C2BA019fF
0.41582386 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ParaProxy

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
london EvmVersion
File 1 of 3 : ParaProxy.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/******************************************************************************\
* A custom implementation of EIP-2535
* EIP-2535: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

import {ParaProxyLib} from "./lib/ParaProxyLib.sol";
import {IParaProxy} from "../../../interfaces/IParaProxy.sol";

contract ParaProxy is IParaProxy {
    constructor(address _contractOwner) payable {
        ParaProxyLib.setContractOwner(_contractOwner);
    }

    function updateImplementation(
        ProxyImplementation[] calldata _implementationParams,
        address _init,
        bytes calldata _calldata
    ) external override {
        ParaProxyLib.enforceIsContractOwner();
        ParaProxyLib.updateImplementation(
            _implementationParams,
            _init,
            _calldata
        );
    }

    // Find implementation for function that is called and execute the
    // function if a implementation is found and return any value.
    fallback() external payable {
        ParaProxyLib.ProxyStorage storage ds;
        bytes32 position = ParaProxyLib.PROXY_STORAGE_POSITION;
        // get proxy storage
        assembly {
            ds.slot := position
        }
        // get implementation from function selector
        address implementation = ds
            .selectorToImplAndPosition[msg.sig]
            .implAddress;
        require(
            implementation != address(0),
            "ParaProxy: Function does not exist"
        );
        // Execute external function from implementation using delegatecall and return any value.
        assembly {
            // copy function selector and any arguments
            calldatacopy(0, 0, calldatasize())
            // execute function call using the implementation
            let result := delegatecall(
                gas(),
                implementation,
                0,
                calldatasize(),
                0,
                0
            )
            // get any return value
            returndatacopy(0, 0, returndatasize())
            // return any return value or error back to the caller
            switch result
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    receive() external payable {}
}

File 2 of 3 : IParaProxy.sol
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.0;

/******************************************************************************\
* EIP-2535: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

interface IParaProxy {
    enum ProxyImplementationAction {
        Add,
        Replace,
        Remove
    }
    // Add=0, Replace=1, Remove=2

    struct ProxyImplementation {
        address implAddress;
        ProxyImplementationAction action;
        bytes4[] functionSelectors;
    }

    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @param _implementationParams Contains the implementation addresses and function selectors
    /// @param _init The address of the contract or implementation to execute _calldata
    /// @param _calldata A function call, including function selector and arguments
    ///                  _calldata is executed with delegatecall on _init
    function updateImplementation(
        ProxyImplementation[] calldata _implementationParams,
        address _init,
        bytes calldata _calldata
    ) external;

    event ImplementationUpdated(
        ProxyImplementation[] _implementationParams,
        address _init,
        bytes _calldata
    );
}

File 3 of 3 : ParaProxyLib.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/******************************************************************************\
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

import {IParaProxy} from "../../../../interfaces/IParaProxy.sol";

library ParaProxyLib {
    bytes32 constant PROXY_STORAGE_POSITION =
        bytes32(
            uint256(keccak256("paraspace.proxy.implementation.storage")) - 1
        );

    struct ImplementationAddressAndPosition {
        address implAddress;
        uint96 functionSelectorPosition; // position in implementationFunctionSelectors.functionSelectors array
    }

    struct ImplementationFunctionSelectors {
        bytes4[] functionSelectors;
        uint256 implementationAddressPosition; // position of implAddress in implementationAddresses array
    }

    struct ProxyStorage {
        // maps function selector to the implementation address and
        // the position of the selector in the implementationFunctionSelectors.selectors array
        mapping(bytes4 => ImplementationAddressAndPosition) selectorToImplAndPosition;
        // maps implementation addresses to function selectors
        mapping(address => ImplementationFunctionSelectors) implementationFunctionSelectors;
        // implementation addresses
        address[] implementationAddresses;
        // Used to query if a contract implements an interface.
        // Used to implement ERC-165.
        mapping(bytes4 => bool) supportedInterfaces;
        // owner of the contract
        address contractOwner;
    }

    function diamondStorage() internal pure returns (ProxyStorage storage ds) {
        bytes32 position = PROXY_STORAGE_POSITION;
        assembly {
            ds.slot := position
        }
    }

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    function setContractOwner(address _newOwner) internal {
        ProxyStorage storage ds = diamondStorage();
        address previousOwner = ds.contractOwner;
        ds.contractOwner = _newOwner;
        emit OwnershipTransferred(previousOwner, _newOwner);
    }

    function contractOwner() internal view returns (address contractOwner_) {
        contractOwner_ = diamondStorage().contractOwner;
    }

    function enforceIsContractOwner() internal view {
        require(
            msg.sender == diamondStorage().contractOwner,
            "ParaProxy: Must be contract owner"
        );
    }

    event ImplementationUpdated(
        IParaProxy.ProxyImplementation[] _implementationData,
        address _init,
        bytes _calldata
    );

    // Internal function version of diamondCut
    function updateImplementation(
        IParaProxy.ProxyImplementation[] memory _implementationData,
        address _init,
        bytes memory _calldata
    ) internal {
        for (
            uint256 implIndex;
            implIndex < _implementationData.length;
            implIndex++
        ) {
            IParaProxy.ProxyImplementationAction action = _implementationData[
                implIndex
            ].action;
            if (action == IParaProxy.ProxyImplementationAction.Add) {
                addFunctions(
                    _implementationData[implIndex].implAddress,
                    _implementationData[implIndex].functionSelectors
                );
            } else if (action == IParaProxy.ProxyImplementationAction.Replace) {
                replaceFunctions(
                    _implementationData[implIndex].implAddress,
                    _implementationData[implIndex].functionSelectors
                );
            } else if (action == IParaProxy.ProxyImplementationAction.Remove) {
                removeFunctions(
                    _implementationData[implIndex].implAddress,
                    _implementationData[implIndex].functionSelectors
                );
            } else {
                revert("ParaProxy: Incorrect ProxyImplementationAction");
            }
        }
        emit ImplementationUpdated(_implementationData, _init, _calldata);
        initializeImplementation(_init, _calldata);
    }

    function addFunctions(
        address _implementationAddress,
        bytes4[] memory _functionSelectors
    ) internal {
        require(
            _functionSelectors.length > 0,
            "ParaProxy: No selectors in implementation to cut"
        );
        ProxyStorage storage ds = diamondStorage();
        require(
            _implementationAddress != address(0),
            "ParaProxy: Add implementation can't be address(0)"
        );
        uint96 selectorPosition = uint96(
            ds
                .implementationFunctionSelectors[_implementationAddress]
                .functionSelectors
                .length
        );
        // add new implementation address if it does not exist
        if (selectorPosition == 0) {
            addFacet(ds, _implementationAddress);
        }
        for (
            uint256 selectorIndex;
            selectorIndex < _functionSelectors.length;
            selectorIndex++
        ) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldImplementationAddress = ds
                .selectorToImplAndPosition[selector]
                .implAddress;
            require(
                oldImplementationAddress == address(0),
                "ParaProxy: Can't add function that already exists"
            );
            addFunction(ds, selector, selectorPosition, _implementationAddress);
            selectorPosition++;
        }
    }

    function replaceFunctions(
        address _implementationAddress,
        bytes4[] memory _functionSelectors
    ) internal {
        require(
            _functionSelectors.length > 0,
            "ParaProxy: No selectors in implementation to cut"
        );
        ProxyStorage storage ds = diamondStorage();
        require(
            _implementationAddress != address(0),
            "ParaProxy: Add implementation can't be address(0)"
        );
        uint96 selectorPosition = uint96(
            ds
                .implementationFunctionSelectors[_implementationAddress]
                .functionSelectors
                .length
        );
        // add new implementation address if it does not exist
        if (selectorPosition == 0) {
            addFacet(ds, _implementationAddress);
        }
        for (
            uint256 selectorIndex;
            selectorIndex < _functionSelectors.length;
            selectorIndex++
        ) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldImplementationAddress = ds
                .selectorToImplAndPosition[selector]
                .implAddress;
            require(
                oldImplementationAddress != _implementationAddress,
                "ParaProxy: Can't replace function with same function"
            );
            removeFunction(ds, oldImplementationAddress, selector);
            addFunction(ds, selector, selectorPosition, _implementationAddress);
            selectorPosition++;
        }
    }

    function removeFunctions(
        address _implementationAddress,
        bytes4[] memory _functionSelectors
    ) internal {
        require(
            _functionSelectors.length > 0,
            "ParaProxy: No selectors in implementation to cut"
        );
        ProxyStorage storage ds = diamondStorage();
        // if function does not exist then do nothing and return
        require(
            _implementationAddress == address(0),
            "ParaProxy: Remove implementation address must be address(0)"
        );
        for (
            uint256 selectorIndex;
            selectorIndex < _functionSelectors.length;
            selectorIndex++
        ) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldImplementationAddress = ds
                .selectorToImplAndPosition[selector]
                .implAddress;
            removeFunction(ds, oldImplementationAddress, selector);
        }
    }

    function addFacet(ProxyStorage storage ds, address _implementationAddress)
        internal
    {
        enforceHasContractCode(
            _implementationAddress,
            "ParaProxy: New implementation has no code"
        );
        ds
            .implementationFunctionSelectors[_implementationAddress]
            .implementationAddressPosition = ds.implementationAddresses.length;
        ds.implementationAddresses.push(_implementationAddress);
    }

    function addFunction(
        ProxyStorage storage ds,
        bytes4 _selector,
        uint96 _selectorPosition,
        address _implementationAddress
    ) internal {
        ds
            .selectorToImplAndPosition[_selector]
            .functionSelectorPosition = _selectorPosition;
        ds
            .implementationFunctionSelectors[_implementationAddress]
            .functionSelectors
            .push(_selector);
        ds
            .selectorToImplAndPosition[_selector]
            .implAddress = _implementationAddress;
    }

    function removeFunction(
        ProxyStorage storage ds,
        address _implementationAddress,
        bytes4 _selector
    ) internal {
        require(
            _implementationAddress != address(0),
            "ParaProxy: Can't remove function that doesn't exist"
        );
        // an immutable function is a function defined directly in a paraProxy
        require(
            _implementationAddress != address(this),
            "ParaProxy: Can't remove immutable function"
        );
        // replace selector with last selector, then delete last selector
        uint256 selectorPosition = ds
            .selectorToImplAndPosition[_selector]
            .functionSelectorPosition;
        uint256 lastSelectorPosition = ds
            .implementationFunctionSelectors[_implementationAddress]
            .functionSelectors
            .length - 1;
        // if not the same then replace _selector with lastSelector
        if (selectorPosition != lastSelectorPosition) {
            bytes4 lastSelector = ds
                .implementationFunctionSelectors[_implementationAddress]
                .functionSelectors[lastSelectorPosition];
            ds
                .implementationFunctionSelectors[_implementationAddress]
                .functionSelectors[selectorPosition] = lastSelector;
            ds
                .selectorToImplAndPosition[lastSelector]
                .functionSelectorPosition = uint96(selectorPosition);
        }
        // delete the last selector
        ds
            .implementationFunctionSelectors[_implementationAddress]
            .functionSelectors
            .pop();
        delete ds.selectorToImplAndPosition[_selector];

        // if no more selectors for implementation address then delete the implementation address
        if (lastSelectorPosition == 0) {
            // replace implementation address with last implementation address and delete last implementation address
            uint256 lastImplementationAddressPosition = ds
                .implementationAddresses
                .length - 1;
            uint256 implementationAddressPosition = ds
                .implementationFunctionSelectors[_implementationAddress]
                .implementationAddressPosition;
            if (
                implementationAddressPosition !=
                lastImplementationAddressPosition
            ) {
                address lastImplementationAddress = ds.implementationAddresses[
                    lastImplementationAddressPosition
                ];
                ds.implementationAddresses[
                    implementationAddressPosition
                ] = lastImplementationAddress;
                ds
                    .implementationFunctionSelectors[lastImplementationAddress]
                    .implementationAddressPosition = implementationAddressPosition;
            }
            ds.implementationAddresses.pop();
            delete ds
                .implementationFunctionSelectors[_implementationAddress]
                .implementationAddressPosition;
        }
    }

    function initializeImplementation(address _init, bytes memory _calldata)
        internal
    {
        if (_init == address(0)) {
            require(
                _calldata.length == 0,
                "ParaProxy: _init is address(0) but_calldata is not empty"
            );
        } else {
            require(
                _calldata.length > 0,
                "ParaProxy: _calldata is empty but _init is not address(0)"
            );
            if (_init != address(this)) {
                enforceHasContractCode(
                    _init,
                    "ParaProxy: _init address has no code"
                );
            }
            (bool success, bytes memory error) = _init.delegatecall(_calldata);
            if (!success) {
                if (error.length > 0) {
                    // bubble up the error
                    revert(string(error));
                } else {
                    revert("ParaProxy: _init function reverted");
                }
            }
        }
    }

    function enforceHasContractCode(
        address _contract,
        string memory _errorMessage
    ) internal view {
        uint256 contractSize;
        assembly {
            contractSize := extcodesize(_contract)
        }
        require(contractSize > 0, _errorMessage);
    }
}

Settings
{
  "remappings": [
    "contracts/=contracts/",
    "ds-test/=lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "pnm-contracts/=lib/pnm-contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"implAddress","type":"address"},{"internalType":"enum IParaProxy.ProxyImplementationAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IParaProxy.ProxyImplementation[]","name":"_implementationParams","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"ImplementationUpdated","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"components":[{"internalType":"address","name":"implAddress","type":"address"},{"internalType":"enum IParaProxy.ProxyImplementationAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IParaProxy.ProxyImplementation[]","name":"_implementationParams","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"updateImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260405162001714380380620017148339810160408190526200002691620000db565b6200003c816200004360201b620001771760201c565b506200012f565b60006200004f620000a5565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080620000d560017f6337542cd2f84f19034eb9306f0e56d253861ffec87880bde5606f90448356eb6200010d565b92915050565b600060208284031215620000ee57600080fd5b81516001600160a01b03811681146200010657600080fd5b9392505050565b81810381811115620000d557634e487b7160e01b600052601160045260246000fd5b6115d5806200013f6000396000f3fe6080604052600436106100225760003560e01c80635a8339911461010357610029565b3661002957005b60008061005760017f6337542cd2f84f19034eb9306f0e56d253861ffec87880bde5606f90448356eb610fa8565b600080356001600160e01b0319168152602082905260409020549092508291506001600160a01b0316806100dd5760405162461bcd60e51b815260206004820152602260248201527f5061726150726f78793a2046756e6374696f6e20646f6573206e6f74206578696044820152611cdd60f21b60648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156100fc573d6000f35b3d6000fd5b005b34801561010f57600080fd5b5061010161011e366004611020565b6101266101d7565b6101706101338587611166565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061024692505050565b5050505050565b600061018161045e565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6101df61045e565b600401546001600160a01b031633146102445760405162461bcd60e51b815260206004820152602160248201527f5061726150726f78793a204d75737420626520636f6e7472616374206f776e656044820152603960f91b60648201526084016100d4565b565b60005b8351811015610413576000848281518110610266576102666112aa565b602002602001015160200151905060006002811115610287576102876112c0565b816002811115610299576102996112c0565b036102e7576102e28583815181106102b3576102b36112aa565b6020026020010151600001518684815181106102d1576102d16112aa565b602002602001015160400151610492565b610400565b60018160028111156102fb576102fb6112c0565b03610344576102e2858381518110610315576103156112aa565b602002602001015160000151868481518110610333576103336112aa565b602002602001015160400151610603565b6002816002811115610358576103586112c0565b036103a1576102e2858381518110610372576103726112aa565b602002602001015160000151868481518110610390576103906112aa565b602002602001015160400151610787565b60405162461bcd60e51b815260206004820152602e60248201527f5061726150726f78793a20496e636f72726563742050726f7879496d706c656d60448201526d32b73a30ba34b7b720b1ba34b7b760911b60648201526084016100d4565b508061040b816112d6565b915050610249565b507f7994b9362f6f8b2522d7dfbe2519931ad73d1308b8bcfbc600db6de899c3d5288383836040516104479392919061133f565b60405180910390a161045982826108a9565b505050565b60008061048c60017f6337542cd2f84f19034eb9306f0e56d253861ffec87880bde5606f90448356eb610fa8565b92915050565b60008151116104b35760405162461bcd60e51b81526004016100d49061143f565b60006104bd61045e565b90506001600160a01b0383166104e55760405162461bcd60e51b81526004016100d49061148f565b6001600160a01b0383166000908152600182016020526040812054906001600160601b038216900361051b5761051b8285610ab2565b60005b835181101561017057600084828151811061053b5761053b6112aa565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b031680156105d55760405162461bcd60e51b815260206004820152603160248201527f5061726150726f78793a2043616e2774206164642066756e6374696f6e207468604482015270617420616c72656164792065786973747360781b60648201526084016100d4565b6105e18583868a610b1c565b836105eb816114e0565b945050505080806105fb906112d6565b91505061051e565b60008151116106245760405162461bcd60e51b81526004016100d49061143f565b600061062e61045e565b90506001600160a01b0383166106565760405162461bcd60e51b81526004016100d49061148f565b6001600160a01b0383166000908152600182016020526040812054906001600160601b038216900361068c5761068c8285610ab2565b60005b83518110156101705760008482815181106106ac576106ac6112aa565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03908116908716810361074e5760405162461bcd60e51b815260206004820152603460248201527f5061726150726f78793a2043616e2774207265706c6163652066756e6374696f60448201527337103bb4ba341039b0b6b290333ab731ba34b7b760611b60648201526084016100d4565b610759858284610bbc565b6107658583868a610b1c565b8361076f816114e0565b9450505050808061077f906112d6565b91505061068f565b60008151116107a85760405162461bcd60e51b81526004016100d49061143f565b60006107b261045e565b90506001600160a01b038316156108315760405162461bcd60e51b815260206004820152603b60248201527f5061726150726f78793a2052656d6f766520696d706c656d656e746174696f6e60448201527f2061646472657373206d7573742062652061646472657373283029000000000060648201526084016100d4565b60005b82518110156108a3576000838281518110610851576108516112aa565b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b031661088e848284610bbc565b5050808061089b906112d6565b915050610834565b50505050565b6001600160a01b0382166109305780511561092c5760405162461bcd60e51b815260206004820152603860248201527f5061726150726f78793a205f696e69742069732061646472657373283029206260448201527f75745f63616c6c64617461206973206e6f7420656d707479000000000000000060648201526084016100d4565b5050565b60008151116109a75760405162461bcd60e51b815260206004820152603960248201527f5061726150726f78793a205f63616c6c6461746120697320656d70747920627560448201527f74205f696e6974206973206e6f7420616464726573732830290000000000000060648201526084016100d4565b6001600160a01b03821630146109d9576109d98260405180606001604052806024815260200161155360249139610f71565b600080836001600160a01b0316836040516109f49190611506565b600060405180830381855af49150503d8060008114610a2f576040519150601f19603f3d011682016040523d82523d6000602084013e610a34565b606091505b5091509150816108a357805115610a5f578060405162461bcd60e51b81526004016100d49190611522565b60405162461bcd60e51b815260206004820152602260248201527f5061726150726f78793a205f696e69742066756e6374696f6e20726576657274604482015261195960f21b60648201526084016100d4565b610ad48160405180606001604052806029815260200161157760299139610f71565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160e01b0319831660008181526020868152604080832080546001600160601b03909716600160a01b026001600160a01b0397881617815594909516808352600180890183529583208054968701815583528183206008870401805460e09890981c60046007909816979097026101000a96870263ffffffff9097021990971695909517909555529290915281546001600160a01b031916179055565b6001600160a01b038216610c2e5760405162461bcd60e51b815260206004820152603360248201527f5061726150726f78793a2043616e27742072656d6f76652066756e6374696f6e604482015272081d1a185d08191bd95cdb89dd08195e1a5cdd606a1b60648201526084016100d4565b306001600160a01b03831603610c995760405162461bcd60e51b815260206004820152602a60248201527f5061726150726f78793a2043616e27742072656d6f766520696d6d757461626c6044820152693290333ab731ba34b7b760b11b60648201526084016100d4565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b03169291610ce891610fa8565b9050808214610dda576001600160a01b03841660009081526001860160205260408120805483908110610d1d57610d1d6112aa565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b925082919085908110610d6e57610d6e6112aa565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b03841660009081526001860160205260409020805480610e0357610e0361153c565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b03198516825286905260408120819055819003610170576002850154600090610e6690600190610fa8565b6001600160a01b0386166000908152600180890160205260409091200154909150808214610f15576000876002018381548110610ea557610ea56112aa565b6000918252602090912001546002890180546001600160a01b039092169250829184908110610ed657610ed66112aa565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b86600201805480610f2857610f2861153c565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505050505050565b813b81816108a35760405162461bcd60e51b81526004016100d49190611522565b634e487b7160e01b600052601160045260246000fd5b8181038181111561048c5761048c610f92565b80356001600160a01b0381168114610fd257600080fd5b919050565b60008083601f840112610fe957600080fd5b50813567ffffffffffffffff81111561100157600080fd5b60208301915083602082850101111561101957600080fd5b9250929050565b60008060008060006060868803121561103857600080fd5b853567ffffffffffffffff8082111561105057600080fd5b818801915088601f83011261106457600080fd5b81358181111561107357600080fd5b8960208260051b850101111561108857600080fd5b6020830197508096505061109e60208901610fbb565b945060408801359150808211156110b457600080fd5b506110c188828901610fd7565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561110b5761110b6110d2565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561113a5761113a6110d2565b604052919050565b600067ffffffffffffffff82111561115c5761115c6110d2565b5060051b60200190565b600061117961117484611142565b611111565b83815260208082019190600586811b86013681111561119757600080fd5b865b8181101561129d57803567ffffffffffffffff808211156111ba5760008081fd5b818a019150606082360312156111d05760008081fd5b6111d86110e8565b6111e183610fbb565b815286830135600381106111f55760008081fd5b818801526040838101358381111561120d5760008081fd5b939093019236601f85011261122457600092508283fd5b8335925061123461117484611142565b83815292871b840188019288810190368511156112515760008081fd5b948901945b848610156112865785356001600160e01b0319811681146112775760008081fd5b82529489019490890190611256565b918301919091525088525050948301948301611199565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000600182016112e8576112e8610f92565b5060010190565b60005b8381101561130a5781810151838201526020016112f2565b50506000910152565b6000815180845261132b8160208601602086016112ef565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b8481101561140f57898403607f19018652815180516001600160a01b031685528381015189860190600381106113ae57634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156113fa5783516001600160e01b03191682529286019260019290920191908601906113d0565b50978501979550505090820190600101611368565b50506001600160a01b038a169088015286810360408801526114318189611313565b9a9950505050505050505050565b60208082526030908201527f5061726150726f78793a204e6f2073656c6563746f727320696e20696d706c6560408201526f1b595b9d185d1a5bdb881d1bc818dd5d60821b606082015260800190565b60208082526031908201527f5061726150726f78793a2041646420696d706c656d656e746174696f6e2063616040820152706e2774206265206164647265737328302960781b606082015260800190565b60006001600160601b038083168181036114fc576114fc610f92565b6001019392505050565b600082516115188184602087016112ef565b9190910192915050565b6020815260006115356020830184611313565b9392505050565b634e487b7160e01b600052603160045260246000fdfe5061726150726f78793a205f696e6974206164647265737320686173206e6f20636f64655061726150726f78793a204e657720696d706c656d656e746174696f6e20686173206e6f20636f6465a264697066735822122041081c9a23bf9f3e08a53d1420d1fbcae811321cd621bed0b860380f3241e08364736f6c63430008110033000000000000000000000000fae470a311f61944346bbb8709cdc2398506be46

Deployed Bytecode

0x6080604052600436106100225760003560e01c80635a8339911461010357610029565b3661002957005b60008061005760017f6337542cd2f84f19034eb9306f0e56d253861ffec87880bde5606f90448356eb610fa8565b600080356001600160e01b0319168152602082905260409020549092508291506001600160a01b0316806100dd5760405162461bcd60e51b815260206004820152602260248201527f5061726150726f78793a2046756e6374696f6e20646f6573206e6f74206578696044820152611cdd60f21b60648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156100fc573d6000f35b3d6000fd5b005b34801561010f57600080fd5b5061010161011e366004611020565b6101266101d7565b6101706101338587611166565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061024692505050565b5050505050565b600061018161045e565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6101df61045e565b600401546001600160a01b031633146102445760405162461bcd60e51b815260206004820152602160248201527f5061726150726f78793a204d75737420626520636f6e7472616374206f776e656044820152603960f91b60648201526084016100d4565b565b60005b8351811015610413576000848281518110610266576102666112aa565b602002602001015160200151905060006002811115610287576102876112c0565b816002811115610299576102996112c0565b036102e7576102e28583815181106102b3576102b36112aa565b6020026020010151600001518684815181106102d1576102d16112aa565b602002602001015160400151610492565b610400565b60018160028111156102fb576102fb6112c0565b03610344576102e2858381518110610315576103156112aa565b602002602001015160000151868481518110610333576103336112aa565b602002602001015160400151610603565b6002816002811115610358576103586112c0565b036103a1576102e2858381518110610372576103726112aa565b602002602001015160000151868481518110610390576103906112aa565b602002602001015160400151610787565b60405162461bcd60e51b815260206004820152602e60248201527f5061726150726f78793a20496e636f72726563742050726f7879496d706c656d60448201526d32b73a30ba34b7b720b1ba34b7b760911b60648201526084016100d4565b508061040b816112d6565b915050610249565b507f7994b9362f6f8b2522d7dfbe2519931ad73d1308b8bcfbc600db6de899c3d5288383836040516104479392919061133f565b60405180910390a161045982826108a9565b505050565b60008061048c60017f6337542cd2f84f19034eb9306f0e56d253861ffec87880bde5606f90448356eb610fa8565b92915050565b60008151116104b35760405162461bcd60e51b81526004016100d49061143f565b60006104bd61045e565b90506001600160a01b0383166104e55760405162461bcd60e51b81526004016100d49061148f565b6001600160a01b0383166000908152600182016020526040812054906001600160601b038216900361051b5761051b8285610ab2565b60005b835181101561017057600084828151811061053b5761053b6112aa565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b031680156105d55760405162461bcd60e51b815260206004820152603160248201527f5061726150726f78793a2043616e2774206164642066756e6374696f6e207468604482015270617420616c72656164792065786973747360781b60648201526084016100d4565b6105e18583868a610b1c565b836105eb816114e0565b945050505080806105fb906112d6565b91505061051e565b60008151116106245760405162461bcd60e51b81526004016100d49061143f565b600061062e61045e565b90506001600160a01b0383166106565760405162461bcd60e51b81526004016100d49061148f565b6001600160a01b0383166000908152600182016020526040812054906001600160601b038216900361068c5761068c8285610ab2565b60005b83518110156101705760008482815181106106ac576106ac6112aa565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03908116908716810361074e5760405162461bcd60e51b815260206004820152603460248201527f5061726150726f78793a2043616e2774207265706c6163652066756e6374696f60448201527337103bb4ba341039b0b6b290333ab731ba34b7b760611b60648201526084016100d4565b610759858284610bbc565b6107658583868a610b1c565b8361076f816114e0565b9450505050808061077f906112d6565b91505061068f565b60008151116107a85760405162461bcd60e51b81526004016100d49061143f565b60006107b261045e565b90506001600160a01b038316156108315760405162461bcd60e51b815260206004820152603b60248201527f5061726150726f78793a2052656d6f766520696d706c656d656e746174696f6e60448201527f2061646472657373206d7573742062652061646472657373283029000000000060648201526084016100d4565b60005b82518110156108a3576000838281518110610851576108516112aa565b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b031661088e848284610bbc565b5050808061089b906112d6565b915050610834565b50505050565b6001600160a01b0382166109305780511561092c5760405162461bcd60e51b815260206004820152603860248201527f5061726150726f78793a205f696e69742069732061646472657373283029206260448201527f75745f63616c6c64617461206973206e6f7420656d707479000000000000000060648201526084016100d4565b5050565b60008151116109a75760405162461bcd60e51b815260206004820152603960248201527f5061726150726f78793a205f63616c6c6461746120697320656d70747920627560448201527f74205f696e6974206973206e6f7420616464726573732830290000000000000060648201526084016100d4565b6001600160a01b03821630146109d9576109d98260405180606001604052806024815260200161155360249139610f71565b600080836001600160a01b0316836040516109f49190611506565b600060405180830381855af49150503d8060008114610a2f576040519150601f19603f3d011682016040523d82523d6000602084013e610a34565b606091505b5091509150816108a357805115610a5f578060405162461bcd60e51b81526004016100d49190611522565b60405162461bcd60e51b815260206004820152602260248201527f5061726150726f78793a205f696e69742066756e6374696f6e20726576657274604482015261195960f21b60648201526084016100d4565b610ad48160405180606001604052806029815260200161157760299139610f71565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160e01b0319831660008181526020868152604080832080546001600160601b03909716600160a01b026001600160a01b0397881617815594909516808352600180890183529583208054968701815583528183206008870401805460e09890981c60046007909816979097026101000a96870263ffffffff9097021990971695909517909555529290915281546001600160a01b031916179055565b6001600160a01b038216610c2e5760405162461bcd60e51b815260206004820152603360248201527f5061726150726f78793a2043616e27742072656d6f76652066756e6374696f6e604482015272081d1a185d08191bd95cdb89dd08195e1a5cdd606a1b60648201526084016100d4565b306001600160a01b03831603610c995760405162461bcd60e51b815260206004820152602a60248201527f5061726150726f78793a2043616e27742072656d6f766520696d6d757461626c6044820152693290333ab731ba34b7b760b11b60648201526084016100d4565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b03169291610ce891610fa8565b9050808214610dda576001600160a01b03841660009081526001860160205260408120805483908110610d1d57610d1d6112aa565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b925082919085908110610d6e57610d6e6112aa565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b03841660009081526001860160205260409020805480610e0357610e0361153c565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b03198516825286905260408120819055819003610170576002850154600090610e6690600190610fa8565b6001600160a01b0386166000908152600180890160205260409091200154909150808214610f15576000876002018381548110610ea557610ea56112aa565b6000918252602090912001546002890180546001600160a01b039092169250829184908110610ed657610ed66112aa565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b86600201805480610f2857610f2861153c565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505050505050565b813b81816108a35760405162461bcd60e51b81526004016100d49190611522565b634e487b7160e01b600052601160045260246000fd5b8181038181111561048c5761048c610f92565b80356001600160a01b0381168114610fd257600080fd5b919050565b60008083601f840112610fe957600080fd5b50813567ffffffffffffffff81111561100157600080fd5b60208301915083602082850101111561101957600080fd5b9250929050565b60008060008060006060868803121561103857600080fd5b853567ffffffffffffffff8082111561105057600080fd5b818801915088601f83011261106457600080fd5b81358181111561107357600080fd5b8960208260051b850101111561108857600080fd5b6020830197508096505061109e60208901610fbb565b945060408801359150808211156110b457600080fd5b506110c188828901610fd7565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561110b5761110b6110d2565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561113a5761113a6110d2565b604052919050565b600067ffffffffffffffff82111561115c5761115c6110d2565b5060051b60200190565b600061117961117484611142565b611111565b83815260208082019190600586811b86013681111561119757600080fd5b865b8181101561129d57803567ffffffffffffffff808211156111ba5760008081fd5b818a019150606082360312156111d05760008081fd5b6111d86110e8565b6111e183610fbb565b815286830135600381106111f55760008081fd5b818801526040838101358381111561120d5760008081fd5b939093019236601f85011261122457600092508283fd5b8335925061123461117484611142565b83815292871b840188019288810190368511156112515760008081fd5b948901945b848610156112865785356001600160e01b0319811681146112775760008081fd5b82529489019490890190611256565b918301919091525088525050948301948301611199565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000600182016112e8576112e8610f92565b5060010190565b60005b8381101561130a5781810151838201526020016112f2565b50506000910152565b6000815180845261132b8160208601602086016112ef565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b8481101561140f57898403607f19018652815180516001600160a01b031685528381015189860190600381106113ae57634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156113fa5783516001600160e01b03191682529286019260019290920191908601906113d0565b50978501979550505090820190600101611368565b50506001600160a01b038a169088015286810360408801526114318189611313565b9a9950505050505050505050565b60208082526030908201527f5061726150726f78793a204e6f2073656c6563746f727320696e20696d706c6560408201526f1b595b9d185d1a5bdb881d1bc818dd5d60821b606082015260800190565b60208082526031908201527f5061726150726f78793a2041646420696d706c656d656e746174696f6e2063616040820152706e2774206265206164647265737328302960781b606082015260800190565b60006001600160601b038083168181036114fc576114fc610f92565b6001019392505050565b600082516115188184602087016112ef565b9190910192915050565b6020815260006115356020830184611313565b9392505050565b634e487b7160e01b600052603160045260246000fdfe5061726150726f78793a205f696e6974206164647265737320686173206e6f20636f64655061726150726f78793a204e657720696d706c656d656e746174696f6e20686173206e6f20636f6465a264697066735822122041081c9a23bf9f3e08a53d1420d1fbcae811321cd621bed0b860380f3241e08364736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000fae470a311f61944346bbb8709cdc2398506be46

-----Decoded View---------------
Arg [0] : _contractOwner (address): 0xfae470A311f61944346BbB8709CDc2398506Be46

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000fae470a311f61944346bbb8709cdc2398506be46


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.