Contract 0xEF8f8e370722Ae405449Cb4cC6864AA0B4a7E6a0

 
 
Txn Hash
Method
Block
From
To
Value
0x326f5d309eac3d6bcafdaad15350c1df3b4573c30780891e1f5e6d6607c6ede6Apply To Batch136393862021-11-18 12:39:04271 days 19 hrs ago0xf1a1602c90d8e510bc583eabb53667e3afae4b52 IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01060951 91.‍67475797
0x168f21ea72189bd53c7e4d0ddda56b10928e11a6510fc236ed89bdff05567972Apply To Batch136390732021-11-18 11:26:34271 days 20 hrs ago0x18cf08087d9968cb0319bbcbce5f2598cab2722e IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍00877012 72.‍76303666
0x58c7f306dab53d2800ec89ab4769131a22c883c22f9e1fc7ebee7260c786d8d4Apply To Batch136389502021-11-18 11:02:37271 days 20 hrs ago0x14ab9f431b7d25fcad366ec9511dce38e229745c IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01051782 87.‍26315436
0x4032a83dad23f7ccd4573db774d8155ca7cb2663cae419acff42a6edb26181e2Apply To Batch136384722021-11-18 9:19:54271 days 22 hrs ago0x06620b06ee70878a6d9dff1649a051ebce3e8c46 IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01509889 125.‍27085383
0x917d2929381f1103f324a0a254b84f026d08b592bdcec415097d150ad79b000fApply To Batch136383292021-11-18 8:45:47271 days 22 hrs agoENS Name guozi.eth IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01025968 85.‍12138992
0xec93f0f7853361ee5e2ceee5160ce4fe5f72fb392b5522572097426088785c7dApply To Batch136371532021-11-18 4:13:58272 days 3 hrs ago0x3cd1a28be614136e26f867c9fe47821fcf6dc7f6 IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01436948 119.‍21913201
0xa826966a00c2893f5353d983040becc818acb1fd6f9ae8fe36ab69e4abec91b7Apply To Batch136361102021-11-18 0:19:57272 days 7 hrs agoENS Name cardenas.eth IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍0184103 152.‍7445527
0xb142e4d3588af35c9c6c69c1fce2c3cd816266c659f5c8b2a145f0e0b585f649Apply To Batch136345222021-11-17 18:15:55272 days 13 hrs ago0x87d4dd3f3425a3e52c2e6729485cadd47b49f41e IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01549741 128.‍57725355
0xd329f7fe7eabe9ea36b357f707fd443476cb8d671ef3c77c24432a8b93f5d751Apply To Batch136335792021-11-17 14:47:24272 days 16 hrs ago0xf429ac3a110e5ec791e65a8ebc0cce41f1d014e9 IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01412516 117.‍19210816
0x161def0791045bcca18daa46ddafbd31c83f16e6c47156cc2c08add6e39091faApply To Batch136334982021-11-17 14:29:06272 days 17 hrs ago0xafa7ff8b04943c2d981c6d8072bd27b13a3c7901 IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01358201 112.‍68578327
0xefa0593c804edda2cbf1ebbcce2f99a8207be1fcb224ac6ccc4b1895d4e9cf06Apply To Batch136334222021-11-17 14:13:19272 days 17 hrs ago0x2e477914b7ef2e7a7dbdaf7455f2c483b8d4ec69 IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01288295 106.‍88588221
0x9c20bbb8e19f5ffa7ccc2060a193a477d752292fbb91d1548c94e2e18e27740bApply To Batch136330932021-11-17 13:09:22272 days 18 hrs agoENS Name dosendme.eth IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01006716 86.‍98836133
0x0e828d67f35bda125ca84c19e7f284a1248734857bacaadbcabdc2b8a1c8b20dApply To Batch136330092021-11-17 12:52:26272 days 18 hrs agoENS Name ggent79.eth IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01599553 132.‍70996413
0x0402e0f4ab26690c2a02039ec1205eb204c4047e0ee9520d20fd4dd3b000e3ddApply To Batch136326582021-11-17 11:28:14272 days 20 hrs agoENS Name 0x2020.eth IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01094201 90.‍78254121
0x6c4029091c57dd99a6fe4d810e3343cd5400478b4f55c4590eb8cde08b0ea71bApply To Batch136325492021-11-17 11:02:03272 days 20 hrs ago0x4417990b6b2e56d86c47fde049f2f22ed235306b IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01494797124.‍01868181
0xe40df7cd1a562b69a6d27e2b290e8f156b5b91637af46e87e4b66bbae72e49bdApply To Batch136324922021-11-17 10:48:41272 days 20 hrs ago0xdccede7fc9210649eb6e593aeb351f89adb92831 IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01096823 91
0xe065f8d02d436685eb78701dba70b825646f9d7e65c2f133c6db02a7bc49d8cbApply To Batch136318892021-11-17 8:31:52272 days 23 hrs ago0x36a928b6241a055f493cbafa564e4bc228171178 IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01233779 102.‍3628604
0x27b64b4e35bfbc28506e9496e970bd1eb45d55cc986b572d5b812782f516cf60Apply To Batch136315692021-11-17 7:21:00273 days 18 mins agoENS Name blankspace.eth IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01171964 97.‍23428412
0x8d53cc78ea6fe00bbfee4ae1fadaa514e0ea8b575612cf44262a057ea701ecbfApply To Batch136310652021-11-17 5:20:59273 days 2 hrs ago0xa742a54e0b9cd1cac03c8f569ba4c606694261f9 IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01242313 103.‍07092326
0xa38285946c488ed96862f2eaf7d5775b1929883c69c06d32dccd8ddc6ffac7caApply To Batch136310502021-11-17 5:18:03273 days 2 hrs agoENS Name jsinc.eth IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01335026 110.‍76303833
0xba6631238802e0ead5499f839a42f8dcdb95f1192455d03f13c1754810c246a2Apply To Batch136307442021-11-17 4:07:46273 days 3 hrs ago0x9f89e8788f9bd621902856860611b3b02e5caf8e IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01712692 147.‍99038437
0x6ce25a1180e6edec80bb67d4f03674bd01c71ea61a3dc55db5ca523b0f8588deApply To Batch136293482021-11-16 22:56:19273 days 8 hrs agoENS Name legionz.eth IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01871946 155.‍30960489
0xfec03534d036d9d2d77f29606bd711e0d658dbd4a65ad255d86c2b163b8e9247Apply To Batch136266782021-11-16 12:46:51273 days 18 hrs agoENS Name errorrorre.eth IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01377933 119.‍06451485
0x1ef06fab9e735727ea2aeb1d49c3c4890f89f3d51eef7d766937cfad2ad5f306Apply To Batch136229732021-11-15 22:33:32274 days 9 hrs agoENS Name awbvious.eth IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01413409 117.‍26619088
0xac91e442480c98784a5e9953638bcac3873fc73ae8f251e953ad6549ff0cfcbfApply To Batch136212312021-11-15 15:53:01274 days 15 hrs agoENS Name joelallouz.eth IN  0xef8f8e370722ae405449cb4cc6864aa0b4a7e6a00 Ether0.‍01634385 135.‍59985479
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WaitlistBatch

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

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

