ETH Price: $2,959.61 (-0.82%)

Contract

0xD8768f83FCD5C3f19FEf2024F2A2b6a384087E1e

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Withdraw Token179245212025-08-14 15:18:01163 days ago1755184681IN
0xD8768f83...384087E1e
0 ETH0.000000090.00100198
Withdraw Token179245172025-08-14 15:17:53163 days ago1755184673IN
0xD8768f83...384087E1e
0 ETH0.00000010.00100198
Withdraw Token179245142025-08-14 15:17:47163 days ago1755184667IN
0xD8768f83...384087E1e
0 ETH0.000000080.00100197
Withdraw Token179245112025-08-14 15:17:41163 days ago1755184661IN
0xD8768f83...384087E1e
0 ETH0.000000090.00100197
Withdraw Token179245082025-08-14 15:17:35163 days ago1755184655IN
0xD8768f83...384087E1e
0 ETH0.000000090.00100197
Withdraw Token179245052025-08-14 15:17:29163 days ago1755184649IN
0xD8768f83...384087E1e
0 ETH0.000000080.00100196
Withdraw Token179245022025-08-14 15:17:23163 days ago1755184643IN
0xD8768f83...384087E1e
0 ETH0.000000090.00100196
Withdraw Token179243412025-08-14 15:12:01163 days ago1755184321IN
0xD8768f83...384087E1e
0 ETH0.00000010.00100193
Withdraw Token179243372025-08-14 15:11:53163 days ago1755184313IN
0xD8768f83...384087E1e
0 ETH0.00000010.00100193
Withdraw Token179243342025-08-14 15:11:47163 days ago1755184307IN
0xD8768f83...384087E1e
0 ETH0.000000090.00100193
Withdraw Token179243302025-08-14 15:11:39163 days ago1755184299IN
0xD8768f83...384087E1e
0 ETH0.00000010.00100193
Withdraw Token179243262025-08-14 15:11:31163 days ago1755184291IN
0xD8768f83...384087E1e
0 ETH0.000000110.00100193
Withdraw Token179243222025-08-14 15:11:23163 days ago1755184283IN
0xD8768f83...384087E1e
0 ETH0.000000110.00100193
Withdraw Token179243192025-08-14 15:11:17163 days ago1755184277IN
0xD8768f83...384087E1e
0 ETH0.000000110.00100193
Withdraw Token179243162025-08-14 15:11:11163 days ago1755184271IN
0xD8768f83...384087E1e
0 ETH0.000000080.00100193
Withdraw Token179243132025-08-14 15:11:05163 days ago1755184265IN
0xD8768f83...384087E1e
0 ETH0.000000110.00100194
Withdraw Token179243102025-08-14 15:10:59163 days ago1755184259IN
0xD8768f83...384087E1e
0 ETH0.000000090.00100193
Withdraw Token179243062025-08-14 15:10:51163 days ago1755184251IN
0xD8768f83...384087E1e
0 ETH0.00000010.00100193
Withdraw Token179243032025-08-14 15:10:45163 days ago1755184245IN
0xD8768f83...384087E1e
0 ETH0.000000110.00100193
Withdraw Token179242982025-08-14 15:10:35163 days ago1755184235IN
0xD8768f83...384087E1e
0 ETH0.00000010.00100193
Withdraw Token179242942025-08-14 15:10:27163 days ago1755184227IN
0xD8768f83...384087E1e
0 ETH0.000000110.00100193
Withdraw Token179242912025-08-14 15:10:21163 days ago1755184221IN
0xD8768f83...384087E1e
0 ETH0.000000110.00100193
Withdraw Token164195312025-07-10 19:11:41197 days ago1752174701IN
0xD8768f83...384087E1e
0 ETH0.000001780.01572412
Withdraw Token164194772025-07-10 19:09:53197 days ago1752174593IN
0xD8768f83...384087E1e
0 ETH0.000000910.01606329
Withdraw Token164193912025-07-10 19:07:01197 days ago1752174421IN
0xD8768f83...384087E1e
0 ETH0.000000840.01637159
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HumanRouter

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
cancun EvmVersion
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

