ETH Price: $3,465.57 (+1.38%)

Contract

0xe8131B584774d5371eE20ADbaBbBD7dE21daA4C6
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim178127812023-07-31 11:46:23512 days ago1690803983IN
0xe8131B58...E21daA4C6
0 ETH0.0005629115.55261568
Withdraw176124132023-07-03 9:00:35540 days ago1688374835IN
0xe8131B58...E21daA4C6
0 ETH0.0010659816.62200286
Claim176070752023-07-02 15:01:35541 days ago1688310095IN
0xe8131B58...E21daA4C6
0 ETH0.0020085122.87467073
Claim176068752023-07-02 14:21:11541 days ago1688307671IN
0xe8131B58...E21daA4C6
0 ETH0.0018842221.4680253
Claim176058962023-07-02 11:01:59541 days ago1688295719IN
0xe8131B58...E21daA4C6
0 ETH0.001223613.95642794
Claim176045672023-07-02 6:32:23541 days ago1688279543IN
0xe8131B58...E21daA4C6
0 ETH0.0012031713.70098121
Claim176044902023-07-02 6:16:59541 days ago1688278619IN
0xe8131B58...E21daA4C6
0 ETH0.0013371915.23952208
Claim176042012023-07-02 5:18:59541 days ago1688275139IN
0xe8131B58...E21daA4C6
0 ETH0.0010562212.03084785
Claim176032812023-07-02 2:12:59541 days ago1688263979IN
0xe8131B58...E21daA4C6
0 ETH0.0011585613.20381368
Claim176014752023-07-01 20:08:11542 days ago1688242091IN
0xe8131B58...E21daA4C6
0 ETH0.0013110914.94208947
Claim176007222023-07-01 17:36:23542 days ago1688232983IN
0xe8131B58...E21daA4C6
0 ETH0.0015694217.88867219
Claim176002282023-07-01 15:55:23542 days ago1688226923IN
0xe8131B58...E21daA4C6
0 ETH0.0014746220.8879431
Claim175980172023-07-01 8:26:47542 days ago1688200007IN
0xe8131B58...E21daA4C6
0 ETH0.0013194915.02341205
Claim175978132023-07-01 7:45:47542 days ago1688197547IN
0xe8131B58...E21daA4C6
0 ETH0.0013448315.32448861
Claim175976782023-07-01 7:18:47542 days ago1688195927IN
0xe8131B58...E21daA4C6
0 ETH0.0013917515.83968415
Claim175976112023-07-01 7:05:23542 days ago1688195123IN
0xe8131B58...E21daA4C6
0 ETH0.0014830216.89000978
Claim175968302023-07-01 4:26:35542 days ago1688185595IN
0xe8131B58...E21daA4C6
0 ETH0.0015556917.72734828
Claim175959772023-07-01 1:34:23542 days ago1688175263IN
0xe8131B58...E21daA4C6
0 ETH0.0014050716
Claim175944142023-06-30 20:18:23543 days ago1688156303IN
0xe8131B58...E21daA4C6
0 ETH0.0022629425.78996206
Claim175936242023-06-30 17:37:59543 days ago1688146679IN
0xe8131B58...E21daA4C6
0 ETH0.0029529633.65391235
Claim175923882023-06-30 13:28:23543 days ago1688131703IN
0xe8131B58...E21daA4C6
0 ETH0.0029879634.06215199
Claim175923352023-06-30 13:17:35543 days ago1688131055IN
0xe8131B58...E21daA4C6
0 ETH0.0032180436.67998845
Claim175923342023-06-30 13:17:23543 days ago1688131043IN
0xe8131B58...E21daA4C6
0 ETH0.0032233536.73543883
Claim175922852023-06-30 13:07:35543 days ago1688130455IN
0xe8131B58...E21daA4C6
0 ETH0.0037352642.59286684
Claim175905862023-06-30 7:23:23543 days ago1688109803IN
0xe8131B58...E21daA4C6
0 ETH0.0021452924.44917134
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Airdrop

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

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

pragma solidity ^0.8.12;

import "./interfaces/IERC20.sol";
import "./libraries/SafeERC20.sol";
import "./libraries/MerkleProof.sol";

