Contract 0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x10ae2c3b337a5206c53e1d37f0968261e5896a73eeec372fe6101c5a0c901f39Approve255214512023-01-28 11:43:283 days 18 hrs ago0x823da5f19752e26468575efc6527409e46dce785 IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.001272727527.5
0xee8a596c7ddc94abccb2a00fa1afbdadcb86c5b95ac920795e28ba657a067fbbTransfer252745392023-01-22 15:48:089 days 14 hrs ago0x4493632667be11e12a8b6a07f00bc0378ef8a10e IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.001418147527.5
0xa669bc12b62c0f92366d01a20ddee7aa9f9501828336eb8768a008ccd0613fb9Approve252238132023-01-21 11:06:2210 days 19 hrs ago0xf89129a7aec1b72f08b480d5d2b07def3f577700 IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.001257687 27
0x5f2cfe5d52f81311463024f25a9ff4734c5f6523b387577b4ccedf71be52a996Approve252237492023-01-21 11:04:1210 days 19 hrs ago0xf89129a7aec1b72f08b480d5d2b07def3f577700 IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.001164525 25.000000001
0xd760eb35e6475acd21a4fee1b97051faab13c2461a2822b7545b3cf853e3402cApprove250867992023-01-18 5:08:5914 days 1 hr ago0x01291849cc904161603c1c60ff86658ad7eadb8d IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.00115672525
0x1faa0b6204d933db888689b5541410bd4dd410e309b767212777399b44a66db4Approve250332342023-01-16 22:38:3515 days 7 hrs ago0xe59720416bf94eb34c296e9d7e3d2bf1e18a649f IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.0007742505 26.5
0x7b7b50a513e2e3abe9817df974432080bde27eda75276abc0c9f7f76193dc087Approve247620872023-01-10 14:03:1221 days 16 hrs ago0xe59720416bf94eb34c296e9d7e3d2bf1e18a649f IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.0012274005 26.5
0xaadac5f1915c944832c88920a8329e65b41133816d0da2faf8c9b2992753e775Approve247005702023-01-09 3:08:2523 days 3 hrs ago0x55546d32945b0ca05b936b660499682fddbc4281 IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.0012270825 26.5
0xdbbdbaa934aef81f641b899fa480d5476b7c03470c358ad50eb17b4d25785ff4Approve233270872022-12-07 11:52:4655 days 18 hrs ago0x0cad9c270745dd0ce3ba743914a7b3192530ec23 IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.001239798297 26.615965689
0x6a17c860aa0727572407179e92b9a165fe4bb175dcbf6ec18f7c637540070bbcApprove232823912022-12-06 10:25:5156 days 19 hrs ago0xc21b7269270da2778f9fec6b957e5b261521c0f7 IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.0012343965 26.5
0x59b9f67a67c2580362e6248843567de7e39328ab9ed254bc5d7866205f021782Approve232263382022-12-05 2:12:3858 days 4 hrs ago0x3f6fc896437f83224b1f1131dc57fd5fb772179b IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.0012343965 26.5
0x6e9b8f0fa88c4741be5ae0129767f9dcc74846096a36205ba2de7f9f2e788fadApprove231200532022-12-02 13:19:3060 days 17 hrs ago0x753085fa4865c994f3df5903fe388d8123c48c18 IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.0012343965 26.5
0x1f51835ba0c0ea9881a8e352cb831ad6abda85088d4300e534812be91936e32cApprove229564292022-11-28 16:28:5864 days 13 hrs ago0xd733342b55d3d8f49f1ca5cc7c10ce8550615dfe IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.001249551442 26.825346
0x577782ad295a0ea7d9ffd61080ad4ab8aadd425423a30a1bf91e25354926ad30Approve227365102022-11-23 10:26:1069 days 19 hrs ago0x3ced6bb51e158d7af066f5c24d926046f71059fe IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.00125489214 26.94
0xb4314434819118ec492e640e4b54fae7eecc7ae460b9e959a80e9bdb86244502Approve225352912022-11-18 14:31:4974 days 15 hrs ago0x55546d32945b0ca05b936b660499682fddbc4281 IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.0012343965 26.5
0x918b5f6298e4ff1e1d8d9c9fdc6dd288777ed631165c21aa783cbd977f37ba5aApprove224434422022-11-16 9:06:1876 days 21 hrs ago0x3ce5ae5e6762d568fcddb5beef8b9b666cba29bb IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.00116452525
0xb4c9ddfa6298897edb0cb3dbddb274dde91f7f47a192a2fda0301b8eacf6ef9dTransfer224417332022-11-16 8:06:4176 days 22 hrs ago0x6473400c9ef8415ee712421f8f741fcc3825f479 IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.00128922525
0xc4863e91708836867066ad3c1df8fb719e87f58631bad6026d0d4352014940a9Approve217689362022-10-31 9:48:1492 days 20 hrs ago0x16929cf71f6f39dad2facb1c918b6b136f33204a IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.0012343965 26.5
0xb4706b32e670ee47ad915268204599ba94d30c4eac341e48c73ddf70efd5fe92Approve216844982022-10-29 9:52:2994 days 20 hrs ago0xc467249913527568c6cbdf7baa47315f37e50bd1 IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.0012343965 26.5
0x9b0e3193d607b252f61261bb3f57a4372b6c83e297bb384ae2e3d400dca77900Transfer209540632022-10-12 3:58:59112 days 2 hrs ago0x4db69bdd87c1120c4ed5b2f683c2ff7ec01443d2 IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.000899640926.1
0x223551ab1f62520663435415c3c4a58a7c9177b76da673789395ff28844eecd0Transfer208707182022-10-10 4:18:40114 days 2 hrs ago0x67b6a27f239da0f6c52c6e577c5c1a2c1313041a IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.000942804705 27.35225
0x7ff951cc7bfc97da2430520d8bade896635888f94234e8e22379cd924b4bf9c8Approve208627612022-10-09 23:40:42114 days 6 hrs ago0xeedf97f1a86303e1fa17d58c5b1159786397bed8 IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.001274095157 27.35225
0x50360454c5a101bef4ca34ae21f83e835ae6f58962a3300b9b8344433ca2f6b8Approve207466552022-10-07 4:42:41117 days 1 hr ago0x90b1faacb9d1207173e52af02264953982f91cda IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.001280977527.5
0x20b76e1bd4a11c46901aec1f03696adb6522dc5f1cd55a936ba5c63b76b870a3Approve207425212022-10-07 2:21:48117 days 3 hrs ago0xd17e01f38f53060a7c09e94bccf87f7040acfc7d IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.0012343965 26.5
0x6463ac7f047b632b6be70626656429565f5092b88e2def0bec8a2cefac980827Transfer206411222022-10-04 16:03:03119 days 14 hrs ago0x66827e508ad36ef72107afaf4a7b275b2c0d231d IN  0xf7dd4d8142c1fa34c64d8c22fcbba42208cc65eb0 AVAX0.000924642851 26.825346
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Token420

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2022-03-30
*/

