Goerli Testnet

Contract

0xD496950582236b5E0DAE7fA13acc018492bE9c29
Transaction Hash
Method
Block
From
To
Value
Supply ERC721104195542024-01-23 7:50:4887 days ago1705996248IN
0xD4969505...492bE9c29
0 ETH0.000097091.50000001
Borrow95648152023-08-23 2:15:36240 days ago1692756936IN
0xD4969505...492bE9c29
0 ETH0.000378951.5
Supply95648122023-08-23 2:15:00240 days ago1692756900IN
0xD4969505...492bE9c29
0 ETH0.000246291.50000001
Supply ERC72194047352023-07-25 8:42:00269 days ago1690274520IN
0xD4969505...492bE9c29
0 ETH0.000249783.82339676
Supply ERC72194047332023-07-25 8:41:36269 days ago1690274496IN
0xD4969505...492bE9c29
0 ETH0.001748463.56998556
Supply93582172023-07-17 2:06:36277 days ago1689559596IN
0xD4969505...492bE9c29
0 ETH0.0001971.5074554
Supply93582172023-07-17 2:06:36277 days ago1689559596IN
0xD4969505...492bE9c29
0 ETH0.000247531.5074554
Supply ERC72190161852023-05-17 13:42:36338 days ago1684330956IN
0xD4969505...492bE9c29
0 ETH0.000200462.96493011
Supply ERC72190161852023-05-17 13:42:36338 days ago1684330956IN
0xD4969505...492bE9c29
0 ETH0.000101411.50000022
Supply ERC72190159032023-05-17 12:35:48338 days ago1684326948IN
0xD4969505...492bE9c29
0 ETH0.03540595143.63702431
Borrow89909872023-05-13 4:55:48342 days ago1683953748IN
0xD4969505...492bE9c29
0 ETH0.000485162.00000001
Supply ERC72189861092023-05-12 8:23:24343 days ago1683879804IN
0xD4969505...492bE9c29
0 ETH0.000708071.50000001
Borrow89270632023-05-02 4:44:24353 days ago1683002664IN
0xD4969505...492bE9c29
0 ETH0.00022811.50000004
Borrow89270632023-05-02 4:44:24353 days ago1683002664IN
0xD4969505...492bE9c29
0 ETH0.000349371.50453682
Borrow89165872023-04-30 8:23:00355 days ago1682842980IN
0xD4969505...492bE9c29
0 ETH0.000377181.50629467
Supply88630642023-04-20 21:06:12364 days ago1682024772IN
0xD4969505...492bE9c29
0 ETH0.000246221.50000002
Borrow88325682023-04-15 5:25:24370 days ago1681536324IN
0xD4969505...492bE9c29
0 ETH0.000349282.19152898
Supply88031322023-04-09 22:46:00375 days ago1681080360IN
0xD4969505...492bE9c29
0 ETH0.00020311.50000001
Borrow87736552023-04-04 17:56:12380 days ago1680630972IN
0xD4969505...492bE9c29
0 ETH0.014544348.95919479
Borrow87732832023-04-04 16:20:12380 days ago1680625212IN
0xD4969505...492bE9c29
0 ETH0.0256370998.2584113
Borrow87574732023-04-01 22:09:36383 days ago1680386976IN
0xD4969505...492bE9c29
0 ETH0.000397541.50213645
Borrow87574732023-04-01 22:09:36383 days ago1680386976IN
0xD4969505...492bE9c29
0 ETH0.000428521.5021112
Borrow87296672023-03-27 23:51:24388 days ago1679961084IN
0xD4969505...492bE9c29
0 ETH0.0036902811.70229073
Borrow87293942023-03-27 22:40:00388 days ago1679956800IN
0xD4969505...492bE9c29
0 ETH0.0066737819.06136848
Borrow87293592023-03-27 22:30:36388 days ago1679956236IN
0xD4969505...492bE9c29
0 ETH0.0075175121.44211201
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205942024-03-01 21:04:4848 days ago1709327088
0xD4969505...492bE9c29
0 ETH
106205882024-03-01 21:03:3648 days ago1709327016
0xD4969505...492bE9c29
0 ETH
106205882024-03-01 21:03:3648 days ago1709327016
0xD4969505...492bE9c29
0 ETH
106205882024-03-01 21:03:3648 days ago1709327016
0xD4969505...492bE9c29
0 ETH
106205882024-03-01 21:03:3648 days ago1709327016
0xD4969505...492bE9c29
0 ETH
106205882024-03-01 21:03:3648 days ago1709327016
0xD4969505...492bE9c29
0 ETH
106205882024-03-01 21:03:3648 days ago1709327016
0xD4969505...492bE9c29
0 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x871820b5...6112A0af2
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
ParaProxy

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 8000 runs