contract Airdrop {
    using SafeERC20 for IERC20;

    bool private entered;
    address public owner;
    IERC20 public L;
    uint256 public deadline;
    bytes32 public merkleRoot;

    mapping(uint256 => uint256) private _claimedBitMap;

    event Claimed(uint256 indexed index, address indexed account, uint256 indexed amount);
    event Withdrawal(address indexed to, uint256 indexed amount);
    event Reset(address indexed token, bytes32 indexed merkleRoot, uint256 indexed deadline);

    modifier nonReentrant() {
        require(!entered, "REENTRANT");
        entered = true;
        _;
        entered = false;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "UNAUTHORIZED");
        _;
    }

    constructor(address _token, bytes32 _merkleRoot, uint256 _deadline) {
        L = IERC20(_token);
        merkleRoot = _merkleRoot;
        deadline = _deadline;
        owner = msg.sender;
    }

    function isClaimed(uint256 index) public view returns (bool) {
        uint256 claimedWordIndex = index / 256;
        uint256 claimedBitIndex = index % 256;
        uint256 claimedWord = _claimedBitMap[claimedWordIndex];
        uint256 mask = (1 << claimedBitIndex);
        return claimedWord & mask == mask;
    }

    function _setClaimed(uint256 index) private {
        uint256 claimedWordIndex = index / 256;
        uint256 claimedBitIndex = index % 256;
        _claimedBitMap[claimedWordIndex] = _claimedBitMap[claimedWordIndex] | (1 << claimedBitIndex);
    }

    function claim(uint256 index, address account, uint256 amount, bytes32[] calldata merkleProof) external nonReentrant {
        require(block.timestamp < deadline, "The airdrop has ended");
        require(!isClaimed(index), "Airdrop has been claimed");
        bytes32 leaf = keccak256(abi.encodePacked(index, account, amount));
        require(MerkleProof.verify(merkleProof, merkleRoot, leaf), "Invalid proof");
        _setClaimed(index);
        L.safeTransfer(account, amount);
        emit Claimed(index, account, amount);
    }

    function withdraw(address to) external onlyOwner {
        require(block.timestamp > deadline, "Airdrop not over");
        uint256 balance = L.balanceOf(address(this));
        require(balance > 0, "Insufficient balance");
        L.safeTransfer(to, balance);
        emit Withdrawal(to, balance);
    }

    function reset(address _token, bytes32 _merkleRoot, uint256 _deadline) external onlyOwner {
        L = IERC20(_token);
        merkleRoot = _merkleRoot;
        deadline = _deadline;
        emit Reset(_token, _merkleRoot, _deadline);
    }
}

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

pragma solidity ^0.8.12;


interface IERC20 {
    function name() external view returns (string memory);

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

    function decimals() external view returns (uint8);

    function factory() external view returns (address);

    function totalSupply() external view returns (uint256);
    
    function balanceOf(address account) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

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

    function mint(address to, uint256 amount) external;

    function burn(uint256 amount) external;

    function approve(address spender, uint256 amount) external returns (bool);

