Contract 0xfa7d8c3CccC90c07c53feE45A7a333CEC40B441B

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x9b9ba869c0a002804b62b3b225ff08497d27108da3a6a3b1660e56ea32b3ed99Approve456982862022-08-26 4:01:4040 days 1 hr ago0x073306ef2e41e8d8daa7e108d059b29675170a3f IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.000066071917
0x2fbd0f75138a061a2ab82143b92fa051f15ac30fbbed255d7a5e6e12ab742614Approve451752772022-08-18 15:23:5747 days 14 hrs ago0x38d6f4ecc2e507c168b4924bf288cca651c4f7fe IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.00012638649
0x239fb189b89bea41ab8cd559145bc457050eb59469fcf3d8ecba746f56ff1f53Approve451752392022-08-18 15:23:1547 days 14 hrs ago0x38d6f4ecc2e507c168b4924bf288cca651c4f7fe IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.000127755223
0xc5d36724c21b48110492648d15f04cbdfd5f0f37e9871c8665a02e7befce8fc9Approve441515072022-08-03 17:05:3262 days 12 hrs ago0x6a5334e6c9352c1b5735969dd439e41bcf9b4da4 IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.000067571974
0xa59f6106f55556d83d427ed2f550b2a249099582fdc4fb7fb93c53bc249b1420Approve441514992022-08-03 17:05:2462 days 12 hrs ago0x6a5334e6c9352c1b5735969dd439e41bcf9b4da4 IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.000067571974
0x70cb12015b98acadecffea6e6b42041b98c619dad01ee5198b17c8535a2ca402Approve441506562022-08-03 16:48:3962 days 13 hrs ago0x6a5334e6c9352c1b5735969dd439e41bcf9b4da4 IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.0000642544
0x7bfd28e68118e5786de60c8f080233a1b1e9e68d51a0010ff5fa51ae5d8e610cApprove441506502022-08-03 16:48:3262 days 13 hrs ago0x6a5334e6c9352c1b5735969dd439e41bcf9b4da4 IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.0000642544
0xd8162adbd27e9fceec9b5645b0f3da298dbcff0c679654a098356f150095c5f1Approve396785142022-06-03 8:41:43123 days 21 hrs ago0x6c173f28aa401f26191551b8c9c575db127cd1d6 IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.000140396762
0xa606c1e62984746ad2b5b0ea33e58bc9403528848624853801fabcda3f0a56ccApprove382237232022-05-14 12:50:45143 days 17 hrs ago0x1fb4820c368efa3282e696ca9aaed9c3cade2340 IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.125450630227
0x3229363df41c5837a9bf6127df6692c1957413d460fd15fa2ae064238e5ea7d4Approve374931442022-05-04 0:18:03154 days 5 hrs ago0xff1fc55b3b5d2cc62b82d1f77da88355e8175254 IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.00522833508
0xa1e4c20f0d7a1cf6de3ccb84a567fab46fcaa02ed0223119e187cd8307eb9199Approve367903182022-04-23 15:49:24164 days 14 hrs ago0x8137b2f5793cd2c65aa7087536094135523fa57f IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.0020384
0xffb2f8aabaf9081fccb88242913d39bb6d6c5704485c355e400c5411f367b4cbApprove364529782022-04-19 12:27:24168 days 17 hrs ago0xfcad996b1dd841914849fde990f4a8db75204c88 IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.004712921337
0x7cdcfaa6aa81dbbb5d96eeef3d8712d9e020419caad957dcde8b543a317ec3afApprove361577432022-04-15 23:21:05172 days 6 hrs ago0xbd485523bb960b27c38d3f9ad47f0d3a384e69ce IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.00383096166
0x3d3b76ed6ef5856a5810c87c2705a1d2608a830db4de62367e3080cbe9e7a24bApprove361570302022-04-15 23:07:53172 days 6 hrs ago0xbd485523bb960b27c38d3f9ad47f0d3a384e69ce IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.0040351429
0x3279de25d464103f005b5da005a98d760bf31df30f8d9bdb28126bc2f19dd570Approve361564682022-04-15 22:58:36172 days 6 hrs ago0xbd485523bb960b27c38d3f9ad47f0d3a384e69ce IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.002552298268
0x400d948e42db04c2eed2be6e53fb64044f76ddd35f68685ffd135d8774055f99Approve357565312022-04-11 0:53:49177 days 5 hrs ago0x4b233119a623880b2bbad5d97f5d80c416e9c322 IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.01105675852
0x74d0c8a3913ccd9790f7b58cde55722807bda0babc729048f67059e43d6a5709Approve351650112022-04-03 23:43:52184 days 6 hrs ago0x1d4e027c56f870c27c660c4a201735afb142b924 IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.006252077954
0x0d56ecf69581572f2311d1e3062e926e20127121be6a29f7cfb633a0bd3c28acApprove343555722022-03-25 10:37:07193 days 19 hrs ago0x904beccbdde4436696f14d846008818495aa616c IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.004557383799
0x13181dc5fc5dbdbbb3032881c9aaac6992f439f8691e8fa15ebc94e05cc0f63dApprove342665592022-03-24 9:22:01194 days 20 hrs ago0xe20ecf4fa68b29bceb43b8ca9452294f36ad80f1 IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.005466827529
0x67091671f02eacc70e77a42f57382f0d87b55d3831294084f7a70a87751ac5e2Approve336997802022-03-17 22:29:39201 days 7 hrs ago0x08636f95c594ae53080eb78462454bbbacdf37ed IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.002986356549
0xddbc5f7506c3dc9f64e1ea3ef56d88a257add4332ba2840fefd96a0657c824e2Approve334318152022-03-14 21:13:53204 days 8 hrs ago0x1b4a217d43c7db744139f109ce3a78455a05dcdd IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.003942304912
0xc06e66132fa1149ebe3010dd28e928e56da040aa23b444170f719da8e953e17aApprove334289702022-03-14 20:15:01204 days 9 hrs ago0x1b4a217d43c7db744139f109ce3a78455a05dcdd IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.004254500432
0x33989674eaf2a467b45ecfc8c72c9444139a1e11da678e712b1a60915ae79a6bApprove334285512022-03-14 20:09:09204 days 9 hrs ago0x1b4a217d43c7db744139f109ce3a78455a05dcdd IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.004631780608
0x89e5e91a392aa695e782426c02e199afe9b4380ff92fe455247f4b6ca4dfada9Approve324772922022-03-03 22:45:22215 days 7 hrs ago0x295863b97f9d139eb078b3dd5aa7430c58113d99 IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.018134099797
0x8fbbc90f251a42cf51f4e053ea77b456fb99f7c683b24a2b6b677e3a71292329Approve317100082022-02-22 15:26:52224 days 14 hrs ago0xd6980b8f28d0b6fa89b7476841e341c57508a3f6 IN  0xfa7d8c3cccc90c07c53fee45a7a333cec40b441b0 FTM0.009161424
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x9bc50beab2da4d64133149d1c41e7716349ac2c46c0bde350a33237d0243740e185176902021-10-07 12:14:45362 days 17 hrs ago 0x328cda75549b693d6a41b8f84e20e5b01247bba5  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
fSapphire

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2021-10-07
*/

