Contract 0xBeDf619c69f5C1655E58463B85A4EE67629dE409 2

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0xfd399e549b802db046df0d28ef7a880aee3ae5932e0bdfcd5a81473dbe7f4613Release430840242023-05-24 8:20:209 days 10 hrs ago0x22cb6d4a21c148d0f394bb69b12ee0859f3cf9e7 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.013331057964 167.33685593
0x98971a2c4fbaacab77163cc15e3b24de60bc7decb072faa065674410ce5fc67fRelease423522802023-05-05 23:20:2427 days 19 hrs ago0xeceaeeab9609c5fea313804cea38af991d8ae7c9 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.022787648 224.5
0xbd2241a01991f6fe1ca2091a99433233168ffe47be4f8bf85e8edd09c6a52f64Release413983832023-04-11 7:41:5452 days 10 hrs ago0xe3a1002b19af53287b6d0fcdc07638826dc81f38 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.010212463609 121.012224021
0x8901a14b067a3cedfdbc7050df293eea990b508ecfa9fe80d776254697272307Release412590192023-04-07 17:33:5656 days 58 mins ago0x427d90e864da5f31c9b3fa39c6f12cd0637b5267 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.010049119262 119.059751467
0xd0da2bc9b8db64ecd692d51185b0c765f8aa7e766e687ac1b14d3a234e5b0e0fRelease411956852023-04-06 2:41:3557 days 15 hrs ago0xa53a3348f385c223df85fac8dcb456a480d4f955 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.00714122097984.607613135
0xbf0cc9711b04dd56eb6d30c3ec962e3fb459e070bc67930e4a4f9a1aa50407c9Release405200362023-03-19 8:02:1375 days 10 hrs ago0xef1908e91012cb4e3daca61b0398f07fb92e6bb5 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.009447115298 111.927341098
0x3fa46c46d853b9e10c830467652b57e52c45f13c3408382af384f82b603722c2Release404936202023-03-18 15:02:2476 days 3 hrs ago0xf73315e91a24da2ee94aadc39c813e5a34f4ec10 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.016217011377 159.767214864
0x6e1a7bd69417ade288cc3cd8b0e88e3d2b22ed35d0dbe75cae51ae0dbe6a2458Release403836922023-03-15 19:03:5778 days 23 hrs ago0xb7de2a566c8de7f8c2abed13e5cab1759b704ea3 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.009120272124 108.054975176
0xd9f76eaccde1b8c5fad36888deee22754511ed68fc05a02400be78cad9d3d739Release403172242023-03-14 0:40:5780 days 17 hrs ago0xe02b5de75eadc586d31766fed5270acd5f03134b IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.00756906782695.010014648
0xf5a26f2fdb747f5b7fe3436dde89ff4aae3dd1542ebd35d93e3c3113d90f5366Release402240192023-03-11 14:22:5983 days 4 hrs ago0xddf8ab6eb564b6aa22d60dce84542e2fcdb74a02 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.015265338938 180.860373182
0xfe2a1450fd813b155b2c4c66dd41a2c35f0424e13c81678f6c58e9fa4e9f8659Release401510962023-03-09 16:06:4985 days 2 hrs ago0x5dd8aaa38538cf5e123f12bca50ce25428ce9620 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.016897192227 166.468239946
0x61c624c0e7ae76717989b43f22c484521b37bc756e8014a7b616c8b70f6cc6e1Release398914892023-03-02 20:14:3291 days 22 hrs ago0x120b30862a969712f94537eb1171be3ed19cc530 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.00776205072 91.963067157
0x4de75bb7d3ec4943bb7f1f76ebe96312b4d018447ba2089e6d194d2c077863bbRelease398501672023-03-01 17:47:3193 days 44 mins ago0xe1223d7af01fdaabda9fc76e26572acb4c491b38 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.016541572524 195.980907593
0x6250faa1a1eb3bfad3c0012279aedb64727e821bdfe4363015fc3c953a11d175Release397451882023-02-26 21:58:2295 days 20 hrs ago0x39b4b0bd8ee01b2c53cd2b85c6fedf926b0f8bad IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.006739863774 79.852421389
0xd5392920708cb09ef7f626e89ed781d772fc2413b20d0cb596cef229b3a47988Release396642372023-02-24 17:33:2798 days 58 mins ago0x07e00ee130652ece738c981ed9e9b31b7c92f783 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.017285693057 170.295683499
0xc57a7aa04f01822e44be50f87aaea9b6ebc656aa0b6d8010841901ebdd8c6a90Release396521672023-02-24 9:52:3398 days 8 hrs ago0x6837039edef56cb84fedeb0bb892dd9a8da1f527 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.010844638523 128.484888431
0xf48abc6359f6d8bec0e4ffa76b87a652f2e6d4b3261072eb38ff068cfada3ed4Release393286432023-02-15 17:45:25107 days 46 mins ago0xa016ac031bdd5c22d0a5756f97a86a06def1387e IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.018333569049 180.619178053
0xbbe9d0ce4c494a8d1f4a273b747ba3e86d602282753ebda1d944a0e23fdeaea7Release391966752023-02-12 4:39:07110 days 13 hrs ago0x534e4b2355bdc0e8d71b8dd88997ba5ad1d5322e IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.020406072695 241.766654372
0x957f66c2f57a2c91e8663dc59fc10491455d525f50b94308de6a523abf9ad42bRelease391966282023-02-12 4:36:23110 days 13 hrs ago0xea404ec89fc43906a73978d5cdd9c06202015aa7 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.015700253284 154.676202758
0x5e5b0eb23d72af688901e6bd5e4c926ea45db727543422086d162e8c46929c12Release391965772023-02-12 4:34:35110 days 13 hrs ago0x180746113f75da4aaa4cb685ddbd91e83351123d IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.015543021906 153.127186188
0x3e0dfe3d013144b8b277bcac1838fea686d56785084775447131f1e8633609c7Release391964992023-02-12 4:31:49110 days 14 hrs ago0x9f9294f40dddc8329acabef4fa084529742d8ace IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.013176701178 156.114653076
0x1bb70c584f00c44d99f7041f86b53f75d1bfb1f2803b8c897c1b5ba4d7fc185eRelease391832502023-02-11 19:22:33110 days 23 hrs ago0x66aaaad241aa59a82b1b3b52c76479c6b48f6670 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.022419255312 220.870658427
0x19784738744abdbdebde55fea7a66a71cb109893748c0ad3a07790659ba7026eRelease391483532023-02-10 20:58:29111 days 21 hrs ago0xfedc2cd00066ef97af6e617dcd5cf0e2555d722d IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.012263644478 145.317618713
0x446caebda356bc1f3a469bc0315427c21d38aa87048c2ca21888a63cbb2002c1Release391438522023-02-10 18:09:22112 days 22 mins ago0x538425a132938400aea799bbd3e7fe3625b92dbf IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.016091939133 190.680859957
0xc87c4a064addbf6ecd0e1e1b13f5955d3586b1e5677c7113008810efe9d794d3Release390889552023-02-09 7:59:59113 days 10 hrs ago0x106f8d905b74d1a7e935ef9eec8bfdc5accf2566 IN  0xbedf619c69f5c1655e58463b85a4ee67629de4090 MATIC0.034040508513335.361251903
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CrowdLinearDistribution

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 1000 runs

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

