Contract 0xEac49454A156AbFF249E2C1A2aEF4E4f192D8Cb9

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x759f3ba9c050666a7ad1d76b2a4d89c0eea8e0505e3773f5f9bee1e171efd73e0x60c06040197372852021-10-22 5:49:0347 days 12 hrs ago0x55d56e1bb2fc8280a775ccfe9ececcecf1a01562 IN  Contract Creation0 FTM0.151529243792
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x759f3ba9c050666a7ad1d76b2a4d89c0eea8e0505e3773f5f9bee1e171efd73e197372852021-10-22 5:49:0347 days 12 hrs ago 0x55d56e1bb2fc8280a775ccfe9ececcecf1a01562  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ChainlinkedOracleMainAsset

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 7 : ChainlinkedOracleMainAsset.sol
// SPDX-License-Identifier: bsl-1.1

/*
  Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]).
*/
pragma solidity 0.7.6;

import "../helpers/SafeMath.sol";
import "../VaultParameters.sol";
import "../interfaces/IAggregator.sol";
import "../interfaces/IOracleUsd.sol";
import "../interfaces/IOracleEth.sol";
import "../interfaces/IToken.sol";

/**
 * @title ChainlinkedOracleMainAsset
 * @dev Calculates the USD price of desired tokens
 **/