/**
 *Submitted for verification at FtmScan.com on 2021-10-07
*/

/**
 *Submitted for verification at FtmScan.com on 2021-10-07
*/

/**
 *Submitted for verification at FtmScan.com on 2021-09-19
*/

//SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

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

/**
 * @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, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @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) {
        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, reverting 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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * 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);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * 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);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


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

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

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

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

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view returns (address);

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


contract ERC20 is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

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

    uint256 public totalMinted;
    uint256 public constant maxMintCap = 10000 * (10 ** 18);

    /**
     * @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 bep token owner.
     */
    function getOwner() external override view returns (address) {
        return owner();
    }

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

    /**
     * @dev Returns the token decimals.
     */
    function decimals() public override view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev Returns the token symbol.
     */
    function symbol() public override view returns (string memory) {
        return _symbol;
    }

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

    function maxSupply() public  pure returns (uint256) {
        return maxMintCap;
    }

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

    /**
     * @dev See {ERC20-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 override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    /**
     * @dev See {ERC20-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 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 {ERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public 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 {ERC20-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 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");

        _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 {
        require(account != address(0), "ERC20: mint to the zero address");
        require(totalMinted.add(amount) <= maxMintCap, "Max supply reached");
        
        _totalSupply = _totalSupply.add(amount);
        totalMinted = totalMinted.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is 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 {
        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);
    }

}

// fSapphire.
contract fSapphire is ERC20('FTM-Sapphire', 'SAPPHIRE') {
    
    //Pre-minting of X number of tokens for initial liquidity injection
    constructor () public {
        _mint(msg.sender, 50 * 10 ** 18);
    }

    address public masterchef;
    
    // @dev Throws if called by any account other than the Masterchef.
    modifier onlyMasterchef() {
        require(msg.sender == masterchef, "Caller is not the Masterchef");
        _;
    }
    
    /// @notice Creates `_amount` token to `_to`. Must only be called by the owner (MasterChef).
    function mint(address _to, uint256 _amount) public onlyMasterchef {
        _mint(_to, _amount);
    }

    function initializeMC(address _masterchef) public onlyOwner {
        require(masterchef == address(0), "Already initialized");
        require(_masterchef != address(0), "INCORRECT INPUT");
        require(_masterchef != address(msg.sender), "INCORRECT INPUT");
        require(_masterchef != address(this), "INCORRECT INPUT");
        
        masterchef = _masterchef;
        
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":[],"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":"_masterchef","type":"address"}],"name":"initializeMC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600c81526020017f46544d2d536170706869726500000000000000000000000000000000000000008152506040518060400160405280600881526020017f53415050484952450000000000000000000000000000000000000000000000008152506000620000906200019f60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350816004908051906020019062000146929190620004ba565b5080600590805190602001906200015f929190620004ba565b506012600660006101000a81548160ff021916908360ff160217905550505062000199336802b5e3af16b1880000620001a760201b60201c565b62000560565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200024b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b69021e19e0c9bab240000062000272826007546200043160201b620014571790919060201c565b1115620002e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4d617820737570706c792072656163686564000000000000000000000000000081525060200191505060405180910390fd5b62000303816003546200043160201b620014571790919060201c565b60038190555062000325816007546200043160201b620014571790919060201c565b6007819055506200038481600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200043160201b620014571790919060201c565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600080828401905083811015620004b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004fd57805160ff19168380011785556200052e565b828001600101855582156200052e579182015b828111156200052d57825182559160200191906001019062000510565b5b5090506200053d919062000541565b5090565b5b808211156200055c57600081600090555060010162000542565b5090565b611e1b80620005706000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80637feb839d116100b8578063a457c2d71161007c578063a457c2d714610565578063a9059cbb146105c9578063d5abeb011461062d578063dd62ed3e1461064b578063f2fde38b146106c3578063fb1db2781461070757610137565b80637feb839d1461043e578063893d20e81461045c5780638da5cb5b1461049057806395d89b41146104c4578063a2309ff81461054757610137565b806339509351116100ff57806339509351146102e65780633ccbaf031461034a57806340c10f191461038e57806370a08231146103dc578063715018a61461043457610137565b806306fdde031461013c578063095ea7b3146101bf57806318160ddd1461022357806323b872dd14610241578063313ce567146102c5575b600080fd5b61014461073b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610184578082015181840152602081019050610169565b50505050905090810190601f1680156101b15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61020b600480360360408110156101d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107dd565b60405180821515815260200191505060405180910390f35b61022b6107fb565b6040518082815260200191505060405180910390f35b6102ad6004803603606081101561025757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610805565b60405180821515815260200191505060405180910390f35b6102cd6108de565b604051808260ff16815260200191505060405180910390f35b610332600480360360408110156102fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108f5565b60405180821515815260200191505060405180910390f35b61038c6004803603602081101561036057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109a8565b005b6103da600480360360408110156103a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d46565b005b61041e600480360360208110156103f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e17565b6040518082815260200191505060405180910390f35b61043c610e60565b005b610446610fcd565b6040518082815260200191505060405180910390f35b610464610fdb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610498610fea565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104cc611013565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561050c5780820151818401526020810190506104f1565b50505050905090810190601f1680156105395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61054f6110b5565b6040518082815260200191505060405180910390f35b6105b16004803603604081101561057b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110bb565b60405180821515815260200191505060405180910390f35b610615600480360360408110156105df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611188565b60405180821515815260200191505060405180910390f35b6106356111a6565b6040518082815260200191505060405180910390f35b6106ad6004803603604081101561066157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111b8565b6040518082815260200191505060405180910390f35b610705600480360360208110156106d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061123f565b005b61070f611431565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107d35780601f106107a8576101008083540402835291602001916107d3565b820191906000526020600020905b8154815290600101906020018083116107b657829003601f168201915b5050505050905090565b60006107f16107ea6114df565b84846114e7565b6001905092915050565b6000600354905090565b60006108128484846116de565b6108d38461081e6114df565b6108ce85604051806060016040528060288152602001611d5060289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108846114df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119989092919063ffffffff16565b6114e7565b600190509392505050565b6000600660009054906101000a900460ff16905090565b600061099e6109026114df565b8461099985600260006109136114df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461145790919063ffffffff16565b6114e7565b6001905092915050565b6109b06114df565b73ffffffffffffffffffffffffffffffffffffffff166109ce610fea565b73ffffffffffffffffffffffffffffffffffffffff1614610a57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f416c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f494e434f525245435420494e505554000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f494e434f525245435420494e505554000000000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f494e434f525245435420494e505554000000000000000000000000000000000081525060200191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43616c6c6572206973206e6f7420746865204d6173746572636865660000000081525060200191505060405180910390fd5b610e138282611a52565b5050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e686114df565b73ffffffffffffffffffffffffffffffffffffffff16610e86610fea565b73ffffffffffffffffffffffffffffffffffffffff1614610f0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b69021e19e0c9bab240000081565b6000610fe5610fea565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110ab5780601f10611080576101008083540402835291602001916110ab565b820191906000526020600020905b81548152906001019060200180831161108e57829003601f168201915b5050505050905090565b60075481565b600061117e6110c86114df565b8461117985604051806060016040528060258152602001611dc160259139600260006110f26114df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119989092919063ffffffff16565b6114e7565b6001905092915050565b600061119c6111956114df565b84846116de565b6001905092915050565b600069021e19e0c9bab2400000905090565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6112476114df565b73ffffffffffffffffffffffffffffffffffffffff16611265610fea565b73ffffffffffffffffffffffffffffffffffffffff16146112ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611374576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611ce26026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808284019050838110156114d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561156d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180611d9d6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611d086022913960400191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611764576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611d786025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611cbf6023913960400191505060405180910390fd5b61185681604051806060016040528060268152602001611d2a60269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119989092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118eb81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461145790919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290611a45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a0a5780820151818401526020810190506119ef565b50505050905090810190601f168015611a375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b69021e19e0c9bab2400000611b158260075461145790919063ffffffff16565b1115611b89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4d617820737570706c792072656163686564000000000000000000000000000081525060200191505060405180910390fd5b611b9e8160035461145790919063ffffffff16565b600381905550611bb98160075461145790919063ffffffff16565b600781905550611c1181600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461145790919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204b1c93055760b503db5036e4a1461dc272f6f263b02a99e3cd9cdf25abe1512064736f6c634300060c0033

Deployed ByteCode Sourcemap

29623:1074:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23017:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24600:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23493:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25232:397;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23176:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26037:210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30300:394;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30188:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23751:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10207:148;;;:::i;:::-;;22259:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22860:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9556:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23333:96;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22226:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26749:311;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24082:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23601:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24311:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10510:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29846:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23017:92;23063:13;23096:5;23089:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23017:92;:::o;24600:161::-;24675:4;24692:39;24701:12;:10;:12::i;:::-;24715:7;24724:6;24692:8;:39::i;:::-;24749:4;24742:11;;24600:161;;;;:::o;23493:100::-;23546:7;23573:12;;23566:19;;23493:100;:::o;25232:397::-;25364:4;25381:36;25391:6;25399:9;25410:6;25381:9;:36::i;:::-;25428:171;25451:6;25472:12;:10;:12::i;:::-;25499:89;25537:6;25499:89;;;;;;;;;;;;;;;;;:11;:19;25511:6;25499:19;;;;;;;;;;;;;;;:33;25519:12;:10;:12::i;:::-;25499:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;25428:8;:171::i;:::-;25617:4;25610:11;;25232:397;;;;;:::o;23176:92::-;23226:5;23251:9;;;;;;;;;;;23244:16;;23176:92;:::o;26037:210::-;26117:4;26134:83;26143:12;:10;:12::i;:::-;26157:7;26166:50;26205:10;26166:11;:25;26178:12;:10;:12::i;:::-;26166:25;;;;;;;;;;;;;;;:34;26192:7;26166:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;26134:8;:83::i;:::-;26235:4;26228:11;;26037:210;;;;:::o;30300:394::-;9787:12;:10;:12::i;:::-;9776:23;;:7;:5;:7::i;:::-;:23;;;9768:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30401:1:::1;30379:24;;:10;;;;;;;;;;;:24;;;30371:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30469:1;30446:25;;:11;:25;;;;30438:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30533:10;30510:34;;:11;:34;;;;30502:62;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30606:4;30583:28;;:11;:28;;;;30575:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30665:11;30652:10;;:24;;;;;;;;;;;;;;;;;;30300:394:::0;:::o;30188:104::-;30015:10;;;;;;;;;;;30001:24;;:10;:24;;;29993:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30265:19:::1;30271:3;30276:7;30265:5;:19::i;:::-;30188:104:::0;;:::o;23751:119::-;23817:7;23844:9;:18;23854:7;23844:18;;;;;;;;;;;;;;;;23837:25;;23751:119;;;:::o;10207:148::-;9787:12;:10;:12::i;:::-;9776:23;;:7;:5;:7::i;:::-;:23;;;9768:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10314:1:::1;10277:40;;10298:6;::::0;::::1;;;;;;;;10277:40;;;;;;;;;;;;10345:1;10328:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;10207:148::o:0;22259:55::-;22296:18;22259:55;:::o;22860:94::-;22912:7;22939;:5;:7::i;:::-;22932:14;;22860:94;:::o;9556:87::-;9602:7;9629:6;;;;;;;;;;;9622:13;;9556:87;:::o;23333:96::-;23381:13;23414:7;23407:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23333:96;:::o;22226:26::-;;;;:::o;26749:311::-;26834:4;26851:179;26874:12;:10;:12::i;:::-;26901:7;26923:96;26962:15;26923:96;;;;;;;;;;;;;;;;;:11;:25;26935:12;:10;:12::i;:::-;26923:25;;;;;;;;;;;;;;;:34;26949:7;26923:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;26851:8;:179::i;:::-;27048:4;27041:11;;26749:311;;;;:::o;24082:167::-;24160:4;24177:42;24187:12;:10;:12::i;:::-;24201:9;24212:6;24177:9;:42::i;:::-;24237:4;24230:11;;24082:167;;;;:::o;23601:88::-;23644:7;22296:18;23664:17;;23601:88;:::o;24311:143::-;24392:7;24419:11;:18;24431:5;24419:18;;;;;;;;;;;;;;;:27;24438:7;24419:27;;;;;;;;;;;;;;;;24412:34;;24311:143;;;;:::o;10510:244::-;9787:12;:10;:12::i;:::-;9776:23;;:7;:5;:7::i;:::-;:23;;;9768:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10619:1:::1;10599:22;;:8;:22;;;;10591:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10709:8;10680:38;;10701:6;::::0;::::1;;;;;;;;10680:38;;;;;;;;;;;;10738:8;10729:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;10510:244:::0;:::o;29846:25::-;;;;;;;;;;;;;:::o;3872:179::-;3930:7;3950:9;3966:1;3962;:5;3950:17;;3991:1;3986;:6;;3978:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4042:1;4035:8;;;3872:179;;;;:::o;814:106::-;867:15;902:10;895:17;;814:106;:::o;29227:372::-;29372:1;29355:19;;:5;:19;;;;29347:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29453:1;29434:21;;:7;:21;;;;29426:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29537:6;29507:11;:18;29519:5;29507:18;;;;;;;;;;;;;;;:27;29526:7;29507:27;;;;;;;;;;;;;;;:36;;;;29575:7;29559:32;;29568:5;29559:32;;;29584:6;29559:32;;;;;;;;;;;;;;;;;;29227:372;;;:::o;27550:513::-;27708:1;27690:20;;:6;:20;;;;27682:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27792:1;27771:23;;:9;:23;;;;27763:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27867;27889:6;27867:71;;;;;;;;;;;;;;;;;:9;:17;27877:6;27867:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;27847:9;:17;27857:6;27847:17;;;;;;;;;;;;;;;:91;;;;27972:32;27997:6;27972:9;:20;27982:9;27972:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;27949:9;:20;27959:9;27949:20;;;;;;;;;;;;;;;:55;;;;28037:9;28020:35;;28029:6;28020:35;;;28048:6;28020:35;;;;;;;;;;;;;;;;;;27550:513;;;:::o;6699:166::-;6785:7;6818:1;6813;:6;;6821:12;6805:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6856:1;6852;:5;6845:12;;6699:166;;;;;:::o;28344:443::-;28439:1;28420:21;;:7;:21;;;;28412:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22296:18;28496:23;28512:6;28496:11;;:15;;:23;;;;:::i;:::-;:37;;28488:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28592:24;28609:6;28592:12;;:16;;:24;;;;:::i;:::-;28577:12;:39;;;;28641:23;28657:6;28641:11;;:15;;:23;;;;:::i;:::-;28627:11;:37;;;;28696:30;28719:6;28696:9;:18;28706:7;28696:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;28675:9;:18;28685:7;28675:18;;;;;;;;;;;;;;;:51;;;;28763:7;28742:37;;28759:1;28742:37;;;28772:6;28742:37;;;;;;;;;;;;;;;;;;28344:443;;:::o

Swarm Source

ipfs://4b1c93055760b503db5036e4a1461dc272f6f263b02a99e3cd9cdf25abe15120
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
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.