pragma solidity ^0.5.16;
pragma experimental ABIEncoderV2;

import {Ownable} from "../lib/Ownable.sol";
import {SafeMath} from "../lib/SafeMath.sol";
import {SafeERC20} from "../lib/SafeERC20.sol";

import {IERC20} from "../token/IERC20.sol";

contract WaitlistBatch is Ownable {

    /* ========== Libraries ========== */

    using SafeMath for uint256;

    /* ========== Types ========== */

    struct Batch {
        uint256 totalSpots;
        uint256 filledSpots;
        uint256 batchStartTimestamp;
        uint256 depositAmount;
        uint256 approvedAt;
    }

    struct UserBatchInfo {
        bool hasParticipated;
        uint256 batchNumber;
        uint256 depositAmount;
        uint256 depositRetrievalTimestamp;
    }

    /* ========== Variables ========== */

    address public moderator;

    IERC20 public depositCurrency;

    uint256 public nextBatchNumber;

    uint256 public depositLockupDuration;

    mapping (uint256 => mapping (address => uint256)) public userDepositMapping;

    mapping (uint256 => Batch) public batchMapping;

    mapping (address => uint256) public userBatchMapping;

    mapping (address => bool) public blacklist;

    /* ========== Events ========== */

    event AppliedToBatch(
        address indexed user,
        uint256 batchNumber,
        uint256 amount
    );

    event NewBatchAdded(
        uint256 totalSpots,
        uint256 batchStartTimestamp,
        uint256 depositAmount,
        uint256 batchNumber
    );

    event BatchApproved(uint256 _batchNumber);

    event BatchTimestampChanged(
        uint256 batchNumber,
        uint256 batchStartTimstamp
    );

    event BatchTotalSpotsUpdated(
        uint256 batchNumber,
        uint256 newTotalSpots
    );

    event TokensReclaimed(
        address user,
        uint256 amount
    );

    event TokensReclaimedBlacklist(
        address user,
        uint256 amount
    );

    event TokensTransferred(
        address tokenAddress,
        uint256 amount,
        address destination
    );

    event RemovedFromBlacklist(
        address user
    );

    event AddedToBlacklist(
        address user
    );

    event ModeratorSet(
        address user
    );

    event DepositLockupDurationSet(uint256 _depositLockupDuration);

    /* ========== Modifiers ========== */

    modifier onlyModerator() {
        require(
            msg.sender == moderator,
            "WaitlistBatch: caller is not moderator"
        );
        _;
    }

    /* ========== Constructor ========== */

    constructor(
        address _depositCurrency,
        uint256 _depositLockupDuration
    ) public {
        depositCurrency = IERC20(_depositCurrency);
        depositLockupDuration = _depositLockupDuration;

        // Set the next batch number to 1 to avoid some complications
        // caused by batch number 0
        nextBatchNumber = 1;
    }

    /* ========== Public Getters ========== */

    function getBatchInfoForUser(
        address _user
    )
        public
        view
        returns (UserBatchInfo memory)
    {
        uint256 participatingBatch = userBatchMapping[_user];

        return UserBatchInfo({
            hasParticipated: participatingBatch > 0,
            batchNumber: participatingBatch,
            depositAmount: userDepositMapping[participatingBatch][_user],
            depositRetrievalTimestamp: getDepositRetrievalTimestamp(_user)
        });
    }

    function getTotalNumberOfBatches()
        public
        view
        returns (uint256)
    {
        return nextBatchNumber - 1;
    }

    /**
     * @notice Returns the epoch when the user can withdraw their deposit
     */
    function getDepositRetrievalTimestamp(
        address _account
    )
        public
        view
        returns (uint256)
    {
        uint256 participatingBatch = userBatchMapping[_account];

        Batch memory batch = batchMapping[participatingBatch];

        return batch.approvedAt == 0
            ? 0
            : batch.approvedAt.add(depositLockupDuration);
    }

    /* ========== Public Functions ========== */

    function applyToBatch(
        uint256 _batchNumber
    )
        public
    {
        require(
            _batchNumber > 0 && _batchNumber < nextBatchNumber,
            "WaitlistBatch: batch does not exist"
        );

        // Check if user already applied to a batch
        UserBatchInfo memory batchInfo = getBatchInfoForUser(msg.sender);
        require(
            !batchInfo.hasParticipated,
            "WaitlistBatch: cannot apply to more than one batch"
        );

        Batch storage batch = batchMapping[_batchNumber];

        require(
            batch.filledSpots < batch.totalSpots,
            "WaitlistBatch: batch is filled"
        );

        require(
            currentTimestamp() >= batch.batchStartTimestamp,
            "WaitlistBatch: cannot apply before the start time"
        );

        batch.filledSpots++;

        userDepositMapping[_batchNumber][msg.sender] = batch.depositAmount;
        userBatchMapping[msg.sender] = _batchNumber;

        SafeERC20.safeTransferFrom(
            depositCurrency,
            msg.sender,
            address(this),
            batch.depositAmount
        );

        emit AppliedToBatch(
            msg.sender,
            _batchNumber,
            batch.depositAmount
        );
    }

    function reclaimTokens()
        public
    {
        require(
            blacklist[msg.sender] == false,
            "WaitlistBatch: user is blacklisted"
        );

        UserBatchInfo memory batchInfo = getBatchInfoForUser(msg.sender);

        require(
            batchInfo.hasParticipated,
            "WaitlistBatch: user did not participate in a batch"
        );

        require(
            batchInfo.depositAmount > 0,
            "WaitlistBatch: there are no tokens to reclaim"
        );

        require(
            batchInfo.depositRetrievalTimestamp > 0,
            "WaitlistBatch: the batch is not approved yet"
        );

        require(
            batchInfo.depositRetrievalTimestamp <= currentTimestamp(),
            "WaitlistBatch: the deposit lockup duration has not passed yet"
        );

        userDepositMapping[batchInfo.batchNumber][msg.sender] -= batchInfo.depositAmount;

        SafeERC20.safeTransfer(
            depositCurrency,
            msg.sender,
            batchInfo.depositAmount
        );

        emit TokensReclaimed(msg.sender, batchInfo.depositAmount);
    }

    /* ========== Admin Functions ========== */

    /**
     * @dev Adds a new batch to the `batchMapping` and increases the
     *      count of `totalNumberOfBatches`
     */
    function addNewBatch(
        uint256 _totalSpots,
        uint256 _batchStartTimestamp,
        uint256 _depositAmount
    )
        public
        onlyOwner
    {
        require(
            _batchStartTimestamp >= currentTimestamp(),
            "WaitlistBatch: batch start time cannot be in the past"
        );

        require(
            _depositAmount > 0,
            "WaitlistBatch: deposit amount cannot be 0"
        );

        require(
            _totalSpots > 0,
            "WaitlistBatch: batch cannot have 0 spots"
        );

        Batch memory batch = Batch(
            _totalSpots,
            0,
            _batchStartTimestamp,
            _depositAmount,
            0
        );

        batchMapping[nextBatchNumber] = batch;
        nextBatchNumber = nextBatchNumber + 1;

        emit NewBatchAdded(
            _totalSpots,
            _batchStartTimestamp,
            _depositAmount,
            nextBatchNumber - 1
        );
    }

    /**
     * @dev Approves a batch. Users can then start reclaiming their deposit
     *      after the retrieval date delay.
     */
    function approveBatch(
        uint256 _batchNumber
    )
        external
        onlyOwner
    {
        require(
            _batchNumber > 0 && _batchNumber < nextBatchNumber,
            "WaitlistBatch: the batch does not exist"
        );

        Batch storage batch = batchMapping[_batchNumber];

        require(
            batch.approvedAt == 0,
            "WaitlistBatch: the batch is already approved"
        );

        batch.approvedAt = currentTimestamp();

        emit BatchApproved(_batchNumber);
    }

    function changeBatchStartTimestamp(
        uint256 _batchNumber,
        uint256 _newStartTimestamp
    )
        public
        onlyOwner
    {
        require(
            _batchNumber > 0 && _batchNumber < nextBatchNumber,
            "WaitlistBatch: batch does not exit"
        );

        require(
            _newStartTimestamp >= currentTimestamp(),
            "WaitlistBatch: batch start time cannot be in the past"
        );

        Batch storage batch = batchMapping[_batchNumber];
        batch.batchStartTimestamp = _newStartTimestamp;

        emit BatchTimestampChanged(
            _batchNumber,
            _newStartTimestamp
        );
    }

    function changeBatchTotalSpots(
        uint256 _batchNumber,
        uint256 _newSpots
    )
        public
        onlyOwner
    {
        require(
            _batchNumber > 0 && _batchNumber < nextBatchNumber,
            "WaitlistBatch: the batch does not exist"
        );

        Batch storage batch = batchMapping[_batchNumber];

        require(
            currentTimestamp() < batch.batchStartTimestamp,
            "WaitlistBatch: the batch start date already passed"
        );

        require(
            batch.totalSpots < _newSpots,
            "WaitlistBatch: cannot change total spots to a smaller or equal number"
        );

        batch.totalSpots = _newSpots;

        emit BatchTotalSpotsUpdated(
            _batchNumber,
            _newSpots
        );
    }

    function transferTokens(
        address _tokenAddress,
        uint256 _amount,
        address _destination
    )
        public
        onlyOwner
    {
        SafeERC20.safeTransfer(
            IERC20(_tokenAddress),
            _destination,
            _amount
        );

        emit TokensTransferred(
            _tokenAddress,
            _amount,
            _destination
        );
    }

    function setModerator(
        address _user
    )
        public
        onlyOwner
    {
        moderator = _user;

        emit ModeratorSet(_user);
    }

    function setDepositLockupDuration(
        uint256 _duration
    )
        external
        onlyOwner
    {
        depositLockupDuration = _duration;

        emit DepositLockupDurationSet(depositLockupDuration);
    }

    /* ========== Moderator Functions ========== */

    function addToBlacklist(
        address _user
    )
        public
        onlyModerator
    {
        blacklist[_user] = true;

        emit AddedToBlacklist(_user);
    }

    function removeFromBlacklist(
        address _user
    )
        public
        onlyModerator
    {
        blacklist[_user] = false;

        emit RemovedFromBlacklist(_user);
    }

    /* ========== Dev Functions ========== */

    function currentTimestamp()
        public
        view
        returns (uint256)
    {
        return block.timestamp;
    }
}

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

