ETH Price: $3,624.44 (-1.83%)

Contract

0xB38283CB75faaBb384c22F97c633606265DdF093
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim186188362023-11-21 8:05:11377 days ago1700553911IN
Blur: Airdrop 2
0 ETH0.0009690631
Transfer186165252023-11-21 0:19:47377 days ago1700525987IN
Blur: Airdrop 2
0.05 ETH0.0006931133.00535063
Accept Ownership186162652023-11-20 23:26:35377 days ago1700522795IN
Blur: Airdrop 2
0 ETH0.000759532.35651209
Renounce Ownersh...186162652023-11-20 23:26:35377 days ago1700522795IN
Blur: Airdrop 2
0 ETH0.0007610832.35651209
Transfer Ownersh...186162652023-11-20 23:26:35377 days ago1700522795IN
Blur: Airdrop 2
0 ETH0.0007780132.35651209
Transfer Ownersh...186025242023-11-19 1:16:23379 days ago1700356583IN
Blur: Airdrop 2
0 ETH0.0008596818

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
204533702024-08-04 6:23:23120 days ago1722752603
0xB38283CB...265DdF093
0 ETH
204533702024-08-04 6:23:23120 days ago1722752603
0xB38283CB...265DdF093
0 ETH
204530922024-08-04 5:27:23120 days ago1722749243
0xB38283CB...265DdF093
0 ETH
204530922024-08-04 5:27:23120 days ago1722749243
0xB38283CB...265DdF093
0 ETH
201453322024-06-22 6:03:23163 days ago1719036203
0xB38283CB...265DdF093
0 ETH
201453322024-06-22 6:03:23163 days ago1719036203
0xB38283CB...265DdF093
0 ETH
201449492024-06-22 4:45:47163 days ago1719031547
0xB38283CB...265DdF093
0 ETH
201449492024-06-22 4:45:47163 days ago1719031547
0xB38283CB...265DdF093
0 ETH
190668092024-01-23 3:49:11314 days ago1705981751
0xB38283CB...265DdF093
0 ETH
190668092024-01-23 3:49:11314 days ago1705981751
0xB38283CB...265DdF093
0 ETH
190661702024-01-23 1:40:35314 days ago1705974035
0xB38283CB...265DdF093
0 ETH
190661702024-01-23 1:40:35314 days ago1705974035
0xB38283CB...265DdF093
0 ETH
189657572024-01-09 0:09:23328 days ago1704758963
0xB38283CB...265DdF093
0 ETH
189657572024-01-09 0:09:23328 days ago1704758963
0xB38283CB...265DdF093
0 ETH
189641882024-01-08 18:52:47329 days ago1704739967
0xB38283CB...265DdF093
0 ETH
189641882024-01-08 18:52:47329 days ago1704739967
0xB38283CB...265DdF093
0 ETH
189641492024-01-08 18:44:47329 days ago1704739487
0xB38283CB...265DdF093
0 ETH
189641492024-01-08 18:44:47329 days ago1704739487
0xB38283CB...265DdF093
0 ETH
189639812024-01-08 18:09:59329 days ago1704737399
0xB38283CB...265DdF093
0 ETH
189639812024-01-08 18:09:59329 days ago1704737399
0xB38283CB...265DdF093
0 ETH
189639142024-01-08 17:56:23329 days ago1704736583
0xB38283CB...265DdF093
0 ETH
189639142024-01-08 17:56:23329 days ago1704736583
0xB38283CB...265DdF093
0 ETH
189634092024-01-08 16:14:35329 days ago1704730475
0xB38283CB...265DdF093
0 ETH
189634092024-01-08 16:14:35329 days ago1704730475
0xB38283CB...265DdF093
0 ETH
189631322024-01-08 15:18:23329 days ago1704727103
0xB38283CB...265DdF093
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BlurAirdrop2

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 20000 runs

Other Settings:
london EvmVersion
File 1 of 6 : BlurAirdrop2.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

import { Ownable2Step } from "@openzeppelin/contracts/access/Ownable2Step.sol";
import { MerkleProofLib } from "solmate/utils/MerkleProofLib.sol";

import { IERC20 } from "forge-std/interfaces/IERC20.sol";

