Contract 0x971010d151a110469644ef212ecc9aa311a4af26

Txn Hash
Block
From
To
Value [Txn Fee]
0x679378c1228798ac9992d6a07388cab7c666fdedfd0c7141eb0ffe52c55cf1576497562020-09-18 9:50:11270 days 6 hrs ago0x3ea8375b450e443a9bb5cac5f4be9f8f646d7318 IN  Contract Creation0 FTM0.001710813
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FantomMintTokenRegistry

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 5000000 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at FtmScan.com on 2021-02-24
*/

pragma solidity ^0.5.0;

/**
* This implements Fantom fMint Token Registry.
*/
contract Initializable {

  /**
   * @dev Indicates that the contract has been initialized.
   */
  bool private initialized;

  /**
   * @dev Indicates that the contract is in the process of being initialized.
   */
  bool private initializing;

  /**
   * @dev Modifier to use in the initializer function of a contract.
   */
  modifier initializer() {
    require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized");

    bool isTopLevelCall = !initializing;
    if (isTopLevelCall) {
      initializing = true;
      initialized = true;
    }

    _;

    if (isTopLevelCall) {
      initializing = false;
    }
  }

  /// @dev Returns true if and only if the function is running in the constructor
  function isConstructor() private view returns (bool) {
    // extcodesize checks the size of the code stored in an address, and
    // address returns the current address. Since the code is still not
    // deployed when running a constructor, any checks on its code size will
    // yield zero, making it an effective way to detect if a contract is
    // under construction or not.
    address self = address(this);
    uint256 cs;
    assembly { cs := extcodesize(self) }
    return cs == 0;
  }

  // Reserved storage space to allow for layout changes in the future.
  uint256[50] private ______gap;
}

contract Context is Initializable {
    // 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;
    }
}