pragma solidity 0.8.9;

// SPDX-License-Identifier: MIT

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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

/**
 *  @title  DAO Manager Interface
 *
 *  @author 420 DAO Team
 *
 *  @notice Interface of `DaoManager` to be used commonly by multiple other smart contracts.
 *  @notice This interface includes function to get these global properties of the DAO:
 *          - Admin address of the DAO
 *          - Current day
 *          - New tokens emission termination
 *          - Migration status
 */
interface IDaoManager {
    /**
     *  @notice Get the the admin address of the DAO.
     */
    function admin() external view returns (address);

    /**
     *  @notice Get the current day of the DAO.
     */
    function day() external view returns (uint256);

    /**
     *  @notice Check if the DAO has stopped emitting new tokens.
     *
     *  @dev    Once the total supply of Token 420 surpasses the maximum cap, the DAO will stop minting or emitting any
     *          new tokens. Thenceforth, users won't be able to deposit or receive staking rewards anymore.
     */
    function emissionTerminated() external view returns (bool);

    /**
     *  @dev    In order to migrate the DAO system, two stages must be taking place sequentially:
     *          1. Admin switches the DAO state from normal to preparative. The entire community can notice it is the
     *          last day running on the current system as the function `isGoingToMigrate()` will be returning true.
     *          2. When that last auction is ended, the DAO state will be switched from preparative to migrated and the
     *          current system will be frozen permanently. Every method on the old DAO will be blocked and replaced by
     *          new ones on a new DAO with one exception which is the function `withdraw()` of `AuctionManager` can
     *          still be called by users to collect the remaining tokens from ended auctions.
     */

    /**
     *  @notice Check if the DAO is preparing for migration.
     */
    function isGoingToMigrate() external view returns (bool);

    /**
     *  @notice Check if the migration has been done and DAO is blocked permanently.
     */
    function isBlockedForMigration() external view returns (bool);

}

/**
 *  @title  Constant
 *
 *  @author 420 DAO Team
 *
 *  @notice This library provides most of constants used in smart contracts among the project.
 */
