Contract 0x3938246c3f0e614e834b9f63a7c2e540f5c573e2

Contract Overview

Balance:
0 AVAX

AVAX Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x095c06cd0b15c4cedb35bba265fb7023cb02ac6fa7362631e29f82f1a025cdcdWithdraw Tokens150616802022-05-23 6:31:102 hrs ago0xa8f1127481c8d007e1dc4005754ed9a5ba3c0beb IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.0022671 27.5
0xf5c4f86dbe90279d0d0314f63e6ec3a7f3adca3e81d4d7f1a2a6d27728004c91Withdraw Tokens150501482022-05-23 0:04:498 hrs 27 mins ago0x5af26e87390d114c834e76050005af9e6f403d45 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.0022675675 27.5
0x55f462453c69a3af5b4762e32a1602006944d58f4d3472d34fabbe6b1de18e50Withdraw Tokens150301972022-05-22 12:59:2019 hrs 32 mins ago0xe1404cff660ffa1c8e6f215999c83aeb00c4d708 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.0022675675 27.5
0x74f908c03ed6958e85f20cb48d47aa93807d041fc523f86c3eb990495eb4b0a0Withdraw Tokens149887172022-05-21 13:49:551 day 18 hrs ago0x326310f3b1ce769355bc5c607cb8cb4ac43d8cd8 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.0022671 27.5
0x51b9feec00bd8ef9b6ac66e74bef11d20c738d8369790d6c9559a4720d1e5c46Withdraw Tokens149866272022-05-21 12:40:041 day 19 hrs ago0xceb2753c38eb3f46cb7fcb4be93dd12ad307615e IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.00273768 27.5
0x66993b786028e947054ecad03c190ea3cc5b3b9818b8496914aca5c3ecfb2779Withdraw Tokens149804152022-05-21 9:12:211 day 23 hrs ago0x83d5bda20b45c73d57a04dc1705dec27991c64ba IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.0022678975 27.5
0x29ba7c45c32d068bc827673a6432a2cd7517f15cb227bdd77fc8620627362f19Withdraw Tokens149359292022-05-20 8:32:012 days 23 hrs ago0x492a5a3acf5097ca339a1aed8f2db6dbb7ab8a28 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.0022678975 27.5
0x5d4b29b572f81141ae910893e1945fc4d4c17788336133ecb15f34e8e69f8df5Withdraw Tokens148723012022-05-18 21:11:444 days 11 hrs ago0x90731e4be7d325365d20dec8fde9effb79007029 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.00226644 27.5
0xc15f1d4daffe5a1cb4dbcfc4ffbe4656619c364dbe4ded1c2ec1ba68006a2ceeWithdraw Tokens148549002022-05-18 11:30:384 days 21 hrs ago0x7d61915094e003a66cff99ccd6ade06b5faeda59 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.00273768 27.5
0x3d1c76242d03bd626d8f6fe1dee71e00f7ddf718aa6dd5370534d644cef86a3cWithdraw Tokens148519162022-05-18 9:50:384 days 22 hrs ago0x30d4a4ab8e31fec2ce6cfa634c64e6257f2a039a IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.00226743 27.5
0xe60f13439ae2b71eab3c6ba1059804e2bdf4d99fb5b4cc5b773c03545230b6abWithdraw Tokens147830152022-05-16 19:19:086 days 13 hrs ago0xd92ee6c201285e1d7d7ecd50a35ce8886303fdad IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.0022671 27.5
0xaa8314ce73b1a47e88dfae4bab33ffddd52918f57df9e5bf9940c59f97812976Withdraw Tokens147580572022-05-16 5:29:287 days 3 hrs ago0xe559e8d7f99a9f479f9e38248cd93d6a095f5038 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.0027374875 27.5
0xd10c7f36b17ddd4f69dd4bbf6ab1ed7ac0d9515f523c7771d8c6f2cd91a4450dWithdraw Tokens146958452022-05-14 18:52:018 days 13 hrs ago0x77fa30504dc1fe4d2823e8314a1bb93bcf9862e4 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.0022671 27.5
0x13026a1c676a76080a991f0015d7a24bff7f46161725cc388787196b9a55ce85Withdraw Tokens146813152022-05-14 10:47:468 days 21 hrs ago0x68582ee0355a5e93092c943e261118973c9aa3a5 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.0022675675 27.5
0xd6c5ba45a94558d1f3a590c636f0130757eb48e0f8e1b272e2b012e4a3492cc0Withdraw Tokens146808902022-05-14 10:33:338 days 21 hrs ago0x5fa3fe4a8ddd907a8a1b4fd7fb7b11d0f92a20a5 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.00226743 27.5
0xf69d3b1041b398ff63400901471579eb4f041b8bb38ad0e343bb928083f98884Withdraw Tokens146787322022-05-14 9:21:358 days 23 hrs ago0xe074de0651c1bb1df258ab9d71e8db952121e0fb IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.00273768 27.5
0x00a11f9e3c613677400ba92f72b330e290a1ef12d818dd26d7806edec1659887Withdraw Tokens146623022022-05-14 0:13:049 days 8 hrs ago0x5c5f8a8f9ef037f456c6c7bdc98353d02ae8760b IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.002398719849 29.086321524
0xe72715937b7bd478a89f32dc07b3c97719a3462c67506763235595821584e8e4Withdraw Tokens146621782022-05-14 0:09:069 days 8 hrs ago0x7c65ddba2d6c196e63ff431807c6bc3eb7f6ff46 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.002295042078 27.829148878
0xa6e8433070140c4e9690d52d4ca97d1011aa559eabd6685193766ef232c39e09Withdraw Tokens146145492022-05-12 21:42:3610 days 10 hrs ago0x7b002c466bc13c273208c4716ce61ab32c156ff3 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.006329114877 63.565114419
0x838a25b3f9fc8b5e5f8bbac63a047dbac56e3dc4c9ffdbfe58ac34feb9a7bcb5Withdraw Tokens146075692022-05-12 17:49:3010 days 14 hrs ago0x424f9ab834f02a62d7aca595b8026c2166f64ced IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.006245518368 75.747324116
0x26626e0fe856f4590002059a1bb156e3eb985242f547b049875d747b28f27735Withdraw Tokens144176392022-05-08 6:46:5215 days 1 hr ago0x15cd73fd32a7a357bf7924fb1078ca080e956220 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.002656369055 32.210516136
0x22bf576a43a31683d723623ca45af6a48c20dfbe5683ff756b501ff911f67973Withdraw Tokens143948572022-05-07 17:18:3715 days 15 hrs ago0x0f49f8d3db023e9f1e061c2c8a69726aaac18fd2 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.00460605487 55.860083083
0x596391ad382ef2087f6ca726bba72c2a1f6c6462279dcb3693f51e9c93037cf1Withdraw Tokens143153832022-05-05 19:32:4417 days 12 hrs ago0x5b38490c2d844a8f5d8bacc96a9ce3f82dccf129 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.019788620921 239.987155986
0x871f29dbeb83f314fa72fcc302fb191e84dae57c57211451b7b18e3b55705196Withdraw Tokens143044422022-05-05 13:12:2317 days 19 hrs ago0x43feb6ef3ca82237eaeb9b36507443a44caaaf3b IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.009060251039 90.994697542
0x88e521ea2f5ef21aeb0777b3fdb6354f3c547360ec08c6a72a98e44cf092760dWithdraw Tokens143043122022-05-05 13:07:5317 days 19 hrs ago0x93e6f0ac49ce5cb462437b6d10b3462bde7bdc91 IN  0x3938246c3f0e614e834b9f63a7c2e540f5c573e20 AVAX0.009483437465 95.25636033
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xfaa5ec315eeea382830414ea4cc02262289394d6

