Contract 0xdf9b4b57865b403e08c85568442f95c26b7896b0 4

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xf333cdfde365783d8204fce905b82a4156ee3847cfc8f3621f5110cb0fea7bd1Transfer242851702022-01-29 1:02:394 mins ago0x9c44f2bb0e003bbc84782740a07457ce2da7fecd IN  Sunflower Farmers: SFF Token0 MATIC0.0001796346
0xea4b667ea11a1f4ee6fc1c8ba16692a14d28b8b1a4221e1975ce322c8f061e6fTransfer242851002022-01-29 0:59:377 mins ago0xdeddc9449b19caff2856d53890013456f9011319 IN  Sunflower Farmers: SFF Token0 MATIC0.0001106238472.352347537
0xbeefa588de3996f2263cfe45d37fda93820cf24bfe3d3fea18f18ea8f515cd92Approve242850632022-01-29 0:57:099 mins ago0xa332d5cc1e80c9ef0ef06bce63d262b751c9923c IN  Sunflower Farmers: SFF Token0 MATIC0.000717295192 29.468600009
0x30dbf4dad0696f360a69e2a4f7e12f5dd802466017074f4b3148aba7244f0b9dTransfer242850512022-01-29 0:56:2510 mins ago0xc635c997fa32c6878f68ff2ddbaab7850415d76b IN  Sunflower Farmers: SFF Token0 MATIC0.00090062656830.069999962
0x98991182b98354494adc1221b1922001b119700ea777407e463f16d6af658dbfApprove242848642022-01-29 0:50:0316 mins ago0x7f4e64f642351ed473ee335d1b671ffaa65cf9e4 IN  Sunflower Farmers: SFF Token0 MATIC0.00085707095 35.210999996
0xb3930897704c6450322da40ce6f107d4ce43f8792d384f6e56922c0b86d9660cApprove242847992022-01-29 0:47:4519 mins ago0x113d957e78fd2f1adcc2553f9222d4c2d5320354 IN  Sunflower Farmers: SFF Token0 MATIC0.000823758767 31.272873736
0x6a4832e3a1f1a2c372e584e54d91e8430cee1510f876e54835829405d0b4a69aApprove242847702022-01-29 0:46:4720 mins ago0x113d957e78fd2f1adcc2553f9222d4c2d5320354 IN  Sunflower Farmers: SFF Token0 MATIC0.000780973438 32.084689969
0x9d3e79f1da21fcbe10b1d1b1a916739e6f1cc85f8eb24475949cf9a5ff446adcApprove242847032022-01-29 0:44:2922 mins ago0x3076131a8088ba07a68f0830470adcc6cc8014ee IN  Sunflower Farmers: SFF Token0 MATIC0.000766877809 31.505599999
0xe7ee47e34f6b66d871dba79df2cdf003ffd567b301fff801c9624939d48f8ee7Transfer242846992022-01-29 0:44:2122 mins ago0xb800a4d52d50c84edd79a457b11eb4ea47475824 IN  Sunflower Farmers: SFF Token0 MATIC0.00141153000130.000000033
0xbba3fa57276f0012fa05dfe02375195a7e4d721edf789eadedb86db1c641be87Approve242846682022-01-29 0:43:1523 mins ago0xd73282f4897c316bbc0aa180190be3c3a5c218a3 IN  Sunflower Farmers: SFF Token0 MATIC0.000065852501 2.500000043
0xec8021ae8df2ae459ac3005a8da4af4855af796becf74fecf0bcd5d44a11d7eeApprove242846572022-01-29 0:42:5323 mins ago0xd73282f4897c316bbc0aa180190be3c3a5c218a3 IN  Sunflower Farmers: SFF Token0 MATIC0.0000608525 2.500000026
0x8ecb228102538fa4ea187c1de3371e4053ef4d746bab716faae19827091ea12eApprove242846092022-01-29 0:41:1725 mins ago0x31f6c695320c570ec2cea1735bb9fc31e6b1a9c8 IN  Sunflower Farmers: SFF Token0 MATIC0.000781323383 29.661872514
0xece5eb2af8902a481d9eafda21b32515812cebef858a7de984ef8e472a275b45Approve242845732022-01-29 0:40:0126 mins ago0x31f6c695320c570ec2cea1735bb9fc31e6b1a9c8 IN  Sunflower Farmers: SFF Token0 MATIC0.000733107325 30.118208991
0x2719da5472fe81f7bde58443c0afdbc72178e604d34a7a2885e6d02481c17e4dApprove242845322022-01-29 0:38:3528 mins ago0x048186fd435bbba45d553a1ebf66f5ab95a5cd4e IN  Sunflower Farmers: SFF Token0 MATIC0.0000658525 2.50000002
0x9aba3459f7f9e1711e41c03fb51e5090e1f47920f38f23d3a4ff8c861f04fda8Approve242845212022-01-29 0:38:1328 mins ago0x048186fd435bbba45d553a1ebf66f5ab95a5cd4e IN  Sunflower Farmers: SFF Token0 MATIC0.0000608525 2.500000014
0x5b9c7d64631c55e4ed1a3333e2fa0413e56b106311b521175a62b8a9bce91cc4Approve242845002022-01-29 0:37:3129 mins ago0xcc2fc7f4b3b126c1759c492cae8da2390a0fd318 IN  Sunflower Farmers: SFF Token0 MATIC0.0000608525 2.500000015
0x314a21a134f64057218c7a10a63b67e2ef470895e720ec942e50c888dd26be9dApprove242844842022-01-29 0:36:5929 mins ago0x0a79ef033506c606cbca86738a8df06a8d04d39b IN  Sunflower Farmers: SFF Token0 MATIC0.0000658525 2.500000013
0x07848f87e2c69d5761e0d9d4a9e29865dc2be132f85d83e9b380780b4ae2f3dcApprove242844502022-01-29 0:35:4731 mins ago0x0a79ef033506c606cbca86738a8df06a8d04d39b IN  Sunflower Farmers: SFF Token0 MATIC0.000755780747 31.049699988
0x3b6800d1a4202f12c2c41556ec08d5991330a160bbb9ccb6f8bd6246132a96bfApprove242844072022-01-29 0:34:1732 mins ago0x46e639a67fdbeb45bf6c85aae8c462f2ef659440 IN  Sunflower Farmers: SFF Token0 MATIC0.000060852501 2.500000042
0x9c79a2dfa3fd9d71f373bdbf321aa18bc023e6dd2670806fe9f2b3bf8ef3383aApprove242842652022-01-29 0:29:2537 mins ago0x64a2475f6a38a82de2c45b4cd43e316ac891dbc2 IN  Sunflower Farmers: SFF Token0 MATIC0.001515079375 32.495000001
0x08220a697f08b10bd635278e605c04c92fbced28de92e4b355fa192530fd1bd2Transfer242842222022-01-29 0:27:5538 mins ago0xa755a9d102fbfb216a525aeade3881be0d5c801e IN  Sunflower Farmers: SFF Token0 MATIC0.00090062655730.069999568
0x97793ba271f8c3a0a21f9d09982a695bc5b57602bc5c453482428de6c42a40efTransfer242840802022-01-29 0:23:0343 mins ago0xa427ab38e951334c429147217852f227e07724de IN  Sunflower Farmers: SFF Token0 MATIC0.0000630469482.105003135
0x71dcc8de90d5b4d04e4114d142b6cc926b3caf8e814e9d521541b4fcb467004eApprove242834962022-01-29 0:02:591 hr 3 mins ago0x974e3e7b880ec98a8520aad70a349eacf37c7f7b IN  Sunflower Farmers: SFF Token0 MATIC0.001404261494 30.118209
0x6a4bd1c8469f8a7c0672e78f07ea41306c2d0a959d37b9e2087ea7b2ef3307d9Transfer242834672022-01-29 0:02:011 hr 4 mins ago0xba7ec7e11ebf13804a73b8d00fbdc8d997d6ea4c IN  Sunflower Farmers: SFF Token0 MATIC0.00134725545
0xb044c485228e54240a52cc0c6bb49c4888439af27cad61c7222acaf1c02384ccTransfer242834662022-01-29 0:01:591 hr 4 mins ago0x9ab53298a440074665e7295debbcee576fd0b3fc IN  Sunflower Farmers: SFF Token0 MATIC0.00134725545
[ 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.