ETH Price: $2,618.23 (-2.89%)

Contract

0x1A286652288691D086006B81655e4EfA895Df84D
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040127925982021-07-09 10:18:001210 days ago1625825880IN
 Create: PermanentStorage
0 ETH0.0255134415

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PermanentStorage

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
File 1 of 3 : PermanentStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.5;

import "./interfaces/IPermanentStorage.sol";
import "./utils/lib_storage/PSStorage.sol";

contract PermanentStorage is IPermanentStorage {

    // Constants do not have storage slot.
    bytes32 public constant curveTokenIndexStorageId = 0xf4c750cdce673f6c35898d215e519b86e3846b1f0532fb48b84fe9d80f6de2fc; // keccak256("curveTokenIndex")
    bytes32 public constant transactionSeenStorageId = 0x695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d0;  // keccak256("transactionSeen")
    bytes32 public constant relayerValidStorageId = 0x2c97779b4deaf24e9d46e02ec2699240a957d92782b51165b93878b09dd66f61;  // keccak256("relayerValid")

    // New supported Curve pools
    address public constant CURVE_renBTC_POOL = 0x93054188d876f558f4a66B2EF1d97d16eDf0895B;
    address public constant CURVE_sBTC_POOL = 0x7fC77b5c7614E1533320Ea6DDc2Eb61fa00A9714;
    address public constant CURVE_hBTC_POOL = 0x4CA9b3063Ec5866A4B82E437059D2C43d1be596F;
    address public constant CURVE_sETH_POOL = 0xc5424B857f758E906013F3555Dad202e4bdB4567;

    // Curve coins
    address private constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    address private constant renBTC = 0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D;
    address private constant wBTC = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599;
    address private constant sBTC = 0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6;
    address private constant hBTC = 0x0316EB71485b0Ab14103307bf65a021042c6d380;
    address private constant sETH = 0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb;

    // Below are the variables which consume storage slots.
    address public operator;
    string public version;  // Current version of the contract
    mapping(bytes32 => mapping(address => bool)) private permission;


    // Operator events
    event TransferOwnership(address newOperator);
    event SetPermission(bytes32 storageId, address role, bool enabled);
    event UpgradeAMMWrapper(address newAMMWrapper);
    event UpgradePMM(address newPMM);
    event UpgradeRFQ(address newRFQ);
    event UpgradeWETH(address newWETH);


    /************************************************************
    *          Access control and ownership management          *
    *************************************************************/
    modifier onlyOperator() {
        require(operator == msg.sender, "PermanentStorage: not the operator");
        _;
    }

    modifier validRole(bool _enabled, address _role) {
        if (_enabled) {
            require(
                (_role == operator) || (_role == ammWrapperAddr()) || (_role == pmmAddr() || (_role == rfqAddr())),
                "PermanentStorage: not a valid role"
            );
        }
        _;
    }

    modifier isPermitted(bytes32 _storageId, address _role) {
        require(permission[_storageId][_role], "PermanentStorage: has no permission");
        _;
    }


    function transferOwnership(address _newOperator) external onlyOperator {
        require(_newOperator != address(0), "PermanentStorage: operator can not be zero address");
        operator = _newOperator;

        emit TransferOwnership(_newOperator);
    }

    /// @dev Set permission for entity to write certain storage.
    function setPermission(bytes32 _storageId, address _role, bool _enabled) external onlyOperator validRole(_enabled, _role) {
        permission[_storageId][_role] = _enabled;

        emit SetPermission(_storageId, _role, _enabled);
    }


    /************************************************************
    *              Constructor and init functions               *
    *************************************************************/
    /// @dev Replacing constructor and initialize the contract. This function should only be called once.
    function initialize() external {
        require(
            keccak256(abi.encodePacked(version)) == keccak256(abi.encodePacked("5.1.0")),
            "PermanentStorage: not upgrading from 5.1.0 version"
        );
        // upgrade from 5.1.0 to 5.2.0
        version = "5.2.0";
        // register renBTC pool
        // coins, exchange
        AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_renBTC_POOL][renBTC] = 1; // renBTC
        AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_renBTC_POOL][wBTC] = 2; // wBTC
        AMMWrapperStorage.getStorage().curveSupportGetDx[CURVE_renBTC_POOL] = false;

        // register sBTC pool
        // coins, exchange
        AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_sBTC_POOL][renBTC] = 1; // renBTC
        AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_sBTC_POOL][wBTC] = 2; // wBTC
        AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_sBTC_POOL][sBTC] = 3; // sBTC
        AMMWrapperStorage.getStorage().curveSupportGetDx[CURVE_sBTC_POOL] = false;

        // register hBTC pool
        // coins, exchange
        AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_hBTC_POOL][hBTC] = 1; // hBTC
        AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_hBTC_POOL][wBTC] = 2; // wBTC
        AMMWrapperStorage.getStorage().curveSupportGetDx[CURVE_hBTC_POOL] = false;

        // register sETH pool
        // coins, exchange
        AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_sETH_POOL][ETH] = 1; // ETH
        AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_sETH_POOL][sETH] = 2; // sETH
        AMMWrapperStorage.getStorage().curveSupportGetDx[CURVE_sETH_POOL] = false;
    }


    /************************************************************
    *                     Getter functions                      *
    *************************************************************/
    function hasPermission(bytes32 _storageId, address _role) external view returns (bool) {
        return permission[_storageId][_role];
    }

    function ammWrapperAddr() public view returns (address) {
        return PSStorage.getStorage().ammWrapperAddr;
    }

    function pmmAddr() public view returns (address) {
        return PSStorage.getStorage().pmmAddr;
    }

    function rfqAddr() public view returns (address) {
        return PSStorage.getStorage().rfqAddr;
    }

    function wethAddr() override external view returns (address) {
        return PSStorage.getStorage().wethAddr;
    }

    function getCurvePoolInfo(address _makerAddr, address _takerAssetAddr, address _makerAssetAddr) override external view returns (int128 takerAssetIndex, int128 makerAssetIndex, uint16 swapMethod, bool supportGetDx) {
        // underlying_coins
        int128 i = AMMWrapperStorage.getStorage().curveTokenIndexes[_makerAddr][_takerAssetAddr];
        int128 j = AMMWrapperStorage.getStorage().curveTokenIndexes[_makerAddr][_makerAssetAddr];
        supportGetDx = AMMWrapperStorage.getStorage().curveSupportGetDx[_makerAddr];

        swapMethod = 0;
        if (i != 0 && j != 0) {
            // in underlying_coins list
            takerAssetIndex = i;
            makerAssetIndex = j;
            // exchange_underlying
            swapMethod = 2;
        } else {
            // in coins list
            int128 iWrapped = AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[_makerAddr][_takerAssetAddr];
            int128 jWrapped = AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[_makerAddr][_makerAssetAddr];
            if (iWrapped != 0 && jWrapped != 0) {
                takerAssetIndex = iWrapped;
                makerAssetIndex = jWrapped;
                // exchange
                swapMethod = 1;
            } else {
                revert("PermanentStorage: invalid pair");
            }
        }
        return (takerAssetIndex, makerAssetIndex, swapMethod, supportGetDx);
    }

    /* 
    NOTE: `isTransactionSeen` is replaced by `isAMMTransactionSeen`. It is kept for backward compatability.
    It should be removed from AMM 5.2.1 upward.
    */
    function isTransactionSeen(bytes32 _transactionHash) override external view returns (bool) {
        return AMMWrapperStorage.getStorage().transactionSeen[_transactionHash];
    }

    function isAMMTransactionSeen(bytes32 _transactionHash) override external view returns (bool) {
        return AMMWrapperStorage.getStorage().transactionSeen[_transactionHash];
    }

    function isRFQTransactionSeen(bytes32 _transactionHash) override external view returns (bool) {
        return RFQStorage.getStorage().transactionSeen[_transactionHash];
    }

    function isRelayerValid(address _relayer) override external view returns (bool) {
        return AMMWrapperStorage.getStorage().relayerValid[_relayer];
    }


    /************************************************************
    *           Management functions for Operator               *
    *************************************************************/
    /// @dev Update AMMWrapper contract address.
    function upgradeAMMWrapper(address _newAMMWrapper) external onlyOperator {
        PSStorage.getStorage().ammWrapperAddr = _newAMMWrapper;

        emit UpgradeAMMWrapper(_newAMMWrapper);
    }

    /// @dev Update PMM contract address.
    function upgradePMM(address _newPMM) external onlyOperator {
        PSStorage.getStorage().pmmAddr = _newPMM;

        emit UpgradePMM(_newPMM);
    }

    /// @dev Update RFQ contract address.
    function upgradeRFQ(address _newRFQ) external onlyOperator {
        PSStorage.getStorage().rfqAddr = _newRFQ;

        emit UpgradeRFQ(_newRFQ);
    }

    /// @dev Update WETH contract address.
    function upgradeWETH(address _newWETH) external onlyOperator {
        PSStorage.getStorage().wethAddr = _newWETH;

        emit UpgradeWETH(_newWETH);
    }


    /************************************************************
    *                   External functions                      *
    *************************************************************/
    function setCurvePoolInfo(address _makerAddr, address[] calldata _underlyingCoins, address[] calldata _coins, bool _supportGetDx) override external isPermitted(curveTokenIndexStorageId, msg.sender) {
        int128 underlyingCoinsLength = int128(_underlyingCoins.length);
        for (int128 i = 0 ; i < underlyingCoinsLength; i++) {
            address assetAddr = _underlyingCoins[uint256(i)];
            // underlying coins for original DAI, USDC, TUSD
            AMMWrapperStorage.getStorage().curveTokenIndexes[_makerAddr][assetAddr] = i + 1;  // Start the index from 1
        }

        int128 coinsLength = int128(_coins.length);
        for (int128 i = 0 ; i < coinsLength; i++) {
            address assetAddr = _coins[uint256(i)];
            // wrapped coins for cDAI, cUSDC, yDAI, yUSDC, yTUSD, yBUSD
            AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[_makerAddr][assetAddr] = i + 1;  // Start the index from 1
        }

        AMMWrapperStorage.getStorage().curveSupportGetDx[_makerAddr] = _supportGetDx;
    }

    /* 
    NOTE: `setTransactionSeen` is replaced by `setAMMTransactionSeen`. It is kept for backward compatability.
    It should be removed from AMM 5.2.1 upward.
    */
    function setTransactionSeen(bytes32 _transactionHash) override external isPermitted(transactionSeenStorageId, msg.sender) {
        require(!AMMWrapperStorage.getStorage().transactionSeen[_transactionHash], "PermanentStorage: transaction seen before");
        AMMWrapperStorage.getStorage().transactionSeen[_transactionHash] = true;
    }

    function setAMMTransactionSeen(bytes32 _transactionHash) override external isPermitted(transactionSeenStorageId, msg.sender) {
        require(!AMMWrapperStorage.getStorage().transactionSeen[_transactionHash], "PermanentStorage: transaction seen before");
        AMMWrapperStorage.getStorage().transactionSeen[_transactionHash] = true;
    }

    function setRFQTransactionSeen(bytes32 _transactionHash) override external isPermitted(transactionSeenStorageId, msg.sender) {
        require(!RFQStorage.getStorage().transactionSeen[_transactionHash], "PermanentStorage: transaction seen before");
        RFQStorage.getStorage().transactionSeen[_transactionHash] = true;
    }

    function setRelayersValid(address[] calldata _relayers, bool[] calldata _isValids) override external isPermitted(relayerValidStorageId, msg.sender) {
        require(_relayers.length == _isValids.length, "PermanentStorage: inputs length mismatch");
        for (uint256 i = 0; i < _relayers.length; i++) {
            AMMWrapperStorage.getStorage().relayerValid[_relayers[i]] = _isValids[i];
        }
    }
}