pragma solidity ^0.8.10;


import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "./BokkyPooBahsDateTimeLibrary.sol";
import "./Ownable.sol";

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

    event CrowdLinearDistributionCreated(address beneficiary);
    event CrowdLinearDistributionInitialized(address from);
    event TokensReleased(address beneficiary, uint256 amount);

    //0: Team_And_Advisors, 1: Community, 2: Investors, 3: Token_Launch_auction, 4: Liquidity
    enum VestingType {
        Team_And_Advisors,
        Community,
        Investors,
        Token_Launch_auction,
        Liquidity
    }

    struct BeneficiaryStruct {
        uint256 _start;
        uint256 _initial;
        uint256 _released;
        uint256 _balance;
        uint256 _vestingType;
        bool _exist;
        Ruleset[] _ruleset;
    }

    struct VestingTypeStruct {
        uint256 _initial;
        uint256 _allocatedInitial;
        Ruleset[] _ruleset;
    }

    struct Ruleset {
        uint256 _month;
        uint256 _value;//VestingTypeStruct: coefficient, BeneficiaryStruct: amount
    }

    mapping(address => BeneficiaryStruct) public _beneficiaryIndex;
    mapping(VestingType => VestingTypeStruct) public _vestingTypeIndex;
    address[] public _beneficiaries;
    address public _tokenAddress;

    constructor () {

        VestingTypeStruct storage teamVestingTypeStruct = _vestingTypeIndex[VestingType.Team_And_Advisors];
        teamVestingTypeStruct._initial = 40000000 ether;
        teamVestingTypeStruct._ruleset.push(Ruleset(5, 100));
        teamVestingTypeStruct._ruleset.push(Ruleset(11, 200));
        teamVestingTypeStruct._ruleset.push(Ruleset(17, 325));
        teamVestingTypeStruct._ruleset.push(Ruleset(1000, 500));

        VestingTypeStruct storage communityVestingTypeStruct = _vestingTypeIndex[VestingType.Community];
        communityVestingTypeStruct._initial = 10000000 ether;
        communityVestingTypeStruct._ruleset.push(Ruleset(5, 100));
        communityVestingTypeStruct._ruleset.push(Ruleset(11, 200));
        communityVestingTypeStruct._ruleset.push(Ruleset(17, 325));
        communityVestingTypeStruct._ruleset.push(Ruleset(1000, 500));

        VestingTypeStruct storage investorsVestingTypeStruct = _vestingTypeIndex[VestingType.Investors];
        investorsVestingTypeStruct._initial = 20000000 ether;
        investorsVestingTypeStruct._ruleset.push(Ruleset(5, 100));
        investorsVestingTypeStruct._ruleset.push(Ruleset(11, 200));
        investorsVestingTypeStruct._ruleset.push(Ruleset(17, 325));
        investorsVestingTypeStruct._ruleset.push(Ruleset(1000, 500));

        VestingTypeStruct storage auctionVestingTypeStruct = _vestingTypeIndex[VestingType.Token_Launch_auction];
        auctionVestingTypeStruct._initial = 50000000 ether;
        auctionVestingTypeStruct._ruleset.push(Ruleset(9, 100));
        auctionVestingTypeStruct._ruleset.push(Ruleset(1000, 200));

        VestingTypeStruct storage liquidityVestingTypeStruct = _vestingTypeIndex[VestingType.Liquidity];
        liquidityVestingTypeStruct._initial = 100000000 ether;
        liquidityVestingTypeStruct._ruleset.push(Ruleset(1, 120));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(2, 140));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(3, 160));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(4, 180));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(5, 200));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(6, 220));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(7, 240));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(8, 260));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(9, 280));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(10, 300));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(11, 320));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(12, 340));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(13, 360));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(14, 380));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(15, 400));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(16, 420));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(17, 440));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(18, 460));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(19, 480));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(20, 500));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(21, 520));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(22, 540));
        liquidityVestingTypeStruct._ruleset.push(Ruleset(1000, 550));
    }

    fallback() external {
        revert("ce01");
    }

    /**
     * @notice initialize contract.
     */
    function initialize(address tokenAddress) external onlyOwner {
        require(tokenAddress != address(0) , "CrowdLinearDistribution: the token address is not valid");
        _tokenAddress = tokenAddress;

        emit CrowdLinearDistributionInitialized(address(msg.sender));
    }
    
    function create(address beneficiary, uint256 start, uint8 vestingType, uint256 initial) external onlyOwner {
        require(_tokenAddress != address(0), "CrowdLinearDistribution: the token address is not valid");
        require(!_beneficiaryIndex[beneficiary]._exist, "CrowdLinearDistribution: beneficiary exists");
        require(vestingType >= 0 && vestingType < 5, "CrowdLinearDistribution: vestingType is not valid");
        require(initial > 0, "CrowdLinearDistribution: initial must be greater than zero");

        VestingTypeStruct storage vestingTypeStruct = _vestingTypeIndex[VestingType(vestingType)];
        require(initial + vestingTypeStruct._allocatedInitial <= vestingTypeStruct._initial, "CrowdLinearDistribution: Not enough token to distribute");

        _beneficiaries.push(beneficiary);
        BeneficiaryStruct storage beneficiaryStruct = _beneficiaryIndex[beneficiary];
        beneficiaryStruct._start = start;
        beneficiaryStruct._initial = initial;
        beneficiaryStruct._vestingType = vestingType;
        beneficiaryStruct._exist = true;
        for(uint i = 0; i < vestingTypeStruct._ruleset.length; i++) {
            Ruleset memory ruleset = vestingTypeStruct._ruleset[i];
            beneficiaryStruct._ruleset.push(Ruleset(ruleset._month, calculateAmount(ruleset._value, initial)));
        }
        beneficiaryStruct._balance = beneficiaryStruct._ruleset[vestingTypeStruct._ruleset.length - 1]._value;

        vestingTypeStruct._allocatedInitial = vestingTypeStruct._allocatedInitial + initial;

        emit CrowdLinearDistributionCreated(beneficiary);
    }

    /**
     * @notice Transfers vested tokens to beneficiary.
     */
    function release(address beneficiary) external {
        require(_tokenAddress != address(0), "CrowdLinearDistribution: token address not valid");
        uint256 unreleased = getReleasable(beneficiary);

        require(unreleased > 0, "CrowdLinearDistribution: releasable amount is zero");

        _beneficiaryIndex[beneficiary]._released = _beneficiaryIndex[beneficiary]._released + unreleased;
        _beneficiaryIndex[beneficiary]._balance = _beneficiaryIndex[beneficiary]._balance - unreleased;
        
        IERC20(_tokenAddress).transfer(beneficiary, unreleased);

        emit TokensReleased(beneficiary, unreleased);
    }
    
    function getBeneficiaries(uint256 vestingType) external view returns (address[] memory) {
        require(vestingType >= 0 && vestingType < 5, "CrowdLinearDistribution: vestingType is not valid");

        uint256 j = 0;
        address[] memory beneficiaries = new address[](_beneficiaries.length);

        for (uint256 i = 0; i < _beneficiaries.length; i++) {
            address beneficiary = _beneficiaries[i];
            if (_beneficiaryIndex[beneficiary]._vestingType == vestingType) {
                beneficiaries[j] = beneficiary;
                j++;
            }

        }
        return beneficiaries;
    }

    function getVestingType(address beneficiary) external view returns (uint256) {
        require(_beneficiaryIndex[beneficiary]._exist, "CrowdLinearDistribution: beneficiary does not exist");

        return _beneficiaryIndex[beneficiary]._vestingType;
    }

    function getBeneficiary(address beneficiary) external view returns (BeneficiaryStruct memory) {
        require(_beneficiaryIndex[beneficiary]._exist, "CrowdLinearDistribution: beneficiary does not exist");

        return _beneficiaryIndex[beneficiary];
    }

    function getInitial(address beneficiary) external view returns (uint256) {
        require(_beneficiaryIndex[beneficiary]._exist, "CrowdLinearDistribution: beneficiary does not exist");

        return _beneficiaryIndex[beneficiary]._initial;
    }

    function getStart(address beneficiary) external view returns (uint256) {
        require(_beneficiaryIndex[beneficiary]._exist, "CrowdLinearDistribution: beneficiary does not exist");

        return _beneficiaryIndex[beneficiary]._start;
    }

    function getTotal(address beneficiary) external view returns (uint256) {
        require(_beneficiaryIndex[beneficiary]._exist, "CrowdLinearDistribution: beneficiary does not exist");

        return _beneficiaryIndex[beneficiary]._balance + _beneficiaryIndex[beneficiary]._released;
    }

    function getVested(address beneficiary) external view returns (uint256) {
        require(_beneficiaryIndex[beneficiary]._exist, "CrowdLinearDistribution: beneficiary does not exist");

        return _vestedAmount(beneficiary);
    }

    function getReleased(address beneficiary) external view returns (uint256) {
        require(_beneficiaryIndex[beneficiary]._exist, "CrowdLinearDistribution: beneficiary does not exist");

        return _beneficiaryIndex[beneficiary]._released;
    }
    
    function getBalance(address beneficiary) external view returns (uint256) {
        require(_beneficiaryIndex[beneficiary]._exist, "CrowdLinearDistribution: beneficiary does not exist");

        return uint256(_beneficiaryIndex[beneficiary]._balance);
    }

    function getVestingTypeStruct(uint256 vestingType) external view returns (VestingTypeStruct memory) {
        require(vestingType >= 0 && vestingType < 5, "CrowdLinearDistribution: vestingType is not valid");

        return _vestingTypeIndex[VestingType(vestingType)];
    }

    /**
     * @notice Returns the releasable amount of token for the given beneficiary
     */
    function getReleasable(address beneficiary) public view returns (uint256) {
        require(_beneficiaryIndex[beneficiary]._exist, "CrowdLinearDistribution: beneficiary does not exist");

        return _vestedAmount(beneficiary) - _beneficiaryIndex[beneficiary]._released;
    }

    /**
     * @dev Calculates the amount that has already vested.
     */
    function _vestedAmount(address beneficiary) private view returns (uint256) {
        BeneficiaryStruct storage tokenVesting = _beneficiaryIndex[beneficiary];
        uint256 totalBalance = tokenVesting._balance + tokenVesting._released;

        if (block.timestamp < tokenVesting._start)
            return 0;

        uint256 _months = BokkyPooBahsDateTimeLibrary.diffMonths(tokenVesting._start, block.timestamp);

        if (_months < 1)
            return tokenVesting._initial;

        uint256 result = 0;
        for (uint256 i = 0; i < tokenVesting._ruleset.length; i++) {
            Ruleset memory ruleset = tokenVesting._ruleset[i];
            if (_months <= ruleset._month) {
                result = ruleset._value;
                break;
            }
        }

        return (result >= totalBalance) ? totalBalance : result;
    }

    function calculateAmount(uint coefficient, uint beneficiaryInitial) private pure returns (uint) {
        return (coefficient * beneficiaryInitial) / (10 ** 2);
    }

}

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

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

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

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

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

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

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

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

