Contract Overview
Balance:
0 ETH
ETH Value:
$0.00
My Name Tag:
Not Available
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xe12225b1a188f278206e829d4b1356815b2e4671cb5b1f2c13b0f05b52f32b15 | Set Gov | 20213711 | 230 days 11 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000040984588 ETH | |
0x4f8bb487f72044f77795181fe4c3570a2867c1c837c5b8ef53a73f1da38377fe | Set Token Config | 20213215 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000058036843 ETH | |
0x691e5d7a2547fa503babc9420e2557177c3f639136e09d94568fa4fb87274a76 | Set Token Config | 20213210 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000057915481 ETH | |
0xadcbfaa7a81bcd2c7f31a665615f845694ec7d37a18704c5569a61058981455d | Set Token Config | 20213202 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.00005803902 ETH | |
0xd59c4270422f426a84d49053c0def15c9b49d7cf3e8c7139d9f03e102d928a48 | Set Token Config | 20213200 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.00006232541 ETH | |
0x9c6a1188c603625e889d5458492d2fa81ca2590e74642cf32c3af1440fc7cb56 | Set Token Config | 20213195 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000062452577 ETH | |
0x3c213cbc736c9ffa19ecdb9b049548f2481f93ae7de043d81021debd37bf552b | Set Token Config | 20213188 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000062449856 ETH | |
0xe71532886a572887f37544d558356f453ec7a16b40108bf0531993c20276fc42 | Set Token Config | 20213183 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000062576569 ETH | |
0x4c8710a874ab6a7a5193d07c3137e216661d31aa46d7f1ed846e6f61b500542c | Set Token Config | 20213178 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000057913848 ETH | |
0xe3dfb3ee0e6d122aa55420001cb0bce2e52a72af5a6b586599363d8929ac987d | Set Token Config | 20213177 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000057912306 ETH | |
0x69eed90d3f56c3c7187f5de6598190d180cb2ced33048ae8a6b12a873219a421 | Set Token Config | 20213171 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000062575843 ETH | |
0x461fb879c469c53ef06b8e4097ba89990c36746140565fa3fd9d614dc37b45b1 | Set Token Config | 20213169 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000058036752 ETH | |
0x3d85a214c7c67540d671122e2ab98af52e7dc157bed32347f78b795f73d5b255 | Set Token Config | 20213166 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000057912397 ETH | |
0x44ae80bc0361100d20581f64d6d4e312abd7d1430c8098ea343e8c17f17174a9 | Set Chainlink Fl... | 20213160 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000039807369 ETH | |
0x04f9a7d23d813e5f6784963fe92ed7fa82d8befb0c1507ee01798c47d3b5c22c | Set Is Amm Enabl... | 20213158 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000039682198 ETH | |
0x0ddf2aa661411cf5d1a33d18ffe07bcd207c0fabe86e3f2dd4960436866439c7 | Set Secondary Pr... | 20213151 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000046848798 ETH | |
0x607e04f0f3fc3606dfc0dac415db291086c2d982c2cf362ed479ed6eade6671d | Set Price Sample... | 20213145 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000039805827 ETH | |
0xd8fa067a22519a1e82cb407d00f5dcc0f537d27994ce966870eb97b29553688c | Set Max Strict P... | 20213136 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.0000453452 ETH | |
0x4925c14500fd610b2f882e1a3b768fcce2b35d558f685a82a5d1b37e119be7d9 | Set Spread Basis... | 20211261 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000045810677 ETH | |
0x136e82e35127a935cc475d6f53cc46dd310228d3670b799f7ab28b240a39644f | Set Spread Basis... | 20211254 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000045811246 ETH | |
0x9e0060fa7eaaee378f7e8f63a46bef7232310f59e9754a7f13ebbfaa3974ef6b | Set Spread Basis... | 20211252 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.00004567911 ETH | |
0xe6a253efa49a66faa2045e18b080e1d0f38336b781bb343c8ce1a0fbe6715d6e | Set Spread Basis... | 20211249 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000045548681 ETH | |
0x512378ae9efc8d9611d515bf12d6be6efb2f4393bd1aa78a4a85dab47743d60e | Set Spread Basis... | 20211245 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000045679679 ETH | |
0xf6c66bbb0d1163b8a6941cb3743601b0c742514f4baac41169d550fbe502a073 | Set Spread Basis... | 20211241 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000045679679 ETH | |
0x2f0f55c139984d5491faf47b23a0d903dbbbbf0fe9a7cbbacd6b5a5189311fdc | Set Spread Basis... | 20210030 | 230 days 12 hrs ago | Mycelium: Deployer | IN | 0xdffe2f49234001380119d89e9c965bed4bf123f0 | 0 ETH | 0.000050386201 ETH |
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
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)
// 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 private constant 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 view override 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; } // if _maximise and price is e.g. 1.02, return 1.02 if (_maximise && price > ONE_USD) { return price; } // if !_maximise and price is e.g. 0.98, return 0.98 if (!_maximise && price < ONE_USD) { return price; } 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; } // if _maximise and price is e.g. 1.02, return 1.02 if (_maximise && price > ONE_USD) { return price; } // if !_maximise and price is e.g. 0.98, return 0.98 if (!_maximise && price < ONE_USD) { return price; } 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 view override 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 view override 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); } }
// 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; } }
// 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; }
// 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 ); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface ISecondaryPriceFeed { function getPrice( address _token, uint256 _referencePrice, bool _maximise ) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IChainlinkFlags { function getFlag(address) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface IPancakePair { function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); }
{ "optimizer": { "enabled": true, "runs": 1 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"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"}]
Contract Creation Code
60806040526001805461ffff60b01b1960ff60a81b1960ff60a01b19909216600160a01b1791909116600160a81b171690556003600281905560009055601e60055534801561004d57600080fd5b50600080546001600160a01b03191633179055611fc58061006f6000396000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c80630957aed9146102615780631193c8091461027b578063126082cf1461029f57806312d43a51146102a75780632fa03b8f146102af5780632fbfe3d3146102ce5780632fc3a70a146102eb57806330536ee514610329578063378e7bf7146103455780633d949c5f1461034d5780633eba8d36146103835780633ebbc601146103b75780633f0c3bb7146103bf578063443be209146103c757806348cac277146103ff57806349a876e4146104255780634a4b1f4f1461042d5780634b9ade471461043557806356c8c2c114610473578063593d9e80146104a1578063604f37e9146104a957806367781c0e146104c85780636ce8a44b146104d05780636fc80708146104f6578063717cfe7a146104fe578063732391b414610524578063826e055f1461055a5780638b86616c146105805780638c7c9e0c1461058857806393f690741461059057806395082d25146104c8578063971bd396146105c857806397dfade7146105d05780639917dc74146105d85780639a0a6635146105f75780639b18dc471461061d5780639b889380146106255780639dcb511a14610651578063a27ea38614610677578063a28d57d81461069d578063a2ad7b93146106a5578063a39c73a3146106d3578063b02a2de4146106db578063b731dd871461070f578063b8f611051461072c578063c2138d8c14610752578063cefe0f2114610778578063cfad57a21461079e578063d694376c146107c4578063e4440e02146107f8578063eb1c92a914610800578063fd34ec401461081f575b600080fd5b61026961083e565b60408051918252519081900360200190f35b610283610843565b604080516001600160a01b039092168252519081900360200190f35b610269610852565b610283610858565b6102cc600480360360208110156102c557600080fd5b5035610867565b005b6102cc600480360360208110156102e457600080fd5b50356108f8565b6102696004803603608081101561030157600080fd5b506001600160a01b03813516906020810135151590604081013515159060600135151561094a565b610331610a08565b604080519115158252519081900360200190f35b610269610a18565b6102696004803603606081101561036357600080fd5b506001600160a01b03813516906020810135151590604001351515610a1e565b6102696004803603606081101561039957600080fd5b506001600160a01b0381351690602081013590604001351515610bf2565b610331610ca0565b610331610cb0565b6102cc600480360360608110156103dd57600080fd5b506001600160a01b038135811691602081013582169160409091013516610cc0565b6102696004803603602081101561041557600080fd5b50356001600160a01b0316610d4c565b610283610d5e565b610269610d6d565b6102cc6004803603608081101561044b57600080fd5b506001600160a01b038135811691602081013590911690604081013590606001351515610d72565b6102696004803603604081101561048957600080fd5b506001600160a01b0381351690602001351515610e14565b610331611241565b6102cc600480360360208110156104bf57600080fd5b50351515611251565b6102696112bc565b610331600480360360208110156104e657600080fd5b50356001600160a01b03166112cc565b6102696112e1565b6102696004803603602081101561051457600080fd5b50356001600160a01b03166112e7565b6102696004803603606081101561053a57600080fd5b506001600160a01b038135169060208101351515906040013515156112f9565b6102cc6004803603602081101561057057600080fd5b50356001600160a01b031661134e565b6102836113bd565b6102836113cc565b6102cc600480360360608110156105a657600080fd5b506001600160a01b0381358116916020810135821691604090910135166113db565b610283611467565b610283611476565b6102cc600480360360208110156105ee57600080fd5b50351515611485565b6102cc6004803603602081101561060d57600080fd5b50356001600160a01b03166114f0565b61026961155f565b6102cc6004803603604081101561063b57600080fd5b506001600160a01b038135169060200135611565565b6102836004803603602081101561066757600080fd5b50356001600160a01b031661160e565b6102696004803603602081101561068d57600080fd5b50356001600160a01b0316611629565b61028361163b565b610269600480360360408110156106bb57600080fd5b506001600160a01b038135169060200135151561164a565b610269611737565b610269600480360360608110156106f157600080fd5b506001600160a01b038135169060208101351515906040013561173d565b6102cc6004803603602081101561072557600080fd5b5035611805565b6103316004803603602081101561074257600080fd5b50356001600160a01b0316611857565b6102696004803603602081101561076857600080fd5b50356001600160a01b031661186c565b6102696004803603602081101561078e57600080fd5b50356001600160a01b031661196b565b6102cc600480360360208110156107b457600080fd5b50356001600160a01b031661197d565b6102cc600480360360608110156107da57600080fd5b506001600160a01b03813516906020810135151590604001356119ec565b610283611b2f565b6102cc6004803603602081101561081657600080fd5b50351515611b3e565b6102cc6004803603602081101561083557600080fd5b50351515611ba9565b603281565b600a546001600160a01b031681565b61271081565b6000546001600160a01b031681565b6000546001600160a01b031633146108b4576040805162461bcd60e51b81526020600482015260196024820152600080516020611edf833981519152604482015290519081900360640190fd5b600081116108f35760405162461bcd60e51b8152600401808060200182810382526029815260200180611e436029913960400191505060405180910390fd5b600255565b6000546001600160a01b03163314610945576040805162461bcd60e51b81526020600482015260196024820152600080516020611edf833981519152604482015290519081900360640190fd5b600355565b6001546000908190600160b01b900460ff166109705761096b868686610a1e565b61097b565b61097b8686866112f9565b6001600160a01b03871660009081526010602052604090205490915080156109fe576001600160a01b03871660009081526011602052604090205460ff1680156109e6576109df6127106109d96109d28286611c14565b8690611c6c565b90611cc5565b92506109fc565b6109f96127106109d96109d28286611d04565b92505b505b5095945050505050565b600154600160b01b900460ff1681565b60035481565b600080610a2b8585610e14565b9050828015610a435750600154600160a01b900460ff165b15610a88576000610a538661186c565b90508015610a8657848015610a6757508181115b15610a70578091505b84158015610a7d57508181105b15610a86578091505b505b600154600160a81b900460ff1615610aa857610aa5858286610bf2565b90505b6001600160a01b0385166000908152600f602052604090205460ff1615610b9157600068327cb2734119d3b7a9601e1b8211610af957610af468327cb2734119d3b7a9601e1b83611d04565b610b0f565b610b0f8268327cb2734119d3b7a9601e1b611d04565b90506003548111610b305768327cb2734119d3b7a9601e1b92505050610beb565b848015610b48575068327cb2734119d3b7a9601e1b82115b15610b5557509050610beb565b84158015610b6e575068327cb2734119d3b7a9601e1b82105b15610b7b57509050610beb565b68327cb2734119d3b7a9601e1b92505050610beb565b6001600160a01b0385166000908152600e60205260409020548415610bd357610bca6127106109d9610bc38285611c14565b8590611c6c565b92505050610beb565b610be66127106109d9610bc38285611d04565b925050505b9392505050565b6004546000906001600160a01b0316610c0c575081610beb565b6004805460408051630ffd9c6d60e31b81526001600160a01b038881169482019490945260248101879052851515604482015290519290911691637fece36891606480820192602092909190829003018186803b158015610c6c57600080fd5b505afa158015610c80573d6000803e3d6000fd5b505050506040513d6020811015610c9657600080fd5b5051949350505050565b600154600160a81b900460ff1681565b600154600160a01b900460ff1681565b6000546001600160a01b03163314610d0d576040805162461bcd60e51b81526020600482015260196024820152600080516020611edf833981519152604482015290519081900360640190fd5b600680546001600160a01b039485166001600160a01b031991821617909155600780549385169382169390931790925560088054919093169116179055565b60106020526000908152604090205481565b6008546001600160a01b031681565b601481565b6000546001600160a01b03163314610dbf576040805162461bcd60e51b81526020600482015260196024820152600080516020611edf833981519152604482015290519081900360640190fd5b6001600160a01b039384166000908152600c6020908152604080832080546001600160a01b0319169690971695909517909555600d855283812092909255600f90935220805460ff1916911515919091179055565b6001600160a01b038083166000908152600c602052604081205490911680610e6d5760405162461bcd60e51b8152600401808060200182810382526022815260200180611f6e6022913960400191505060405180910390fd5b6001546001600160a01b031615610f4a5760015460408051631abf23ff60e11b815273a438451d6458044c3c8cd2f6f31c91ac882a6d91600482015290516000926001600160a01b03169163357e47fe916024808301926020929190829003018186803b158015610edd57600080fd5b505afa158015610ef1573d6000803e3d6000fd5b505050506040513d6020811015610f0757600080fd5b505190508015610f485760405162461bcd60e51b8152600401808060200182810382526025815260200180611eff6025913960400191505060405180910390fd5b505b6000819050600080826001600160a01b031663668a0f026040518163ffffffff1660e01b815260040160206040518083038186803b158015610f8b57600080fd5b505afa158015610f9f573d6000803e3d6000fd5b505050506040513d6020811015610fb557600080fd5b5051905060005b600254816001600160501b031610156111bc57806001600160501b0316826001600160501b031611610fed576111bc565b60006001600160501b0382166110b0576000856001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561103857600080fd5b505afa15801561104c573d6000803e3d6000fd5b505050506040513d602081101561106257600080fd5b50519050600081136110a9576040805162461bcd60e51b815260206004820152601d6024820152600080516020611f4e833981519152604482015290519081900360640190fd5b9050611178565b6000856001600160a01b0316639a6fc8f58486036040518263ffffffff1660e01b815260040180826001600160501b0316815260200191505060a06040518083038186803b15801561110157600080fd5b505afa158015611115573d6000803e3d6000fd5b505050506040513d60a081101561112b57600080fd5b5060200151905060008113611175576040805162461bcd60e51b815260206004820152601d6024820152600080516020611f4e833981519152604482015290519081900360640190fd5b90505b836111845792506111b4565b87801561119057508381115b1561119c5792506111b4565b871580156111a957508381105b156111b2578093505b505b600101610fbc565b50600082116111fc5760405162461bcd60e51b8152600401808060200182810382526025815260200180611e6c6025913960400191505060405180910390fd5b6001600160a01b0387166000908152600d6020526040902054611233600a82900a6109d98568327cb2734119d3b7a9601e1b611c6c565b955050505050505b92915050565b600154600160b81b900460ff1681565b6000546001600160a01b0316331461129e576040805162461bcd60e51b81526020600482015260196024820152600080516020611edf833981519152604482015290519081900360640190fd5b60018054911515600160b81b0260ff60b81b19909216919091179055565b68327cb2734119d3b7a9601e1b81565b60116020526000908152604090205460ff1681565b60025481565b60126020526000908152604090205481565b6000806113068585610e14565b905082801561131e5750600154600160a01b900460ff165b15610a885761132e85858361173d565b905060015460ff600160a81b9091041615610aa857610aa5858286610bf2565b6000546001600160a01b0316331461139b576040805162461bcd60e51b81526020600482015260196024820152600080516020611edf833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b031681565b6007546001600160a01b031681565b6000546001600160a01b03163314611428576040805162461bcd60e51b81526020600482015260196024820152600080516020611edf833981519152604482015290519081900360640190fd5b600980546001600160a01b039485166001600160a01b031991821617909155600a805493851693821693909317909255600b8054919093169116179055565b600b546001600160a01b031681565b6009546001600160a01b031681565b6000546001600160a01b031633146114d2576040805162461bcd60e51b81526020600482015260196024820152600080516020611edf833981519152604482015290519081900360640190fd5b60018054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b0316331461153d576040805162461bcd60e51b81526020600482015260196024820152600080516020611edf833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b611c2081565b6000546001600160a01b031633146115b2576040805162461bcd60e51b81526020600482015260196024820152600080516020611edf833981519152604482015290519081900360640190fd5b60328111156115f25760405162461bcd60e51b815260040180806020018281038252602a815260200180611f24602a913960400191505060405180910390fd5b6001600160a01b039091166000908152600e6020526040902055565b600c602052600090815260409020546001600160a01b031681565b600e6020526000908152604090205481565b6006546001600160a01b031681565b6000806000846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561168857600080fd5b505afa15801561169c573d6000803e3d6000fd5b505050506040513d60608110156116b257600080fd5b5080516020909101516001600160701b039182169350169050831561170457816116e15760009250505061123b565b6116fb826109d98368327cb2734119d3b7a9601e1b611c6c565b9250505061123b565b806117145760009250505061123b565b61172e816109d98468327cb2734119d3b7a9601e1b611c6c565b95945050505050565b60055481565b6000806117498561186c565b9050806117595782915050610beb565b60008382116117715761176c8483611d04565b61177b565b61177b8285611d04565b905061179260055485611c6c90919063ffffffff16565b61179e82612710611c6c565b10156117c857600154600160b81b900460ff16156117c0578392505050610beb565b509050610beb565b8480156117d457508382115b156117e157509050610beb565b841580156117ee57508382105b156117fb57509050610beb565b5091949350505050565b6000546001600160a01b03163314611852576040805162461bcd60e51b81526020600482015260196024820152600080516020611edf833981519152604482015290519081900360640190fd5b600555565b600f6020526000908152604090205460ff1681565b6008546000906001600160a01b03838116911614156118a35760095461189c906001600160a01b0316600161164a565b9050611966565b6007546001600160a01b0383811691161415611915576009546000906118d3906001600160a01b0316600161164a565b600a549091506000906118f0906001600160a01b0316600161164a565b905061190c68327cb2734119d3b7a9601e1b6109d98484611c6c565b92505050611966565b6006546001600160a01b038381169116141561196257600954600090611945906001600160a01b0316600161164a565b600b549091506000906118f0906001600160a01b0316600161164a565b5060005b919050565b600d6020526000908152604090205481565b6000546001600160a01b031633146119ca576040805162461bcd60e51b81526020600482015260196024820152600080516020611edf833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a39576040805162461bcd60e51b81526020600482015260196024820152600080516020611edf833981519152604482015290519081900360640190fd5b6001600160a01b0383166000908152601260205260409020544290611a6090611c20611c14565b10611a9c5760405162461bcd60e51b815260040180806020018281038252602d815260200180611eb2602d913960400191505060405180910390fd5b6014811115611aeb576040805162461bcd60e51b8152602060048201526016602482015275696e76616c6964205f61646a7573746d656e7442707360501b604482015290519081900360640190fd5b6001600160a01b03929092166000908152601160209081526040808320805460ff191694151594909417909355601081528282209390935560129092529020429055565b6001546001600160a01b031681565b6000546001600160a01b03163314611b8b576040805162461bcd60e51b81526020600482015260196024820152600080516020611edf833981519152604482015290519081900360640190fd5b60018054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b03163314611bf6576040805162461bcd60e51b81526020600482015260196024820152600080516020611edf833981519152604482015290519081900360640190fd5b60018054911515600160b01b0260ff60b01b19909216919091179055565b600082820183811015610beb576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600082611c7b5750600061123b565b82820282848281611c8857fe5b0414610beb5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e916021913960400191505060405180910390fd5b6000610beb83836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250611d46565b6000610beb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611de8565b60008183611dd25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d97578181015183820152602001611d7f565b50505050905090810190601f168015611dc45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611dde57fe5b0495945050505050565b60008184841115611e3a5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611d97578181015183820152602001611d7f565b50505090039056fe5661756c745072696365466565643a20696e76616c6964205f707269636553616d706c6553706163655661756c745072696365466565643a20636f756c64206e6f74206665746368207072696365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775661756c745072696365466565643a2061646a7573746d656e74206672657175656e63792065786365656465645661756c745072696365466565643a20666f7262696464656e00000000000000436861696e6c696e6b20666565647320617265206e6f74206265696e6720757064617465645661756c745072696365466565643a20696e76616c6964205f7370726561644261736973506f696e74735661756c745072696365466565643a20696e76616c69642070726963650000005661756c745072696365466565643a20696e76616c69642070726963652066656564a2646970667358221220ef41b773a4b2ef4727dfc2dcd2a2682315168dc7f559cfe569d4116768cf84c664736f6c634300060c0033
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.