File 2 of 3 : IPermanentStorage.sol
pragma solidity ^0.6.0;

interface IPermanentStorage {
    function wethAddr() external view returns (address);
    function getCurvePoolInfo(address _makerAddr, address _takerAssetAddr, address _makerAssetAddr) external view returns (int128 takerAssetIndex, int128 makerAssetIndex, uint16 swapMethod, bool supportGetDx);
    function setCurvePoolInfo(address _makerAddr, address[] calldata _underlyingCoins, address[] calldata _coins, bool _supportGetDx) external;
    function isTransactionSeen(bytes32 _transactionHash) external view returns (bool);  // Kept for backward compatability. Should be removed from AMM 5.2.1 upward
    function isAMMTransactionSeen(bytes32 _transactionHash) external view returns (bool);
    function isRFQTransactionSeen(bytes32 _transactionHash) external view returns (bool);
    function isRelayerValid(address _relayer) external view returns (bool);
    function setTransactionSeen(bytes32 _transactionHash) external;  // Kept for backward compatability. Should be removed from AMM 5.2.1 upward
    function setAMMTransactionSeen(bytes32 _transactionHash) external;
    function setRFQTransactionSeen(bytes32 _transactionHash) external;
    function setRelayersValid(address[] memory _relayers, bool[] memory _isValids) external;
}

