Contract 0xe1146b9AC456fCbB60644c36Fd3F868A9072fc6E 2

 

Contract Overview

Fantom Finance: fBTC Token
Balance:
0 FTM

FTM Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x521592b679423084c8e1c24f4d8c29e89a86c41b8cae1c2797e79385e053e8cdIncrease Allowan...545432122023-01-27 12:51:232 days 8 hrs ago0xc95c63f14dc7bdb7d31cc638e2d59d256066ce6b IN  Fantom Finance: fBTC Token0 FTM0.001554777823
0x6a3638d9cbf62a877214d8898534345d4c7ccbe81c891fe9a3a442f649c987c4Increase Allowan...544944152023-01-26 20:19:333 days 1 hr ago0x18affab3ce869531aed63bdce2a90721e516051e IN  Fantom Finance: fBTC Token0 FTM0.031458340289
0x27027de21f1c9f43f149848d9a90de8f344966d63833c64eeb122f3c7c7bf69fIncrease Allowan...544589322023-01-26 8:23:263 days 13 hrs ago0xc76fef51e3c5383df28e850f91c8777363e7c700 IN  Fantom Finance: fBTC Token0 FTM0.006246673
0x557005a04924adb299a67dc535ea7dc6d1ee196b5c8ca6a4032736e59299a67dApprove543408472023-01-24 11:01:115 days 10 hrs ago0x4857ad420a2b2641a53886f7745cdd365f7ac32e IN  Fantom Finance: fBTC Token0 FTM0.002897015251
0x2fd60e0312437964a1f709bb29027f3283361d404056409be1097d9bfab719edIncrease Allowan...543016042023-01-23 22:11:335 days 23 hrs ago0x1f45df42e81892260f50a256bbe7120d6624c2f1 IN  Fantom Finance: fBTC Token0 FTM0.003598538764
0x208a55c9d8c069c45253bb1d810350d41fefdb793f44743c5bbd16deb04ec4c8Increase Allowan...540120002023-01-19 0:38:4510 days 21 hrs ago0x9b2a1a56bb4b19f6ce926dd2b449756d1a473ae3 IN  Fantom Finance: fBTC Token0 FTM0.001140205335
0x6d8513d3840869f8b645696aa66483e5523cda4565b4b728a5f0327084583fb2Increase Allowan...539466822023-01-17 21:33:5012 days 10 mins ago0xf96fa00a15b218c2ca08cba06d9cce47e4be13f0 IN  Fantom Finance: fBTC Token0 FTM0.001356950839
0x2fcf221c64366775cf487efe3d097c7fe544ded66407140351ad9244aa7ae864Increase Allowan...539462872023-01-17 21:27:2312 days 16 mins ago0xf96fa00a15b218c2ca08cba06d9cce47e4be13f0 IN  Fantom Finance: fBTC Token0 FTM0.001356950839
0x7c431fca957ca6f7708fcb3ebab08c51a41ed187c8c7a8444717ceabeced946cIncrease Allowan...538944922023-01-16 20:35:4413 days 1 hr ago0x1f45df42e81892260f50a256bbe7120d6624c2f1 IN  Fantom Finance: fBTC Token0 FTM0.001922055262
0xbc48e63bac2a76fd2346923a725026369e52b6daada82844d370cc610b68c82eIncrease Allowan...538940842023-01-16 20:29:0113 days 1 hr ago0x1f45df42e81892260f50a256bbe7120d6624c2f1 IN  Fantom Finance: fBTC Token0 FTM0.001922055262
0xc0fba234e75dbcd731d875d6322eba262d570c2488abb3bb2a417872b8e6b11dIncrease Allowan...537873792023-01-15 1:12:3114 days 20 hrs ago0x74713f34f497a54a6e8d3d8fa06db513ad946fdc IN  Fantom Finance: fBTC Token0 FTM0.002726974
0x1781166b04f45d3b28a61f8e36f91b47771c653b996f122ae4e5d43221c36294Increase Allowan...537857472023-01-15 0:41:2514 days 21 hrs ago0x74713f34f497a54a6e8d3d8fa06db513ad946fdc IN  Fantom Finance: fBTC Token0 FTM0.002576126907
0x12d4061c27957a419037fb884c55bd8c645d366e81eea1321e942df07f65bcc4Increase Allowan...537159452023-01-13 22:34:5715 days 23 hrs ago0x1f45df42e81892260f50a256bbe7120d6624c2f1 IN  Fantom Finance: fBTC Token0 FTM0.001793977615
0x23a05a7e1fbd29355486beeb892c8d827c12809ca580dd0226f3725b0f5a7e34Approve535138382023-01-10 1:02:0419 days 20 hrs ago0x7221e37fec261309bf4bd4e95dc129f1372f8082 IN  Fantom Finance: fBTC Token0 FTM0.001643212
0x6347ae84c147fdfac9742a5ed6a9c113fdac51049399dd45047cdffed27af5dcIncrease Allowan...533910632023-01-07 16:26:0522 days 5 hrs ago0x4cd8f8663a9d23169edab6619cf6537ce56b050c IN  Fantom Finance: fBTC Token0 FTM0.002133075507
0x91458f571ce75e494605164d1182f2f118d4e013254d7e9ddc2404ac53962711Increase Allowan...533910262023-01-07 16:25:2622 days 5 hrs ago0x4cd8f8663a9d23169edab6619cf6537ce56b050c IN  Fantom Finance: fBTC Token0 FTM0.002133075507
0x6b56542b009aefeefb28b054b74d531d69fedc4bcce3dc0389eb3789a9646b40Increase Allowan...533426352023-01-06 18:53:5223 days 2 hrs ago0x1f45df42e81892260f50a256bbe7120d6624c2f1 IN  Fantom Finance: fBTC Token0 FTM0.00126884
0x4c4f09ca5e348be7ee3a3ffcc02baaa5cc4847ef21cd3fcbb3ec5008008ccb1cIncrease Allowan...529543082022-12-28 0:15:2932 days 21 hrs ago0x537602ce8430ce4e5af1cad3de6593556ccd7a98 IN  Fantom Finance: fBTC Token0 FTM0.0008719975
0x36116dab03dba3a4b481b37199654c428378990c10931ba59f7c0ed5b916e70dIncrease Allowan...525924312022-12-20 20:24:3240 days 1 hr ago0xf96fa00a15b218c2ca08cba06d9cce47e4be13f0 IN  Fantom Finance: fBTC Token0 FTM0.000808439116
0xe1e6cffa4990a827fcb06945b196c6125b54a82880376dba538d7e8caeddc9b2Increase Allowan...525923652022-12-20 20:22:5240 days 1 hr ago0xf96fa00a15b218c2ca08cba06d9cce47e4be13f0 IN  Fantom Finance: fBTC Token0 FTM0.000808133285
0x40b2d2032d3e935eaf4ab6a7b2316ba3c08b4b977d47fdeb7e446ed4299e902bIncrease Allowan...525922372022-12-20 20:19:3740 days 1 hr ago0xf96fa00a15b218c2ca08cba06d9cce47e4be13f0 IN  Fantom Finance: fBTC Token0 FTM0.000808439116
0xf57c743ce0b38b4695842a63db00fe47a5c95462513be784a23848b20494c95dIncrease Allowan...525921982022-12-20 20:18:3140 days 1 hr ago0xf96fa00a15b218c2ca08cba06d9cce47e4be13f0 IN  Fantom Finance: fBTC Token0 FTM0.000808439116
0x73ac164883af9f3eb6b214057d95a056b04b3c68b195789d74c6a0e61cbc298bIncrease Allowan...525921622022-12-20 20:17:4140 days 1 hr ago0xf96fa00a15b218c2ca08cba06d9cce47e4be13f0 IN  Fantom Finance: fBTC Token0 FTM0.000808439116
0x47092097c29d6d64a55f6a2321d149839dbaa8676ef411f390c81ec419388cdaIncrease Allowan...525919662022-12-20 20:13:0640 days 1 hr ago0xf96fa00a15b218c2ca08cba06d9cce47e4be13f0 IN  Fantom Finance: fBTC Token0 FTM0.000808439116
0x87a1479cd639439272b8d1a19e2a59ded73eac235a273c870c95fd5987111263Increase Allowan...525918632022-12-20 20:11:1040 days 1 hr ago0xf96fa00a15b218c2ca08cba06d9cce47e4be13f0 IN  Fantom Finance: fBTC Token0 FTM0.000808439116
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x508fce375e5b7ac9bcb56d8df0a93a93cfddc7f33871b6dc3c8b869ad638b37a14129642020-12-09 22:45:01780 days 22 hrs ago 0x3ea8375b450e443a9bb5cac5f4be9f8f646d7318  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
fBTC

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-20
*/

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 MinterRole is Context {
    using Roles for Roles.Role;

    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);

    Roles.Role private _minters;

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

    modifier onlyMinter() {
        require(isMinter(_msgSender()), "MinterRole: caller does not have the Minter role");
        _;
    }

    function isMinter(address account) public view returns (bool) {
        return _minters.has(account);
    }

    function addMinter(address account) public onlyMinter {
        _addMinter(account);
    }

    function renounceMinter() public {
        _removeMinter(_msgSender());
    }

    function _addMinter(address account) internal {
        _minters.add(account);
        emit MinterAdded(account);
    }

    function _removeMinter(address account) internal {
        _minters.remove(account);
        emit MinterRemoved(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 ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev See {ERC20-_burnFrom}.
     */
    function burnFrom(address account, uint256 amount) public {
        _burnFrom(account, amount);
    }
}

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 ERC20Mintable is ERC20, MinterRole {
    /**
     * @dev See {ERC20-_mint}.
     *
     * Requirements:
     *
     * - the caller must have the {MinterRole}.
     */
    function mint(address account, uint256 amount) public onlyMinter returns (bool) {
        _mint(account, amount);
        return true;
    }
}

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 fBTC is ERC20, ERC20Detailed, ERC20Mintable, ERC20Burnable, ERC20Pausable {
    // create instance of the fBTC token
    constructor () public ERC20Detailed("fBTC", "FBTC", 18) {
    }
}

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":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","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":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","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":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","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":[{"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":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","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":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","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":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","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"}]

60806040523480156200001157600080fd5b50604051806040016040528060048152602001636642544360e01b815250604051806040016040528060048152602001634642544360e01b815250601282600390805190602001906200006692919062000286565b5081516200007c90600490602085019062000286565b506005805460ff191660ff9290921691909117905550620000b19050620000a2620000e7565b6001600160e01b03620000ec16565b620000d7620000c86001600160e01b03620000e716565b6001600160e01b036200013e16565b6008805460ff1916905562000328565b335b90565b620001078160066200019060201b6200198b1790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b620001598160076200019060201b6200198b1790919060201c565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b620001a582826001600160e01b036200021d16565b15620001f8576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b038216620002665760405162461bcd60e51b815260040180806020018281038252602281526020018062001fc96022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002c957805160ff1916838001178555620002f9565b82800160010185558215620002f9579182015b82811115620002f9578251825591602001919060010190620002dc565b50620003079291506200030b565b5090565b620000e991905b8082111562000307576000815560010162000312565b611c9180620003386000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80636ef8d66d116100e3578063983b2d561161008c578063a9059cbb11610066578063a9059cbb146104d6578063aa271e1a1461050f578063dd62ed3e146105425761018d565b8063983b2d56146104625780639865027514610495578063a457c2d71461049d5761018d565b806382dc1ec4116100bd57806382dc1ec41461041f5780638456cb591461045257806395d89b411461045a5761018d565b80636ef8d66d146103ab57806370a08231146103b357806379cc6790146103e65761018d565b8063395093511161014557806342966c681161011f57806342966c681461035357806346fbf68e146103705780635c975abb146103a35761018d565b806339509351146102d75780633f4ba83a1461031057806340c10f191461031a5761018d565b806318160ddd1161017657806318160ddd1461025c57806323b872dd14610276578063313ce567146102b95761018d565b806306fdde0314610192578063095ea7b31461020f575b600080fd5b61019a61057d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d45781810151838201526020016101bc565b50505050905090810190601f1680156102015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102486004803603604081101561022557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610631565b604080519115158252519081900360200190f35b6102646106b7565b60408051918252519081900360200190f35b6102486004803603606081101561028c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356106bd565b6102c1610745565b6040805160ff9092168252519081900360200190f35b610248600480360360408110156102ed57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561074e565b6103186107cd565b005b6102486004803603604081101561033057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561091e565b6103186004803603602081101561036957600080fd5b5035610998565b6102486004803603602081101561038657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109ac565b6102486109c5565b6103186109ce565b610264600480360360208110156103c957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109e0565b610318600480360360408110156103fc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610a08565b6103186004803603602081101561043557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a16565b610318610a7f565b61019a610ba5565b6103186004803603602081101561047857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c24565b610318610c8d565b610248600480360360408110156104b357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c9d565b610248600480360360408110156104ec57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610d1c565b6102486004803603602081101561052557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d9b565b6102646004803603604081101561055857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610dae565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106275780601f106105fc57610100808354040283529160200191610627565b820191906000526020600020905b81548152906001019060200180831161060a57829003601f168201915b5050505050905090565b60085460009060ff16156106a657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6106b08383610de6565b9392505050565b60025490565b60085460009060ff161561073257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b61073d848484610dfa565b949350505050565b60055460ff1690565b60085460009060ff16156107c357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6106b08383610ea1565b6107dd6107d8610f02565b6109ac565b610832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180611a976030913960400191505060405180910390fd5b60085460ff166108a357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6108f4610f02565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190a1565b600061093061092b610f02565b610d9b565b610985576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180611b0f6030913960400191505060405180910390fd5b61098f8383610f06565b50600192915050565b6109a96109a3610f02565b82611037565b50565b60006109bf60078363ffffffff61118116565b92915050565b60085460ff1690565b6109de6109d9610f02565b61121c565b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610a128282611271565b5050565b610a216107d8610f02565b610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180611a976030913960400191505060405180910390fd5b6109a9816112d2565b610a8a6107d8610f02565b610adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180611a976030913960400191505060405180910390fd5b60085460ff1615610b5157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586108f4610f02565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106275780601f106105fc57610100808354040283529160200191610627565b610c2f61092b610f02565b610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180611b0f6030913960400191505060405180910390fd5b6109a981611327565b6109de610c98610f02565b61137c565b60085460009060ff1615610d1257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6106b083836113d1565b60085460009060ff1615610d9157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6106b0838361144c565b60006109bf60068363ffffffff61118116565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b600061098f610df3610f02565b8484611460565b6000610e078484846115a7565b610e9784610e13610f02565b610e9285604051806060016040528060288152602001611b606028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020526040812090610e5e610f02565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002054919063ffffffff61177816565b611460565b5060019392505050565b600061098f610eae610f02565b84610e928560016000610ebf610f02565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61182916565b3390565b73ffffffffffffffffffffffffffffffffffffffff8216610f8857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254610f9b908263ffffffff61182916565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054610fd4908263ffffffff61182916565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166110a3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611bce6021913960400191505060405180910390fd5b6110f381604051806060016040528060228152602001611a756022913973ffffffffffffffffffffffffffffffffffffffff8516600090815260208190526040902054919063ffffffff61177816565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205560025461112c908263ffffffff61189d16565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600073ffffffffffffffffffffffffffffffffffffffff82166111ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611b886022913960400191505060405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff166000908152602091909152604090205460ff1690565b61122d60078263ffffffff6118df16565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b61127b8282611037565b610a1282611287610f02565b610e9284604051806060016040528060248152602001611baa6024913973ffffffffffffffffffffffffffffffffffffffff8816600090815260016020526040812090610e5e610f02565b6112e360078263ffffffff61198b16565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b61133860068263ffffffff61198b16565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b61138d60068263ffffffff6118df16565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b600061098f6113de610f02565b84610e9285604051806060016040528060258152602001611c386025913960016000611408610f02565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61177816565b600061098f611459610f02565b84846115a7565b73ffffffffffffffffffffffffffffffffffffffff83166114cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180611c146024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611538576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611ac76022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611613576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611bef6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661167f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611a526023913960400191505060405180910390fd5b6116cf81604051806060016040528060268152602001611ae96026913973ffffffffffffffffffffffffffffffffffffffff8616600090815260208190526040902054919063ffffffff61177816565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054611711908263ffffffff61182916565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611821576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156117e65781810151838201526020016117ce565b50505050905090810190601f1680156118135780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156106b057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006106b083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611778565b6118e98282611181565b61193e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611b3f6021913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6119958282611181565b15611a0157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e6365506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c6545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365526f6c65733a206163636f756e7420697320746865207a65726f206164647265737345524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a723158208095f4ab30ee4bf35aece7e5628e47b2c5f8148a29b8205c444aa3259ecac17c64736f6c63430005110032526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373

Deployed ByteCode Sourcemap

22712:199:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22712:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20562:83;;;:::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;20562:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22199:140;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22199:140:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12874:91;;;:::i;:::-;;;;;;;;;;;;;;;;22031:160;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22031:160:0;;;;;;;;;;;;;;;;;;:::i;21414:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22347:170;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22347:170:0;;;;;;;;;:::i;4953:120::-;;;:::i;:::-;;21692:143;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21692:143:0;;;;;;;;;:::i;19753:83::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19753:83:0;;:::i;2971:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2971:109:0;;;;:::i;4160:78::-;;;:::i;3188:79::-;;;:::i;13028:110::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13028:110:0;;;;:::i;19898:103::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19898:103:0;;;;;;;;;:::i;3088:92::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3088:92:0;;;;:::i;4740:118::-;;;:::i;20764:87::-;;;:::i;2087:92::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2087:92:0;;;;:::i;2187:79::-;;;:::i;22525:180::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22525:180:0;;;;;;;;;:::i;21891:132::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21891:132:0;;;;;;;;;:::i;1970:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1970:109:0;;;;:::i;13572:134::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13572:134:0;;;;;;;;;;;:::i;20562:83::-;20632:5;20625:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20599:13;;20625:12;;20632:5;;20625:12;;20632:5;20625:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20562:83;:::o;22199:140::-;4397:7;;22278:4;;4397:7;;4396:8;4388:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22302:29;22316:7;22325:5;22302:13;:29::i;:::-;22295:36;22199:140;-1:-1:-1;;;22199:140:0:o;12874:91::-;12945:12;;12874:91;:::o;22031:160::-;4397:7;;22124:4;;4397:7;;4396:8;4388:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22148:35;22167:4;22173:2;22177:5;22148:18;:35::i;:::-;22141:42;22031:160;-1:-1:-1;;;;22031:160:0:o;21414:83::-;21480:9;;;;21414:83;:::o;22347:170::-;4397:7;;22441:4;;4397:7;;4396:8;4388:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22465:44;22489:7;22498:10;22465:23;:44::i;4953:120::-;2868:22;2877:12;:10;:12::i;:::-;2868:8;:22::i;:::-;2860:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4596:7;;;;4588:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5012:7;:15;;;;;;5043:22;5052:12;:10;:12::i;:::-;5043:22;;;;;;;;;;;;;;;;;;4953:120::o;21692:143::-;21766:4;1867:22;1876:12;:10;:12::i;:::-;1867:8;:22::i;:::-;1859:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21783:22;21789:7;21798:6;21783:5;:22::i;:::-;-1:-1:-1;21823:4:0;21692:143;;;;:::o;19753:83::-;19801:27;19807:12;:10;:12::i;:::-;19821:6;19801:5;:27::i;:::-;19753:83;:::o;2971:109::-;3027:4;3051:21;:8;3064:7;3051:21;:12;:21;:::i;:::-;3044:28;2971:109;-1:-1:-1;;2971:109:0:o;4160:78::-;4223:7;;;;4160:78;:::o;3188:79::-;3232:27;3246:12;:10;:12::i;:::-;3232:13;:27::i;:::-;3188:79::o;13028:110::-;13112:18;;13085:7;13112:18;;;;;;;;;;;;13028:110::o;19898:103::-;19967:26;19977:7;19986:6;19967:9;:26::i;:::-;19898:103;;:::o;3088:92::-;2868:22;2877:12;:10;:12::i;2868:22::-;2860:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3153:19;3164:7;3153:10;:19::i;4740:118::-;2868:22;2877:12;:10;:12::i;2868:22::-;2860:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4397:7;;;;4396:8;4388:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4800:7;:14;;;;4810:4;4800:14;;;4830:20;4837:12;:10;:12::i;20764:87::-;20836:7;20829:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20803:13;;20829:14;;20836:7;;20829:14;;20836:7;20829:14;;;;;;;;;;;;;;;;;;;;;;;;2087:92;1867:22;1876:12;:10;:12::i;1867:22::-;1859:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2152:19;2163:7;2152:10;:19::i;2187:79::-;2231:27;2245:12;:10;:12::i;:::-;2231:13;:27::i;22525:180::-;4397:7;;22624:4;;4397:7;;4396:8;4388:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22648:49;22672:7;22681:15;22648:23;:49::i;21891:132::-;4397:7;;21966:4;;4397:7;;4396:8;4388:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21990:25;22005:2;22009:5;21990:14;:25::i;1970:109::-;2026:4;2050:21;:8;2063:7;2050:21;:12;:21;:::i;13572:134::-;13671:18;;;;13644:7;13671:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13572:134::o;13853:152::-;13919:4;13936:39;13945:12;:10;:12::i;:::-;13959:7;13968:6;13936:8;:39::i;14477:304::-;14566:4;14583:36;14593:6;14601:9;14612:6;14583:9;:36::i;:::-;14630:121;14639:6;14647:12;:10;:12::i;:::-;14661:89;14699:6;14661:89;;;;;;;;;;;;;;;;;:19;;;;;;;:11;:19;;;;;;14681:12;:10;:12::i;:::-;14661:33;;;;;;;;;;;;;-1:-1:-1;14661:33:0;;;:89;;:37;:89;:::i;:::-;14630:8;:121::i;:::-;-1:-1:-1;14769:4:0;14477:304;;;;;:::o;15190:210::-;15270:4;15287:83;15296:12;:10;:12::i;:::-;15310:7;15319:50;15358:10;15319:11;:25;15331:12;:10;:12::i;:::-;15319:25;;;;;;;;;;;;;;;;;;-1:-1:-1;15319:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;296:98::-;376:10;296:98;:::o;17406:308::-;17482:21;;;17474:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17567:12;;:24;;17584:6;17567:24;:16;:24;:::i;:::-;17552:12;:39;17623:18;;;:9;:18;;;;;;;;;;;:30;;17646:6;17623:30;:22;:30;:::i;:::-;17602:18;;;:9;:18;;;;;;;;;;;:51;;;;17669:37;;;;;;;17602:18;;:9;;17669:37;;;;;;;;;;17406:308;;:::o;18046:348::-;18122:21;;;18114:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18215:68;18238:6;18215:68;;;;;;;;;;;;;;;;;:18;;;:9;:18;;;;;;;;;;;;:68;;:22;:68;:::i;:::-;18194:18;;;:9;:18;;;;;;;;;;:89;18309:12;;:24;;18326:6;18309:24;:16;:24;:::i;:::-;18294:12;:39;18349:37;;;;;;;;18375:1;;18349:37;;;;;;;;;;;;;18046:348;;:::o;1330:203::-;1402:4;1427:21;;;1419:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1505:20:0;;:11;:20;;;;;;;;;;;;;;;1330:203::o;3405:130::-;3465:24;:8;3481:7;3465:24;:15;:24;:::i;:::-;3505:22;;;;;;;;;;;3405:130;:::o;19358:232::-;19430:22;19436:7;19445:6;19430:5;:22::i;:::-;19463:119;19472:7;19481:12;:10;:12::i;:::-;19495:86;19534:6;19495:86;;;;;;;;;;;;;;;;;:20;;;;;;;:11;:20;;;;;;19516:12;:10;:12::i;3275:122::-;3332:21;:8;3345:7;3332:21;:12;:21;:::i;:::-;3369:20;;;;;;;;;;;3275:122;:::o;2274:::-;2331:21;:8;2344:7;2331:21;:12;:21;:::i;:::-;2368:20;;;;;;;;;;;2274:122;:::o;2404:130::-;2464:24;:8;2480:7;2464:24;:15;:24;:::i;:::-;2504:22;;;;;;;;;;;2404:130;:::o;15903:261::-;15988:4;16005:129;16014:12;:10;:12::i;:::-;16028:7;16037:96;16076:15;16037:96;;;;;;;;;;;;;;;;;:11;:25;16049:12;:10;:12::i;:::-;16037:25;;;;;;;;;;;;;;;;;;-1:-1:-1;16037:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;13351:158::-;13420:4;13437:42;13447:12;:10;:12::i;:::-;13461:9;13472:6;13437:9;:42::i;18834:338::-;18928:19;;;18920:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19007:21;;;18999:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19080:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19132:32;;;;;;;;;;;;;;;;;18834:338;;;:::o;16654:471::-;16752:20;;;16744:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16833:23;;;16825:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16929;16951:6;16929:71;;;;;;;;;;;;;;;;;:17;;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;16909:17;;;;:9;:17;;;;;;;;;;;:91;;;;17034:20;;;;;;;:32;;17059:6;17034:32;:24;:32;:::i;:::-;17011:20;;;;:9;:20;;;;;;;;;;;;:55;;;;17082:35;;;;;;;17011:20;;17082:35;;;;;;;;;;;;;16654:471;;;:::o;6264:192::-;6350:7;6386:12;6378:6;;;;6370: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;6370:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6422:5:0;;;6264:192::o;5335:181::-;5393:7;5425:5;;;5449:6;;;;5441:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5791:136;5849:7;5876:43;5880:1;5883;5876:43;;;;;;;;;;;;;;;;;:3;:43::i;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://8095f4ab30ee4bf35aece7e5628e47b2c5f8148a29b8205c444aa3259ecac17c
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.