{
  "address": "0xA7C432c50D310c805c8342488921A108b585397F",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "stakePool",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "stkBNB",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "resilientOracle",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "InvalidTokenAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PoolTokenSupplyIsZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddressNotAllowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CORRELATED_TOKEN",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "NATIVE_TOKEN_ADDR",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RESILIENT_ORACLE",
      "outputs": [
        {
          "internalType": "contract OracleInterface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "STAKE_POOL",
      "outputs": [
        {
          "internalType": "contract IPStakePool",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UNDERLYING_TOKEN",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        }
      ],
      "name": "getPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "transactionHash": "0x631a6a2ca707e4a3fbca91c8d5bd28af56392fb68357e3a08c9ffb9a7f32a81a",
  "receipt": {
    "to": null,
    "from": "0x8BDA9f9E1fEF0DFd404Fef338D9fE4c543d172e1",
    "contractAddress": "0xA7C432c50D310c805c8342488921A108b585397F",
    "transactionIndex": 48,
    "gasUsed": "400902",
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "blockHash": "0x8983fe54e6bed2a2ba8d28efcc760ed477774889407748219bd5a2984a4b3b74",
    "transactionHash": "0x631a6a2ca707e4a3fbca91c8d5bd28af56392fb68357e3a08c9ffb9a7f32a81a",
    "logs": [],
    "blockNumber": 37990937,
    "cumulativeGasUsed": "4929308",
    "status": 1,
    "byzantium": true
  },
  "args": [
    "0xC228CefDF841dEfDbD5B3a18dFD414cC0dbfa0D8",
    "0xc2E9d07F66A89c44062459A47a0D2Dc038E4fb16",
    "0x6592b5DE802159F3E74B2486b091D11a8256ab8A"
  ],
  "numDeployments": 1,
  "solcInputHash": "99b3bea8181cef11bcfb39c4212459c2",
  "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"stakePool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stkBNB\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resilientOracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolTokenSupplyIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CORRELATED_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_TOKEN_ADDR\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESILIENT_ORACLE\",\"outputs\":[{\"internalType\":\"contract OracleInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKE_POOL\",\"outputs\":[{\"internalType\":\"contract IPStakePool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"getPrice(address)\":{\"params\":{\"asset\":\"Address of the correlated token\"},\"returns\":{\"_0\":\"price The price of the correlated token in scaled decimal places\"}}},\"stateVariables\":{\"STAKE_POOL\":{\"custom:oz-upgrades-unsafe-allow\":\"state-variable-immutable\"}},\"title\":\"StkBNBOracle\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidTokenAddress()\":[{\"notice\":\"Thrown if the token address is invalid\"}],\"PoolTokenSupplyIsZero()\":[{\"notice\":\"Thrown if the pool token supply is zero\"}],\"ZeroAddressNotAllowed()\":[{\"notice\":\"Thrown if the supplied address is a zero address where it is not allowed\"}]},\"kind\":\"user\",\"methods\":{\"CORRELATED_TOKEN()\":{\"notice\":\"Address of the correlated token\"},\"NATIVE_TOKEN_ADDR()\":{\"notice\":\"This is used as token address of BNB on BSC\"},\"RESILIENT_ORACLE()\":{\"notice\":\"Address of Resilient Oracle\"},\"STAKE_POOL()\":{\"notice\":\"Address of StakePool\"},\"UNDERLYING_TOKEN()\":{\"notice\":\"Address of the underlying token\"},\"constructor\":{\"notice\":\"Constructor for the implementation contract.\"},\"getPrice(address)\":{\"notice\":\"Fetches the price of the correlated token\"}},\"notice\":\"This oracle fetches the price of stkBNB asset\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/oracles/StkBNBOracle.sol\":\"StkBNBOracle\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Thrown if the supplied value is 0 where it is not allowed\\nerror ZeroValueNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\\n/// @notice Checks if the provided value is nonzero, reverts otherwise\\n/// @param value_ Value to check\\n/// @custom:error ZeroValueNotAllowed is thrown if the provided value is 0\\nfunction ensureNonzeroValue(uint256 value_) pure {\\n    if (value_ == 0) {\\n        revert ZeroValueNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0xdb88e14d50dd21889ca3329d755673d022c47e8da005b6a545c7f69c2c4b7b86\",\"license\":\"BSD-3-Clause\"},\"contracts/interfaces/IPStakePool.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\ninterface IPStakePool {\\n    struct Data {\\n        uint256 totalWei;\\n        uint256 poolTokenSupply;\\n    }\\n\\n    /**\\n     * @dev The current exchange rate for converting stkBNB to BNB.\\n     */\\n    function exchangeRate() external view returns (Data memory);\\n}\\n\",\"keccak256\":\"0xe1f74f35e9873a0e4dd128bd51a78ef548083d8b66771ebee45a27a093cf830d\",\"license\":\"BSD-3-Clause\"},\"contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"contracts/oracles/StkBNBOracle.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IPStakePool } from \\\"../interfaces/IPStakePool.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"@venusprotocol/solidity-utilities/contracts/validators.sol\\\";\\nimport { EXP_SCALE } from \\\"@venusprotocol/solidity-utilities/contracts/constants.sol\\\";\\nimport { CorrelatedTokenOracle } from \\\"./common/CorrelatedTokenOracle.sol\\\";\\n\\n/**\\n * @title StkBNBOracle\\n * @author Venus\\n * @notice This oracle fetches the price of stkBNB asset\\n */\\ncontract StkBNBOracle is CorrelatedTokenOracle {\\n    /// @notice This is used as token address of BNB on BSC\\n    address public constant NATIVE_TOKEN_ADDR = 0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB;\\n\\n    /// @notice Address of StakePool\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    IPStakePool public immutable STAKE_POOL;\\n\\n    /// @notice Thrown if the pool token supply is zero\\n    error PoolTokenSupplyIsZero();\\n\\n    /// @notice Constructor for the implementation contract.\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    constructor(\\n        address stakePool,\\n        address stkBNB,\\n        address resilientOracle\\n    ) CorrelatedTokenOracle(stkBNB, NATIVE_TOKEN_ADDR, resilientOracle) {\\n        ensureNonzeroAddress(stakePool);\\n        STAKE_POOL = IPStakePool(stakePool);\\n    }\\n\\n    /**\\n     * @notice Fetches the amount of BNB for 1 stkBNB\\n     * @return price The amount of BNB for stkBNB\\n     */\\n    function _getUnderlyingAmount() internal view override returns (uint256) {\\n        IPStakePool.Data memory exchangeRateData = STAKE_POOL.exchangeRate();\\n\\n        if (exchangeRateData.poolTokenSupply == 0) {\\n            revert PoolTokenSupplyIsZero();\\n        }\\n\\n        return (exchangeRateData.totalWei * EXP_SCALE) / exchangeRateData.poolTokenSupply;\\n    }\\n}\\n\",\"keccak256\":\"0x3152b5ad04e513296ccbb4f851bd4348513368ba9a5c3eab5720ba14dfdb98d5\",\"license\":\"BSD-3-Clause\"},\"contracts/oracles/common/CorrelatedTokenOracle.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { OracleInterface } from \\\"../../interfaces/OracleInterface.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"@venusprotocol/solidity-utilities/contracts/validators.sol\\\";\\nimport { IERC20Metadata } from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\n/**\\n * @title CorrelatedTokenOracle\\n * @notice This oracle fetches the price of a token that is correlated to another token.\\n */\\nabstract contract CorrelatedTokenOracle is OracleInterface {\\n    /// @notice Address of the correlated token\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable CORRELATED_TOKEN;\\n\\n    /// @notice Address of the underlying token\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable UNDERLYING_TOKEN;\\n\\n    /// @notice Address of Resilient Oracle\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    OracleInterface public immutable RESILIENT_ORACLE;\\n\\n    /// @notice Thrown if the token address is invalid\\n    error InvalidTokenAddress();\\n\\n    /// @notice Constructor for the implementation contract.\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    constructor(address correlatedToken, address underlyingToken, address resilientOracle) {\\n        ensureNonzeroAddress(correlatedToken);\\n        ensureNonzeroAddress(underlyingToken);\\n        ensureNonzeroAddress(resilientOracle);\\n        CORRELATED_TOKEN = correlatedToken;\\n        UNDERLYING_TOKEN = underlyingToken;\\n        RESILIENT_ORACLE = OracleInterface(resilientOracle);\\n    }\\n\\n    /**\\n     * @notice Fetches the price of the correlated token\\n     * @param asset Address of the correlated token\\n     * @return price The price of the correlated token in scaled decimal places\\n     */\\n    function getPrice(address asset) external view override returns (uint256) {\\n        if (asset != CORRELATED_TOKEN) revert InvalidTokenAddress();\\n\\n        // get underlying token amount for 1 correlated token scaled by underlying token decimals\\n        uint256 underlyingAmount = _getUnderlyingAmount();\\n\\n        // oracle returns (36 - asset decimal) scaled price\\n        uint256 underlyingUSDPrice = RESILIENT_ORACLE.getPrice(UNDERLYING_TOKEN);\\n\\n        IERC20Metadata token = IERC20Metadata(CORRELATED_TOKEN);\\n        uint256 decimals = token.decimals();\\n\\n        // underlyingAmount (for 1 correlated token) * underlyingUSDPrice / decimals(correlated token)\\n        return (underlyingAmount * underlyingUSDPrice) / (10 ** decimals);\\n    }\\n\\n    /**\\n     * @notice Gets the underlying amount for correlated token\\n     * @return underlyingAmount Amount of underlying token\\n     */\\n    function _getUnderlyingAmount() internal view virtual returns (uint256);\\n}\\n\",\"keccak256\":\"0x7053239c18747f7439e025cd4aab629f78dd6dbaadeedacf2393d74c4db317ca\",\"license\":\"BSD-3-Clause\"}},\"version\":1}",
  "bytecode": "0x61010060405234801561001157600080fd5b506040516107b03803806107b0833981016040819052610030916100dc565b8173bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb8261005083610096565b61005982610096565b61006281610096565b6001600160a01b0392831660805290821660a0521660c05261008383610096565b50506001600160a01b031660e05261011f565b6001600160a01b0381166100bd576040516342bcdf7f60e11b815260040160405180910390fd5b50565b80516001600160a01b03811681146100d757600080fd5b919050565b6000806000606084860312156100f157600080fd5b6100fa846100c0565b9250610108602085016100c0565b9150610116604085016100c0565b90509250925092565b60805160a05160c05160e0516106386101786000396000818160b0015261032801526000818161011f01526101ff015260008181606c01526101d101526000818160f801528181610160015261027001526106386000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806329db1be6146100675780633a26dc4f146100ab57806341976e09146100d257806369818a35146100f3578063a4edcd4c1461011a578063a9534f8a14610141575b600080fd5b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b6100e56100e03660046103f8565b61015c565b6040519081526020016100a2565b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b61008e73bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb81565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146101b057604051630f58058360e11b815260040160405180910390fd5b60006101ba610323565b6040516341976e0960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906341976e0990602401602060405180830381865afa158015610246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026a9190610428565b905060007f000000000000000000000000000000000000000000000000000000000000000090506000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f59190610441565b60ff16905061030581600a610560565b61030f848661056c565b6103199190610583565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ba0b9a96040518163ffffffff1660e01b81526004016040805180830381865afa158015610383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a791906105a5565b905080602001516000036103ce5760405163386c978360e21b815260040160405180910390fd5b602081015181516103e890670de0b6b3a76400009061056c565b6103f29190610583565b91505090565b60006020828403121561040a57600080fd5b81356001600160a01b038116811461042157600080fd5b9392505050565b60006020828403121561043a57600080fd5b5051919050565b60006020828403121561045357600080fd5b815160ff8116811461042157600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156104b557816000190482111561049b5761049b610464565b808516156104a857918102915b93841c939080029061047f565b509250929050565b6000826104cc5750600161055a565b816104d95750600061055a565b81600181146104ef57600281146104f957610515565b600191505061055a565b60ff84111561050a5761050a610464565b50506001821b61055a565b5060208310610133831016604e8410600b8410161715610538575081810a61055a565b610542838361047a565b806000190482111561055657610556610464565b0290505b92915050565b600061042183836104bd565b808202811582820484141761055a5761055a610464565b6000826105a057634e487b7160e01b600052601260045260246000fd5b500490565b6000604082840312156105b757600080fd5b6040516040810181811067ffffffffffffffff821117156105e857634e487b7160e01b600052604160045260246000fd5b60405282518152602092830151928101929092525091905056fea2646970667358221220fc14b81f1ab232b357f1a3954496b0ffb6119074a761a258a57193d49224e16564736f6c63430008190033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806329db1be6146100675780633a26dc4f146100ab57806341976e09146100d257806369818a35146100f3578063a4edcd4c1461011a578063a9534f8a14610141575b600080fd5b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b6100e56100e03660046103f8565b61015c565b6040519081526020016100a2565b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b61008e7f000000000000000000000000000000000000000000000000000000000000000081565b61008e73bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb81565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146101b057604051630f58058360e11b815260040160405180910390fd5b60006101ba610323565b6040516341976e0960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906341976e0990602401602060405180830381865afa158015610246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026a9190610428565b905060007f000000000000000000000000000000000000000000000000000000000000000090506000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f59190610441565b60ff16905061030581600a610560565b61030f848661056c565b6103199190610583565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ba0b9a96040518163ffffffff1660e01b81526004016040805180830381865afa158015610383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a791906105a5565b905080602001516000036103ce5760405163386c978360e21b815260040160405180910390fd5b602081015181516103e890670de0b6b3a76400009061056c565b6103f29190610583565b91505090565b60006020828403121561040a57600080fd5b81356001600160a01b038116811461042157600080fd5b9392505050565b60006020828403121561043a57600080fd5b5051919050565b60006020828403121561045357600080fd5b815160ff8116811461042157600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156104b557816000190482111561049b5761049b610464565b808516156104a857918102915b93841c939080029061047f565b509250929050565b6000826104cc5750600161055a565b816104d95750600061055a565b81600181146104ef57600281146104f957610515565b600191505061055a565b60ff84111561050a5761050a610464565b50506001821b61055a565b5060208310610133831016604e8410600b8410161715610538575081810a61055a565b610542838361047a565b806000190482111561055657610556610464565b0290505b92915050565b600061042183836104bd565b808202811582820484141761055a5761055a610464565b6000826105a057634e487b7160e01b600052601260045260246000fd5b500490565b6000604082840312156105b757600080fd5b6040516040810181811067ffffffffffffffff821117156105e857634e487b7160e01b600052604160045260246000fd5b60405282518152602092830151928101929092525091905056fea2646970667358221220fc14b81f1ab232b357f1a3954496b0ffb6119074a761a258a57193d49224e16564736f6c63430008190033",
  "devdoc": {
    "author": "Venus",
    "kind": "dev",
    "methods": {
      "constructor": {
        "custom:oz-upgrades-unsafe-allow": "constructor"
      },
      "getPrice(address)": {
        "params": {
          "asset": "Address of the correlated token"
        },
        "returns": {
          "_0": "price The price of the correlated token in scaled decimal places"
        }
      }
    },
    "stateVariables": {
      "STAKE_POOL": {
        "custom:oz-upgrades-unsafe-allow": "state-variable-immutable"
      }
    },
    "title": "StkBNBOracle",
    "version": 1
  },
  "userdoc": {
    "errors": {
      "InvalidTokenAddress()": [
        {
          "notice": "Thrown if the token address is invalid"
        }
      ],
      "PoolTokenSupplyIsZero()": [
        {
          "notice": "Thrown if the pool token supply is zero"
        }
      ],
      "ZeroAddressNotAllowed()": [
        {
          "notice": "Thrown if the supplied address is a zero address where it is not allowed"
        }
      ]
    },
    "kind": "user",
    "methods": {
      "CORRELATED_TOKEN()": {
        "notice": "Address of the correlated token"
      },
      "NATIVE_TOKEN_ADDR()": {
        "notice": "This is used as token address of BNB on BSC"
      },
      "RESILIENT_ORACLE()": {
        "notice": "Address of Resilient Oracle"
      },
      "STAKE_POOL()": {
        "notice": "Address of StakePool"
      },
      "UNDERLYING_TOKEN()": {
        "notice": "Address of the underlying token"
      },
      "constructor": {
        "notice": "Constructor for the implementation contract."
      },
      "getPrice(address)": {
        "notice": "Fetches the price of the correlated token"
      }
    },
    "notice": "This oracle fetches the price of stkBNB asset",
    "version": 1
  },
  "storageLayout": {
    "storage": [],
    "types": null
  }
}