File 3 of 3 : PSStorage.sol
pragma solidity ^0.6.5;
pragma experimental ABIEncoderV2;

library PSStorage {
    bytes32 private constant STORAGE_SLOT = 0x92dd52b981a2dd69af37d8a3febca29ed6a974aede38ae66e4ef773173aba471;

    struct Storage {
        address ammWrapperAddr;
        address pmmAddr;
        address wethAddr;
        address rfqAddr;
    }

    /// @dev Get the storage bucket for this contract.
    function getStorage() internal pure returns (Storage storage stor) {
        assert(STORAGE_SLOT == bytes32(uint256(keccak256("permanent.storage.storage")) - 1));
        bytes32 slot = STORAGE_SLOT;

        // Dip into assembly to change the slot pointed to by the local
        // variable `stor`.
        // See https://solidity.readthedocs.io/en/v0.6.8/assembly.html?highlight=slot#access-to-external-variables-functions-and-libraries
        assembly { stor_slot := slot }
    }
}

library AMMWrapperStorage {
    bytes32 private constant STORAGE_SLOT = 0xd38d862c9fa97c2fa857a46e08022d272a3579c114ca4f335f1e5fcb692c045e;

    struct Storage {
        mapping(bytes32 => bool) transactionSeen;
        // curve pool => underlying token address => underlying token index
        mapping(address => mapping(address => int128)) curveTokenIndexes;
        mapping(address => bool) relayerValid;
        // 5.1.0 appended storage
        // curve pool => wrapped token address => wrapped token index
        mapping(address => mapping(address => int128)) curveWrappedTokenIndexes;
        mapping(address => bool) curveSupportGetDx;
    }

    /// @dev Get the storage bucket for this contract.
    function getStorage() internal pure returns (Storage storage stor) {
        assert(STORAGE_SLOT == bytes32(uint256(keccak256("permanent.ammwrapper.storage")) - 1));
        bytes32 slot = STORAGE_SLOT;

        // Dip into assembly to change the slot pointed to by the local
        // variable `stor`.
        // See https://solidity.readthedocs.io/en/v0.6.8/assembly.html?highlight=slot#access-to-external-variables-functions-and-libraries
        assembly { stor_slot := slot }
    }
}