contract BlurAirdrop2 is Ownable2Step {
    uint256 public immutable RECLAIM_PERIOD;
    IERC20 public immutable TOKEN;
    address public immutable HOLDING;

    bytes32 public merkleRoot;
    mapping(bytes32 => bool) public claimed;

    event Claimed(address indexed account, uint256 amount);

    error InvalidCaller();
    error TransferFailed();
    error TokensCannotBeReclaimed();
    error InvalidProof();
    error AirdropAlreadyClaimed();

    constructor(address token, address holding, uint256 reclaimDelay, bytes32 _merkleRoot) {
        TOKEN = IERC20(token);
        HOLDING = holding;
        RECLAIM_PERIOD = block.timestamp + reclaimDelay;
        merkleRoot = _merkleRoot;
    }

    function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner {
        merkleRoot = _merkleRoot;
    }

    function claim(address account, uint256 amount, bytes32[] calldata proof) external {
        if (msg.sender != HOLDING) {
            revert InvalidCaller();
        }

        bytes32 leaf = keccak256(abi.encodePacked(account, amount));
        if (claimed[leaf]) {
            revert AirdropAlreadyClaimed();
        }

        if (!MerkleProofLib.verify(proof, merkleRoot, leaf)) {
            revert InvalidProof();
        }
        claimed[leaf] = true;

        bool success = TOKEN.transfer(HOLDING, amount);
        if (!success) {
            revert TransferFailed();
        }

        emit Claimed(account, amount);
    }

    function reclaim(uint256 amount) external onlyOwner {
        if (block.timestamp < RECLAIM_PERIOD) {
            revert TokensCannotBeReclaimed();
        }
        bool success = TOKEN.transfer(msg.sender, amount);
        if (!success) {
            revert TransferFailed();
        }
    }
}

File 2 of 6 : Ownable2Step.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol)

pragma solidity ^0.8.0;

import "./Ownable.sol";

/**
 * @dev Contract module which provides access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership} and {acceptOwnership}.
 *
 * This module is used through inheritance. It will make available all functions
 * from parent (Ownable).
 */
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Returns the address of the pending owner.
     */
    function pendingOwner() public view virtual returns (address) {
        return _pendingOwner;
    }

    /**
     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    /**
     * @dev The new owner accepts the ownership transfer.
     */
    function acceptOwnership() public virtual {
        address sender = _msgSender();
        require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner");
        _transferOwnership(sender);
    }
}

File 3 of 6 : MerkleProofLib.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

/// @notice Gas optimized merkle proof verification library.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/MerkleProofLib.sol)
/// @author Modified from Solady (https://github.com/Vectorized/solady/blob/main/src/utils/MerkleProofLib.sol)
library MerkleProofLib {
    function verify(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool isValid) {
        /// @solidity memory-safe-assembly
        assembly {
            if proof.length {
                // Left shifting by 5 is like multiplying by 32.
                let end := add(proof.offset, shl(5, proof.length))

                // Initialize offset to the offset of the proof in calldata.
                let offset := proof.offset

                // Iterate over proof elements to compute root hash.
                // prettier-ignore
                for {} 1 {} {
                    // Slot where the leaf should be put in scratch space. If
                    // leaf > calldataload(offset): slot 32, otherwise: slot 0.
                    let leafSlot := shl(5, gt(leaf, calldataload(offset)))

                    // Store elements to hash contiguously in scratch space.
                    // The xor puts calldataload(offset) in whichever slot leaf
                    // is not occupying, so 0 if leafSlot is 32, and 32 otherwise.
                    mstore(leafSlot, leaf)
                    mstore(xor(leafSlot, 32), calldataload(offset))

                    // Reuse leaf to store the hash to reduce stack operations.
                    leaf := keccak256(0, 64) // Hash both slots of scratch space.

                    offset := add(offset, 32) // Shift 1 word per cycle.

                    // prettier-ignore
                    if iszero(lt(offset, end)) { break }
                }
            }

            isValid := eq(leaf, root) // The proof is valid if the roots match.
        }
    }
}

File 4 of 6 : IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2;

/// @dev Interface of the ERC20 standard as defined in the EIP.
/// @dev This includes the optional name, symbol, and decimals metadata.
interface IERC20 {
    /// @dev Emitted when `value` tokens are moved from one account (`from`) to another (`to`).
    event Transfer(address indexed from, address indexed to, uint256 value);

    /// @dev Emitted when the allowance of a `spender` for an `owner` is set, where `value`
    /// is the new allowance.
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /// @notice Returns the amount of tokens in existence.
    function totalSupply() external view returns (uint256);

    /// @notice Returns the amount of tokens owned by `account`.
    function balanceOf(address account) external view returns (uint256);

    /// @notice Moves `amount` tokens from the caller's account to `to`.
    function transfer(address to, uint256 amount) external returns (bool);