pragma solidity ^0.5.16;

/**
 * @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.
 */
contract Ownable {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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 onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 3 of 5 : SafeMath.sol
pragma solidity ^0.5.16;

library SafeMath {
    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;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {

        require(b > 0, "SafeMath: division by zero");
        uint256 c = a / b;

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        uint256 c = a - b;

        return c;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
}

File 4 of 5 : SafeERC20.sol
// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity ^0.5.16;

import {IERC20} from "../token/IERC20.sol";

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library SafeERC20 {
    function safeApprove(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        /* solium-disable-next-line */
        (bool success, bytes memory data) = address(token).call(
            abi.encodeWithSelector(0x095ea7b3, to, value)
        );

        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "SafeERC20: APPROVE_FAILED"
        );
    }

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        /* solium-disable-next-line */
        (bool success, bytes memory data) = address(token).call(
            abi.encodeWithSelector(0xa9059cbb, to, value)
        );

        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "SafeERC20: TRANSFER_FAILED"
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        /* solium-disable-next-line */
        (bool success, bytes memory data) = address(token).call(
            abi.encodeWithSelector(
                0x23b872dd,
                from,
                to,
                value
            )
        );

        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "SafeERC20: TRANSFER_FROM_FAILED"
        );
    }
}

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

pragma solidity ^0.5.16;