    function transfer(address recipient, uint256 amount) external returns (bool);
    
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Transfer(address indexed from, address indexed to, uint256 value);
    
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 5 : SafeERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.12;

import "../interfaces/IERC20.sol";
import "./Address.sol";


library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {

        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    function safePermit(
        IERC20 token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

File 4 of 5 : MerkleProof.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.12;


library MerkleProof {
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;

        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;

        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

File 5 of 5 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.12;


library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"Reset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"L","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"isClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"reset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50604051610cbb380380610cbb83398101604081905261002f91610072565b600180546001600160a01b0319166001600160a01b03949094169390931790925560035560025560008054610100600160a81b03191661010033021790556100b5565b60008060006060848603121561008757600080fd5b83516001600160a01b038116811461009e57600080fd5b602085015160409095015190969495509392505050565b610bf7806100c46000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806351cff8d91161005b57806351cff8d9146100da5780638da5cb5b146100ed5780639e34070f1461011d5780639f13f76d1461014057600080fd5b80631082bd731461008d57806329dcb0cf146100a25780632e7ba6ef146100be5780632eb4a7ab146100d1575b600080fd5b6100a061009b36600461098c565b610153565b005b6100ab60025481565b6040519081526020015b60405180910390f35b6100a06100cc3660046109bf565b610200565b6100ab60035481565b6100a06100e8366004610a56565b61041d565b6000546101059061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016100b5565b61013061012b366004610a71565b6105b6565b60405190151581526020016100b5565b600154610105906001600160a01b031681565b60005461010090046001600160a01b031633146101a65760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b600180546001600160a01b0319166001600160a01b03851690811790915560038390556002829055604051829184917f4aeb5762b2c4c65264a6344f9bfb069aa5e89a69d29cb21567e930c24554e04790600090a4505050565b60005460ff161561023f5760405162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015260640161019d565b6000805460ff1916600117905560025442106102955760405162461bcd60e51b8152602060048201526015602482015274151a1948185a5c991c9bdc081a185cc8195b991959605a1b604482015260640161019d565b61029e856105b6565b156102eb5760405162461bcd60e51b815260206004820152601860248201527f41697264726f7020686173206265656e20636c61696d65640000000000000000604482015260640161019d565b60408051602081018790526bffffffffffffffffffffffff19606087901b1691810191909152605481018490526000906074016040516020818303038152906040528051906020012090506103778383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060035491508490506105f7565b6103b35760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b604482015260640161019d565b6103bc8661060f565b6001546103d3906001600160a01b0316868661064d565b83856001600160a01b0316877f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed02660405160405180910390a450506000805460ff1916905550505050565b60005461010090046001600160a01b0316331461046b5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015260640161019d565b60025442116104af5760405162461bcd60e51b815260206004820152601060248201526f20b4b9323937b8103737ba1037bb32b960811b604482015260640161019d565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156104f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051c9190610a8a565b9050600081116105655760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161019d565b60015461057c906001600160a01b0316838361064d565b60405181906001600160a01b038416907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6590600090a35050565b6000806105c561010084610ab9565b905060006105d561010085610acd565b60009283526004602052604090922054600190921b9182169091149392505050565b60008261060485846106a4565b1490505b9392505050565b600061061d61010083610ab9565b9050600061062d61010084610acd565b6000928352600460205260409092208054600190931b9092179091555050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261069f9084906106f1565b505050565b600081815b84518110156106e9576106d5828683815181106106c8576106c8610ae1565b60200260200101516107c3565b9150806106e181610af7565b9150506106a9565b509392505050565b6000610746826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166107ef9092919063ffffffff16565b80519091501561069f57808060200190518101906107649190610b20565b61069f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161019d565b60008183106107df576000828152602084905260409020610608565b5060009182526020526040902090565b60606107fe8484600085610806565b949350505050565b6060824710156108675760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161019d565b6001600160a01b0385163b6108be5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161019d565b600080866001600160a01b031685876040516108da9190610b72565b60006040518083038185875af1925050503d8060008114610917576040519150601f19603f3d011682016040523d82523d6000602084013e61091c565b606091505b509150915061092c828286610937565b979650505050505050565b60608315610946575081610608565b8251156109565782518084602001fd5b8160405162461bcd60e51b815260040161019d9190610b8e565b80356001600160a01b038116811461098757600080fd5b919050565b6000806000606084860312156109a157600080fd5b6109aa84610970565b95602085013595506040909401359392505050565b6000806000806000608086880312156109d757600080fd5b853594506109e760208701610970565b935060408601359250606086013567ffffffffffffffff80821115610a0b57600080fd5b818801915088601f830112610a1f57600080fd5b813581811115610a2e57600080fd5b8960208260051b8501011115610a4357600080fd5b9699959850939650602001949392505050565b600060208284031215610a6857600080fd5b61060882610970565b600060208284031215610a8357600080fd5b5035919050565b600060208284031215610a9c57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b600082610ac857610ac8610aa3565b500490565b600082610adc57610adc610aa3565b500690565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610b1957634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610b3257600080fd5b8151801515811461060857600080fd5b60005b83811015610b5d578181015183820152602001610b45565b83811115610b6c576000848401525b50505050565b60008251610b84818460208701610b42565b9190910192915050565b6020815260008251806020840152610bad816040850160208701610b42565b601f01601f1916919091016040019291505056fea2646970667358221220c6b5b225c306a123988a1dc533fd2b81dabe0b69306d91e7e3221fe378eb102864736f6c634300080c0033000000000000000000000000f8c76dbea329ec4fa987afc514f805b21b249d7911362e6593d79d4156a059f3867c4447bdecb1c0fdd0543b5cfc2d22c6a459110000000000000000000000000000000000000000000000000000000064a19f00

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100885760003560e01c806351cff8d91161005b57806351cff8d9146100da5780638da5cb5b146100ed5780639e34070f1461011d5780639f13f76d1461014057600080fd5b80631082bd731461008d57806329dcb0cf146100a25780632e7ba6ef146100be5780632eb4a7ab146100d1575b600080fd5b6100a061009b36600461098c565b610153565b005b6100ab60025481565b6040519081526020015b60405180910390f35b6100a06100cc3660046109bf565b610200565b6100ab60035481565b6100a06100e8366004610a56565b61041d565b6000546101059061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016100b5565b61013061012b366004610a71565b6105b6565b60405190151581526020016100b5565b600154610105906001600160a01b031681565b60005461010090046001600160a01b031633146101a65760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b600180546001600160a01b0319166001600160a01b03851690811790915560038390556002829055604051829184917f4aeb5762b2c4c65264a6344f9bfb069aa5e89a69d29cb21567e930c24554e04790600090a4505050565b60005460ff161561023f5760405162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015260640161019d565b6000805460ff1916600117905560025442106102955760405162461bcd60e51b8152602060048201526015602482015274151a1948185a5c991c9bdc081a185cc8195b991959605a1b604482015260640161019d565b61029e856105b6565b156102eb5760405162461bcd60e51b815260206004820152601860248201527f41697264726f7020686173206265656e20636c61696d65640000000000000000604482015260640161019d565b60408051602081018790526bffffffffffffffffffffffff19606087901b1691810191909152605481018490526000906074016040516020818303038152906040528051906020012090506103778383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060035491508490506105f7565b6103b35760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b604482015260640161019d565b6103bc8661060f565b6001546103d3906001600160a01b0316868661064d565b83856001600160a01b0316877f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed02660405160405180910390a450506000805460ff1916905550505050565b60005461010090046001600160a01b0316331461046b5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015260640161019d565b60025442116104af5760405162461bcd60e51b815260206004820152601060248201526f20b4b9323937b8103737ba1037bb32b960811b604482015260640161019d565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156104f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051c9190610a8a565b9050600081116105655760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161019d565b60015461057c906001600160a01b0316838361064d565b60405181906001600160a01b038416907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6590600090a35050565b6000806105c561010084610ab9565b905060006105d561010085610acd565b60009283526004602052604090922054600190921b9182169091149392505050565b60008261060485846106a4565b1490505b9392505050565b600061061d61010083610ab9565b9050600061062d61010084610acd565b6000928352600460205260409092208054600190931b9092179091555050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261069f9084906106f1565b505050565b600081815b84518110156106e9576106d5828683815181106106c8576106c8610ae1565b60200260200101516107c3565b9150806106e181610af7565b9150506106a9565b509392505050565b6000610746826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166107ef9092919063ffffffff16565b80519091501561069f57808060200190518101906107649190610b20565b61069f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161019d565b60008183106107df576000828152602084905260409020610608565b5060009182526020526040902090565b60606107fe8484600085610806565b949350505050565b6060824710156108675760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161019d565b6001600160a01b0385163b6108be5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161019d565b600080866001600160a01b031685876040516108da9190610b72565b60006040518083038185875af1925050503d8060008114610917576040519150601f19603f3d011682016040523d82523d6000602084013e61091c565b606091505b509150915061092c828286610937565b979650505050505050565b60608315610946575081610608565b8251156109565782518084602001fd5b8160405162461bcd60e51b815260040161019d9190610b8e565b80356001600160a01b038116811461098757600080fd5b919050565b6000806000606084860312156109a157600080fd5b6109aa84610970565b95602085013595506040909401359392505050565b6000806000806000608086880312156109d757600080fd5b853594506109e760208701610970565b935060408601359250606086013567ffffffffffffffff80821115610a0b57600080fd5b818801915088601f830112610a1f57600080fd5b813581811115610a2e57600080fd5b8960208260051b8501011115610a4357600080fd5b9699959850939650602001949392505050565b600060208284031215610a6857600080fd5b61060882610970565b600060208284031215610a8357600080fd5b5035919050565b600060208284031215610a9c57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b600082610ac857610ac8610aa3565b500490565b600082610adc57610adc610aa3565b500690565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610b1957634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610b3257600080fd5b8151801515811461060857600080fd5b60005b83811015610b5d578181015183820152602001610b45565b83811115610b6c576000848401525b50505050565b60008251610b84818460208701610b42565b9190910192915050565b6020815260008251806020840152610bad816040850160208701610b42565b601f01601f1916919091016040019291505056fea2646970667358221220c6b5b225c306a123988a1dc533fd2b81dabe0b69306d91e7e3221fe378eb102864736f6c634300080c0033

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

000000000000000000000000f8c76dbea329ec4fa987afc514f805b21b249d7911362e6593d79d4156a059f3867c4447bdecb1c0fdd0543b5cfc2d22c6a459110000000000000000000000000000000000000000000000000000000064a19f00

-----Decoded View---------------
Arg [0] : _token (address): 0xf8C76dbeA329Ec4Fa987AFC514f805b21b249D79
Arg [1] : _merkleRoot (bytes32): 0x11362e6593d79d4156a059f3867c4447bdecb1c0fdd0543b5cfc2d22c6a45911
Arg [2] : _deadline (uint256): 1688313600

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000f8c76dbea329ec4fa987afc514f805b21b249d79
Arg [1] : 11362e6593d79d4156a059f3867c4447bdecb1c0fdd0543b5cfc2d22c6a45911
Arg [2] : 0000000000000000000000000000000000000000000000000000000064a19f00


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.