creation_sourcecode: {{
    "language": "Solidity",
    "sources": {
      "contracts/release/infrastructure/price-feeds/derivatives/feeds/EtherFiEthPriceFeed.sol": {
        "content": "// SPDX-License-Identifier: GPL-3.0\n\n/*\n    This file is part of the Enzyme Protocol.\n\n    (c) Enzyme Council <council@enzyme.finance>\n\n    For the full license information, please view the LICENSE\n    file that was distributed with this source code.\n*/\n\npragma solidity 0.6.12;\n\nimport {IEtherFiWrappedEth} from \"../../../../../external-interfaces/IEtherFiWrappedEth.sol\";\nimport {IDerivativePriceFeed} from \"../IDerivativePriceFeed.sol\";\n\n/// @title EtherFiEthPriceFeed Contract\n/// @author Enzyme Council <security@enzyme.finance>\n/// @notice Price feed for ether.fi ETH (eETH)\ncontract EtherFiEthPriceFeed is IDerivativePriceFeed {\n    IEtherFiWrappedEth private immutable WEETH_CONTRACT;\n    address private immutable EETH;\n\n    constructor(address _eeth, address _weeth) public {\n        EETH = _eeth;\n        WEETH_CONTRACT = IEtherFiWrappedEth(_weeth);\n    }\n\n    /// @notice Converts a given amount of a derivative to its underlying asset values\n    /// @param _derivativeAmount The amount of the derivative to convert\n    /// @return underlyings_ The underlying assets for the derivative\n    /// @return underlyingAmounts_ The amount of each underlying asset for the equivalent derivative amount\n    function calcUnderlyingValues(address, uint256 _derivativeAmount)\n        external\n        override\n        returns (address[] memory underlyings_, uint256[] memory underlyingAmounts_)\n    {\n        underlyings_ = new address[](1);\n        underlyings_[0] = address(WEETH_CONTRACT);\n\n        underlyingAmounts_ = new uint256[](1);\n        underlyingAmounts_[0] = WEETH_CONTRACT.getEETHByWeETH({_weETHAmount: _derivativeAmount});\n\n        return (underlyings_, underlyingAmounts_);\n    }\n\n    /// @notice Checks if an asset is supported by the price feed\n    /// @param _asset The asset to check\n    /// @return isSupported_ True if the asset is supported\n    function isSupportedAsset(address _asset) public view override returns (bool isSupported_) {\n        return _asset == EETH;\n    }\n}\n"
      },
      "contracts/external-interfaces/IEtherFiWrappedEth.sol": {
        "content": "// SPDX-License-Identifier: GPL-3.0\n\n/*\n    This file is part of the Enzyme Protocol.\n\n    (c) Enzyme Council <council@enzyme.finance>\n\n    For the full license information, please view the LICENSE\n    file that was distributed with this source code.\n*/\n\npragma solidity >=0.6.0 <0.9.0;\n\n/// @title IEtherFiWrappedEth Interface\n/// @author Enzyme Council <security@enzyme.finance>\ninterface IEtherFiWrappedEth {\n    function getEETHByWeETH(uint256 _weETHAmount) external view returns (uint256 _eETHAmount_);\n}\n"
      },
      "contracts/release/infrastructure/price-feeds/derivatives/IDerivativePriceFeed.sol": {
        "content": "// SPDX-License-Identifier: GPL-3.0\n\n/*\n    This file is part of the Enzyme Protocol.\n\n    (c) Enzyme Council <council@enzyme.finance>\n\n    For the full license information, please view the LICENSE\n    file that was distributed with this source code.\n*/\n\npragma solidity >=0.6.0 <0.9.0;\n\n/// @title IDerivativePriceFeed Interface\n/// @author Enzyme Council <security@enzyme.finance>\n/// @notice Simple interface for derivative price source oracle implementations\ninterface IDerivativePriceFeed {\n    function calcUnderlyingValues(address _derivative, uint256 _derivativeAmount)\n        external\n        returns (address[] memory underlyings_, uint256[] memory underlyingAmounts_);\n\n    function isSupportedAsset(address _asset) external view returns (bool isSupported_);\n}\n"
      }
    },
    "settings": {
      "remappings": [
        "@openzeppelin/contracts/=lib/openzeppelin-solc-0.6/contracts/",
        "@uniswap/v3-core/=lib/uniswap-v3-core/",
        "ds-test/=lib/forge-std/lib/ds-test/src/",
        "forge-std/=lib/forge-std/src/",
        "openzeppelin-solc-0.6/=lib/openzeppelin-solc-0.6/contracts/",
        "openzeppelin-solc-0.7/=lib/openzeppelin-solc-0.7/contracts/",
        "openzeppelin-solc-0.8/=lib/openzeppelin-solc-0.8/contracts/",
        "uniswap-v3-core/=lib/uniswap-v3-core/",
        "uniswap-v3-core-0.8/=lib/uniswap-v3-core-0.8/",
        "uniswap-v3-periphery/=lib/uniswap-v3-periphery/contracts/",
        "uniswap-v3-periphery-0.8/=lib/uniswap-v3-periphery-0.8/contracts/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200,
        "details": {
          "yul": false
        }
      },
      "metadata": {
        "useLiteralContent": false,
        "bytecodeHash": "none"
      },
      "outputSelection": {
        "*": {
          "*": [
            "evm.bytecode",
            "evm.deployedBytecode",
            "devdoc",
            "userdoc",
            "metadata",
            "abi"
          ]
        }
      },
      "evmVersion": "istanbul",
      "libraries": {}
    }
  }}