library Constant {
    /**
     *  @notice Refer to how divisible one token 420 or s420 can be.
     */
    uint8   internal constant TOKEN_DECIMALS = 18;
    uint256 internal constant TOKEN_SCALE = 10**TOKEN_DECIMALS;

    /**
     *  @notice Once total supply surpassed this threshold, auction will stop permanently.
     *          The threshold is 420 million tokens.
     */
    uint256 internal constant TOKEN_MAX_SUPPLY_THRESHOLD = 420000000 * TOKEN_SCALE;

    /**
     *  @notice Cash come to the Treasury are split as following:
     *          - Asset Fund:     50%
     *          - Insurance Fund: 30%
     *          - Operation Fund: 20%
     */
    uint256 internal constant TREASURY_PERCENTAGE_ASSET     = 50;
    uint256 internal constant TREASURY_PERCENTAGE_INSURANCE = 30;

    /**
     *  @notice Tokens come to the Mirror Pool are split as following:
     *          - Development & Marketing: 30%
     *          - Early Supporters:        10%
     *          - Reservation:             60%
     */
    uint256 internal constant MIRROR_PERCENTAGE_EARLY_SUPPORTERS = 10;
    uint256 internal constant MIRROR_PERCENTAGE_RESERVATION      = 60;

    /**
     *  @notice Formula of the staking fee: (1 - i / 787) * 42%
     */
    uint256 internal constant STAKING_FEE_CONVERGENCE_DAY = 787;
    uint256 internal constant STAKING_FEE_BASE_PERCENTAGE = 42;

    /**
     *  @notice Formula of the soft floor price in auctions: 2 * A / Q / 80%
     *          80% is sum of asset fund percentage and insurance fund percentage in the Treasury.
     */
    uint256 internal constant AUCTION_SOFT_FLOOR_PRICE_COEFFICIENT = 200;

    /**
     *  @notice The maximum tokens sold and the maximum cash a member of the whitelist can pay to buy during the
     *          whitelist campaign.
     */
    uint256 public constant WHITELIST_TOKEN_AMOUNT = 50000;
    uint256 public constant WHITELIST_MAX_CASH = 500;
}

/**
 *  @title  Double Halving
 *
 *  @author 420 DAO Team
 *
 *  @notice This library defines the mechanism of each token inflation phase of the DAO. There are 5 phases. The first
 *          phase lasts 420 days, emits at most 100,000 tokens in each auction and rewards at most 220,000 tokens (not
 *          including fee) for stakeholders each day. The next 3 phases sequentially remains half in duration, auction
 *          emission and staking reward, compared to each previous one. The fifth phase has the same auction emission
 *          and staking reward as the fourth but lasts as long as the total supply has never surpassed the maximum
 *          threshold.
 *  @notice Despite having a difference in staking fee, the fourth phase and the fifth phases can be considered the same
 *          for the implementation here.
 */
library DoubleHalving {
    /**
     *  @notice The last date of each phase.
     *          Phase   Duration    Last date
     *          1       420         420
     *          2       210         630
     *          3       105         735
     */
    uint256 internal constant PHASE_1 =  420;
    uint256 internal constant PHASE_2 =  630;
    uint256 internal constant PHASE_3 =  735;

    /**
     *  @notice The maximum token amount emitted to each auction.
     */
    uint256 internal constant AUCTION_EMISSION_1 = 100000;
    uint256 internal constant AUCTION_EMISSION_2 =  50000;
    uint256 internal constant AUCTION_EMISSION_3 =  25000;
    uint256 internal constant AUCTION_EMISSION_4 =  12500;

    /**
     *  @notice The maximum amount of staking reward each day.
     */
    uint256 internal constant STAKING_REWARD_1 = 220000;
    uint256 internal constant STAKING_REWARD_2 = 110000;
    uint256 internal constant STAKING_REWARD_3 =  55000;
    uint256 internal constant STAKING_REWARD_4 =  27000;

    /**
     *  @notice Get the maximum auction emission and the staking reward of a certain day.
     *          Type: tuple(int, int)
     *          Usage: DaoManager
     *
     *          Name    Meaning
     *  @param  _day    The day to query with
     */
    function tokenInflationOf(uint256 _day) internal pure returns (uint256, uint256) {
        if (_day <= PHASE_1) return (AUCTION_EMISSION_1 * Constant.TOKEN_SCALE, STAKING_REWARD_1 * Constant.TOKEN_SCALE);
        if (_day <= PHASE_2) return (AUCTION_EMISSION_2 * Constant.TOKEN_SCALE, STAKING_REWARD_2 * Constant.TOKEN_SCALE);
        if (_day <= PHASE_3) return (AUCTION_EMISSION_3 * Constant.TOKEN_SCALE, STAKING_REWARD_3 * Constant.TOKEN_SCALE);
        return (AUCTION_EMISSION_4 * Constant.TOKEN_SCALE, STAKING_REWARD_4 * Constant.TOKEN_SCALE);
    }
}

/**
 *  @title  Permission
 *
 *  @author 420 DAO Team
 *
 *  @notice This abstract contract provides a modifier to restrict the permission of functions.
 */
