{
  "address": "0x867a2d7efEbDcdaa0A0437CFcDe4fBd7BC2cA557",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "wbeth",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "eth",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "resilientOracle",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "InvalidTokenAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddressNotAllowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CORRELATED_TOKEN",
      "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": "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": "0x2a5e172f0344d8dbe579abad386aa9261f433bd17207bf3e1f88761003b6dd99",
  "receipt": {
    "to": null,
    "from": "0x464779C41C5f1Be598853C1F87bCC7087Ea75f28",
    "contractAddress": "0x867a2d7efEbDcdaa0A0437CFcDe4fBd7BC2cA557",
    "transactionIndex": 0,
    "gasUsed": "344912",
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "blockHash": "0x456bcdb001d3fd8017b6f05d5a73bd29c5d4f67436096cc6e7956ffb341e6132",
    "transactionHash": "0x2a5e172f0344d8dbe579abad386aa9261f433bd17207bf3e1f88761003b6dd99",
    "logs": [],
    "blockNumber": 39518593,
    "cumulativeGasUsed": "344912",
    "status": 1,
    "byzantium": true
  },
  "args": [
    "0x9c37E59Ba22c4320547F00D4f1857AF1abd1Dd6f",
    "0x98f7A83361F7Ac8765CcEBAB1425da6b341958a7",
    "0x3cD69251D04A28d887Ac14cbe2E14c52F3D57823"
  ],
  "numDeployments": 1,
  "solcInputHash": "99b3bea8181cef11bcfb39c4212459c2",
  "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wbeth\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"eth\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resilientOracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CORRELATED_TOKEN\",\"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\":\"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\"}}},\"title\":\"WBETHOracle\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidTokenAddress()\":[{\"notice\":\"Thrown if the token address is invalid\"}],\"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\"},\"RESILIENT_ORACLE()\":{\"notice\":\"Address of Resilient Oracle\"},\"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 wBETH asset\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/oracles/WBETHOracle.sol\":\"WBETHOracle\"},\"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/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/IWBETH.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\ninterface IWBETH {\\n    function exchangeRate() external view returns (uint256);\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0xaff923809f41bf7bc321d5285ddf2c03856a3cf0050c005154e31e811161d7db\",\"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/WBETHOracle.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IWBETH } from \\\"../interfaces/IWBETH.sol\\\";\\nimport { CorrelatedTokenOracle } from \\\"./common/CorrelatedTokenOracle.sol\\\";\\n\\n/**\\n * @title WBETHOracle\\n * @author Venus\\n * @notice This oracle fetches the price of wBETH asset\\n */\\ncontract WBETHOracle is CorrelatedTokenOracle {\\n    /// @notice Constructor for the implementation contract.\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    constructor(\\n        address wbeth,\\n        address eth,\\n        address resilientOracle\\n    ) CorrelatedTokenOracle(wbeth, eth, resilientOracle) {}\\n\\n    /**\\n     * @notice Fetches the amount of ETH for 1 wBETH\\n     * @return amount The amount of ETH for wBETH\\n     */\\n    function _getUnderlyingAmount() internal view override returns (uint256) {\\n        return IWBETH(CORRELATED_TOKEN).exchangeRate();\\n    }\\n}\\n\",\"keccak256\":\"0x0103ec12d5236a298f87a595d671b5788fb519285c9f5bb3a58fbb88c2aa2934\",\"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": "0x60e060405234801561001057600080fd5b5060405161067d38038061067d83398101604081905261002f916100b4565b82828261003b8361006e565b6100448261006e565b61004d8161006e565b6001600160a01b0392831660805290821660a0521660c052506100f7915050565b6001600160a01b038116610095576040516342bcdf7f60e11b815260040160405180910390fd5b50565b80516001600160a01b03811681146100af57600080fd5b919050565b6000806000606084860312156100c957600080fd5b6100d284610098565b92506100e060208501610098565b91506100ee60408501610098565b90509250925092565b60805160a05160c0516105376101466000396000818160e201526101a70152600081816056015261017901526000818160bb015281816101080152818161021801526102cf01526105376000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806329db1be61461005157806341976e091461009557806369818a35146100b6578063a4edcd4c146100dd575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a86100a3366004610354565b610104565b60405190815260200161008c565b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6100787f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461015857604051630f58058360e11b815260040160405180910390fd5b60006101626102cb565b6040516341976e0960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906341976e0990602401602060405180830381865afa1580156101ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102129190610384565b905060007f000000000000000000000000000000000000000000000000000000000000000090506000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029d919061039d565b60ff1690506102ad81600a6104bc565b6102b784866104c8565b6102c191906104df565b9695505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ba0b9a96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561032b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034f9190610384565b905090565b60006020828403121561036657600080fd5b81356001600160a01b038116811461037d57600080fd5b9392505050565b60006020828403121561039657600080fd5b5051919050565b6000602082840312156103af57600080fd5b815160ff8116811461037d57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156104115781600019048211156103f7576103f76103c0565b8085161561040457918102915b93841c93908002906103db565b509250929050565b600082610428575060016104b6565b81610435575060006104b6565b816001811461044b576002811461045557610471565b60019150506104b6565b60ff841115610466576104666103c0565b50506001821b6104b6565b5060208310610133831016604e8410600b8410161715610494575081810a6104b6565b61049e83836103d6565b80600019048211156104b2576104b26103c0565b0290505b92915050565b600061037d8383610419565b80820281158282048414176104b6576104b66103c0565b6000826104fc57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220103949984f9c4f17b5df1a73c01f5a014b6db6dee8d4d0409b4c5ace1db2733d64736f6c63430008190033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806329db1be61461005157806341976e091461009557806369818a35146100b6578063a4edcd4c146100dd575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a86100a3366004610354565b610104565b60405190815260200161008c565b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6100787f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461015857604051630f58058360e11b815260040160405180910390fd5b60006101626102cb565b6040516341976e0960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906341976e0990602401602060405180830381865afa1580156101ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102129190610384565b905060007f000000000000000000000000000000000000000000000000000000000000000090506000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029d919061039d565b60ff1690506102ad81600a6104bc565b6102b784866104c8565b6102c191906104df565b9695505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ba0b9a96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561032b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034f9190610384565b905090565b60006020828403121561036657600080fd5b81356001600160a01b038116811461037d57600080fd5b9392505050565b60006020828403121561039657600080fd5b5051919050565b6000602082840312156103af57600080fd5b815160ff8116811461037d57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156104115781600019048211156103f7576103f76103c0565b8085161561040457918102915b93841c93908002906103db565b509250929050565b600082610428575060016104b6565b81610435575060006104b6565b816001811461044b576002811461045557610471565b60019150506104b6565b60ff841115610466576104666103c0565b50506001821b6104b6565b5060208310610133831016604e8410600b8410161715610494575081810a6104b6565b61049e83836103d6565b80600019048211156104b2576104b26103c0565b0290505b92915050565b600061037d8383610419565b80820281158282048414176104b6576104b66103c0565b6000826104fc57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220103949984f9c4f17b5df1a73c01f5a014b6db6dee8d4d0409b4c5ace1db2733d64736f6c63430008190033",
  "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"
        }
      }
    },
    "title": "WBETHOracle",
    "version": 1
  },
  "userdoc": {
    "errors": {
      "InvalidTokenAddress()": [
        {
          "notice": "Thrown if the token address is invalid"
        }
      ],
      "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"
      },
      "RESILIENT_ORACLE()": {
        "notice": "Address of Resilient Oracle"
      },
      "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 wBETH asset",
    "version": 1
  },
  "storageLayout": {
    "storage": [],
    "types": null
  }
}