contract ChainlinkedOracleMainAsset is IOracleUsd, IOracleEth, Auth {
    using SafeMath for uint;

    mapping (address => address) public usdAggregators;
    mapping (address => address) public ethAggregators;

    uint public constant Q112 = 2 ** 112;

    uint public constant USD_TYPE = 0;
    uint public constant ETH_TYPE = 1;

    address public immutable WETH;

    event NewAggregator(address indexed asset, address indexed aggregator, uint aggType);

    constructor(
        address[] memory tokenAddresses1,
        address[] memory _usdAggregators,
        address[] memory tokenAddresses2,
        address[] memory _ethAggregators,
        address weth,
        address vaultParameters
    )
        Auth(vaultParameters)
    {
        require(tokenAddresses1.length == _usdAggregators.length, "Unit Protocol: ARGUMENTS_LENGTH_MISMATCH");
        require(tokenAddresses2.length == _ethAggregators.length, "Unit Protocol: ARGUMENTS_LENGTH_MISMATCH");
        require(weth != address(0) && vaultParameters != address(0), "Unit Protocol: ZERO_ADDRESS");

        WETH = weth;

        for (uint i = 0; i < tokenAddresses1.length; i++) {
            usdAggregators[tokenAddresses1[i]] = _usdAggregators[i];
            emit NewAggregator(tokenAddresses1[i], _usdAggregators[i], USD_TYPE);
        }

        for (uint i = 0; i < tokenAddresses2.length; i++) {
            ethAggregators[tokenAddresses2[i]] = _ethAggregators[i];
            emit NewAggregator(tokenAddresses2[i], _ethAggregators[i], ETH_TYPE);
        }
    }

    function setAggregators(
        address[] calldata tokenAddresses1,
        address[] calldata _usdAggregators,
        address[] calldata tokenAddresses2,
        address[] calldata _ethAggregators
    ) external onlyManager {
        require(tokenAddresses1.length == _usdAggregators.length, "Unit Protocol: ARGUMENTS_LENGTH_MISMATCH");
        require(tokenAddresses2.length == _ethAggregators.length, "Unit Protocol: ARGUMENTS_LENGTH_MISMATCH");

        for (uint i = 0; i < tokenAddresses1.length; i++) {
            usdAggregators[tokenAddresses1[i]] = _usdAggregators[i];
            emit NewAggregator(tokenAddresses1[i], _usdAggregators[i], USD_TYPE);
        }

        for (uint i = 0; i < tokenAddresses2.length; i++) {
            ethAggregators[tokenAddresses2[i]] = _ethAggregators[i];
            emit NewAggregator(tokenAddresses2[i], _ethAggregators[i], ETH_TYPE);
        }
    }

    /**
     * @notice {asset}/USD or {asset}/ETH pair must be registered at Chainlink
     * @param asset The token address
     * @param amount Amount of tokens
     * @return Q112-encoded price of asset amount in USD
     **/
    function assetToUsd(address asset, uint amount) public override view returns (uint) {
        if (amount == 0) {
            return 0;
        }
        if (usdAggregators[asset] != address(0)) {
            return _assetToUsd(asset, amount);
        }
        return ethToUsd(assetToEth(asset, amount));
    }

    function _assetToUsd(address asset, uint amount) internal view returns (uint) {
        IAggregator agg = IAggregator(usdAggregators[asset]);
        (, int256 answer, , uint256 updatedAt, ) = agg.latestRoundData();
        require(updatedAt > block.timestamp - 24 hours, "Unit Protocol: STALE_CHAINLINK_PRICE");
        require(answer >= 0, "Unit Protocol: NEGATIVE_CHAINLINK_PRICE");
        int decimals = 18 - int(IToken(asset).decimals()) - int(agg.decimals());
        if (decimals < 0) {
            return amount.mul(uint(answer)).mul(Q112).div(10 ** uint(-decimals));
        } else {
            return amount.mul(uint(answer)).mul(Q112).mul(10 ** uint(decimals));
        }
    }

    /**
     * @notice {asset}/ETH pair must be registered at Chainlink
     * @param asset The token address
     * @param amount Amount of tokens
     * @return Q112-encoded price of asset amount in ETH
     **/
    function assetToEth(address asset, uint amount) public view override returns (uint) {
        if (amount == 0) {
            return 0;
        }
        if (asset == WETH) {
            return amount.mul(Q112);
        }
        IAggregator agg = IAggregator(ethAggregators[asset]);

        if (address(agg) == address (0)) {
            // check for usd aggregator
            require(usdAggregators[asset] != address (0), "Unit Protocol: AGGREGATOR_DOES_NOT_EXIST");
            return usdToEth(_assetToUsd(asset, amount));
        }

        (, int256 answer, , uint256 updatedAt, ) = agg.latestRoundData();
        require(updatedAt > block.timestamp - 24 hours, "Unit Protocol: STALE_CHAINLINK_PRICE");
        require(answer >= 0, "Unit Protocol: NEGATIVE_CHAINLINK_PRICE");
        int decimals = 18 - int(IToken(asset).decimals()) - int(agg.decimals());
        if (decimals < 0) {
            return amount.mul(uint(answer)).mul(Q112).div(10 ** uint(-decimals));
        } else {
            return amount.mul(uint(answer)).mul(Q112).mul(10 ** uint(decimals));
        }
    }

    /**
     * @notice ETH/USD price feed from Chainlink, see for more info: https://feeds.chain.link/eth-usd
     * returns The price of given amount of Ether in USD (0 decimals)
     **/
    function ethToUsd(uint ethAmount) public override view returns (uint) {
        IAggregator agg = IAggregator(usdAggregators[WETH]);
        (, int256 answer, , uint256 updatedAt, ) = agg.latestRoundData();
        require(updatedAt > block.timestamp - 6 hours, "Unit Protocol: STALE_CHAINLINK_PRICE");
        return ethAmount.mul(uint(answer)).div(10 ** agg.decimals());
    }

    function usdToEth(uint _usdAmount) public override view returns (uint) {
        IAggregator agg = IAggregator(usdAggregators[WETH]);
        (, int256 answer, , uint256 updatedAt, ) = agg.latestRoundData();
        require(updatedAt > block.timestamp - 6 hours, "Unit Protocol: STALE_CHAINLINK_PRICE");
        return _usdAmount.mul(10 ** agg.decimals()).div(uint(answer));
    }
}

File 2 of 7 : SafeMath.sol
// SPDX-License-Identifier: bsl-1.1

/*
  Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]).
*/
pragma solidity 0.7.6;


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        assert(c / a == b);
        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        assert(c >= a);
        return c;
    }
}

File 3 of 7 : VaultParameters.sol
// SPDX-License-Identifier: bsl-1.1

/*
  Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]).
*/
pragma solidity 0.7.6;



/**
 * @title Auth
 * @dev Manages USDP's system access
 **/
contract Auth {

    // address of the the contract with vault parameters
    VaultParameters public immutable vaultParameters;

    constructor(address _parameters) {
        vaultParameters = VaultParameters(_parameters);
    }

    // ensures tx's sender is a manager
    modifier onlyManager() {
        require(vaultParameters.isManager(msg.sender), "Unit Protocol: AUTH_FAILED");
        _;
    }

    // ensures tx's sender is able to modify the Vault
    modifier hasVaultAccess() {
        require(vaultParameters.canModifyVault(msg.sender), "Unit Protocol: AUTH_FAILED");
        _;
    }

    // ensures tx's sender is the Vault
    modifier onlyVault() {
        require(msg.sender == vaultParameters.vault(), "Unit Protocol: AUTH_FAILED");
        _;
    }
}