Other Settings:
default evmVersion
File 1 of 3 : ParaProxy.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;

/******************************************************************************\
* 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 3 of 3 : IParaProxy.sol
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.10;

/******************************************************************************\
* 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 4 of 3 : ParaProxyLib.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;

/******************************************************************************\
* 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
{
  "optimizer": {
    "enabled": true,
    "runs": 8000
  },
  "evmVersion": "london",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

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"}]

Deployed Bytecode

0x6080604052600436106100225760003560e01c80635a8339911461014157610029565b3661002957005b60008061005760017f6337542cd2f84f19034eb9306f0e56d253861ffec87880bde5606f90448356eb6115ec565b600080357fffffffff000000000000000000000000000000000000000000000000000000001681526020829052604090205490925082915073ffffffffffffffffffffffffffffffffffffffff168061011d5760405162461bcd60e51b815260206004820152602260248201527f5061726150726f78793a2046756e6374696f6e20646f6573206e6f742065786960448201527f737400000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e80801561013c573d6000f35b3d6000fd5b34801561014d57600080fd5b5061016161015c366004611675565b610163565b005b61016b610241565b6101b561017885876117f2565b8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102d992505050565b5050505050565b60006101c6610503565b60048101805473ffffffffffffffffffffffffffffffffffffffff8581167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610249610503565b6004015473ffffffffffffffffffffffffffffffffffffffff1633146102d75760405162461bcd60e51b815260206004820152602160248201527f5061726150726f78793a204d75737420626520636f6e7472616374206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610114565b565b60005b83518110156104b85760008482815181106102f9576102f961194e565b60200260200101516020015190506000600281111561031a5761031a61197d565b81600281111561032c5761032c61197d565b141561037b576103768583815181106103475761034761194e565b6020026020010151600001518684815181106103655761036561194e565b602002602001015160400151610537565b6104a5565b600181600281111561038f5761038f61197d565b14156103d9576103768583815181106103aa576103aa61194e565b6020026020010151600001518684815181106103c8576103c861194e565b602002602001015160400151610880565b60028160028111156103ed576103ed61197d565b1415610437576103768583815181106104085761040861194e565b6020026020010151600001518684815181106104265761042661194e565b602002602001015160400151610bda565b60405162461bcd60e51b815260206004820152602e60248201527f5061726150726f78793a20496e636f72726563742050726f7879496d706c656d60448201527f656e746174696f6e416374696f6e0000000000000000000000000000000000006064820152608401610114565b50806104b0816119ac565b9150506102dc565b507f7994b9362f6f8b2522d7dfbe2519931ad73d1308b8bcfbc600db6de899c3d5288383836040516104ec93929190611a5b565b60405180910390a16104fe8282610d84565b505050565b60008061053160017f6337542cd2f84f19034eb9306f0e56d253861ffec87880bde5606f90448356eb6115ec565b92915050565b60008151116105ae5760405162461bcd60e51b815260206004820152603060248201527f5061726150726f78793a204e6f2073656c6563746f727320696e20696d706c6560448201527f6d656e746174696f6e20746f20637574000000000000000000000000000000006064820152608401610114565b60006105b8610503565b905073ffffffffffffffffffffffffffffffffffffffff83166106435760405162461bcd60e51b815260206004820152603160248201527f5061726150726f78793a2041646420696d706c656d656e746174696f6e20636160448201527f6e277420626520616464726573732830290000000000000000000000000000006064820152608401610114565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff8116610688576106888285610fcf565b60005b83518110156101b55760008482815181106106a8576106a861194e565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff1680156107735760405162461bcd60e51b815260206004820152603160248201527f5061726150726f78793a2043616e2774206164642066756e6374696f6e20746860448201527f617420616c7265616479206578697374730000000000000000000000000000006064820152608401610114565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff0000000000000000000000000000000000000000161790558361086881611bc3565b94505050508080610878906119ac565b91505061068b565b60008151116108f75760405162461bcd60e51b815260206004820152603060248201527f5061726150726f78793a204e6f2073656c6563746f727320696e20696d706c6560448201527f6d656e746174696f6e20746f20637574000000000000000000000000000000006064820152608401610114565b6000610901610503565b905073ffffffffffffffffffffffffffffffffffffffff831661098c5760405162461bcd60e51b815260206004820152603160248201527f5061726150726f78793a2041646420696d706c656d656e746174696f6e20636160448201527f6e277420626520616464726573732830290000000000000000000000000000006064820152608401610114565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff81166109d1576109d18285610fcf565b60005b83518110156101b55760008482815181106109f1576109f161194e565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff908116908716811415610ac25760405162461bcd60e51b815260206004820152603460248201527f5061726150726f78793a2043616e2774207265706c6163652066756e6374696f60448201527f6e20776974682073616d652066756e6374696f6e0000000000000000000000006064820152608401610114565b610acd85828461105e565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610bc281611bc3565b94505050508080610bd2906119ac565b9150506109d4565b6000815111610c515760405162461bcd60e51b815260206004820152603060248201527f5061726150726f78793a204e6f2073656c6563746f727320696e20696d706c6560448201527f6d656e746174696f6e20746f20637574000000000000000000000000000000006064820152608401610114565b6000610c5b610503565b905073ffffffffffffffffffffffffffffffffffffffff831615610ce75760405162461bcd60e51b815260206004820152603b60248201527f5061726150726f78793a2052656d6f766520696d706c656d656e746174696f6e60448201527f2061646472657373206d757374206265206164647265737328302900000000006064820152608401610114565b60005b8251811015610d7e576000838281518110610d0757610d0761194e565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16610d6984828461105e565b50508080610d76906119ac565b915050610cea565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610e1857805115610e145760405162461bcd60e51b815260206004820152603860248201527f5061726150726f78793a205f696e69742069732061646472657373283029206260448201527f75745f63616c6c64617461206973206e6f7420656d70747900000000000000006064820152608401610114565b5050565b6000815111610e8f5760405162461bcd60e51b815260206004820152603960248201527f5061726150726f78793a205f63616c6c6461746120697320656d70747920627560448201527f74205f696e6974206973206e6f742061646472657373283029000000000000006064820152608401610114565b73ffffffffffffffffffffffffffffffffffffffff82163014610ece57610ece82604051806060016040528060248152602001611c556024913961159c565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610ef69190611bef565b600060405180830381855af49150503d8060008114610f31576040519150601f19603f3d011682016040523d82523d6000602084013e610f36565b606091505b509150915081610d7e57805115610f61578060405162461bcd60e51b81526004016101149190611c0b565b60405162461bcd60e51b815260206004820152602260248201527f5061726150726f78793a205f696e69742066756e6374696f6e2072657665727460448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401610114565b610ff181604051806060016040528060298152602001611c796029913961159c565b60028201805473ffffffffffffffffffffffffffffffffffffffff90921660008181526001948501602090815260408220860185905594840183559182529290200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b73ffffffffffffffffffffffffffffffffffffffff82166110e75760405162461bcd60e51b815260206004820152603360248201527f5061726150726f78793a2043616e27742072656d6f76652066756e6374696f6e60448201527f207468617420646f65736e2774206578697374000000000000000000000000006064820152608401610114565b73ffffffffffffffffffffffffffffffffffffffff82163014156111735760405162461bcd60e51b815260206004820152602a60248201527f5061726150726f78793a2043616e27742072656d6f766520696d6d757461626c60448201527f652066756e6374696f6e000000000000000000000000000000000000000000006064820152608401610114565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152602084815260408083205473ffffffffffffffffffffffffffffffffffffffff86168452600180880190935290832054740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff1692916111fd916115ec565b90508082146113445773ffffffffffffffffffffffffffffffffffffffff84166000908152600186016020526040812080548390811061123f5761123f61194e565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8916845260018a019091526040909220805460079092166004026101000a90920460e01b92508291908590811061129d5761129d61194e565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff0000000000000000000000000000000000000000000000000000000092909216825286905260409020805473ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff84166000908152600186016020526040902080548061137a5761137a611c25565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff00000000000000000000000000000000000000000000000000000000851682528690526040812055806101b557600285015460009061140f906001906115ec565b73ffffffffffffffffffffffffffffffffffffffff861660009081526001808901602052604090912001549091508082146114fd57600087600201838154811061145b5761145b61194e565b60009182526020909120015460028901805473ffffffffffffffffffffffffffffffffffffffff90921692508291849081106114995761149961194e565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055929091168152600189810190925260409020018190555b8660020180548061151057611510611c25565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff88168252600189810190915260408220015550505050505050565b813b8181610d7e5760405162461bcd60e51b81526004016101149190611c0b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156115fe576115fe6115bd565b500390565b803573ffffffffffffffffffffffffffffffffffffffff8116811461162757600080fd5b919050565b60008083601f84011261163e57600080fd5b50813567ffffffffffffffff81111561165657600080fd5b60208301915083602082850101111561166e57600080fd5b9250929050565b60008060008060006060868803121561168d57600080fd5b853567ffffffffffffffff808211156116a557600080fd5b818801915088601f8301126116b957600080fd5b8135818111156116c857600080fd5b8960208260051b85010111156116dd57600080fd5b602083019750809650506116f360208901611603565b9450604088013591508082111561170957600080fd5b506117168882890161162c565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561177957611779611727565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117c6576117c6611727565b604052919050565b600067ffffffffffffffff8211156117e8576117e8611727565b5060051b60200190565b6000611805611800846117ce565b61177f565b83815260208082019190600586811b86013681111561182357600080fd5b865b8181101561194157803567ffffffffffffffff808211156118465760008081fd5b818a0191506060823603121561185c5760008081fd5b611864611756565b61186d83611603565b815286830135600381106118815760008081fd5b81880152604083810135838111156118995760008081fd5b939093019236601f8501126118b057600092508283fd5b833592506118c0611800846117ce565b83815292871b840188019288810190368511156118dd5760008081fd5b948901945b8486101561192a5785357fffffffff000000000000000000000000000000000000000000000000000000008116811461191b5760008081fd5b825294890194908901906118e2565b918301919091525088525050948301948301611825565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156119de576119de6115bd565b5060010190565b60005b83811015611a005781810151838201526020016119e8565b83811115610d7e5750506000910152565b60008151808452611a298160208601602086016119e5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015611b86577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff82511686528482015160038110611b0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015611b715783517fffffffff00000000000000000000000000000000000000000000000000000000168252928601926001929092019190860190611b2f565b50978501979550505090820190600101611a84565b505073ffffffffffffffffffffffffffffffffffffffff8a16908801528681036040880152611bb58189611a11565b9a9950505050505050505050565b60006bffffffffffffffffffffffff80831681811415611be557611be56115bd565b6001019392505050565b60008251611c018184602087016119e5565b9190910192915050565b602081526000611c1e6020830184611a11565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe5061726150726f78793a205f696e6974206164647265737320686173206e6f20636f64655061726150726f78793a204e657720696d706c656d656e746174696f6e20686173206e6f20636f6465a26469706673582212205383f01cf2eca0844cb64ba96cfe76bf7f61e0fad2a7e73fc0583d22819f8b3764736f6c634300080a0033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.