ETH Price: $2,614.44 (+0.87%)

Contract

0x8546d774e5D07b3517d0Cd54f38dD39eA9Eb9AEA
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040202702182024-07-09 16:46:1199 days ago1720543571IN
 Create: LiquidityManager
0 ETH0.014378557.65948577

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LiquidityManager

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 999999 runs

Other Settings:
cancun EvmVersion
File 1 of 5 : LiquidityManager.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

import "./IERC20.sol";
import "./ISwapsPair.sol";
import "./ISwapsRouter.sol";

contract LiquidityManager {

    address public owner;
    address public worker;

    ISwapsPair public pair;
    ISwapsRouter public router;

    address public token0;
    address public token1;

    modifier onlyOwner() {
        require(
            msg.sender == owner,
            "Caller is not the owner"
        );
        _;
    }

    modifier onlyWorker() {
        require(
            msg.sender == worker,
            "Caller is not the worker"
        );
        _;
    }

    event LogQuote(
        uint256 requiredWethForSwap,
        uint256 minAmountVerseToBuy,
        uint256 reserve0,
        uint256 reserve1
    );

    event LogOut(
        uint256 amountWeth,
        uint256 amountVerse
    );

    event LogAdded(
        uint256 addedVerse,
        uint256 addedWeth,
        uint256 liquidity
    );

    constructor() {

        owner = msg.sender;
        worker = msg.sender;

        router = ISwapsRouter(
            0xB4B0ea46Fe0E9e8EAB4aFb765b527739F2718671
        );

        token0 = 0x249cA82617eC3DfB2589c4c17ab7EC9765350a18;
        token1 = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

        IERC20(token0).approve(
            address(router),
            type(uint256).max
        );

        IERC20(token1).approve(
            address(router),
            type(uint256).max
        );

        pair = ISwapsPair(
            router.pairFor(
                router.FACTORY(),
                token0,
                token1
            )
        );

        pair.approve(
            address(router),
            type(uint256).max
        );
    }

    function buyBackVerseToken(
        uint256 _liquidityAmountToUse,
        uint256 _expectMinVerseRemoved,
        uint256 _expectMinWethRemoved,
        uint256 _minAmountVerseToBuy,
        uint256 _maxAmountWethForSwap,
        uint256 _desiredVerseToAddBack,
        uint256 _desiredWethToAddBack,
        uint256 _expectMinVerseToAddBack,
        uint256 _expectMinWethToAddBack
    )
        external
        onlyWorker
    {
        pair.approve(
            address(router),
            _liquidityAmountToUse
        );

        (
            uint256 _amountVerse,
            uint256 _amountWeth
        ) = router.removeLiquidity(
            token0,
            token1,
            _liquidityAmountToUse,
            _expectMinVerseRemoved,
            _expectMinWethRemoved,
            address(this),
            block.timestamp
        );

        emit LogOut(
            _amountWeth,
            _amountVerse
        );

        (
            uint256 reserve0,
            uint256 reserve1,
        ) = pair.getReserves();

        uint256 requiredWethForSwap = router.quote(
            _minAmountVerseToBuy,
            reserve0,
            reserve1
        );

        emit LogQuote(
            requiredWethForSwap,
            _minAmountVerseToBuy,
            reserve0,
            reserve1
        );

        if (requiredWethForSwap > _maxAmountWethForSwap) {
            revert("LiquidityManager: TOO_EXPENSIVE");
        }

        router.swapExactTokensForTokens(
            _maxAmountWethForSwap,
            _minAmountVerseToBuy,
            _getSwapPathFromWethToVerse(),
            address(this),
            block.timestamp
        );

        IERC20(token0).approve(
            address(router),
            _desiredVerseToAddBack
        );

        IERC20(token1).approve(
            address(router),
            _desiredWethToAddBack
        );

        (
            uint256 addedVerse,
            uint256 addedWeth,
            uint256 liquidity
        ) = router.addLiquidity(
            token0,
            token1,
            _desiredVerseToAddBack,
            _desiredWethToAddBack,
            _expectMinVerseToAddBack,
            _expectMinWethToAddBack,
            address(this),
            block.timestamp
        );

        emit LogAdded(
            addedVerse,
            addedWeth,
            liquidity
        );
    }

    function buyBackVerseTokenSimple(
        uint256 _liquidityAmountToUse,
        uint256 _expectMinVerseRemoved,
        uint256 _expectMinWethRemoved,
        uint256 _minAmountVerseToBuy,
        uint256 _maxAmountWethForSwap,
        uint256 _expectMinVerseToAddBack,
        uint256 _expectMinWethToAddBack
    )
        external
        onlyWorker
    {
        (
            uint256 _amountVerse,
            uint256 _amountWeth
        ) = router.removeLiquidity(
            token0,
            token1,
            _liquidityAmountToUse,
            _expectMinVerseRemoved,
            _expectMinWethRemoved,
            address(this),
            block.timestamp
        );

        emit LogOut(
            _amountWeth,
            _amountVerse
        );

        (
            uint256 reserve0,
            uint256 reserve1,
        ) = pair.getReserves();

        uint256 requiredWethForSwap = router.quote(
            _minAmountVerseToBuy,
            reserve0,
            reserve1
        );

        emit LogQuote(
            requiredWethForSwap,
            _minAmountVerseToBuy,
            reserve0,
            reserve1
        );

        if (requiredWethForSwap > _maxAmountWethForSwap) {
            revert("LiquidityManager: TOO_EXPENSIVE");
        }

        router.swapExactTokensForTokens(
            _maxAmountWethForSwap,
            _minAmountVerseToBuy,
            _getSwapPathFromWethToVerse(),
            address(this),
            block.timestamp
        );

        (
            uint256 addedVerse,
            uint256 addedWeth,
            uint256 liquidity
        ) = router.addLiquidity(
            token0,
            token1,
            IERC20(token0).balanceOf(address(this)),
            IERC20(token1).balanceOf(address(this)),
            _expectMinVerseToAddBack,
            _expectMinWethToAddBack,
            address(this),
            block.timestamp
        );

        emit LogAdded(
            addedVerse,
            addedWeth,
            liquidity
        );
    }

    function withdrawTokens(
        address _token,
        address _to,
        uint256 _amount
    )
        external
        onlyOwner
    {
        IERC20(_token).transfer(
            _to,
            _amount
        );
    }

    function withdrawETH(
        address _to,
        uint256 _amount
    )
        external
        onlyOwner
    {
        payable(_to).transfer(
            _amount
        );
    }

    function setWorker(
        address _worker
    )
        external
        onlyOwner
    {
        worker = _worker;
    }

    function setOwner(
        address _owner
    )
        external
        onlyOwner
    {
        owner = _owner;
    }

    function getVerseBalanceSelf()
        public
        view
        returns (uint256)
    {
        return IERC20(token0).balanceOf(
            address(this)
        );
    }

    function getWethBalanceSelf()
        public
        view
        returns (uint256)
    {
        return IERC20(token1).balanceOf(
            address(this)
        );
    }

    function getOptimalParameters(
        uint256 _liquidityAmountToUse,
        uint256 _maxAmountWethForSwap
    )
        external
        view
        returns (
            uint256 _expectMinVerseRemoved,
            uint256 _expectMinWethRemoved,
            uint256 _minAmountVerseToBuy,
            uint256 _expectMinVerseToAddBack,
            uint256 _expectMinWethToAddBack
        )
    {
        (
            uint256 reserve0,
            uint256 reserve1,
        ) = pair.getReserves();

        uint256 totalSupply = pair.totalSupply();

        // Calculate the amounts of Verse and WETH that will be removed
        _expectMinVerseRemoved = _liquidityAmountToUse
            * reserve0
            / totalSupply;

        _expectMinWethRemoved = _liquidityAmountToUse
            * reserve1
            / totalSupply;

        // New reserves after liquidity removal
        uint256 newReserve0 = reserve0
            - _expectMinVerseRemoved;

        uint256 newReserve1 = reserve1
            - _expectMinWethRemoved;

        // Calculate the maximum amount of Verse that can be bought with _maxAmountWethForSwap
        _minAmountVerseToBuy = router.getAmountOut(
            _maxAmountWethForSwap,
            newReserve1,
            newReserve0
        );

        uint256 verseAfterSwap = _expectMinVerseRemoved
            - _minAmountVerseToBuy;

        _expectMinVerseToAddBack = verseAfterSwap
            * _expectMinWethRemoved
            / newReserve1;

        // _expectMinWethToAddBack should be the same as the amount of WETH removed
        _expectMinWethToAddBack = _expectMinWethRemoved;

        return (
            _expectMinVerseRemoved,
            _expectMinWethRemoved,
            _minAmountVerseToBuy,
            _expectMinVerseToAddBack,
            _expectMinWethToAddBack
        );
    }

    function _getSwapPathFromWethToVerse()
        private
        view
        returns (address[] memory path)
    {
        path = new address[](2);
        path[0] = token1; // WETH
        path[1] = token0; // VERSE
    }
}