contract Ownable is Initializable, Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    function initialize(address sender) public initializer {
        _owner = sender;
        emit OwnershipTransferred(address(0), _owner);
    }

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

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

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    uint256[50] private ______gap;
}

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() external view returns (string memory);

    /**
     * @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() external view returns (uint8);
}

interface IFantomMintTokenRegistry {

    // priceDecimals returns the number of decimal places a price
    // returned for the given token will be encoded to.
	function priceDecimals(address _token) external view returns (uint8);

    // isActive informs if the specified token is active and can be used in DeFi protocols.
    function isActive(address _token) external view returns (bool);

    // canMint informs if the specified token can be deposited to collateral pool.
    function canDeposit(address _token) external view returns (bool);

	// canMint informs if the given token can be minted in the fMint protocol.
    function canMint(address _token) external view returns (bool);
}

contract FantomMintTokenRegistry is Initializable, Ownable, IFantomMintTokenRegistry {
    // TokenInformation represents a single token handled by the registry.
    // The DeFi API uses this reference to do on-chain tokens tracking.
    struct TokenInformation {
        uint256 id;          // Internal id of the token (index starting from 1)
        string name;         // Name of the token
        string symbol;       // symbol of the token
        uint8 decimals;      // number of decimals of the token
        string logo;         // URL address of the token logo
        address oracle;      // address of the token price oracle
        uint8 priceDecimals; // number of decimals the token's price oracle uses
        bool isActive;       // is this token active in DeFi?
        bool canDeposit;     // is this token available for deposit?
        bool canMint;        // is this token available for minting?
    }

    // tokens is the mapping between the token address and it's detailed information.
    mapping(address => TokenInformation) public tokens;

    // tokensList is the list of tokens handled by the registry.
    address[] public tokensList;

    // TokenAdded event is emitted when a new token information is added to the contract.
    event TokenAdded(address indexed token, string name, uint256 index);

    // TokenUpdated event is emitted when an existing token information is updated.
    event TokenUpdated(address indexed token, string name);

    // initialize initializes the contract properly before the first use.
    function initialize(address owner) public initializer {
        Ownable.initialize(owner);
    }

    // ---------------------------------
    // tokens registry view functions
    // ---------------------------------

    // tokensCount returns the total number of tokens in the registry.
    function tokensCount() public view returns (uint256) {
        return tokensList.length;
    }

    // priceDecimals returns the number of decimal places a price
    // returned for the given token will be encoded to.
    function priceDecimals(address _token) public view returns (uint8) {
        return tokens[_token].priceDecimals;
    }

    // isActive informs if the specified token is active and can be used in DeFi protocols.
    function isActive(address _token) public view returns (bool) {
        return tokens[_token].isActive;
    }

    // canDeposit informs if the specified token can be deposited to collateral pool.
    function canDeposit(address _token) public view returns (bool) {
        return tokens[_token].canDeposit;
    }

    // canMint informs if the specified token can be minted in Fantom DeFi.
    function canMint(address _token) public view returns (bool) {
        return tokens[_token].canMint;
    }

    // ---------------------------------
    // tokens management
    // ---------------------------------

    // addToken adds new token into the reference contract.
    function addToken(
        address _token,
        string calldata _logo,
        address _oracle,
        uint8 _priceDecimals,
        bool _isActive,
        bool _canDeposit,
        bool _canMint
    ) external onlyOwner {
        // make sure the token does not exist yet
        require(0 == tokens[_token].id, "token already known");

        // pull decimals from the ERC20 token
        uint8 _decimals = IERC20Detailed(_token).decimals();
        require(_decimals > 0, "token decimals invalid");

        // add the token address to the list
        tokensList.push(_token);

        // get the token name
        string memory _name = IERC20Detailed(_token).name();

        // create and store the token information
        tokens[_token] = TokenInformation({
        id : tokensList.length,
        name : _name,
        symbol : IERC20Detailed(_token).symbol(),
        decimals : _decimals,
        logo : _logo,
        oracle : _oracle,
        priceDecimals : _priceDecimals,
        isActive : _isActive,
        canDeposit : _canDeposit,
        canMint : _canMint
        });

        // inform
        emit TokenAdded(_token, _name, tokensList.length - 1);
    }

    // updateToken modifies existing token in the reference contract.
    function updateToken(
        address _token,
        string calldata _logo,
        address _oracle,
        uint8 _priceDecimals,
        bool _isActive,
        bool _canDeposit,
        bool _canMint
    ) external onlyOwner {
        // make sure the token exists
        require(0 != tokens[_token].id, "token unknown");

        // update token details in the contract
        tokens[_token].logo = _logo;
        tokens[_token].oracle = _oracle;
        tokens[_token].priceDecimals = _priceDecimals;
        tokens[_token].isActive = _isActive;
        tokens[_token].canDeposit = _canDeposit;
        tokens[_token].canMint = _canMint;

        // inform
        emit TokenUpdated(_token, tokens[_token].name);
    }
}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"TokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"TokenUpdated","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"string","name":"_logo","type":"string"},{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"uint8","name":"_priceDecimals","type":"uint8"},{"internalType":"bool","name":"_isActive","type":"bool"},{"internalType":"bool","name":"_canDeposit","type":"bool"},{"internalType":"bool","name":"_canMint","type":"bool"}],"name":"addToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"canDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"canMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"priceDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokens","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"string","name":"logo","type":"string"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"uint8","name":"priceDecimals","type":"uint8"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"bool","name":"canDeposit","type":"bool"},{"internalType":"bool","name":"canMint","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensList","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"string","name":"_logo","type":"string"},{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"uint8","name":"_priceDecimals","type":"uint8"},{"internalType":"bool","name":"_isActive","type":"bool"},{"internalType":"bool","name":"_canDeposit","type":"bool"},{"internalType":"bool","name":"_canMint","type":"bool"}],"name":"updateToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

6080604052611e24806100136000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a64ed8ba1161008c578063cefe0f2111610066578063cefe0f211461030d578063d75c1c4c14610356578063e48603391461041a578063f2fde38b146105ec576100ea565b8063a64ed8ba1461028d578063c2ba4744146102a7578063c4d66de8146102da576100ea565b8063715018a6116100c8578063715018a6146102425780638da5cb5b1461024a5780638f32d59b146102525780639f8a13d71461025a576100ea565b80634bf0d331146100ef5780634d12e34e146101365780636a77a2141461017c575b600080fd5b6101226004803603602081101561010557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661061f565b604080519115158252519081900360200190f35b6101536004803603602081101561014c57600080fd5b5035610667565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610240600480360360e081101561019257600080fd5b73ffffffffffffffffffffffffffffffffffffffff82351691908101906040810160208201356401000000008111156101ca57600080fd5b8201836020820111156101dc57600080fd5b803590602001918460018302840111640100000000831117156101fe57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060ff602082013516906040810135151590606081013515159060800135151561069b565b005b610240610f38565b61015361101a565b610122611037565b6101226004803603602081101561027057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611077565b6102956110be565b60408051918252519081900360200190f35b610122600480360360208110156102bd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166110c4565b610240600480360360208110156102f057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661110d565b6103406004803603602081101561032357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661122b565b6040805160ff9092168252519081900360200190f35b610240600480360360e081101561036c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff82351691908101906040810160208201356401000000008111156103a457600080fd5b8201836020820111156103b657600080fd5b803590602001918460018302840111640100000000831117156103d857600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060ff6020820135169060408101351515906060810135151590608001351515611271565b61044d6004803603602081101561043057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166116ae565b604080518b815260ff808a16606083015273ffffffffffffffffffffffffffffffffffffffff881660a0830152861660c082015284151560e082015283151561010082015282151561012082015261014060208083018281528d51928401929092528c5192939192918401916080850191610160860191908f019080838360005b838110156104e65781810151838201526020016104ce565b50505050905090810190601f1680156105135780820380516001836020036101000a031916815260200191505b5084810383528c5181528c516020918201918e019080838360005b8381101561054657818101518382015260200161052e565b50505050905090810190601f1680156105735780820380516001836020036101000a031916815260200191505b5084810382528a5181528a516020918201918c019080838360005b838110156105a657818101518382015260200161058e565b50505050905090810190601f1680156105d35780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b6102406004803603602081101561060257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661196c565b73ffffffffffffffffffffffffffffffffffffffff16600090815260666020526040902060050154760100000000000000000000000000000000000000000000900460ff1690565b6067818154811061067457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6106a3611037565b61070e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8816600090815260666020526040902054156107a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f6b656e20616c7265616479206b6e6f776e00000000000000000000000000604482015290519081900360640190fd5b60008873ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156107e857600080fd5b505afa1580156107fc573d6000803e3d6000fd5b505050506040513d602081101561081257600080fd5b5051905060ff811661088557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f746f6b656e20646563696d616c7320696e76616c696400000000000000000000604482015290519081900360640190fd5b6067805460018101825560009182527f9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6ae0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c16908117909155604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290516060936306fdde039260048082019391829003018186803b15801561094457600080fd5b505afa158015610958573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561099f57600080fd5b81019080805160405193929190846401000000008211156109bf57600080fd5b9083019060208201858111156109d457600080fd5b82516401000000008111828201881017156109ee57600080fd5b82525081516020918201929091019080838360005b83811015610a1b578181015183820152602001610a03565b50505050905090810190601f168015610a485780820380516001836020036101000a031916815260200191505b50604052505050905060405180610140016040528060678054905081526020018281526020018b73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015610ab457600080fd5b505afa158015610ac8573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015610b0f57600080fd5b8101908080516040519392919084640100000000821115610b2f57600080fd5b908301906020820185811115610b4457600080fd5b8251640100000000811182820188101715610b5e57600080fd5b82525081516020918201929091019080838360005b83811015610b8b578181015183820152602001610b73565b50505050905090810190601f168015610bb85780820380516001836020036101000a031916815260200191505b5060405250505081526020018360ff1681526020018a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505073ffffffffffffffffffffffffffffffffffffffff808b1660208085019190915260ff8b166040808601919091528a15156060860152891515608086015288151560a090950194909452908e16825260668152919020825181558282015180519192610c7992600185019290910190611c77565b5060408201518051610c95916002840191602090910190611c77565b5060608201516003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff90921691909117905560808201518051610ce9916004840191602090910190611c77565b5060a08201516005909101805460c084015160e085015161010086015161012090960151151577010000000000000000000000000000000000000000000000027fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff961515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff9215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff60ff90951674010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff998a167fffffffffffffffffffffffff0000000000000000000000000000000000000000909816979097179690961695909517939093169390931716179390931692909217909155606754604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920160208084018290528284528551928401929092528451938e16937f4af7419360b60cfcf01ac8a5c1487814e666a0af47877d73e82476772ac9150f9386939091829160608301919086019080838360005b83811015610ef1578181015183820152602001610ed9565b50505050905090810190601f168015610f1e5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a250505050505050505050565b610f40611037565b610fab57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60335460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60335473ffffffffffffffffffffffffffffffffffffffff165b90565b60335460009073ffffffffffffffffffffffffffffffffffffffff1661105b6119eb565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b73ffffffffffffffffffffffffffffffffffffffff166000908152606660205260409020600501547501000000000000000000000000000000000000000000900460ff1690565b60675490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526066602052604090206005015477010000000000000000000000000000000000000000000000900460ff1690565b600054610100900460ff168061112657506111266119ef565b80611134575060005460ff16155b611189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180611dc2602e913960400191505060405180910390fd5b600054610100900460ff161580156111ef57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6111f8826119f5565b801561122757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526066602052604090206005015474010000000000000000000000000000000000000000900460ff1690565b611279611037565b6112e457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff881660009081526066602052604090205461137557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f746f6b656e20756e6b6e6f776e00000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff881660009081526066602052604090206113a8906004018888611cf5565b5084606660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083606660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160146101000a81548160ff021916908360ff16021790555082606660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160156101000a81548160ff02191690831515021790555081606660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160166101000a81548160ff02191690831515021790555080606660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160176101000a81548160ff0219169083151502179055508773ffffffffffffffffffffffffffffffffffffffff167f7dfa4f44638df9ca9c035c37f4954edb0383135db7751b81208a86345775a159606660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160405180806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156116965780601f1061166b57610100808354040283529160200191611696565b820191906000526020600020905b81548152906001019060200180831161167957829003601f168201915b50509250505060405180910390a25050505050505050565b6066602090815260009182526040918290208054600180830180548651600293821615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190911692909204601f8101869004860283018601909652858252919492939092908301828280156117695780601f1061173e57610100808354040283529160200191611769565b820191906000526020600020905b81548152906001019060200180831161174c57829003601f168201915b50505060028085018054604080516020601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018716150201909416959095049283018590048502810185019091528181529596959450909250908301828280156118195780601f106117ee57610100808354040283529160200191611819565b820191906000526020600020905b8154815290600101906020018083116117fc57829003601f168201915b50505050600383015460048401805460408051602060026101006001861615027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152959660ff90941695939450908301828280156118d25780601f106118a7576101008083540402835291602001916118d2565b820191906000526020600020905b8154815290600101906020018083116118b557829003601f168201915b5050506005909301549192505073ffffffffffffffffffffffffffffffffffffffff81169060ff740100000000000000000000000000000000000000008204811691750100000000000000000000000000000000000000000081048216917601000000000000000000000000000000000000000000008204811691770100000000000000000000000000000000000000000000009004168a565b611974611037565b6119df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6119e881611b7d565b50565b3390565b303b1590565b600054610100900460ff1680611a0e5750611a0e6119ef565b80611a1c575060005460ff16155b611a71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180611dc2602e913960400191505060405180910390fd5b600054610100900460ff16158015611ad757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84811691909117918290556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3801561122757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b73ffffffffffffffffffffffffffffffffffffffff8116611be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611d9c6026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611cb857805160ff1916838001178555611ce5565b82800160010185558215611ce5579182015b82811115611ce5578251825591602001919060010190611cca565b50611cf1929150611d81565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611d54578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ce5565b82800160010185558215611ce5579182015b82811115611ce5578235825591602001919060010190611d66565b61103491905b80821115611cf15760008155600101611d8756fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a265627a7a72315820bf4177f45ba6edee06c14c128b300b9ec629e4792c3408f6d44cd2df68cf798d64736f6c63430005110032

Deployed ByteCode Sourcemap

5862:5085:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5862:5085:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8405:114;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8405:114:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7021:27;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7021:27:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;8893:1224;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;8893:1224:0;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;8893:1224:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8893:1224:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;8893:1224:0;;-1:-1:-1;8893:1224:0;-1:-1:-1;8893:1224:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3426:140;;;:::i;2613:79::-;;;:::i;2979:94::-;;;:::i;8200:110::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8200:110:0;;;;:::i;7750:96::-;;;:::i;:::-;;;;;;;;;;;;;;;;8604:108;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8604:108:0;;;;:::i;7447:98::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7447:98:0;;;;:::i;7978:121::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7978:121:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10196:748;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;10196:748:0;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;10196:748:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10196:748:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;10196:748:0;;-1:-1:-1;10196:748:0;-1:-1:-1;10196:748:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6896:50::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6896:50:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-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;6896:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6896:50:0;;;;;;;;;;;;;;;;;;;;;;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;6896:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6896:50:0;;;;;;;;;;;;;;;;;;;;;;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;6896:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3721:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3721:109:0;;;;:::i;8405:114::-;8486:14;;8462:4;8486:14;;;:6;:14;;;;;:25;;;;;;;;;8405:114::o;7021:27::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7021:27:0;:::o;8893:1224::-;2825:9;:7;:9::i;:::-;2817:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9202:14;;;;;;;:6;:14;;;;;:17;9197:22;9189:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9303:15;9336:6;9321:31;;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9321:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9321:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9321:33:0;;-1:-1:-1;9373:13:0;;;9365:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9472:10;27::-1;;39:1;23:18;;45:23;;-1:-1;9472:23:0;;;;;;;;;;;;;;;;;;9561:29;;;;;;;;9539:19;;9561:27;;:29;;;;;;;;;;;9472:23;9561:29;;;5:2:-1;;;;30:1;27;20:12;5:2;9561:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9561:29:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;9561:29:0;80:15:-1;;;97:9;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;9561:29:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;9561:29:0;;420:4:-1;411:14;;;;9561:29:0;;;;;411:14:-1;9561:29:0;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;9561:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9539:51;;9671:353;;;;;;;;9704:10;:17;;;;9671:353;;;;9739:5;9671:353;;;;9779:6;9764:29;;;:31;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9764:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9764:31:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;9764:31:0;80:15:-1;;;97:9;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;9764:31:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;9764:31:0;;420:4:-1;411:14;;;;9764:31:0;;;;;411:14:-1;9764:31:0;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;9764:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9671:353;;;;9817:9;9671:353;;;;;;9844:5;;9671:353;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;9671:353:0;;;-1:-1:-1;;;9671:353:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9654:14;;;;;:6;:14;;;;;:370;;;;;;;;;;:14;;:370;;;;;;;;;;;:::i;:::-;-1:-1:-1;9654:370:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;9654:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;9654:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10087:10;:17;10061:48;;;10087:21;;;;10061:48;;;;;;;;;;;;;;;;;;;;;;;;;;;10080:5;;10061:48;;;;;;;;;;;;;;;9654:370;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;10061:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2882:1;;8893:1224;;;;;;;;:::o;3426:140::-;2825:9;:7;:9::i;:::-;2817:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3509:6;;3488:40;;3525:1;;3488:40;3509:6;;3488:40;;3525:1;;3488:40;3539:6;:19;;;;;;3426:140::o;2613:79::-;2678:6;;;;2613:79;;:::o;2979:94::-;3059:6;;3019:4;;3059:6;;3043:12;:10;:12::i;:::-;:22;;;3036:29;;2979:94;:::o;8200:110::-;8279:14;;8255:4;8279:14;;;:6;:14;;;;;:23;;;;;;;;;8200:110::o;7750:96::-;7821:10;:17;7750:96;:::o;8604:108::-;8682:14;;8658:4;8682:14;;;:6;:14;;;;;:22;;;;;;;;;8604:108::o;7447:98::-;467:12;;;;;;;;:31;;;483:15;:13;:15::i;:::-;467:47;;;-1:-1:-1;503:11:0;;;;502:12;467:47;459:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;574:19;597:12;;;;;;596:13;616:83;;;;645:12;:19;;673:18;645:19;;;;;;673:18;660:4;673:18;;;616:83;7512:25;7531:5;7512:18;:25::i;:::-;721:14;717:57;;;761:5;746:20;;;;;;717:57;7447:98;;:::o;7978:121::-;8063:14;;8038:5;8063:14;;;:6;:14;;;;;:28;;;;;;;;;7978:121::o;10196:748::-;2825:9;:7;:9::i;:::-;2817:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10496:14;;;;;;;:6;:14;;;;;:17;10483:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10593:14;;;;;;;:6;:14;;;;;:27;;:19;;10615:5;;10593:27;:::i;:::-;;10655:7;10631:6;:14;10638:6;10631:14;;;;;;;;;;;;;;;:21;;;:31;;;;;;;;;;;;;;;;;;10704:14;10673:6;:14;10680:6;10673:14;;;;;;;;;;;;;;;:28;;;:45;;;;;;;;;;;;;;;;;;10755:9;10729:6;:14;10736:6;10729:14;;;;;;;;;;;;;;;:23;;;:35;;;;;;;;;;;;;;;;;;10803:11;10775:6;:14;10782:6;10775:14;;;;;;;;;;;;;;;:25;;;:39;;;;;;;;;;;;;;;;;;10850:8;10825:6;:14;10832:6;10825:14;;;;;;;;;;;;;;;:22;;;:33;;;;;;;;;;;;;;;;;;10908:6;10895:41;;;10916:6;:14;10923:6;10916:14;;;;;;;;;;;;;;;:19;;10895:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10196:748;;;;;;;;:::o;6896:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6896:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6896:50:0;;-1:-1:-1;6896:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;6896:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6896:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6896:50:0;;;;;;;-1:-1:-1;;6896:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3721:109::-;2825:9;:7;:9::i;:::-;2817:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:28;3813:8;3794:18;:28::i;:::-;3721:109;:::o;1777:98::-;1857:10;1777:98;:::o;868:508::-;1285:4;1331:17;1363:7;868:508;:::o;2387:145::-;467:12;;;;;;;;:31;;;483:15;:13;:15::i;:::-;467:47;;;-1:-1:-1;503:11:0;;;;502:12;467:47;459:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;574:19;597:12;;;;;;596:13;616:83;;;;645:12;:19;;673:18;645:19;;;;;;673:18;660:4;673:18;;;616:83;2453:6;:15;;;;;;;;;;;;;;;;2484:40;;2517:6;;;-1:-1:-1;;2484:40:0;;-1:-1:-1;;2484:40:0;721:14;717:57;;;761:5;746:20;;;;;;2387:145;;:::o;3936:229::-;4010:22;;;4002:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4112:6;;4091:38;;;;;;;4112:6;;4091:38;;4112:6;;4091:38;4140:6;:17;;;;;;;;;;;;;;;3936:229::o;5862:5085::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5862:5085:0;;;-1:-1:-1;5862:5085:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

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