pragma solidity ^0.8.10;

// ----------------------------------------------------------------------------
// BokkyPooBah's DateTime Library v1.01
//
// A gas-efficient Solidity date and time library
//
// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary
//
// Tested date range 1970/01/01 to 2345/12/31
//
// Conventions:
// Unit      | Range         | Notes
// :-------- |:-------------:|:-----
// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC
// year      | 1970 ... 2345 |
// month     | 1 ... 12      |
// day       | 1 ... 31      |
// hour      | 0 ... 23      |
// minute    | 0 ... 59      |
// second    | 0 ... 59      |
// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday
//
//
// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.
// ----------------------------------------------------------------------------

library BokkyPooBahsDateTimeLibrary {

    uint constant SECONDS_PER_DAY = 24 * 60 * 60;
    int constant OFFSET19700101 = 2440588;

    // ------------------------------------------------------------------------
    // Calculate year/month/day from the number of days since 1970/01/01 using
    // the date conversion algorithm from
    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php
    // and adding the offset 2440588 so that 1970/01/01 is day 0
    //
    // int L = days + 68569 + offset
    // int N = 4 * L / 146097
    // L = L - (146097 * N + 3) / 4
    // year = 4000 * (L + 1) / 1461001
    // L = L - 1461 * year / 4 + 31
    // month = 80 * L / 2447
    // dd = L - 2447 * month / 80
    // L = month / 11
    // month = month + 2 - 12 * L
    // year = 100 * (N - 49) + year + L
    // ------------------------------------------------------------------------
    function _daysToDate(uint _days) internal pure returns (uint year, uint month, uint day) {
        int __days = int(_days);

        int L = __days + 68569 + OFFSET19700101;
        int N = 4 * L / 146097;
        L = L - (146097 * N + 3) / 4;
        int _year = 4000 * (L + 1) / 1461001;
        L = L - 1461 * _year / 4 + 31;
        int _month = 80 * L / 2447;
        int _day = L - 2447 * _month / 80;
        L = _month / 11;
        _month = _month + 2 - 12 * L;
        _year = 100 * (N - 49) + _year + L;

        year = uint(_year);
        month = uint(_month);
        day = uint(_day);
    }

    function diffMonths(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _months) {
        require(fromTimestamp <= toTimestamp, 'BP03');
        (uint fromYear, uint fromMonth,) = _daysToDate(fromTimestamp / SECONDS_PER_DAY);
        (uint toYear, uint toMonth,) = _daysToDate(toTimestamp / SECONDS_PER_DAY);
        _months = toYear * 12 + toMonth - fromYear * 12 - fromMonth;
    }

}