abstract contract Permission {
    modifier permittedTo(address _account) {
        require(msg.sender == _account, "Permission: Unauthorized.");
        _;
    }
}

/**
 *  @title  Token 420
 *
 *  @author 420 DAO Team
 *
 *  @notice Token 420 is fully conformed to the ERC-20 standard with extra functions of mint and burn.
 *          The token is integrated with the DAO Manager as well as the whole 420 DAO system.
 *
 *  @dev    This contract derives from the implementation of ERC-20 of OpenZeppelin.
 */
contract Token420 is ERC20, Permission {
    IDaoManager public dao;

    event DaoManagerRegistration(address indexed account);
    event DaoManagerUpgrade(address indexed oldAddress, address indexed newAddress);
    event Mint(address indexed account, uint256 indexed amount);
    event Burn(address indexed account, uint256 indexed amount);

    /**
     *  @dev    Apply the constructor of the superclass contract `ERC20`.
     *          Name:     "Token 420"
     *          Symbol:   "420"
     */
    constructor() ERC20("Token 420", "420") {}

    /**
     *  @dev    ERC-20: `decimals()`
     */
    function decimals() public pure override returns (uint8) {
        return Constant.TOKEN_DECIMALS;
    }

    /**
     *  @notice Register a DAO Manager for some restricted function.
     *
     *  @dev    This can only be called once.
     */
    function registerDaoManager() external {
        require(address(dao) == address(0), "Token420: The DAO Manager has already been registered.");
        dao = IDaoManager(msg.sender);
        emit DaoManagerRegistration(address(dao));
    }

    /**
     *  @notice Migrate to a new DAO Manager.
     *
     *  @dev    Only the DAO admin can call this function.
     *
     *          Name    Meaning
     *  @param  _newDao Address of the new DAO Manager
     */
    function upgradeDaoManager(IDaoManager _newDao) external permittedTo(dao.admin()) {
        require(dao.isBlockedForMigration(), "Token420: DAO is not ready for migration.");
        address oldAddress = address(dao);
        address newAddress = address(_newDao);
        dao = _newDao;
        emit DaoManagerUpgrade(oldAddress, newAddress);
    }

    /**
     *  @notice Mint token 420 to an account.
     *
     *  @dev    Only the DAO Manager can call this function.
     *
     *          Name        Meaning
     *  @param  _account    Address of the account that needs to mint token
     *  @param  _amount     Token amount to mint
     */
    function mint(address _account, uint256 _amount) external permittedTo(address(dao)) {
        _mint(_account, _amount);
        emit Mint(_account, _amount);
    }

    /**
     *  @notice Burn token 420 from an account.
     *
     *  @dev    Only the DAO Manager can call this function.
     *
     *          Name        Meaning
     *  @param  _account    Address of the account that needs to burn token
     *  @param  _amount     Token amount to burn
     */
    function burn(address _account, uint256 _amount) external permittedTo(address(dao)) {
        _burn(_account, _amount);
        emit Burn(_account, _amount);
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"DaoManagerRegistration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"DaoManagerUpgrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dao","outputs":[{"internalType":"contract IDaoManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"registerDaoManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IDaoManager","name":"_newDao","type":"address"}],"name":"upgradeDaoManager","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051806040016040528060098152602001680546f6b656e203432360bc1b8152506040518060400160405280600381526020016203432360ec1b81525081600390805190602001906200006892919062000087565b5080516200007e90600490602084019062000087565b5050506200016a565b82805462000095906200012d565b90600052602060002090601f016020900481019282620000b9576000855562000104565b82601f10620000d457805160ff191683800117855562000104565b8280016001018555821562000104579182015b8281111562000104578251825591602001919060010190620000e7565b506200011292915062000116565b5090565b5b8082111562000112576000815560010162000117565b600181811c908216806200014257607f821691505b602082108114156200016457634e487b7160e01b600052602260045260246000fd5b50919050565b610fce806200017a6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80634162169f116100975780639dc29fac116100665780639dc29fac14610219578063a457c2d71461022c578063a9059cbb1461023f578063dd62ed3e1461025257600080fd5b80634162169f146101b557806370a08231146101e05780637b3e4f991461020957806395d89b411461021157600080fd5b806327b8f762116100d357806327b8f7621461016b578063313ce56714610180578063395093511461018f57806340c10f19146101a257600080fd5b806306fdde0314610105578063095ea7b31461012357806318160ddd1461014657806323b872dd14610158575b600080fd5b61010d61028b565b60405161011a9190610d6b565b60405180910390f35b610136610131366004610dd8565b61031d565b604051901515815260200161011a565b6002545b60405190815260200161011a565b610136610166366004610e04565b610333565b61017e610179366004610e45565b6103e2565b005b6040516012815260200161011a565b61013661019d366004610dd8565b6105c9565b61017e6101b0366004610dd8565b610605565b6005546101c8906001600160a01b031681565b6040516001600160a01b03909116815260200161011a565b61014a6101ee366004610e45565b6001600160a01b031660009081526020819052604090205490565b61017e610675565b61010d61072d565b61017e610227366004610dd8565b61073c565b61013661023a366004610dd8565b6107ac565b61013661024d366004610dd8565b610845565b61014a610260366004610e69565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606003805461029a90610ea2565b80601f01602080910402602001604051908101604052809291908181526020018280546102c690610ea2565b80156103135780601f106102e857610100808354040283529160200191610313565b820191906000526020600020905b8154815290600101906020018083116102f657829003601f168201915b5050505050905090565b600061032a338484610852565b50600192915050565b6000610340848484610977565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156103ca5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6103d78533858403610852565b506001949350505050565b600560009054906101000a90046001600160a01b03166001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b15801561043057600080fd5b505afa158015610444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104689190610edd565b336001600160a01b038216146104905760405162461bcd60e51b81526004016103c190610efa565b600560009054906101000a90046001600160a01b03166001600160a01b031663c690c59f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104de57600080fd5b505afa1580156104f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105169190610f31565b6105745760405162461bcd60e51b815260206004820152602960248201527f546f6b656e3432303a2044414f206973206e6f7420726561647920666f72206d60448201526834b3b930ba34b7b71760b91b60648201526084016103c1565b600580546001600160a01b038481166001600160a01b031983168117909355604051911691849183907fbe976600b5a1888b3d3268f5d2312bd179104d8e28da5badcf2b9c2c863ba09e90600090a350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161032a918590610600908690610f69565b610852565b6005546001600160a01b03163381146106305760405162461bcd60e51b81526004016103c190610efa565b61063a8383610b46565b60405182906001600160a01b038516907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688590600090a3505050565b6005546001600160a01b0316156106ed5760405162461bcd60e51b815260206004820152603660248201527f546f6b656e3432303a205468652044414f204d616e616765722068617320616c6044820152753932b0b23c903132b2b7103932b3b4b9ba32b932b21760511b60648201526084016103c1565b600580546001600160a01b031916339081179091556040517f36499d2e8aa911a6da2bc667cfdc61544d7f2f1d4e675e910230ad481ac04a8690600090a2565b60606004805461029a90610ea2565b6005546001600160a01b03163381146107675760405162461bcd60e51b81526004016103c190610efa565b6107718383610c25565b60405182906001600160a01b038516907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca590600090a3505050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561082e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103c1565b61083b3385858403610852565b5060019392505050565b600061032a338484610977565b6001600160a01b0383166108b45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103c1565b6001600160a01b0382166109155760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103c1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166109db5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103c1565b6001600160a01b038216610a3d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103c1565b6001600160a01b03831660009081526020819052604090205481811015610ab55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103c1565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610aec908490610f69565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b3891815260200190565b60405180910390a350505050565b6001600160a01b038216610b9c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103c1565b8060026000828254610bae9190610f69565b90915550506001600160a01b03821660009081526020819052604081208054839290610bdb908490610f69565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610c855760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103c1565b6001600160a01b03821660009081526020819052604090205481811015610cf95760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103c1565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610d28908490610f81565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161096a565b600060208083528351808285015260005b81811015610d9857858101830151858201604001528201610d7c565b81811115610daa576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610dd557600080fd5b50565b60008060408385031215610deb57600080fd5b8235610df681610dc0565b946020939093013593505050565b600080600060608486031215610e1957600080fd5b8335610e2481610dc0565b92506020840135610e3481610dc0565b929592945050506040919091013590565b600060208284031215610e5757600080fd5b8135610e6281610dc0565b9392505050565b60008060408385031215610e7c57600080fd5b8235610e8781610dc0565b91506020830135610e9781610dc0565b809150509250929050565b600181811c90821680610eb657607f821691505b60208210811415610ed757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215610eef57600080fd5b8151610e6281610dc0565b60208082526019908201527f5065726d697373696f6e3a20556e617574686f72697a65642e00000000000000604082015260600190565b600060208284031215610f4357600080fd5b81518015158114610e6257600080fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115610f7c57610f7c610f53565b500190565b600082821015610f9357610f93610f53565b50039056fea264697066735822122017e3e37300d79196f82812f2e80b8a9dbb41308d6940dc72842b6392f458482b64736f6c63430008090033