File 2 of 5 : IERC20.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

interface IERC20 {

    function balanceOf(
        address _owner
    )
        external
        view
        returns (uint256);

    function transfer(
        address _to,
        uint256 _value
    )
        external
        returns (bool);

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    )
        external
        returns (bool);

    function approve(
        address _spender,
        uint256 _value
    )
        external
        returns (bool);
}

File 3 of 5 : ISwapsPair.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

import "./ISwapsERC20.sol";

interface ISwapsPair is ISwapsERC20 {

    function MINIMUM_LIQUIDITY()
        external
        pure
        returns (uint256);

    function factory()
        external
        view
        returns (address);

    function token0()
        external
        view
        returns (address);

    function token1()
        external
        view
        returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast()
        external
        view
        returns (uint256);

    function price1CumulativeLast()
        external
        view
        returns (uint256);

    function kLast()
        external
        view
        returns (uint256);

    function mint(
        address _to
    )
        external
        returns (uint256 liquidity);

    function burn(
        address _to
    )
        external
        returns (
            uint256 amount0,
            uint256 amount1
        );

    function swap(
        uint256 _amount0Out,
        uint256 _amount1Out,
        address _to,
        bytes calldata _data
    )
        external;

    function skim()
        external;

    function initialize(
        address,
        address
    )
        external;
}