File 4 of 4 : Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;
/**
 * @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 private _owner;
    address private _pendingOwner;

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

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

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

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

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

    /**
     * @dev Allows the current owner to set the pendingOwner address.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _pendingOwner = newOwner;
    }

    /**
     * @dev Allows the pendingOwner address to finalize the transfer.
     */
    function claimOwnership() public {
        require(msg.sender == _pendingOwner, "ce31");
        _owner = _pendingOwner;
        _pendingOwner = address(0);
        emit OwnershipTransferred(_owner, _pendingOwner);
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"beneficiary","type":"address"}],"name":"CrowdLinearDistributionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"}],"name":"CrowdLinearDistributionInitialized","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":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensReleased","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_beneficiaries","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_beneficiaryIndex","outputs":[{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_initial","type":"uint256"},{"internalType":"uint256","name":"_released","type":"uint256"},{"internalType":"uint256","name":"_balance","type":"uint256"},{"internalType":"uint256","name":"_vestingType","type":"uint256"},{"internalType":"bool","name":"_exist","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum CrowdLinearDistribution.VestingType","name":"","type":"uint8"}],"name":"_vestingTypeIndex","outputs":[{"internalType":"uint256","name":"_initial","type":"uint256"},{"internalType":"uint256","name":"_allocatedInitial","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint8","name":"vestingType","type":"uint8"},{"internalType":"uint256","name":"initial","type":"uint256"}],"name":"create","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"vestingType","type":"uint256"}],"name":"getBeneficiaries","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"getBeneficiary","outputs":[{"components":[{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_initial","type":"uint256"},{"internalType":"uint256","name":"_released","type":"uint256"},{"internalType":"uint256","name":"_balance","type":"uint256"},{"internalType":"uint256","name":"_vestingType","type":"uint256"},{"internalType":"bool","name":"_exist","type":"bool"},{"components":[{"internalType":"uint256","name":"_month","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"internalType":"struct CrowdLinearDistribution.Ruleset[]","name":"_ruleset","type":"tuple[]"}],"internalType":"struct CrowdLinearDistribution.BeneficiaryStruct","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"getInitial","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"getReleasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"getReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"getStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"getTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"getVested","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"getVestingType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"vestingType","type":"uint256"}],"name":"getVestingTypeStruct","outputs":[{"components":[{"internalType":"uint256","name":"_initial","type":"uint256"},{"internalType":"uint256","name":"_allocatedInitial","type":"uint256"},{"components":[{"internalType":"uint256","name":"_month","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"internalType":"struct CrowdLinearDistribution.Ruleset[]","name":"_ruleset","type":"tuple[]"}],"internalType":"struct CrowdLinearDistribution.VestingTypeStruct","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50600080546001600160a01b03191633178155600381808152602080820192909252604090810160009081206a211654585005212800000081558251808401845260058152606481860190815260028084018054600180820183558288528988209551918402860191825593519084015586518088018852600b815260c8818a01908152825480860184558389529151918402860191825551908401558651808801885260118152610145818a019081528254808601845583895291519184028601918255519084015586518088019097526103e887526101f497870197885280548084018255908652955195029091019384559351928401929092559092509060039082908152602080820192909252604090810160009081206a084595161401484a00000081558251808401845260058152606481860190815260028084018054600180820183558288528988209551918402860191825593519084015586518088018852600b815260c8818a01908152825480860184558389529151918402860191825551908401558651808801885260118152610145818a019081528254808601845583895291519184028601918255519084015586518088019097526103e887526101f4978701978852805480840182559086529551958102909201948555945193909401929092559092509060039082908152602080820192909252604090810160009081206a108b2a2c2802909400000081558251808401845260058152606481860190815260028084018054600180820183558288528988209551918402860191825593519084015586518088018852600b815260c8818a01908152825480860184558389529151918402860191825551908401558651808801885260118152610145818a019081528254808601845583895291519184028601918255519084015586518088019097526103e887526101f4978701978852805480840182559086529551950290910193845593519290930191909155909150600381818152602080820192909252604090810160009081206a295be96e6406697200000081558251808401845260098152606481860190815260028084018054600180820183558288528988209551918402860191825593519084015586518088019097526103e8875260c897870197885280548084018255908652955195029091019384559351929093019190915590915060038160048152602080820192909252604090810160009081206a52b7d2dcc80cd2e4000000815582518084018452600180825260788287019081526002938401805480840182558187528887209451908602850190815591519183019190915585518087018752848152608c81890190815282548085018455838852915191860285019182555190830155855180870187526003815260a081890190815282548085018455838852915191860285019182555190830155855180870187526004815260b481890190815282548085018455838852915191860285019182555190830155855180870187526005815260c881890190815282548085018455838852915191860285019182555190830155855180870187526006815260dc81890190815282548085018455838852915191860285019182555190830155855180870187526007815260f08189019081528254808501845583885291519186028501918255519083015585518087018752600881526101048189019081528254808501845583885291519186028501918255519083015585518087018752600981526101188189019081528254808501845583885291519186028501918255519083015585518087018752600a815261012c8189019081528254808501845583885291519186028501918255519083015585518087018752600b81526101408189019081528254808501845583885291519186028501918255519083015585518087018752600c81526101548189019081528254808501845583885291519186028501918255519083015585518087018752600d81526101688189019081528254808501845583885291519186028501918255519083015585518087018752600e815261017c8189019081528254808501845583885291519186028501918255519083015585518087018752600f81526101908189019081528254808501845583885291519186028501918255519083015585518087018752601081526101a48189019081528254808501845583885291519186028501918255519083015585518087018752601181526101b88189019081528254808501845583885291519186028501918255519083015585518087018752601281526101cc8189019081528254808501845583885291519186028501918255519083015585518087018752601381526101e08189019081528254808501845583885291519186028501918255519083015585518087018752601481526101f481890190815282548085018455838852915191860285019182555190830155855180870187526015815261020881890190815282548085018455838852915191860285019182555190830155855180870187526016815261021c8189019081528254808501845583885291519186028501918255519083015585518087019096526103e88652610226968601968752805480830182559452935192909102019081559151910155506107c99350505050565b611f3d806107d86000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c80638da5cb5b116100d8578063dec8f52e1161008c578063ee85f5fe11610066578063ee85f5fe14610410578063f2fde38b14610423578063f8b2cb4f1461043657610182565b8063dec8f52e146103d9578063e30c3978146103ec578063ebb6dad8146103fd57610182565b8063b4d11f35116100bd578063b4d11f35146103a0578063b8d5df95146103b3578063c4d66de8146103c657610182565b80638da5cb5b146103535780639c51e9b61461036457610182565b80634e71e0c81161013a578063543fcf0311610114578063543fcf03146102f5578063606b162314610320578063783804d91461033357610182565b80634e71e0c8146102ba578063505a1b31146102c25780635421213e146102e257610182565b80631fe8430a1161016b5780631fe8430a146101fd5780632ef105511461022357806335c5c0141461029a57610182565b806309a5c10a146101d557806319165587146101ea575b60405162461bcd60e51b81526004016101cc9060208082526004908201527f6365303100000000000000000000000000000000000000000000000000000000604082015260600190565b60405180910390fd5b6101e86101e3366004611b02565b610449565b005b6101e86101f8366004611b4e565b61092f565b61021061020b366004611b4e565b610b78565b6040519081526020015b60405180910390f35b61026b610231366004611b4e565b6002602081905260009182526040909120805460018201549282015460038301546004840154600590940154929493919290919060ff1686565b6040805196875260208701959095529385019290925260608401526080830152151560a082015260c00161021a565b6102ad6102a8366004611b69565b610c1e565b60405161021a9190611bc8565b6101e8610d8a565b6102d56102d0366004611b4e565b610e44565b60405161021a9190611bff565b6102106102f0366004611b4e565b610fd0565b600554610308906001600160a01b031681565b6040516001600160a01b03909116815260200161021a565b61021061032e366004611b4e565b61108d565b610346610341366004611b69565b611130565b60405161021a9190611c59565b6000546001600160a01b0316610308565b61038b610372366004611ca6565b6003602052600090815260409020805460019091015482565b6040805192835260208301919091520161021a565b6102106103ae366004611b4e565b611290565b6103086103c1366004611b69565b611337565b6101e86103d4366004611b4e565b611361565b6102106103e7366004611b4e565b61147e565b6001546001600160a01b0316610308565b61021061040b366004611b4e565b61150e565b61021061041e366004611b4e565b6115c4565b6101e8610431366004611b4e565b61166a565b610210610444366004611b4e565b6116dc565b6000546001600160a01b0316331461048c5760405162461bcd60e51b81526004016101cc906020808252600490820152630636533360e41b604082015260600190565b6005546001600160a01b031661050a5760405162461bcd60e51b815260206004820152603760248201527f43726f77644c696e656172446973747269627574696f6e3a2074686520746f6b60448201527f656e2061646472657373206973206e6f742076616c696400000000000000000060648201526084016101cc565b6001600160a01b03841660009081526002602052604090206005015460ff161561059c5760405162461bcd60e51b815260206004820152602b60248201527f43726f77644c696e656172446973747269627574696f6e3a2062656e6566696360448201527f696172792065786973747300000000000000000000000000000000000000000060648201526084016101cc565b60058260ff16106106095760405162461bcd60e51b815260206004820152603160248201527f43726f77644c696e656172446973747269627574696f6e3a2076657374696e67604482015270151e5c19481a5cc81b9bdd081d985b1a59607a1b60648201526084016101cc565b6000811161067f5760405162461bcd60e51b815260206004820152603a60248201527f43726f77644c696e656172446973747269627574696f6e3a20696e697469616c60448201527f206d7573742062652067726561746572207468616e207a65726f00000000000060648201526084016101cc565b6000600360008460ff16600481111561069a5761069a611cc7565b60048111156106ab576106ab611cc7565b60048111156106bc576106bc611cc7565b8152602001908152602001600020905080600001548160010154836106e19190611cf3565b11156107555760405162461bcd60e51b815260206004820152603760248201527f43726f77644c696e656172446973747269627574696f6e3a204e6f7420656e6f60448201527f75676820746f6b656e20746f206469737472696275746500000000000000000060648201526084016101cc565b60048054600180820183557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038916908117909155600090815260026020526040812087815580830186905560ff87169381019390935560058301805460ff19169092179091555b600283015481101561089557600083600201828154811061080357610803611d0b565b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050905082600601604051806040016040528083600001518152602001610859846020015189611782565b9052815460018181018455600093845260209384902083516002909302019182559290910151910155508061088d81611d21565b9150506107e0565b50600282015460068201906108ac90600190611d3c565b815481106108bc576108bc611d0b565b90600052602060002090600202016001015481600301819055508282600101546108e69190611cf3565b60018301556040516001600160a01b03871681527f2e26b4969e053f8ebba0173dc26d414fc2ce80f756869e75e170409cfda15ef09060200160405180910390a1505050505050565b6005546001600160a01b03166109ad5760405162461bcd60e51b815260206004820152603060248201527f43726f77644c696e656172446973747269627574696f6e3a20746f6b656e206160448201527f646472657373206e6f742076616c69640000000000000000000000000000000060648201526084016101cc565b60006109b882610fd0565b905060008111610a305760405162461bcd60e51b815260206004820152603260248201527f43726f77644c696e656172446973747269627574696f6e3a2072656c6561736160448201527f626c6520616d6f756e74206973207a65726f000000000000000000000000000060648201526084016101cc565b6001600160a01b03821660009081526002602081905260409091200154610a58908290611cf3565b6001600160a01b03831660009081526002602081905260409091209081019190915560030154610a89908290611d3c565b6001600160a01b03838116600081815260026020526040908190206003019390935560055492517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101919091526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b319190611d53565b50604080516001600160a01b0384168152602081018390527fc7798891864187665ac6dd119286e44ec13f014527aeeb2b8eb3fd413df93179910160405180910390a15050565b6001600160a01b03811660009081526002602052604081206005015460ff16610bff5760405162461bcd60e51b815260206004820152603360248201527f43726f77644c696e656172446973747269627574696f6e3a2062656e656669636044820152721a585c9e48191bd95cc81b9bdd08195e1a5cdd606a1b60648201526084016101cc565b506001600160a01b031660009081526002602052604090206001015490565b610c4260405180606001604052806000815260200160008152602001606081525090565b60058210610cac5760405162461bcd60e51b815260206004820152603160248201527f43726f77644c696e656172446973747269627574696f6e3a2076657374696e67604482015270151e5c19481a5cc81b9bdd081d985b1a59607a1b60648201526084016101cc565b60036000836004811115610cc257610cc2611cc7565b6004811115610cd357610cd3611cc7565b6004811115610ce457610ce4611cc7565b8152602001908152602001600020604051806060016040529081600082015481526020016001820154815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015610d7c57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610d36565b505050915250909392505050565b6001546001600160a01b03163314610de65760405162461bcd60e51b81526004016101cc9060208082526004908201527f6365333100000000000000000000000000000000000000000000000000000000604082015260600190565b60018054600080546001600160a01b03831673ffffffffffffffffffffffffffffffffffffffff199182168117835592169092556040517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b610e866040518060e001604052806000815260200160008152602001600081526020016000815260200160008152602001600015158152602001606081525090565b6001600160a01b03821660009081526002602052604090206005015460ff16610f0d5760405162461bcd60e51b815260206004820152603360248201527f43726f77644c696e656172446973747269627574696f6e3a2062656e656669636044820152721a585c9e48191bd95cc81b9bdd08195e1a5cdd606a1b60648201526084016101cc565b6001600160a01b0382166000908152600260208181526040808420815160e0810183528154815260018201548185015293810154848301526003810154606085015260048101546080850152600581015460ff16151560a08501526006810180548351818602810186019094528084529495919460c08701949192909184018215610d7c57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610d36565b6001600160a01b03811660009081526002602052604081206005015460ff166110575760405162461bcd60e51b815260206004820152603360248201527f43726f77644c696e656172446973747269627574696f6e3a2062656e656669636044820152721a585c9e48191bd95cc81b9bdd08195e1a5cdd606a1b60648201526084016101cc565b6001600160a01b0382166000908152600260208190526040909120015461107d836117a1565b6110879190611d3c565b92915050565b6001600160a01b03811660009081526002602052604081206005015460ff166111145760405162461bcd60e51b815260206004820152603360248201527f43726f77644c696e656172446973747269627574696f6e3a2062656e656669636044820152721a585c9e48191bd95cc81b9bdd08195e1a5cdd606a1b60648201526084016101cc565b506001600160a01b031660009081526002602052604090205490565b60606005821061119c5760405162461bcd60e51b815260206004820152603160248201527f43726f77644c696e656172446973747269627574696f6e3a2076657374696e67604482015270151e5c19481a5cc81b9bdd081d985b1a59607a1b60648201526084016101cc565b600454600090819067ffffffffffffffff8111156111bc576111bc611d75565b6040519080825280602002602001820160405280156111e5578160200160208202803683370190505b50905060005b6004548110156112885760006004828154811061120a5761120a611d0b565b60009182526020808320909101546001600160a01b03168083526002909152604090912060040154909150861415611275578083858151811061124f5761124f611d0b565b6001600160a01b03909216602092830291909101909101528361127181611d21565b9450505b508061128081611d21565b9150506111eb565b509392505050565b6001600160a01b03811660009081526002602052604081206005015460ff166113175760405162461bcd60e51b815260206004820152603360248201527f43726f77644c696e656172446973747269627574696f6e3a2062656e656669636044820152721a585c9e48191bd95cc81b9bdd08195e1a5cdd606a1b60648201526084016101cc565b506001600160a01b03166000908152600260208190526040909120015490565b6004818154811061134757600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146113a45760405162461bcd60e51b81526004016101cc906020808252600490820152630636533360e41b604082015260600190565b6001600160a01b0381166114205760405162461bcd60e51b815260206004820152603760248201527f43726f77644c696e656172446973747269627574696f6e3a2074686520746f6b60448201527f656e2061646472657373206973206e6f742076616c696400000000000000000060648201526084016101cc565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790556040513381527f0e5e8ebbaabfbdc8a125b2072d7f8a64c4cf8d2c7eb3d4a0f5f919544c26947f9060200160405180910390a150565b6001600160a01b03811660009081526002602052604081206005015460ff166115055760405162461bcd60e51b815260206004820152603360248201527f43726f77644c696e656172446973747269627574696f6e3a2062656e656669636044820152721a585c9e48191bd95cc81b9bdd08195e1a5cdd606a1b60648201526084016101cc565b611087826117a1565b6001600160a01b03811660009081526002602052604081206005015460ff166115955760405162461bcd60e51b815260206004820152603360248201527f43726f77644c696e656172446973747269627574696f6e3a2062656e656669636044820152721a585c9e48191bd95cc81b9bdd08195e1a5cdd606a1b60648201526084016101cc565b6001600160a01b0382166000908152600260208190526040909120908101546003909101546110879190611cf3565b6001600160a01b03811660009081526002602052604081206005015460ff1661164b5760405162461bcd60e51b815260206004820152603360248201527f43726f77644c696e656172446973747269627574696f6e3a2062656e656669636044820152721a585c9e48191bd95cc81b9bdd08195e1a5cdd606a1b60648201526084016101cc565b506001600160a01b031660009081526002602052604090206004015490565b6000546001600160a01b031633146116ad5760405162461bcd60e51b81526004016101cc906020808252600490820152630636533360e41b604082015260600190565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526002602052604081206005015460ff166117635760405162461bcd60e51b815260206004820152603360248201527f43726f77644c696e656172446973747269627574696f6e3a2062656e656669636044820152721a585c9e48191bd95cc81b9bdd08195e1a5cdd606a1b60648201526084016101cc565b506001600160a01b031660009081526002602052604090206003015490565b600060646117908385611d8b565b61179a9190611dc0565b9392505050565b6001600160a01b0381166000908152600260208190526040822090810154600382015483916117cf91611cf3565b82549091504210156117e5575060009392505050565b60006117f58360000154426118a6565b9050600181101561180c5750506001015492915050565b6000805b600685015481101561188b57600085600601828154811061183357611833611d0b565b9060005260206000209060020201604051806040016040529081600082015481526020016001820154815250509050806000015184116118785760200151915061188b565b508061188381611d21565b915050611810565b508281101561189a578061189c565b825b9695505050505050565b6000818311156118fa5760405162461bcd60e51b81526004016101cc9060208082526004908201527f4250303300000000000000000000000000000000000000000000000000000000604082015260600190565b60008061191261190d6201518087611dc0565b611972565b50909250905060008061192b61190d6201518088611dc0565b5090925090508261193d85600c611d8b565b8261194985600c611d8b565b6119539190611cf3565b61195d9190611d3c565b6119679190611d3c565b979650505050505050565b60008080838162253d8c6119898362010bd9611dd4565b6119939190611dd4565b9050600062023ab16119a6836004611e13565b6119b09190611e9a565b905060046119c18262023ab1611e13565b6119cc906003611dd4565b6119d69190611e9a565b6119e09083611ec8565b9150600062164b096119f3846001611dd4565b6119ff90610fa0611e13565b611a099190611e9a565b90506004611a19826105b5611e13565b611a239190611e9a565b611a2d9084611ec8565b611a3890601f611dd4565b9250600061098f611a4a856050611e13565b611a549190611e9a565b905060006050611a668361098f611e13565b611a709190611e9a565b611a7a9086611ec8565b9050611a87600b83611e9a565b9450611a9485600c611e13565b611a9f836002611dd4565b611aa99190611ec8565b91508483611ab8603187611ec8565b611ac3906064611e13565b611acd9190611dd4565b611ad79190611dd4565b9a919950975095505050505050565b80356001600160a01b0381168114611afd57600080fd5b919050565b60008060008060808587031215611b1857600080fd5b611b2185611ae6565b935060208501359250604085013560ff81168114611b3e57600080fd5b9396929550929360600135925050565b600060208284031215611b6057600080fd5b61179a82611ae6565b600060208284031215611b7b57600080fd5b5035919050565b600081518084526020808501945080840160005b83811015611bbd578151805188528301518388015260409096019590820190600101611b96565b509495945050505050565b60208152815160208201526020820151604082015260006040830151606080840152611bf76080840182611b82565b949350505050565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a0820151151560c0820152600060c083015160e080840152611bf7610100840182611b82565b6020808252825182820181905260009190848201906040850190845b81811015611c9a5783516001600160a01b031683529284019291840191600101611c75565b50909695505050505050565b600060208284031215611cb857600080fd5b81356005811061179a57600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115611d0657611d06611cdd565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611d3557611d35611cdd565b5060010190565b600082821015611d4e57611d4e611cdd565b500390565b600060208284031215611d6557600080fd5b8151801515811461179a57600080fd5b634e487b7160e01b600052604160045260246000fd5b6000816000190483118215151615611da557611da5611cdd565b500290565b634e487b7160e01b600052601260045260246000fd5b600082611dcf57611dcf611daa565b500490565b6000808212826001600160ff1b0303841381151615611df557611df5611cdd565b82600160ff1b038412811615611e0d57611e0d611cdd565b50500190565b60006001600160ff1b03600084136000841385830485118282161615611e3b57611e3b611cdd565b600160ff1b6000871286820588128184161615611e5a57611e5a611cdd565b60008712925087820587128484161615611e7657611e76611cdd565b87850587128184161615611e8c57611e8c611cdd565b505050929093029392505050565b600082611ea957611ea9611daa565b600160ff1b821460001984141615611ec357611ec3611cdd565b500590565b600080831283600160ff1b01831281151615611ee657611ee6611cdd565b836001600160ff1b03018313811615611f0157611f01611cdd565b5050039056fea26469706673582212200980fc808a979253e9e24d68b6e6ee9029d162ddfa163488e0a9129230629cde64736f6c634300080a0033

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.