Contract 0xe4e8d9cfd123699a040219165e22fa912d47147b

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x733f907faccd1f0dc14298a7952bcd760a9125070d96182515615f06233fa7f0Approve214809552021-11-17 15:09:3513 days 12 hrs ago0xf0e3ef035c1808d78854101e2c03a51ece5ee8d5 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00139197
0xa845259e9762db7dfdf6392f75de3de06b9066e015044bdb6e9a12a690e5e401Transfer214805112021-11-17 14:53:4213 days 13 hrs ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00156261
0x7b823d7c5ef7d6df9937866120c1fa515e60585b8a5eb2f15492fa0c268bce82Transfer214801372021-11-17 14:36:3813 days 13 hrs ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00156261
0x964cf66a30a181876724b3a04ad542c2c26057609f2a31f7c141284326cddc21Approve214113062021-11-15 20:08:1015 days 8 hrs ago0xc531ec14205bae402721b4e1ccba6467cf7bf560 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00139197
0x33d98bbbcf1fb2f4b60e6bc0d8e8e1370abb947d4b56ee177fee25cbd9838294Approve213573962021-11-14 11:30:4516 days 16 hrs ago0x6ea605f4dc6ab879321173980cc22dbeccafb24a IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00139197
0x4cf5604fbbf63ed8bc5fcda7a621dd09aac6410f358f72fd6aca18d9fe8a5039Transfer213179082021-11-13 10:07:4717 days 18 hrs ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00156261
0x46bcd2844f088da147ff2f5cc56aa74e5c8886c3fa9df0f2ddca743feaa909d5Approve210575932021-11-06 16:52:5624 days 11 hrs ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00138333
0x371d755c1b7eada038e0fabb178d53d880d3eb5927a8e23ce35312963dede45aApprove209478332021-11-03 21:34:0927 days 6 hrs ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00139197
0xd6dedbd7e401c33ace763385a0a550b7ec4705588352f2ab356534fe3ddf9ac1Transfer208188802021-10-31 12:21:1530 days 15 hrs ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00105033
0xf060fd1f1c45e9f1faa178a004a7883b4510d8601023518e8eed9390a0384b2cApprove207500302021-10-29 18:45:4132 days 9 hrs ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00139197
0x8e31fbea46cdd39cdc6880948324ae263e655d651af5152d6cc1d6c672702656Transfer207475372021-10-29 17:13:3932 days 10 hrs ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00105033
0xcf9abc7cbdee8abe895c565ad4221d855c128dc2cc814342f84df013f9d1f49bApprove205802072021-10-25 2:32:2137 days 1 hr ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.001396609957
0x5d6d659e7a33d12c88a04ccbb079240de6296ae4c8d1eca5992a607d4aeda594Approve205799942021-10-25 2:17:3537 days 1 hr ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00139197
0x08b06e4d9c2d39b2b9b9556b244127ac10a9fc5a0cca66adac295d93be8fe8c1Approve205370702021-10-23 21:53:5938 days 6 hrs ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00139197
0x7a6dd4dabfe86e936e073ba071b8d4841c1f8cdaf9cb71736776be692a7666a4Approve205341022021-10-23 19:59:1138 days 8 hrs ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00139197
0x3b8dae49758bfa7ae9b5aa37dea86e1dd7e75486056aa9953c8ca97ad2fffbe7Approve204084322021-10-20 7:57:2341 days 20 hrs ago0xa98a1f0d5ea8b4508c6617558be2a0b085bf4c16 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.000417591
0xf148fcc9fb94fae2bec0e79120056cd9bdf288e1b397f47043eed6e3a6bab3beTransfer203910722021-10-19 20:06:3242 days 8 hrs ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00044434
0xfc109488dd9b3431cd54ccc7f9bd3d27c033cbd63cf6e4721589bdc519f251bcTransfer203902992021-10-19 19:35:2442 days 8 hrs ago0x0a1222af4b9796cfabc5b020d77c28e224d2a1ac IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0.0015 MATIC0.000735
0x7b93900b1bb9c76eeb2a1288bb7bd120499aeb7cfb451e713586034bfe76b2efTransfer203893602021-10-19 18:52:2642 days 9 hrs ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00155721
0xc2abcabb03d3377e1785cbae1557fc7f9ed8f2488f880ebb4bfdc26dfb811224Approve203821712021-10-19 14:08:4642 days 14 hrs ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.001192455
0x8bc3ce43f065009eb6253f80775032b30033b7e05843df511fd7a908a3dac62eApprove203494832021-10-18 14:46:2943 days 13 hrs ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.001318455
0xb29ebd02ec9d188f9284f59f56961b1574d9d8a3b022b8e7ad67fa4801c0ec3cApprove203166042021-10-17 16:06:1844 days 12 hrs ago0x375da94131428a620b08e96904a885430070f040 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00139197
0xb5adcef1bc8bc22cef201a53718f0372f4326efe4a10915cb9e5b2c2986d86a4Approve203165602021-10-17 16:04:5044 days 12 hrs ago0xc531ec14205bae402721b4e1ccba6467cf7bf560 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00139197
0xd3b628b819a8e47922843ced6a3a3c2148521a50b52c3fa01036670abf414383Approve203157222021-10-17 15:33:4844 days 12 hrs ago0xc531ec14205bae402721b4e1ccba6467cf7bf560 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00139197
0x129ed53606d89c0b39862f150506cec1f49c44c105552445e6fa49e2643ae013Approve203153052021-10-17 15:17:1844 days 12 hrs ago0xc531ec14205bae402721b4e1ccba6467cf7bf560 IN  0xe4e8d9cfd123699a040219165e22fa912d47147b0 MATIC0.00139197
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PonaToken

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license
/**
 *Submitted for verification at polygonscan.com on 2021-10-09
*/