    /// @notice Returns the remaining number of tokens that `spender` is allowed
    /// to spend on behalf of `owner`
    function allowance(address owner, address spender) external view returns (uint256);

    /// @notice Sets `amount` as the allowance of `spender` over the caller's tokens.
    /// @dev Be aware of front-running risks: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    function approve(address spender, uint256 amount) external returns (bool);

    /// @notice Moves `amount` tokens from `from` to `to` using the allowance mechanism.
    /// `amount` is then deducted from the caller's allowance.
    function transferFrom(address from, address to, uint256 amount) external returns (bool);

    /// @notice Returns the name of the token.
    function name() external view returns (string memory);

    /// @notice Returns the symbol of the token.
    function symbol() external view returns (string memory);

    /// @notice Returns the decimals places of the token.
    function decimals() external view returns (uint8);
}

File 5 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 6 of 6 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "solmate/=lib/solmate/src/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin/=lib/openzeppelin-contracts/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 20000
  },
  "metadata": {
    "useLiteralContent": false,
    "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":"address","name":"holding","type":"address"},{"internalType":"uint256","name":"reclaimDelay","type":"uint256"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AirdropAlreadyClaimed","type":"error"},{"inputs":[],"name":"InvalidCaller","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[],"name":"TokensCannotBeReclaimed","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"HOLDING","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RECLAIM_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"claimed","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":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reclaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e060405234801561001057600080fd5b50604051610cb3380380610cb383398101604081905261002f916100f7565b61003833610064565b6001600160a01b0380851660a052831660c052610055824261013a565b60805260025550610161915050565b600180546001600160a01b03191690556100888161008b602090811b61085a17901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146100f257600080fd5b919050565b6000806000806080858703121561010d57600080fd5b610116856100db565b9350610124602086016100db565b6040860151606090960151949790965092505050565b8082018082111561015b57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c051610b016101b260003960008181610123015281816103d801526105a20152600081816101c30152818161030101526105d101526000818160e901526102710152610b016000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806379ba50971161008c5780638da5cb5b116100665780638da5cb5b146101e5578063cc3c0f0614610203578063e30c397814610236578063f2fde38b1461025457600080fd5b806379ba5097146101a35780637cb64759146101ab57806382bfefc8146101be57600080fd5b80632eb4a7ab116100bd5780632eb4a7ab1461017f5780633d13f87414610188578063715018a61461019b57600080fd5b80630f8fec6a146100e457806322433ba91461011e5780632dabbeed1461016a575b600080fd5b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101457f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610115565b61017d6101783660046109bb565b610267565b005b61010b60025481565b61017d6101963660046109fd565b6103c0565b61017d6106cf565b61017d6106e3565b61017d6101b93660046109bb565b61079d565b6101457f000000000000000000000000000000000000000000000000000000000000000081565b60005473ffffffffffffffffffffffffffffffffffffffff16610145565b6102266102113660046109bb565b60036020526000908152604090205460ff1681565b6040519015158152602001610115565b60015473ffffffffffffffffffffffffffffffffffffffff16610145565b61017d610262366004610a87565b6107aa565b61026f6108cf565b7f00000000000000000000000000000000000000000000000000000000000000004210156102c9576040517f039dba2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303816000875af115801561035f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103839190610aa9565b9050806103bc576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461042f576040517f48f5c3ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b16602082015260348101849052600090605401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152600390935291205490915060ff16156104eb576040517fe4ca4c0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104f9838360025484610950565b61052f576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af115801561061a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063e9190610aa9565b905080610677576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff167fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a866040516106bf91815260200190565b60405180910390a2505050505050565b6106d76108cf565b6106e1600061098a565b565b600154339073ffffffffffffffffffffffffffffffffffffffff168114610791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61079a8161098a565b50565b6107a56108cf565b600255565b6107b26108cf565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561081560005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610788565b60008315610982578360051b8501855b803580851160051b948552602094851852604060002093018181106109605750505b501492915050565b600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561079a8161085a565b6000602082840312156109cd57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146109f857600080fd5b919050565b60008060008060608587031215610a1357600080fd5b610a1c856109d4565b935060208501359250604085013567ffffffffffffffff80821115610a4057600080fd5b818701915087601f830112610a5457600080fd5b813581811115610a6357600080fd5b8860208260051b8501011115610a7857600080fd5b95989497505060200194505050565b600060208284031215610a9957600080fd5b610aa2826109d4565b9392505050565b600060208284031215610abb57600080fd5b81518015158114610aa257600080fdfea2646970667358221220eaf2f0d1a5753bd04b52ceab3ad8965fc7f155a8d702bfd4f8ec117535a715d564736f6c634300081100330000000000000000000000005283d291dbcf85356a21ba090e6db59121208b44000000000000000000000000ec2432a227440139ddf1044c3fea7ae03203933e00000000000000000000000000000000000000000000000000000000003b5380dead000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100df5760003560e01c806379ba50971161008c5780638da5cb5b116100665780638da5cb5b146101e5578063cc3c0f0614610203578063e30c397814610236578063f2fde38b1461025457600080fd5b806379ba5097146101a35780637cb64759146101ab57806382bfefc8146101be57600080fd5b80632eb4a7ab116100bd5780632eb4a7ab1461017f5780633d13f87414610188578063715018a61461019b57600080fd5b80630f8fec6a146100e457806322433ba91461011e5780632dabbeed1461016a575b600080fd5b61010b7f000000000000000000000000000000000000000000000000000000006594771b81565b6040519081526020015b60405180910390f35b6101457f000000000000000000000000ec2432a227440139ddf1044c3fea7ae03203933e81565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610115565b61017d6101783660046109bb565b610267565b005b61010b60025481565b61017d6101963660046109fd565b6103c0565b61017d6106cf565b61017d6106e3565b61017d6101b93660046109bb565b61079d565b6101457f0000000000000000000000005283d291dbcf85356a21ba090e6db59121208b4481565b60005473ffffffffffffffffffffffffffffffffffffffff16610145565b6102266102113660046109bb565b60036020526000908152604090205460ff1681565b6040519015158152602001610115565b60015473ffffffffffffffffffffffffffffffffffffffff16610145565b61017d610262366004610a87565b6107aa565b61026f6108cf565b7f000000000000000000000000000000000000000000000000000000006594771b4210156102c9576040517f039dba2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290526000907f0000000000000000000000005283d291dbcf85356a21ba090e6db59121208b4473ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303816000875af115801561035f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103839190610aa9565b9050806103bc576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ec2432a227440139ddf1044c3fea7ae03203933e161461042f576040517f48f5c3ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b16602082015260348101849052600090605401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152600390935291205490915060ff16156104eb576040517fe4ca4c0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104f9838360025484610950565b61052f576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ec2432a227440139ddf1044c3fea7ae03203933e81166004830152602482018790527f0000000000000000000000005283d291dbcf85356a21ba090e6db59121208b44169063a9059cbb906044016020604051808303816000875af115801561061a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063e9190610aa9565b905080610677576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff167fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a866040516106bf91815260200190565b60405180910390a2505050505050565b6106d76108cf565b6106e1600061098a565b565b600154339073ffffffffffffffffffffffffffffffffffffffff168114610791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61079a8161098a565b50565b6107a56108cf565b600255565b6107b26108cf565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561081560005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610788565b60008315610982578360051b8501855b803580851160051b948552602094851852604060002093018181106109605750505b501492915050565b600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561079a8161085a565b6000602082840312156109cd57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146109f857600080fd5b919050565b60008060008060608587031215610a1357600080fd5b610a1c856109d4565b935060208501359250604085013567ffffffffffffffff80821115610a4057600080fd5b818701915087601f830112610a5457600080fd5b813581811115610a6357600080fd5b8860208260051b8501011115610a7857600080fd5b95989497505060200194505050565b600060208284031215610a9957600080fd5b610aa2826109d4565b9392505050565b600060208284031215610abb57600080fd5b81518015158114610aa257600080fdfea2646970667358221220eaf2f0d1a5753bd04b52ceab3ad8965fc7f155a8d702bfd4f8ec117535a715d564736f6c63430008110033

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

0000000000000000000000005283d291dbcf85356a21ba090e6db59121208b44000000000000000000000000ec2432a227440139ddf1044c3fea7ae03203933e00000000000000000000000000000000000000000000000000000000003b5380dead000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : token (address): 0x5283D291DBCF85356A21bA090E6db59121208b44
Arg [1] : holding (address): 0xeC2432a227440139DDF1044c3feA7Ae03203933E
Arg [2] : reclaimDelay (uint256): 3888000
Arg [3] : _merkleRoot (bytes32): 0xdead000000000000000000000000000000000000000000000000000000000000

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000005283d291dbcf85356a21ba090e6db59121208b44
Arg [1] : 000000000000000000000000ec2432a227440139ddf1044c3fea7ae03203933e
Arg [2] : 00000000000000000000000000000000000000000000000000000000003b5380
Arg [3] : dead000000000000000000000000000000000000000000000000000000000000


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.