/**
 * @title VaultParameters
 **/
contract VaultParameters is Auth {

    // map token to stability fee percentage; 3 decimals
    mapping(address => uint) public stabilityFee;

    // map token to liquidation fee percentage, 0 decimals
    mapping(address => uint) public liquidationFee;

    // map token to USDP mint limit
    mapping(address => uint) public tokenDebtLimit;

    // permissions to modify the Vault
    mapping(address => bool) public canModifyVault;

    // managers
    mapping(address => bool) public isManager;

    // enabled oracle types
    mapping(uint => mapping (address => bool)) public isOracleTypeEnabled;

    // address of the Vault
    address payable public immutable vault;

    // The foundation address
    address public foundation;

    /**
     * The address for an Ethereum contract is deterministically computed from the address of its creator (sender)
     * and how many transactions the creator has sent (nonce). The sender and nonce are RLP encoded and then
     * hashed with Keccak-256.
     * Therefore, the Vault address can be pre-computed and passed as an argument before deployment.
    **/
    constructor(address payable _vault, address _foundation) Auth(address(this)) {
        require(_vault != address(0), "Unit Protocol: ZERO_ADDRESS");
        require(_foundation != address(0), "Unit Protocol: ZERO_ADDRESS");

        isManager[msg.sender] = true;
        vault = _vault;
        foundation = _foundation;
    }

    /**
     * @notice Only manager is able to call this function
     * @dev Grants and revokes manager's status of any address
     * @param who The target address
     * @param permit The permission flag
     **/
    function setManager(address who, bool permit) external onlyManager {
        isManager[who] = permit;
    }

    /**
     * @notice Only manager is able to call this function
     * @dev Sets the foundation address
     * @param newFoundation The new foundation address
     **/
    function setFoundation(address newFoundation) external onlyManager {
        require(newFoundation != address(0), "Unit Protocol: ZERO_ADDRESS");
        foundation = newFoundation;
    }

    /**
     * @notice Only manager is able to call this function
     * @dev Sets ability to use token as the main collateral
     * @param asset The address of the main collateral token
     * @param stabilityFeeValue The percentage of the year stability fee (3 decimals)
     * @param liquidationFeeValue The liquidation fee percentage (0 decimals)
     * @param usdpLimit The USDP token issue limit
     * @param oracles The enables oracle types
     **/
    function setCollateral(
        address asset,
        uint stabilityFeeValue,
        uint liquidationFeeValue,
        uint usdpLimit,
        uint[] calldata oracles
    ) external onlyManager {
        setStabilityFee(asset, stabilityFeeValue);
        setLiquidationFee(asset, liquidationFeeValue);
        setTokenDebtLimit(asset, usdpLimit);
        for (uint i=0; i < oracles.length; i++) {
            setOracleType(oracles[i], asset, true);
        }
    }

    /**
     * @notice Only manager is able to call this function
     * @dev Sets a permission for an address to modify the Vault
     * @param who The target address
     * @param permit The permission flag
     **/
    function setVaultAccess(address who, bool permit) external onlyManager {
        canModifyVault[who] = permit;
    }

    /**
     * @notice Only manager is able to call this function
     * @dev Sets the percentage of the year stability fee for a particular collateral
     * @param asset The address of the main collateral token
     * @param newValue The stability fee percentage (3 decimals)
     **/
    function setStabilityFee(address asset, uint newValue) public onlyManager {
        stabilityFee[asset] = newValue;
    }

    /**
     * @notice Only manager is able to call this function
     * @dev Sets the percentage of the liquidation fee for a particular collateral
     * @param asset The address of the main collateral token
     * @param newValue The liquidation fee percentage (0 decimals)
     **/
    function setLiquidationFee(address asset, uint newValue) public onlyManager {
        require(newValue <= 100, "Unit Protocol: VALUE_OUT_OF_RANGE");
        liquidationFee[asset] = newValue;
    }

    /**
     * @notice Only manager is able to call this function
     * @dev Enables/disables oracle types
     * @param _type The type of the oracle
     * @param asset The address of the main collateral token
     * @param enabled The control flag
     **/
    function setOracleType(uint _type, address asset, bool enabled) public onlyManager {
        isOracleTypeEnabled[_type][asset] = enabled;
    }

    /**
     * @notice Only manager is able to call this function
     * @dev Sets USDP limit for a specific collateral
     * @param asset The address of the main collateral token
     * @param limit The limit number
     **/
    function setTokenDebtLimit(address asset, uint limit) public onlyManager {
        tokenDebtLimit[asset] = limit;
    }
}

