Contract 0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83 13

 

Contract Overview

Fantom Finance: Wrapped Fantom Token
Balance:
352,855,915.83636118014655709 FTM

FTM Value:
$88,072,836.59 (@ $0.25/FTM)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x2ad348b1569e0c71f586778d4a8d65a7a0fd1e55aeed7efd680a53362d7a7c94Approve519209082022-12-05 15:02:314 mins ago0x6a5f44d24dca8417db339203d9e07d23321f030b IN  Fantom Finance: Wrapped Fantom Token0 FTM0.16238635
0x2c53eec42fe15cc00ec9f975b425f9ccd41c2872690cb490a3db1782f15c1409Deposit519208892022-12-05 15:01:305 mins ago0x6a5f44d24dca8417db339203d9e07d23321f030b IN  Fantom Finance: Wrapped Fantom Token72 FTM0.014818512
0x3f4bc7926dce6dba48ff92fadebaf91d7766aeb076b682c3ccb95001365666d0Withdraw519208232022-12-05 14:59:107 mins ago0x7b2c7624cb6c1b1cf6d3d25d916b1588bccdaa9d IN  Fantom Finance: Wrapped Fantom Token0 FTM0.000909319016
0x6a5109312378c57fadfccfe0af6483962c5317150186c0418953819abb105049Deposit519202112022-12-05 14:44:4522 mins ago0x7904844e5c54eb086404dc8d642cded7328f4a05 IN  Fantom Finance: Wrapped Fantom Token1,000 FTM0.007125993116
0x35171f0292078e86ab3c6c564e4f6f144e6462f4382b490ca83974d34c074af4Approve519200052022-12-05 14:38:5128 mins ago0x6962d791a0a6df1b9c8759d9751544c99a621f05 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.004192166248
0x245442e74cdb54435f78b7f26673c9668b91ebfcf6abb22ea72e278aba369f33Approve519197332022-12-05 14:30:0637 mins ago0xba14977adcfc73f1552c5c510b9bff83d95f346b IN  Fantom Finance: Wrapped Fantom Token0 FTM0.004148692917
0x47821a6bcd7b399177bbc26c54c0dda469eda6b1b25146e8e143dae04dbcb846Withdraw519197162022-12-05 14:29:2237 mins ago0x289db8fc716396b3fcf330fb100830327955df6c IN  Fantom Finance: Wrapped Fantom Token0 FTM0.00084634
0xae3c5e659212c4d1a69e8f58913f79c0f588674caffe4fd69cf980b767a25c0dWithdraw519196802022-12-05 14:28:2838 mins ago0x5451cf07f9ce7f40dab2412c00ac2f5721387c6d IN  Fantom Finance: Wrapped Fantom Token0 FTM0.03466056
0xeeb3aae3c913261d5ac60dae2f3a54d05d679d300d08fae26abb7963df3753fcApprove519195872022-12-05 14:26:0641 mins ago0xb4a600f5f46365df8ed665a249519dca095fa213 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.001568431468
0xeb83554366ae3247704683cbb1a082c0283f655961d0724a7bf864fe01472c96Approve519195852022-12-05 14:26:0441 mins ago0x4df89d5c65d87f83e4d6f34f69160c01600f26ab IN  Fantom Finance: Wrapped Fantom Token0 FTM0.005704891048
0x52784e633066bf3ebe3e9d0c301ffea7a32981b78961b2c09063daec38eb4300Withdraw519194302022-12-05 14:20:5946 mins ago0x724c28471608c946345165e9eb7b80e8736ad9af IN  Fantom Finance: Wrapped Fantom Token0 FTM0.00116769
0x820fc7d83b2cd83b482b8626fbca0a80ca3005a441b776fd214dc74c1e25b94dApprove519194002022-12-05 14:19:2947 mins ago0x4df89d5c65d87f83e4d6f34f69160c01600f26ab IN  Fantom Finance: Wrapped Fantom Token0 FTM0.377581126891
0x401626eddd9343aab9320e4f6850a57f2a21e993332695a7338f00f660c70033Approve519193882022-12-05 14:18:5348 mins ago0xd48f4cfe2dafdec983cda6e18b27d72f8317e9aa IN  Fantom Finance: Wrapped Fantom Token0 FTM0.329857011
0x564e366222007ef5252a12c76e3d67cbb40efb10cfe8186001579280b0902d94Approve519193762022-12-05 14:18:0948 mins ago0xda551af269efc9b6dadd7fe3c258907062118dd8 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.37918664844
0xec800cd70642bcf4807add184f9a968f0ad86dffee23b702063e47b90519625dApprove519193502022-12-05 14:16:1650 mins ago0xd48f4cfe2dafdec983cda6e18b27d72f8317e9aa IN  Fantom Finance: Wrapped Fantom Token0 FTM0.304299567
0xaba472de716846b1a38997c9e8e6de5dc594367009347882837950c85d40f78eApprove519193442022-12-05 14:16:0551 mins ago0xd48f4cfe2dafdec983cda6e18b27d72f8317e9aa IN  Fantom Finance: Wrapped Fantom Token0 FTM0.39312390632
0x8adb32958fa7a2666c16b9c6d1a465dfcc97b15ed3458aa9c623e4738ce9f9d3Withdraw519193122022-12-05 14:14:0852 mins ago0x65f5372796c5638835fdaf46e723eed902dd4b8f IN  Fantom Finance: Wrapped Fantom Token0 FTM0.063519617734
0x545c1aad0a304b2f70c61e93c8e5bde8bc9cc9896697875ee55fc02df1c68fbdWithdraw519192352022-12-05 14:09:3457 mins ago0xd16b3d3b25dba5b0749793b2439bf14c654b3c1d IN  Fantom Finance: Wrapped Fantom Token0 FTM0.007951561956
0xa4733629389b6d8fabc6903e5c857c5364be2d7e07b7519933d3620fe607a598Withdraw519190632022-12-05 14:03:461 hr 3 mins ago0x808e5c75e97ff2f75b9ec86930e4c550723aef1a IN  Fantom Finance: Wrapped Fantom Token0 FTM0.001931460794
0x283110efe1c9ccc872ae2d80e74389b45c7599e2c9b1ea46241c0301bdc29a82Withdraw519190382022-12-05 14:02:381 hr 4 mins ago0x2a62fb5b6549c3ab5b93cc8707d6a16ba1f16f5d IN  Fantom Finance: Wrapped Fantom Token0 FTM0.007005904
0x8e1c788b146bf14864db524afb15360c1c68d519d5ca72a27d4e018c00d496b6Withdraw519188242022-12-05 13:53:361 hr 13 mins ago0x5b2ee21f698bbdf6bdf477b1b2423438f3f3ad99 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.001968748826
0x2cd2c249b20b2540bdfd73b9101872a81c051239131b4285afb8fbd8aa6c97a4Approve519188232022-12-05 13:53:351 hr 13 mins ago0x8039f3aa709fec29fdc5f075449b23ab609a6998 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.00079884599
0xf7a487f5d1ba2458ab8ddcafe594a659e2ff6051770f1ce8cacffeb3d2b2346dApprove519186512022-12-05 13:45:041 hr 22 mins ago0x0198db21cc1ca21bc8cb01d72c19ceaf3afbfdc2 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.010953749
0xe5144c64df216618c457622cf7975c68e8b828b15eff4e8bf02d4777705e69caDeposit519186372022-12-05 13:44:261 hr 22 mins ago0x0198db21cc1ca21bc8cb01d72c19ceaf3afbfdc2 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.009598095
0x1b3ebf9686c0fe1c519caba43e6b4b1ca24aae784e861883a6eacdba046b0f40Deposit519186162022-12-05 13:43:201 hr 23 mins ago0x0198db21cc1ca21bc8cb01d72c19ceaf3afbfdc2 IN  Fantom Finance: Wrapped Fantom Token770 FTM0.007908301819
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x0833647b5fae17be85328007c504402d6e932bb0a4e7f17686b325cdc3fdff27519209812022-12-05 15:06:5116 secs ago SushiSwap: V2 Router Fantom Finance: Wrapped Fantom Token40 FTM
0xd0170eee9ad13e092317a8ce0bbbc99a295547232092b3f5237a2886a55726d8519209792022-12-05 15:06:4720 secs ago Fantom Finance: Wrapped Fantom Token SpookySwap: Router95.856832220977577192 FTM
0xe4aff10001bf06d24df51b09ceb225ba774212f5da41a16bd5c951632bca977d519209772022-12-05 15:06:4225 secs ago Fantom Finance: Wrapped Fantom Token 0x5772856f341db2bb1decab7f2d4e2288e4a951be24.230021498756531015 FTM
0xe5374e69334b649840618241ec701cc22eb7620c6dc9811c3f96694e1959d289519209772022-12-05 15:06:4225 secs ago Fantom Finance: Wrapped Fantom Token 0x5c86e12dcf3b9af60351783ff78ae694666b697b27.442321113384311573 FTM
0xc7489b1b4e630aae5d71af20e3602d730807737efc3d07935f65913ac2f9f65c519209762022-12-05 15:06:3532 secs ago Fantom Finance: Wrapped Fantom Token 0x8afc0f9bdc5dca9f0408df03a03520bfa98a15af0.0001009201846711 FTM
0xc7489b1b4e630aae5d71af20e3602d730807737efc3d07935f65913ac2f9f65c519209762022-12-05 15:06:3532 secs ago 0x8afc0f9bdc5dca9f0408df03a03520bfa98a15af Fantom Finance: Wrapped Fantom Token216 FTM
0x37513c643498a8047779f3c5903d275ea515dd855031274d205318e1daf81d73519209752022-12-05 15:06:3433 secs ago Fantom Finance: Wrapped Fantom Token 0x84749efa89f179ef0929ac2a8d2bd1688d3db67466.825447322741506322 FTM
0x214c1810830d416853261bcfa30538b6ed16ac7a2fb0f89b18d59ede310fed8c519209722022-12-05 15:06:2443 secs ago Fantom Finance: Wrapped Fantom Token 0x8afc0f9bdc5dca9f0408df03a03520bfa98a15af71.0712669284734074 FTM
0x3a89f62dc0eb74001469312df9b326384ffd014c702d8ee73be563c405b68fd2519209722022-12-05 15:06:2443 secs ago Fantom Finance: Wrapped Fantom Token 0x31f63a33141ffee63d4b26755430a390acdd8a4d291.614375997409841073 FTM
0xfe243271d727934227c3d59af8817096cbdb1e4891028d6a16aeb94fbfdb46fc519209662022-12-05 15:06:021 min ago Fantom Finance: Wrapped Fantom Token 0x8afc0f9bdc5dca9f0408df03a03520bfa98a15af0.000020210359643182 FTM
0xfe243271d727934227c3d59af8817096cbdb1e4891028d6a16aeb94fbfdb46fc519209662022-12-05 15:06:021 min ago 0x8afc0f9bdc5dca9f0408df03a03520bfa98a15af Fantom Finance: Wrapped Fantom Token41 FTM
0xa4a073494dd8c0c9745e952e2207a93f0eaf0c54393ef3f4160502ad5055099f519209662022-12-05 15:06:021 min ago 0x4c860b7eba1c0016b9affbbb9f383887e3244000 Fantom Finance: Wrapped Fantom Token30 FTM
0xb3d739f3d7f5e6774f41ba7f8aa06e2be11b3cf75c7ea1de5aaf3cfdee787908519209652022-12-05 15:05:511 min ago Fantom Finance: Wrapped Fantom Token SpookySwap: Router99.403692987932876225 FTM
0x1b5aed41398fcc947ecb9a70480f2109e4c4a8891e6d6f5357a66b81093a7633519209612022-12-05 15:05:421 min ago Fantom Finance: Wrapped Fantom Token0xdef171fe48cf0115b1d80b88dc8eab59176fee5758.938787785860177267 FTM
0x1b5aed41398fcc947ecb9a70480f2109e4c4a8891e6d6f5357a66b81093a7633519209612022-12-05 15:05:421 min ago Fantom Finance: Wrapped Fantom Token0xdef171fe48cf0115b1d80b88dc8eab59176fee5739.15976593608796823 FTM
0x1b5aed41398fcc947ecb9a70480f2109e4c4a8891e6d6f5357a66b81093a7633519209612022-12-05 15:05:421 min ago Fantom Finance: Wrapped Fantom Token0xdef171fe48cf0115b1d80b88dc8eab59176fee5776.634016861733227335 FTM
0x6058a283c9a2ce8aeeb53fe898bad4b4cb7d66322a6817dacb7deec01234cd45519209602022-12-05 15:05:411 min ago Fantom Finance: Wrapped Fantom Token SpookySwap: Router136.950038765059784835 FTM
0xec70bff74909f67f5e3474f8642901d7c119ab56bf1d38a49ca387051e09fe79519209402022-12-05 15:04:412 mins ago 0x31f63a33141ffee63d4b26755430a390acdd8a4d Fantom Finance: Wrapped Fantom Token56 FTM
0x71097b86a6896e11115614e9c32e16ba2a0915000c4f8c7d5f8f63bf947f385f519209372022-12-05 15:04:302 mins ago 0xa6cf369dd0ea0192dd7e5e55366a34bbe403755b Fantom Finance: Wrapped Fantom Token29,999.9 FTM
0x8420e8f665237b08ed12e885c5cdc958c2509533ba14fd7a6116289e90f051fd519209342022-12-05 15:04:172 mins ago SpookySwap: Router Fantom Finance: Wrapped Fantom Token298.333333333333311488 FTM
0x14c3ff2aa2b0cbe22c3e30f29161e1d3f5c63493f81aa10a9a440420a77aab09519209342022-12-05 15:04:172 mins ago 0x31f63a33141ffee63d4b26755430a390acdd8a4d Fantom Finance: Wrapped Fantom Token2,940 FTM
0x6b07581d3191955ceca3d90dea92b7183e03456d8e21d80194ede01cb3166532519209332022-12-05 15:04:112 mins ago 0x31f63a33141ffee63d4b26755430a390acdd8a4d Fantom Finance: Wrapped Fantom Token95 FTM
0x7af7fd0b055c742f04e3fdcc9783cfce13e03d421412be25ad7682e099f3e07e519209332022-12-05 15:04:112 mins ago Fantom Finance: Wrapped Fantom Token 0xf171c89f089245959db5f296e514feed0f7af08a200.797073159144116607 FTM
0xe7192c0848064060821665ff45f20fd948f91af30a318269d88ecbdd1870eff6519209272022-12-05 15:03:543 mins ago Fantom Finance: Wrapped Fantom Token 0x31f63a33141ffee63d4b26755430a390acdd8a4d217.000335843101219233 FTM
0xdfb2eb750118c7c86e583fd8ef4d61cf5adfa7dcc9a4bf9d6d9243a525071623519209262022-12-05 15:03:463 mins ago Fantom Finance: Wrapped Fantom Token SpookySwap: Router109.261397884023728065 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WrappedFtm

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 5000000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

