Contract 0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83 4

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x1f59b3d69ded01da6b48f97a955f9e72ef56e446a84ebee117461bfebfbdb965Deposit200499292021-10-25 11:10:0219 secs ago0xdae69df4e1fec7289c8c088c59e8a93636931879 IN  Fantom Finance: Wrapped Fantom Token9.995658364922822 FTM0.00839227564
0xefc53fafcb0f7e84fa3504f3ea33b73a99288049d8a8611a00272396aab42ec9Withdraw200498982021-10-25 11:09:3744 secs ago0x78bd76313872052e12a326593fb2f314e240ab33 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.010899272726
0x077280819c2760fbfe25d26d41ba9dd6460ec87725f57a2f57ed1f19b2c35678Deposit200498962021-10-25 11:09:3645 secs ago0x39fd18f41ad1a166bab5a11848cef48f99cf4af3 IN  Fantom Finance: Wrapped Fantom Token50 FTM0.012017239139
0x53fc8f06578a5447d172c314efe347249f96c144ec813cc0e02d86fb36c82b29Deposit200498422021-10-25 11:08:501 min ago0x9de83240f4a09113898dcf39beb35ad9c3966ed2 IN  Fantom Finance: Wrapped Fantom Token2.208425745683676 FTM0.013098018145
0xa5afbce61300dec5bc5dc15ca0bd8625738eefb25d0d9c817997f600ee5f38f7Deposit200498362021-10-25 11:08:461 min ago0xa1daebc422df1007d91f00968de80cf161817f5a IN  Fantom Finance: Wrapped Fantom Token100 FTM0.008406317463
0x6d2ba2eb4a53ac4cd1e964ae16f517b9c60bf51335c74ce9567c17bbbb3c9df0Withdraw200498162021-10-25 11:08:311 min ago0xfd362c8575ddae981a462611f0f24b74740003ea IN  Fantom Finance: Wrapped Fantom Token0 FTM0.006661421635
0xfd9f368ccfce4cf893eddb00c2e025377421d11b0ecbfb9bf73f5359d0e86d24Deposit200498142021-10-25 11:08:291 min ago0x5c7e892cba332cade6fb57a202210beff199b7e1 IN  Fantom Finance: Wrapped Fantom Token51.8128283424 FTM0.011867030231
0x91e2e56d0aad3cedab5bd0067339a8cba196c3c4fe837bfe69f7aae2d4120850Withdraw200498002021-10-25 11:08:182 mins ago0xedd63e61d38a021caf5e7568fb7e18a68ec463d8 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.007498803523
0x1a3847ef99e2340a38f897eb535edaacfc7e9a511239ad391b4173e8db9c07e0Withdraw200497872021-10-25 11:08:062 mins ago0xe9755def636fe3a6fa28a59421616b144a772ae1 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.006852440977
0xedff4282c2389b3edd189a22ed0441f92522bbf90689f93adacf72a966544cc1Approve200497832021-10-25 11:08:022 mins ago0x0ddb73e40cb27902d47b23730916b541c26200ff IN  Fantom Finance: Wrapped Fantom Token0 FTM0.011604042723
0x57c6cf1c33f9f270190ef92f7b4ae6d818720124aa117897eef13b7f9ccd7a3dApprove200497802021-10-25 11:07:592 mins ago0x835f394f3d770b6ff818303f045e39f541b3d781 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.011845473032
0x85cfb9b7519f736dc6c949551839174f77885074a17f9222c4a34ec2bef6ebd3Withdraw200497592021-10-25 11:07:352 mins ago0x08ac9c15aaf98563a4b19ddbd0153ff3516d65a8 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.006408197303
0x1ffc69eefd8f66ee6757f4def5134ffa1fcaf121edda0a0379402dfb475fe1d2Withdraw200497452021-10-25 11:07:173 mins ago0x08ac9c15aaf98563a4b19ddbd0153ff3516d65a8 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.007132943017
0x0228704c4ae5a8d7560283cbb03c707dc96741f438abeab56471f6238da0da5dWithdraw200497292021-10-25 11:07:033 mins ago0x4dace5a18a8c9d4d5f0a01269df49e3cc2b52750 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.007488617721
0x3bdc709baaab4241bec34e3c2b6faf2b4678c244044702e8670f43e9fb9db4d7Deposit200497182021-10-25 11:06:533 mins ago0x603d61861c2e380ae2d67f6e299785ac84fcacbd IN  Fantom Finance: Wrapped Fantom Token120 FTM0.009212885826
0x3175c1b89ec2f8f85cc44b24985ed8f34d0f45c6c965339509145d0e9eed07d1Increase Allowan...200497032021-10-25 11:06:413 mins ago0xedd63e61d38a021caf5e7568fb7e18a68ec463d8 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.007974018694
0x54d70c3cb6d6351f04fa1cec7c323092139e0145f7a8fb4d14b790979071ed1fWithdraw200496892021-10-25 11:06:293 mins ago0xddb6138ac7ce544780a315e57c926e4cd52e6606 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.007406805984
0xea2bc6ad27988bee702eed716e5a41d2444716f1e835419498c63f48433c0af5Withdraw200496622021-10-25 11:06:044 mins ago0xaf581664ae8562df53b18392673ffa56701d0906 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.007215972505
0xb8e95a9ea5938352e7aece28a5e17ed48436710d4e6c293fa98d7f2cc4bf396eWithdraw200496152021-10-25 11:05:274 mins ago0xd97fe156f0c99396552899f4206941c00e7b9aba IN  Fantom Finance: Wrapped Fantom Token0 FTM0.021775968053
0xa4ba61bd5a01cbe0b65d152ce5edbd022763e51ab404ee6e5b9aa7e0bb7c1b03Approve200495472021-10-25 11:04:345 mins ago0x43d0adc9a9a5a3e9c09a507c0b295bd9a45372a6 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.010857864761
0x6b05bf710c975f3d3e81cfa2398631085fb06d4da8a3f7f8d0eb968ac26e8ac1Approve200495212021-10-25 11:04:126 mins ago0xc864e67fcbda98df9053a627cb51b082cead3c70 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.010933241434
0x2e7993d701a00dc8f2a44f5155adc0b4975034565324410917edd69947f214e8Withdraw200494862021-10-25 11:03:426 mins ago0xe9755def636fe3a6fa28a59421616b144a772ae1 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.007100171067
0xa85c2ce603b2ff659da7a8377ad370739fc0e6df6de8195ad3027485e0a93c61Approve200494802021-10-25 11:03:376 mins ago0x605b18aa9ff1c4e83ebd758f35ea3454f2fae43a IN  Fantom Finance: Wrapped Fantom Token0 FTM0.006764450115
0xa28e8fe73f7062ef3c3da56c4aeea80998da89d201f14de48261ce741593ba62Transfer200494742021-10-25 11:03:296 mins ago0xe4b5af0785a279000283d222c1d29655b153fad6 IN  Fantom Finance: Wrapped Fantom Token0 FTM0.009486426448
0x3b358f326250d174378904fc069b0dc7b7f8e7b4f615eacefd5d0da6b6757f4bDeposit200494652021-10-25 11:03:177 mins ago0x43d0adc9a9a5a3e9c09a507c0b295bd9a45372a6 IN  Fantom Finance: Wrapped Fantom Token1.1 FTM0.0273916538
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x973f4b0c05681e636d727986e441911b8e0cec9959757d063041c515ea57c59e20049951- Fantom Finance: Wrapped Fantom Token SpiritSwap: Router121.781275644765063077 FTM
0xa671f3a00f197d278924af779e4851227415fad889a1556ea8fc8c20024fe770200499492021-10-25 11:10:165 secs ago SpookySwap: Router Fantom Finance: Wrapped Fantom Token1 FTM
0xb0d5c16cdef0251d270f1eb2bb0d7861e7e685f847c56be7a620c93a303de7c8200499472021-10-25 11:10:147 secs ago SpookySwap: Router Fantom Finance: Wrapped Fantom Token373 FTM
0x86a00358eca877e2401653e48ab25847c4637f45aff31d7685a66374ebf99045200499442021-10-25 11:10:129 secs ago Fantom Finance: Wrapped Fantom Token 0x47102245fea0f8d35a6b28e54505e9ffd83d0704150,000 FTM
0x770966bdda5d0800824571af1fc2b4876bc39f0b3397abaa3de5397b455c3204200499402021-10-25 11:10:0912 secs ago Fantom Finance: Wrapped Fantom Token SpookySwap: Router1.000140568269938548 FTM
0xf8b31ca07a9b47b7eebce53540aa4d1faab69534e2029ee60e1bf1b36813520b200499352021-10-25 11:10:0615 secs ago Fantom Finance: Wrapped Fantom Token 0x394b6af9eaf782e35e9b4019a7fa2b9ed6e7c541333.288674173748227112 FTM
0xf8b31ca07a9b47b7eebce53540aa4d1faab69534e2029ee60e1bf1b36813520b200499352021-10-25 11:10:0615 secs ago 0x394b6af9eaf782e35e9b4019a7fa2b9ed6e7c541 Fantom Finance: Wrapped Fantom Token333 FTM
0x535ff6d36ed998080e9b12dd57bfb64f53ea72caaf85cb6cff50edd70fc2b030200499322021-10-25 11:10:0417 secs ago Fantom Finance: Wrapped Fantom Token 0xb6f7b3d8cd9dbf30805c0dd79809dace5603ce6a946.639177830490278405 FTM
0x36d3ce2b90457b8741213d262234a6589c366296216d29cef2e787f9c01e0802200499312021-10-25 11:10:0318 secs ago SpookySwap: Router Fantom Finance: Wrapped Fantom Token0.343150601183981303 FTM
0x4ea9d705d6031d59ea2a2edd9b2cd75c80d4463a0bd72896540cf80440aea930200499312021-10-25 11:10:0318 secs ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router7.099847372114526818 FTM
0x1f59b3d69ded01da6b48f97a955f9e72ef56e446a84ebee117461bfebfbdb965200499292021-10-25 11:10:0219 secs ago 0xdae69df4e1fec7289c8c088c59e8a93636931879 Fantom Finance: Wrapped Fantom Token9.995658364922822671 FTM
0x1838a4cec2b325fb5bb90fd01d590f14a031f38f33a8a299816c3927b6d9fbfb200499272021-10-25 11:10:0021 secs ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token1.290117337748251966 FTM
0x6c80f5312afd0fc03969cecdd71faaba6bddd4438008447b78aff31aba7904c4200499252021-10-25 11:09:5724 secs ago Fantom Finance: Wrapped Fantom Token SpookySwap: Router287.575019498122170846 FTM
0x1f5c57a229372713a5a20aa6640bb59f7552c51d4dd4cab86ab40aeaac9cf5e9200499252021-10-25 11:09:5724 secs ago 0x47102245fea0f8d35a6b28e54505e9ffd83d0704 Fantom Finance: Wrapped Fantom Token23,120 FTM
0x0af7aa8eda33681b3133c077371e77886c6355abfa99a91823cb9c74bc935fe5200499242021-10-25 11:09:5625 secs ago SpookySwap: Router Fantom Finance: Wrapped Fantom Token103.826357649236982225 FTM
0xc31167dfbd4723e2ca77a444e166920b8087ed267638ca38dc07e29c91c0d7a7200499172021-10-25 11:09:5130 secs ago Fantom Finance: Wrapped Fantom Token SpookySwap: Router110.06739181181122424 FTM
0x0cd8d0774502ad82712356d77333d6826621cae6f3f78855b69e1e1e023d23f9200499132021-10-25 11:09:4833 secs ago SpookySwap: Router Fantom Finance: Wrapped Fantom Token105.07879183862157326 FTM
0xd93b138eddee98064a4378bde97d69038d6cc4e48f82ce2d857adb69644a48e4200499112021-10-25 11:09:4635 secs ago Fantom Finance: Wrapped Fantom Token SpookySwap: Router1.309483377432731672 FTM
0x91973295973f20e3f5818f9ea2bcc353b7b64760037eb738ef5aeba903d574ca200499092021-10-25 11:09:4536 secs ago Fantom Finance: Wrapped Fantom Token SpookySwap: Router1.083368307828536509 FTM
0x80166cec0a69b97c92e6b62a35936eaf7d1c9d124df494d950b50946acade5c2200499062021-10-25 11:09:4338 secs ago SpookySwap: Router Fantom Finance: Wrapped Fantom Token0.343150082226436674 FTM
0x2c073d4f96c417a2150708b19feb02b01db3bc513d41adbca0d4c8cbaff2c232200499022021-10-25 11:09:4041 secs ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token3.489504579190357218 FTM
0xefc53fafcb0f7e84fa3504f3ea33b73a99288049d8a8611a00272396aab42ec9200498982021-10-25 11:09:3744 secs ago Fantom Finance: Wrapped Fantom Token0x78bd76313872052e12a326593fb2f314e240ab33229.820608800669010342 FTM
0x077280819c2760fbfe25d26d41ba9dd6460ec87725f57a2f57ed1f19b2c35678200498962021-10-25 11:09:3645 secs ago 0x39fd18f41ad1a166bab5a11848cef48f99cf4af3 Fantom Finance: Wrapped Fantom Token50 FTM
0xbf4d09104b47fda57e646c473d9b79f7c1d24ea039d51977400fa4ca509886cd200498942021-10-25 11:09:3348 secs ago 0x47102245fea0f8d35a6b28e54505e9ffd83d0704 Fantom Finance: Wrapped Fantom Token5 FTM
0x33be360a009e69191c8c3c1b210a9431ae1f987d9b2e3743796c3ff9c4f40c93200498832021-10-25 11:09:2556 secs ago SpookySwap: Router Fantom Finance: Wrapped Fantom Token4 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.