Contract 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x82a2d01abaa1e930c638da6f63bdcd031f6f9a8d3c8cc71edd84d880dadbd91dSet Gov38060642021-12-13 7:14:29290 days 13 hrs agoGMX: Deployer IN  0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH0.000456404093 ETH
0xf9af0058d0a6c9d0fc44a5f9c341e2f58aa88c3adaf5a685abbcd18e608cc40fSet Token Config38060542021-12-13 7:14:29290 days 13 hrs agoGMX: Deployer IN  0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH0.000895878605 ETH
0xcca1786efd3a4e77b47c230de77d95d550387792b5fc01232a483b0c12205fdcSet Token Config38060532021-12-13 7:14:29290 days 13 hrs agoGMX: Deployer IN  0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH0.000898582795 ETH
0xadc82073759fbf50f88b65d8789127ec9fd8365639856c05816154e1b7e7e1b1Set Token Config38060502021-12-13 7:13:34290 days 13 hrs agoGMX: Deployer IN  0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH0.000900387558 ETH
0x269056c2eab67e32bdb212ca992d25ca040e51eebd2e6aea1d1043ea3c064e44Set Token Config38060482021-12-13 7:13:34290 days 13 hrs agoGMX: Deployer IN  0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH0.000899502574 ETH
0x5220702e0c6cb142d295eb5283a635bb5ed46863e2d744df630dcda415f0c0b2Set Token Config38060442021-12-13 7:13:34290 days 13 hrs agoGMX: Deployer IN  0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH0.000768150769 ETH
0xedf8c7b5e56430b3539ad0b2250a70e25ad5f95c00c0012e467d59d58b64b747Set Token Config38060422021-12-13 7:13:34290 days 13 hrs agoGMX: Deployer IN  0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH0.000767251342 ETH
0xc8f9b048ff2bdf1648f7e6aeecd3e1d05694b48de31765c3c302c19f99c02f94Set Token Config38060372021-12-13 7:13:34290 days 13 hrs agoGMX: Deployer IN  0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH0.000899494039 ETH
0x79d16c02c05e6d9e7b4788e4e7bd04b1fc80fd695f67be50df2b91a897b087faSet Token Config38060332021-12-13 7:13:34290 days 13 hrs agoGMX: Deployer IN  0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH0.000767229021 ETH
0x152aeed60103552672773febb3108af0309e7730dc435657e15fe718b54fc16eSet Token Config38060262021-12-13 7:12:42290 days 13 hrs agoGMX: Deployer IN  0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH0.000766351259 ETH
0x174b8305bed1f47240dcd13119948ba7eeb14d7aa4bc13f37fb52d67ab02e50dSet Chainlink Fl...38060192021-12-13 7:12:42290 days 13 hrs agoGMX: Deployer IN  0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH0.000456390306 ETH
0x48a4a78bf8475b5f390750f41c1c4d4ff6abc23bce99b41b92e3e6d209a789feSet Is Amm Enabl...38060112021-12-13 7:12:19290 days 13 hrs agoGMX: Deployer IN  0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH0.00043917711 ETH
0x8ba0bd3e2e1c557b8426ccd664fbfb010d7160e96fa135b5a65ab7f88f1aa36bSet Secondary Pr...38060032021-12-13 7:12:19290 days 13 hrs agoGMX: Deployer IN  0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH0.00058863169 ETH
0x781a385dce7211fb7ea14dd7ea45aa06ddca9853485246c25db73ce2318449fbSet Price Sample...38059982021-12-13 7:12:19290 days 13 hrs agoGMX: Deployer IN  0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH0.000440084415 ETH
0x00dc207dbae3d3a02f1532665ec8b500cbd7fc42f3bdd03d1902a1ba18a52cc1Set Max Strict P...38059942021-12-13 7:12:19290 days 13 hrs agoGMX: Deployer IN  0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH0.000577751905 ETH
0xf0387e2edb6d7c202d12134849e5295e606ce7fb8ad2c77c2bc051a7b5f4bd8c0x6080604038059892021-12-13 7:12:04290 days 13 hrs agoGMX: Deployer IN  Contract Creation0 ETH0.010718846672 ETH
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x3b8be8a0bd2df90677ec9a4576e93ac0254260940 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x3c14e07edd0dc67442fa96f1ec6999c57e810a830 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x3b8be8a0bd2df90677ec9a4576e93ac0254260940 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x3c14e07edd0dc67442fa96f1ec6999c57e810a830 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x3b8be8a0bd2df90677ec9a4576e93ac0254260940 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x3c14e07edd0dc67442fa96f1ec6999c57e810a830 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x3b8be8a0bd2df90677ec9a4576e93ac0254260940 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x3c14e07edd0dc67442fa96f1ec6999c57e810a830 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x3b8be8a0bd2df90677ec9a4576e93ac0254260940 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x3c14e07edd0dc67442fa96f1ec6999c57e810a830 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x3b8be8a0bd2df90677ec9a4576e93ac0254260940 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0xeff37c0969dcbf69b0b142dac4e56a0930aecba8 0x3c14e07edd0dc67442fa96f1ec6999c57e810a830 ETH
0xacb44d83b55f49162fff5741a641d44adfcbe196bfbc1f288375cca65aedd05990199902022-04-01 7:16:20181 days 13 hrs ago 0x489ee077994b6658eafa855c308275ead8097c4a 0xeff37c0969dcbf69b0b142dac4e56a0930aecba80 ETH
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x9162c114a85280f6905B2C7c541731Ff69D04782

