Contract 0xEb8FEeB4589C64959D7CBF3c7Ec377328ab68b11 1

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xbe70720135199d059964e62d39f4e7907d88656098c04d4fbf74b4baca9ba0ebClaim725810842023-03-22 20:16:02372 days 10 hrs ago0x0a3df7d16cef101f65d8f7b656433fa2eb74fbe4 IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.0000835 0.1
0x0b1559f331e8b038e11cbe06f0c1ae7ad575f543cee5fd0a847ab7859799b331Claim714826802023-03-19 16:16:19375 days 14 hrs ago0xc0fbfa23e3cdebdbfd693ff4e10db8c1512d34aa IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00003558 0.1
0x629b73c5f4c97c7c6c118732c90ae84f4105a7ab2063a20a1f3c919457a1b62fClaim628785402023-02-20 20:50:02402 days 10 hrs ago0xbbaba529cf74d84711a40ea8996a1d46651c5a5a IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00006035 0.1
0xaae142c56f811264a4a9673f33464e56a19de126ccafc7e0da309900ef1ee307Claim602490702023-02-12 12:14:54410 days 18 hrs ago0xdce6a673fef2b0f85551e03f1af4cb20ab3b4a92 IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00002825 0.1
0xc5ac74b02e8737cfdd989b88fbc27f129dc0caee24496749d786d64be9629b3eClaim584820142023-02-06 10:55:28416 days 19 hrs ago0xf1687e348217d65a6554b12ea9de7e4473ba14d0 IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00002928 0.1
0x45579b582e4851eddba038caa62b3c7d94bb0dcfc95b1671ce5f03f433d75c77Claim545272522023-01-21 15:22:42432 days 15 hrs ago0xe2e3a7d593d3dce5b2facf649a4c803ce07cf470 IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00002788 0.1
0xa32a65a99c556a73f39b67d91e7b30e21ea7a373afb0170392134334f62d9ca9Claim543785752023-01-20 22:24:11433 days 8 hrs ago0xa4f4406d3dc6482db1397d0ad260fd223c8f37fc IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00004039 0.1
0x73ac2c516219a5b153b91e36ee2ddde2f467465476afae3c63be40fd619811f9Claim459980862022-12-14 5:31:05471 days 1 hr ago0xfc87fa4f8cfda40afd004e16b84d12a70068a41a IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00002507 0.1
0xf5b2f9bfb6241acbb4d65fc920a1157d814b184a6e528fb391d5e5a30c001d1eClaim453017922022-12-11 12:49:49473 days 18 hrs ago0x5914021555a49e5557cb63f54d5ef499a81b8059 IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00002538 0.1
0xffcaf0e9dca046dbd0885be78c0d1c3ece3d18334a277d7ffd210ffe3d3c992fClaim452148662022-12-11 3:57:18474 days 2 hrs ago0x0da86ee66865530e9c362949a58a1592a3795b59 IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00002101 0.1
0xa7af72e1a4142a9ddef5963902e5314af5c12514bdaad8c2b68ae79fbccfdda7Claim437098132022-12-05 4:07:22480 days 2 hrs ago0xc1178d5bada448126a5054eaf4e7c2f3fca5e974 IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00001979 0.1
0x173eb5917b17944fdc2b702bec5490418d36602d6ce3f4d66760d77d179e3665Claim436741812022-12-05 0:14:03480 days 6 hrs ago0xa5e3d6492690cdbd2c90f7a769e1e3011dc80eab IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00001915 0.1
0xc0671228ed208bc447cc9443b4da346b061f42b6a23dbcfd05ce8a1b89baa3b2Claim428616172022-12-02 2:28:45483 days 4 hrs ago0x84dc68ddc5e0cdb79f8ddf4534157ec3a10623c4 IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00001718 0.1
0x3d00ec2846346a05999d54334513626175b09a20c7174e9dc9ebdb3f73dcb0ddClaim422826542022-11-29 22:48:38485 days 8 hrs ago0xb5cf6c54887e03716d1c6ebdb0e9f49d0c3bed6a IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00001771 0.1
0x0f6113fc2f6e57eb06aa80b14b4d05a0f991a8fcf0cfa11becb18f87a002d7abClaim402660792022-11-22 14:06:50492 days 16 hrs ago0xfcbad82e358ab4ac864825aef48e6443c15e938d IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00003893 0.1
0x0956710a7f93c8ad85a9107d9b94f7f5771f5ea7cf06a01a625c26792d394f36Claim401428582022-11-22 4:56:31493 days 1 hr ago0xc0b7b4f02c2b90fc47f6642de8b10d00605f881a IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00001703 0.1
0xc8f28ca5fbccf2ff68422f5283957665349c517f0e3cc77cb7b3c37b5fa27232Claim400121042022-11-21 17:36:30493 days 13 hrs ago0xb546f3a494f6a094a39118005fe87cad44049bcb IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00003261 0.1
0xea891fc2505f9e6e5bc623dd3fff4fa2d0189428ccf6ebeb400e5474bbc70148Claim399025812022-11-21 9:46:43493 days 21 hrs ago0x79218a7113adec422074a5e6556bf4ff6294efda IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00001925 0.1
0x3364382b2f29fce09ec725636c4b085c66ba805dea7d8df6682f31f8f8aba558Claim388658802022-11-17 17:26:14497 days 13 hrs ago0x4991823598287059e469cd7523538b204760280e IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.000042710.1
0x628d2ce39b6b05cb1c264cdcdf0515bb3e111fe294534bdcfdbd3484fb689f9dClaim386649452022-11-16 22:30:35498 days 8 hrs ago0x35eb9860cc25f683d2717508c7d5225a630b3eed IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00003622 0.1
0xef0634dd6295c353743d77a80ee9ee1fd6e8ad91e07dac943c6d584b769f5742Claim384432372022-11-16 3:28:05499 days 3 hrs ago0xdae6a90a9fc58b1437564cd9b0b731358c8226f3 IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00002305 0.1
0x9612b73711a431a01279af121574853d9301d0861ea3886d7aeb062e3440a8bdClaim381096002022-11-14 19:59:56500 days 10 hrs ago0x8bb37b6619997f8f4bb9a27a1118d9725c95d398 IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00002635 0.1
0x1edf19a388816bae07570449a5b650880bfb9725e581510166d1cdf839d68148Claim379942092022-11-14 10:23:26500 days 20 hrs ago0x6134852bd601ebad3d7a1a28b29aef468ee3ba7f IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00002218 0.1
0xaaf1d70f0c12a1b5aeaa613bfd07efcba910931b6450e3c59f3194d3d1cd2703Claim379673772022-11-14 8:10:32500 days 22 hrs ago0xaca74804b502aa36b38d4b515fe021588b5b9ef2 IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.000024 0.1
0xa71c7991b3f6227a52e857f09e0459b2ae08802a7b92702bc622c8a3704623d7Claim376781932022-11-13 6:03:50502 days 49 mins ago0x4b8793a716821a94791b871f6e661dc0658d60ef IN  0xeb8feeb4589c64959d7cbf3c7ec377328ab68b110 ETH0.00001919 0.1
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x0b1559f331e8b038e11cbe06f0c1ae7ad575f543cee5fd0a847ab7859799b331714826802023-03-19 16:16:19375 days 14 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0x629b73c5f4c97c7c6c118732c90ae84f4105a7ab2063a20a1f3c919457a1b62f628785402023-02-20 20:50:02402 days 10 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0xaae142c56f811264a4a9673f33464e56a19de126ccafc7e0da309900ef1ee307602490702023-02-12 12:14:54410 days 18 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0xc5ac74b02e8737cfdd989b88fbc27f129dc0caee24496749d786d64be9629b3e584820142023-02-06 10:55:28416 days 19 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0x45579b582e4851eddba038caa62b3c7d94bb0dcfc95b1671ce5f03f433d75c77545272522023-01-21 15:22:42432 days 15 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0xa32a65a99c556a73f39b67d91e7b30e21ea7a373afb0170392134334f62d9ca9543785752023-01-20 22:24:11433 days 8 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0x73ac2c516219a5b153b91e36ee2ddde2f467465476afae3c63be40fd619811f9459980862022-12-14 5:31:05471 days 1 hr ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0xf5b2f9bfb6241acbb4d65fc920a1157d814b184a6e528fb391d5e5a30c001d1e453017922022-12-11 12:49:49473 days 18 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0xffcaf0e9dca046dbd0885be78c0d1c3ece3d18334a277d7ffd210ffe3d3c992f452148662022-12-11 3:57:18474 days 2 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0xa7af72e1a4142a9ddef5963902e5314af5c12514bdaad8c2b68ae79fbccfdda7437098132022-12-05 4:07:22480 days 2 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0x173eb5917b17944fdc2b702bec5490418d36602d6ce3f4d66760d77d179e3665436741812022-12-05 0:14:03480 days 6 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0xc0671228ed208bc447cc9443b4da346b061f42b6a23dbcfd05ce8a1b89baa3b2428616172022-12-02 2:28:45483 days 4 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0x3d00ec2846346a05999d54334513626175b09a20c7174e9dc9ebdb3f73dcb0dd422826542022-11-29 22:48:38485 days 8 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0x0f6113fc2f6e57eb06aa80b14b4d05a0f991a8fcf0cfa11becb18f87a002d7ab402660792022-11-22 14:06:50492 days 16 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0x0956710a7f93c8ad85a9107d9b94f7f5771f5ea7cf06a01a625c26792d394f36401428582022-11-22 4:56:31493 days 1 hr ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0xc8f28ca5fbccf2ff68422f5283957665349c517f0e3cc77cb7b3c37b5fa27232400121042022-11-21 17:36:30493 days 13 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0xea891fc2505f9e6e5bc623dd3fff4fa2d0189428ccf6ebeb400e5474bbc70148399025812022-11-21 9:46:43493 days 21 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0x3364382b2f29fce09ec725636c4b085c66ba805dea7d8df6682f31f8f8aba558388658802022-11-17 17:26:14497 days 13 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0x628d2ce39b6b05cb1c264cdcdf0515bb3e111fe294534bdcfdbd3484fb689f9d386649452022-11-16 22:30:35498 days 8 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0xef0634dd6295c353743d77a80ee9ee1fd6e8ad91e07dac943c6d584b769f5742384432372022-11-16 3:28:05499 days 3 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0x9612b73711a431a01279af121574853d9301d0861ea3886d7aeb062e3440a8bd381096002022-11-14 19:59:56500 days 10 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0x1edf19a388816bae07570449a5b650880bfb9725e581510166d1cdf839d68148379942092022-11-14 10:23:26500 days 20 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0xaaf1d70f0c12a1b5aeaa613bfd07efcba910931b6450e3c59f3194d3d1cd2703379673772022-11-14 8:10:32500 days 22 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0xa71c7991b3f6227a52e857f09e0459b2ae08802a7b92702bc622c8a3704623d7376781932022-11-13 6:03:50502 days 49 mins ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
0xd42392785aed0cf12b23b4ee702565d7e9c6fd6b3977860370feb72f187a5eaf376633522022-11-13 4:34:53502 days 2 hrs ago 0xeb8feeb4589c64959d7cbf3c7ec377328ab68b11 3xcalibur: XCAL Token0 ETH
[ Download CSV Export 
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x86F88A7AB9824b5E6Ce24dEcb9B520d7Bda69Efa
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Claim

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 800 runs

Other Settings:
default evmVersion
File 1 of 9 : Claim.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.15;


/**
 * @dev Modifier 'onlyOwner' becomes available, where owner is the contract deployer
 */ 
import "@openzeppelin/contracts/access/Ownable.sol";

/**
 * @dev ERC20 token interface
 */
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

/**
 * @dev Allows use of SafeERC20 transfer functions
 */
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

/**
 * @dev Makes mofifier nonReentrant available for use
 */
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
/**
 * @dev Exposes 'whenNotPaused' modifier and '_pause', '_unpause' methods
 */
import "@openzeppelin/contracts/security/Pausable.sol";


contract Claim is Ownable, Pausable, ReentrancyGuard {


    using SafeERC20 for IERC20;

    IERC20 public xcal;


    // --- CONSTRUCTOR --- //

    constructor(address _xcal) {
        xcal = IERC20(_xcal);

        _pause();
    }


    // --- EVENTS --- //
    event Claimed(address indexed claimant, address indexed recipient, uint amountClaimed);


    // --- MAPPINGS --- /

    mapping(address => uint) addressToAmount;


    // --- USER --- //

    function claim(address _recipient) external nonReentrant whenNotPaused {

        require(
            addressToAmount[msg.sender] > 0,
            "Nothing to claim"
        );

        uint amount = addressToAmount[msg.sender];
        addressToAmount[msg.sender] = 0;

        IERC20(xcal).safeTransfer(_recipient, amount);

        emit Claimed(msg.sender, _recipient, amount);
    }


    // --- VIEW --- //

    function claimableAmount(address _user) external view returns(uint) {

        return addressToAmount[_user];
    }


    // --- OWNER --- /

    /**
     * @dev Set XCAL balances
     */
    function setBalances(
        address[] memory _addresses,
        uint[] memory _balances
        ) external onlyOwner {

        require(
            _addresses.length == _balances.length,
            "Array sizes differ"
        );
        
        for (uint i; i<_addresses.length; i++) {
            addressToAmount[_addresses[i]] = _balances[i];
        }
    }

    /**
     * @dev Withdraw ERC20 tokens from contract
     * @param _token - address of token to withdraw
     * @param _to - recipient of token transfer
     * @param _amount - amount of tokens to trasnfer
     */
    function withdrawERC20(
        address _token,
        address _to,
        uint _amount
        ) external onlyOwner {

        require(
            _amount <= IERC20(_token).balanceOf(address(this)),
            "Withdrawal amount greater than contract balance"
        );

        IERC20(_token).safeTransfer(_to, _amount);
    }

    /**
     * @dev Pause claiming
     */
     function pause() external onlyOwner {
        _pause();
    }

    /**
     * @dev Resume claiming
     */
    function unpause() external onlyOwner {
        _unpause();
    }
    
}

File 2 of 9 : 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 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 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 3 of 9 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

File 4 of 9 : SafeERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";
import "../extensions/draft-IERC20Permit.sol";
import "../../../utils/Address.sol";

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

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

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

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

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

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

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

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

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

File 5 of 9 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 6 of 9 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 7 of 9 : 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;
    }
}

