Contract 0xdf9B4b57865B403e08c85568442f95c26b7896b0 4

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x72c026aa8b0e963907faad10c0d3b80c9964c08d96e6a0f1a48c529f412867f3Approve242872442022-01-29 2:13:595 mins ago0xffead14218503356714547640503e11527181dd5 IN  Sunflower Farmers: SFF Token0 MATIC0.00138392325 29.682000005
0x62d58ecd876fbcce56156fc7f611a725c06500a2fbf33728164905547dfeec15Approve242872402022-01-29 2:13:515 mins ago0xb2b7524a16bc1c4995878341930393ee5a86be85 IN  Sunflower Farmers: SFF Token0 MATIC0.000708939289 15.205132205
0xa23dadc7d5d07c3e35d810fb4181099f2ef02cd6ad58ae8e933ee2783981edeeTransfer242872372022-01-29 2:13:455 mins ago0x6f15937e10aac4cd7479e29c665cb326e764d0a0 IN  Sunflower Farmers: SFF Token0 MATIC0.000889361766 29.682000004
0x164ec59919c169962cc2d3d822e9531c66c54e8755dc39acd30b68d3bf93b5acTransfer242869812022-01-29 2:04:5714 mins ago0xb92aa970544aaa4596ee05d446245db306d90df6 IN  Sunflower Farmers: SFF Token0 MATIC0.0000389363031.300000107
0xc356774cad181bc3be939c6f9e20382e25e0d908935f76bc798ff35731d2a867Transfer242867972022-01-29 1:58:3720 mins ago0xb267f1eab3deaeb3019e5f91cb95b0616a07c9a3 IN  Sunflower Farmers: SFF Token0 MATIC0.0000712952592.381350716
0xa6a0bbec4cd68eaf1fc4f4f78fe9c7fefb32ccd3659c0dce780ae372ae1cde14Transfer242866532022-01-29 1:53:3725 mins ago0x9c44f2bb0e003bbc84782740a07457ce2da7fecd IN  Sunflower Farmers: SFF Token0 MATIC0.00094094402631.428705908
0x2bf8109eb162ed0a37627c8dca99cf26b32747bfaad3776ca0e778c92c701ed5Transfer242866222022-01-29 1:52:3526 mins ago0x99d6bd57e664519e8bbc3461cef11f1d69f7bba9 IN  Sunflower Farmers: SFF Token0 MATIC0.00091035539730.419199986
0x5fa4524bce9b230e00f03df8a30a0763f354b1c8f5d6b2769ace5f2f5124092aTransfer242866072022-01-29 1:52:0527 mins ago0x9b6e000c35df36eb355903146f90ecdc175f7ac3 IN  Sunflower Farmers: SFF Token0 MATIC0.00143052371730.419199987
0xeac299651b26282cab176fdb73ae2768dcf08746c1c6bc8d1ab6765ae865eb3cTransfer242863532022-01-29 1:43:2136 mins ago0xa83fd05ae2d81360a9d35c246b2382f8323f43ee IN  Sunflower Farmers: SFF Token0 MATIC0.00090085898930.077760003
0x6642610cc06007b8b35ecc4ecbe943f08aae7778fd5ce0617b0ef35c21952d88Transfer242863402022-01-29 1:42:5536 mins ago0xa8039bd63d93e5ac67ddef9d2502ba3d3d023be5 IN  Sunflower Farmers: SFF Token0 MATIC0.0009006265730.07
0xeac92c04104348d5d46a7fd4fd8ae7bc757619618bf48437bd00ea83ed7590f6Transfer242861302022-01-29 1:35:3943 mins ago0xe31523d783855ffe94e0e8d482260599ee29dd3f IN  Sunflower Farmers: SFF Token0 MATIC0.00114717933
0xc8e8204fd00a4d378860fdff01d6c999508ff9f7c37f64d4861c224df9112252Transfer242861272022-01-29 1:35:3343 mins ago0x81bdcc3165dfc35a53c14ba68dc7dad285e7545f IN  Sunflower Farmers: SFF Token0 MATIC0.00114638733
0x810641081cd46cdfe5cb82318392fc63fd8d7e44825c28548d4ab41385eeab05Transfer242861242022-01-29 1:35:2744 mins ago0xbfc5389359cef2fcc45215fd0c51f92f2d2c91e3 IN  Sunflower Farmers: SFF Token0 MATIC0.00114638733
0xb3db28b3c8a8020e7548d0eeb33353e17d1f4103989f943f26bf19acace65514Transfer242861212022-01-29 1:35:2144 mins ago0xe1c0e48ad8ad130cf64487400ed518c4d8b8361e IN  Sunflower Farmers: SFF Token0 MATIC0.00114638733
0x98d8b10a9bcfb3a45ee7d31bf4db13aeb5c0d128ca2cf8def433b08e40220dacTransfer242861182022-01-29 1:35:1544 mins ago0xec45f676b5ecb8d31e420274d51a4581f067804f IN  Sunflower Farmers: SFF Token0 MATIC0.00114638733
0xcdca69a541d3ef537ff1a1071658f4e6fb217e23d6c064bc8077ac56aeab6f96Transfer242861152022-01-29 1:35:0944 mins ago0x4777319ded37ca428b84d4dfe5af215698dc7cbb IN  Sunflower Farmers: SFF Token0 MATIC0.00114638733
0x5dd82d66d8470a2cc9e322f8f0fe26f06ed2730b51ab4e61990477e242d213b5Transfer242861132022-01-29 1:35:0544 mins ago0x258915c1c89c84443dccbf8c2ecc6d2b0ef37e91 IN  Sunflower Farmers: SFF Token0 MATIC0.00114638733
0x08721d2573e02df37ac577c3cdcdbd90f798e9baea6f6835202c0f6d31a22feeTransfer242861102022-01-29 1:34:5944 mins ago0xa91022ddb4a4c8d6fc641721d17fd54ccc8121b7 IN  Sunflower Farmers: SFF Token0 MATIC0.00114638733
0x2d231e1ab992f9c82dd9c70a677688cd1add8ba052710386b4e513a902d799c0Transfer242861072022-01-29 1:34:5344 mins ago0x9a8a4c6f62376d4f6565f002b6ad85264c6e7c2a IN  Sunflower Farmers: SFF Token0 MATIC0.00114717933
0x3ad5e7fde3be11d3d6e2c51a34791c5f68bf6e98507e160f07add628a81ca5edTransfer242861042022-01-29 1:34:4744 mins ago0xd2361dbd137e9b3f25b10abc10a2253a653dc3a8 IN  Sunflower Farmers: SFF Token0 MATIC0.00114638733
0x947eae19534604fcd34e60e31b1e06d4b081f32be58f5c9ff4638312bafd2326Transfer242861012022-01-29 1:34:4144 mins ago0x93d24df7e22647a9048c191e0481debfc4fa47dc IN  Sunflower Farmers: SFF Token0 MATIC0.00114638733
0xd77fc2670cc330313976900cb573dbc3239e15f8e45f54fa139b7c2db2d3c465Transfer242860982022-01-29 1:34:3544 mins ago0xba79f9076793d2e699b3a816321ee5652749a9d0 IN  Sunflower Farmers: SFF Token0 MATIC0.00114638733
0x8de80709c419f204efb6869db920a9a1eb01d141f268b8cf99eed6dbd623883bTransfer242860952022-01-29 1:34:2945 mins ago0xaff41583a703629e578828a6f1955433b8228b16 IN  Sunflower Farmers: SFF Token0 MATIC0.00114717933
0xf7af9e064b9758de63413e7bd885319636870797c7d6ee358e3bfb9c1cc54790Transfer242860932022-01-29 1:34:2545 mins ago0x704849fd0dd3fa65aa37bdce37c4e709b894e076 IN  Sunflower Farmers: SFF Token0 MATIC0.00114638733
0xc4d5ae36e972a30df60d33917c94fc6dfc6707df2ed06bf725762452fd5a79e5Transfer242860902022-01-29 1:34:1945 mins ago0x5673ebcb1a1830566d9cf81e060c6d0b4360d472 IN  Sunflower Farmers: SFF Token0 MATIC0.00114638733
[ Download CSV Export 

OVERVIEW

Users can earn tokens by planting crops, waiting patiently, and harvesting rewards.

Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenV2

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-11-30
*/

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.3.0/contracts/math/SafeMath.sol



pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.3.0/contracts/token/ERC20/IERC20.sol



pragma solidity >=0.6.0 <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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.3.0/contracts/GSN/Context.sol



pragma solidity >=0.6.0 <0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.3.0/contracts/token/ERC20/ERC20.sol



pragma solidity >=0.6.0 <0.8.0;




/**
 * @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 guidelines: functions revert instead
 * of 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 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) public {
        _name = name_;
        _symbol = symbol_;
        _decimals = 18;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view 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 {_setupDecimals} is
     * called.
     *
     * 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 returns (uint8) {
        return _decimals;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view 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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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:
     *
     * - `to` 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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    /**
     * @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 to 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 { }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.3.0/contracts/token/ERC20/ERC20Burnable.sol



pragma solidity >=0.6.0 <0.8.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    using SafeMath for uint256;

    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        uint256 decreasedAllowance = allowance(account, _msgSender()).sub(amount, "ERC20: burn amount exceeds allowance");

        _approve(account, _msgSender(), decreasedAllowance);
        _burn(account, amount);
    }
}

// File: contracts/Token.sol


pragma solidity >=0.6.0 <0.8.0;

//import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
//import "@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol";




contract TokenV2 is ERC20, ERC20Burnable {
  address public minter;
  address private owner;

  event MinterChanged(address indexed from, address to);

  constructor() payable ERC20("Sunflower Farm", "SFF") {
    owner = msg.sender;
  }

  function passMinterRole(address farm) public returns (bool) {
    require(minter==address(0) || msg.sender==minter, "You are not minter");
    minter = farm;

    emit MinterChanged(msg.sender, farm);
    return true;
  }
  
  function getOwner() public view returns (address) {
      return owner;
  }

  function mint(address account, uint256 amount) public {
    require(minter == address(0) || msg.sender == minter, "You are not the minter");
		_mint(account, amount);
	}

  function burn(address account, uint256 amount) public {
    require(minter == address(0) || msg.sender == minter, "You are not the minter");
		_burn(account, amount);
	}
	
  function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        if (msg.sender == minter) {
            _transfer(sender, recipient, amount);
            return true;
        }
        
        super.transferFrom(sender, recipient, amount);
       return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"MinterChanged","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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"farm","type":"address"}],"name":"passMinterRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"}]

60806040526040518060400160405280600e81526020017f53756e666c6f776572204661726d0000000000000000000000000000000000008152506040518060400160405280600381526020017f534646000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200008892919062000107565b508060049080519060200190620000a192919062000107565b506012600560006101000a81548160ff021916908360ff160217905550505033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001bd565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200013f57600085556200018b565b82601f106200015a57805160ff19168380011785556200018b565b828001600101855582156200018b579182015b828111156200018a5782518255916020019190600101906200016d565b5b5090506200019a91906200019e565b5090565b5b80821115620001b95760008160009055506001016200019f565b5090565b611cd080620001cd6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a25780639dc29fac116100715780639dc29fac14610536578063a457c2d714610584578063a9059cbb146105e8578063d7fc5b151461064c578063dd62ed3e146106a657610116565b806370a08231146103d957806379cc679014610431578063893d20e81461047f57806395d89b41146104b357610116565b806323b872dd116100e957806323b872dd14610254578063313ce567146102d857806339509351146102f957806340c10f191461035d57806342966c68146103ab57610116565b806306fdde031461011b578063075461721461019e578063095ea7b3146101d257806318160ddd14610236575b600080fd5b61012361071e565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610163578082015181840152602081019050610148565b50505050905090810190601f1680156101905780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a66107c0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61021e600480360360408110156101e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107e6565b60405180821515815260200191505060405180910390f35b61023e610804565b6040518082815260200191505060405180910390f35b6102c06004803603606081101561026a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061080e565b60405180821515815260200191505060405180910390f35b6102e0610892565b604051808260ff16815260200191505060405180910390f35b6103456004803603604081101561030f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108a9565b60405180821515815260200191505060405180910390f35b6103a96004803603604081101561037357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061095c565b005b6103d7600480360360208110156103c157600080fd5b8101908080359060200190929190505050610a86565b005b61041b600480360360208110156103ef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a9a565b6040518082815260200191505060405180910390f35b61047d6004803603604081101561044757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ae2565b005b610487610b44565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104bb610b6e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104fb5780820151818401526020810190506104e0565b50505050905090810190601f1680156105285780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105826004803603604081101561054c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c10565b005b6105d06004803603604081101561059a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d3a565b60405180821515815260200191505060405180910390f35b610634600480360360408110156105fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e07565b60405180821515815260200191505060405180910390f35b61068e6004803603602081101561066257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e25565b60405180821515815260200191505060405180910390f35b610708600480360360408110156106bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ff0565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107b65780601f1061078b576101008083540402835291602001916107b6565b820191906000526020600020905b81548152906001019060200180831161079957829003601f168201915b5050505050905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006107fa6107f3611077565b848461107f565b6001905092915050565b6000600254905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561087a57610871848484611276565b6001905061088b565b610885848484611537565b50600190505b9392505050565b6000600560009054906101000a900460ff16905090565b60006109526108b6611077565b8461094d85600160006108c7611077565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461161090919063ffffffff16565b61107f565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610a065750600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610a78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f596f7520617265206e6f7420746865206d696e7465720000000000000000000081525060200191505060405180910390fd5b610a828282611698565b5050565b610a97610a91611077565b8261185f565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610b2182604051806060016040528060248152602001611be860249139610b1286610b0d611077565b610ff0565b611a239092919063ffffffff16565b9050610b3583610b2f611077565b8361107f565b610b3f838361185f565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c065780601f10610bdb57610100808354040283529160200191610c06565b820191906000526020600020905b815481529060010190602001808311610be957829003601f168201915b5050505050905090565b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610cba5750600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f596f7520617265206e6f7420746865206d696e7465720000000000000000000081525060200191505060405180910390fd5b610d36828261185f565b5050565b6000610dfd610d47611077565b84610df885604051806060016040528060258152602001611c766025913960016000610d71611077565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a239092919063ffffffff16565b61107f565b6001905092915050565b6000610e1b610e14611077565b8484611276565b6001905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610ed05750600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610f42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f596f7520617265206e6f74206d696e746572000000000000000000000000000081525060200191505060405180910390fd5b81600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f683604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a260019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611105576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180611c526024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561118b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611b786022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611c2d6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611382576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611b336023913960400191505060405180910390fd5b61138d838383611ae3565b6113f881604051806060016040528060268152602001611b9a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a239092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061148b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461161090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000611544848484611276565b61160584611550611077565b61160085604051806060016040528060288152602001611bc060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006115b6611077565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a239092919063ffffffff16565b61107f565b600190509392505050565b60008082840190508381101561168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561173b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b61174760008383611ae3565b61175c8160025461161090919063ffffffff16565b6002819055506117b3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461161090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611c0c6021913960400191505060405180910390fd5b6118f182600083611ae3565b61195c81604051806060016040528060228152602001611b56602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a239092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119b381600254611ae890919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000838311158290611ad0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a95578082015181840152602081019050611a7a565b50505050905090810190601f168015611ac25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b505050565b6000611b2a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a23565b90509291505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201774e60513f8e3e516176d902991aac0b6f1e622e07ebcc6972108a6161511f764736f6c63430007060033

Deployed ByteCode Sourcemap

21888:1294:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11572:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21934:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13678:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12647:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22813:366;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12499:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15059:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22456:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20973:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12810:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21383:295;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22373:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11774:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22634:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15780:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13142:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22138:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13380:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11572:83;11609:13;11642:5;11635:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11572:83;:::o;21934:21::-;;;;;;;;;;;;;:::o;13678:169::-;13761:4;13778:39;13787:12;:10;:12::i;:::-;13801:7;13810:6;13778:8;:39::i;:::-;13835:4;13828:11;;13678:169;;;;:::o;12647:100::-;12700:7;12727:12;;12720:19;;12647:100;:::o;22813:366::-;22953:4;22988:6;;;;;;;;;;;22974:20;;:10;:20;;;22970:115;;;23011:36;23021:6;23029:9;23040:6;23011:9;:36::i;:::-;23069:4;23062:11;;;;22970:115;23105:45;23124:6;23132:9;23143:6;23105:18;:45::i;:::-;;23167:4;23160:11;;22813:366;;;;;;:::o;12499:83::-;12540:5;12565:9;;;;;;;;;;;12558:16;;12499:83;:::o;15059:218::-;15147:4;15164:83;15173:12;:10;:12::i;:::-;15187:7;15196:50;15235:10;15196:11;:25;15208:12;:10;:12::i;:::-;15196:25;;;;;;;;;;;;;;;:34;15222:7;15196:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;15164:8;:83::i;:::-;15265:4;15258:11;;15059:218;;;;:::o;22456:172::-;22543:1;22525:20;;:6;;;;;;;;;;;:20;;;:44;;;;22563:6;;;;;;;;;;;22549:20;;:10;:20;;;22525:44;22517:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22601:22;22607:7;22616:6;22601:5;:22::i;:::-;22456:172;;:::o;20973:91::-;21029:27;21035:12;:10;:12::i;:::-;21049:6;21029:5;:27::i;:::-;20973:91;:::o;12810:119::-;12876:7;12903:9;:18;12913:7;12903:18;;;;;;;;;;;;;;;;12896:25;;12810:119;;;:::o;21383:295::-;21460:26;21489:84;21526:6;21489:84;;;;;;;;;;;;;;;;;:32;21499:7;21508:12;:10;:12::i;:::-;21489:9;:32::i;:::-;:36;;:84;;;;;:::i;:::-;21460:113;;21586:51;21595:7;21604:12;:10;:12::i;:::-;21618:18;21586:8;:51::i;:::-;21648:22;21654:7;21663:6;21648:5;:22::i;:::-;21383:295;;;:::o;22373:77::-;22414:7;22439:5;;;;;;;;;;;22432:12;;22373:77;:::o;11774:87::-;11813:13;11846:7;11839:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11774:87;:::o;22634:172::-;22721:1;22703:20;;:6;;;;;;;;;;;:20;;;:44;;;;22741:6;;;;;;;;;;;22727:20;;:10;:20;;;22703:44;22695:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22779:22;22785:7;22794:6;22779:5;:22::i;:::-;22634:172;;:::o;15780:269::-;15873:4;15890:129;15899:12;:10;:12::i;:::-;15913:7;15922:96;15961:15;15922:96;;;;;;;;;;;;;;;;;:11;:25;15934:12;:10;:12::i;:::-;15922:25;;;;;;;;;;;;;;;:34;15948:7;15922:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;15890:8;:129::i;:::-;16037:4;16030:11;;15780:269;;;;:::o;13142:175::-;13228:4;13245:42;13255:12;:10;:12::i;:::-;13269:9;13280:6;13245:9;:42::i;:::-;13305:4;13298:11;;13142:175;;;;:::o;22138:227::-;22192:4;22229:1;22213:18;;:6;;;;;;;;;;;:18;;;:40;;;;22247:6;;;;;;;;;;;22235:18;;:10;:18;;;22213:40;22205:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22292:4;22283:6;;:13;;;;;;;;;;;;;;;;;;22324:10;22310:31;;;22336:4;22310:31;;;;;;;;;;;;;;;;;;;;22355:4;22348:11;;22138:227;;;:::o;13380:151::-;13469:7;13496:11;:18;13508:5;13496:18;;;;;;;;;;;;;;;:27;13515:7;13496:27;;;;;;;;;;;;;;;;13489:34;;13380:151;;;;:::o;8997:106::-;9050:15;9085:10;9078:17;;8997:106;:::o;18927:346::-;19046:1;19029:19;;:5;:19;;;;19021:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19127:1;19108:21;;:7;:21;;;;19100:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19211:6;19181:11;:18;19193:5;19181:18;;;;;;;;;;;;;;;:27;19200:7;19181:27;;;;;;;;;;;;;;;:36;;;;19249:7;19233:32;;19242:5;19233:32;;;19258:6;19233:32;;;;;;;;;;;;;;;;;;18927:346;;;:::o;16539:539::-;16663:1;16645:20;;:6;:20;;;;16637:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16747:1;16726:23;;:9;:23;;;;16718:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16802:47;16823:6;16831:9;16842:6;16802:20;:47::i;:::-;16882:71;16904:6;16882:71;;;;;;;;;;;;;;;;;:9;:17;16892:6;16882:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;16862:9;:17;16872:6;16862:17;;;;;;;;;;;;;;;:91;;;;16987:32;17012:6;16987:9;:20;16997:9;16987:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;16964:9;:20;16974:9;16964:20;;;;;;;;;;;;;;;:55;;;;17052:9;17035:35;;17044:6;17035:35;;;17063:6;17035:35;;;;;;;;;;;;;;;;;;16539:539;;;:::o;14329:321::-;14435:4;14452:36;14462:6;14470:9;14481:6;14452:9;:36::i;:::-;14499:121;14508:6;14516:12;:10;:12::i;:::-;14530:89;14568:6;14530:89;;;;;;;;;;;;;;;;;:11;:19;14542:6;14530:19;;;;;;;;;;;;;;;:33;14550:12;:10;:12::i;:::-;14530:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;14499:8;:121::i;:::-;14638:4;14631:11;;14329:321;;;;;:::o;986:181::-;1044:7;1064:9;1080:1;1076;:5;1064:17;;1105:1;1100;:6;;1092:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1158:1;1151:8;;;986:181;;;;:::o;17360:378::-;17463:1;17444:21;;:7;:21;;;;17436:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17514:49;17543:1;17547:7;17556:6;17514:20;:49::i;:::-;17591:24;17608:6;17591:12;;:16;;:24;;;;:::i;:::-;17576:12;:39;;;;17647:30;17670:6;17647:9;:18;17657:7;17647:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;17626:9;:18;17636:7;17626:18;;;;;;;;;;;;;;;:51;;;;17714:7;17693:37;;17710:1;17693:37;;;17723:6;17693:37;;;;;;;;;;;;;;;;;;17360:378;;:::o;18071:418::-;18174:1;18155:21;;:7;:21;;;;18147:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18227:49;18248:7;18265:1;18269:6;18227:20;:49::i;:::-;18310:68;18333:6;18310:68;;;;;;;;;;;;;;;;;:9;:18;18320:7;18310:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;18289:9;:18;18299:7;18289:18;;;;;;;;;;;;;;;:89;;;;18404:24;18421:6;18404:12;;:16;;:24;;;;:::i;:::-;18389:12;:39;;;;18470:1;18444:37;;18453:7;18444:37;;;18474:6;18444:37;;;;;;;;;;;;;;;;;;18071:418;;:::o;1889:192::-;1975:7;2008:1;2003;:6;;2011:12;1995:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2035:9;2051:1;2047;:5;2035:17;;2072:1;2065:8;;;1889:192;;;;;:::o;20298:92::-;;;;:::o;1450:136::-;1508:7;1535:43;1539:1;1542;1535:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1528:50;;1450:136;;;;:::o

Swarm Source

ipfs://1774e60513f8e3e516176d902991aac0b6f1e622e07ebcc6972108a6161511f7
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.