Contract Name:
VaultPriceFeed

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 7 : VaultPriceFeed.sol
// SPDX-License-Identifier: MIT

import "../libraries/math/SafeMath.sol";

import "./interfaces/IVaultPriceFeed.sol";
import "../oracle/interfaces/IPriceFeed.sol";
import "../oracle/interfaces/ISecondaryPriceFeed.sol";
import "../oracle/interfaces/IChainlinkFlags.sol";
import "../amm/interfaces/IPancakePair.sol";

pragma solidity 0.6.12;

contract VaultPriceFeed is IVaultPriceFeed {
    using SafeMath for uint256;

    uint256 public constant PRICE_PRECISION = 10 ** 30;
    uint256 public constant ONE_USD = PRICE_PRECISION;
    uint256 public constant BASIS_POINTS_DIVISOR = 10000;
    uint256 public constant MAX_SPREAD_BASIS_POINTS = 50;
    uint256 public constant MAX_ADJUSTMENT_INTERVAL = 2 hours;
    uint256 public constant MAX_ADJUSTMENT_BASIS_POINTS = 20;

    // Identifier of the Sequencer offline flag on the Flags contract
    address constant private FLAG_ARBITRUM_SEQ_OFFLINE = address(bytes20(bytes32(uint256(keccak256("chainlink.flags.arbitrum-seq-offline")) - 1)));

    address public gov;
    address public chainlinkFlags;

    bool public isAmmEnabled = true;
    bool public isSecondaryPriceEnabled = true;
    bool public useV2Pricing = false;
    bool public favorPrimaryPrice = false;
    uint256 public priceSampleSpace = 3;
    uint256 public maxStrictPriceDeviation = 0;
    address public secondaryPriceFeed;
    uint256 public spreadThresholdBasisPoints = 30;

    address public btc;
    address public eth;
    address public bnb;
    address public bnbBusd;
    address public ethBnb;
    address public btcBnb;

    mapping (address => address) public priceFeeds;
    mapping (address => uint256) public priceDecimals;
    mapping (address => uint256) public spreadBasisPoints;
    // Chainlink can return prices for stablecoins
    // that differs from 1 USD by a larger percentage than stableSwapFeeBasisPoints
    // we use strictStableTokens to cap the price to 1 USD
    // this allows us to configure stablecoins like DAI as being a stableToken
    // while not being a strictStableToken
    mapping (address => bool) public strictStableTokens;

    mapping (address => uint256) public override adjustmentBasisPoints;
    mapping (address => bool) public override isAdjustmentAdditive;
    mapping (address => uint256) public lastAdjustmentTimings;

    modifier onlyGov() {
        require(msg.sender == gov, "VaultPriceFeed: forbidden");
        _;
    }

    constructor() public {
        gov = msg.sender;
    }

    function setGov(address _gov) external onlyGov {
        gov = _gov;
    }

    function setChainlinkFlags(address _chainlinkFlags) external onlyGov {
        chainlinkFlags = _chainlinkFlags;
    }

    function setAdjustment(address _token, bool _isAdditive, uint256 _adjustmentBps) external override onlyGov {
        require(
            lastAdjustmentTimings[_token].add(MAX_ADJUSTMENT_INTERVAL) < block.timestamp,
            "VaultPriceFeed: adjustment frequency exceeded"
        );
        require(_adjustmentBps <= MAX_ADJUSTMENT_BASIS_POINTS, "invalid _adjustmentBps");
        isAdjustmentAdditive[_token] = _isAdditive;
        adjustmentBasisPoints[_token] = _adjustmentBps;
        lastAdjustmentTimings[_token] = block.timestamp;
    }

    function setUseV2Pricing(bool _useV2Pricing) external override onlyGov {
        useV2Pricing = _useV2Pricing;
    }

    function setIsAmmEnabled(bool _isEnabled) external override onlyGov {
        isAmmEnabled = _isEnabled;
    }

    function setIsSecondaryPriceEnabled(bool _isEnabled) external override onlyGov {
        isSecondaryPriceEnabled = _isEnabled;
    }

    function setSecondaryPriceFeed(address _secondaryPriceFeed) external onlyGov {
        secondaryPriceFeed = _secondaryPriceFeed;
    }

    function setTokens(address _btc, address _eth, address _bnb) external onlyGov {
        btc = _btc;
        eth = _eth;
        bnb = _bnb;
    }

    function setPairs(address _bnbBusd, address _ethBnb, address _btcBnb) external onlyGov {
        bnbBusd = _bnbBusd;
        ethBnb = _ethBnb;
        btcBnb = _btcBnb;
    }

    function setSpreadBasisPoints(address _token, uint256 _spreadBasisPoints) external override onlyGov {
        require(_spreadBasisPoints <= MAX_SPREAD_BASIS_POINTS, "VaultPriceFeed: invalid _spreadBasisPoints");
        spreadBasisPoints[_token] = _spreadBasisPoints;
    }

    function setSpreadThresholdBasisPoints(uint256 _spreadThresholdBasisPoints) external override onlyGov {
        spreadThresholdBasisPoints = _spreadThresholdBasisPoints;
    }

    function setFavorPrimaryPrice(bool _favorPrimaryPrice) external override onlyGov {
        favorPrimaryPrice = _favorPrimaryPrice;
    }

    function setPriceSampleSpace(uint256 _priceSampleSpace) external override onlyGov {
        require(_priceSampleSpace > 0, "VaultPriceFeed: invalid _priceSampleSpace");
        priceSampleSpace = _priceSampleSpace;
    }

    function setMaxStrictPriceDeviation(uint256 _maxStrictPriceDeviation) external override onlyGov {
        maxStrictPriceDeviation = _maxStrictPriceDeviation;
    }

    function setTokenConfig(
        address _token,
        address _priceFeed,
        uint256 _priceDecimals,
        bool _isStrictStable
    ) external override onlyGov {
        priceFeeds[_token] = _priceFeed;
        priceDecimals[_token] = _priceDecimals;
        strictStableTokens[_token] = _isStrictStable;
    }

    function getPrice(address _token, bool _maximise, bool _includeAmmPrice, bool /* _useSwapPricing */) public override view returns (uint256) {
        uint256 price = useV2Pricing ? getPriceV2(_token, _maximise, _includeAmmPrice) : getPriceV1(_token, _maximise, _includeAmmPrice);

        uint256 adjustmentBps = adjustmentBasisPoints[_token];
        if (adjustmentBps > 0) {
            bool isAdditive = isAdjustmentAdditive[_token];
            if (isAdditive) {
                price = price.mul(BASIS_POINTS_DIVISOR.add(adjustmentBps)).div(BASIS_POINTS_DIVISOR);
            } else {
                price = price.mul(BASIS_POINTS_DIVISOR.sub(adjustmentBps)).div(BASIS_POINTS_DIVISOR);
            }
        }

        return price;
    }

    function getPriceV1(address _token, bool _maximise, bool _includeAmmPrice) public view returns (uint256) {
        uint256 price = getPrimaryPrice(_token, _maximise);

        if (_includeAmmPrice && isAmmEnabled) {
            uint256 ammPrice = getAmmPrice(_token);
            if (ammPrice > 0) {
                if (_maximise && ammPrice > price) {
                    price = ammPrice;
                }
                if (!_maximise && ammPrice < price) {
                    price = ammPrice;
                }
            }
        }

        if (isSecondaryPriceEnabled) {
            price = getSecondaryPrice(_token, price, _maximise);
        }

        if (strictStableTokens[_token]) {
            uint256 delta = price > ONE_USD ? price.sub(ONE_USD) : ONE_USD.sub(price);
            if (delta <= maxStrictPriceDeviation) {
                return ONE_USD;
            }
        }

        uint256 _spreadBasisPoints = spreadBasisPoints[_token];

        if (_maximise) {
            return price.mul(BASIS_POINTS_DIVISOR.add(_spreadBasisPoints)).div(BASIS_POINTS_DIVISOR);
        }

        return price.mul(BASIS_POINTS_DIVISOR.sub(_spreadBasisPoints)).div(BASIS_POINTS_DIVISOR);
    }

    function getPriceV2(address _token, bool _maximise, bool _includeAmmPrice) public view returns (uint256) {
        uint256 price = getPrimaryPrice(_token, _maximise);

        if (_includeAmmPrice && isAmmEnabled) {
            price = getAmmPriceV2(_token, _maximise, price);
        }

        if (isSecondaryPriceEnabled) {
            price = getSecondaryPrice(_token, price, _maximise);
        }

        if (strictStableTokens[_token]) {
            uint256 delta = price > ONE_USD ? price.sub(ONE_USD) : ONE_USD.sub(price);
            if (delta <= maxStrictPriceDeviation) {
                return ONE_USD;
            }
        }

        uint256 _spreadBasisPoints = spreadBasisPoints[_token];

        if (_maximise) {
            return price.mul(BASIS_POINTS_DIVISOR.add(_spreadBasisPoints)).div(BASIS_POINTS_DIVISOR);
        }

        return price.mul(BASIS_POINTS_DIVISOR.sub(_spreadBasisPoints)).div(BASIS_POINTS_DIVISOR);
    }

    function getAmmPriceV2(address _token, bool _maximise, uint256 _primaryPrice) public view returns (uint256) {
        uint256 ammPrice = getAmmPrice(_token);
        if (ammPrice == 0) {
            return _primaryPrice;
        }

        uint256 diff = ammPrice > _primaryPrice ? ammPrice.sub(_primaryPrice) : _primaryPrice.sub(ammPrice);
        if (diff.mul(BASIS_POINTS_DIVISOR) < _primaryPrice.mul(spreadThresholdBasisPoints)) {
            if (favorPrimaryPrice) {
                return _primaryPrice;
            }
            return ammPrice;
        }

        if (_maximise && ammPrice > _primaryPrice) {
            return ammPrice;
        }

        if (!_maximise && ammPrice < _primaryPrice) {
            return ammPrice;
        }

        return _primaryPrice;
    }

    function getPrimaryPrice(address _token, bool _maximise) public override view returns (uint256) {
        address priceFeedAddress = priceFeeds[_token];
        require(priceFeedAddress != address(0), "VaultPriceFeed: invalid price feed");

        if (chainlinkFlags != address(0)) {
            bool isRaised = IChainlinkFlags(chainlinkFlags).getFlag(FLAG_ARBITRUM_SEQ_OFFLINE);
            if (isRaised) {
                    // If flag is raised we shouldn't perform any critical operations
                revert("Chainlink feeds are not being updated");
            }
        }

        IPriceFeed priceFeed = IPriceFeed(priceFeedAddress);

        uint256 price = 0;
        uint80 roundId = priceFeed.latestRound();

        for (uint80 i = 0; i < priceSampleSpace; i++) {
            if (roundId <= i) { break; }
            uint256 p;

            if (i == 0) {
                int256 _p = priceFeed.latestAnswer();
                require(_p > 0, "VaultPriceFeed: invalid price");
                p = uint256(_p);
            } else {
                (, int256 _p, , ,) = priceFeed.getRoundData(roundId - i);
                require(_p > 0, "VaultPriceFeed: invalid price");
                p = uint256(_p);
            }

            if (price == 0) {
                price = p;
                continue;
            }

            if (_maximise && p > price) {
                price = p;
                continue;
            }

            if (!_maximise && p < price) {
                price = p;
            }
        }

        require(price > 0, "VaultPriceFeed: could not fetch price");
        // normalise price precision
        uint256 _priceDecimals = priceDecimals[_token];
        return price.mul(PRICE_PRECISION).div(10 ** _priceDecimals);
    }

    function getSecondaryPrice(address _token, uint256 _referencePrice, bool _maximise) public view returns (uint256) {
        if (secondaryPriceFeed == address(0)) { return _referencePrice; }
        return ISecondaryPriceFeed(secondaryPriceFeed).getPrice(_token, _referencePrice, _maximise);
    }

    function getAmmPrice(address _token) public override view returns (uint256) {
        if (_token == bnb) {
            // for bnbBusd, reserve0: BNB, reserve1: BUSD
            return getPairPrice(bnbBusd, true);
        }

        if (_token == eth) {
            uint256 price0 = getPairPrice(bnbBusd, true);
            // for ethBnb, reserve0: ETH, reserve1: BNB
            uint256 price1 = getPairPrice(ethBnb, true);
            // this calculation could overflow if (price0 / 10**30) * (price1 / 10**30) is more than 10**17
            return price0.mul(price1).div(PRICE_PRECISION);
        }

        if (_token == btc) {
            uint256 price0 = getPairPrice(bnbBusd, true);
            // for btcBnb, reserve0: BTC, reserve1: BNB
            uint256 price1 = getPairPrice(btcBnb, true);
            // this calculation could overflow if (price0 / 10**30) * (price1 / 10**30) is more than 10**17
            return price0.mul(price1).div(PRICE_PRECISION);
        }

        return 0;
    }

    // if divByReserve0: calculate price as reserve1 / reserve0
    // if !divByReserve1: calculate price as reserve0 / reserve1
    function getPairPrice(address _pair, bool _divByReserve0) public view returns (uint256) {
        (uint256 reserve0, uint256 reserve1, ) = IPancakePair(_pair).getReserves();
        if (_divByReserve0) {
            if (reserve0 == 0) { return 0; }
            return reserve1.mul(PRICE_PRECISION).div(reserve0);
        }
        if (reserve1 == 0) { return 0; }
        return reserve0.mul(PRICE_PRECISION).div(reserve1);
    }
}

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