File 4 of 5 : ISwapsRouter.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

interface ISwapsRouter {

    function WETH()
        external
        returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint[] memory amounts
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB
        );

    function getReserves(
        address factory,
        address tokenA,
        address tokenB
    )
        external
        view
        returns (
            uint112 reserveA,
            uint112 reserveB,
            uint32 blockTimestampLast
        );

    function FACTORY()
        external
        view
        returns (address);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    )
        external
        pure
        returns (uint256 amountB);

    function pairFor(
        address factory,
        address tokenA,
        address tokenB
    )
        external
        pure
        returns (address);

    function getAmountOut(
        uint256 _amountIn,
        uint256 _reserveIn,
        uint256 _reserveOut
    )
        external
        pure
        returns (uint256 amountOut);
}

File 5 of 5 : ISwapsERC20.sol
// SPDX-License-Identifier: BCOM

pragma solidity =0.8.25;

interface ISwapsERC20 {

    function name()
        external
        pure
        returns (string memory);

    function symbol()
        external
        pure
        returns (string memory);

    function decimals()
        external
        pure
        returns (uint8);

    function totalSupply()
        external
        view
        returns (uint256);

    function balanceOf(
        address _owner
    )
        external
        view
        returns (uint256);

    function allowance(
        address _owner,
        address _spender
    )
        external
        view
        returns (uint256);

    function approve(
        address _spender,
        uint256 _value
    )
        external
        returns (bool);