pragma solidity ^0.5.0;

contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

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

library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev Give an account access to this role.
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    /**
     * @dev Remove an account's access to this role.
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    /**
     * @dev Check if an account has this role.
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}

contract PauserRole is Context {
    using Roles for Roles.Role;

    event PauserAdded(address indexed account);
    event PauserRemoved(address indexed account);

    Roles.Role private _pausers;

    constructor () internal {
        _addPauser(_msgSender());
    }

    modifier onlyPauser() {
        require(isPauser(_msgSender()), "PauserRole: caller does not have the Pauser role");
        _;
    }

    function isPauser(address account) public view returns (bool) {
        return _pausers.has(account);
    }

    function addPauser(address account) public onlyPauser {
        _addPauser(account);
    }

    function renouncePauser() public {
        _removePauser(_msgSender());
    }

    function _addPauser(address account) internal {
        _pausers.add(account);
        emit PauserAdded(account);
    }

    function _removePauser(address account) internal {
        _pausers.remove(account);
        emit PauserRemoved(account);
    }
}

contract Pausable is Context, PauserRole {
    /**
     * @dev Emitted when the pause is triggered by a pauser (`account`).
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by a pauser (`account`).
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state. Assigns the Pauser role
     * to the deployer.
     */
    constructor () internal {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     */
    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     */
    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    /**
     * @dev Called by a pauser to pause, triggers stopped state.
     */
    function pause() public onlyPauser whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Called by a pauser to unpause, returns to normal state.
     */
    function unpause() public onlyPauser whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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.
     *
     * _Available since v2.4.0._
     */
    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.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        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.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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);
}

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

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view 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 returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public 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 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 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 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 {
        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");

        _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 {
        require(account != address(0), "ERC20: burn from the zero address");

        _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 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);
    }

    /**
     * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See {_burn} and {_approve}.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }
}

contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of
     * these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }

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

contract ERC20Pausable is ERC20, Pausable {
    function transfer(address to, uint256 value) public whenNotPaused returns (bool) {
        return super.transfer(to, value);
    }

    function transferFrom(address from, address to, uint256 value) public whenNotPaused returns (bool) {
        return super.transferFrom(from, to, value);
    }

    function approve(address spender, uint256 value) public whenNotPaused returns (bool) {
        return super.approve(spender, value);
    }

    function increaseAllowance(address spender, uint256 addedValue) public whenNotPaused returns (bool) {
        return super.increaseAllowance(spender, addedValue);
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public whenNotPaused returns (bool) {
        return super.decreaseAllowance(spender, subtractedValue);
    }
}

contract WrappedFtm is ERC20, ERC20Detailed, ERC20Pausable {
    // Error Code: No error.
    uint256 public constant ERR_NO_ERROR = 0x0;

    // Error Code: Non-zero value expected to perform the function.
    uint256 public constant ERR_INVALID_ZERO_VALUE = 0x01;

    // create instance of the wFTM token
    constructor () public ERC20Detailed("Wrapped Fantom", "WFTM", 18) {
    }

    // deposit wraps received FTM tokens as wFTM in 1:1 ratio by minting
    // the received amount of FTMs in wFTM on the sender's address.
    function deposit() public whenNotPaused payable returns (uint256) {
        // there has to be some value to be converted
        if (msg.value == 0) {
            return ERR_INVALID_ZERO_VALUE;
        }

        // we already received FTMs, mint the appropriate amount of wFTM
        _mint(msg.sender, msg.value);

        // all went well here
        return ERR_NO_ERROR;
    }

    // withdraw unwraps FTM tokens by burning specified amount
    // of wFTM from the caller address and sending the same amount
    // of FTMs back in exchange.
    function withdraw(uint256 amount) public whenNotPaused returns (uint256) {
        // there has to be some value to be converted
        if (amount == 0) {
            return ERR_INVALID_ZERO_VALUE;
        }

        // burn wFTM from the sender first to prevent re-entrance issue
        _burn(msg.sender, amount);

        // if wFTM were burned, transfer native tokens back to the sender
        msg.sender.transfer(amount);

        // all went well here
        return ERR_NO_ERROR;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PauserRemoved","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"constant":true,"inputs":[],"name":"ERR_INVALID_ZERO_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_NO_ERROR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604080518082018252600e81526d577261707065642046616e746f6d60901b6020808301918252835180850190945260048452635746544d60e01b90840152815191929160129162000068916003919062000210565b5081516200007e90600490602085019062000210565b506005805460ff191660ff9290921691909117905550620000b39050620000a4620000c3565b6001600160e01b03620000c816565b6007805460ff19169055620002b2565b335b90565b620000e38160066200011a60201b620018de1790919060201c565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6200012f82826001600160e01b03620001a716565b1562000182576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b038216620001f05760405162461bcd60e51b815260040180806020018281038252602281526020018062001e526022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200025357805160ff191683800117855562000283565b8280016001018555821562000283579182015b828111156200028357825182559160200191906001019062000266565b506200029192915062000295565b5090565b620000c591905b808211156200029157600081556001016200029c565b611b9080620002c26000396000f3fe60806040526004361061016a5760003560e01c80635c975abb116100cb5780638456cb591161007f578063a9059cbb11610059578063a9059cbb14610500578063d0e30db014610546578063dd62ed3e1461054e5761016a565b80638456cb591461049057806395d89b41146104a5578063a457c2d7146104ba5761016a565b80636ef8d66d116100b05780636ef8d66d146103fb57806370a082311461041057806382dc1ec4146104505761016a565b80635c975abb146103d15780636d7497b3146103e65761016a565b8063313ce56711610122578063395093511161010757806339509351146103345780633f4ba83a1461037a57806346fbf68e146103915761016a565b8063313ce567146102f457806335052d6e1461031f5761016a565b806318160ddd1161015357806318160ddd1461025357806323b872dd1461027a5780632e1a7d4d146102ca5761016a565b806306fdde031461016f578063095ea7b3146101f9575b600080fd5b34801561017b57600080fd5b50610184610596565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101be5781810151838201526020016101a6565b50505050905090810190601f1680156101eb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561020557600080fd5b5061023f6004803603604081101561021c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561064b565b604080519115158252519081900360200190f35b34801561025f57600080fd5b506102686106d1565b60408051918252519081900360200190f35b34801561028657600080fd5b5061023f6004803603606081101561029d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356106d7565b3480156102d657600080fd5b50610268600480360360208110156102ed57600080fd5b503561075f565b34801561030057600080fd5b50610309610823565b6040805160ff9092168252519081900360200190f35b34801561032b57600080fd5b5061026861082c565b34801561034057600080fd5b5061023f6004803603604081101561035757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610831565b34801561038657600080fd5b5061038f6108b0565b005b34801561039d57600080fd5b5061023f600480360360208110156103b457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a01565b3480156103dd57600080fd5b5061023f610a1a565b3480156103f257600080fd5b50610268610a23565b34801561040757600080fd5b5061038f610a28565b34801561041c57600080fd5b506102686004803603602081101561043357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a3a565b34801561045c57600080fd5b5061038f6004803603602081101561047357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a62565b34801561049c57600080fd5b5061038f610ace565b3480156104b157600080fd5b50610184610bf4565b3480156104c657600080fd5b5061023f600480360360408110156104dd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c73565b34801561050c57600080fd5b5061023f6004803603604081101561052357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610cf2565b610268610d71565b34801561055a57600080fd5b506102686004803603604081101561057157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610e03565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106405780601f1061061557610100808354040283529160200191610640565b820191906000526020600020905b81548152906001019060200180831161062357829003601f168201915b505050505090505b90565b60075460009060ff16156106c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6106ca8383610e3b565b9392505050565b60025490565b60075460009060ff161561074c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b610757848484610e58565b949350505050565b60075460009060ff16156107d457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b816107e15750600161081e565b6107eb3383610eff565b604051339083156108fc029084906000818181858888f19350505050158015610818573d6000803e3d6000fd5b50600090505b919050565b60055460ff1690565b600081565b60075460009060ff16156108a657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6106ca8383611049565b6108c06108bb6110aa565b610a01565b610915576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806119ea6030913960400191505060405180910390fd5b60075460ff1661098657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6109d76110aa565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190a1565b6000610a1460068363ffffffff6110ae16565b92915050565b60075460ff1690565b600181565b610a38610a336110aa565b611149565b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610a6d6108bb6110aa565b610ac2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806119ea6030913960400191505060405180910390fd5b610acb8161119e565b50565b610ad96108bb6110aa565b610b2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806119ea6030913960400191505060405180910390fd5b60075460ff1615610ba057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586109d76110aa565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106405780601f1061061557610100808354040283529160200191610640565b60075460009060ff1615610ce857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6106ca83836111f3565b60075460009060ff1615610d6757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6106ca838361126e565b60075460009060ff1615610de657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b34610df357506001610648565b610dfd3334611282565b50600090565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6000610e4f610e486110aa565b84846113b3565b50600192915050565b6000610e658484846114fa565b610ef584610e716110aa565b610ef085604051806060016040528060288152602001611a836028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020526040812090610ebc6110aa565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002054919063ffffffff6116cb16565b6113b3565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff8216610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611acd6021913960400191505060405180910390fd5b610fbb816040518060600160405280602281526020016119c86022913973ffffffffffffffffffffffffffffffffffffffff8516600090815260208190526040902054919063ffffffff6116cb16565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902055600254610ff4908263ffffffff61177c16565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610e4f6110566110aa565b84610ef085600160006110676110aa565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6117be16565b3390565b600073ffffffffffffffffffffffffffffffffffffffff821661111c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611aab6022913960400191505060405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff166000908152602091909152604090205460ff1690565b61115a60068263ffffffff61183216565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b6111af60068263ffffffff6118de16565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6000610e4f6112006110aa565b84610ef085604051806060016040528060258152602001611b37602591396001600061122a6110aa565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6116cb16565b6000610e4f61127b6110aa565b84846114fa565b73ffffffffffffffffffffffffffffffffffffffff821661130457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254611317908263ffffffff6117be16565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054611350908263ffffffff6117be16565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff831661141f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180611b136024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661148b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611a1a6022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611566576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611aee6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806119a56023913960400191505060405180910390fd5b61162281604051806060016040528060268152602001611a3c6026913973ffffffffffffffffffffffffffffffffffffffff8616600090815260208190526040902054919063ffffffff6116cb16565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054611664908263ffffffff6117be16565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611774576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611739578181015183820152602001611721565b50505050905090810190601f1680156117665780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006106ca83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506116cb565b6000828201838110156106ca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b61183c82826110ae565b611891576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611a626021913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6118e882826110ae565b1561195457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e6365506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c6545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365526f6c65733a206163636f756e7420697320746865207a65726f206164647265737345524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a723158205aa4bd727a32addbd7562837838048136c5d3570e72e58054c8b7b09443fe6ca64736f6c63430005110032526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373

Deployed ByteCode Sourcemap

20962:1623:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19150:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19150:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;19150:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20449:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20449:140:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20449:140:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;11873:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11873:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;20281:160;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20281:160:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20281:160:0;;;;;;;;;;;;;;;;;;:::i;22074:508::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22074:508:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22074:508:0;;:::i;20002:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20002:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21058:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21058:42:0;;;:::i;20597:170::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20597:170:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20597:170:0;;;;;;;;;:::i;3952:120::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3952:120:0;;;:::i;:::-;;1970:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1970:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1970:109:0;;;;:::i;3159:78::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3159:78:0;;;:::i;21178:53::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21178:53:0;;;:::i;2187:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2187:79:0;;;:::i;12027:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12027:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12027:110:0;;;;:::i;2087:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2087:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2087:92:0;;;;:::i;3739:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3739:118:0;;;:::i;19352:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19352:87:0;;;:::i;20775:180::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20775:180:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20775:180:0;;;;;;;;;:::i;20141:132::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20141:132:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20141:132:0;;;;;;;;;:::i;21507:393::-;;;:::i;12571:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12571:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12571:134:0;;;;;;;;;;;:::i;19150:83::-;19220:5;19213:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19187:13;;19213:12;;19220:5;;19213:12;;19220:5;19213:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19150:83;;:::o;20449:140::-;3396:7;;20528:4;;3396:7;;3395:8;3387:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20552:29;20566:7;20575:5;20552:13;:29::i;:::-;20545:36;20449:140;-1:-1:-1;;;20449:140:0:o;11873:91::-;11944:12;;11873:91;:::o;20281:160::-;3396:7;;20374:4;;3396:7;;3395:8;3387:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20398:35;20417:4;20423:2;20427:5;20398:18;:35::i;:::-;20391:42;20281:160;-1:-1:-1;;;;20281:160:0:o;22074:508::-;3396:7;;22138;;3396;;3395:8;3387:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22217:11;22213:73;;-1:-1:-1;21227:4:0;22245:29;;22213:73;22371:25;22377:10;22389:6;22371:5;:25::i;:::-;22484:27;;:10;;:27;;;;;22504:6;;22484:27;;;;22504:6;22484:10;:27;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22484:27:0;21097:3;22555:19;;3435:1;22074:508;;;:::o;20002:83::-;20068:9;;;;20002:83;:::o;21058:42::-;21097:3;21058:42;:::o;20597:170::-;3396:7;;20691:4;;3396:7;;3395:8;3387:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20715:44;20739:7;20748:10;20715:23;:44::i;3952:120::-;1867:22;1876:12;:10;:12::i;:::-;1867:8;:22::i;:::-;1859:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3595:7;;;;3587:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4011:7;:15;;;;;;4042:22;4051:12;:10;:12::i;:::-;4042:22;;;;;;;;;;;;;;;;;;3952:120::o;1970:109::-;2026:4;2050:21;:8;2063:7;2050:21;:12;:21;:::i;:::-;2043:28;1970:109;-1:-1:-1;;1970:109:0:o;3159:78::-;3222:7;;;;3159:78;:::o;21178:53::-;21227:4;21178:53;:::o;2187:79::-;2231:27;2245:12;:10;:12::i;:::-;2231:13;:27::i;:::-;2187:79::o;12027:110::-;12111:18;;12084:7;12111:18;;;;;;;;;;;;12027:110::o;2087:92::-;1867:22;1876:12;:10;:12::i;1867:22::-;1859:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2152:19;2163:7;2152:10;:19::i;:::-;2087:92;:::o;3739:118::-;1867:22;1876:12;:10;:12::i;1867:22::-;1859:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3396:7;;;;3395:8;3387:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3799:7;:14;;;;3809:4;3799:14;;;3829:20;3836:12;:10;:12::i;19352:87::-;19424:7;19417:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19391:13;;19417:14;;19424:7;;19417:14;;19424:7;19417:14;;;;;;;;;;;;;;;;;;;;;;;;20775:180;3396:7;;20874:4;;3396:7;;3395:8;3387:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20898:49;20922:7;20931:15;20898:23;:49::i;20141:132::-;3396:7;;20216:4;;3396:7;;3395:8;3387:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20240:25;20255:2;20259:5;20240:14;:25::i;21507:393::-;3396:7;;21564;;3396;;3395:8;3387:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21643:9;21639:76;;-1:-1:-1;21227:4:0;21674:29;;21639:76;21801:28;21807:10;21819:9;21801:5;:28::i;:::-;-1:-1:-1;21097:3:0;21507:393;:::o;12571:134::-;12670:18;;;;12643:7;12670:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12571:134::o;12852:152::-;12918:4;12935:39;12944:12;:10;:12::i;:::-;12958:7;12967:6;12935:8;:39::i;:::-;-1:-1:-1;12992:4:0;12852:152;;;;:::o;13476:304::-;13565:4;13582:36;13592:6;13600:9;13611:6;13582:9;:36::i;:::-;13629:121;13638:6;13646:12;:10;:12::i;:::-;13660:89;13698:6;13660:89;;;;;;;;;;;;;;;;;:19;;;;;;;:11;:19;;;;;;13680:12;:10;:12::i;:::-;13660:33;;;;;;;;;;;;;-1:-1:-1;13660:33:0;;;:89;;:37;:89;:::i;:::-;13629:8;:121::i;:::-;-1:-1:-1;13768:4:0;13476:304;;;;;:::o;17045:348::-;17121:21;;;17113:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17214:68;17237:6;17214:68;;;;;;;;;;;;;;;;;:18;;;:9;:18;;;;;;;;;;;;:68;;:22;:68;:::i;:::-;17193:18;;;:9;:18;;;;;;;;;;:89;17308:12;;:24;;17325:6;17308:24;:16;:24;:::i;:::-;17293:12;:39;17348:37;;;;;;;;17374:1;;17348:37;;;;;;;;;;;;;17045:348;;:::o;14189:210::-;14269:4;14286:83;14295:12;:10;:12::i;:::-;14309:7;14318:50;14357:10;14318:11;:25;14330:12;:10;:12::i;:::-;14318:25;;;;;;;;;;;;;;;;;;-1:-1:-1;14318:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;296:98::-;376:10;296:98;:::o;1330:203::-;1402:4;1427:21;;;1419:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1505:20:0;;:11;:20;;;;;;;;;;;;;;;1330:203::o;2404:130::-;2464:24;:8;2480:7;2464:24;:15;:24;:::i;:::-;2504:22;;;;;;;;;;;2404:130;:::o;2274:122::-;2331:21;:8;2344:7;2331:21;:12;:21;:::i;:::-;2368:20;;;;;;;;;;;2274:122;:::o;14902:261::-;14987:4;15004:129;15013:12;:10;:12::i;:::-;15027:7;15036:96;15075:15;15036:96;;;;;;;;;;;;;;;;;:11;:25;15048:12;:10;:12::i;:::-;15036:25;;;;;;;;;;;;;;;;;;-1:-1:-1;15036:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;12350:158::-;12419:4;12436:42;12446:12;:10;:12::i;:::-;12460:9;12471:6;12436:9;:42::i;16405:308::-;16481:21;;;16473:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16566:12;;:24;;16583:6;16566:24;:16;:24;:::i;:::-;16551:12;:39;16622:18;;;:9;:18;;;;;;;;;;;:30;;16645:6;16622:30;:22;:30;:::i;:::-;16601:18;;;:9;:18;;;;;;;;;;;:51;;;;16668:37;;;;;;;16601:18;;:9;;16668:37;;;;;;;;;;16405:308;;:::o;17833:338::-;17927:19;;;17919:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18006:21;;;17998:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18079:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18131:32;;;;;;;;;;;;;;;;;17833:338;;;:::o;15653:471::-;15751:20;;;15743:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15832:23;;;15824:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15928;15950:6;15928:71;;;;;;;;;;;;;;;;;:17;;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;15908:17;;;;:9;:17;;;;;;;;;;;:91;;;;16033:20;;;;;;;:32;;16058:6;16033:32;:24;:32;:::i;:::-;16010:20;;;;:9;:20;;;;;;;;;;;;:55;;;;16081:35;;;;;;;16010:20;;16081:35;;;;;;;;;;;;;15653:471;;;:::o;5263:192::-;5349:7;5385:12;5377:6;;;;5369:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5369:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5421:5:0;;;5263:192::o;4790:136::-;4848:7;4875:43;4879:1;4882;4875:43;;;;;;;;;;;;;;;;;:3;:43::i;4334:181::-;4392:7;4424:5;;;4448:6;;;;4440:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1052:183;1132:18;1136:4;1142:7;1132:3;:18::i;:::-;1124:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1199:20;;1222:5;1199:20;;;;;;;;;;;:28;;;;;;1052:183::o;794:178::-;872:18;876:4;882:7;872:3;:18::i;:::-;871:19;863:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:20;;:11;:20;;;;;;;;;;;:27;;;;960:4;937:27;;;794:178::o

Swarm Source

bzzr://5aa4bd727a32addbd7562837838048136c5d3570e72e58054c8b7b09443fe6ca
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.