File 4 of 7 : IAggregator.sol
// SPDX-License-Identifier: bsl-1.1

/*
  Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]).
*/
pragma solidity 0.7.6;


/**
**/
interface IAggregator {
    function latestAnswer() external view returns (int256);
    function latestTimestamp() external view returns (uint256);
    function latestRound() external view returns (uint256);
    function getAnswer(uint256 roundId) external view returns (int256);
    function getTimestamp(uint256 roundId) external view returns (uint256);
    function decimals() external view returns (uint256);

    function latestRoundData()
    external
    view
    returns (
        uint80 roundId,
        int256 answer,
        uint256 startedAt,
        uint256 updatedAt,
        uint80 answeredInRound
    );

    event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp);
    event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);
}

File 5 of 7 : IOracleUsd.sol
// SPDX-License-Identifier: bsl-1.1

/*
  Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]).
*/
pragma solidity ^0.7.6;

interface IOracleUsd {

    // returns Q112-encoded value
    // returned value 10**18 * 2**112 is $1
    function assetToUsd(address asset, uint amount) external view returns (uint);
}

File 6 of 7 : IOracleEth.sol
// SPDX-License-Identifier: bsl-1.1

/*
  Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]).
*/
pragma solidity ^0.7.6;

interface IOracleEth {

    // returns Q112-encoded value
    // returned value 10**18 * 2**112 is 1 Ether
    function assetToEth(address asset, uint amount) external view returns (uint);

    // returns the value "as is"
    function ethToUsd(uint amount) external view returns (uint);

    // returns the value "as is"
    function usdToEth(uint amount) external view returns (uint);
}

File 7 of 7 : IToken.sol
// SPDX-License-Identifier: bsl-1.1

/*
  Copyright 2020 Unit Protocol: Artem Zakharov ([email protected]).
*/
pragma solidity ^0.7.6;