pragma solidity 0.6.12;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
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.
     */
    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.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        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.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 3 of 7 : IVaultPriceFeed.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

interface IVaultPriceFeed {
    function adjustmentBasisPoints(address _token) external view returns (uint256);
    function isAdjustmentAdditive(address _token) external view returns (bool);
    function setAdjustment(address _token, bool _isAdditive, uint256 _adjustmentBps) external;
    function setUseV2Pricing(bool _useV2Pricing) external;
    function setIsAmmEnabled(bool _isEnabled) external;
    function setIsSecondaryPriceEnabled(bool _isEnabled) external;
    function setSpreadBasisPoints(address _token, uint256 _spreadBasisPoints) external;
    function setSpreadThresholdBasisPoints(uint256 _spreadThresholdBasisPoints) external;
    function setFavorPrimaryPrice(bool _favorPrimaryPrice) external;
    function setPriceSampleSpace(uint256 _priceSampleSpace) external;
    function setMaxStrictPriceDeviation(uint256 _maxStrictPriceDeviation) external;
    function getPrice(address _token, bool _maximise, bool _includeAmmPrice, bool _useSwapPricing) external view returns (uint256);
    function getAmmPrice(address _token) external view returns (uint256);
    function getPrimaryPrice(address _token, bool _maximise) external view returns (uint256);
    function setTokenConfig(
        address _token,
        address _priceFeed,
        uint256 _priceDecimals,
        bool _isStrictStable
    ) external;
}