interface IUniswapV2Factory {
    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address);
}
interface IUniswapV2Pair {
    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;
}
interface IUniswapV3Pool {
    function swap(
        address recipient,
        bool zeroForOne,
        int256 amountSpecified,
        uint160 sqrtPriceLimitX96,
        bytes calldata data
    ) external returns (int256 amount0, int256 amount1);
    function token0() external view returns (address);
    function token1() external view returns (address);
}
interface IUniswapV3Factory {
    function getPool(
        address tokenA,
        address tokenB,
        uint24 fee
    ) external view returns (address);
}
interface IPermit2 {
    struct TokenPermissions {
        address token;
        uint256 amount;
    }
    struct PermitTransferFrom {
        TokenPermissions permitted;
        uint256 nonce;
        uint256 deadline;
    }
    struct SignatureTransferDetails {
        address to;
        uint256 requestedAmount;
    }
    function permitTransferFrom(
        PermitTransferFrom calldata permit,
        SignatureTransferDetails calldata transferDetails,
        address owner,
        bytes calldata signature
    ) external;
}

contract HumanRouter {
    // *** Constants: Official Uniswap and World addresses on World Chain ***
    address constant UNISWAP_V2_FACTORY =
        0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f; // Uniswap V2 factory
    address constant UNISWAP_V3_FACTORY =
        0x7a5028BDa40e7B173C278C5342087826455ea25a; // Uniswap V3 factory
    address constant PERMIT2 = 0x000000000022D473030F116dDEE9F6B43aC78BA3; // Uniswap Permit2
    uint256 constant FEE_BPS = 100; // 1% fee (in basis points)

    // Events
    event SwapExecuted(
        address indexed user,
        address indexed tokenIn,
        address indexed tokenOut,
        uint256 amountIn,
        uint256 amountOut,
        uint256 feeAmount,
        address[] path,
        uint24[] fees
    );

    // Uniswap V3 TickMath sqrtPriceX96 limits (for no price limit on swaps):
    uint160 constant MIN_SQRT_RATIO = 4295128739 + 1;
    uint160 constant MAX_SQRT_RATIO =
        1461446703485210103287273052203988822378723970342 - 1;

    address public owner;
    constructor() {
        owner = msg.sender;
    }
    modifier onlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }

    // Withdraw function for owner to collect any tokens (e.g. accumulated fees) from the contract
    function withdrawToken(address token, uint256 amount) external onlyOwner {
        require(token != address(0), "Invalid token");
        // Transfer `amount` of `token` to the owner. (Using low-level call to support any ERC-20)
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(
                bytes4(keccak256("transfer(address,uint256)")),
                owner,
                amount
            )
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "Withdraw transfer failed"
        );
    }

    /**
     * @notice Swap an exact `amountIn` of `tokenIn` for `tokenOut` along a specified path, using Permit2 for input transfer.
     * @param tokenIn      The input ERC-20 token address.
     * @param tokenOut     The output ERC-20 token address.
     * @param amountIn     The total amount of tokenIn to pull from the user (includes the 1% fee).
     * @param amountOutMin The minimum acceptable amount of tokenOut (reverts if output is lower).
     * @param path         An array of token addresses representing the swap path from tokenIn to tokenOut.
     * @param fees         An array of fees for each hop (0 for Uniswap v2, or the v3 fee tier in basis points for that hop).
     * @param deadline     Timestamp after which the swap will be rejected (to avoid stale routes).
     * @param permitNonce  The nonce used in the Permit2 signature (to prevent replay).
     * @param permitDeadline Expiration time for the Permit2 signature.
     * @param permitSignature The Permit2 signature from the user authorizing this contract to spend tokenIn.
     */
    function swapExactInputMultiHop(
        address tokenIn,
        address tokenOut,
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        uint24[] calldata fees,
        uint256 deadline,
        uint256 permitNonce,
        uint256 permitDeadline,
        bytes calldata permitSignature
    ) external {
        require(block.timestamp <= deadline, "Route expired");
        // Path must start with tokenIn and end with tokenOut, with fees length = path.length-1
        require(
            path.length >= 2 &&
                path[0] == tokenIn &&
                path[path.length - 1] == tokenOut,
            "Invalid path"
        );
        require(fees.length == path.length - 1, "Invalid fees");

        // **1. Transfer tokenIn from user to this contract using Permit2 (signature-based transfer)**
        IPermit2(PERMIT2).permitTransferFrom(
            IPermit2.PermitTransferFrom({
                permitted: IPermit2.TokenPermissions({
                    token: tokenIn,
                    amount: amountIn
                }),
                nonce: permitNonce,
                deadline: permitDeadline
            }),
            IPermit2.SignatureTransferDetails({
                to: address(this),
                requestedAmount: amountIn
            }),
            msg.sender,
            permitSignature
        );
        // At this point, `amountIn` of tokenIn has been pulled from msg.sender into this contract.

        // **2. Deduct fee and determine swap amount.** (1% fee is taken on the input amount)
        uint256 feeAmount = (amountIn * FEE_BPS) / 10000; // 1% of input
        uint256 swapAmount = amountIn - feeAmount; // amount to actually swap
        // (The `feeAmount` remains in the contract as fee; owner can withdraw it later.)

        // **3. Perform the swaps along the specified route.**
        uint256 outputAmount = swapAmount;
        address currentToken = tokenIn;
        // Loop through each hop in the path
        for (uint256 i = 0; i < fees.length; ++i) {
            address nextToken = path[i + 1];
            uint24 fee = fees[i];
            if (fee == 0) {
                // *Uniswap v2 hop* (fee=0 indicates a v2 pair)
                address pair = IUniswapV2Factory(UNISWAP_V2_FACTORY).getPair(
                    currentToken,
                    nextToken
                );
                require(pair != address(0), "No Uniswap v2 pair for hop");
                // Get reserves to compute output for exact input swap formula
                (uint112 reserve0, uint112 reserve1, ) = IUniswapV2Pair(pair)
                    .getReserves();
                uint256 res0 = uint256(reserve0);
                uint256 res1 = uint256(reserve1);
                require(res0 > 0 && res1 > 0, "Pair has no liquidity");
                // Determine input/output reserve order
                bool invert = currentToken < nextToken;
                uint256 reserveIn = invert ? res0 : res1;
                uint256 reserveOut = invert ? res1 : res0;
                // Uniswap v2 formula: amountOut = (amountIn * 997 / 1000) * reserveOut / (reserveIn + (amountIn * 997 / 1000))
                uint256 amountInWithFee = outputAmount * 997;
                uint256 numerator = amountInWithFee * reserveOut;
                uint256 denominator = reserveIn * 1000 + amountInWithFee;
                uint256 out = denominator == 0 ? 0 : (numerator / denominator);
                require(out > 0, "Uniswap v2 swap output is 0");
                // Transfer input tokens to the pair, then call swap to send out tokens
                _safeTransfer(currentToken, pair, outputAmount);
                (uint256 amt0Out, uint256 amt1Out) = invert
                    ? (uint256(0), out)
                    : (out, uint256(0));
                IUniswapV2Pair(pair).swap(
                    amt0Out,
                    amt1Out,
                    (i == fees.length - 1 ? msg.sender : address(this)), // send output to user if final hop, else to this contract for next hop
                    bytes("") // no callback data for v2 swap
                );
                outputAmount = out;
            } else {
                // *Uniswap v3 hop* (fee > 0 indicates a v3 pool fee tier)
                address pool = IUniswapV3Factory(UNISWAP_V3_FACTORY).getPool(
                    currentToken,
                    nextToken,
                    fee
                );
                require(pool != address(0), "No Uniswap v3 pool for hop");
                bool zeroForOne = currentToken < nextToken; // swap token0->token1 if true, else token1->token0
                // Call v3 pool.swap. The pool will callback our contract (uniswapV3SwapCallback) for the input token.
                _v3CallbackPool = pool;
                _inV3Swap = true;
                (int256 amt0, int256 amt1) = IUniswapV3Pool(pool).swap(
                    (i == fees.length - 1 ? msg.sender : address(this)), // recipient: user for final hop, otherwise this contract for intermediate
                    zeroForOne,
                    int256(outputAmount),
                    zeroForOne ? MIN_SQRT_RATIO : MAX_SQRT_RATIO, // price limit set to allow full swap&#8203;:contentReference[oaicite:15]{index=15}
                    bytes("") // no custom data needed; we use storage vars to validate callback
                );
                _inV3Swap = false;
                _v3CallbackPool = address(0);
                // Calculate the output amount from swap return values:
                uint256 out = zeroForOne ? uint256(-amt1) : uint256(-amt0);
                outputAmount = out;
            }
            currentToken = nextToken;
        }

        // **4. Slippage check:** ensure final output is at least amountOutMin.
        require(outputAmount >= amountOutMin, "Insufficient output amount");
        // Note: The final output tokens have already been sent to msg.sender during the last hop (see recipient in swaps above).
        // Thus, the user receives the output tokens here. The 1% fee remains in this contract.

        // Emit the SwapExecuted event
        emit SwapExecuted(
            msg.sender,
            tokenIn,
            tokenOut,
            amountIn,
            outputAmount,
            feeAmount,
            path,
            fees
        );
    }

    // --- Storage variables for controlling v3 callback ---
    bool private _inV3Swap;
    address private _v3CallbackPool;

    /**
     * @dev Uniswap V3 callback function called during pool.swap().
     * It transfers the required tokens to the pool. Only the legitimate pool call is honored.
     */
    function uniswapV3SwapCallback(
        int256 amount0Delta,
        int256 amount1Delta,
        bytes calldata
    ) external {
        // Security: Ensure the caller is the expected v3 pool we called and that we are in a swap context&#8203;:contentReference[oaicite:16]{index=16}.
        require(
            _inV3Swap && msg.sender == _v3CallbackPool,
            "Unauthorized callback"
        );
        if (amount0Delta > 0) {
            // Pool needs `amount0Delta` of token0
            address token0 = IUniswapV3Pool(msg.sender).token0();
            _safeTransfer(token0, msg.sender, uint256(amount0Delta));
        }
        if (amount1Delta > 0) {
            // Pool needs `amount1Delta` of token1
            address token1 = IUniswapV3Pool(msg.sender).token1();
            _safeTransfer(token1, msg.sender, uint256(amount1Delta));
        }
        // Any positive delta has been paid; if both are 0, nothing happens (no tokens needed).
    }

    // Internal safe ERC20 transfer (reverts on failure)
    function _safeTransfer(address token, address to, uint256 value) private {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0xa9059cbb, to, value) // bytes4(keccak256("transfer(address,uint256)"))
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "Token transfer failed"
        );
    }
}