library RFQStorage {
    bytes32 private constant STORAGE_SLOT = 0x9174e76494cfb023ddc1eb0effb6c12e107165382bbd0ecfddbc38ea108bbe52;

    struct Storage {
        mapping(bytes32 => bool) transactionSeen;
    }

    /// @dev Get the storage bucket for this contract.
    function getStorage() internal pure returns (Storage storage stor) {
        assert(STORAGE_SLOT == bytes32(uint256(keccak256("permanent.rfq.storage")) - 1));
        bytes32 slot = STORAGE_SLOT;

        // Dip into assembly to change the slot pointed to by the local
        // variable `stor`.
        // See https://solidity.readthedocs.io/en/v0.6.8/assembly.html?highlight=slot#access-to-external-variables-functions-and-libraries
        assembly { stor_slot := slot }
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"storageId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"role","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SetPermission","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOperator","type":"address"}],"name":"TransferOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAMMWrapper","type":"address"}],"name":"UpgradeAMMWrapper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newPMM","type":"address"}],"name":"UpgradePMM","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRFQ","type":"address"}],"name":"UpgradeRFQ","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWETH","type":"address"}],"name":"UpgradeWETH","type":"event"},{"inputs":[],"name":"CURVE_hBTC_POOL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CURVE_renBTC_POOL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CURVE_sBTC_POOL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CURVE_sETH_POOL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ammWrapperAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"curveTokenIndexStorageId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_makerAddr","type":"address"},{"internalType":"address","name":"_takerAssetAddr","type":"address"},{"internalType":"address","name":"_makerAssetAddr","type":"address"}],"name":"getCurvePoolInfo","outputs":[{"internalType":"int128","name":"takerAssetIndex","type":"int128"},{"internalType":"int128","name":"makerAssetIndex","type":"int128"},{"internalType":"uint16","name":"swapMethod","type":"uint16"},{"internalType":"bool","name":"supportGetDx","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_storageId","type":"bytes32"},{"internalType":"address","name":"_role","type":"address"}],"name":"hasPermission","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transactionHash","type":"bytes32"}],"name":"isAMMTransactionSeen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transactionHash","type":"bytes32"}],"name":"isRFQTransactionSeen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"isRelayerValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transactionHash","type":"bytes32"}],"name":"isTransactionSeen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pmmAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"relayerValidStorageId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rfqAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transactionHash","type":"bytes32"}],"name":"setAMMTransactionSeen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_makerAddr","type":"address"},{"internalType":"address[]","name":"_underlyingCoins","type":"address[]"},{"internalType":"address[]","name":"_coins","type":"address[]"},{"internalType":"bool","name":"_supportGetDx","type":"bool"}],"name":"setCurvePoolInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_storageId","type":"bytes32"},{"internalType":"address","name":"_role","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transactionHash","type":"bytes32"}],"name":"setRFQTransactionSeen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_relayers","type":"address[]"},{"internalType":"bool[]","name":"_isValids","type":"bool[]"}],"name":"setRelayersValid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transactionHash","type":"bytes32"}],"name":"setTransactionSeen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transactionSeenStorageId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOperator","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAMMWrapper","type":"address"}],"name":"upgradeAMMWrapper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPMM","type":"address"}],"name":"upgradePMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRFQ","type":"address"}],"name":"upgradeRFQ","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWETH","type":"address"}],"name":"upgradeWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wethAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50611dcf806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80637ecb557a1161010f578063b6f732ae116100a2578063df37438911610071578063df37438914610659578063e4e266e914610676578063e7cc2c8e1461067e578063f2fde38b146106a4576101e5565b8063b6f732ae14610575578063d24a06b71461057d578063d8dd97fb14610299578063dbd1a14a14610585576101e5565b806393e13c64116100de57806393e13c641461027c5780639a69e7341461052a578063a276b0a314610532578063b3bf50501461054f576101e5565b80637ecb557a1461048b5780638014bd97146104b15780638129fc1c146104b95780638ab4a8cc146104c1576101e5565b806354fd4d5011610187578063676ff9cf11610156578063676ff9cf1461043b578063723ca616146104615780637543f38e1461047b5780637d5aa5f414610483576101e5565b806354fd4d501461037a578063570ca735146103f7578063599e4c70146103ff57806365fea8b914610433576101e5565b80632feeea3a116101c35780632feeea3a1461025657806331f42f8e1461027c57806336ef42511461029957806354f0bc79146102b8576101e5565b806328545c0d146101ea578063288e7a121461022a578063298a91fd1461024e575b600080fd5b6102166004803603604081101561020057600080fd5b50803590602001356001600160a01b03166106ca565b604080519115158252519081900360200190f35b6102326106f5565b604080516001600160a01b039092168252519081900360200190f35b61023261070d565b6102166004803603602081101561026c57600080fd5b50356001600160a01b0316610729565b6102166004803603602081101561029257600080fd5b5035610758565b6102b6600480360360208110156102af57600080fd5b5035610776565b005b6102b6600480360360408110156102ce57600080fd5b8101906020810181356401000000008111156102e957600080fd5b8201836020820111156102fb57600080fd5b8035906020019184602083028401116401000000008311171561031d57600080fd5b91939092909160208101903564010000000081111561033b57600080fd5b82018360208201111561034d57600080fd5b8035906020019184602083028401116401000000008311171561036f57600080fd5b509092509050610888565b6103826109d1565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103bc5781810151838201526020016103a4565b50505050905090810190601f1680156103e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610232610a5e565b6102b66004803603606081101561041557600080fd5b508035906001600160a01b0360208201351690604001351515610a6d565b610232610bed565b6102b66004803603602081101561045157600080fd5b50356001600160a01b0316610c05565b610469610cac565b60408051918252519081900360200190f35b610232610cd0565b610232610ce8565b6102b6600480360360208110156104a157600080fd5b50356001600160a01b0316610d04565b610232610da8565b6102b6610dc4565b6104f9600480360360608110156104d757600080fd5b506001600160a01b03813581169160208101358216916040909101351661140e565b60408051600f95860b81529390940b602084015261ffff909116828401521515606082015290519081900360800190f35b6104696115d6565b6102b66004803603602081101561054857600080fd5b50356115fa565b6102b66004803603602081101561056557600080fd5b50356001600160a01b03166116eb565b610232611792565b6102326117ab565b6102b66004803603608081101561059b57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156105c657600080fd5b8201836020820111156105d857600080fd5b803590602001918460208302840111640100000000831117156105fa57600080fd5b91939092909160208101903564010000000081111561061857600080fd5b82018360208201111561062a57600080fd5b8035906020019184602083028401116401000000008311171561064c57600080fd5b91935091503515156117c3565b6102166004803603602081101561066f57600080fd5b50356119c7565b6104696119d1565b6102b66004803603602081101561069457600080fd5b50356001600160a01b03166119f5565b6102b6600480360360208110156106ba57600080fd5b50356001600160a01b0316611a9c565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b73c5424b857f758e906013f3555dad202e4bdb456781565b6000610717611b7e565b600301546001600160a01b0316905090565b6000610733611ba2565b6001600160a01b03929092166000908152600290920160205250604090205460ff1690565b6000610762611ba2565b600092835260205250604090205460ff1690565b3360008181527f5a18bce76b80e4d4ce74360cf8c2ecc0cc16abd99c9fa544ea9e4efc857ede1b60205260409020547f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d0919060ff166108065760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b61080e611ba2565b6000848152602091909152604090205460ff161561085d5760405162461bcd60e51b8152600401808060200182810382526029815260200180611ca66029913960400191505060405180910390fd5b6001610867611ba2565b60009485526020526040909320805460ff1916931515939093179092555050565b3360008181527f5d870303c431e6d36139ba5242eb8ff20cdc3a6fb8ce8e2e4557687eef8fc0d160205260409020547f2c97779b4deaf24e9d46e02ec2699240a957d92782b51165b93878b09dd66f61919060ff166109185760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b8483146109565760405162461bcd60e51b8152600401808060200182810382526028815260200180611c7e6028913960400191505060405180910390fd5b60005b858110156109c85784848281811061096d57fe5b90506020020135151561097e611ba2565b600201600089898581811061098f57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101610959565b50505050505050565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081565b6000546001600160a01b031681565b6000546001600160a01b03163314610ab65760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80828115610b72576000546001600160a01b0382811691161480610af25750610add611792565b6001600160a01b0316816001600160a01b0316145b80610b375750610b00610da8565b6001600160a01b0316816001600160a01b03161480610b375750610b2261070d565b6001600160a01b0316816001600160a01b0316145b610b725760405162461bcd60e51b8152600401808060200182810382526022815260200180611d236022913960400191505060405180910390fd5b60008581526002602090815260408083206001600160a01b03881680855290835292819020805487151560ff1990911681179091558151898152928301939093528181019290925290517fe9f5231bbfb4b32867755b94562215cff6c8998489de8ba20926f8d0980e78189181900360600190a15050505050565b737fc77b5c7614e1533320ea6ddc2eb61fa00a971481565b6000546001600160a01b03163314610c4e5760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80610c57611b7e565b60020180546001600160a01b0319166001600160a01b03928316179055604080519183168252517f428fc47aa2e09c6530ff76342b0c8f8dd404ccff45f05ab269d91245e8229157916020908290030190a150565b7f2c97779b4deaf24e9d46e02ec2699240a957d92782b51165b93878b09dd66f6181565b734ca9b3063ec5866a4b82e437059d2c43d1be596f81565b6000610cf2611b7e565b600201546001600160a01b0316905090565b6000546001600160a01b03163314610d4d5760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80610d56611b7e565b80546001600160a01b0319166001600160a01b03928316179055604080519183168252517fe3f9ba76e59e03b4e1255783bc2d5340338b8bc071086d3e32e5ddff4fc85553916020908290030190a150565b6000610db2611b7e565b600101546001600160a01b0316905090565b60405160200180807f352e312e3000000000000000000000000000000000000000000000000000000081525060050190506040516020818303038152906040528051906020012060016040516020018082805460018160011615610100020316600290048015610e6b5780601f10610e49576101008083540402835291820191610e6b565b820191906000526020600020905b815481529060010190602001808311610e57575b50509150506040516020818303038152906040528051906020012014610ec25760405162461bcd60e51b8152600401808060200182810382526032815260200180611ccf6032913960400191505060405180910390fd5b6040805180820190915260058082527f352e322e300000000000000000000000000000000000000000000000000000006020909201918252610f0691600191611bea565b506001610f11611ba2565b7393054188d876f558f4a66b2ef1d97d16edf0895b60009081526003919091016020908152604080832073eb4c2781e4eba804ce9a9803c67d0893436bb27d845290915290208054600f9290920b6001600160801b03166001600160801b03199092169190911790556002610f84611ba2565b7393054188d876f558f4a66b2ef1d97d16edf0895b600090815260039190910160209081526040808320732260fac5e5542a773aa44fbcfedf7c193bc2c599845290915281208054600f9390930b6001600160801b03166001600160801b031990931692909217909155610ff6611ba2565b7393054188d876f558f4a66b2ef1d97d16edf0895b600090815260049190910160205260409020805460ff19169115159190911790556001611036611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a971460009081526003919091016020908152604080832073eb4c2781e4eba804ce9a9803c67d0893436bb27d845290915290208054600f9290920b6001600160801b03166001600160801b031990921691909117905560026110a9611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a97146000908152600391820160209081526040808320732260fac5e5542a773aa44fbcfedf7c193bc2c599845290915290208054600f9390930b6001600160801b03166001600160801b03199093169290921790915561111a611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a971460009081526003919091016020908152604080832073fe18be6b3bd88a2d2a7f928d00292e7a9963cfc6845290915281208054600f9390930b6001600160801b03166001600160801b03199093169290921790915561118c611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a9714600090815260049190910160205260409020805460ff191691151591909117905560016111cc611ba2565b734ca9b3063ec5866a4b82e437059d2c43d1be596f600090815260039190910160209081526040808320730316eb71485b0ab14103307bf65a021042c6d380845290915290208054600f9290920b6001600160801b03166001600160801b0319909216919091179055600261123f611ba2565b734ca9b3063ec5866a4b82e437059d2c43d1be596f600090815260039190910160209081526040808320732260fac5e5542a773aa44fbcfedf7c193bc2c599845290915281208054600f9390930b6001600160801b03166001600160801b0319909316929092179091556112b1611ba2565b734ca9b3063ec5866a4b82e437059d2c43d1be596f600090815260049190910160205260409020805460ff191691151591909117905560016112f1611ba2565b73c5424b857f758e906013f3555dad202e4bdb456760009081526003919091016020908152604080832073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee845290915290208054600f9290920b6001600160801b03166001600160801b03199092169190911790556002611364611ba2565b73c5424b857f758e906013f3555dad202e4bdb4567600090815260039190910160209081526040808320735e74c9036fb86bd7ecdcb084a0673efc32ea31cb845290915281208054600f9390930b6001600160801b03166001600160801b0319909316929092179091556113d6611ba2565b73c5424b857f758e906013f3555dad202e4bdb4567600090815260049190910160205260409020805460ff1916911515919091179055565b600080600080600061141e611ba2565b6001600160a01b03808a16600090815260019290920160209081526040808420928b168452919052812054600f0b9150611456611ba2565b6001600160a01b03808b16600090815260019290920160209081526040808420928b168452919052902054600f0b905061148e611ba2565b6001600160a01b038a166000908152600491909101602052604081205490945060ff169250600f82900b158015906114ca575080600f0b600014155b156114de57819550809450600293506115cb565b60006114e8611ba2565b6001600160a01b03808c16600090815260039290920160209081526040808420928d168452919052812054600f0b9150611520611ba2565b6001600160a01b03808d16600090815260039290920160209081526040808420928d168452919052902054600f90810b915082900b15801590611567575080600f0b600014155b1561157b57819750809650600195506115c8565b6040805162461bcd60e51b815260206004820152601e60248201527f5065726d616e656e7453746f726167653a20696e76616c696420706169720000604482015290519081900360640190fd5b50505b505093509350935093565b7f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d081565b3360008181527f5a18bce76b80e4d4ce74360cf8c2ecc0cc16abd99c9fa544ea9e4efc857ede1b60205260409020547f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d0919060ff1661168a5760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b611692611bc6565b6000848152602091909152604090205460ff16156116e15760405162461bcd60e51b8152600401808060200182810382526029815260200180611ca66029913960400191505060405180910390fd5b6001610867611bc6565b6000546001600160a01b031633146117345760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b8061173d611b7e565b60030180546001600160a01b0319166001600160a01b03928316179055604080519183168252517f28e34087108910d7a3d1de15bdebe33e9b7ce4be78c6987103983875f4fbb903916020908290030190a150565b600061179c611b7e565b546001600160a01b0316905090565b7393054188d876f558f4a66b2ef1d97d16edf0895b81565b3360008181527f167956591df432401c2bb34aca57b58f945baf26fdec2c15edae08f4a2f06bed60205260409020547ff4c750cdce673f6c35898d215e519b86e3846b1f0532fb48b84fe9d80f6de2fc919060ff166118535760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b8560005b81600f0b81600f0b12156118e9576000898983600f0b81811061187657fe5b905060200201356001600160a01b0316905081600101611894611ba2565b6001600160a01b03808e166000908152600192830160209081526040808320969093168252949094529092208054600f9290920b6001600160801b03166001600160801b031990921691909117905501611857565b508460005b81600f0b81600f0b1215611984576000888883600f0b81811061190d57fe5b905060200201356001600160a01b031690508160010161192b611ba2565b6001600160a01b03808f1660009081526003929092016020908152604080842095909216835293909352919091208054600f9290920b6001600160801b03166001600160801b03199092169190911790556001016118ee565b508461198e611ba2565b6001600160a01b039b909b1660009081526004909b016020526040909a20805460ff19169a15159a909a17909955505050505050505050565b6000610762611bc6565b7ff4c750cdce673f6c35898d215e519b86e3846b1f0532fb48b84fe9d80f6de2fc81565b6000546001600160a01b03163314611a3e5760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80611a47611b7e565b60010180546001600160a01b0319166001600160a01b03928316179055604080519183168252517f474dbe0e44f4b1a24e66b1a543293f696f5f72651de8895adf45233e3c6948bb916020908290030190a150565b6000546001600160a01b03163314611ae55760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b6001600160a01b038116611b2a5760405162461bcd60e51b8152600401808060200182810382526032815260200180611d686032913960400191505060405180910390fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fcfaaa26691e16e66e73290fc725eee1a6b4e0e693a1640484937aac25ffb55a49181900360200190a150565b7f92dd52b981a2dd69af37d8a3febca29ed6a974aede38ae66e4ef773173aba47190565b7fd38d862c9fa97c2fa857a46e08022d272a3579c114ca4f335f1e5fcb692c045e90565b7f9174e76494cfb023ddc1eb0effb6c12e107165382bbd0ecfddbc38ea108bbe5290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611c2b57805160ff1916838001178555611c58565b82800160010185558215611c58579182015b82811115611c58578251825591602001919060010190611c3d565b50611c64929150611c68565b5090565b5b80821115611c645760008155600101611c6956fe5065726d616e656e7453746f726167653a20696e70757473206c656e677468206d69736d617463685065726d616e656e7453746f726167653a207472616e73616374696f6e207365656e206265666f72655065726d616e656e7453746f726167653a206e6f7420757067726164696e672066726f6d20352e312e302076657273696f6e5065726d616e656e7453746f726167653a206e6f7420746865206f70657261746f725065726d616e656e7453746f726167653a206e6f7420612076616c696420726f6c655065726d616e656e7453746f726167653a20686173206e6f207065726d697373696f6e5065726d616e656e7453746f726167653a206f70657261746f722063616e206e6f74206265207a65726f2061646472657373a264697066735822122065afd0c2cb931077cd35e9247e81473007383749c8362ecb0a44bd5f897745c064736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80637ecb557a1161010f578063b6f732ae116100a2578063df37438911610071578063df37438914610659578063e4e266e914610676578063e7cc2c8e1461067e578063f2fde38b146106a4576101e5565b8063b6f732ae14610575578063d24a06b71461057d578063d8dd97fb14610299578063dbd1a14a14610585576101e5565b806393e13c64116100de57806393e13c641461027c5780639a69e7341461052a578063a276b0a314610532578063b3bf50501461054f576101e5565b80637ecb557a1461048b5780638014bd97146104b15780638129fc1c146104b95780638ab4a8cc146104c1576101e5565b806354fd4d5011610187578063676ff9cf11610156578063676ff9cf1461043b578063723ca616146104615780637543f38e1461047b5780637d5aa5f414610483576101e5565b806354fd4d501461037a578063570ca735146103f7578063599e4c70146103ff57806365fea8b914610433576101e5565b80632feeea3a116101c35780632feeea3a1461025657806331f42f8e1461027c57806336ef42511461029957806354f0bc79146102b8576101e5565b806328545c0d146101ea578063288e7a121461022a578063298a91fd1461024e575b600080fd5b6102166004803603604081101561020057600080fd5b50803590602001356001600160a01b03166106ca565b604080519115158252519081900360200190f35b6102326106f5565b604080516001600160a01b039092168252519081900360200190f35b61023261070d565b6102166004803603602081101561026c57600080fd5b50356001600160a01b0316610729565b6102166004803603602081101561029257600080fd5b5035610758565b6102b6600480360360208110156102af57600080fd5b5035610776565b005b6102b6600480360360408110156102ce57600080fd5b8101906020810181356401000000008111156102e957600080fd5b8201836020820111156102fb57600080fd5b8035906020019184602083028401116401000000008311171561031d57600080fd5b91939092909160208101903564010000000081111561033b57600080fd5b82018360208201111561034d57600080fd5b8035906020019184602083028401116401000000008311171561036f57600080fd5b509092509050610888565b6103826109d1565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103bc5781810151838201526020016103a4565b50505050905090810190601f1680156103e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610232610a5e565b6102b66004803603606081101561041557600080fd5b508035906001600160a01b0360208201351690604001351515610a6d565b610232610bed565b6102b66004803603602081101561045157600080fd5b50356001600160a01b0316610c05565b610469610cac565b60408051918252519081900360200190f35b610232610cd0565b610232610ce8565b6102b6600480360360208110156104a157600080fd5b50356001600160a01b0316610d04565b610232610da8565b6102b6610dc4565b6104f9600480360360608110156104d757600080fd5b506001600160a01b03813581169160208101358216916040909101351661140e565b60408051600f95860b81529390940b602084015261ffff909116828401521515606082015290519081900360800190f35b6104696115d6565b6102b66004803603602081101561054857600080fd5b50356115fa565b6102b66004803603602081101561056557600080fd5b50356001600160a01b03166116eb565b610232611792565b6102326117ab565b6102b66004803603608081101561059b57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156105c657600080fd5b8201836020820111156105d857600080fd5b803590602001918460208302840111640100000000831117156105fa57600080fd5b91939092909160208101903564010000000081111561061857600080fd5b82018360208201111561062a57600080fd5b8035906020019184602083028401116401000000008311171561064c57600080fd5b91935091503515156117c3565b6102166004803603602081101561066f57600080fd5b50356119c7565b6104696119d1565b6102b66004803603602081101561069457600080fd5b50356001600160a01b03166119f5565b6102b6600480360360208110156106ba57600080fd5b50356001600160a01b0316611a9c565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b73c5424b857f758e906013f3555dad202e4bdb456781565b6000610717611b7e565b600301546001600160a01b0316905090565b6000610733611ba2565b6001600160a01b03929092166000908152600290920160205250604090205460ff1690565b6000610762611ba2565b600092835260205250604090205460ff1690565b3360008181527f5a18bce76b80e4d4ce74360cf8c2ecc0cc16abd99c9fa544ea9e4efc857ede1b60205260409020547f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d0919060ff166108065760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b61080e611ba2565b6000848152602091909152604090205460ff161561085d5760405162461bcd60e51b8152600401808060200182810382526029815260200180611ca66029913960400191505060405180910390fd5b6001610867611ba2565b60009485526020526040909320805460ff1916931515939093179092555050565b3360008181527f5d870303c431e6d36139ba5242eb8ff20cdc3a6fb8ce8e2e4557687eef8fc0d160205260409020547f2c97779b4deaf24e9d46e02ec2699240a957d92782b51165b93878b09dd66f61919060ff166109185760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b8483146109565760405162461bcd60e51b8152600401808060200182810382526028815260200180611c7e6028913960400191505060405180910390fd5b60005b858110156109c85784848281811061096d57fe5b90506020020135151561097e611ba2565b600201600089898581811061098f57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101610959565b50505050505050565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081565b6000546001600160a01b031681565b6000546001600160a01b03163314610ab65760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80828115610b72576000546001600160a01b0382811691161480610af25750610add611792565b6001600160a01b0316816001600160a01b0316145b80610b375750610b00610da8565b6001600160a01b0316816001600160a01b03161480610b375750610b2261070d565b6001600160a01b0316816001600160a01b0316145b610b725760405162461bcd60e51b8152600401808060200182810382526022815260200180611d236022913960400191505060405180910390fd5b60008581526002602090815260408083206001600160a01b03881680855290835292819020805487151560ff1990911681179091558151898152928301939093528181019290925290517fe9f5231bbfb4b32867755b94562215cff6c8998489de8ba20926f8d0980e78189181900360600190a15050505050565b737fc77b5c7614e1533320ea6ddc2eb61fa00a971481565b6000546001600160a01b03163314610c4e5760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80610c57611b7e565b60020180546001600160a01b0319166001600160a01b03928316179055604080519183168252517f428fc47aa2e09c6530ff76342b0c8f8dd404ccff45f05ab269d91245e8229157916020908290030190a150565b7f2c97779b4deaf24e9d46e02ec2699240a957d92782b51165b93878b09dd66f6181565b734ca9b3063ec5866a4b82e437059d2c43d1be596f81565b6000610cf2611b7e565b600201546001600160a01b0316905090565b6000546001600160a01b03163314610d4d5760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80610d56611b7e565b80546001600160a01b0319166001600160a01b03928316179055604080519183168252517fe3f9ba76e59e03b4e1255783bc2d5340338b8bc071086d3e32e5ddff4fc85553916020908290030190a150565b6000610db2611b7e565b600101546001600160a01b0316905090565b60405160200180807f352e312e3000000000000000000000000000000000000000000000000000000081525060050190506040516020818303038152906040528051906020012060016040516020018082805460018160011615610100020316600290048015610e6b5780601f10610e49576101008083540402835291820191610e6b565b820191906000526020600020905b815481529060010190602001808311610e57575b50509150506040516020818303038152906040528051906020012014610ec25760405162461bcd60e51b8152600401808060200182810382526032815260200180611ccf6032913960400191505060405180910390fd5b6040805180820190915260058082527f352e322e300000000000000000000000000000000000000000000000000000006020909201918252610f0691600191611bea565b506001610f11611ba2565b7393054188d876f558f4a66b2ef1d97d16edf0895b60009081526003919091016020908152604080832073eb4c2781e4eba804ce9a9803c67d0893436bb27d845290915290208054600f9290920b6001600160801b03166001600160801b03199092169190911790556002610f84611ba2565b7393054188d876f558f4a66b2ef1d97d16edf0895b600090815260039190910160209081526040808320732260fac5e5542a773aa44fbcfedf7c193bc2c599845290915281208054600f9390930b6001600160801b03166001600160801b031990931692909217909155610ff6611ba2565b7393054188d876f558f4a66b2ef1d97d16edf0895b600090815260049190910160205260409020805460ff19169115159190911790556001611036611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a971460009081526003919091016020908152604080832073eb4c2781e4eba804ce9a9803c67d0893436bb27d845290915290208054600f9290920b6001600160801b03166001600160801b031990921691909117905560026110a9611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a97146000908152600391820160209081526040808320732260fac5e5542a773aa44fbcfedf7c193bc2c599845290915290208054600f9390930b6001600160801b03166001600160801b03199093169290921790915561111a611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a971460009081526003919091016020908152604080832073fe18be6b3bd88a2d2a7f928d00292e7a9963cfc6845290915281208054600f9390930b6001600160801b03166001600160801b03199093169290921790915561118c611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a9714600090815260049190910160205260409020805460ff191691151591909117905560016111cc611ba2565b734ca9b3063ec5866a4b82e437059d2c43d1be596f600090815260039190910160209081526040808320730316eb71485b0ab14103307bf65a021042c6d380845290915290208054600f9290920b6001600160801b03166001600160801b0319909216919091179055600261123f611ba2565b734ca9b3063ec5866a4b82e437059d2c43d1be596f600090815260039190910160209081526040808320732260fac5e5542a773aa44fbcfedf7c193bc2c599845290915281208054600f9390930b6001600160801b03166001600160801b0319909316929092179091556112b1611ba2565b734ca9b3063ec5866a4b82e437059d2c43d1be596f600090815260049190910160205260409020805460ff191691151591909117905560016112f1611ba2565b73c5424b857f758e906013f3555dad202e4bdb456760009081526003919091016020908152604080832073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee845290915290208054600f9290920b6001600160801b03166001600160801b03199092169190911790556002611364611ba2565b73c5424b857f758e906013f3555dad202e4bdb4567600090815260039190910160209081526040808320735e74c9036fb86bd7ecdcb084a0673efc32ea31cb845290915281208054600f9390930b6001600160801b03166001600160801b0319909316929092179091556113d6611ba2565b73c5424b857f758e906013f3555dad202e4bdb4567600090815260049190910160205260409020805460ff1916911515919091179055565b600080600080600061141e611ba2565b6001600160a01b03808a16600090815260019290920160209081526040808420928b168452919052812054600f0b9150611456611ba2565b6001600160a01b03808b16600090815260019290920160209081526040808420928b168452919052902054600f0b905061148e611ba2565b6001600160a01b038a166000908152600491909101602052604081205490945060ff169250600f82900b158015906114ca575080600f0b600014155b156114de57819550809450600293506115cb565b60006114e8611ba2565b6001600160a01b03808c16600090815260039290920160209081526040808420928d168452919052812054600f0b9150611520611ba2565b6001600160a01b03808d16600090815260039290920160209081526040808420928d168452919052902054600f90810b915082900b15801590611567575080600f0b600014155b1561157b57819750809650600195506115c8565b6040805162461bcd60e51b815260206004820152601e60248201527f5065726d616e656e7453746f726167653a20696e76616c696420706169720000604482015290519081900360640190fd5b50505b505093509350935093565b7f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d081565b3360008181527f5a18bce76b80e4d4ce74360cf8c2ecc0cc16abd99c9fa544ea9e4efc857ede1b60205260409020547f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d0919060ff1661168a5760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b611692611bc6565b6000848152602091909152604090205460ff16156116e15760405162461bcd60e51b8152600401808060200182810382526029815260200180611ca66029913960400191505060405180910390fd5b6001610867611bc6565b6000546001600160a01b031633146117345760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b8061173d611b7e565b60030180546001600160a01b0319166001600160a01b03928316179055604080519183168252517f28e34087108910d7a3d1de15bdebe33e9b7ce4be78c6987103983875f4fbb903916020908290030190a150565b600061179c611b7e565b546001600160a01b0316905090565b7393054188d876f558f4a66b2ef1d97d16edf0895b81565b3360008181527f167956591df432401c2bb34aca57b58f945baf26fdec2c15edae08f4a2f06bed60205260409020547ff4c750cdce673f6c35898d215e519b86e3846b1f0532fb48b84fe9d80f6de2fc919060ff166118535760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b8560005b81600f0b81600f0b12156118e9576000898983600f0b81811061187657fe5b905060200201356001600160a01b0316905081600101611894611ba2565b6001600160a01b03808e166000908152600192830160209081526040808320969093168252949094529092208054600f9290920b6001600160801b03166001600160801b031990921691909117905501611857565b508460005b81600f0b81600f0b1215611984576000888883600f0b81811061190d57fe5b905060200201356001600160a01b031690508160010161192b611ba2565b6001600160a01b03808f1660009081526003929092016020908152604080842095909216835293909352919091208054600f9290920b6001600160801b03166001600160801b03199092169190911790556001016118ee565b508461198e611ba2565b6001600160a01b039b909b1660009081526004909b016020526040909a20805460ff19169a15159a909a17909955505050505050505050565b6000610762611bc6565b7ff4c750cdce673f6c35898d215e519b86e3846b1f0532fb48b84fe9d80f6de2fc81565b6000546001600160a01b03163314611a3e5760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80611a47611b7e565b60010180546001600160a01b0319166001600160a01b03928316179055604080519183168252517f474dbe0e44f4b1a24e66b1a543293f696f5f72651de8895adf45233e3c6948bb916020908290030190a150565b6000546001600160a01b03163314611ae55760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b6001600160a01b038116611b2a5760405162461bcd60e51b8152600401808060200182810382526032815260200180611d686032913960400191505060405180910390fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fcfaaa26691e16e66e73290fc725eee1a6b4e0e693a1640484937aac25ffb55a49181900360200190a150565b7f92dd52b981a2dd69af37d8a3febca29ed6a974aede38ae66e4ef773173aba47190565b7fd38d862c9fa97c2fa857a46e08022d272a3579c114ca4f335f1e5fcb692c045e90565b7f9174e76494cfb023ddc1eb0effb6c12e107165382bbd0ecfddbc38ea108bbe5290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611c2b57805160ff1916838001178555611c58565b82800160010185558215611c58579182015b82811115611c58578251825591602001919060010190611c3d565b50611c64929150611c68565b5090565b5b80821115611c645760008155600101611c6956fe5065726d616e656e7453746f726167653a20696e70757473206c656e677468206d69736d617463685065726d616e656e7453746f726167653a207472616e73616374696f6e207365656e206265666f72655065726d616e656e7453746f726167653a206e6f7420757067726164696e672066726f6d20352e312e302076657273696f6e5065726d616e656e7453746f726167653a206e6f7420746865206f70657261746f725065726d616e656e7453746f726167653a206e6f7420612076616c696420726f6c655065726d616e656e7453746f726167653a20686173206e6f207065726d697373696f6e5065726d616e656e7453746f726167653a206f70657261746f722063616e206e6f74206265207a65726f2061646472657373a264697066735822122065afd0c2cb931077cd35e9247e81473007383749c8362ecb0a44bd5f897745c064736f6c634300060c0033

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  ]

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.