interface IToken {
    function decimals() external view returns (uint8);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"tokenAddresses1","type":"address[]"},{"internalType":"address[]","name":"_usdAggregators","type":"address[]"},{"internalType":"address[]","name":"tokenAddresses2","type":"address[]"},{"internalType":"address[]","name":"_ethAggregators","type":"address[]"},{"internalType":"address","name":"weth","type":"address"},{"internalType":"address","name":"vaultParameters","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"aggregator","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggType","type":"uint256"}],"name":"NewAggregator","type":"event"},{"inputs":[],"name":"ETH_TYPE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Q112","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USD_TYPE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"assetToEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"assetToUsd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethAggregators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"ethToUsd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokenAddresses1","type":"address[]"},{"internalType":"address[]","name":"_usdAggregators","type":"address[]"},{"internalType":"address[]","name":"tokenAddresses2","type":"address[]"},{"internalType":"address[]","name":"_ethAggregators","type":"address[]"}],"name":"setAggregators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"usdAggregators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_usdAmount","type":"uint256"}],"name":"usdToEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultParameters","outputs":[{"internalType":"contract VaultParameters","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60c06040523480156200001157600080fd5b506040516200157238038062001572833981810160405260c08110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82518660208202830111640100000000821117156200008c57600080fd5b82525081516020918201928201910280838360005b83811015620000bb578181015183820152602001620000a1565b5050505090500160405260200180516040519392919084640100000000821115620000e557600080fd5b908301906020820185811115620000fb57600080fd5b82518660208202830111640100000000821117156200011957600080fd5b82525081516020918201928201910280838360005b83811015620001485781810151838201526020016200012e565b50505050905001604052602001805160405193929190846401000000008211156200017257600080fd5b9083019060208201858111156200018857600080fd5b8251866020820283011164010000000082111715620001a657600080fd5b82525081516020918201928201910280838360005b83811015620001d5578181015183820152602001620001bb565b5050505090500160405260200180516040519392919084640100000000821115620001ff57600080fd5b9083019060208201858111156200021557600080fd5b82518660208202830111640100000000821117156200023357600080fd5b82525081516020918201928201910280838360005b838110156200026257818101518382015260200162000248565b5050505091909101604090815260208301519201516001600160601b0319606082901b1660805287518951939550909350919091149050620002d65760405162461bcd60e51b81526004018080602001828103825260288152602001806200152a6028913960400191505060405180910390fd5b8251845114620003185760405162461bcd60e51b81526004018080602001828103825260288152602001806200152a6028913960400191505060405180910390fd5b6001600160a01b038216158015906200033957506001600160a01b03811615155b6200038b576040805162461bcd60e51b815260206004820152601b60248201527f556e69742050726f746f636f6c3a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160601b0319606083901b1660a05260005b86518110156200048757858181518110620003b757fe5b6020026020010151600080898481518110620003cf57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508581815181106200042857fe5b60200260200101516001600160a01b03168782815181106200044657fe5b60200260200101516001600160a01b03166000805160206200155283398151915260006040518082815260200191505060405180910390a3600101620003a0565b5060005b84518110156200057357838181518110620004a257fe5b602002602001015160016000878481518110620004bb57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508381815181106200051457fe5b60200260200101516001600160a01b03168582815181106200053257fe5b60200260200101516001600160a01b03166000805160206200155283398151915260016040518082815260200191505060405180910390a36001016200048b565b5050505050505060805160601c60a05160601c610f72620005b86000398061075f5280610a6b5280610c315280610c5d5250806103cd5280610c0d5250610f726000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063946d148011610071578063946d14801461029b578063a534acb8146102b8578063a5671e25146102fa578063aca345ee14610320578063ad5c464814610328578063bcecf66714610330576100b4565b80630bb8b23d146100b957806310e55698146100d35780631da720de146100ff5780632480aa421461025f5780633bf7a83e1461026757806363c1a38b1461026f575b600080fd5b6100c161034d565b60408051918252519081900360200190f35b6100c1600480360360408110156100e957600080fd5b506001600160a01b038135169060200135610352565b61025d6004803603608081101561011557600080fd5b810190602081018135600160201b81111561012f57600080fd5b82018360208201111561014157600080fd5b803590602001918460208302840111600160201b8311171561016257600080fd5b919390929091602081019035600160201b81111561017f57600080fd5b82018360208201111561019157600080fd5b803590602001918460208302840111600160201b831117156101b257600080fd5b919390929091602081019035600160201b8111156101cf57600080fd5b8201836020820111156101e157600080fd5b803590602001918460208302840111600160201b8311171561020257600080fd5b919390929091602081019035600160201b81111561021f57600080fd5b82018360208201111561023157600080fd5b803590602001918460208302840111600160201b8311171561025257600080fd5b5090925090506103ad565b005b6100c1610741565b6100c1610746565b6100c16004803603604081101561028557600080fd5b506001600160a01b03813516906020013561074e565b6100c1600480360360208110156102b157600080fd5b5035610a61565b6102de600480360360208110156102ce57600080fd5b50356001600160a01b0316610bd5565b604080516001600160a01b039092168252519081900360200190f35b6102de6004803603602081101561031057600080fd5b50356001600160a01b0316610bf0565b6102de610c0b565b6102de610c2f565b6100c16004803603602081101561034657600080fd5b5035610c53565b600081565b600081610361575060006103a7565b6001600160a01b0383811660009081526020819052604090205416156103925761038b8383610dbf565b90506103a7565b6103a461039f848461074e565b610a61565b90505b92915050565b6040805163f3ae241560e01b815233600482015290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163f3ae2415916024808301926020929190829003018186803b15801561041357600080fd5b505afa158015610427573d6000803e3d6000fd5b505050506040513d602081101561043d57600080fd5b5051610490576040805162461bcd60e51b815260206004820152601a60248201527f556e69742050726f746f636f6c3a20415554485f4641494c4544000000000000604482015290519081900360640190fd5b8685146104ce5760405162461bcd60e51b8152600401808060200182810382526028815260200180610ea26028913960400191505060405180910390fd5b82811461050c5760405162461bcd60e51b8152600401808060200182810382526028815260200180610ea26028913960400191505060405180910390fd5b60005b878110156106205786868281811061052357fe5b905060200201356001600160a01b03166000808b8b8581811061054257fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508686828181106105a257fe5b905060200201356001600160a01b03166001600160a01b03168989838181106105c757fe5b905060200201356001600160a01b03166001600160a01b03167f352cae1ae41b5029904283957efaa3709f95ff033b624ddc6f442d40fc94582c60006040518082815260200191505060405180910390a360010161050f565b5060005b838110156107365782828281811061063857fe5b905060200201356001600160a01b03166001600087878581811061065857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508282828181106106b857fe5b905060200201356001600160a01b03166001600160a01b03168585838181106106dd57fe5b905060200201356001600160a01b03166001600160a01b03167f352cae1ae41b5029904283957efaa3709f95ff033b624ddc6f442d40fc94582c60016040518082815260200191505060405180910390a3600101610624565b505050505050505050565b600181565b600160701b81565b60008161075d575060006103a7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614156107a55761038b82600160701b610e17565b6001600160a01b038084166000908152600160205260409020541680610835576001600160a01b038481166000908152602081905260409020541661081b5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eca6028913960400191505060405180910390fd5b61082d6108288585610dbf565b610c53565b9150506103a7565b600080826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561087157600080fd5b505afa158015610885573d6000803e3d6000fd5b505050506040513d60a081101561089b57600080fd5b50602081015160609091015190925090506201517f19420181116108f05760405162461bcd60e51b8152600401808060200182810382526024815260200180610ef26024913960400191505060405180910390fd5b60008212156109305760405162461bcd60e51b8152600401808060200182810382526027815260200180610f166027913960400191505060405180910390fd5b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561096b57600080fd5b505afa15801561097f573d6000803e3d6000fd5b505050506040513d602081101561099557600080fd5b50516040805163313ce56760e01b815290516001600160a01b038a169163313ce567916004808301926020929190829003018186803b1580156109d757600080fd5b505afa1580156109eb573d6000803e3d6000fd5b505050506040513d6020811015610a0157600080fd5b505160ff166012030390506000811215610a4957610a3e6000829003600a0a610a38600160701b610a328a88610e17565b90610e17565b90610e3c565b9450505050506103a7565b610a3e600a82900a610a32600160701b818a88610e17565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600090815260208190526040808220548151633fabe5a360e21b815291519293169183918291849163feaf968c9160048083019260a0929190829003018186803b158015610ad957600080fd5b505afa158015610aed573d6000803e3d6000fd5b505050506040513d60a0811015610b0357600080fd5b506020810151606090910151909250905061545f1942018111610b575760405162461bcd60e51b8152600401808060200182810382526024815260200180610ef26024913960400191505060405180910390fd5b610bcc836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610b9357600080fd5b505afa158015610ba7573d6000803e3d6000fd5b505050506040513d6020811015610bbd57600080fd5b5051600a0a610a388785610e17565b95945050505050565b6000602081905290815260409020546001600160a01b031681565b6001602052600090815260409020546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600090815260208190526040808220548151633fabe5a360e21b815291519293169183918291849163feaf968c9160048083019260a0929190829003018186803b158015610ccb57600080fd5b505afa158015610cdf573d6000803e3d6000fd5b505050506040513d60a0811015610cf557600080fd5b506020810151606090910151909250905061545f1942018111610d495760405162461bcd60e51b8152600401808060200182810382526024815260200180610ef26024913960400191505060405180910390fd5b610bcc82610a38856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8957600080fd5b505afa158015610d9d573d6000803e3d6000fd5b505050506040513d6020811015610db357600080fd5b50518890600a0a610e17565b6001600160a01b03808316600090815260208190526040808220548151633fabe5a360e21b815291519293169183918291849163feaf968c9160048083019260a0929190829003018186803b15801561087157600080fd5b600082610e26575060006103a7565b5081810281838281610e3457fe5b04146103a757fe5b600081610e90576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610e9957fe5b04939250505056fe556e69742050726f746f636f6c3a20415247554d454e54535f4c454e4754485f4d49534d41544348556e69742050726f746f636f6c3a2041474752454741544f525f444f45535f4e4f545f4558495354556e69742050726f746f636f6c3a205354414c455f434841494e4c494e4b5f5052494345556e69742050726f746f636f6c3a204e454741544956455f434841494e4c494e4b5f5052494345a2646970667358221220636d9b5050d156d686045811914df34d25c2bfba719282e3551ba6fb5b16386264736f6c63430007060033556e69742050726f746f636f6c3a20415247554d454e54535f4c454e4754485f4d49534d41544348352cae1ae41b5029904283957efaa3709f95ff033b624ddc6f442d40fc94582c00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012000000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83000000000000000000000000a8f0b5758041158cf0375b7adc8ac175ff031b6c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012000000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83000000000000000000000000a8f0b5758041158cf0375b7adc8ac175ff031b6c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Arg [5] : 000000000000000000000000a8f0b5758041158cf0375b7adc8ac175ff031b6c
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000


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.