/**
 * @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
    );
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_depositCurrency","type":"address"},{"internalType":"uint256","name":"_depositLockupDuration","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"AddedToBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"batchNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AppliedToBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_batchNumber","type":"uint256"}],"name":"BatchApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"batchNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"batchStartTimstamp","type":"uint256"}],"name":"BatchTimestampChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"batchNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalSpots","type":"uint256"}],"name":"BatchTotalSpotsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_depositLockupDuration","type":"uint256"}],"name":"DepositLockupDurationSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"ModeratorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalSpots","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"batchStartTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"batchNumber","type":"uint256"}],"name":"NewBatchAdded","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"RemovedFromBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensReclaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensReclaimedBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"destination","type":"address"}],"name":"TokensTransferred","type":"event"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_totalSpots","type":"uint256"},{"internalType":"uint256","name":"_batchStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"_depositAmount","type":"uint256"}],"name":"addNewBatch","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addToBlacklist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_batchNumber","type":"uint256"}],"name":"applyToBatch","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_batchNumber","type":"uint256"}],"name":"approveBatch","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"batchMapping","outputs":[{"internalType":"uint256","name":"totalSpots","type":"uint256"},{"internalType":"uint256","name":"filledSpots","type":"uint256"},{"internalType":"uint256","name":"batchStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"depositAmount","type":"uint256"},{"internalType":"uint256","name":"approvedAt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_batchNumber","type":"uint256"},{"internalType":"uint256","name":"_newStartTimestamp","type":"uint256"}],"name":"changeBatchStartTimestamp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_batchNumber","type":"uint256"},{"internalType":"uint256","name":"_newSpots","type":"uint256"}],"name":"changeBatchTotalSpots","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"depositCurrency","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"depositLockupDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getBatchInfoForUser","outputs":[{"components":[{"internalType":"bool","name":"hasParticipated","type":"bool"},{"internalType":"uint256","name":"batchNumber","type":"uint256"},{"internalType":"uint256","name":"depositAmount","type":"uint256"},{"internalType":"uint256","name":"depositRetrievalTimestamp","type":"uint256"}],"internalType":"struct WaitlistBatch.UserBatchInfo","name":"","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getDepositRetrievalTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalNumberOfBatches","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"moderator","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nextBatchNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reclaimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeFromBlacklist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"setDepositLockupDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"setModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_destination","type":"address"}],"name":"transferTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBatchMapping","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userDepositMapping","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162001f5238038062001f528339810160408190526200003491620000c2565b600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600280546001600160a01b0319166001600160a01b03939093169290921790915560045560016003556200013b565b8051620000af8162000116565b92915050565b8051620000af8162000130565b60008060408385031215620000d657600080fd5b6000620000e48585620000a2565b9250506020620000f785828601620000b5565b9150509250929050565b60006001600160a01b038216620000af565b90565b620001218162000101565b81146200012d57600080fd5b50565b620001218162000113565b611e07806200014b6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c8063715018a6116100de578063bad2352811610097578063dd235d9d11610071578063dd235d9d14610322578063f2fde38b14610335578063f9f92be414610348578063fd71c304146103685761018e565b8063bad23528146102ff578063baf4ffdf14610312578063c0decb361461031a5761018e565b8063715018a61461029657806375bba1891461029e5780637af64483146102b15780637fc313af146102c45780638da5cb5b146102e4578063a71762f5146102ec5761018e565b8063433c2e0f1161014b5780634af350eb116101255780634af350eb146102555780634d7745fc14610268578063537df3b61461027b578063547bde5b1461028e5761018e565b8063433c2e0f1461020b57806344337ea11461022f5780634a5a76c4146102425761018e565b8063074cbf271461019357806317c3ab6d146101a85780631e2ff94f146101d15780632d2d78f3146101d957806338743904146101ee5780633c54caa514610203575b600080fd5b6101a66101a1366004611278565b61037b565b005b6101bb6101b636600461123e565b610457565b6040516101c89190611c86565b60405180910390f35b6101bb610474565b6101e1610478565b6040516101c89190611afa565b6101f6610487565b6040516101c89190611a65565b6101a6610496565b61021e610219366004611220565b6105f1565b6040516101c8959493929190611ce0565b6101a661023d366004611197565b610620565b6101a6610250366004611220565b61069d565b6101a66102633660046111b5565b6106fc565b6101a6610276366004611220565b610764565b6101a6610289366004611197565b6108bb565b6101bb610935565b6101a661093f565b6101a66102ac366004611197565b6109b3565b6101bb6102bf366004611197565b610a28565b6102d76102d2366004611197565b610a3a565b6040516101c89190611c78565b6101f6610aa5565b6101a66102fa366004611278565b610ab4565b6101a661030d3660046112a8565b610b98565b6101bb610cd9565b6101bb610cdf565b6101a6610330366004611220565b610ce5565b6101a6610343366004611197565b610db5565b61035b610356366004611197565b610e60565b6040516101c89190611aec565b6101bb610376366004611197565b610e75565b6000546001600160a01b031633146103ae5760405162461bcd60e51b81526004016103a590611c28565b60405180910390fd5b6000821180156103bf575060035482105b6103db5760405162461bcd60e51b81526004016103a590611b28565b6103e3610474565b8110156104025760405162461bcd60e51b81526004016103a590611c18565b600082815260066020526040908190206002810183905590517f707b5df54f30ae354f00badd6f6f5b1eb061d1f5b6a5a981007120c5de988c879061044a9085908590611c94565b60405180910390a1505050565b600560209081526000928352604080842090915290825290205481565b4290565b6002546001600160a01b031681565b6001546001600160a01b031681565b3360009081526008602052604090205460ff16156104c65760405162461bcd60e51b81526004016103a590611c08565b6104ce61111d565b6104d733610a3a565b80519091506104f85760405162461bcd60e51b81526004016103a590611c48565b600081604001511161051c5760405162461bcd60e51b81526004016103a590611b08565b60008160600151116105405760405162461bcd60e51b81526004016103a590611b88565b610548610474565b8160600151111561056b5760405162461bcd60e51b81526004016103a590611ba8565b6040818101805160208085015160009081526005825284812033808352925293909320805491909103905560025490516105b1926001600160a01b039092169190610f10565b7f22a8aff78fe371f7e69a64e6fc4276227e72c6512ccee617ff32eef318f4a9f33382604001516040516105e6929190611a73565b60405180910390a150565b600660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b6001546001600160a01b0316331461064a5760405162461bcd60e51b81526004016103a590611bb8565b6001600160a01b03811660009081526008602052604090819020805460ff19166001179055517ff9b68063b051b82957fa193585681240904fed808db8b30fc5a2d2202c6ed627906105e6908390611a65565b6000546001600160a01b031633146106c75760405162461bcd60e51b81526004016103a590611c28565b60048190556040517fef028524737ea1f458a2132357986fe78ce4777dc1ed93bb464aaa8151fdc3c0906105e6908390611c86565b6000546001600160a01b031633146107265760405162461bcd60e51b81526004016103a590611c28565b610731838284610f10565b7f2dc85ecd41a2e25618af6e007abb3ce1ee081d7934fdb986d94c9cb2e0763bef83838360405161044a93929190611ac4565b600081118015610775575060035481105b6107915760405162461bcd60e51b81526004016103a590611c68565b61079961111d565b6107a233610a3a565b8051909150156107c45760405162461bcd60e51b81526004016103a590611be8565b600082815260066020526040902080546001820154106107f65760405162461bcd60e51b81526004016103a590611c58565b8060020154610803610474565b10156108215760405162461bcd60e51b81526004016103a590611b58565b60018082018054909101905560038101805460008581526005602090815260408083203380855290835281842094909455600790915290208590556002549154610877926001600160a01b031691903090610ffe565b600381015460405133917fb4400270f9f533da4f05697f80974e2926277d3a8d35a1e4ad37b1e86dd97331916108ae918791611c94565b60405180910390a2505050565b6001546001600160a01b031633146108e55760405162461bcd60e51b81526004016103a590611bb8565b6001600160a01b03811660009081526008602052604090819020805460ff19169055517f2b6bf71b58b3583add364b3d9060ebf8019650f65f5be35f5464b9cb3e4ba2d4906105e6908390611a65565b6003546000190190565b6000546001600160a01b031633146109695760405162461bcd60e51b81526004016103a590611c28565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146109dd5760405162461bcd60e51b81526004016103a590611c28565b600180546001600160a01b0319166001600160a01b0383161790556040517f07abfa597e8dcfbbfa28a386fa0728caf3360f382d92356232125424bcaa6a53906105e6908390611a65565b60076020526000908152604090205481565b610a4261111d565b6001600160a01b0382166000818152600760209081526040808320548151608081018352811515815280840182905281855260058452828520958552949092529182902054918301919091529060608101610a9c85610e75565b90529392505050565b6000546001600160a01b031690565b6000546001600160a01b03163314610ade5760405162461bcd60e51b81526004016103a590611c28565b600082118015610aef575060035482105b610b0b5760405162461bcd60e51b81526004016103a590611b48565b60008281526006602052604090206002810154610b26610474565b10610b435760405162461bcd60e51b81526004016103a590611bd8565b80548211610b635760405162461bcd60e51b81526004016103a590611bc8565b8181556040517ffa9b153d1f6cf996af0270f672231c4d99bcce35f290cb73ce3ef933fd1db97f9061044a9085908590611c94565b6000546001600160a01b03163314610bc25760405162461bcd60e51b81526004016103a590611c28565b610bca610474565b821015610be95760405162461bcd60e51b81526004016103a590611c18565b60008111610c095760405162461bcd60e51b81526004016103a590611c38565b60008311610c295760405162461bcd60e51b81526004016103a590611b78565b610c31611147565b506040805160a081018252848152600060208083018281528385018781526060850187815260808601858152600380548752600690955294879020865181559251600180850191909155915160028401555182840155925160049091015580549182019055915190917f8bb8a081897c04fc27e90f00c642e5128a29c203313d994eb52916fb0e23a8c491610ccb91879187918791611ca2565b60405180910390a150505050565b60045481565b60035481565b6000546001600160a01b03163314610d0f5760405162461bcd60e51b81526004016103a590611c28565b600081118015610d20575060035481105b610d3c5760405162461bcd60e51b81526004016103a590611b48565b6000818152600660205260409020600481015415610d6c5760405162461bcd60e51b81526004016103a590611b98565b610d74610474565b60048201556040517fbee96e551432a70dbd56d04b87c944850a64a94ec2be1af1052d1c03a463875b90610da9908490611c86565b60405180910390a15050565b6000546001600160a01b03163314610ddf5760405162461bcd60e51b81526004016103a590611c28565b6001600160a01b038116610e055760405162461bcd60e51b81526004016103a590611b38565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60086020526000908152604090205460ff1681565b6001600160a01b038116600090815260076020526040812054610e96611147565b50600081815260066020908152604091829020825160a08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004909101546080820181905215610f05576004546080820151610f009163ffffffff6110ef16565b610f08565b60005b949350505050565b60006060846001600160a01b031663a9059cbb8585604051602401610f36929190611ab6565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051610f6f9190611a52565b6000604051808303816000865af19150503d8060008114610fac576040519150601f19603f3d011682016040523d82523d6000602084013e610fb1565b606091505b5091509150818015610fdb575080511580610fdb575080806020019051610fdb9190810190611202565b610ff75760405162461bcd60e51b81526004016103a590611b18565b5050505050565b60006060856001600160a01b03166323b872dd86868660405160240161102693929190611a8e565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161105f9190611a52565b6000604051808303816000865af19150503d806000811461109c576040519150601f19603f3d011682016040523d82523d6000602084013e6110a1565b606091505b50915091508180156110cb5750805115806110cb5750808060200190516110cb9190810190611202565b6110e75760405162461bcd60e51b81526004016103a590611bf8565b505050505050565b6000828201838110156111145760405162461bcd60e51b81526004016103a590611b68565b90505b92915050565b60405180608001604052806000151581526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b803561111781611d9b565b805161111781611db2565b803561111781611dbb565b6000602082840312156111a957600080fd5b6000610f088484611176565b6000806000606084860312156111ca57600080fd5b60006111d68686611176565b93505060206111e78682870161118c565b92505060406111f886828701611176565b9150509250925092565b60006020828403121561121457600080fd5b6000610f088484611181565b60006020828403121561123257600080fd5b6000610f08848461118c565b6000806040838503121561125157600080fd5b600061125d858561118c565b925050602061126e85828601611176565b9150509250929050565b6000806040838503121561128b57600080fd5b6000611297858561118c565b925050602061126e8582860161118c565b6000806000606084860312156112bd57600080fd5b60006112c9868661118c565b93505060206112da8682870161118c565b92505060406111f88682870161118c565b6112f481611d5d565b82525050565b6112f481611d3e565b6112f481611d49565b600061131782611d2c565b6113218185611d30565b9350611331818560208601611d6f565b9290920192915050565b6112f481611d64565b6000611351602d83611d35565b7f576169746c69737442617463683a20746865726520617265206e6f20746f6b6581526c6e7320746f207265636c61696d60981b602082015260400192915050565b60006113a0601a83611d35565b7f5361666545524332303a205452414e534645525f4641494c4544000000000000815260200192915050565b60006113d9602283611d35565b7f576169746c69737442617463683a20626174636820646f6573206e6f742065788152611a5d60f21b602082015260400192915050565b600061141d602683611d35565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000611465602783611d35565b7f576169746c69737442617463683a2074686520626174636820646f6573206e6f8152661d08195e1a5cdd60ca1b602082015260400192915050565b60006114ae603183611d35565b7f576169746c69737442617463683a2063616e6e6f74206170706c79206265666f8152707265207468652073746172742074696d6560781b602082015260400192915050565b6000611501601b83611d35565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061153a602883611d35565b7f576169746c69737442617463683a2062617463682063616e6e6f74206861766581526720302073706f747360c01b602082015260400192915050565b6000611584602c83611d35565b7f576169746c69737442617463683a20746865206261746368206973206e6f742081526b185c1c1c9bdd9959081e595d60a21b602082015260400192915050565b60006115d2602c83611d35565b7f576169746c69737442617463683a2074686520626174636820697320616c726581526b18591e48185c1c1c9bdd995960a21b602082015260400192915050565b6000611620603d83611d35565b7f576169746c69737442617463683a20746865206465706f736974206c6f636b7581527f70206475726174696f6e20686173206e6f742070617373656420796574000000602082015260400192915050565b600061167f602683611d35565b7f576169746c69737442617463683a2063616c6c6572206973206e6f74206d6f6481526532b930ba37b960d11b602082015260400192915050565b60006116c7604583611d35565b7f576169746c69737442617463683a2063616e6e6f74206368616e676520746f7481527f616c2073706f747320746f206120736d616c6c6572206f7220657175616c206e6020820152643ab6b132b960d91b604082015260600192915050565b6000611734603283611d35565b7f576169746c69737442617463683a207468652062617463682073746172742064815271185d1948185b1c9958591e481c185cdcd95960721b602082015260400192915050565b6000611788603283611d35565b7f576169746c69737442617463683a2063616e6e6f74206170706c7920746f206d8152710dee4ca40e8d0c2dc40dedcca40c4c2e8c6d60731b602082015260400192915050565b60006117dc601f83611d35565b7f5361666545524332303a205452414e534645525f46524f4d5f4641494c454400815260200192915050565b6000611815602283611d35565b7f576169746c69737442617463683a207573657220697320626c61636b6c697374815261195960f21b602082015260400192915050565b6000611859603583611d35565b7f576169746c69737442617463683a2062617463682073746172742074696d652081527418d85b9b9bdd081899481a5b881d1a19481c185cdd605a1b602082015260400192915050565b60006118b0602083611d35565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006118e9602983611d35565b7f576169746c69737442617463683a206465706f73697420616d6f756e7420636181526806e6e6f7420626520360bc1b602082015260400192915050565b6000611934603283611d35565b7f576169746c69737442617463683a207573657220646964206e6f7420706172748152710d2c6d2e0c2e8ca40d2dc40c240c4c2e8c6d60731b602082015260400192915050565b6000611988601e83611d35565b7f576169746c69737442617463683a2062617463682069732066696c6c65640000815260200192915050565b60006119c1602383611d35565b7f576169746c69737442617463683a20626174636820646f6573206e6f742065788152621a5cdd60ea1b602082015260400192915050565b80516080830190611a0a8482611303565b506020820151611a1d6020850182611a49565b506040820151611a306040850182611a49565b506060820151611a436060850182611a49565b50505050565b6112f481611d5a565b6000611a5e828461130c565b9392505050565b6020810161111782846112fa565b60408101611a8182856112eb565b611a5e6020830184611a49565b60608101611a9c82866112fa565b611aa960208301856112fa565b610f086040830184611a49565b60408101611a8182856112fa565b60608101611ad282866112fa565b611adf6020830185611a49565b610f0860408301846112fa565b602081016111178284611303565b60208101611117828461133b565b6020808252810161111781611344565b6020808252810161111781611393565b60208082528101611117816113cc565b6020808252810161111781611410565b6020808252810161111781611458565b60208082528101611117816114a1565b60208082528101611117816114f4565b602080825281016111178161152d565b6020808252810161111781611577565b60208082528101611117816115c5565b6020808252810161111781611613565b6020808252810161111781611672565b60208082528101611117816116ba565b6020808252810161111781611727565b602080825281016111178161177b565b60208082528101611117816117cf565b6020808252810161111781611808565b602080825281016111178161184c565b60208082528101611117816118a3565b60208082528101611117816118dc565b6020808252810161111781611927565b602080825281016111178161197b565b60208082528101611117816119b4565b6080810161111782846119f9565b602081016111178284611a49565b60408101611a818285611a49565b60808101611cb08287611a49565b611cbd6020830186611a49565b611cca6040830185611a49565b611cd76060830184611a49565b95945050505050565b60a08101611cee8288611a49565b611cfb6020830187611a49565b611d086040830186611a49565b611d156060830185611a49565b611d226080830184611a49565b9695505050505050565b5190565b919050565b90815260200190565b600061111782611d4e565b151590565b6001600160a01b031690565b90565b6000611117825b600061111782611d3e565b60005b83811015611d8a578181015183820152602001611d72565b83811115611a435750506000910152565b611da481611d3e565b8114611daf57600080fd5b50565b611da481611d49565b611da481611d5a56fea365627a7a72315820babd5b698c1fe3be917c700d9de1eb7cd9f6d2de61dd2283f6c9e1ef511318ec6c6578706572696d656e74616cf564736f6c634300051000400000000000000000000000001321f1f1aa541a56c31682c57b80ecfccd9bb2880000000000000000000000000000000000000000000000000000000000127500

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

0000000000000000000000001321f1f1aa541a56c31682c57b80ecfccd9bb2880000000000000000000000000000000000000000000000000000000000127500

-----Decoded View---------------
Arg [0] : _depositCurrency (address): 0x1321f1f1aa541a56c31682c57b80ecfccd9bb288
Arg [1] : _depositLockupDuration (uint256): 1209600

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001321f1f1aa541a56c31682c57b80ecfccd9bb288
Arg [1] : 0000000000000000000000000000000000000000000000000000000000127500


Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.