File 4 of 7 : IPriceFeed.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

interface IPriceFeed {
    function description() external view returns (string memory);
    function aggregator() external view returns (address);
    function latestAnswer() external view returns (int256);
    function latestRound() external view returns (uint80);
    function getRoundData(uint80 roundId) external view returns (uint80, int256, uint256, uint256, uint80);
}

File 5 of 7 : ISecondaryPriceFeed.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

interface ISecondaryPriceFeed {
    function getPrice(address _token, uint256 _referencePrice, bool _maximise) external view returns (uint256);
}

File 6 of 7 : IChainlinkFlags.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

interface IChainlinkFlags {
  function getFlag(address) external view returns (bool);
}

File 7 of 7 : IPancakePair.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

interface IPancakePair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

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

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BASIS_POINTS_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ADJUSTMENT_BASIS_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ADJUSTMENT_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SPREAD_BASIS_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ONE_USD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"adjustmentBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bnb","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bnbBusd","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"btc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"btcBnb","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainlinkFlags","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethBnb","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"favorPrimaryPrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getAmmPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_maximise","type":"bool"},{"internalType":"uint256","name":"_primaryPrice","type":"uint256"}],"name":"getAmmPriceV2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_divByReserve0","type":"bool"}],"name":"getPairPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_maximise","type":"bool"},{"internalType":"bool","name":"_includeAmmPrice","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_maximise","type":"bool"},{"internalType":"bool","name":"_includeAmmPrice","type":"bool"}],"name":"getPriceV1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_maximise","type":"bool"},{"internalType":"bool","name":"_includeAmmPrice","type":"bool"}],"name":"getPriceV2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_maximise","type":"bool"}],"name":"getPrimaryPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_referencePrice","type":"uint256"},{"internalType":"bool","name":"_maximise","type":"bool"}],"name":"getSecondaryPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAdjustmentAdditive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAmmEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSecondaryPriceEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastAdjustmentTimings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxStrictPriceDeviation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"priceDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"priceFeeds","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceSampleSpace","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondaryPriceFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_isAdditive","type":"bool"},{"internalType":"uint256","name":"_adjustmentBps","type":"uint256"}],"name":"setAdjustment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_chainlinkFlags","type":"address"}],"name":"setChainlinkFlags","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_favorPrimaryPrice","type":"bool"}],"name":"setFavorPrimaryPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isEnabled","type":"bool"}],"name":"setIsAmmEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isEnabled","type":"bool"}],"name":"setIsSecondaryPriceEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxStrictPriceDeviation","type":"uint256"}],"name":"setMaxStrictPriceDeviation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bnbBusd","type":"address"},{"internalType":"address","name":"_ethBnb","type":"address"},{"internalType":"address","name":"_btcBnb","type":"address"}],"name":"setPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceSampleSpace","type":"uint256"}],"name":"setPriceSampleSpace","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_secondaryPriceFeed","type":"address"}],"name":"setSecondaryPriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_spreadBasisPoints","type":"uint256"}],"name":"setSpreadBasisPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_spreadThresholdBasisPoints","type":"uint256"}],"name":"setSpreadThresholdBasisPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_priceFeed","type":"address"},{"internalType":"uint256","name":"_priceDecimals","type":"uint256"},{"internalType":"bool","name":"_isStrictStable","type":"bool"}],"name":"setTokenConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_btc","type":"address"},{"internalType":"address","name":"_eth","type":"address"},{"internalType":"address","name":"_bnb","type":"address"}],"name":"setTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_useV2Pricing","type":"bool"}],"name":"setUseV2Pricing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"spreadBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"spreadThresholdBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"strictStableTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"useV2Pricing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040526001805461ffff60b01b1960ff60a81b1960ff60a01b19909216600160a01b1791909116600160a81b171690556003600281905560009055601e60055534801561004d57600080fd5b50600080546001600160a01b03191633179055611f668061006f6000396000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c80630957aed9146102615780631193c8091461027b578063126082cf1461029f57806312d43a51146102a75780632fa03b8f146102af5780632fbfe3d3146102ce5780632fc3a70a146102eb57806330536ee514610329578063378e7bf7146103455780633d949c5f1461034d5780633eba8d36146103835780633ebbc601146103b75780633f0c3bb7146103bf578063443be209146103c757806348cac277146103ff57806349a876e4146104255780634a4b1f4f1461042d5780634b9ade471461043557806356c8c2c114610473578063593d9e80146104a1578063604f37e9146104a957806367781c0e146104c85780636ce8a44b146104d05780636fc80708146104f6578063717cfe7a146104fe578063732391b414610524578063826e055f1461055a5780638b86616c146105805780638c7c9e0c1461058857806393f690741461059057806395082d25146104c8578063971bd396146105c857806397dfade7146105d05780639917dc74146105d85780639a0a6635146105f75780639b18dc471461061d5780639b889380146106255780639dcb511a14610651578063a27ea38614610677578063a28d57d81461069d578063a2ad7b93146106a5578063a39c73a3146106d3578063b02a2de4146106db578063b731dd871461070f578063b8f611051461072c578063c2138d8c14610752578063cefe0f2114610778578063cfad57a21461079e578063d694376c146107c4578063e4440e02146107f8578063eb1c92a914610800578063fd34ec401461081f575b600080fd5b61026961083e565b60408051918252519081900360200190f35b610283610843565b604080516001600160a01b039092168252519081900360200190f35b610269610852565b610283610858565b6102cc600480360360208110156102c557600080fd5b5035610867565b005b6102cc600480360360208110156102e457600080fd5b50356108f8565b6102696004803603608081101561030157600080fd5b506001600160a01b03813516906020810135151590604081013515159060600135151561094a565b610331610a08565b604080519115158252519081900360200190f35b610269610a18565b6102696004803603606081101561036357600080fd5b506001600160a01b03813516906020810135151590604001351515610a1e565b6102696004803603606081101561039957600080fd5b506001600160a01b0381351690602081013590604001351515610b93565b610331610c41565b610331610c51565b6102cc600480360360608110156103dd57600080fd5b506001600160a01b038135811691602081013582169160409091013516610c61565b6102696004803603602081101561041557600080fd5b50356001600160a01b0316610ced565b610283610cff565b610269610d0e565b6102cc6004803603608081101561044b57600080fd5b506001600160a01b038135811691602081013590911690604081013590606001351515610d13565b6102696004803603604081101561048957600080fd5b506001600160a01b0381351690602001351515610db5565b6103316111e2565b6102cc600480360360208110156104bf57600080fd5b503515156111f2565b61026961125d565b610331600480360360208110156104e657600080fd5b50356001600160a01b031661126d565b610269611282565b6102696004803603602081101561051457600080fd5b50356001600160a01b0316611288565b6102696004803603606081101561053a57600080fd5b506001600160a01b0381351690602081013515159060400135151561129a565b6102cc6004803603602081101561057057600080fd5b50356001600160a01b03166112ef565b61028361135e565b61028361136d565b6102cc600480360360608110156105a657600080fd5b506001600160a01b03813581169160208101358216916040909101351661137c565b610283611408565b610283611417565b6102cc600480360360208110156105ee57600080fd5b50351515611426565b6102cc6004803603602081101561060d57600080fd5b50356001600160a01b0316611491565b610269611500565b6102cc6004803603604081101561063b57600080fd5b506001600160a01b038135169060200135611506565b6102836004803603602081101561066757600080fd5b50356001600160a01b03166115af565b6102696004803603602081101561068d57600080fd5b50356001600160a01b03166115ca565b6102836115dc565b610269600480360360408110156106bb57600080fd5b506001600160a01b03813516906020013515156115eb565b6102696116d8565b610269600480360360608110156106f157600080fd5b506001600160a01b03813516906020810135151590604001356116de565b6102cc6004803603602081101561072557600080fd5b50356117a6565b6103316004803603602081101561074257600080fd5b50356001600160a01b03166117f8565b6102696004803603602081101561076857600080fd5b50356001600160a01b031661180d565b6102696004803603602081101561078e57600080fd5b50356001600160a01b031661190c565b6102cc600480360360208110156107b457600080fd5b50356001600160a01b031661191e565b6102cc600480360360608110156107da57600080fd5b506001600160a01b038135169060208101351515906040013561198d565b610283611ad0565b6102cc6004803603602081101561081657600080fd5b50351515611adf565b6102cc6004803603602081101561083557600080fd5b50351515611b4a565b603281565b600a546001600160a01b031681565b61271081565b6000546001600160a01b031681565b6000546001600160a01b031633146108b4576040805162461bcd60e51b81526020600482015260196024820152600080516020611e80833981519152604482015290519081900360640190fd5b600081116108f35760405162461bcd60e51b8152600401808060200182810382526029815260200180611de46029913960400191505060405180910390fd5b600255565b6000546001600160a01b03163314610945576040805162461bcd60e51b81526020600482015260196024820152600080516020611e80833981519152604482015290519081900360640190fd5b600355565b6001546000908190600160b01b900460ff166109705761096b868686610a1e565b61097b565b61097b86868661129a565b6001600160a01b03871660009081526010602052604090205490915080156109fe576001600160a01b03871660009081526011602052604090205460ff1680156109e6576109df6127106109d96109d28286611bb5565b8690611c0d565b90611c66565b92506109fc565b6109f96127106109d96109d28286611ca5565b92505b505b5095945050505050565b600154600160b01b900460ff1681565b60035481565b600080610a2b8585610db5565b9050828015610a435750600154600160a01b900460ff165b15610a88576000610a538661180d565b90508015610a8657848015610a6757508181115b15610a70578091505b84158015610a7d57508181105b15610a86578091505b505b600154600160a81b900460ff1615610aa857610aa5858286610b93565b90505b6001600160a01b0385166000908152600f602052604090205460ff1615610b3257600068327cb2734119d3b7a9601e1b8211610af957610af468327cb2734119d3b7a9601e1b83611ca5565b610b0f565b610b0f8268327cb2734119d3b7a9601e1b611ca5565b90506003548111610b305768327cb2734119d3b7a9601e1b92505050610b8c565b505b6001600160a01b0385166000908152600e60205260409020548415610b7457610b6b6127106109d9610b648285611bb5565b8590611c0d565b92505050610b8c565b610b876127106109d9610b648285611ca5565b925050505b9392505050565b6004546000906001600160a01b0316610bad575081610b8c565b6004805460408051630ffd9c6d60e31b81526001600160a01b038881169482019490945260248101879052851515604482015290519290911691637fece36891606480820192602092909190829003018186803b158015610c0d57600080fd5b505afa158015610c21573d6000803e3d6000fd5b505050506040513d6020811015610c3757600080fd5b5051949350505050565b600154600160a81b900460ff1681565b600154600160a01b900460ff1681565b6000546001600160a01b03163314610cae576040805162461bcd60e51b81526020600482015260196024820152600080516020611e80833981519152604482015290519081900360640190fd5b600680546001600160a01b039485166001600160a01b031991821617909155600780549385169382169390931790925560088054919093169116179055565b60106020526000908152604090205481565b6008546001600160a01b031681565b601481565b6000546001600160a01b03163314610d60576040805162461bcd60e51b81526020600482015260196024820152600080516020611e80833981519152604482015290519081900360640190fd5b6001600160a01b039384166000908152600c6020908152604080832080546001600160a01b0319169690971695909517909555600d855283812092909255600f90935220805460ff1916911515919091179055565b6001600160a01b038083166000908152600c602052604081205490911680610e0e5760405162461bcd60e51b8152600401808060200182810382526022815260200180611f0f6022913960400191505060405180910390fd5b6001546001600160a01b031615610eeb5760015460408051631abf23ff60e11b815273a438451d6458044c3c8cd2f6f31c91ac882a6d91600482015290516000926001600160a01b03169163357e47fe916024808301926020929190829003018186803b158015610e7e57600080fd5b505afa158015610e92573d6000803e3d6000fd5b505050506040513d6020811015610ea857600080fd5b505190508015610ee95760405162461bcd60e51b8152600401808060200182810382526025815260200180611ea06025913960400191505060405180910390fd5b505b6000819050600080826001600160a01b031663668a0f026040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d6020811015610f5657600080fd5b5051905060005b600254816001600160501b0316101561115d57806001600160501b0316826001600160501b031611610f8e5761115d565b60006001600160501b038216611051576000856001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fd957600080fd5b505afa158015610fed573d6000803e3d6000fd5b505050506040513d602081101561100357600080fd5b505190506000811361104a576040805162461bcd60e51b815260206004820152601d6024820152600080516020611eef833981519152604482015290519081900360640190fd5b9050611119565b6000856001600160a01b0316639a6fc8f58486036040518263ffffffff1660e01b815260040180826001600160501b0316815260200191505060a06040518083038186803b1580156110a257600080fd5b505afa1580156110b6573d6000803e3d6000fd5b505050506040513d60a08110156110cc57600080fd5b5060200151905060008113611116576040805162461bcd60e51b815260206004820152601d6024820152600080516020611eef833981519152604482015290519081900360640190fd5b90505b83611125579250611155565b87801561113157508381115b1561113d579250611155565b8715801561114a57508381105b15611153578093505b505b600101610f5d565b506000821161119d5760405162461bcd60e51b8152600401808060200182810382526025815260200180611e0d6025913960400191505060405180910390fd5b6001600160a01b0387166000908152600d60205260409020546111d4600a82900a6109d98568327cb2734119d3b7a9601e1b611c0d565b955050505050505b92915050565b600154600160b81b900460ff1681565b6000546001600160a01b0316331461123f576040805162461bcd60e51b81526020600482015260196024820152600080516020611e80833981519152604482015290519081900360640190fd5b60018054911515600160b81b0260ff60b81b19909216919091179055565b68327cb2734119d3b7a9601e1b81565b60116020526000908152604090205460ff1681565b60025481565b60126020526000908152604090205481565b6000806112a78585610db5565b90508280156112bf5750600154600160a01b900460ff165b15610a88576112cf8585836116de565b905060015460ff600160a81b9091041615610aa857610aa5858286610b93565b6000546001600160a01b0316331461133c576040805162461bcd60e51b81526020600482015260196024820152600080516020611e80833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b031681565b6007546001600160a01b031681565b6000546001600160a01b031633146113c9576040805162461bcd60e51b81526020600482015260196024820152600080516020611e80833981519152604482015290519081900360640190fd5b600980546001600160a01b039485166001600160a01b031991821617909155600a805493851693821693909317909255600b8054919093169116179055565b600b546001600160a01b031681565b6009546001600160a01b031681565b6000546001600160a01b03163314611473576040805162461bcd60e51b81526020600482015260196024820152600080516020611e80833981519152604482015290519081900360640190fd5b60018054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031633146114de576040805162461bcd60e51b81526020600482015260196024820152600080516020611e80833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b611c2081565b6000546001600160a01b03163314611553576040805162461bcd60e51b81526020600482015260196024820152600080516020611e80833981519152604482015290519081900360640190fd5b60328111156115935760405162461bcd60e51b815260040180806020018281038252602a815260200180611ec5602a913960400191505060405180910390fd5b6001600160a01b039091166000908152600e6020526040902055565b600c602052600090815260409020546001600160a01b031681565b600e6020526000908152604090205481565b6006546001600160a01b031681565b6000806000846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561162957600080fd5b505afa15801561163d573d6000803e3d6000fd5b505050506040513d606081101561165357600080fd5b5080516020909101516001600160701b03918216935016905083156116a55781611682576000925050506111dc565b61169c826109d98368327cb2734119d3b7a9601e1b611c0d565b925050506111dc565b806116b5576000925050506111dc565b6116cf816109d98468327cb2734119d3b7a9601e1b611c0d565b95945050505050565b60055481565b6000806116ea8561180d565b9050806116fa5782915050610b8c565b60008382116117125761170d8483611ca5565b61171c565b61171c8285611ca5565b905061173360055485611c0d90919063ffffffff16565b61173f82612710611c0d565b101561176957600154600160b81b900460ff1615611761578392505050610b8c565b509050610b8c565b84801561177557508382115b1561178257509050610b8c565b8415801561178f57508382105b1561179c57509050610b8c565b5091949350505050565b6000546001600160a01b031633146117f3576040805162461bcd60e51b81526020600482015260196024820152600080516020611e80833981519152604482015290519081900360640190fd5b600555565b600f6020526000908152604090205460ff1681565b6008546000906001600160a01b03838116911614156118445760095461183d906001600160a01b031660016115eb565b9050611907565b6007546001600160a01b03838116911614156118b657600954600090611874906001600160a01b031660016115eb565b600a54909150600090611891906001600160a01b031660016115eb565b90506118ad68327cb2734119d3b7a9601e1b6109d98484611c0d565b92505050611907565b6006546001600160a01b0383811691161415611903576009546000906118e6906001600160a01b031660016115eb565b600b54909150600090611891906001600160a01b031660016115eb565b5060005b919050565b600d6020526000908152604090205481565b6000546001600160a01b0316331461196b576040805162461bcd60e51b81526020600482015260196024820152600080516020611e80833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119da576040805162461bcd60e51b81526020600482015260196024820152600080516020611e80833981519152604482015290519081900360640190fd5b6001600160a01b0383166000908152601260205260409020544290611a0190611c20611bb5565b10611a3d5760405162461bcd60e51b815260040180806020018281038252602d815260200180611e53602d913960400191505060405180910390fd5b6014811115611a8c576040805162461bcd60e51b8152602060048201526016602482015275696e76616c6964205f61646a7573746d656e7442707360501b604482015290519081900360640190fd5b6001600160a01b03929092166000908152601160209081526040808320805460ff191694151594909417909355601081528282209390935560129092529020429055565b6001546001600160a01b031681565b6000546001600160a01b03163314611b2c576040805162461bcd60e51b81526020600482015260196024820152600080516020611e80833981519152604482015290519081900360640190fd5b60018054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b03163314611b97576040805162461bcd60e51b81526020600482015260196024820152600080516020611e80833981519152604482015290519081900360640190fd5b60018054911515600160b01b0260ff60b01b19909216919091179055565b600082820183811015610b8c576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600082611c1c575060006111dc565b82820282848281611c2957fe5b0414610b8c5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e326021913960400191505060405180910390fd5b6000610b8c83836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250611ce7565b6000610b8c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d89565b60008183611d735760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d38578181015183820152602001611d20565b50505050905090810190601f168015611d655780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611d7f57fe5b0495945050505050565b60008184841115611ddb5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611d38578181015183820152602001611d20565b50505090039056fe5661756c745072696365466565643a20696e76616c6964205f707269636553616d706c6553706163655661756c745072696365466565643a20636f756c64206e6f74206665746368207072696365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775661756c745072696365466565643a2061646a7573746d656e74206672657175656e63792065786365656465645661756c745072696365466565643a20666f7262696464656e00000000000000436861696e6c696e6b20666565647320617265206e6f74206265696e6720757064617465645661756c745072696365466565643a20696e76616c6964205f7370726561644261736973506f696e74735661756c745072696365466565643a20696e76616c69642070726963650000005661756c745072696365466565643a20696e76616c69642070726963652066656564a26469706673582212200389d84be30d88ed7d969f3f12b89343da33a423ae61d42dbdb9bb13c72ef45164736f6c634300060c0033

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.