Contract Name:
Airdrop

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at snowtrace.io on 2021-11-09
*/

// Sources flattened with hardhat v2.5.0 https://hardhat.org

// File @openzeppelin/contracts/token/ERC20/[email protected]


pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


// File @openzeppelin/contracts/cryptography/[email protected]


pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        // Check the signature length
        if (signature.length != 65) {
            revert("ECDSA: invalid signature length");
        }

        // Divide the signature in r, s and v variables
        bytes32 r;
        bytes32 s;
        uint8 v;

        // ecrecover takes the signature parameters, and the only way to get them
        // currently is to use assembly.
        // solhint-disable-next-line no-inline-assembly
        assembly {
            r := mload(add(signature, 0x20))
            s := mload(add(signature, 0x40))
            v := byte(0, mload(add(signature, 0x60)))
        }

        return recover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value");
        require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value");

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        require(signer != address(0), "ECDSA: invalid signature");

        return signer;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * replicates the behavior of the
     * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]
     * JSON-RPC method.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }
}


// File contracts/interfaces/IAdmin.sol


pragma solidity 0.6.12;

interface IAdmin {
    function isAdmin(address user) external view returns (bool);
}


// File contracts/math/SafeMath.sol


pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}


// File contracts/airdrop/Airdrop.sol

pragma solidity 0.6.12;




