Contract 0xd2b29725fe2ca396853084e0e640bfeff24bbde3 1

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x6a133ff0dddacd31f5b4dc7a8f1d6247fe697fbb04655de13dfff8406f483b82Claim Token433163792023-05-30 5:42:315 days 15 hrs ago0x8318a46b43b0eed9dd78a78e7badbee15ac50816 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.013284521384 152.539601842
0x1d37d264c590e5a754ff7d7047223542584e10c37727a516a74b1a50b801ce19Claim Token432480582023-05-28 11:57:297 days 9 hrs ago0xbce047d7d99203ccbced7f94ed091d50056bcdea IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.012938852558 148.57045733
0x1a33405b54110840bd1292e27813d18f3f3cf90e5bf00f15a2d9568638f53008Claim Token431166392023-05-25 4:07:1610 days 17 hrs ago0xc0ff9fc3e04d9b14157dc0b05a3897cfc51d7401 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.01164870085 133.75628209
0x08c4589eeb2abe13cc5ab2c502dbe3b9b1e5fc33b5591ce0b14331c28a0ccd40Claim Token420145422023-04-27 9:14:3538 days 12 hrs ago0x6c49238130e9fcccb047782d465d9811f5c0340c IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.036035726885 413.780464641
0x7edce3b327cea38e3e618aabf6ed265aa8f3873734d92be9f44694f50784a65eClaim Token418936322023-04-24 7:08:5841 days 14 hrs ago0x46eceedc213270453907a2a0de34cdb5cc742ab7 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.038111579177 437.616451882
0xfceb06b7a615a1848702de1e60a03a6e658f63c1e2ac2c07f348d9804477f451Claim Token417254772023-04-19 23:19:0045 days 22 hrs ago0xb8142cd855a0f751ecd1eb7dd385999f724f1eb3 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.019736083172 226.619701363
0x6650eac261b7fe1c1030b8da700aa33431c6ceea55a6b3515d833be3cd85181bClaim Token416230022023-04-17 4:59:1148 days 16 hrs ago thaiyavilla.blockchain  IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.016713473656160.414954134
0xa3b89f2e11a29597310695a2825c53807feaa1a90289174de2c7211b83d4880aClaim Token415242712023-04-14 14:00:0251 days 7 hrs ago0x67e91b49f7868ffab59b40f6446df012b2c7cce8 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.021504252559 246.922717679
0x103c7206287185a090477ce7d9391319fd0cffbc9906d3decb2cc4c8f97889cfClaim Token408903712023-03-29 6:24:3767 days 15 hrs ago0x45ea6bc142eee2d7e731bd7caf0ac21cbe42e8a3 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.012704898955145.884083582
0x39f9080b2924b5681b1f212d3fbe5a8bae274c19c72cdc842da9c3c2ccda838bClaim Token408219262023-03-27 10:51:0369 days 10 hrs ago0x08c39e833cc097da6c480a3e722812151d9d6d5f IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.012620162638 121.127591572
0x38acd676a07c455c2fffb7276a1f2b00874e52622158338a3dc59ffc5247a362Claim Token406013202023-03-21 13:08:2775 days 8 hrs ago0x844121d6efd6eaa3b79bf8fb46b53324d9167d0a IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.033366276739 383.128486252
0x141cb8accbf83702d887997bad2f0bfce5809d13e19ae991e8a7e92c76d1fee7Claim Token405929902023-03-21 7:12:0075 days 14 hrs ago0x78f0318e2557195a955737121a936f87f1756099 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.030518725737292.916965678
0xd1b29327165f0eda606395d0ffce1dc0d4923c9956b0eb5966a139dbd5c30702Claim Token405927932023-03-21 7:04:3075 days 14 hrs ago0xa943c6f98df40b045c2a32c67275cc835e25b20e IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.042611117819408.979045962
0x553d515ddc409f6d422436d5e96006565333eb0c8115ebe8e66138c9400a2190Claim Token404266852023-03-16 21:40:3579 days 23 hrs ago0x496febaa5202b6dda8717737422b45a346803518 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.006909942675 79.343461
0xe6b198f344dc5c8ef7fdbcefc1914444f18bdd987c2e692ed1eef9d65f8cc88cClaim Token403751552023-03-15 13:28:3581 days 8 hrs ago0xcd3479f74df0c5019b29ae438253d7a24b3090a1 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.013011006928149.398970347
0xbd102b8ede5f0ba82221b95a4e4d7e739e6ad70cdcbb28423a09179fc8e75546Claim Token402988752023-03-13 13:10:0283 days 8 hrs ago solafide2018.nft  IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.013615571904 130.681472171
0x406d40ce6f0b099d17ceb9e02dbbb1f33ea372c14b3941d24e3f74574823ef95Claim Token401878732023-03-10 15:20:4286 days 6 hrs ago0x4b2c18fd485de6682fcd23b656c6f8285ad68f80 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.020328441902 233.421464282
0xeb326af0aa48d8187c4c01ef5be0bd5c879ba196f5baf9c51e1a7ffec1ddb681Claim Token401790512023-03-10 9:54:4186 days 11 hrs ago0x13ccf474bec3276cb7855f49fc8c7045a80215da IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.044537767301 511.405198152
0x9d751660286105287fab3796cc5151f122850f5d8c839cba0d1a6fb4e22c58caClaim Token399618232023-03-04 17:21:0492 days 4 hrs ago0x241aa264f305457e58e8e9e029c31da563c325c1 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.00742017754 85.202236108
0x5fb73551d523292bd95ccf2bcf40d68a201d9863042b5aba6f36b7aac0dbdb60Claim Token399591482023-03-04 15:37:3292 days 5 hrs ago0x539ecce52fe767ca3c40b3a1e206f70a4e6db142 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.016721789805 169.866110726
0xf4a6457dd737d51806b99c3a30cb2ae0e9244bf0de693923600fa11cbbba0344Claim Token399420342023-03-04 4:34:0092 days 17 hrs ago0x61c2d57fce07807780d305706e23c02e05746c03 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.007314840919 83.992707686
0x06aaab66a50ca0417747874f566bd564c2c90d7f5b9809eec9ae181c52c8a9acClaim Token398379032023-03-01 9:59:0795 days 11 hrs ago0x6c38faefc560aa3cd2f8978cc0bbc2419d4b1245 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.014523367567 166.764661062
0x065e0a5785b63cddd32eb011ab9cc277a3202e8c292f155df4dab6e7f3db54a5Claim Token398130092023-02-28 17:52:3896 days 3 hrs ago0xbc5346c2e8836fcfb62770b1646fce966b91c754 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.061984466375 594.923325639
0x7d7e00b6b605a207faaee524c7c40c132a7ff34694eaf47acf007171d27a05b6Claim Token398088322023-02-28 15:06:4796 days 6 hrs ago0xe7a7ed7b888775ddad3e5e893da197e4a2320985 IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.034765564288 333.677876629
0x144f6742a0e53f504bb2a98382e629060671f98be396d35b65076b36e5066d05Claim Token398075282023-02-28 14:13:2596 days 7 hrs ago0xcc80c55046650127cc43c6222204c8eb4a9a7aed IN  0xd2b29725fe2ca396853084e0e640bfeff24bbde30 MATIC0.019646258998 225.588294714
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x1e371a7d6aa6228b4e5496d1e04e848f49190881af511211f6b940b6f06db9bd272688882022-04-18 3:12:14412 days 18 hrs ago 0xc82a977e5547e188f8dc772110569b925bb35981  Contract Creation0 MATIC
[ Download CSV Export 
Loading

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

Contract Name:
FixedVesting

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

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

pragma solidity ^0.8.13;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "./TransferHelper.sol";
import "./IFixedCreator.sol";

contract FixedVesting{
    address public immutable creator = msg.sender;
    address public owner = tx.origin;

    bool private initialized;
    bool public isPaused;

    uint128 public vestingLength;
    uint128 public sold;
    
    address public token;

    address[] public buyers;

    struct Detail{
        uint128 datetime;
        uint128 ratio_d2;
    }

    struct Bought{
        uint128 buyerIndex;
        uint128 purchased;
        uint128 completed_d2; // in percent (2 decimal)
        uint128 claimed;
    }
    
    mapping(address => Bought) public invoice;
    mapping(uint128 => Detail) public vesting;
    
    modifier onlyOwner{
        require(msg.sender == owner, "!owner");
        _;
    }
    
    /**
     * @dev Initialize vesting token distribution
     * @param _token Token project address
     * @param _datetime Vesting datetime in epoch
     * @param _ratio_d2 Vesting ratio in percent (decimal 2)
     */
    function initialize(
        address _token,
        uint128[] calldata _datetime,
        uint128[] calldata _ratio_d2
    ) external {
        require(!initialized, "Initialized");
        require(msg.sender == creator, "!creator");

        _setToken(_token);
        _newVesting(_datetime, _ratio_d2);
        
        initialized = true;
    }

    /**
     * @dev Get length of buyer
     */
    function getBuyerLength() external view returns (uint){
        return buyers.length;
    }

    /**
     * @dev Get vesting runnning
     */
    function vestingRunning() public view returns(uint128 round, uint128 totalPercent_d2){
        uint128 vestingSize = vestingLength;
        uint128 total;
        for(uint128 i=1; i<=vestingSize; i++){
            Detail memory temp = vesting[i];
            total += temp.ratio_d2;
            
            if( (temp.datetime <= block.timestamp && block.timestamp <= vesting[i+1].datetime) ||
                (i == vestingSize && block.timestamp >= temp.datetime)
            ){
                round = i;
                totalPercent_d2 = total;
                break;
            }
        }
    }

    /**
     * @dev Token claim
     */
    function claimToken() external {
        (uint128 round, uint128 totalPercent_d2) = vestingRunning();
        Bought memory temp = invoice[msg.sender];

        require(!isPaused && round > 0 && token != address(0), "!started");
        require(temp.purchased > 0, "!buyer");
        require(temp.completed_d2 < totalPercent_d2, "claimed");
        
        uint128 amountToClaim;
        if(temp.completed_d2 == 0){
            amountToClaim = (temp.purchased * totalPercent_d2) / 10000;
        } else{
            amountToClaim = ((temp.claimed * totalPercent_d2) / temp.completed_d2) - temp.claimed;
        }

        require(IERC20(token).balanceOf(address(this)) >= amountToClaim && amountToClaim > 0, "insufficient");
        
        invoice[msg.sender].completed_d2 = totalPercent_d2;
        invoice[msg.sender].claimed = temp.claimed + amountToClaim;

        TransferHelper.safeTransfer(address(token), msg.sender, amountToClaim);        
    }

    /**
     * @dev Set token project
     * @param _token Token project address
     */
    function _setToken(address _token) private {
        token = _token;
    }

    /**
     * @dev Insert new vestings
     * @param _datetime Vesting datetime
     * @param _ratio_d2 Vesting ratio in percent (decimal 2)
     */
    function _newVesting(
        uint128[] calldata _datetime,
        uint128[] calldata _ratio_d2
    ) private {
        require(_datetime.length == _ratio_d2.length, "!good");

        uint128 vestingSize = vestingLength;
        for(uint128 i=0; i<_datetime.length; i++){
            if(i != _datetime.length-1) require(_datetime[i] < _datetime[i+1], "!good");
            vestingSize += 1;
            vesting[vestingSize] = Detail(_datetime[i], _ratio_d2[i]);
        }

        vestingLength = vestingSize;
    }

    /**
     * @dev Insert new buyers & purchases
     * @param _buyer Buyer address
     * @param _purchased Buyer purchase
     */
    function newBuyers(address[] calldata _buyer, uint128[] calldata _purchased) external onlyOwner {
        require(_buyer.length == _purchased.length, "!good");

        for(uint16 i=0; i<_buyer.length; i++){
            if(_buyer[i] == address(0) || _purchased[i] == 0) continue;

            Bought memory temp = invoice[_buyer[i]];

            if(temp.purchased == 0){
                buyers.push(_buyer[i]);
                invoice[_buyer[i]].buyerIndex = uint128(buyers.length - 1);
            }
            
            invoice[_buyer[i]].purchased = temp.purchased + _purchased[i];
            sold += _purchased[i];
        }
    }

    /**
     * @dev Replace buyers address
     * @param _oldBuyer Old address
     * @param _newBuyer New purchase
     */
    function replaceBuyers(address[] calldata _oldBuyer, address[] calldata _newBuyer) external onlyOwner {
        require(_oldBuyer.length == _newBuyer.length && buyers.length > 0, "!good");

        for(uint16 i=0; i<_oldBuyer.length; i++){
            Bought memory temp = invoice[_oldBuyer[i]];

            if( temp.purchased == 0 ||
                _oldBuyer[i] == address(0) ||
                _newBuyer[i] == address(0)
            ) continue;

            buyers[temp.buyerIndex] = _newBuyer[i];

            invoice[_newBuyer[i]] = temp;

            delete invoice[_oldBuyer[i]];
        }
    }

    /**
     * @dev Remove buyers
     * @param _buyer Buyer address
     */
    function removeBuyers(address[] calldata _buyer) external onlyOwner {
        require(buyers.length > 0, "!good");

        for(uint16 i=0; i<_buyer.length; i++){
            Bought memory temp = invoice[_buyer[i]];

            if(temp.purchased == 0 || _buyer[i] == address(0)) continue;

            sold -= temp.purchased;

            address addressToMove = buyers[buyers.length-1];
            
            buyers[temp.buyerIndex] = addressToMove;
            invoice[addressToMove].buyerIndex = temp.buyerIndex;

            buyers.pop();
            delete invoice[_buyer[i]];
        }
    }
    
    /**
     * @dev Replace buyers purchase
     * @param _buyer Buyer address
     * @param _newPurchased new purchased
     */
    function replacePurchases(address[] calldata _buyer, uint128[] calldata _newPurchased) external onlyOwner {
        require(_buyer.length == _newPurchased.length && buyers.length > 0, "!good");

        for(uint16 i=0; i<_buyer.length; i++){
            Bought memory temp = invoice[_buyer[i]];

            if( temp.purchased == 0 ||
                temp.completed_d2 > 0 ||
                _buyer[i] == address(0) ||
                _newPurchased[i] == 0) continue;
            
            sold = sold - temp.purchased + _newPurchased[i];
            invoice[_buyer[i]].purchased = _newPurchased[i];
        }
    }

    /**
     * @dev Update vestings datetime
     * @param _vestingRound Vesting round
     * @param _newDatetime new datetime in epoch
     */
    function updateVestingDatetimes(uint128[] calldata _vestingRound, uint128[] calldata _newDatetime) external onlyOwner {
        require(_vestingRound.length == _newDatetime.length, "!good");

        (uint128 round, ) = vestingRunning();
        uint128 vestingSize = vestingLength;

        for(uint128 i=0; i<_vestingRound.length; i++){
            if( _vestingRound[i] > vestingSize ||
                round >= _vestingRound[i]) continue;

            vesting[_vestingRound[i]].datetime = _newDatetime[i];
        }
    }

    /**
     * @dev Update vestings ratio
     * @param _vestingRound Vesting round
     * @param _newRatio_d2 New ratio in percent (decimal 2)
     */
    function updateVestingRatios(uint128[] calldata _vestingRound, uint128[] calldata _newRatio_d2) external onlyOwner {
        require(_vestingRound.length == _newRatio_d2.length, "!good");

        (uint128 round, ) = vestingRunning();
        uint128 vestingSize = vestingLength;

        for(uint128 i=0; i<_vestingRound.length; i++){
            if(_vestingRound[i] > vestingSize ||
                round >= _vestingRound[i]) continue;

            vesting[_vestingRound[i]].ratio_d2 = _newRatio_d2[i];
        }
    }

    /**
     * @dev Insert new vestings
     * @param _datetime Vesting datetime
     * @param _ratio_d2 Vesting ratio in percent (decimal 2)
     */
    function newVesting(
        uint128[] calldata _datetime,
        uint128[] calldata _ratio_d2
    ) external onlyOwner {
        _newVesting(_datetime, _ratio_d2);
    }

    /**
     * @dev Remove last vesting round
     */
    function removeLastVestingRound() external onlyOwner {
        uint128 vestingSizeTarget = vestingLength-1;

        delete vesting[vestingSizeTarget];

        vestingLength = vestingSizeTarget;
    }

    /**
     * @dev Emergency condition to withdraw token
     * @param _target Target address
     * @param _amount Amount to withdraw
     */
    function emergencyWithdraw(address _target, uint128 _amount) external onlyOwner {
        require(_target != address(0), "!good");
        
        uint128 contractBalance = uint128(IERC20(token).balanceOf(address(this)));
        if(_amount > contractBalance) _amount = uint128(contractBalance);

        TransferHelper.safeTransfer(address(token), _target, _amount);
    }

    /**
     * @dev Set token project
     * @param _token Token project address
     */
    function setToken(address _token) external onlyOwner {
        _setToken(_token);
    }
    
    /**
     * @dev Pause vesting activity
     */
    function togglePause() external onlyOwner {
        isPaused = !isPaused;
    }
    
    /**
     * @dev Transfer ownership
     * @param _newOwner New owner address
     */
    function transferOwnership(address _newOwner) external onlyOwner {
        require(_newOwner != address(0), "!good");
        owner = _newOwner;
    }
}

File 2 of 4 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `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);

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

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

File 3 of 4 : TransferHelper.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.13;

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes("approve(address,uint256)")));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: APPROVE_FAILED");
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes("transfer(address,uint256)")));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FAILED");
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes("transferFrom(address,address,uint256)")));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FROM_FAILED");
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, "TransferHelper: ETH_TRANSFER_FAILED");
    }
}

File 4 of 4 : IFixedCreator.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.13;

interface IFixedCreator{
    event VestingCreated(address indexed vesting, uint index);
    
    function owner() external  view returns (address);
    
    function allVestingsLength() external view returns(uint);
    
    function allVestings(uint) external view returns(address);
    
    function createVesting(address, uint128[] calldata, uint128[] calldata) external returns (address);
    
    function transferOwnership(address) external;
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint128","name":"_amount","type":"uint128"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyerLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint128[]","name":"_datetime","type":"uint128[]"},{"internalType":"uint128[]","name":"_ratio_d2","type":"uint128[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"invoice","outputs":[{"internalType":"uint128","name":"buyerIndex","type":"uint128"},{"internalType":"uint128","name":"purchased","type":"uint128"},{"internalType":"uint128","name":"completed_d2","type":"uint128"},{"internalType":"uint128","name":"claimed","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_buyer","type":"address[]"},{"internalType":"uint128[]","name":"_purchased","type":"uint128[]"}],"name":"newBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128[]","name":"_datetime","type":"uint128[]"},{"internalType":"uint128[]","name":"_ratio_d2","type":"uint128[]"}],"name":"newVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_buyer","type":"address[]"}],"name":"removeBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLastVestingRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_oldBuyer","type":"address[]"},{"internalType":"address[]","name":"_newBuyer","type":"address[]"}],"name":"replaceBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_buyer","type":"address[]"},{"internalType":"uint128[]","name":"_newPurchased","type":"uint128[]"}],"name":"replacePurchases","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sold","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128[]","name":"_vestingRound","type":"uint128[]"},{"internalType":"uint128[]","name":"_newDatetime","type":"uint128[]"}],"name":"updateVestingDatetimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128[]","name":"_vestingRound","type":"uint128[]"},{"internalType":"uint128[]","name":"_newRatio_d2","type":"uint128[]"}],"name":"updateVestingRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"","type":"uint128"}],"name":"vesting","outputs":[{"internalType":"uint128","name":"datetime","type":"uint128"},{"internalType":"uint128","name":"ratio_d2","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingLength","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingRunning","outputs":[{"internalType":"uint128","name":"round","type":"uint128"},{"internalType":"uint128","name":"totalPercent_d2","type":"uint128"}],"stateMutability":"view","type":"function"}]

60a060405233608052600080546001600160a01b0319163217905534801561002657600080fd5b506080516122ce610049600039600081816101b401526117f901526122ce6000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806398b3f7e2116100de578063d3b8800311610097578063f2aa821811610071578063f2aa8218146103ef578063f2fde38b14610402578063f33548b514610415578063fc0c546a1461041d57600080fd5b8063d3b88003146103b6578063e3083884146103c9578063f18fa08a146103dc57600080fd5b806398b3f7e21461033e578063a932c47a14610351578063b187bd2614610364578063b217f9d414610388578063c0ac58751461039b578063c4ae3168146103ae57600080fd5b8063545f1a2e11610130578063545f1a2e1461024657806379d973d914610259578063881644681461026c5780638da5cb5b146102a05780638f0164f6146102b357806396fe05821461032d57600080fd5b806302c7e7af1461017857806302d05d3f146101af578063084f1df5146101ee5780630be8639714610216578063144fa6d71461022b5780634451d89f1461023e575b600080fd5b60015461019290600160801b90046001600160801b031681565b6040516001600160801b0390911681526020015b60405180910390f35b6101d67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101a6565b6101f6610430565b604080516001600160801b039384168152929091166020830152016101a6565b610229610224366004611eac565b61054b565b005b610229610239366004611f34565b6108b7565b6102296108ed565b610229610254366004611eac565b610c0d565b610229610267366004611eac565b610eb6565b6101f661027a366004611f6d565b6005602052600090815260409020546001600160801b0380821691600160801b90041682565b6000546101d6906001600160a01b031681565b6102fa6102c1366004611f34565b600460205260009081526040902080546001909101546001600160801b0380831692600160801b90819004821692808316929190041684565b604080516001600160801b03958616815293851660208501529184169183019190915290911660608201526080016101a6565b6003546040519081526020016101a6565b61022961034c366004611f88565b611072565b61022961035f366004611eac565b611344565b60005461037890600160a81b900460ff1681565b60405190151581526020016101a6565b600154610192906001600160801b031681565b6102296103a9366004611eac565b611628565b61022961165e565b6102296103c4366004611fca565b6116a9565b6102296103d7366004611ffd565b6117a6565b6102296103ea366004611eac565b611880565b6101d66103fd36600461207e565b611a31565b610229610410366004611f34565b611a5b565b610229611acd565b6002546101d6906001600160a01b031681565b6001805460009182916001600160801b03169082905b826001600160801b0316816001600160801b031611610544576001600160801b038082166000908152600560209081526040918290208251808401909352548084168352600160801b9004909216918101829052906104a590846120ad565b92504281600001516001600160801b0316111580156104ef5750600560006104ce8460016120ad565b6001600160801b039081168252602082019290925260400160002054164211155b806105205750836001600160801b0316826001600160801b0316148015610520575080516001600160801b03164210155b156105315781955082945050610544565b508061053c816120d8565b915050610446565b5050509091565b6000546001600160a01b0316331461057e5760405162461bcd60e51b8152600401610575906120fe565b60405180910390fd5b82811461059d5760405162461bcd60e51b81526004016105759061211e565b60005b61ffff81168411156108b0576000858561ffff84168181106105c4576105c461213d565b90506020020160208101906105d99190611f34565b6001600160a01b0316148061061f575082828261ffff168181106105ff576105ff61213d565b90506020020160208101906106149190611f6d565b6001600160801b0316155b61089e5760006004600087878561ffff1681811061063f5761063f61213d565b90506020020160208101906106549190611f34565b6001600160a01b0316815260208082019290925260409081016000908120825160808101845281546001600160801b038082168352600160801b918290048116968301879052600190930154808416958301959095529093041660608301529092500361078e57600386868461ffff168181106106d3576106d361213d565b90506020020160208101906106e89190611f34565b815460018082018455600093845260209093200180546001600160a01b0319166001600160a01b03929092169190911790556003546107279190612153565b6004600088888661ffff168181106107415761074161213d565b90506020020160208101906107569190611f34565b6001600160a01b03168152602081019190915260400160002080546001600160801b0319166001600160801b03929092169190911790555b83838361ffff168181106107a4576107a461213d565b90506020020160208101906107b99190611f6d565b81602001516107c891906120ad565b6004600088888661ffff168181106107e2576107e261213d565b90506020020160208101906107f79190611f34565b6001600160a01b03168152602081019190915260400160002080546001600160801b03928316600160801b029216919091179055838361ffff84168181106108415761084161213d565b90506020020160208101906108569190611f6d565b60018054601090610878908490600160801b90046001600160801b03166120ad565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550505b806108a88161216a565b9150506105a0565b5050505050565b6000546001600160a01b031633146108e15760405162461bcd60e51b8152600401610575906120fe565b6108ea81611b3e565b50565b6000806108f8610430565b336000908152600460209081526040808320815160808101835281546001600160801b038082168352600160801b918290048116958301959095526001909201548085169382019390935291049091166060820152905492945090925090600160a81b900460ff1615801561097657506000836001600160801b0316115b801561098c57506002546001600160a01b031615155b6109c35760405162461bcd60e51b8152602060048201526008602482015267085cdd185c9d195960c21b6044820152606401610575565b600081602001516001600160801b031611610a095760405162461bcd60e51b815260206004820152600660248201526510b13abcb2b960d11b6044820152606401610575565b816001600160801b031681604001516001600160801b031610610a585760405162461bcd60e51b815260206004820152600760248201526618db185a5b595960ca1b6044820152606401610575565b600081604001516001600160801b0316600003610a9357612710838360200151610a829190612181565b610a8c91906121b0565b9050610abe565b60608201516040830151610aa78583612181565b610ab191906121b0565b610abb91906121e4565b90505b6002546040516370a0823160e01b81523060048201526001600160801b038316916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b33919061220c565b10158015610b4a57506000816001600160801b0316115b610b855760405162461bcd60e51b815260206004820152600c60248201526b1a5b9cdd59999a58da595b9d60a21b6044820152606401610575565b33600090815260046020526040902060010180546001600160801b0319166001600160801b0385161790556060820151610bc09082906120ad565b33600081815260046020526040902060010180546001600160801b03938416600160801b02908416179055600254610c07926001600160a01b039190911691908416611b60565b50505050565b6000546001600160a01b03163314610c375760405162461bcd60e51b8152600401610575906120fe565b8281148015610c47575060035415155b610c635760405162461bcd60e51b81526004016105759061211e565b60005b61ffff81168411156108b05760006004600087878561ffff16818110610c8e57610c8e61213d565b9050602002016020810190610ca39190611f34565b6001600160a01b031681526020808201929092526040908101600020815160808101835281546001600160801b038082168352600160801b9182900481169583018690526001909301548084169483019490945290920416606082015291501580610d1b5750600081604001516001600160801b0316115b80610d5957506000868661ffff8516818110610d3957610d3961213d565b9050602002016020810190610d4e9190611f34565b6001600160a01b0316145b80610d95575083838361ffff16818110610d7557610d7561213d565b9050602002016020810190610d8a9190611f6d565b6001600160801b0316155b15610da05750610ea4565b83838361ffff16818110610db657610db661213d565b9050602002016020810190610dcb9190611f6d565b6020820151600154610ded9190600160801b90046001600160801b03166121e4565b610df791906120ad565b600180546001600160801b03928316600160801b029216919091179055838361ffff8416818110610e2a57610e2a61213d565b9050602002016020810190610e3f9190611f6d565b6004600088888661ffff16818110610e5957610e5961213d565b9050602002016020810190610e6e9190611f34565b6001600160a01b03168152602081019190915260400160002080546001600160801b03928316600160801b029216919091179055505b80610eae8161216a565b915050610c66565b6000546001600160a01b03163314610ee05760405162461bcd60e51b8152600401610575906120fe565b828114610eff5760405162461bcd60e51b81526004016105759061211e565b6000610f09610430565b506001549091506001600160801b031660005b6001600160801b03811686111561106957816001600160801b03168787836001600160801b0316818110610f5257610f5261213d565b9050602002016020810190610f679190611f6d565b6001600160801b03161180610fbd57508686826001600160801b0316818110610f9257610f9261213d565b9050602002016020810190610fa79190611f6d565b6001600160801b0316836001600160801b031610155b611057578484826001600160801b0316818110610fdc57610fdc61213d565b9050602002016020810190610ff19190611f6d565b600560008989856001600160801b03168181106110105761101061213d565b90506020020160208101906110259190611f6d565b6001600160801b039081168252602082019290925260400160002080546001600160801b031916929091169190911790555b80611061816120d8565b915050610f1c565b50505050505050565b6000546001600160a01b0316331461109c5760405162461bcd60e51b8152600401610575906120fe565b6003546110bb5760405162461bcd60e51b81526004016105759061211e565b60005b61ffff811682111561133f5760006004600085858561ffff168181106110e6576110e661213d565b90506020020160208101906110fb9190611f34565b6001600160a01b031681526020808201929092526040908101600020815160808101835281546001600160801b038082168352600160801b918290048116958301869052600190930154808416948301949094529092041660608201529150158061119957506000848461ffff85168181106111795761117961213d565b905060200201602081019061118e9190611f34565b6001600160a01b0316145b156111a4575061132d565b6020810151600180546010906111cb908490600160801b90046001600160801b03166121e4565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506000600360016003805490506112059190612153565b815481106112155761121561213d565b6000918252602090912001548251600380546001600160a01b039093169350839290916001600160801b03169081106112505761125061213d565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905584519284168252600490526040902080546001600160801b0319166001600160801b0390921691909117905560038054806112b5576112b5612225565b600082815260208120820160001990810180546001600160a01b0319169055909101909155600490868661ffff87168181106112f3576112f361213d565b90506020020160208101906113089190611f34565b6001600160a01b03168152602081019190915260400160009081208181556001015550505b806113378161216a565b9150506110be565b505050565b6000546001600160a01b0316331461136e5760405162461bcd60e51b8152600401610575906120fe565b828114801561137e575060035415155b61139a5760405162461bcd60e51b81526004016105759061211e565b60005b61ffff81168411156108b05760006004600087878561ffff168181106113c5576113c561213d565b90506020020160208101906113da9190611f34565b6001600160a01b031681526020808201929092526040908101600020815160808101835281546001600160801b038082168352600160801b918290048116958301869052600190930154808416948301949094529092041660608201529150158061147857506000868661ffff85168181106114585761145861213d565b905060200201602081019061146d9190611f34565b6001600160a01b0316145b806114b657506000848461ffff85168181106114965761149661213d565b90506020020160208101906114ab9190611f34565b6001600160a01b0316145b156114c15750611616565b83838361ffff168181106114d7576114d761213d565b90506020020160208101906114ec9190611f34565b600382600001516001600160801b03168154811061150c5761150c61213d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806004600086868661ffff168181106115555761155561213d565b905060200201602081019061156a9190611f34565b6001600160a01b03168152602080820192909252604090810160009081208451938501516001600160801b03948516600160801b9186168202178255928501516060909501519484169490931690910292909217600190910155600490878761ffff86168181106115dd576115dd61213d565b90506020020160208101906115f29190611f34565b6001600160a01b031681526020810191909152604001600090812081815560010155505b806116208161216a565b91505061139d565b6000546001600160a01b031633146116525760405162461bcd60e51b8152600401610575906120fe565b610c0784848484611c74565b6000546001600160a01b031633146116885760405162461bcd60e51b8152600401610575906120fe565b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6000546001600160a01b031633146116d35760405162461bcd60e51b8152600401610575906120fe565b6001600160a01b0382166116f95760405162461bcd60e51b81526004016105759061211e565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611742573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611766919061220c565b9050806001600160801b0316826001600160801b03161115611786578091505b60025461133f906001600160a01b0316846001600160801b038516611b60565b600054600160a01b900460ff16156117ee5760405162461bcd60e51b815260206004820152600b60248201526a125b9a5d1a585b1a5e995960aa1b6044820152606401610575565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118515760405162461bcd60e51b815260206004820152600860248201526710b1b932b0ba37b960c11b6044820152606401610575565b61185a85611b3e565b61186684848484611c74565b50506000805460ff60a01b1916600160a01b179055505050565b6000546001600160a01b031633146118aa5760405162461bcd60e51b8152600401610575906120fe565b8281146118c95760405162461bcd60e51b81526004016105759061211e565b60006118d3610430565b506001549091506001600160801b031660005b6001600160801b03811686111561106957816001600160801b03168787836001600160801b031681811061191c5761191c61213d565b90506020020160208101906119319190611f6d565b6001600160801b0316118061198757508686826001600160801b031681811061195c5761195c61213d565b90506020020160208101906119719190611f6d565b6001600160801b0316836001600160801b031610155b611a1f578484826001600160801b03168181106119a6576119a661213d565b90506020020160208101906119bb9190611f6d565b600560008989856001600160801b03168181106119da576119da61213d565b90506020020160208101906119ef9190611f6d565b6001600160801b039081168252602082019290925260400160002080548216600160801b93909216929092021790555b80611a29816120d8565b9150506118e6565b60038181548110611a4157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314611a855760405162461bcd60e51b8152600401610575906120fe565b6001600160a01b038116611aab5760405162461bcd60e51b81526004016105759061211e565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611af75760405162461bcd60e51b8152600401610575906120fe565b60018054600091611b10916001600160801b03166121e4565b6001600160801b0316600081815260056020526040812055600180546001600160801b031916909117905550565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691611bbc919061223b565b6000604051808303816000865af19150503d8060008114611bf9576040519150601f19603f3d011682016040523d82523d6000602084013e611bfe565b606091505b5091509150818015611c28575080511580611c28575080806020019051810190611c289190612276565b6108b05760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610575565b828114611c935760405162461bcd60e51b81526004016105759061211e565b6001546001600160801b031660005b6001600160801b038116851115611e3957611cbe600186612153565b816001600160801b031614611d66578585611cda8360016120ad565b6001600160801b0316818110611cf257611cf261213d565b9050602002016020810190611d079190611f6d565b6001600160801b03168686836001600160801b0316818110611d2b57611d2b61213d565b9050602002016020810190611d409190611f6d565b6001600160801b031610611d665760405162461bcd60e51b81526004016105759061211e565b611d716001836120ad565b915060405180604001604052808787846001600160801b0316818110611d9957611d9961213d565b9050602002016020810190611dae9190611f6d565b6001600160801b031681526020018585846001600160801b0316818110611dd757611dd761213d565b9050602002016020810190611dec9190611f6d565b6001600160801b039081169091528381166000908152600560209081526040909120835193909101518216600160801b029290911691909117905580611e31816120d8565b915050611ca2565b50600180546001600160801b0319166001600160801b039290921691909117905550505050565b60008083601f840112611e7257600080fd5b50813567ffffffffffffffff811115611e8a57600080fd5b6020830191508360208260051b8501011115611ea557600080fd5b9250929050565b60008060008060408587031215611ec257600080fd5b843567ffffffffffffffff80821115611eda57600080fd5b611ee688838901611e60565b90965094506020870135915080821115611eff57600080fd5b50611f0c87828801611e60565b95989497509550505050565b80356001600160a01b0381168114611f2f57600080fd5b919050565b600060208284031215611f4657600080fd5b611f4f82611f18565b9392505050565b80356001600160801b0381168114611f2f57600080fd5b600060208284031215611f7f57600080fd5b611f4f82611f56565b60008060208385031215611f9b57600080fd5b823567ffffffffffffffff811115611fb257600080fd5b611fbe85828601611e60565b90969095509350505050565b60008060408385031215611fdd57600080fd5b611fe683611f18565b9150611ff460208401611f56565b90509250929050565b60008060008060006060868803121561201557600080fd5b61201e86611f18565b9450602086013567ffffffffffffffff8082111561203b57600080fd5b61204789838a01611e60565b9096509450604088013591508082111561206057600080fd5b5061206d88828901611e60565b969995985093965092949392505050565b60006020828403121561209057600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b038083168185168083038211156120cf576120cf612097565b01949350505050565b60006001600160801b038083168181036120f4576120f4612097565b6001019392505050565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b6020808252600590820152640859dbdbd960da1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008282101561216557612165612097565b500390565b600061ffff8083168181036120f4576120f4612097565b60006001600160801b03808316818516818304811182151516156121a7576121a7612097565b02949350505050565b60006001600160801b03808416806121d857634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b60006001600160801b038381169083168181101561220457612204612097565b039392505050565b60006020828403121561221e57600080fd5b5051919050565b634e487b7160e01b600052603160045260246000fd5b6000825160005b8181101561225c5760208186018101518583015201612242565b8181111561226b576000828501525b509190910192915050565b60006020828403121561228857600080fd5b81518015158114611f4f57600080fdfea26469706673582212209bd4cf84668169c7be637c0213202bbc2d8fcf8c9c5e76ac08935957b007884a64736f6c634300080d0033

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.