Settings
{
  "remappings": [
    "@uniswap/v4-core/=lib/v4-core/",
    "@uniswap/v4-periphery/=lib/v4-periphery/",
    "@uniswap/permit2/=lib/permit2/",
    "@uniswap/universal-router/=lib/universal-router/",
    "@uniswap/v3-core/=lib/v3-core/",
    "@uniswap/v2-core/=lib/v2-core/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "@ensdomains/=lib/v4-core/node_modules/@ensdomains/",
    "ds-test/=lib/universal-router/solmate/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-gas-snapshot/=lib/permit2/lib/forge-gas-snapshot/src/",
    "forge-std/=lib/forge-std/src/",
    "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
    "hardhat/=lib/v4-core/node_modules/hardhat/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "permit2/=lib/permit2/",
    "solmate/=lib/universal-router/lib/solmate/",
    "universal-router/=lib/universal-router/",
    "v2-core/=lib/v2-core/contracts/",
    "v3-core/=lib/v3-core/",
    "v4-core/=lib/v4-core/src/",
    "v4-periphery/=lib/v4-periphery/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": true,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"},{"indexed":false,"internalType":"uint24[]","name":"fees","type":"uint24[]"}],"name":"SwapExecuted","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint24[]","name":"fees","type":"uint24[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"permitNonce","type":"uint256"},{"internalType":"uint256","name":"permitDeadline","type":"uint256"},{"internalType":"bytes","name":"permitSignature","type":"bytes"}],"name":"swapExactInputMultiHop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608080604052346026575f80546001600160a01b031916331790556110af908161002b8239f35b5f80fdfe60a0806040526004361015610012575f80fd5b5f6080525f3560e01c9081638da5cb5b14610dfe575080639e281a9814610c84578063dc372a8e146101b75763fa461e331461004c575f80fd5b346101b15760603660031901126101b15760243560043560443567ffffffffffffffff81116101b157610083903690600401610e67565b505060ff6080515460a01c168061019d575b15610160576080518113610129575b5060805181136100b5575b60805180f35b60405163d21220a760e01b815290602082600481335afa801561011c576100e792608051916100ed575b503390610fb5565b5f6100af565b61010f915060203d602011610115575b6101078183610eb1565b810190610f4e565b5f6100df565b503d6100fd565b6040513d608051823e3d90fd5b604051630dfe168160e01b815290602082600481335afa801561011c5761015a92608051916100ed57503390610fb5565b5f6100a4565b60405162461bcd60e51b8152602060048201526015602482015274556e617574686f72697a65642063616c6c6261636b60581b6044820152606490fd5b506001546001600160a01b03163314610095565b60805180fd5b34610b5657610140366003190112610b56576101d1610e20565b6024356001600160a01b0381168103610b565760843567ffffffffffffffff8111610b5657610204903690600401610e36565b9160a43567ffffffffffffffff8111610b5657610225903690600401610e36565b90926101243567ffffffffffffffff8111610b5657610248903690600401610e67565b60c4354211610c4f57600287101580610c18575b80610bea575b15610bb6575f198701878111610ba2578403610b6e576040519161028583610e95565b6001600160a01b03891683526044356020840152604051926060840167ffffffffffffffff811185821017610b5a576040528352602083019260e43584526040810190610104358252604051936102db85610e95565b30855260443560208601526e22d473030f116ddee9f6b43ac78ba33b15610b565760405163187945bd60e11b8152915180516001600160a01b0316600484015260200151602483015290945f94869461012494869493849361036092909151604488015251606487015280516001600160a01b031660848701526020015160a4860152565b3360c485015261010060e485015281610104850152848401378181018301859052601f01601f19168101030181836e22d473030f116ddee9f6b43ac78ba35af18015610b4b57610b37575b5060646044350294604435860460641460443515171561077357612710860460443590810390811161077357876080515b85811061052057505060643581106104db57908092916127106040519860a08a01926044358b5260208b015204604089015260a060608901525260c086019091608051905b8082106104b0575050602091508581036080870152828152019290608051905b808210610489575050506001600160a01b0390811693169133917fb01442c50bcf92030343f6aa7c7674e942c21d8060dad4744b6a2f077c05b045919081900390a460805180f35b90919384359062ffffff82168092036101b157602081600193829352019501920190610441565b909183356001600160a01b03811691908290036101b157908152602093840193019160010190610421565b60405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206f757470757420616d6f756e740000000000006044820152606490fd5b9091600182018083116107735761053b610540918688610f2a565b610f3a565b9261054c83888b610f2a565b3562ffffff81168091036101b157806108f8575060405163e6a4390560e01b81526001600160a01b0380831660048301819052908616602483018190529192602084604481735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f5afa93841561011c57608051946108d8575b506001600160a01b0384161561089357604051630240bc6b60e21b81526060816004816001600160a01b0389165afa90811561011c576080519060805192610835575b506001600160701b0380911691168115158061082c575b156107ef57848410156107e857815b858510156107e157505b866103e58102046103e5148715171561077357608051506103e581880202906103e588028204146103e5880215171561077357816103e88102046103e81482151715610773576103e8919091026103e5870281019190821061077357816107da575050608051945b851561079557846106a392610fb5565b101561078b576080519082915b5f19890189811161077357850361076c5733915b604051926106d3602085610eb1565b60805184526001600160a01b0382163b156101b15760405194859363022c0d9f60e01b85526004850152602484015260018060a01b03166044830152608060648301528180610729608051956084830190610f6d565b608051919003926001600160a01b03165af1801561011c57610753575b50600190925b91016103dc565b60805161075f91610eb1565b6080516101b1578a610746565b30916106c4565b634e487b7160e01b6080515260116004526024608051fd5b60805190826106b0565b60405162461bcd60e51b815260206004820152601b60248201527f556e69737761702076322073776170206f7574707574206973203000000000006044820152606490fd5b0494610693565b905061062b565b8091610621565b60405162461bcd60e51b81526020600482015260156024820152745061697220686173206e6f206c697175696469747960581b6044820152606490fd5b50801515610612565b9150506060813d821161088b575b8161085060609383610eb1565b810103126101b15761086181610fa1565b604061086f60208401610fa1565b92015163ffffffff8116036101b1576001600160701b036105fb565b3d9150610843565b60405162461bcd60e51b815260206004820152601a60248201527f4e6f20556e6973776170207632207061697220666f7220686f700000000000006044820152606490fd5b6108f191945060203d8111610115576101078183610eb1565b928e6105b8565b604051630b4c774160e11b81526001600160a01b0392831660048201819052928616602482018190526044820192909252602081606481737a5028bda40e7b173c278c5342087826455ea25a5afa90811561011c5760805191610b19575b506001600160a01b0316918215610ad457600180546001600160a01b03191684179055608051805460ff60a01b1916600160a01b17905510905f198801888111610773578403610acb57604033915b8315610ab0576401000276a4905b6020958351946109c38887610eb1565b6080518652610a14855196879586948594630251596160e31b865260018060a01b031660048601528a6024860152604485015260018060a01b0316606484015260a0608484015260a4830190610f6d565b0391608051905af191821561011c576080519160805193610a75575b50608051805460ff60a01b19169055600180546001600160a01b0319168155935015610a665750610a6090610f91565b9261074c565b610a709150610f91565b610a60565b915091506040813d8211610aa8575b81610a9160409383610eb1565b810103126101b1576001928151910151918d610a30565b3d9150610a84565b73fffd8963efd1fc6a506488495d951d5263988d25906109b3565b604030916109a5565b60405162461bcd60e51b815260206004820152601a60248201527f4e6f20556e697377617020763320706f6f6c20666f7220686f700000000000006044820152606490fd5b610b31915060203d8111610115576101078183610eb1565b8d610956565b5f610b4191610eb1565b5f608052866103ab565b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206665657360a01b6044820152606490fd5b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b6044820152606490fd5b505f198701878111610ba2576001600160a01b0386811691610c119061053b908b88610f2a565b1614610262565b508615610c3b57610c2883610f3a565b6001600160a01b0389811691161461025c565b634e487b7160e01b5f52603260045260245ffd5b60405162461bcd60e51b815260206004820152600d60248201526c149bdd5d1948195e1c1a5c9959609a1b6044820152606490fd5b34610b56576040366003190112610b5657610c9d610e20565b5f546001600160a01b031633819003610dcd576001600160a01b03821615610d985760405163a9059cbb60e01b602082019081526001600160a01b039092166024808301919091523560448201525f92839290918390610d0a81606481015b03601f198101835282610eb1565b51925af1610d16610ed3565b81610d69575b5015610d2457005b60405162461bcd60e51b815260206004820152601860248201527f5769746864726177207472616e73666572206661696c656400000000000000006044820152606490fd5b8051801592508215610d7e575b505081610d1c565b610d919250602080918301019101610f12565b8180610d76565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606490fd5b60405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606490fd5b34610b56575f366003190112610b56575f546001600160a01b03168152602090f35b600435906001600160a01b0382168203610b5657565b9181601f84011215610b565782359167ffffffffffffffff8311610b56576020808501948460051b010111610b5657565b9181601f84011215610b565782359167ffffffffffffffff8311610b565760208381860195010111610b5657565b6040810190811067ffffffffffffffff821117610b5a57604052565b90601f8019910116810190811067ffffffffffffffff821117610b5a57604052565b3d15610f0d573d9067ffffffffffffffff8211610b5a5760405191610f02601f8201601f191660200184610eb1565b82523d5f602084013e565b606090565b90816020910312610b5657518015158103610b565790565b9190811015610c3b5760051b0190565b356001600160a01b0381168103610b565790565b90816020910312610b5657516001600160a01b0381168103610b565790565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600160ff1b8114610ba2575f0390565b51906001600160701b0382168203610b5657565b60405163a9059cbb60e01b602082019081526001600160a01b03909316602482015260448101939093525f928392908390610ff38160648101610cfc565b51925af1610fff610ed3565b8161104a575b501561100d57565b60405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606490fd5b805180159250821561105f575b50505f611005565b6110729250602080918301019101610f12565b5f8061105756fea26469706673582212209189ee1bfc32afda7950fb6e7d6156a80f5bc51ab6910feaa274584db4a6eb9b64736f6c634300081c0033

Deployed Bytecode

0x60a0806040526004361015610012575f80fd5b5f6080525f3560e01c9081638da5cb5b14610dfe575080639e281a9814610c84578063dc372a8e146101b75763fa461e331461004c575f80fd5b346101b15760603660031901126101b15760243560043560443567ffffffffffffffff81116101b157610083903690600401610e67565b505060ff6080515460a01c168061019d575b15610160576080518113610129575b5060805181136100b5575b60805180f35b60405163d21220a760e01b815290602082600481335afa801561011c576100e792608051916100ed575b503390610fb5565b5f6100af565b61010f915060203d602011610115575b6101078183610eb1565b810190610f4e565b5f6100df565b503d6100fd565b6040513d608051823e3d90fd5b604051630dfe168160e01b815290602082600481335afa801561011c5761015a92608051916100ed57503390610fb5565b5f6100a4565b60405162461bcd60e51b8152602060048201526015602482015274556e617574686f72697a65642063616c6c6261636b60581b6044820152606490fd5b506001546001600160a01b03163314610095565b60805180fd5b34610b5657610140366003190112610b56576101d1610e20565b6024356001600160a01b0381168103610b565760843567ffffffffffffffff8111610b5657610204903690600401610e36565b9160a43567ffffffffffffffff8111610b5657610225903690600401610e36565b90926101243567ffffffffffffffff8111610b5657610248903690600401610e67565b60c4354211610c4f57600287101580610c18575b80610bea575b15610bb6575f198701878111610ba2578403610b6e576040519161028583610e95565b6001600160a01b03891683526044356020840152604051926060840167ffffffffffffffff811185821017610b5a576040528352602083019260e43584526040810190610104358252604051936102db85610e95565b30855260443560208601526e22d473030f116ddee9f6b43ac78ba33b15610b565760405163187945bd60e11b8152915180516001600160a01b0316600484015260200151602483015290945f94869461012494869493849361036092909151604488015251606487015280516001600160a01b031660848701526020015160a4860152565b3360c485015261010060e485015281610104850152848401378181018301859052601f01601f19168101030181836e22d473030f116ddee9f6b43ac78ba35af18015610b4b57610b37575b5060646044350294604435860460641460443515171561077357612710860460443590810390811161077357876080515b85811061052057505060643581106104db57908092916127106040519860a08a01926044358b5260208b015204604089015260a060608901525260c086019091608051905b8082106104b0575050602091508581036080870152828152019290608051905b808210610489575050506001600160a01b0390811693169133917fb01442c50bcf92030343f6aa7c7674e942c21d8060dad4744b6a2f077c05b045919081900390a460805180f35b90919384359062ffffff82168092036101b157602081600193829352019501920190610441565b909183356001600160a01b03811691908290036101b157908152602093840193019160010190610421565b60405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206f757470757420616d6f756e740000000000006044820152606490fd5b9091600182018083116107735761053b610540918688610f2a565b610f3a565b9261054c83888b610f2a565b3562ffffff81168091036101b157806108f8575060405163e6a4390560e01b81526001600160a01b0380831660048301819052908616602483018190529192602084604481735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f5afa93841561011c57608051946108d8575b506001600160a01b0384161561089357604051630240bc6b60e21b81526060816004816001600160a01b0389165afa90811561011c576080519060805192610835575b506001600160701b0380911691168115158061082c575b156107ef57848410156107e857815b858510156107e157505b866103e58102046103e5148715171561077357608051506103e581880202906103e588028204146103e5880215171561077357816103e88102046103e81482151715610773576103e8919091026103e5870281019190821061077357816107da575050608051945b851561079557846106a392610fb5565b101561078b576080519082915b5f19890189811161077357850361076c5733915b604051926106d3602085610eb1565b60805184526001600160a01b0382163b156101b15760405194859363022c0d9f60e01b85526004850152602484015260018060a01b03166044830152608060648301528180610729608051956084830190610f6d565b608051919003926001600160a01b03165af1801561011c57610753575b50600190925b91016103dc565b60805161075f91610eb1565b6080516101b1578a610746565b30916106c4565b634e487b7160e01b6080515260116004526024608051fd5b60805190826106b0565b60405162461bcd60e51b815260206004820152601b60248201527f556e69737761702076322073776170206f7574707574206973203000000000006044820152606490fd5b0494610693565b905061062b565b8091610621565b60405162461bcd60e51b81526020600482015260156024820152745061697220686173206e6f206c697175696469747960581b6044820152606490fd5b50801515610612565b9150506060813d821161088b575b8161085060609383610eb1565b810103126101b15761086181610fa1565b604061086f60208401610fa1565b92015163ffffffff8116036101b1576001600160701b036105fb565b3d9150610843565b60405162461bcd60e51b815260206004820152601a60248201527f4e6f20556e6973776170207632207061697220666f7220686f700000000000006044820152606490fd5b6108f191945060203d8111610115576101078183610eb1565b928e6105b8565b604051630b4c774160e11b81526001600160a01b0392831660048201819052928616602482018190526044820192909252602081606481737a5028bda40e7b173c278c5342087826455ea25a5afa90811561011c5760805191610b19575b506001600160a01b0316918215610ad457600180546001600160a01b03191684179055608051805460ff60a01b1916600160a01b17905510905f198801888111610773578403610acb57604033915b8315610ab0576401000276a4905b6020958351946109c38887610eb1565b6080518652610a14855196879586948594630251596160e31b865260018060a01b031660048601528a6024860152604485015260018060a01b0316606484015260a0608484015260a4830190610f6d565b0391608051905af191821561011c576080519160805193610a75575b50608051805460ff60a01b19169055600180546001600160a01b0319168155935015610a665750610a6090610f91565b9261074c565b610a709150610f91565b610a60565b915091506040813d8211610aa8575b81610a9160409383610eb1565b810103126101b1576001928151910151918d610a30565b3d9150610a84565b73fffd8963efd1fc6a506488495d951d5263988d25906109b3565b604030916109a5565b60405162461bcd60e51b815260206004820152601a60248201527f4e6f20556e697377617020763320706f6f6c20666f7220686f700000000000006044820152606490fd5b610b31915060203d8111610115576101078183610eb1565b8d610956565b5f610b4191610eb1565b5f608052866103ab565b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206665657360a01b6044820152606490fd5b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b6044820152606490fd5b505f198701878111610ba2576001600160a01b0386811691610c119061053b908b88610f2a565b1614610262565b508615610c3b57610c2883610f3a565b6001600160a01b0389811691161461025c565b634e487b7160e01b5f52603260045260245ffd5b60405162461bcd60e51b815260206004820152600d60248201526c149bdd5d1948195e1c1a5c9959609a1b6044820152606490fd5b34610b56576040366003190112610b5657610c9d610e20565b5f546001600160a01b031633819003610dcd576001600160a01b03821615610d985760405163a9059cbb60e01b602082019081526001600160a01b039092166024808301919091523560448201525f92839290918390610d0a81606481015b03601f198101835282610eb1565b51925af1610d16610ed3565b81610d69575b5015610d2457005b60405162461bcd60e51b815260206004820152601860248201527f5769746864726177207472616e73666572206661696c656400000000000000006044820152606490fd5b8051801592508215610d7e575b505081610d1c565b610d919250602080918301019101610f12565b8180610d76565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606490fd5b60405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606490fd5b34610b56575f366003190112610b56575f546001600160a01b03168152602090f35b600435906001600160a01b0382168203610b5657565b9181601f84011215610b565782359167ffffffffffffffff8311610b56576020808501948460051b010111610b5657565b9181601f84011215610b565782359167ffffffffffffffff8311610b565760208381860195010111610b5657565b6040810190811067ffffffffffffffff821117610b5a57604052565b90601f8019910116810190811067ffffffffffffffff821117610b5a57604052565b3d15610f0d573d9067ffffffffffffffff8211610b5a5760405191610f02601f8201601f191660200184610eb1565b82523d5f602084013e565b606090565b90816020910312610b5657518015158103610b565790565b9190811015610c3b5760051b0190565b356001600160a01b0381168103610b565790565b90816020910312610b5657516001600160a01b0381168103610b565790565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600160ff1b8114610ba2575f0390565b51906001600160701b0382168203610b5657565b60405163a9059cbb60e01b602082019081526001600160a01b03909316602482015260448101939093525f928392908390610ff38160648101610cfc565b51925af1610fff610ed3565b8161104a575b501561100d57565b60405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606490fd5b805180159250821561105f575b50505f611005565b6110729250602080918301019101610f12565b5f8061105756fea26469706673582212209189ee1bfc32afda7950fb6e7d6156a80f5bc51ab6910feaa274584db4a6eb9b64736f6c634300081c0033

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.