    function transfer(
        address _to,
        uint256 _value
    )
        external
        returns (bool);

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    )
        external
        returns (bool);

    function DOMAIN_SEPARATOR()
        external
        view
        returns (bytes32);

    function PERMIT_TYPEHASH()
        external
        pure
        returns (bytes32);

    function nonces(
        address _owner
    )
        external
        view
        returns (uint256);

    function permit(
        address _owner,
        address _spender,
        uint256 _value,
        uint256 _deadline,
        uint8 _v,
        bytes32 _r,
        bytes32 _s
    )
        external;
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"addedVerse","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"addedWeth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"LogAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountWeth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountVerse","type":"uint256"}],"name":"LogOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requiredWethForSwap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmountVerseToBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserve0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserve1","type":"uint256"}],"name":"LogQuote","type":"event"},{"inputs":[{"internalType":"uint256","name":"_liquidityAmountToUse","type":"uint256"},{"internalType":"uint256","name":"_expectMinVerseRemoved","type":"uint256"},{"internalType":"uint256","name":"_expectMinWethRemoved","type":"uint256"},{"internalType":"uint256","name":"_minAmountVerseToBuy","type":"uint256"},{"internalType":"uint256","name":"_maxAmountWethForSwap","type":"uint256"},{"internalType":"uint256","name":"_desiredVerseToAddBack","type":"uint256"},{"internalType":"uint256","name":"_desiredWethToAddBack","type":"uint256"},{"internalType":"uint256","name":"_expectMinVerseToAddBack","type":"uint256"},{"internalType":"uint256","name":"_expectMinWethToAddBack","type":"uint256"}],"name":"buyBackVerseToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityAmountToUse","type":"uint256"},{"internalType":"uint256","name":"_expectMinVerseRemoved","type":"uint256"},{"internalType":"uint256","name":"_expectMinWethRemoved","type":"uint256"},{"internalType":"uint256","name":"_minAmountVerseToBuy","type":"uint256"},{"internalType":"uint256","name":"_maxAmountWethForSwap","type":"uint256"},{"internalType":"uint256","name":"_expectMinVerseToAddBack","type":"uint256"},{"internalType":"uint256","name":"_expectMinWethToAddBack","type":"uint256"}],"name":"buyBackVerseTokenSimple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityAmountToUse","type":"uint256"},{"internalType":"uint256","name":"_maxAmountWethForSwap","type":"uint256"}],"name":"getOptimalParameters","outputs":[{"internalType":"uint256","name":"_expectMinVerseRemoved","type":"uint256"},{"internalType":"uint256","name":"_expectMinWethRemoved","type":"uint256"},{"internalType":"uint256","name":"_minAmountVerseToBuy","type":"uint256"},{"internalType":"uint256","name":"_expectMinVerseToAddBack","type":"uint256"},{"internalType":"uint256","name":"_expectMinWethToAddBack","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVerseBalanceSelf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWethBalanceSelf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"contract ISwapsPair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract ISwapsRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_worker","type":"address"}],"name":"setWorker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"worker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405234801561000f575f80fd5b505f80546001600160a01b03199081163390811790925560018054821690921790915560038054821673b4b0ea46fe0e9e8eab4afb765b527739f271867190811790915560048054831673249ca82617ec3dfb2589c4c17ab7ec9765350a1890811782556005805490941673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790935560405163095ea7b360e01b8152908101919091525f19602482015263095ea7b3906044016020604051808303815f875af11580156100d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100f791906102ef565b5060055460035460405163095ea7b360e01b81526001600160a01b0391821660048201525f19602482015291169063095ea7b3906044016020604051808303815f875af115801561014a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061016e91906102ef565b50600354604080516202dd3160ec1b815290516001600160a01b0390921691636d91c0e2918391632dd31000916004808201926020929091908290030181865afa1580156101be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101e29190610315565b6004805460055460405160e086901b6001600160e01b03191681526001600160a01b03948516938101939093529083166024830152919091166044820152606401602060405180830381865afa15801561023e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102629190610315565b600280546001600160a01b0319166001600160a01b0392831690811790915560035460405163095ea7b360e01b8152921660048301525f1960248301529063095ea7b3906044016020604051808303815f875af11580156102c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102e991906102ef565b5061033b565b5f602082840312156102ff575f80fd5b8151801515811461030e575f80fd5b9392505050565b5f60208284031215610325575f80fd5b81516001600160a01b038116811461030e575f80fd5b611cdc806103485f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063a8aa1b3111610093578063dde2382311610063578063dde2382314610234578063f4852f051461023c578063f887ea4014610277578063fbccc48114610297575f80fd5b8063a8aa1b31146101cb578063c26f6d44146101eb578063c72ae0d1146101fe578063d21220a714610214575f80fd5b806347980445116100ce57806347980445146101665780634d547ada146101795780635e35359e146101995780638da5cb5b146101ac575f80fd5b80630dfe1681146100f457806313af40351461013e5780634782f77914610153575b5f80fd5b6004546101149073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61015161014c366004611828565b6102aa565b005b610151610161366004611848565b610375565b610151610174366004611870565b61043a565b6001546101149073ffffffffffffffffffffffffffffffffffffffff1681565b6101516101a73660046118b7565b610ac0565b5f546101149073ffffffffffffffffffffffffffffffffffffffff1681565b6002546101149073ffffffffffffffffffffffffffffffffffffffff1681565b6101516101f9366004611828565b610bdc565b610206610ca3565b604051908152602001610135565b6005546101149073ffffffffffffffffffffffffffffffffffffffff1681565b610206610d3e565b61024f61024a3660046118f0565b610d94565b604080519586526020860194909452928401919091526060830152608082015260a001610135565b6003546101149073ffffffffffffffffffffffffffffffffffffffff1681565b6101516102a5366004611910565b610ffe565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461032f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e657200000000000000000060448201526064015b60405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146103f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610326565b60405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083905f818181858888f19350505050158015610435573d5f803e3d5ffd5b505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146104bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43616c6c6572206973206e6f742074686520776f726b657200000000000000006044820152606401610326565b600354600480546005546040517fbaa2abde00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169381019390935281166024830152604482018a905260648201899052608482018890523060a48301524260c48301525f92839291169063baa2abde9060e40160408051808303815f875af115801561055d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105819190611969565b60408051828152602081018490529294509092507fb6321cff1f06132ebdcaaf6b6d84a8946273d4642a579e05840f4d57f6bc59eb910160405180910390a15f8060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561062c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065091906119a8565b506003546040517fad615dec000000000000000000000000000000000000000000000000000000008152600481018c90526dffffffffffffffffffffffffffff9384166024820181905292909316604484018190529194509092505f9173ffffffffffffffffffffffffffffffffffffffff9091169063ad615dec90606401602060405180830381865afa1580156106ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070e91906119f4565b60408051828152602081018c9052908101859052606081018490529091507ff346f258c310091fbda28bd0b8cc88bb8fa9c6892eb7871b22670da71f7c8d4f9060800160405180910390a1878111156107c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4c69717569646974794d616e616765723a20544f4f5f455850454e53495645006044820152606401610326565b60035473ffffffffffffffffffffffffffffffffffffffff166338ed1739898b6107eb611739565b30426040518663ffffffff1660e01b815260040161080d959493929190611a0b565b5f604051808303815f875af1158015610828573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261086d9190810190611ac3565b50600354600480546005546040517f70a0823100000000000000000000000000000000000000000000000000000000815230938101939093525f938493849373ffffffffffffffffffffffffffffffffffffffff9283169363e8e33700939182169291169082906370a0823190602401602060405180830381865afa1580156108f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091c91906119f4565b6005546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610988573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ac91906119f4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015260448301526064820152608481018d905260a481018c90523060c48201524260e4820152610104016060604051808303815f875af1158015610a42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a669190611b9a565b604080518481526020810184905290810182905292955090935091507f833445e6ca565a1c522ac801db9a7fff218da94381ec636c3b9c1a4cf1487ee69060600160405180910390a1505050505050505050505050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610326565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015610bb2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd69190611bc5565b50505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610c5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610326565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092525f9173ffffffffffffffffffffffffffffffffffffffff909116906370a08231906024015b602060405180830381865afa158015610d15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3991906119f4565b905090565b6005546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401610cfa565b5f805f805f805f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610e05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2991906119a8565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691505f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eb9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610edd91906119f4565b905080610eea848c611c11565b610ef49190611c2e565b975080610f01838c611c11565b610f0b9190611c2e565b96505f610f188985611c66565b90505f610f258985611c66565b6003546040517f054d50d4000000000000000000000000000000000000000000000000000000008152600481018e9052602481018390526044810185905291925073ffffffffffffffffffffffffffffffffffffffff169063054d50d490606401602060405180830381865afa158015610fa1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc591906119f4565b97505f610fd2898c611c66565b905081610fdf8b83611c11565b610fe99190611c2e565b97508996505050505050509295509295909350565b60015473ffffffffffffffffffffffffffffffffffffffff16331461107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43616c6c6572206973206e6f742074686520776f726b657200000000000000006044820152606401610326565b6002546003546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018c905291169063095ea7b3906044016020604051808303815f875af11580156110f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061111b9190611bc5565b50600354600480546005546040517fbaa2abde00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169381019390935281166024830152604482018c9052606482018b9052608482018a90523060a48301524260c48301525f92839291169063baa2abde9060e40160408051808303815f875af11580156111be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e29190611969565b60408051828152602081018490529294509092507fb6321cff1f06132ebdcaaf6b6d84a8946273d4642a579e05840f4d57f6bc59eb910160405180910390a15f8060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561128d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112b191906119a8565b506003546040517fad615dec000000000000000000000000000000000000000000000000000000008152600481018e90526dffffffffffffffffffffffffffff9384166024820181905292909316604484018190529194509092505f9173ffffffffffffffffffffffffffffffffffffffff9091169063ad615dec90606401602060405180830381865afa15801561134b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136f91906119f4565b60408051828152602081018e9052908101859052606081018490529091507ff346f258c310091fbda28bd0b8cc88bb8fa9c6892eb7871b22670da71f7c8d4f9060800160405180910390a189811115611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4c69717569646974794d616e616765723a20544f4f5f455850454e53495645006044820152606401610326565b60035473ffffffffffffffffffffffffffffffffffffffff166338ed17398b8d61144c611739565b30426040518663ffffffff1660e01b815260040161146e959493929190611a0b565b5f604051808303815f875af1158015611489573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526114ce9190810190611ac3565b50600480546003546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821693810193909352602483018c9052169063095ea7b3906044016020604051808303815f875af1158015611549573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156d9190611bc5565b506005546003546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018b905291169063095ea7b3906044016020604051808303815f875af11580156115e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160a9190611bc5565b50600354600480546005546040517fe8e3370000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169381019390935281166024830152604482018c9052606482018b9052608482018a905260a482018990523060c48301524260e48301525f92839283929091169063e8e3370090610104016060604051808303815f875af11580156116b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116dd9190611b9a565b604080518481526020810184905290810182905292955090935091507f833445e6ca565a1c522ac801db9a7fff218da94381ec636c3b9c1a4cf1487ee69060600160405180910390a15050505050505050505050505050505050565b60408051600280825260608083018452926020830190803683375050600554825192935073ffffffffffffffffffffffffffffffffffffffff16918391505f9061178557611785611c79565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526004548251911690829060019081106117c3576117c3611c79565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505090565b803573ffffffffffffffffffffffffffffffffffffffff81168114611823575f80fd5b919050565b5f60208284031215611838575f80fd5b61184182611800565b9392505050565b5f8060408385031215611859575f80fd5b61186283611800565b946020939093013593505050565b5f805f805f805f60e0888a031215611886575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b5f805f606084860312156118c9575f80fd5b6118d284611800565b92506118e060208501611800565b9150604084013590509250925092565b5f8060408385031215611901575f80fd5b50508035926020909101359150565b5f805f805f805f805f6101208a8c031215611929575f80fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b5f806040838503121561197a575f80fd5b505080516020909101519092909150565b80516dffffffffffffffffffffffffffff81168114611823575f80fd5b5f805f606084860312156119ba575f80fd5b6119c38461198b565b92506119d16020850161198b565b9150604084015163ffffffff811681146119e9575f80fd5b809150509250925092565b5f60208284031215611a04575f80fd5b5051919050565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015611a6857845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101611a36565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6020808385031215611ad4575f80fd5b825167ffffffffffffffff80821115611aeb575f80fd5b818501915085601f830112611afe575f80fd5b815181811115611b1057611b10611a96565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715611b5357611b53611a96565b604052918252848201925083810185019188831115611b70575f80fd5b938501935b82851015611b8e57845184529385019392850192611b75565b98975050505050505050565b5f805f60608486031215611bac575f80fd5b8351925060208401519150604084015190509250925092565b5f60208284031215611bd5575f80fd5b81518015158114611841575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417611c2857611c28611be4565b92915050565b5f82611c61577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b81810381811115611c2857611c28611be4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea26469706673582212200944a707b5ebc765600bc1892f743c6b32e5d115e1c1f5b704868cc2d54e8d2a64736f6c63430008190033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063a8aa1b3111610093578063dde2382311610063578063dde2382314610234578063f4852f051461023c578063f887ea4014610277578063fbccc48114610297575f80fd5b8063a8aa1b31146101cb578063c26f6d44146101eb578063c72ae0d1146101fe578063d21220a714610214575f80fd5b806347980445116100ce57806347980445146101665780634d547ada146101795780635e35359e146101995780638da5cb5b146101ac575f80fd5b80630dfe1681146100f457806313af40351461013e5780634782f77914610153575b5f80fd5b6004546101149073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61015161014c366004611828565b6102aa565b005b610151610161366004611848565b610375565b610151610174366004611870565b61043a565b6001546101149073ffffffffffffffffffffffffffffffffffffffff1681565b6101516101a73660046118b7565b610ac0565b5f546101149073ffffffffffffffffffffffffffffffffffffffff1681565b6002546101149073ffffffffffffffffffffffffffffffffffffffff1681565b6101516101f9366004611828565b610bdc565b610206610ca3565b604051908152602001610135565b6005546101149073ffffffffffffffffffffffffffffffffffffffff1681565b610206610d3e565b61024f61024a3660046118f0565b610d94565b604080519586526020860194909452928401919091526060830152608082015260a001610135565b6003546101149073ffffffffffffffffffffffffffffffffffffffff1681565b6101516102a5366004611910565b610ffe565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461032f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e657200000000000000000060448201526064015b60405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146103f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610326565b60405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083905f818181858888f19350505050158015610435573d5f803e3d5ffd5b505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146104bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43616c6c6572206973206e6f742074686520776f726b657200000000000000006044820152606401610326565b600354600480546005546040517fbaa2abde00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169381019390935281166024830152604482018a905260648201899052608482018890523060a48301524260c48301525f92839291169063baa2abde9060e40160408051808303815f875af115801561055d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105819190611969565b60408051828152602081018490529294509092507fb6321cff1f06132ebdcaaf6b6d84a8946273d4642a579e05840f4d57f6bc59eb910160405180910390a15f8060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561062c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065091906119a8565b506003546040517fad615dec000000000000000000000000000000000000000000000000000000008152600481018c90526dffffffffffffffffffffffffffff9384166024820181905292909316604484018190529194509092505f9173ffffffffffffffffffffffffffffffffffffffff9091169063ad615dec90606401602060405180830381865afa1580156106ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070e91906119f4565b60408051828152602081018c9052908101859052606081018490529091507ff346f258c310091fbda28bd0b8cc88bb8fa9c6892eb7871b22670da71f7c8d4f9060800160405180910390a1878111156107c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4c69717569646974794d616e616765723a20544f4f5f455850454e53495645006044820152606401610326565b60035473ffffffffffffffffffffffffffffffffffffffff166338ed1739898b6107eb611739565b30426040518663ffffffff1660e01b815260040161080d959493929190611a0b565b5f604051808303815f875af1158015610828573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261086d9190810190611ac3565b50600354600480546005546040517f70a0823100000000000000000000000000000000000000000000000000000000815230938101939093525f938493849373ffffffffffffffffffffffffffffffffffffffff9283169363e8e33700939182169291169082906370a0823190602401602060405180830381865afa1580156108f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091c91906119f4565b6005546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610988573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ac91906119f4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015260448301526064820152608481018d905260a481018c90523060c48201524260e4820152610104016060604051808303815f875af1158015610a42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a669190611b9a565b604080518481526020810184905290810182905292955090935091507f833445e6ca565a1c522ac801db9a7fff218da94381ec636c3b9c1a4cf1487ee69060600160405180910390a1505050505050505050505050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610326565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015610bb2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd69190611bc5565b50505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610c5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610326565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092525f9173ffffffffffffffffffffffffffffffffffffffff909116906370a08231906024015b602060405180830381865afa158015610d15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3991906119f4565b905090565b6005546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401610cfa565b5f805f805f805f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610e05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2991906119a8565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691505f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eb9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610edd91906119f4565b905080610eea848c611c11565b610ef49190611c2e565b975080610f01838c611c11565b610f0b9190611c2e565b96505f610f188985611c66565b90505f610f258985611c66565b6003546040517f054d50d4000000000000000000000000000000000000000000000000000000008152600481018e9052602481018390526044810185905291925073ffffffffffffffffffffffffffffffffffffffff169063054d50d490606401602060405180830381865afa158015610fa1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc591906119f4565b97505f610fd2898c611c66565b905081610fdf8b83611c11565b610fe99190611c2e565b97508996505050505050509295509295909350565b60015473ffffffffffffffffffffffffffffffffffffffff16331461107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43616c6c6572206973206e6f742074686520776f726b657200000000000000006044820152606401610326565b6002546003546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018c905291169063095ea7b3906044016020604051808303815f875af11580156110f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061111b9190611bc5565b50600354600480546005546040517fbaa2abde00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169381019390935281166024830152604482018c9052606482018b9052608482018a90523060a48301524260c48301525f92839291169063baa2abde9060e40160408051808303815f875af11580156111be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e29190611969565b60408051828152602081018490529294509092507fb6321cff1f06132ebdcaaf6b6d84a8946273d4642a579e05840f4d57f6bc59eb910160405180910390a15f8060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561128d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112b191906119a8565b506003546040517fad615dec000000000000000000000000000000000000000000000000000000008152600481018e90526dffffffffffffffffffffffffffff9384166024820181905292909316604484018190529194509092505f9173ffffffffffffffffffffffffffffffffffffffff9091169063ad615dec90606401602060405180830381865afa15801561134b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136f91906119f4565b60408051828152602081018e9052908101859052606081018490529091507ff346f258c310091fbda28bd0b8cc88bb8fa9c6892eb7871b22670da71f7c8d4f9060800160405180910390a189811115611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4c69717569646974794d616e616765723a20544f4f5f455850454e53495645006044820152606401610326565b60035473ffffffffffffffffffffffffffffffffffffffff166338ed17398b8d61144c611739565b30426040518663ffffffff1660e01b815260040161146e959493929190611a0b565b5f604051808303815f875af1158015611489573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526114ce9190810190611ac3565b50600480546003546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821693810193909352602483018c9052169063095ea7b3906044016020604051808303815f875af1158015611549573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156d9190611bc5565b506005546003546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018b905291169063095ea7b3906044016020604051808303815f875af11580156115e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160a9190611bc5565b50600354600480546005546040517fe8e3370000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169381019390935281166024830152604482018c9052606482018b9052608482018a905260a482018990523060c48301524260e48301525f92839283929091169063e8e3370090610104016060604051808303815f875af11580156116b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116dd9190611b9a565b604080518481526020810184905290810182905292955090935091507f833445e6ca565a1c522ac801db9a7fff218da94381ec636c3b9c1a4cf1487ee69060600160405180910390a15050505050505050505050505050505050565b60408051600280825260608083018452926020830190803683375050600554825192935073ffffffffffffffffffffffffffffffffffffffff16918391505f9061178557611785611c79565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526004548251911690829060019081106117c3576117c3611c79565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505090565b803573ffffffffffffffffffffffffffffffffffffffff81168114611823575f80fd5b919050565b5f60208284031215611838575f80fd5b61184182611800565b9392505050565b5f8060408385031215611859575f80fd5b61186283611800565b946020939093013593505050565b5f805f805f805f60e0888a031215611886575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b5f805f606084860312156118c9575f80fd5b6118d284611800565b92506118e060208501611800565b9150604084013590509250925092565b5f8060408385031215611901575f80fd5b50508035926020909101359150565b5f805f805f805f805f6101208a8c031215611929575f80fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b5f806040838503121561197a575f80fd5b505080516020909101519092909150565b80516dffffffffffffffffffffffffffff81168114611823575f80fd5b5f805f606084860312156119ba575f80fd5b6119c38461198b565b92506119d16020850161198b565b9150604084015163ffffffff811681146119e9575f80fd5b809150509250925092565b5f60208284031215611a04575f80fd5b5051919050565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015611a6857845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101611a36565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6020808385031215611ad4575f80fd5b825167ffffffffffffffff80821115611aeb575f80fd5b818501915085601f830112611afe575f80fd5b815181811115611b1057611b10611a96565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715611b5357611b53611a96565b604052918252848201925083810185019188831115611b70575f80fd5b938501935b82851015611b8e57845184529385019392850192611b75565b98975050505050505050565b5f805f60608486031215611bac575f80fd5b8351925060208401519150604084015190509250925092565b5f60208284031215611bd5575f80fd5b81518015158114611841575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417611c2857611c28611be4565b92915050565b5f82611c61577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b81810381811115611c2857611c28611be4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea26469706673582212200944a707b5ebc765600bc1892f743c6b32e5d115e1c1f5b704868cc2d54e8d2a64736f6c63430008190033

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.