contract Airdrop {

    using ECDSA for bytes32;
    using SafeMath for *;

    IERC20 public airdropToken;
    IAdmin public admin;
    uint256 public totalTokensWithdrawn;

    mapping (address => bool) public wasClaimed;

    event TokensAirdropped(address beneficiary, uint256 amount);

    // Constructor, initial setup
    constructor(address _airdropToken, address _admin) public {
        require(_admin != address(0));
        require(_airdropToken != address(0));

        admin = IAdmin(_admin);
        airdropToken = IERC20(_airdropToken);
    }

    // Function to withdraw tokens.
    function withdrawTokens(bytes memory signature, uint256 amount) public {
        require(msg.sender == tx.origin, "Require that message sender is tx-origin.");

        address beneficiary = msg.sender;

        require(checkSignature(signature, beneficiary, amount), "Not eligible to claim tokens!");
        require(!wasClaimed[beneficiary], "Already claimed!");
        wasClaimed[msg.sender] = true;

        bool status = airdropToken.transfer(beneficiary, amount);
        require(status, "Token transfer status is false.");

        totalTokensWithdrawn = totalTokensWithdrawn.add(amount);
        emit TokensAirdropped(beneficiary, amount);
    }

    // Get who signed the message based on the params
    function getSigner(bytes memory signature, address beneficiary, uint256 amount) public view returns (address) {
        bytes32 hash = keccak256(abi.encodePacked(beneficiary, amount, address(this)));
        bytes32 messageHash = hash.toEthSignedMessageHash();
        return messageHash.recover(signature);
    }

    // Check that signature is valid, and is signed by Admin wallets
    function checkSignature(bytes memory signature, address beneficiary, uint256 amount) public view returns (bool) {
        return admin.isAdmin(getSigner(signature, beneficiary, amount));
    }

}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_airdropToken","type":"address"},{"internalType":"address","name":"_admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensAirdropped","type":"event"},{"inputs":[],"name":"admin","outputs":[{"internalType":"contract IAdmin","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"checkSignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wasClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50604051610a6d380380610a6d8339818101604052604081101561003357600080fd5b5080516020909101516001600160a01b03811661004f57600080fd5b6001600160a01b03821661006257600080fd5b600180546001600160a01b039283166001600160a01b031991821617909155600080549390921692169190911790556109cd806100a06000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636066eb7b1161005b5780636066eb7b14610204578063bd8d8c32146102cc578063cac37f93146102f2578063f851a4401461030c5761007d565b80632aceb8cb14610082578063408ba15d1461012c5780634d06068a146101fc575b600080fd5b61012a6004803603604081101561009857600080fd5b8101906020810181356401000000008111156100b357600080fd5b8201836020820111156100c557600080fd5b803590602001918460018302840111640100000000831117156100e757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610314915050565b005b6101e06004803603606081101561014257600080fd5b81019060208101813564010000000081111561015d57600080fd5b82018360208201111561016f57600080fd5b8035906020019184600183028401116401000000008311171561019157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335169350505060200135610555565b604080516001600160a01b039092168252519081900360200190f35b6101e06105c0565b6102b86004803603606081101561021a57600080fd5b81019060208101813564010000000081111561023557600080fd5b82018360208201111561024757600080fd5b8035906020019184600183028401116401000000008311171561026957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383351693505050602001356105cf565b604080519115158252519081900360200190f35b6102b8600480360360208110156102e257600080fd5b50356001600160a01b031661065f565b6102fa610674565b60408051918252519081900360200190f35b6101e061067a565b3332146103525760405162461bcd60e51b815260040180806020018281038252602981526020018061096f6029913960400191505060405180910390fd5b3361035e8382846105cf565b6103af576040805162461bcd60e51b815260206004820152601d60248201527f4e6f7420656c696769626c6520746f20636c61696d20746f6b656e7321000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff1615610410576040805162461bcd60e51b815260206004820152601060248201526f416c726561647920636c61696d65642160801b604482015290519081900360640190fd5b336000908152600360209081526040808320805460ff191660011790558254815163a9059cbb60e01b81526001600160a01b038681166004830152602482018890529251919092169263a9059cbb926044808201939182900301818787803b15801561047b57600080fd5b505af115801561048f573d6000803e3d6000fd5b505050506040513d60208110156104a557600080fd5b50519050806104fb576040805162461bcd60e51b815260206004820152601f60248201527f546f6b656e207472616e73666572207374617475732069732066616c73652e00604482015290519081900360640190fd5b6002546105089084610689565b600255604080516001600160a01b03841681526020810185905281517fb82d2a7de6e3c04c554cd659f5f2b8d49c0131c0363c91a4ccef6756d1602990929181900390910190a150505050565b60408051606084811b6bffffffffffffffffffffffff1916602080840191909152603483018590523090911b60548301528251808303604801815260689092019092528051910120600090816105aa826106ea565b90506105b6818761073b565b9695505050505050565b6000546001600160a01b031681565b6001546000906001600160a01b03166324d7806c6105ee868686610555565b6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561062b57600080fd5b505afa15801561063f573d6000803e3d6000fd5b505050506040513d602081101561065557600080fd5b5051949350505050565b60036020526000908152604090205460ff1681565b60025481565b6001546001600160a01b031681565b6000828201838110156106e3576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b60008151604114610793576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6105b68682858560007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561080d5760405162461bcd60e51b815260040180806020018281038252602281526020018061092b6022913960400191505060405180910390fd5b8360ff16601b148061082257508360ff16601c145b61085d5760405162461bcd60e51b815260040180806020018281038252602281526020018061094d6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156108b9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610921576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9594505050505056fe45434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565526571756972652074686174206d6573736167652073656e6465722069732074782d6f726967696e2ea26469706673582212205180bc349782d80ef7e858731eaf3fff274f3213757b0f27e3e3513ec591656d64736f6c634300060c0033000000000000000000000000a32608e873f9ddef944b24798db69d80bbb4d1ed00000000000000000000000068c58e1107bce9be240af941151d42101086af56