Deployed ByteCode Sourcemap

23827:2688:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6086:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8253:169;;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;8253:169:0;1072:187:1;7206:108:0;7294:12;;7206:108;;;1410:25:1;;;1398:2;1383:18;7206:108:0;1264:177:1;8904:492:0;;;;;;:::i;:::-;;:::i;25193:355::-;;;;;;:::i;:::-;;:::i;:::-;;24455:106;;;18571:2;2320:36:1;;2308:2;2293:18;24455:106:0;2178:184:1;9805:215:0;;;;;;:::i;:::-;;:::i;25863:166::-;;;;;;:::i;:::-;;:::i;23873:22::-;;;;;-1:-1:-1;;;;;23873:22:0;;;;;;-1:-1:-1;;;;;2550:32:1;;;2532:51;;2520:2;2505:18;23873:22:0;2367:222:1;7377:127:0;;;;;;:::i;:::-;-1:-1:-1;;;;;7478:18:0;7451:7;7478:18;;;;;;;;;;;;7377:127;24712:243;;;:::i;6305:104::-;;;:::i;26346:166::-;;;;;;:::i;:::-;;:::i;10523:413::-;;;;;;:::i;:::-;;:::i;7717:175::-;;;;;;:::i;:::-;;:::i;7955:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8071:18:0;;;8044:7;8071:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7955:151;6086:100;6140:13;6173:5;6166:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6086:100;:::o;8253:169::-;8336:4;8353:39;3974:10;8376:7;8385:6;8353:8;:39::i;:::-;-1:-1:-1;8410:4:0;8253:169;;;;:::o;8904:492::-;9044:4;9061:36;9071:6;9079:9;9090:6;9061:9;:36::i;:::-;-1:-1:-1;;;;;9137:19:0;;9110:24;9137:19;;;:11;:19;;;;;;;;3974:10;9137:33;;;;;;;;9189:26;;;;9181:79;;;;-1:-1:-1;;;9181:79:0;;3826:2:1;9181:79:0;;;3808:21:1;3865:2;3845:18;;;3838:30;3904:34;3884:18;;;3877:62;-1:-1:-1;;;3955:18:1;;;3948:38;4003:19;;9181:79:0;;;;;;;;;9296:57;9305:6;3974:10;9346:6;9327:16;:25;9296:8;:57::i;:::-;-1:-1:-1;9384:4:0;;8904:492;-1:-1:-1;;;;8904:492:0:o;25193:355::-;25262:3;;;;;;;;;-1:-1:-1;;;;;25262:3:0;-1:-1:-1;;;;;25262:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23392:10;-1:-1:-1;;;;;23392:22:0;;;23384:60;;;;-1:-1:-1;;;23384:60:0;;;;;;;:::i;:::-;25294:3:::1;;;;;;;;;-1:-1:-1::0;;;;;25294:3:0::1;-1:-1:-1::0;;;;;25294:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25286:81;;;::::0;-1:-1:-1;;;25286:81:0;;5127:2:1;25286:81:0::1;::::0;::::1;5109:21:1::0;5166:2;5146:18;;;5139:30;5205:34;5185:18;;;5178:62;-1:-1:-1;;;5256:18:1;;;5249:39;5305:19;;25286:81:0::1;4925:405:1::0;25286:81:0::1;25407:3;::::0;;-1:-1:-1;;;;;25470:13:0;;::::1;-1:-1:-1::0;;;;;;25470:13:0;::::1;::::0;::::1;::::0;;;25499:41:::1;::::0;25407:3;::::1;::::0;25451:7;;25407:3;;25499:41:::1;::::0;25378:18:::1;::::0;25499:41:::1;25275:273;;25193:355:::0;;:::o;9805:215::-;3974:10;9893:4;9942:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9942:34:0;;;;;;;;;;9893:4;;9910:80;;9933:7;;9942:47;;9979:10;;9942:47;:::i;:::-;9910:8;:80::i;25863:166::-;25941:3;;-1:-1:-1;;;;;25941:3:0;23392:10;:22;;23384:60;;;;-1:-1:-1;;;23384:60:0;;;;;;;:::i;:::-;25958:24:::1;25964:8;25974:7;25958:5;:24::i;:::-;25998:23;::::0;26013:7;;-1:-1:-1;;;;;25998:23:0;::::1;::::0;::::1;::::0;;;::::1;25863:166:::0;;;:::o;24712:243::-;24778:3;;-1:-1:-1;;;;;24778:3:0;24770:26;24762:93;;;;-1:-1:-1;;;24762:93:0;;5802:2:1;24762:93:0;;;5784:21:1;5841:2;5821:18;;;5814:30;5880:34;5860:18;;;5853:62;-1:-1:-1;;;5931:18:1;;;5924:52;5993:19;;24762:93:0;5600:418:1;24762:93:0;24866:3;:29;;-1:-1:-1;;;;;;24866:29:0;24884:10;24866:29;;;;;;24911:36;;;;24866:3;;24911:36;24712:243::o;6305:104::-;6361:13;6394:7;6387:14;;;;;:::i;26346:166::-;26424:3;;-1:-1:-1;;;;;26424:3:0;23392:10;:22;;23384:60;;;;-1:-1:-1;;;23384:60:0;;;;;;;:::i;:::-;26441:24:::1;26447:8;26457:7;26441:5;:24::i;:::-;26481:23;::::0;26496:7;;-1:-1:-1;;;;;26481:23:0;::::1;::::0;::::1;::::0;;;::::1;26346:166:::0;;;:::o;10523:413::-;3974:10;10616:4;10660:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10660:34:0;;;;;;;;;;10713:35;;;;10705:85;;;;-1:-1:-1;;;10705:85:0;;6225:2:1;10705:85:0;;;6207:21:1;6264:2;6244:18;;;6237:30;6303:34;6283:18;;;6276:62;-1:-1:-1;;;6354:18:1;;;6347:35;6399:19;;10705:85:0;6023:401:1;10705:85:0;10826:67;3974:10;10849:7;10877:15;10858:16;:34;10826:8;:67::i;:::-;-1:-1:-1;10924:4:0;;10523:413;-1:-1:-1;;;10523:413:0:o;7717:175::-;7803:4;7820:42;3974:10;7844:9;7855:6;7820:9;:42::i;14207:380::-;-1:-1:-1;;;;;14343:19:0;;14335:68;;;;-1:-1:-1;;;14335:68:0;;6631:2:1;14335:68:0;;;6613:21:1;6670:2;6650:18;;;6643:30;6709:34;6689:18;;;6682:62;-1:-1:-1;;;6760:18:1;;;6753:34;6804:19;;14335:68:0;6429:400:1;14335:68:0;-1:-1:-1;;;;;14422:21:0;;14414:68;;;;-1:-1:-1;;;14414:68:0;;7036:2:1;14414:68:0;;;7018:21:1;7075:2;7055:18;;;7048:30;7114:34;7094:18;;;7087:62;-1:-1:-1;;;7165:18:1;;;7158:32;7207:19;;14414:68:0;6834:398:1;14414:68:0;-1:-1:-1;;;;;14495:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14547:32;;1410:25:1;;;14547:32:0;;1383:18:1;14547:32:0;;;;;;;;14207:380;;;:::o;11426:733::-;-1:-1:-1;;;;;11566:20:0;;11558:70;;;;-1:-1:-1;;;11558:70:0;;7439:2:1;11558:70:0;;;7421:21:1;7478:2;7458:18;;;7451:30;7517:34;7497:18;;;7490:62;-1:-1:-1;;;7568:18:1;;;7561:35;7613:19;;11558:70:0;7237:401:1;11558:70:0;-1:-1:-1;;;;;11647:23:0;;11639:71;;;;-1:-1:-1;;;11639:71:0;;7845:2:1;11639:71:0;;;7827:21:1;7884:2;7864:18;;;7857:30;7923:34;7903:18;;;7896:62;-1:-1:-1;;;7974:18:1;;;7967:33;8017:19;;11639:71:0;7643:399:1;11639:71:0;-1:-1:-1;;;;;11807:17:0;;11783:21;11807:17;;;;;;;;;;;11843:23;;;;11835:74;;;;-1:-1:-1;;;11835:74:0;;8249:2:1;11835:74:0;;;8231:21:1;8288:2;8268:18;;;8261:30;8327:34;8307:18;;;8300:62;-1:-1:-1;;;8378:18:1;;;8371:36;8424:19;;11835:74:0;8047:402:1;11835:74:0;-1:-1:-1;;;;;11945:17:0;;;:9;:17;;;;;;;;;;;11965:22;;;11945:42;;12009:20;;;;;;;;:30;;11981:6;;11945:9;12009:30;;11981:6;;12009:30;:::i;:::-;;;;;;;;12074:9;-1:-1:-1;;;;;12057:35:0;12066:6;-1:-1:-1;;;;;12057:35:0;;12085:6;12057:35;;;;1410:25:1;;1398:2;1383:18;;1264:177;12057:35:0;;;;;;;;11547:612;11426:733;;;:::o;12446:399::-;-1:-1:-1;;;;;12530:21:0;;12522:65;;;;-1:-1:-1;;;12522:65:0;;8656:2:1;12522:65:0;;;8638:21:1;8695:2;8675:18;;;8668:30;8734:33;8714:18;;;8707:61;8785:18;;12522:65:0;8454:355:1;12522:65:0;12678:6;12662:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;12695:18:0;;:9;:18;;;;;;;;;;:28;;12717:6;;12695:9;:28;;12717:6;;12695:28;:::i;:::-;;;;-1:-1:-1;;12739:37:0;;1410:25:1;;;-1:-1:-1;;;;;12739:37:0;;;12756:1;;12739:37;;1398:2:1;1383:18;12739:37:0;;;;;;;12446:399;;:::o;13178:591::-;-1:-1:-1;;;;;13262:21:0;;13254:67;;;;-1:-1:-1;;;13254:67:0;;9016:2:1;13254:67:0;;;8998:21:1;9055:2;9035:18;;;9028:30;9094:34;9074:18;;;9067:62;-1:-1:-1;;;9145:18:1;;;9138:31;9186:19;;13254:67:0;8814:397:1;13254:67:0;-1:-1:-1;;;;;13421:18:0;;13396:22;13421:18;;;;;;;;;;;13458:24;;;;13450:71;;;;-1:-1:-1;;;13450:71:0;;9418:2:1;13450:71:0;;;9400:21:1;9457:2;9437:18;;;9430:30;9496:34;9476:18;;;9469:62;-1:-1:-1;;;9547:18:1;;;9540:32;9589:19;;13450:71:0;9216:398:1;13450:71:0;-1:-1:-1;;;;;13557:18:0;;:9;:18;;;;;;;;;;13578:23;;;13557:44;;13623:12;:22;;13595:6;;13557:9;13623:22;;13595:6;;13623:22;:::i;:::-;;;;-1:-1:-1;;13663:37:0;;1410:25:1;;;13689:1:0;;-1:-1:-1;;;;;13663:37:0;;;;;1398:2:1;1383:18;13663:37:0;1264:177:1;14:597;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1446:456::-;1523:6;1531;1539;1592:2;1580:9;1571:7;1567:23;1563:32;1560:52;;;1608:1;1605;1598:12;1560:52;1647:9;1634:23;1666:31;1691:5;1666:31;:::i;:::-;1716:5;-1:-1:-1;1773:2:1;1758:18;;1745:32;1786:33;1745:32;1786:33;:::i;:::-;1446:456;;1838:7;;-1:-1:-1;;;1892:2:1;1877:18;;;;1864:32;;1446:456::o;1907:266::-;1985:6;2038:2;2026:9;2017:7;2013:23;2009:32;2006:52;;;2054:1;2051;2044:12;2006:52;2093:9;2080:23;2112:31;2137:5;2112:31;:::i;:::-;2162:5;1907:266;-1:-1:-1;;;1907:266:1:o;2846:388::-;2914:6;2922;2975:2;2963:9;2954:7;2950:23;2946:32;2943:52;;;2991:1;2988;2981:12;2943:52;3030:9;3017:23;3049:31;3074:5;3049:31;:::i;:::-;3099:5;-1:-1:-1;3156:2:1;3141:18;;3128:32;3169:33;3128:32;3169:33;:::i;:::-;3221:7;3211:17;;;2846:388;;;;;:::o;3239:380::-;3318:1;3314:12;;;;3361;;;3382:61;;3436:4;3428:6;3424:17;3414:27;;3382:61;3489:2;3481:6;3478:14;3458:18;3455:38;3452:161;;;3535:10;3530:3;3526:20;3523:1;3516:31;3570:4;3567:1;3560:15;3598:4;3595:1;3588:15;3452:161;;3239:380;;;:::o;4033:251::-;4103:6;4156:2;4144:9;4135:7;4131:23;4127:32;4124:52;;;4172:1;4169;4162:12;4124:52;4204:9;4198:16;4223:31;4248:5;4223:31;:::i;4289:349::-;4491:2;4473:21;;;4530:2;4510:18;;;4503:30;4569:27;4564:2;4549:18;;4542:55;4629:2;4614:18;;4289:349::o;4643:277::-;4710:6;4763:2;4751:9;4742:7;4738:23;4734:32;4731:52;;;4779:1;4776;4769:12;4731:52;4811:9;4805:16;4864:5;4857:13;4850:21;4843:5;4840:32;4830:60;;4886:1;4883;4876:12;5335:127;5396:10;5391:3;5387:20;5384:1;5377:31;5427:4;5424:1;5417:15;5451:4;5448:1;5441:15;5467:128;5507:3;5538:1;5534:6;5531:1;5528:13;5525:39;;;5544:18;;:::i;:::-;-1:-1:-1;5580:9:1;;5467:128::o;9619:125::-;9659:4;9687:1;9684;9681:8;9678:34;;;9692:18;;:::i;:::-;-1:-1:-1;9729:9:1;;9619:125::o

Swarm Source

ipfs://17e3e37300d79196f82812f2e80b8a9dbb41308d6940dc72842b6392f458482b
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.