File 8 of 9 : draft-IERC20Permit.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 */
interface IERC20Permit {
    /**
     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
     * given ``owner``'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

File 9 of 9 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_xcal","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"claimant","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountClaimed","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":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"claimableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_balances","type":"uint256[]"}],"name":"setBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"xcal","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100c95760003560e01c8063715018a6116100815780638da5cb5b1161005b5780638da5cb5b14610192578063b7e39b4f146101a3578063f2fde38b146101b657600080fd5b8063715018a61461014b5780638456cb5914610153578063898850491461015b57600080fd5b80633f4ba83a116100b25780633f4ba83a1461011357806344004cc11461011b5780635c975abb1461012e57600080fd5b80631e83409a146100ce57806328a3e3a0146100e3575b600080fd5b6100e16100dc366004610aa1565b6101c9565b005b6002546100f6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e16102fc565b6100e1610129366004610abc565b61030e565b600054600160a01b900460ff16604051901515815260200161010a565b6100e161040c565b6100e161041e565b610184610169366004610aa1565b6001600160a01b031660009081526003602052604090205490565b60405190815260200161010a565b6000546001600160a01b03166100f6565b6100e16101b1366004610bce565b61042e565b6100e16101c4366004610aa1565b610502565b6002600154036102205760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260015561022d610592565b336000908152600360205260409020546102895760405162461bcd60e51b815260206004820152601060248201527f4e6f7468696e6720746f20636c61696d000000000000000000000000000000006044820152606401610217565b33600090815260036020526040812080549190556002546102b4906001600160a01b031683836105ec565b6040518181526001600160a01b0383169033907ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839060200160405180910390a3505060018055565b610304610653565b61030c6106ad565b565b610316610653565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa15801561035a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037e9190610c8e565b8111156103f35760405162461bcd60e51b815260206004820152602f60248201527f5769746864726177616c20616d6f756e742067726561746572207468616e206360448201527f6f6e74726163742062616c616e636500000000000000000000000000000000006064820152608401610217565b6104076001600160a01b03841683836105ec565b505050565b610414610653565b61030c6000610702565b610426610653565b61030c61076a565b610436610653565b80518251146104875760405162461bcd60e51b815260206004820152601260248201527f41727261792073697a65732064696666657200000000000000000000000000006044820152606401610217565b60005b8251811015610407578181815181106104a5576104a5610ca7565b6020026020010151600360008584815181106104c3576104c3610ca7565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806104fa90610cbd565b91505061048a565b61050a610653565b6001600160a01b0381166105865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610217565b61058f81610702565b50565b600054600160a01b900460ff161561030c5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610217565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b1790526104079084906107ad565b6000546001600160a01b0316331461030c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610217565b6106b5610892565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610772610592565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586106e53390565b6000610802826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166108eb9092919063ffffffff16565b80519091501561040757808060200190518101906108209190610ce4565b6104075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610217565b600054600160a01b900460ff1661030c5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610217565b60606108fa8484600085610904565b90505b9392505050565b60608247101561097c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610217565b6001600160a01b0385163b6109d35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610217565b600080866001600160a01b031685876040516109ef9190610d36565b60006040518083038185875af1925050503d8060008114610a2c576040519150601f19603f3d011682016040523d82523d6000602084013e610a31565b606091505b5091509150610a41828286610a4c565b979650505050505050565b60608315610a5b5750816108fd565b825115610a6b5782518084602001fd5b8160405162461bcd60e51b81526004016102179190610d52565b80356001600160a01b0381168114610a9c57600080fd5b919050565b600060208284031215610ab357600080fd5b6108fd82610a85565b600080600060608486031215610ad157600080fd5b610ada84610a85565b9250610ae860208501610a85565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610b3757610b37610af8565b604052919050565b600067ffffffffffffffff821115610b5957610b59610af8565b5060051b60200190565b600082601f830112610b7457600080fd5b81356020610b89610b8483610b3f565b610b0e565b82815260059290921b84018101918181019086841115610ba857600080fd5b8286015b84811015610bc35780358352918301918301610bac565b509695505050505050565b60008060408385031215610be157600080fd5b823567ffffffffffffffff80821115610bf957600080fd5b818501915085601f830112610c0d57600080fd5b81356020610c1d610b8483610b3f565b82815260059290921b84018101918181019089841115610c3c57600080fd5b948201945b83861015610c6157610c5286610a85565b82529482019490820190610c41565b96505086013592505080821115610c7757600080fd5b50610c8485828601610b63565b9150509250929050565b600060208284031215610ca057600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060018201610cdd57634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610cf657600080fd5b815180151581146108fd57600080fd5b60005b83811015610d21578181015183820152602001610d09565b83811115610d30576000848401525b50505050565b60008251610d48818460208701610d06565b9190910192915050565b6020815260008251806020840152610d71816040850160208701610d06565b601f01601f1916919091016040019291505056fea2646970667358221220d93eb4c13d3823937b05c6adde1290d6eab13ba1834f4e762b209b1424f13a3264736f6c634300080f0033

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.