Deployed ByteCode Sourcemap

14597:1948:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15220:668;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15220:668:0;;-1:-1:-1;;15220:668:0;;;-1:-1:-1;15220:668:0;;-1:-1:-1;;15220:668:0:i;:::-;;15951:317;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15951:317:0;;-1:-1:-1;;;;;;;15951:317:0;;;;-1:-1:-1;;;15951:317:0;;;;:::i;:::-;;;;-1:-1:-1;;;;;15951:317:0;;;;;;;;;;;;;;14682:26;;;:::i;16346:194::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16346:194:0;;-1:-1:-1;;;;;;;16346:194:0;;;;-1:-1:-1;;;16346:194:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14785:43;;;;;;;;;;;;;;;;-1:-1:-1;14785:43:0;-1:-1:-1;;;;;14785:43:0;;:::i;14741:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;14715:19;;;:::i;15220:668::-;15310:10;15324:9;15310:23;15302:77;;;;-1:-1:-1;;;15302:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15414:10;15445:46;15460:9;15414:10;15484:6;15445:14;:46::i;:::-;15437:88;;;;;-1:-1:-1;;;15437:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15545:23:0;;;;;;:10;:23;;;;;;;;15544:24;15536:53;;;;;-1:-1:-1;;;15536:53:0;;;;;;;;;;;;-1:-1:-1;;;15536:53:0;;;;;;;;;;;;;;;15611:10;15600:22;;;;:10;:22;;;;;;;;:29;;-1:-1:-1;;15600:29:0;15625:4;15600:29;;;15656:12;;:42;;-1:-1:-1;;;15656:42:0;;-1:-1:-1;;;;;15656:42:0;;;;;;;;;;;;;;;:12;;;;;:21;;:42;;;;;;;;;;;15600:22;15656:12;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15656:42:0;;-1:-1:-1;15656:42:0;15709:50;;;;;-1:-1:-1;;;15709:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15795:20;;:32;;15820:6;15795:24;:32::i;:::-;15772:20;:55;15843:37;;;-1:-1:-1;;;;;15843:37:0;;;;;;;;;;;;;;;;;;;;;;;15220:668;;;;:::o;15951:317::-;16097:52;;;;;;;-1:-1:-1;;16097:52:0;;;;;;;;;;;;;;;16143:4;16097:52;;;;;;;;;;;;;;;;;;;;;;;16087:63;;;;;-1:-1:-1;;;16183:29:0;16087:63;16183:27;:29::i;:::-;16161:51;-1:-1:-1;16230:30:0;16161:51;16250:9;16230:19;:30::i;:::-;16223:37;15951:317;-1:-1:-1;;;;;;15951:317:0:o;14682:26::-;;;-1:-1:-1;;;;;14682:26:0;;:::o;16346:194::-;16476:5;;16452:4;;-1:-1:-1;;;;;16476:5:0;:13;16490:41;16500:9;16511:11;16524:6;16490:9;:41::i;:::-;16476:56;;;;;;;;;;;;;-1:-1:-1;;;;;16476:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16476:56:0;;16346:194;-1:-1:-1;;;;16346:194:0:o;14785:43::-;;;;;;;;;;;;;;;:::o;14741:35::-;;;;:::o;14715:19::-;;;-1:-1:-1;;;;;14715:19:0;;:::o;9854:179::-;9912:7;9944:5;;;9968:6;;;;9960:46;;;;;-1:-1:-1;;;9960:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10024:1;9854:179;-1:-1:-1;;;9854:179:0:o;6631:269::-;6833:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6823:69;;;;;;6631:269::o;4010:761::-;4088:7;4151:9;:16;4171:2;4151:22;4147:96;;4190:41;;;-1:-1:-1;;;4190:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4147:96;4604:4;4589:20;;4583:27;4650:4;4635:20;;4629:27;4704:4;4689:20;;4683:27;4312:9;4675:36;4741:22;4749:4;4675:36;4583:27;4629;5010:7;5935:66;5921:80;;;5913:127;;;;-1:-1:-1;;;5913:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6059:1;:7;;6064:2;6059:7;:18;;;;6070:1;:7;;6075:2;6070:7;6059:18;6051:65;;;;-1:-1:-1;;;6051:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6214:14;6231:24;6241:4;6247:1;6250;6253;6231:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6231:24:0;;-1:-1:-1;;6231:24:0;;;-1:-1:-1;;;;;;;6274:20:0;;6266:57;;;;;-1:-1:-1;;;6266:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6343:6;4925:1432;-1:-1:-1;;;;;4925:1432:0:o

Swarm Source

ipfs://5180bc349782d80ef7e858731eaf3fff274f3213757b0f27e3e3513ec591656d
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.