pragma solidity ^0.4.18;

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 {
  function balanceOf(address _owner) public view returns (uint256);
  function allowance(address _owner, address _spender) public view returns (uint256);
  function transfer(address _to, uint256 _value) public returns (bool);
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool);
  function approve(address _spender, uint256 _value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

/*
Copyright (c) 2016 Smart Contract Solutions, Inc.

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
EXCLUSIF CREATION OF TOKEN "0x375DA94131428a620b08E96904a885430070f040"
*/

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 */
contract PonaToken is IERC20 {
  using SafeMath for uint256;

  // Pon Token parameters
  string public name = 'POLYGON Beplay PONA';
  string public symbol = 'PONA';
  uint8 public constant decimals = 18;
  uint256 public constant decimalFactor = 10 ** uint256(decimals);
  uint256 public constant totalSupply = 10000000000000 * decimalFactor;
  mapping (address => uint256) balances;
  mapping (address => mapping (address => uint256)) internal allowed;

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

  /**
  * @dev Constructor for Pon creation
  * @dev Assigns the totalSupply to the PonDistribution contract
  */
  function PonaToken(address _ponaDistributionContractAddress) public {
    require(_ponaDistributionContractAddress != address(0));
    balances[_ponaDistributionContractAddress] = totalSupply;
    Transfer(address(0), _ponaDistributionContractAddress, totalSupply);
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of.
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) public view returns (uint256 balance) {
    return balances[_owner];
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public view returns (uint256) {
    return allowed[_owner][_spender];
  }

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);

    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * 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
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Increase the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _addedValue The amount of tokens to increase the allowance by.
   */
  function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  /**
   * @dev Decrease the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To decrement
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _subtractedValue The amount of tokens to decrease the allowance by.
   */
  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}

/*
Copyright (c) 2016 Smart Contract Solutions, Inc.

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;

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

  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }

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

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

/**
 * @title PONA token initial distribution
 *
 * @dev Distribute purchasers, airdrop, reserve, and founder tokens
 */
contract PonaDistribution is Ownable {
  using SafeMath for uint256;

  PonaToken public PONA;

  uint256 private constant decimalFactor = 10**uint256(18);
  enum AllocationType { PRESALE, FOUNDER, AIRDROP, RESERVE, BONUS }
  uint256 public constant INITIAL_SUPPLY   = 10000000000000 * decimalFactor;
  uint256 public AVAILABLE_TOTAL_SUPPLY    = 10000000000000 * decimalFactor;
  uint256 public AVAILABLE_PRESALE_SUPPLY  =  23000000000 * decimalFactor; 
  uint256 public AVAILABLE_AIRDROP_SUPPLY  =   1000000000 * decimalFactor;
  uint256 public AVAILABLE_FOUNDER_SUPPLY  =   1800000000 * decimalFactor;
  uint256 public AVAILABLE_RESERVE_SUPPLY  =  71000000000 * decimalFactor; 
  uint256 public AVAILABLE_BONUS_SUPPLY   =   3200000000 * decimalFactor;

  uint256 public grandTotalClaimed = 0;
  uint256 public startTime;

  // Allocation with vesting information
  struct Allocation {
    uint8 AllocationSupply; // Type of allocation
    uint256 endCliff;       // Tokens are locked until
    uint256 endVesting;     // This is when the tokens are fully unvested
    uint256 totalAllocated; // Total tokens allocated
    uint256 amountClaimed;  // Total tokens claimed
  }
  mapping (address => Allocation) public allocations;

  // List of admins
  mapping (address => bool) public airdropAdmins;

  // Keeps track of whether or not a 100 PONA airdrop has been made to a particular address
  mapping (address => bool) public airdrops;

  modifier onlyOwnerOrAdmin() {
    require(msg.sender == owner || airdropAdmins[msg.sender]);
    _;
  }

  event LogNewAllocation(address indexed _recipient, AllocationType indexed _fromSupply, uint256 _totalAllocated, uint256 _grandTotalAllocated);
  event LogPonClaimed(address indexed _recipient, uint8 indexed _fromSupply, uint256 _amountClaimed, uint256 _totalAllocated, uint256 _grandTotalClaimed);

  /**
    * @dev Constructor function - Set the pona token address
    * @param _startTime The time when PonaDistribution goes live
    */
  function PonaDistribution(uint256 _startTime) public {
    require(_startTime >= now);
    require(AVAILABLE_TOTAL_SUPPLY == AVAILABLE_PRESALE_SUPPLY.add(AVAILABLE_FOUNDER_SUPPLY).add(AVAILABLE_AIRDROP_SUPPLY).add(AVAILABLE_BONUS_SUPPLY).add(AVAILABLE_RESERVE_SUPPLY));
    startTime = _startTime;
    PONA = new PonaToken(this);
  }

  /**
    * @dev Allow the owner of the contract to assign a new allocation
    * @param _recipient The recipient of the allocation
    * @param _totalAllocated The total amount of PONA available to the receipient (after vesting)
    * @param _supply The PONA supply the allocation will be taken from
    */
  function setAllocation (address _recipient, uint256 _totalAllocated, AllocationType _supply) onlyOwner public {
    require(allocations[_recipient].totalAllocated == 0 && _totalAllocated > 0);
    require(_supply >= AllocationType.PRESALE && _supply <= AllocationType.BONUS);
    require(_recipient != address(0));
    if (_supply == AllocationType.PRESALE) {
      AVAILABLE_PRESALE_SUPPLY = AVAILABLE_PRESALE_SUPPLY.sub(_totalAllocated);
      allocations[_recipient] = Allocation(uint8(AllocationType.PRESALE), 0, 0, _totalAllocated, 0);
    } else if (_supply == AllocationType.RESERVE) {
      AVAILABLE_RESERVE_SUPPLY = AVAILABLE_RESERVE_SUPPLY.sub(_totalAllocated);
      allocations[_recipient] = Allocation(uint8(AllocationType.RESERVE), startTime + 60 days, startTime + 3 years, _totalAllocated, 0);
    } else if (_supply == AllocationType.FOUNDER) {
      AVAILABLE_FOUNDER_SUPPLY = AVAILABLE_FOUNDER_SUPPLY.sub(_totalAllocated);
      allocations[_recipient] = Allocation(uint8(AllocationType.FOUNDER), startTime + 1 years, startTime + 1 years, _totalAllocated, 0);
    } else if (_supply == AllocationType.AIRDROP) {
      AVAILABLE_AIRDROP_SUPPLY = AVAILABLE_AIRDROP_SUPPLY.sub(_totalAllocated);
      allocations[_recipient] = Allocation(uint8(AllocationType.AIRDROP), startTime + 100 days, startTime + 2 years, _totalAllocated, 0);
    } else if (_supply == AllocationType.BONUS) {
      AVAILABLE_BONUS_SUPPLY = AVAILABLE_BONUS_SUPPLY.sub(_totalAllocated);
      allocations[_recipient] = Allocation(uint8(AllocationType.BONUS), startTime + 3 years, startTime + 3 years, _totalAllocated, 0);
    }
    AVAILABLE_TOTAL_SUPPLY = AVAILABLE_TOTAL_SUPPLY.sub(_totalAllocated);
    LogNewAllocation(_recipient, _supply, _totalAllocated, grandTotalAllocated());
  }

  /**
    * @dev Add an airdrop admin
    */
  function setAirdropAdmin(address _admin, bool _isAdmin) public onlyOwner {
    airdropAdmins[_admin] = _isAdmin;
  }

  /**
    * @dev perform a transfer of allocations
    * @param _recipient is a list of recipients
    */
  function airdropTokens(address[] _recipient) public onlyOwnerOrAdmin {
    require(now >= startTime);
    uint airdropped;
    for(uint256 i = 0; i< _recipient.length; i++)
    {
        if (!airdrops[_recipient[i]]) {
          airdrops[_recipient[i]] = true;
          require(PONA.transfer(_recipient[i], 100 * decimalFactor));
          airdropped = airdropped.add(100 * decimalFactor);
        }
    }
    AVAILABLE_AIRDROP_SUPPLY = AVAILABLE_AIRDROP_SUPPLY.sub(airdropped);
    AVAILABLE_TOTAL_SUPPLY = AVAILABLE_TOTAL_SUPPLY.sub(airdropped);
    grandTotalClaimed = grandTotalClaimed.add(airdropped);
  }

  /**
    * @dev Transfer a recipients available allocation to their address
    * @param _recipient The address to withdraw tokens for
    */
  function transferTokens (address _recipient) public {
    require(allocations[_recipient].amountClaimed < allocations[_recipient].totalAllocated);
    require(now >= allocations[_recipient].endCliff);
    require(now >= startTime);
    uint256 newAmountClaimed;
    if (allocations[_recipient].endVesting > now) {
      // Transfer available amount based on vesting schedule and allocation
      newAmountClaimed = allocations[_recipient].totalAllocated.mul(now.sub(startTime)).div(allocations[_recipient].endVesting.sub(startTime));
    } else {
      // Transfer total allocated (minus previously claimed tokens)
      newAmountClaimed = allocations[_recipient].totalAllocated;
    }
    uint256 tokensToTransfer = newAmountClaimed.sub(allocations[_recipient].amountClaimed);
    allocations[_recipient].amountClaimed = newAmountClaimed;
    require(PONA.transfer(_recipient, tokensToTransfer));
    grandTotalClaimed = grandTotalClaimed.add(tokensToTransfer);
    LogPonClaimed(_recipient, allocations[_recipient].AllocationSupply, tokensToTransfer, newAmountClaimed, grandTotalClaimed);
  }

  // Returns the amount of PONA allocated
  function grandTotalAllocated() public view returns (uint256) {
    return INITIAL_SUPPLY - AVAILABLE_TOTAL_SUPPLY;
  }

  // Allow transfer of accidentally sent ERC20 tokens
  function refundTokens(address _recipient, address _token) public onlyOwner {
    require(_token != address(PONA));
    IERC20 token = IERC20(_token);
    uint256 balance = token.balanceOf(this);
    require(token.transfer(_recipient, balance));
  }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimalFactor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_ponaDistributionContractAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

606060405260408051908101604052601381527f504f4c59474f4e204265706c617920504f4e41000000000000000000000000006020820152600090805161004b92916020019061012c565b5060408051908101604052600481527f504f4e41000000000000000000000000000000000000000000000000000000006020820152600190805161009392916020019061012c565b50341561009f57600080fd5b604051602080610ae683398101604052808051915050600160a060020a03811615156100ca57600080fd5b600160a060020a0381166000818152600260205260408082206c7e37be2022c0914b2680000000908190557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef915190815260200160405180910390a3506101c7565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061016d57805160ff191683800117855561019a565b8280016001018555821561019a579182015b8281111561019a57825182559160200191906001019061017f565b506101a69291506101aa565b5090565b6101c491905b808211156101a657600081556001016101b0565b90565b610910806101d66000396000f3006060604052600436106100b95763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100be578063095ea7b31461014857806318160ddd1461017e57806323b872dd146101a3578063313ce567146101cb57806366188463146101f45780636d6a6a4d1461021657806370a082311461022957806395d89b4114610248578063a9059cbb1461025b578063d73dd6231461027d578063dd62ed3e1461029f575b600080fd5b34156100c957600080fd5b6100d16102c4565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561010d5780820151838201526020016100f5565b50505050905090810190601f16801561013a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015357600080fd5b61016a600160a060020a0360043516602435610362565b604051901515815260200160405180910390f35b341561018957600080fd5b6101916103ce565b60405190815260200160405180910390f35b34156101ae57600080fd5b61016a600160a060020a03600435811690602435166044356103df565b34156101d657600080fd5b6101de610561565b60405160ff909116815260200160405180910390f35b34156101ff57600080fd5b61016a600160a060020a0360043516602435610566565b341561022157600080fd5b610191610660565b341561023457600080fd5b610191600160a060020a036004351661066c565b341561025357600080fd5b6100d1610687565b341561026657600080fd5b61016a600160a060020a03600435166024356106f2565b341561028857600080fd5b61016a600160a060020a03600435166024356107ed565b34156102aa57600080fd5b610191600160a060020a0360043581169060243516610891565b60008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561035a5780601f1061032f5761010080835404028352916020019161035a565b820191906000526020600020905b81548152906001019060200180831161033d57829003601f168201915b505050505081565b600160a060020a03338116600081815260036020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b6c7e37be2022c0914b268000000081565b6000600160a060020a03831615156103f657600080fd5b600160a060020a03841660009081526002602052604090205482111561041b57600080fd5b600160a060020a038085166000908152600360209081526040808320339094168352929052205482111561044e57600080fd5b600160a060020a038416600090815260026020526040902054610477908363ffffffff6108bc16565b600160a060020a0380861660009081526002602052604080822093909355908516815220546104ac908363ffffffff6108ce16565b600160a060020a038085166000908152600260209081526040808320949094558783168252600381528382203390931682529190915220546104f4908363ffffffff6108bc16565b600160a060020a03808616600081815260036020908152604080832033861684529091529081902093909355908516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b601281565b600160a060020a033381166000908152600360209081526040808320938616835292905290812054808311156105c357600160a060020a0333811660009081526003602090815260408083209388168352929052908120556105fa565b6105d3818463ffffffff6108bc16565b600160a060020a033381166000908152600360209081526040808320938916835292905220555b600160a060020a0333811660008181526003602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b670de0b6b3a764000081565b600160a060020a031660009081526002602052604090205490565b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561035a5780601f1061032f5761010080835404028352916020019161035a565b6000600160a060020a038316151561070957600080fd5b600160a060020a03331660009081526002602052604090205482111561072e57600080fd5b600160a060020a033316600090815260026020526040902054610757908363ffffffff6108bc16565b600160a060020a03338116600090815260026020526040808220939093559085168152205461078c908363ffffffff6108ce16565b600160a060020a0380851660008181526002602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b600160a060020a033381166000908152600360209081526040808320938616835292905290812054610825908363ffffffff6108ce16565b600160a060020a0333811660008181526003602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b6000828211156108c857fe5b50900390565b6000828201838110156108dd57fe5b93925050505600a165627a7a7230582080a02b5a02d98796b76e183384e1c5fc3d4c2af597cbe1740339d526e143c2bf0029000000000000000000000000375da94131428a620b08e96904a885430070f040

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

000000000000000000000000375da94131428a620b08e96904a885430070f040

-----Decoded View---------------
Arg [0] : _ponaDistributionContractAddress (address): 0x375da94131428a620b08e96904a885430070f040

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000375da94131428a620b08e96904a885430070f040


Deployed ByteCode Sourcemap

2867:5514:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2961:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;71:3;;;64:6;52:2;45:3;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6578:187:0;;;;;;;;;;-1:-1:-1;;;;;6578:187:0;;;;;;;;;;;;;;;;;;;;;;;;3150:68;;;;;;;;;;;;;;;;;;;;;;;;;;;5494:449;;;;;;;;;;-1:-1:-1;;;;;5494:449:0;;;;;;;;;;;;3042:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7969:407;;;;;;;;;;-1:-1:-1;;;;;7969:407:0;;;;;;;3082:63;;;;;;;;;;;;4098:109;;;;;;;;;;-1:-1:-1;;;;;4098:109:0;;;;;3008:29;;;;;;;;;;;;4823:388;;;;;;;;;;-1:-1:-1;;;;;4823:388:0;;;;;;;7234:261;;;;;;;;;;-1:-1:-1;;;;;7234:261:0;;;;;;;4534:128;;;;;;;;;;-1:-1:-1;;;;;4534:128:0;;;;;;;;;;2961:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6578:187::-;-1:-1:-1;;;;;6666:10:0;6658:19;;6645:4;6658:19;;;:7;:19;;;;;;;;:29;;;;;;;;;;;;;:38;;;6645:4;;6658:29;:19;6703:38;;6658;;6703;;;;;;;;;;;;;-1:-1:-1;6755:4:0;6578:187;;;;:::o;3150:68::-;3188:30;3150:68;:::o;5494:449::-;5576:4;-1:-1:-1;;;;;5597:17:0;;;;5589:26;;;;;;-1:-1:-1;;;;;5640:15:0;;;;;;-1:-1:-1;5640:15:0;;;;;;5630:25;;;5622:34;;;;;;-1:-1:-1;;;;;5681:14:0;;;;;;;:7;:14;;;;;;;;5696:10;5681:26;;;;;;;;;;5671:36;;;5663:45;;;;;;-1:-1:-1;;;;;5735:15:0;;;;;;-1:-1:-1;5735:15:0;;;;;;:27;;5755:6;5735:19;:27::i;:::-;-1:-1:-1;;;;;5717:15:0;;;;;;;-1:-1:-1;5717:15:0;;;;;;:45;;;;5785:13;;;;;;;:25;;5803:6;5785:17;:25::i;:::-;-1:-1:-1;;;;;5769:13:0;;;;;;;-1:-1:-1;5769:13:0;;;;;;;;:41;;;;5846:14;;;;;:7;:14;;;;;5861:10;5846:26;;;;;;;;;;;:38;;5877:6;5846:30;:38::i;:::-;-1:-1:-1;;;;;5817:14:0;;;;;;;:7;:14;;;;;;;;5832:10;5817:26;;;;;;;;;;;:67;;;;5891:28;;;;;;5912:6;;5891:28;;;;;;;;;;;;;-1:-1:-1;5933:4:0;5494:449;;;;;:::o;3042:35::-;3075:2;3042:35;:::o;7969:407::-;-1:-1:-1;;;;;8089:10:0;8081:19;;8052:4;8081:19;;;:7;:19;;;;;;;;:29;;;;;;;;;;;;8121:27;;;8117:168;;;-1:-1:-1;;;;;8167:10:0;8159:19;;8191:1;8159:19;;;:7;:19;;;;;;;;:29;;;;;;;;;;;:33;8117:168;;;8247:30;:8;8260:16;8247:30;:12;:30;:::i;:::-;-1:-1:-1;;;;;8223:10:0;8215:19;;;;;;:7;:19;;;;;;;;:29;;;;;;;;;:62;8117:168;-1:-1:-1;;;;;8300:10:0;8291:61;;8322:19;;;;:7;:19;;;;;;;;8291:61;;;8322:29;;;;;;;;;;;;8291:61;;;;;;;;;;;;;;;-1:-1:-1;8366:4:0;;7969:407;-1:-1:-1;;;7969:407:0:o;3082:63::-;3122:23;3082:63;:::o;4098:109::-;-1:-1:-1;;;;;4185:16:0;4154:15;4185:16;;;-1:-1:-1;4185:16:0;;;;;;;4098:109::o;3008:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4823:388;4886:4;-1:-1:-1;;;;;4907:17:0;;;;4899:26;;;;;;-1:-1:-1;;;;;4959:10:0;4950:20;;;;;-1:-1:-1;4950:20:0;;;;;;4940:30;;;4932:39;;;;;;-1:-1:-1;;;;;5076:10:0;5067:20;;;;;-1:-1:-1;5067:20:0;;;;;;:32;;5092:6;5067:24;:32::i;:::-;-1:-1:-1;;;;;5053:10:0;5044:20;;;;;;-1:-1:-1;5044:20:0;;;;;;:55;;;;5122:13;;;;;;;:25;;5140:6;5122:17;:25::i;:::-;-1:-1:-1;;;;;5106:13:0;;;;;;;-1:-1:-1;5106:13:0;;;;;;;:41;;;;:13;5163:10;5154:33;;;;;;5180:6;;5154:33;;;;;;;;;;;;;-1:-1:-1;5201:4:0;4823:388;;;;:::o;7234:261::-;-1:-1:-1;;;;;7365:10:0;7357:19;;7312:4;7357:19;;;:7;:19;;;;;;;;:29;;;;;;;;;;;;:46;;7391:11;7357:33;:46::i;:::-;-1:-1:-1;;;;;7333:10:0;7325:19;;;;;;:7;:19;;;;;;;;:29;;;;;;;;;;;;;;:78;;;:29;;:19;;7410:61;;7325:78;7410:61;;;;;;;;;;;;;-1:-1:-1;7485:4:0;7234:261;;;;:::o;4534:128::-;-1:-1:-1;;;;;4631:15:0;;;4608:7;4631:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;4534:128::o;2457:113::-;2515:7;2538:6;;;;2531:14;;;;-1:-1:-1;2559:5:0;;;2457:113::o;2576:133::-;2634:7;2662:5;;;2681:6;;;;2674:14;;;;2702:1;2576:133;-1:-1:-1;;;2576:133:0:o

Swarm Source

bzzr://80a02b5a02d98796b76e183384e1c5fc3d4c2af597cbe1740339d526e143c2bf
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.