From 2e8044ea59bdf46bb2d4855c08a1e7dc8031e86c Mon Sep 17 00:00:00 2001 From: alcueca Date: Mon, 27 Feb 2023 13:42:16 +0000 Subject: [PATCH 01/32] npm bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e86bb392..882d4e68 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@yield-protocol/vault-v2", - "version": "0.18.10", + "version": "0.18.12", "description": "Yield Collateralized Debt Engine v2", "author": "Yield Inc.", "files": [ From 8285f392031bc5b6e07ed04d482c2ac25fa01e0e Mon Sep 17 00:00:00 2001 From: alcueca Date: Fri, 24 Feb 2023 12:40:24 +0000 Subject: [PATCH 02/32] draft: ContangoWand --- src/interfaces/ILadleGov.sol | 4 + src/utils/ContangoWand.sol | 208 +++++++++++++++++++++++++++++++++++ 2 files changed, 212 insertions(+) create mode 100644 src/utils/ContangoWand.sol diff --git a/src/interfaces/ILadleGov.sol b/src/interfaces/ILadleGov.sol index 1ad3ce69..b5bbabd5 100644 --- a/src/interfaces/ILadleGov.sol +++ b/src/interfaces/ILadleGov.sol @@ -6,6 +6,10 @@ import "./IJoin.sol"; interface ILadleGov { function joins(bytes6) external view returns (IJoin); + function addToken(address, bool) external; + + function addIntegration(address, bool) external; + function addJoin(bytes6, address) external; function addPool(bytes6, address) external; diff --git a/src/utils/ContangoWand.sol b/src/utils/ContangoWand.sol new file mode 100644 index 00000000..00522ec0 --- /dev/null +++ b/src/utils/ContangoWand.sol @@ -0,0 +1,208 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.8.13; + +import "../interfaces/ICauldronGov.sol"; +import "../interfaces/ICauldron.sol"; +import "../interfaces/ILadleGov.sol"; +import "../interfaces/ILadle.sol"; +import "../interfaces/IJoin.sol"; +import "../oracles/yieldspace/YieldSpaceMultiOracle.sol"; +import "../oracles/composite/CompositeMultiOracle.sol"; +import "@yield-protocol/yieldspace-tv/src/interfaces/IPool.sol"; +import "@yield-protocol/utils-v2/src/access/AccessControl.sol"; + +/// @title A contract that allows configuring the cauldron and ladle within bounds +contract ContangoWand is AccessControl { + ICauldronGov public immutable cauldron; + ICauldron public immutable masterCauldron; + ILadleGov public immutable ladle; + ILadle public immutable masterLadle; + YieldSpaceMultiOracle public immutable yieldSpaceOracle; + CompositeMultiOracle public immutable compositeOracle; + + mapping (bytes6 => mapping(bytes6 => uint32)) public ratio; + mapping (bytes6 => mapping(bytes6 => DataTypes.Debt)) public debt; + + DataTypes.Debt public defaultDebtLimits; + uint32 public defaultRatio; + + constructor( + ICauldronGov cauldron_, + ICauldron masterCauldron_, + ILadleGov ladle_, + ILadle masterLadle_, + YieldSpaceMultiOracle yieldSpaceOracle_, + CompositeMultiOracle compositeOracle_ + ) { + cauldron = cauldron_; + masterCauldron = masterCauldron_; + ladle = ladle_; + masterLadle = masterLadle_; + yieldSpaceOracle = yieldSpaceOracle_; + compositeOracle = compositeOracle_; + } + + /// ----------------- Cauldron Governance ----------------- + + /// @notice Copy the spotOracle and ratio from the master cauldron + function copySpotOracle(bytes6 baseId, bytes6 ilkId) external auth { + DataTypes.SpotOracle memory spotOracle_ = masterCauldron.spotOracles(baseId, ilkId); + cauldron.setSpotOracle(baseId, ilkId, spotOracle_.oracle, spotOracle_.ratio); + } + + /// @notice Copy the lending oracle from the master cauldron + function copyLendingOracle(bytes6 baseId) external auth { + IOracle lendingOracle_ = masterCauldron.lendingOracles(baseId); + cauldron.setLendingOracle(baseId, lendingOracle_); + } + + /// @notice Copy the debt limits from the master cauldron + function copyDebtLimits(bytes6 baseId, bytes6 ilkId) external auth { + DataTypes.Debt memory debt_ = masterCauldron.debt(baseId, ilkId); + cauldron.setDebtLimits(baseId, ilkId, debt_.max, debt_.min, debt_.dec); + } + + /// @notice Add a new asset in the Cauldron, as long as it is an asset or fyToken known to the Yield Cauldron + function addAsset(bytes6 assetId) external auth { + address asset_ = masterCauldron.assets(assetId); + require( + asset_ != address(0) || + address(masterCauldron.series(assetId).fyToken) != address(0), + "Asset not known to the Yield Cauldron"); + cauldron.addAsset(assetId, asset_); + } + + /// @notice Add a new series, if it exists in the Yield Cauldron + function addSeries(bytes6 seriesId) external auth { + DataTypes.Series memory series_ = masterCauldron.series(seriesId); + require(address(series_.fyToken) != address(0), "Series not known to the Yield Cauldron"); + cauldron.addSeries(seriesId, series_.baseId, series_.fyToken); + } + + /// @notice Add ilks to series + function addIlks(bytes6 seriesId, bytes6[] calldata ilkIds) external auth { + cauldron.addIlks(seriesId, ilkIds); + } + + /// @notice Bound ratio for a given asset pair + function boundRatio(bytes6 baseId, bytes6 ilkId, uint32 ratio_) external auth { + ratio[baseId][ilkId] = ratio_; + } + + /// @notice Set the default ratio + function setDefaultRatio(uint32 ratio_) external auth { + defaultRatio = ratio_; + } + + /// @notice Set the ratio for a given asset pair in the Cauldron, within bounds. Set the spot oracle always to the composite oracle. + function setRatio(bytes6 baseId, bytes6 ilkId, uint32 ratio_) external auth { + // If the ilkId is a series and boundaries are not set, set ratio to the default + uint32 bound_ = ratio[baseId][ilkId]; + if (bound_ == 0 && cauldron.series(ilkId).fyToken != IFYToken(address(0))) { + ratio[baseId][ilkId] = bound_ = defaultRatio; + } + require(ratio_ >= bound_, "Ratio out of bounds"); + cauldron.setSpotOracle(baseId, ilkId, compositeOracle, ratio_); + } + + function _getDebtDecimals(bytes6 baseId, bytes6 ilkId) internal view returns (uint8 dec) { + // If the debt is already set in the cauldron, we use the decimals from there + // Otherwise, we use the decimals of the base + DataTypes.Debt memory cauldronDebt_ = ICauldron(address(cauldron)).debt(baseId, ilkId); + if (cauldronDebt_.sum != 0) { + dec = cauldronDebt_.dec; + } else { + dec = IERC20Metadata(cauldron.assets(baseId)).decimals(); + } + } + + /// @notice Bound debt limits for a given asset pair + function boundDebtLimits(bytes6 baseId, bytes6 ilkId, uint96 max, uint24 min) external auth { + debt[baseId][ilkId] = DataTypes.Debt({ + max: max, + min: min, + dec: _getDebtDecimals(baseId, ilkId), + sum: 0 + }); + } + + /// @notice Set the default debt limits + function setDefaultDebtLimits(uint96 max, uint24 min) external auth { + defaultDebtLimits = DataTypes.Debt({ + max: max, + min: min, + dec: 0, + sum: 0 + }); + } + + /// @notice Set the debt limits for a given asset pair in the Cauldron, within bounds + function setDebtLimits(bytes6 baseId, bytes6 ilkId, uint96 max, uint24 min) external auth { + // If the ilkId is a series and boundaries are not set, set them to default values + DataTypes.Debt memory bounds_ = debt[baseId][ilkId]; + + if (bounds_.max == 0 && bounds_.min == 0) { + bounds_ = defaultDebtLimits; + bounds_.dec = _getDebtDecimals(baseId, ilkId); + debt[baseId][ilkId] = bounds_; + } + require(max <= bounds_.max, "Max debt out of bounds"); + require(min >= bounds_.min, "Min debt out of bounds"); + + cauldron.setDebtLimits(baseId, ilkId, max, min, bounds_.dec); + } + + /// ----------------- Oracle Governance ----------------- + + /// @notice Set a pool as a source in the YieldSpace oracle, as long as: + /// - It is a pool known to the Yield Ladle + /// - The baseId matches the pool's baseId + /// - The quoteId matches the pool's seriesId + function setYieldSpaceOracleSource(bytes6 seriesId) external auth { + IPool pool_ = IPool(masterLadle.pools(seriesId)); + require(address(pool_) != address(0), "Pool not known to the Yield Ladle"); + DataTypes.Series memory series_ = masterCauldron.series(seriesId); + require(address(series_.fyToken) != address(0), "Series not known to the Yield Cauldron"); + require(address(series_.fyToken) == address(pool_.fyToken()), "fyToken mismatch"); // Sanity check + + yieldSpaceOracle.setSource(series_.baseId, seriesId, pool_); + } + + /// @notice Set the YieldSpace oracle as the source for a given asset pair in the Composite oracle, provided the source is set in the YieldSpace oracle + function setCompositeOracleSource(bytes6 baseId, bytes6 ilkId) external auth { + (IPool pool_, ) = yieldSpaceOracle.sources(baseId, ilkId); + require(address(pool_) != address(0), "YieldSpace oracle not set"); + compositeOracle.setSource(baseId, ilkId, yieldSpaceOracle); + } + + /// @notice Set a path in the Composite oracle, as long as the path is not overwriting anything + function setCompositeOraclePath(bytes6 baseId, bytes6 quoteId, bytes6[] calldata path) external auth { + require(compositeOracle.paths(baseId, quoteId, 0) == bytes6(0), "Path already set"); // We check that the first element in the path is empty + compositeOracle.setPath(baseId, quoteId, path); + } + + /// ----------------- Ladle Governance ----------------- + + /// @notice Propagate a pool to the Ladle from the Yield Ladle + function addPool(bytes6 seriesId) external auth { + address pool_ = masterLadle.pools(seriesId); + require(pool_ != address(0), "Pool not known to the Yield Ladle"); + ladle.addPool(seriesId, pool_); + } + + /// @notice Propagate an integration to the Ladle from the Yield Ladle + function addIntegration(address integration) external auth { + ladle.addIntegration(integration, masterLadle.integrations(integration)); + } + + /// @notice Propagate a token to the Ladle from the Yield Ladle + function addToken(address token) external auth { + ladle.addToken(token, masterLadle.tokens(token)); + } + + /// @notice Add join to the Ladle. + /// @dev These will often be used to hold fyToken, so it doesn't seem possible to put boundaries. However, it seems low risk. Famous last words. + function addJoin(bytes6 assetId, address join) external auth { + ladle.addJoin(assetId, join); + } +} From b076cc8d5a6f86a3036d12721458a195e47b3422 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 12:10:44 +0000 Subject: [PATCH 03/32] ContangoWantTest skeleton + var renaming --- cache/solidity-files-cache.json | 951 ++++++++++-------- .../contango}/ContangoWand.sol | 86 +- src/test/other/contango/ContangoWand.t.sol | 44 + 3 files changed, 637 insertions(+), 444 deletions(-) rename src/{utils => other/contango}/ContangoWand.sol (73%) create mode 100644 src/test/other/contango/ContangoWand.t.sol diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index db48976d..96a996d1 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -12,13 +12,13 @@ }, "files": { "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol": { - "lastModificationDate": 1677500577408, + "lastModificationDate": 1677505236890, "contentHash": "c78ab7ef731c2b040b3e709f5b2dc9bd", "sourceName": "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -52,13 +52,13 @@ } }, "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol": { - "lastModificationDate": 1677500577409, + "lastModificationDate": 1677505236890, "contentHash": "cbd1895591d4e92d0ed90ebb1cc14c44", "sourceName": "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -94,13 +94,13 @@ } }, "lib/dss-interfaces/src/dss/DaiAbstract.sol": { - "lastModificationDate": 1677500590110, + "lastModificationDate": 1677505236910, "contentHash": "c99dd027ff9e54c6250c18d04232b46d", "sourceName": "lib/dss-interfaces/src/dss/DaiAbstract.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -134,13 +134,13 @@ } }, "lib/forge-std/lib/ds-test/src/test.sol": { - "lastModificationDate": 1677500408722, + "lastModificationDate": 1677505238392, "contentHash": "962996f0e05d5218857a538a62d7c47e", "sourceName": "lib/forge-std/lib/ds-test/src/test.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -174,13 +174,13 @@ } }, "lib/forge-std/src/Base.sol": { - "lastModificationDate": 1677500407708, + "lastModificationDate": 1677505236928, "contentHash": "8f04bbbb2c16f79e14fdc321695a8ec2", "sourceName": "lib/forge-std/src/Base.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -223,13 +223,13 @@ } }, "lib/forge-std/src/StdAssertions.sol": { - "lastModificationDate": 1677500408724, + "lastModificationDate": 1677505236928, "contentHash": "5bc6a90903a666d831370fa46838ed73", "sourceName": "lib/forge-std/src/StdAssertions.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -266,13 +266,13 @@ } }, "lib/forge-std/src/StdChains.sol": { - "lastModificationDate": 1677500407709, + "lastModificationDate": 1677505236929, "contentHash": "f73fef006f384b898c755b0e404b84a2", "sourceName": "lib/forge-std/src/StdChains.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -308,13 +308,13 @@ } }, "lib/forge-std/src/StdCheats.sol": { - "lastModificationDate": 1677500407709, + "lastModificationDate": 1677505236929, "contentHash": "027b46591bff2397c69867fd06ddc0c1", "sourceName": "lib/forge-std/src/StdCheats.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -354,13 +354,13 @@ } }, "lib/forge-std/src/StdError.sol": { - "lastModificationDate": 1677500407709, + "lastModificationDate": 1677505236929, "contentHash": "64c896e1276a291776e5ea5aecb3870a", "sourceName": "lib/forge-std/src/StdError.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -394,13 +394,13 @@ } }, "lib/forge-std/src/StdInvariant.sol": { - "lastModificationDate": 1677500407709, + "lastModificationDate": 1677505236929, "contentHash": "12c06010ec43ce935ed209d5aca30828", "sourceName": "lib/forge-std/src/StdInvariant.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -434,13 +434,13 @@ } }, "lib/forge-std/src/StdJson.sol": { - "lastModificationDate": 1677500407709, + "lastModificationDate": 1677505236929, "contentHash": "2e1d13674e152408867795362d833c24", "sourceName": "lib/forge-std/src/StdJson.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -476,13 +476,13 @@ } }, "lib/forge-std/src/StdMath.sol": { - "lastModificationDate": 1677500407709, + "lastModificationDate": 1677505236929, "contentHash": "9da8f453eba6bb98f3d75bc6822bfb29", "sourceName": "lib/forge-std/src/StdMath.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -516,13 +516,13 @@ } }, "lib/forge-std/src/StdStorage.sol": { - "lastModificationDate": 1677500407709, + "lastModificationDate": 1677505236929, "contentHash": "3cb9868082df39a53927db09dbc21f23", "sourceName": "lib/forge-std/src/StdStorage.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -561,13 +561,13 @@ } }, "lib/forge-std/src/StdUtils.sol": { - "lastModificationDate": 1677500407709, + "lastModificationDate": 1677505236929, "contentHash": "45fc08daaa17b7908fa5de7d758d8c86", "sourceName": "lib/forge-std/src/StdUtils.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -604,13 +604,13 @@ } }, "lib/forge-std/src/Test.sol": { - "lastModificationDate": 1677500407710, + "lastModificationDate": 1677505236929, "contentHash": "095f745449cb5b6ff27a2e53892b648f", "sourceName": "lib/forge-std/src/Test.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -660,13 +660,13 @@ } }, "lib/forge-std/src/Vm.sol": { - "lastModificationDate": 1677500408725, + "lastModificationDate": 1677505236929, "contentHash": "86d01713430fa0877970a6ed8f99dc78", "sourceName": "lib/forge-std/src/Vm.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -703,13 +703,13 @@ } }, "lib/forge-std/src/console.sol": { - "lastModificationDate": 1677500407710, + "lastModificationDate": 1677505236929, "contentHash": "100b8a33b917da1147740d7ab8b0ded3", "sourceName": "lib/forge-std/src/console.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -743,13 +743,13 @@ } }, "lib/forge-std/src/console2.sol": { - "lastModificationDate": 1677500407710, + "lastModificationDate": 1677505236930, "contentHash": "2096b4e5f252c5df9909cccbe3d2da2e", "sourceName": "lib/forge-std/src/console2.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -783,13 +783,13 @@ } }, "lib/forge-std/src/interfaces/IMulticall3.sol": { - "lastModificationDate": 1677500407711, + "lastModificationDate": 1677505236930, "contentHash": "7b131ca1ca32ef6378b7b9ad5488b901", "sourceName": "lib/forge-std/src/interfaces/IMulticall3.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -823,13 +823,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol": { - "lastModificationDate": 1677500366813, + "lastModificationDate": 1677505247093, "contentHash": "8a72d8f5255345c5756cc72a8952b620", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -863,13 +863,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/access/Ownable.sol": { - "lastModificationDate": 1677500366813, + "lastModificationDate": 1677505247093, "contentHash": "df011b503197ac463a97572996667291", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/access/Ownable.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -903,13 +903,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol": { - "lastModificationDate": 1677500366814, + "lastModificationDate": 1677505247093, "contentHash": "b3c9f38a2e2d83933765e38a85f34ad0", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -945,13 +945,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol": { - "lastModificationDate": 1677500366814, + "lastModificationDate": 1677505247094, "contentHash": "717becb3eba94d8d3607a84ebd6f88c4", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -988,13 +988,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol": { - "lastModificationDate": 1677500366814, + "lastModificationDate": 1677505247094, "contentHash": "43cbacf0f9683ef274dc5b52550e5300", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1033,13 +1033,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol": { - "lastModificationDate": 1677500366814, + "lastModificationDate": 1677505247094, "contentHash": "776f140b8a9f56eddcebbf9a07982c7c", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1073,13 +1073,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol": { - "lastModificationDate": 1677500366814, + "lastModificationDate": 1677505247094, "contentHash": "16693e9c680c69c02d0979cdfa0407e4", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1115,13 +1115,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol": { - "lastModificationDate": 1677500366814, + "lastModificationDate": 1677505247094, "contentHash": "e420861b28de80b995a8247ab92ca787", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1155,13 +1155,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/token/MinimalTransferHelper.sol": { - "lastModificationDate": 1677500366814, + "lastModificationDate": 1677505247095, "contentHash": "d372000139f92d029ac128b6bfb512f8", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/MinimalTransferHelper.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1198,13 +1198,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/token/SafeERC20Namer.sol": { - "lastModificationDate": 1677500366814, + "lastModificationDate": 1677505247095, "contentHash": "c04484b4d6dbba53aa1f5cbc35166bc6", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/SafeERC20Namer.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1242,13 +1242,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol": { - "lastModificationDate": 1677500366815, + "lastModificationDate": 1677505247095, "contentHash": "69b36a0098368997dee405844187cab3", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1285,13 +1285,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/AddressStringUtil.sol": { - "lastModificationDate": 1677500366815, + "lastModificationDate": 1677505247095, "contentHash": "e955c127dcc488f43ec8b850a4c7394f", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/AddressStringUtil.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1325,13 +1325,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol": { - "lastModificationDate": 1677500366815, + "lastModificationDate": 1677505247095, "contentHash": "162ed110173f70fca1d0f63050539f0d", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1365,13 +1365,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol": { - "lastModificationDate": 1677500366815, + "lastModificationDate": 1677505247095, "contentHash": "59c2b4a265b68c1b3ba7666d47ae7fe0", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1405,13 +1405,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol": { - "lastModificationDate": 1677500366815, + "lastModificationDate": 1677505247095, "contentHash": "ea4996aefc7d57d6832af5c0bf1f98a0", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1445,13 +1445,13 @@ } }, "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol": { - "lastModificationDate": 1677500366815, + "lastModificationDate": 1677505247096, "contentHash": "e6c569515585a617a539dd64cfd49dd3", "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1485,13 +1485,13 @@ } }, "lib/yieldspace-tv/src/Exp64x64.sol": { - "lastModificationDate": 1677500361007, + "lastModificationDate": 1677505238414, "contentHash": "d99c5f2254d7957239545c6ee61b7249", "sourceName": "lib/yieldspace-tv/src/Exp64x64.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1527,13 +1527,13 @@ } }, "lib/yieldspace-tv/src/Math64x64.sol": { - "lastModificationDate": 1677500361007, + "lastModificationDate": 1677505238414, "contentHash": "7650460df63b601c0ee856ee09666842", "sourceName": "lib/yieldspace-tv/src/Math64x64.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1567,13 +1567,13 @@ } }, "lib/yieldspace-tv/src/Pool/Pool.sol": { - "lastModificationDate": 1677500361008, + "lastModificationDate": 1677505238415, "contentHash": "335ee7c30b236e4bf0519dfb67bd63a0", "sourceName": "lib/yieldspace-tv/src/Pool/Pool.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1627,13 +1627,13 @@ } }, "lib/yieldspace-tv/src/Pool/PoolErrors.sol": { - "lastModificationDate": 1677500361008, + "lastModificationDate": 1677505238415, "contentHash": "752b4056131ad302d769c9f5d09614fe", "sourceName": "lib/yieldspace-tv/src/Pool/PoolErrors.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1667,13 +1667,13 @@ } }, "lib/yieldspace-tv/src/Pool/PoolEvents.sol": { - "lastModificationDate": 1677500361008, + "lastModificationDate": 1677505238415, "contentHash": "4fcba90dbbb1f28c9e6612b4305c4013", "sourceName": "lib/yieldspace-tv/src/Pool/PoolEvents.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1707,13 +1707,13 @@ } }, "lib/yieldspace-tv/src/Pool/PoolImports.sol": { - "lastModificationDate": 1677500361008, + "lastModificationDate": 1677505238415, "contentHash": "3e51dfee0c3a433927ceeabfc6350237", "sourceName": "lib/yieldspace-tv/src/Pool/PoolImports.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1766,13 +1766,13 @@ } }, "lib/yieldspace-tv/src/YieldMath.sol": { - "lastModificationDate": 1677500361008, + "lastModificationDate": 1677505238416, "contentHash": "a99b352d8d285868cfd120ac96481d77", "sourceName": "lib/yieldspace-tv/src/YieldMath.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1810,13 +1810,13 @@ } }, "lib/yieldspace-tv/src/interfaces/IERC4626.sol": { - "lastModificationDate": 1677500361009, + "lastModificationDate": 1677505238416, "contentHash": "36141e33c078bd42271054cc2ea91935", "sourceName": "lib/yieldspace-tv/src/interfaces/IERC4626.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1853,13 +1853,13 @@ } }, "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol": { - "lastModificationDate": 1677500361009, + "lastModificationDate": 1677505238416, "contentHash": "16dbfc65c73503825be9e1d7a65cfdac", "sourceName": "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1895,13 +1895,13 @@ } }, "lib/yieldspace-tv/src/interfaces/IPool.sol": { - "lastModificationDate": 1677500361009, + "lastModificationDate": 1677505238416, "contentHash": "9b53f22a04bd5cb0183c17da0fb80cd7", "sourceName": "lib/yieldspace-tv/src/interfaces/IPool.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1941,13 +1941,13 @@ } }, "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol": { - "lastModificationDate": 1677500361009, + "lastModificationDate": 1677505238416, "contentHash": "2c361aac7074152a5d0415e2dd630908", "sourceName": "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -1988,13 +1988,13 @@ } }, "lib/yieldspace-tv/src/oracle/PoolOracle.sol": { - "lastModificationDate": 1677500361009, + "lastModificationDate": 1677505238416, "contentHash": "8adf5c8232fff5d2b0f232193e045b0d", "sourceName": "lib/yieldspace-tv/src/oracle/PoolOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2038,13 +2038,13 @@ } }, "src/Cauldron.sol": { - "lastModificationDate": 1677499641271, + "lastModificationDate": 1677585086202, "contentHash": "bfad21f10e48bfd70d0570b88c376cf1", "sourceName": "src/Cauldron.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2092,13 +2092,13 @@ } }, "src/FYToken.sol": { - "lastModificationDate": 1677499641271, + "lastModificationDate": 1677585086202, "contentHash": "56285becaf2d2a4045241173215503f4", "sourceName": "src/FYToken.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2150,13 +2150,13 @@ } }, "src/FlashJoin.sol": { - "lastModificationDate": 1677499641270, + "lastModificationDate": 1677585086202, "contentHash": "4a44e7504ba288801c4a8f2120367635", "sourceName": "src/FlashJoin.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2202,13 +2202,13 @@ } }, "src/Join.sol": { - "lastModificationDate": 1677499641270, + "lastModificationDate": 1677585086202, "contentHash": "eca9de66bf065891e2170228e705c3ca", "sourceName": "src/Join.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2253,13 +2253,13 @@ } }, "src/Ladle.sol": { - "lastModificationDate": 1677499641270, + "lastModificationDate": 1677585086203, "contentHash": "1d3d2047df11eca438fa24490fe4a66f", "sourceName": "src/Ladle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2316,13 +2316,13 @@ } }, "src/LadleStorage.sol": { - "lastModificationDate": 1677499641270, + "lastModificationDate": 1677585086203, "contentHash": "48f86639c130a500429ff93375834227", "sourceName": "src/LadleStorage.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2373,13 +2373,13 @@ } }, "src/Router.sol": { - "lastModificationDate": 1677499641270, + "lastModificationDate": 1677585086203, "contentHash": "d7391413179b1c07c3835e97a15b02ce", "sourceName": "src/Router.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2416,13 +2416,13 @@ } }, "src/Witch.sol": { - "lastModificationDate": 1677499641270, + "lastModificationDate": 1677585086203, "contentHash": "099ede16588b5481096ad4087855c851", "sourceName": "src/Witch.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2477,13 +2477,13 @@ } }, "src/constants/Constants.sol": { - "lastModificationDate": 1677499641269, + "lastModificationDate": 1677585086203, "contentHash": "c3ddd7ca09b5a70a63845d1b1e8fc739", "sourceName": "src/constants/Constants.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2517,13 +2517,13 @@ } }, "src/deprecated/FYTokenFactoryMock.sol": { - "lastModificationDate": 1677499641269, + "lastModificationDate": 1677585086203, "contentHash": "a81b26f8c12de85e68a512ed5d78d5f2", "sourceName": "src/deprecated/FYTokenFactoryMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2577,13 +2577,13 @@ } }, "src/deprecated/IPoolFactory.sol": { - "lastModificationDate": 1677499641269, + "lastModificationDate": 1677585086203, "contentHash": "800a26da67c69b31e29497f3bb9680d7", "sourceName": "src/deprecated/IPoolFactory.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2617,13 +2617,13 @@ } }, "src/deprecated/JoinFactoryMock.sol": { - "lastModificationDate": 1677499641269, + "lastModificationDate": 1677585086203, "contentHash": "dbbb3e0495e54f04ae3fcc51135a8fd1", "sourceName": "src/deprecated/JoinFactoryMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2669,13 +2669,13 @@ } }, "src/deprecated/PoolFactoryMock.sol": { - "lastModificationDate": 1677499641269, + "lastModificationDate": 1677585086203, "contentHash": "2bac320b9f64546800dd35a2ae485a0e", "sourceName": "src/deprecated/PoolFactoryMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2723,13 +2723,13 @@ } }, "src/deprecated/Wand.sol": { - "lastModificationDate": 1677499641269, + "lastModificationDate": 1677585086204, "contentHash": "5d942b39275070f71cd57912e6144274", "sourceName": "src/deprecated/Wand.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2781,13 +2781,13 @@ } }, "src/deprecated/WitchOld.sol": { - "lastModificationDate": 1677499641269, + "lastModificationDate": 1677585086204, "contentHash": "d0b3fc31f2dce786f01a7b90bde5cdcc", "sourceName": "src/deprecated/WitchOld.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2842,13 +2842,13 @@ } }, "src/interfaces/DataTypes.sol": { - "lastModificationDate": 1677499641269, + "lastModificationDate": 1677585086204, "contentHash": "e3c86fd61226fa77ac9d110acf3f0b70", "sourceName": "src/interfaces/DataTypes.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2888,13 +2888,13 @@ } }, "src/interfaces/ICauldron.sol": { - "lastModificationDate": 1677499641268, + "lastModificationDate": 1677585086204, "contentHash": "3713f28b5f2487e6cd23d9cf06fae066", "sourceName": "src/interfaces/ICauldron.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2935,13 +2935,13 @@ } }, "src/interfaces/ICauldronGov.sol": { - "lastModificationDate": 1677499641268, + "lastModificationDate": 1677585086204, "contentHash": "e09763bc5e22803dba05b2ff5a9bb695", "sourceName": "src/interfaces/ICauldronGov.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -2982,13 +2982,13 @@ } }, "src/interfaces/IERC5095.sol": { - "lastModificationDate": 1677499641268, + "lastModificationDate": 1677585086204, "contentHash": "a52f45d8389356aefa8c48af2dc903d0", "sourceName": "src/interfaces/IERC5095.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3024,13 +3024,13 @@ } }, "src/interfaces/IFYToken.sol": { - "lastModificationDate": 1677499641268, + "lastModificationDate": 1677585086204, "contentHash": "2dde05b49e84f14b757b62ef78beb517", "sourceName": "src/interfaces/IFYToken.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3069,13 +3069,13 @@ } }, "src/interfaces/IFYTokenFactory.sol": { - "lastModificationDate": 1677499641268, + "lastModificationDate": 1677585086204, "contentHash": "7d2e2f3addf1080c9e0ac318535b4a61", "sourceName": "src/interfaces/IFYTokenFactory.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3113,13 +3113,13 @@ } }, "src/interfaces/IJoin.sol": { - "lastModificationDate": 1677499641268, + "lastModificationDate": 1677585086204, "contentHash": "540020ec7d91348df94a506411040ec0", "sourceName": "src/interfaces/IJoin.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3155,13 +3155,13 @@ } }, "src/interfaces/IJoinFactory.sol": { - "lastModificationDate": 1677499641268, + "lastModificationDate": 1677585086204, "contentHash": "1426c885a7cb4c4c89931c6e958405e3", "sourceName": "src/interfaces/IJoinFactory.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3195,13 +3195,13 @@ } }, "src/interfaces/ILadle.sol": { - "lastModificationDate": 1677499641268, + "lastModificationDate": 1677585086205, "contentHash": "993fb6448ab02c216c47d7cdf496b36e", "sourceName": "src/interfaces/ILadle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3252,13 +3252,13 @@ } }, "src/interfaces/ILadleGov.sol": { - "lastModificationDate": 1677499641268, - "contentHash": "4a3e1dde77c4c8a5fc0733c6687c8139", + "lastModificationDate": 1677585086223, + "contentHash": "02488b6ad21a07aa8d889a60faed4166", "sourceName": "src/interfaces/ILadleGov.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3295,13 +3295,13 @@ } }, "src/interfaces/IMultiOracleGov.sol": { - "lastModificationDate": 1677499641267, + "lastModificationDate": 1677585086205, "contentHash": "e0cad6c6985bbddc1c519c53da67ad95", "sourceName": "src/interfaces/IMultiOracleGov.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3335,13 +3335,13 @@ } }, "src/interfaces/IOracle.sol": { - "lastModificationDate": 1677499641267, + "lastModificationDate": 1677585086205, "contentHash": "fbec703dd8228a0636d95f02596cca53", "sourceName": "src/interfaces/IOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3375,13 +3375,13 @@ } }, "src/interfaces/IStrategy.sol": { - "lastModificationDate": 1677499641267, + "lastModificationDate": 1677585086205, "contentHash": "77e33c88764c278be63e4d57e74f331c", "sourceName": "src/interfaces/IStrategy.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3415,13 +3415,13 @@ } }, "src/interfaces/IWitch.sol": { - "lastModificationDate": 1677499641267, + "lastModificationDate": 1677585086205, "contentHash": "9c7cbc5e6e506d664972afc0301d09c2", "sourceName": "src/interfaces/IWitch.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3473,13 +3473,13 @@ } }, "src/mocks/ConvexPoolMock.sol": { - "lastModificationDate": 1677499641267, + "lastModificationDate": 1677585086205, "contentHash": "59f06a4b00a23526b690a778b0ec1061", "sourceName": "src/mocks/ConvexPoolMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3524,13 +3524,13 @@ } }, "src/mocks/ConvexYieldWrapperMock.sol": { - "lastModificationDate": 1677499641267, + "lastModificationDate": 1677585086205, "contentHash": "860bdcf3611cc6f4cc67720162ea7dbc", "sourceName": "src/mocks/ConvexYieldWrapperMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3582,13 +3582,13 @@ } }, "src/mocks/DAIMock.sol": { - "lastModificationDate": 1677499641267, + "lastModificationDate": 1677585086205, "contentHash": "4cfc400e3026ecaadd1b778b977d578b", "sourceName": "src/mocks/DAIMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3626,13 +3626,13 @@ } }, "src/mocks/ERC20Mock.sol": { - "lastModificationDate": 1677499641267, + "lastModificationDate": 1677585086205, "contentHash": "d10127a12042b0848a077a1b1806bc0c", "sourceName": "src/mocks/ERC20Mock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3672,13 +3672,13 @@ } }, "src/mocks/FlashBorrower.sol": { - "lastModificationDate": 1677499641266, + "lastModificationDate": 1677585086205, "contentHash": "b8671650af40061e7fbe3850b4c26cb5", "sourceName": "src/mocks/FlashBorrower.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3716,13 +3716,13 @@ } }, "src/mocks/PoolMock.sol": { - "lastModificationDate": 1677499641266, + "lastModificationDate": 1677585086205, "contentHash": "c15b280ee6d6ba9e896c3cb3830bee38", "sourceName": "src/mocks/PoolMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3772,13 +3772,13 @@ } }, "src/mocks/RestrictedERC20Mock.sol": { - "lastModificationDate": 1677499641266, + "lastModificationDate": 1677585086205, "contentHash": "ed278818d4467a9965222a2f575dcab0", "sourceName": "src/mocks/RestrictedERC20Mock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3819,13 +3819,13 @@ } }, "src/mocks/TLMMock.sol": { - "lastModificationDate": 1677499641266, + "lastModificationDate": 1677585086206, "contentHash": "e5e6f32ff7f3e5d28a2159e00d2abc6b", "sourceName": "src/mocks/TLMMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3869,13 +3869,13 @@ } }, "src/mocks/TokenProxy.sol": { - "lastModificationDate": 1677499641266, + "lastModificationDate": 1677585086206, "contentHash": "c1bc4f95082996118aa3856405815e2c", "sourceName": "src/mocks/TokenProxy.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3913,13 +3913,13 @@ } }, "src/mocks/USDCMock.sol": { - "lastModificationDate": 1677499641266, + "lastModificationDate": 1677585086206, "contentHash": "36e91fc2f2a61b18464cea61abc40e40", "sourceName": "src/mocks/USDCMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -3959,13 +3959,13 @@ } }, "src/mocks/WETH9Mock.sol": { - "lastModificationDate": 1677499641266, + "lastModificationDate": 1677585086206, "contentHash": "0968bbd7ca8cb68e648aa5ca6a2fe16f", "sourceName": "src/mocks/WETH9Mock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4003,13 +4003,13 @@ } }, "src/mocks/WstETHMock.sol": { - "lastModificationDate": 1677499641266, + "lastModificationDate": 1677585086206, "contentHash": "b2df47e4b404a6e194e94a11edffa4d8", "sourceName": "src/mocks/WstETHMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4049,13 +4049,13 @@ } }, "src/mocks/YvTokenMock.sol": { - "lastModificationDate": 1677499641265, + "lastModificationDate": 1677585086206, "contentHash": "ff1de7e2fe5066589a44ee1a84125593", "sourceName": "src/mocks/YvTokenMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4094,13 +4094,13 @@ } }, "src/mocks/oracles/ISourceMock.sol": { - "lastModificationDate": 1677499641265, + "lastModificationDate": 1677585086206, "contentHash": "44e9d8e43fb84387fac4ce7fe69353f0", "sourceName": "src/mocks/oracles/ISourceMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4134,13 +4134,13 @@ } }, "src/mocks/oracles/OracleMock.sol": { - "lastModificationDate": 1677499641265, + "lastModificationDate": 1677585086206, "contentHash": "ab94ce6bee1e837994859e6e1886d028", "sourceName": "src/mocks/oracles/OracleMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4176,13 +4176,13 @@ } }, "src/mocks/oracles/chainlink/ChainlinkAggregatorV3Mock.sol": { - "lastModificationDate": 1677499641265, + "lastModificationDate": 1677585086206, "contentHash": "4bea9abf9ef7926e11c65e0b73e40871", "sourceName": "src/mocks/oracles/chainlink/ChainlinkAggregatorV3Mock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4218,13 +4218,13 @@ } }, "src/mocks/oracles/chainlink/ChainlinkAggregatorV3MockEx.sol": { - "lastModificationDate": 1677499641265, + "lastModificationDate": 1677585086206, "contentHash": "3ec23d2f742d6cf3208a113d26d68e85", "sourceName": "src/mocks/oracles/chainlink/ChainlinkAggregatorV3MockEx.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4261,13 +4261,13 @@ } }, "src/mocks/oracles/chainlink/FlagsInterfaceMock.sol": { - "lastModificationDate": 1677499641265, + "lastModificationDate": 1677585086206, "contentHash": "ce3c5add5ac42ab0b279fd5b1a28624d", "sourceName": "src/mocks/oracles/chainlink/FlagsInterfaceMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4303,13 +4303,13 @@ } }, "src/mocks/oracles/compound/CTokenChiMock.sol": { - "lastModificationDate": 1677499641265, + "lastModificationDate": 1677585086206, "contentHash": "fbaf55af65ede5b41e5a13e715f87499", "sourceName": "src/mocks/oracles/compound/CTokenChiMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4345,13 +4345,13 @@ } }, "src/mocks/oracles/compound/CTokenMock.sol": { - "lastModificationDate": 1677499641265, + "lastModificationDate": 1677585086207, "contentHash": "6af91788f1ce96cc22001438fa940424", "sourceName": "src/mocks/oracles/compound/CTokenMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4387,13 +4387,13 @@ } }, "src/mocks/oracles/compound/CTokenRateMock.sol": { - "lastModificationDate": 1677499641265, + "lastModificationDate": 1677585086207, "contentHash": "b3592dc089d7c5fe16551877c823f6cd", "sourceName": "src/mocks/oracles/compound/CTokenRateMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4429,13 +4429,13 @@ } }, "src/mocks/oracles/convex/CurvePoolMock.sol": { - "lastModificationDate": 1677499641264, + "lastModificationDate": 1677585086207, "contentHash": "a821051acdb945b4af901fa5fbcd2aa4", "sourceName": "src/mocks/oracles/convex/CurvePoolMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4472,13 +4472,13 @@ } }, "src/mocks/oracles/lido/WstETHMock.sol": { - "lastModificationDate": 1677499641264, + "lastModificationDate": 1677585086207, "contentHash": "97b6c02ceaf8d34118040c12fba59cd8", "sourceName": "src/mocks/oracles/lido/WstETHMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4520,13 +4520,13 @@ } }, "src/mocks/oracles/uniswap/UniswapV2PairMock.sol": { - "lastModificationDate": 1677499641264, + "lastModificationDate": 1677585086207, "contentHash": "7524c32b3e7e74e0dfe07c89b45f6161", "sourceName": "src/mocks/oracles/uniswap/UniswapV2PairMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4560,13 +4560,13 @@ } }, "src/mocks/oracles/uniswap/UniswapV3FactoryMock.sol": { - "lastModificationDate": 1677499641264, + "lastModificationDate": 1677585086207, "contentHash": "86f6dc18a002434300868f7557661467", "sourceName": "src/mocks/oracles/uniswap/UniswapV3FactoryMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4604,13 +4604,13 @@ } }, "src/mocks/oracles/uniswap/UniswapV3OracleLibraryMock.sol": { - "lastModificationDate": 1677499641264, + "lastModificationDate": 1677585086207, "contentHash": "94086dd7e88f41b6774b4c02fc649f4a", "sourceName": "src/mocks/oracles/uniswap/UniswapV3OracleLibraryMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4650,13 +4650,13 @@ } }, "src/mocks/oracles/uniswap/UniswapV3PoolMock.sol": { - "lastModificationDate": 1677499641264, + "lastModificationDate": 1677585086207, "contentHash": "af699a9b2dab7167484fbd10d5f2b2ad", "sourceName": "src/mocks/oracles/uniswap/UniswapV3PoolMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4693,13 +4693,13 @@ } }, "src/modules/HealerModule.sol": { - "lastModificationDate": 1677499641264, + "lastModificationDate": 1677585086207, "contentHash": "143b9671a2c51d508f819687fce4c16b", "sourceName": "src/modules/HealerModule.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4754,13 +4754,13 @@ } }, "src/modules/RepayFromLadleModule.sol": { - "lastModificationDate": 1677499641264, + "lastModificationDate": 1677585086207, "contentHash": "856d5fe0d07b5ba0e1d4d809df445b8b", "sourceName": "src/modules/RepayFromLadleModule.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4814,13 +4814,13 @@ } }, "src/modules/TLMModule.sol": { - "lastModificationDate": 1677499641263, + "lastModificationDate": 1677585086207, "contentHash": "369d818283378a7340be67f748d56b33", "sourceName": "src/modules/TLMModule.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4881,13 +4881,13 @@ } }, "src/modules/WrapEtherModule.sol": { - "lastModificationDate": 1677499641263, + "lastModificationDate": 1677585086207, "contentHash": "4b4b24b86d0c31e2159fce649008f256", "sourceName": "src/modules/WrapEtherModule.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4940,13 +4940,13 @@ } }, "src/oracles/accumulator/AccumulatorMultiOracle.sol": { - "lastModificationDate": 1677499641263, + "lastModificationDate": 1677585086208, "contentHash": "f77f8696a88dbe9674f1fdd8fc88db25", "sourceName": "src/oracles/accumulator/AccumulatorMultiOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -4986,13 +4986,13 @@ } }, "src/oracles/chainlink/AggregatorV3Interface.sol": { - "lastModificationDate": 1677499641263, + "lastModificationDate": 1677585086208, "contentHash": "b213894d1186ed5f03cceedb9a7811a2", "sourceName": "src/oracles/chainlink/AggregatorV3Interface.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5026,13 +5026,13 @@ } }, "src/oracles/chainlink/ChainlinkL2USDMultiOracle.sol": { - "lastModificationDate": 1677499641263, + "lastModificationDate": 1677585086208, "contentHash": "54600a72189318340a2e35068ce967ff", "sourceName": "src/oracles/chainlink/ChainlinkL2USDMultiOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5076,13 +5076,13 @@ } }, "src/oracles/chainlink/ChainlinkMultiOracle.sol": { - "lastModificationDate": 1677499641263, + "lastModificationDate": 1677585086208, "contentHash": "a22b18e9ca40e7135457b337d8c3fd38", "sourceName": "src/oracles/chainlink/ChainlinkMultiOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5124,13 +5124,13 @@ } }, "src/oracles/chainlink/ChainlinkUSDMultiOracle.sol": { - "lastModificationDate": 1677499641263, + "lastModificationDate": 1677585086208, "contentHash": "e3eafb32950259d322666e47d29ffebd", "sourceName": "src/oracles/chainlink/ChainlinkUSDMultiOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5173,13 +5173,13 @@ } }, "src/oracles/chainlink/FlagsInterface.sol": { - "lastModificationDate": 1677499641263, + "lastModificationDate": 1677585086208, "contentHash": "d37f32515fb3edcdcc0728ca80cfe987", "sourceName": "src/oracles/chainlink/FlagsInterface.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5213,13 +5213,13 @@ } }, "src/oracles/composite/CompositeMultiOracle.sol": { - "lastModificationDate": 1677499641262, + "lastModificationDate": 1677585086208, "contentHash": "aaf5d39dd4a9b1274f02bf4099bc32ac", "sourceName": "src/oracles/composite/CompositeMultiOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5257,13 +5257,13 @@ } }, "src/oracles/compound/CTokenInterface.sol": { - "lastModificationDate": 1677499641262, + "lastModificationDate": 1677585086208, "contentHash": "c2c3908e2ef28463858f56d16113b926", "sourceName": "src/oracles/compound/CTokenInterface.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5299,13 +5299,13 @@ } }, "src/oracles/compound/CTokenMultiOracle.sol": { - "lastModificationDate": 1677499641262, + "lastModificationDate": 1677585086208, "contentHash": "37cce1c8be448a4b289477b00f189811", "sourceName": "src/oracles/compound/CTokenMultiOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5347,13 +5347,13 @@ } }, "src/oracles/compound/CompoundMultiOracle.sol": { - "lastModificationDate": 1677499641262, + "lastModificationDate": 1677585086208, "contentHash": "a38b16ba44ac30c2261de503e0d7b1ea", "sourceName": "src/oracles/compound/CompoundMultiOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5394,13 +5394,13 @@ } }, "src/oracles/convex/Cvx3CrvOracle.sol": { - "lastModificationDate": 1677499641262, + "lastModificationDate": 1677585086209, "contentHash": "c57bb600d05628698d51d7d1614de190", "sourceName": "src/oracles/convex/Cvx3CrvOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5440,13 +5440,13 @@ } }, "src/oracles/convex/ICurvePool.sol": { - "lastModificationDate": 1677499641262, + "lastModificationDate": 1677585086209, "contentHash": "e89afd47a330d791e058f8215c6aaf1a", "sourceName": "src/oracles/convex/ICurvePool.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5480,13 +5480,13 @@ } }, "src/oracles/crab/CrabOracle.sol": { - "lastModificationDate": 1677499641262, + "lastModificationDate": 1677585086209, "contentHash": "b85271615dd82b3ffa9c49da0c4afcf2", "sourceName": "src/oracles/crab/CrabOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5528,13 +5528,13 @@ } }, "src/oracles/euler/ETokenMultiOracle.sol": { - "lastModificationDate": 1677499641261, + "lastModificationDate": 1677585086209, "contentHash": "1bf8321912a233ffc4091c5342c848ff", "sourceName": "src/oracles/euler/ETokenMultiOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5573,13 +5573,13 @@ } }, "src/oracles/euler/IEToken.sol": { - "lastModificationDate": 1677499641261, + "lastModificationDate": 1677585086209, "contentHash": "cfd4d6aae3f8d8abf6272154423f73f8", "sourceName": "src/oracles/euler/IEToken.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5613,13 +5613,13 @@ } }, "src/oracles/lido/IWstETH.sol": { - "lastModificationDate": 1677499641261, + "lastModificationDate": 1677585086209, "contentHash": "a460d641bb88bcea2f5a410b964f3296", "sourceName": "src/oracles/lido/IWstETH.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5655,13 +5655,13 @@ } }, "src/oracles/lido/LidoOracle.sol": { - "lastModificationDate": 1677499641261, + "lastModificationDate": 1677585086209, "contentHash": "9392d449de9d6d72bd8a9feb30bc62c2", "sourceName": "src/oracles/lido/LidoOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5702,13 +5702,13 @@ } }, "src/oracles/rocket/RETHOracle.sol": { - "lastModificationDate": 1677499641261, + "lastModificationDate": 1677585086209, "contentHash": "baaee57d6e94e29d174a3711738869b7", "sourceName": "src/oracles/rocket/RETHOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5750,13 +5750,13 @@ } }, "src/oracles/strategy/StrategyOracle.sol": { - "lastModificationDate": 1677499641260, + "lastModificationDate": 1677585086209, "contentHash": "95db87bd5d85fb1638640bc20e7053b4", "sourceName": "src/oracles/strategy/StrategyOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5795,13 +5795,13 @@ } }, "src/oracles/uniswap/IUniswapV3PoolImmutables.sol": { - "lastModificationDate": 1677499641260, + "lastModificationDate": 1677585086210, "contentHash": "e236e09a9d654fb2f20a6da5dba2bd2f", "sourceName": "src/oracles/uniswap/IUniswapV3PoolImmutables.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5835,13 +5835,13 @@ } }, "src/oracles/uniswap/UniswapV3Oracle.sol": { - "lastModificationDate": 1677499641260, + "lastModificationDate": 1677585086210, "contentHash": "26e047d35409662423f0818194fa883f", "sourceName": "src/oracles/uniswap/UniswapV3Oracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5891,13 +5891,13 @@ } }, "src/oracles/uniswap/uniswapv0.8/FullMath.sol": { - "lastModificationDate": 1677499641260, + "lastModificationDate": 1677585086210, "contentHash": "604af1431f8a64e05968a314822fa488", "sourceName": "src/oracles/uniswap/uniswapv0.8/FullMath.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5931,13 +5931,13 @@ } }, "src/oracles/uniswap/uniswapv0.8/IUniswapV3Pool.sol": { - "lastModificationDate": 1677499641260, + "lastModificationDate": 1677585086210, "contentHash": "e6badd8268772b99e7ca397aff11a965", "sourceName": "src/oracles/uniswap/uniswapv0.8/IUniswapV3Pool.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -5978,13 +5978,13 @@ } }, "src/oracles/uniswap/uniswapv0.8/LowGasSafeMath.sol": { - "lastModificationDate": 1677499641260, + "lastModificationDate": 1677585086210, "contentHash": "ff4d506a22d90b314ab325b437ff7729", "sourceName": "src/oracles/uniswap/uniswapv0.8/LowGasSafeMath.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6018,13 +6018,13 @@ } }, "src/oracles/uniswap/uniswapv0.8/OracleLibrary.sol": { - "lastModificationDate": 1677499641260, + "lastModificationDate": 1677585086210, "contentHash": "db5b1e96b6fa2ce26bf049ab8c516366", "sourceName": "src/oracles/uniswap/uniswapv0.8/OracleLibrary.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6070,13 +6070,13 @@ } }, "src/oracles/uniswap/uniswapv0.8/PoolAddress.sol": { - "lastModificationDate": 1677499641260, + "lastModificationDate": 1677585086210, "contentHash": "0ede1d2569429314158fd791823e9148", "sourceName": "src/oracles/uniswap/uniswapv0.8/PoolAddress.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6110,13 +6110,13 @@ } }, "src/oracles/uniswap/uniswapv0.8/TickMath.sol": { - "lastModificationDate": 1677499641259, + "lastModificationDate": 1677585086210, "contentHash": "51f56be5c19bedfa154a201466e87be6", "sourceName": "src/oracles/uniswap/uniswapv0.8/TickMath.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6150,13 +6150,13 @@ } }, "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolActions.sol": { - "lastModificationDate": 1677499641259, + "lastModificationDate": 1677585086210, "contentHash": "83d338eb1394008c808a20ac7c5bab0c", "sourceName": "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolActions.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6190,13 +6190,13 @@ } }, "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolDerivedState.sol": { - "lastModificationDate": 1677499641259, + "lastModificationDate": 1677585086210, "contentHash": "25b71180ec9f5132a158334971ee2ace", "sourceName": "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolDerivedState.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6230,13 +6230,13 @@ } }, "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolEvents.sol": { - "lastModificationDate": 1677499641259, + "lastModificationDate": 1677585086210, "contentHash": "05abb59ec113db1046f7dadc78bb297b", "sourceName": "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolEvents.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6270,13 +6270,13 @@ } }, "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolImmutables.sol": { - "lastModificationDate": 1677499641259, + "lastModificationDate": 1677585086210, "contentHash": "e236e09a9d654fb2f20a6da5dba2bd2f", "sourceName": "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolImmutables.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6310,13 +6310,13 @@ } }, "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolOwnerActions.sol": { - "lastModificationDate": 1677499641259, + "lastModificationDate": 1677585086210, "contentHash": "1b06ecc79e75f836c446ccf286e671e4", "sourceName": "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolOwnerActions.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6350,13 +6350,13 @@ } }, "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolState.sol": { - "lastModificationDate": 1677499641259, + "lastModificationDate": 1677585086211, "contentHash": "0488495ef9087b4513d3b43634035ef9", "sourceName": "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolState.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6390,13 +6390,13 @@ } }, "src/oracles/yearn/IYvToken.sol": { - "lastModificationDate": 1677499641258, + "lastModificationDate": 1677585086211, "contentHash": "9dc68080d5785ae36d098a8ede1d7daf", "sourceName": "src/oracles/yearn/IYvToken.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6433,13 +6433,13 @@ } }, "src/oracles/yearn/YearnVaultMultiOracle.sol": { - "lastModificationDate": 1677499641258, + "lastModificationDate": 1677585086211, "contentHash": "4ae06b6b44beb7693d8072bc33e01169", "sourceName": "src/oracles/yearn/YearnVaultMultiOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6480,13 +6480,13 @@ } }, "src/oracles/yieldspace/YieldSpaceMultiOracle.sol": { - "lastModificationDate": 1677499641258, + "lastModificationDate": 1677585086211, "contentHash": "96ed0890aa962024b18f4a784003bd41", "sourceName": "src/oracles/yieldspace/YieldSpaceMultiOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6531,13 +6531,13 @@ } }, "src/other/contango/ContangoLadle.sol": { - "lastModificationDate": 1677499641258, + "lastModificationDate": 1677585086211, "contentHash": "80ac1df950baf0e14779de3ffbdc89bb", "sourceName": "src/other/contango/ContangoLadle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6594,14 +6594,79 @@ } } }, + "src/other/contango/ContangoWand.sol": { + "lastModificationDate": 1677585773608, + "contentHash": "f493f4d3e775b451b69cbe7b9c5eb5e5", + "sourceName": "src/other/contango/ContangoWand.sol", + "solcConfig": { + "settings": { + "optimizer": { + "enabled": false, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "ipfs", + "appendCBOR": true + }, + "outputSelection": { + "*": { + "": [ + "ast" + ], + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ] + } + }, + "evmVersion": "london", + "libraries": {} + } + }, + "imports": [ + "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", + "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", + "lib/yieldspace-tv/src/interfaces/IPool.sol", + "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", + "src/Router.sol", + "src/interfaces/DataTypes.sol", + "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", + "src/interfaces/IERC5095.sol", + "src/interfaces/IFYToken.sol", + "src/interfaces/IJoin.sol", + "src/interfaces/ILadle.sol", + "src/interfaces/ILadleGov.sol", + "src/interfaces/IOracle.sol", + "src/oracles/composite/CompositeMultiOracle.sol", + "src/oracles/yieldspace/YieldSpaceMultiOracle.sol" + ], + "versionRequirement": ">=0.8.13", + "artifacts": { + "ContangoWand": { + "0.8.15+commit.e14f2714.Darwin.appleclang": "ContangoWand.sol/ContangoWand.json" + } + } + }, "src/other/contango/ContangoWitch.sol": { - "lastModificationDate": 1677499641258, + "lastModificationDate": 1677585086211, "contentHash": "d7951e3fd7f0ef6bd40a555ab634126c", "sourceName": "src/other/contango/ContangoWitch.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6658,13 +6723,13 @@ } }, "src/other/contango/interfaces/IContangoLadle.sol": { - "lastModificationDate": 1677499641258, + "lastModificationDate": 1677585086211, "contentHash": "b52ec7e556d20d66531bf885a4e9466b", "sourceName": "src/other/contango/interfaces/IContangoLadle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6716,13 +6781,13 @@ } }, "src/other/contango/interfaces/IContangoWitchListener.sol": { - "lastModificationDate": 1677499641257, + "lastModificationDate": 1677585086211, "contentHash": "4dcb34ccccdcff6e59ed64d65302390e", "sourceName": "src/other/contango/interfaces/IContangoWitchListener.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6756,13 +6821,13 @@ } }, "src/other/convex/ConvexJoin.sol": { - "lastModificationDate": 1677499641257, + "lastModificationDate": 1677585086211, "contentHash": "588ae49fcafb47ea0d29f5982657d5e0", "sourceName": "src/other/convex/ConvexJoin.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6816,13 +6881,13 @@ } }, "src/other/convex/ConvexModule.sol": { - "lastModificationDate": 1677499641257, + "lastModificationDate": 1677585086211, "contentHash": "1d03761a915274ba81e37cbe5b3c578a", "sourceName": "src/other/convex/ConvexModule.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6875,13 +6940,13 @@ } }, "src/other/convex/CvxMining.sol": { - "lastModificationDate": 1677499641257, + "lastModificationDate": 1677585086212, "contentHash": "b4bbfab3943d36b8ca8f4ccdfc370258", "sourceName": "src/other/convex/CvxMining.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6917,13 +6982,13 @@ } }, "src/other/convex/interfaces/IConvexDeposits.sol": { - "lastModificationDate": 1677499641257, + "lastModificationDate": 1677585086212, "contentHash": "3027b43c9e67f94fa3c9850b41357114", "sourceName": "src/other/convex/interfaces/IConvexDeposits.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6957,13 +7022,13 @@ } }, "src/other/convex/interfaces/IConvexJoin.sol": { - "lastModificationDate": 1677499641257, + "lastModificationDate": 1677585086212, "contentHash": "70485476a0dca0bff99588df9754c261", "sourceName": "src/other/convex/interfaces/IConvexJoin.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -6997,13 +7062,13 @@ } }, "src/other/convex/interfaces/ICvx.sol": { - "lastModificationDate": 1677499641257, + "lastModificationDate": 1677585086212, "contentHash": "1cbd674278dc1ad5aff0241240720723", "sourceName": "src/other/convex/interfaces/ICvx.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7037,13 +7102,13 @@ } }, "src/other/convex/interfaces/IRewardStaking.sol": { - "lastModificationDate": 1677499641256, + "lastModificationDate": 1677585086212, "contentHash": "e723f65694b3775bc182d938bcf19598", "sourceName": "src/other/convex/interfaces/IRewardStaking.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7077,13 +7142,13 @@ } }, "src/other/lido/StEthConverter.sol": { - "lastModificationDate": 1677499641256, + "lastModificationDate": 1677585086212, "contentHash": "2186b39d065ead42197108d38843b964", "sourceName": "src/other/lido/StEthConverter.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7122,13 +7187,13 @@ } }, "src/other/notional/ERC1155.sol": { - "lastModificationDate": 1677499641256, + "lastModificationDate": 1677585086212, "contentHash": "47c2fbebd45a0f3c61ba2751d867fbfd", "sourceName": "src/other/notional/ERC1155.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7165,13 +7230,13 @@ } }, "src/other/notional/ERC1155Mock.sol": { - "lastModificationDate": 1677499641256, + "lastModificationDate": 1677585086212, "contentHash": "8bfe53e4dbd2b7b9194a923104465a0c", "sourceName": "src/other/notional/ERC1155Mock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7207,13 +7272,13 @@ } }, "src/other/notional/FCashMock.sol": { - "lastModificationDate": 1677499641256, + "lastModificationDate": 1677585086212, "contentHash": "54192903a7f90f8fda596f7d330707c5", "sourceName": "src/other/notional/FCashMock.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7257,13 +7322,13 @@ } }, "src/other/notional/NotionalJoin.sol": { - "lastModificationDate": 1677499641256, + "lastModificationDate": 1677585086212, "contentHash": "cf5b9df6c1245ea872416c12493525ed", "sourceName": "src/other/notional/NotionalJoin.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7308,13 +7373,13 @@ } }, "src/other/notional/NotionalMultiOracle.sol": { - "lastModificationDate": 1677499641256, + "lastModificationDate": 1677585086213, "contentHash": "a41c58912e815e862563da016e9a629b", "sourceName": "src/other/notional/NotionalMultiOracle.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7354,13 +7419,13 @@ } }, "src/other/notional/Transfer1155Module.sol": { - "lastModificationDate": 1677499641255, + "lastModificationDate": 1677585086213, "contentHash": "84c6baf88798989885df4b13ccc1d1a2", "sourceName": "src/other/notional/Transfer1155Module.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7413,13 +7478,13 @@ } }, "src/other/notional/interfaces/IBatchAction.sol": { - "lastModificationDate": 1677499641255, + "lastModificationDate": 1677585086213, "contentHash": "927fc9f85037f762f69573227d76b2e9", "sourceName": "src/other/notional/interfaces/IBatchAction.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7453,13 +7518,13 @@ } }, "src/other/notional/interfaces/INotionalJoin.sol": { - "lastModificationDate": 1677499641255, + "lastModificationDate": 1677585086213, "contentHash": "c9d88f7310d32a1d920ad02bd7f482d4", "sourceName": "src/other/notional/interfaces/INotionalJoin.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7496,13 +7561,13 @@ } }, "src/other/tether/IUSDT.sol": { - "lastModificationDate": 1677499641255, + "lastModificationDate": 1677585086213, "contentHash": "5c4a8103d08bde65e8c291109bd6688f", "sourceName": "src/other/tether/IUSDT.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7536,13 +7601,13 @@ } }, "src/other/tether/TetherJoin.sol": { - "lastModificationDate": 1677499641255, + "lastModificationDate": 1677585086213, "contentHash": "3087600c8a27b7dbca389506df0d5349", "sourceName": "src/other/tether/TetherJoin.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7590,13 +7655,13 @@ } }, "src/test/Witch.t.sol": { - "lastModificationDate": 1677499641255, + "lastModificationDate": 1677585086213, "contentHash": "c0b8779fc6b702cf9066fb226d04f889", "sourceName": "src/test/Witch.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7684,13 +7749,13 @@ } }, "src/test/fyToken/FYToken.t.sol": { - "lastModificationDate": 1677499641254, + "lastModificationDate": 1677585086213, "contentHash": "15841854951d4b33ed24331502ce9abe", "sourceName": "src/test/fyToken/FYToken.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7792,13 +7857,13 @@ } }, "src/test/fyToken/FYTokenFlash.t.sol": { - "lastModificationDate": 1677499641254, + "lastModificationDate": 1677585086214, "contentHash": "a95e82148d824ae9a71c490bbb187323", "sourceName": "src/test/fyToken/FYTokenFlash.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7907,13 +7972,13 @@ } }, "src/test/join/FlashJoin.t.sol": { - "lastModificationDate": 1677499641254, + "lastModificationDate": 1677585086214, "contentHash": "52728dcb19e2d1946adacaeb7b292ace", "sourceName": "src/test/join/FlashJoin.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -7993,13 +8058,13 @@ } }, "src/test/join/Join.t.sol": { - "lastModificationDate": 1677499641254, + "lastModificationDate": 1677585086214, "contentHash": "99f930b94db5104be3d747110d30b6d7", "sourceName": "src/test/join/Join.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -8083,13 +8148,13 @@ } }, "src/test/modules/HealerModule.t.sol": { - "lastModificationDate": 1677499641253, + "lastModificationDate": 1677585086214, "contentHash": "c548642a373402a87398131d3c291d9b", "sourceName": "src/test/modules/HealerModule.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -8164,13 +8229,13 @@ } }, "src/test/modules/RepayFromLadleModule.t.sol": { - "lastModificationDate": 1677499641253, + "lastModificationDate": 1677585086214, "contentHash": "0b799e38332723fc51a32ba4c70978b1", "sourceName": "src/test/modules/RepayFromLadleModule.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -8251,13 +8316,13 @@ } }, "src/test/oracles/AccumulatorOracle.t.sol": { - "lastModificationDate": 1677499641253, + "lastModificationDate": 1677585086214, "contentHash": "3ff730eaf458a6485d1745397760679d", "sourceName": "src/test/oracles/AccumulatorOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -8326,13 +8391,13 @@ } }, "src/test/oracles/CTokenMultiOracle.t.sol": { - "lastModificationDate": 1677499641253, + "lastModificationDate": 1677585086215, "contentHash": "ed46da9a58dc5f4d2a6c305383f0b027", "sourceName": "src/test/oracles/CTokenMultiOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -8399,13 +8464,13 @@ } }, "src/test/oracles/ChainlinkMultiOracle.t.sol": { - "lastModificationDate": 1677499641253, + "lastModificationDate": 1677585086215, "contentHash": "55fbea7071b38f2f3fa3ef4575a80a0c", "sourceName": "src/test/oracles/ChainlinkMultiOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -8475,13 +8540,13 @@ } }, "src/test/oracles/ChainlinkUSDMultiOracle.t.sol": { - "lastModificationDate": 1677499641252, + "lastModificationDate": 1677585086215, "contentHash": "58c8dbe1e62ebf85c8abe4cb4f4ce2d1", "sourceName": "src/test/oracles/ChainlinkUSDMultiOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -8552,13 +8617,13 @@ } }, "src/test/oracles/CompositeMultiOracle.t.sol": { - "lastModificationDate": 1677499641252, + "lastModificationDate": 1677585086215, "contentHash": "18568dad409a49eb28f92db83eb4d627", "sourceName": "src/test/oracles/CompositeMultiOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -8629,13 +8694,13 @@ } }, "src/test/oracles/CompoundMultiOracle.t.sol": { - "lastModificationDate": 1677499641252, + "lastModificationDate": 1677585086215, "contentHash": "a6674ff35055da68d04f0218bef97b19", "sourceName": "src/test/oracles/CompoundMultiOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -8702,13 +8767,13 @@ } }, "src/test/oracles/ConvexOracle.t.sol": { - "lastModificationDate": 1677499641252, + "lastModificationDate": 1677585086215, "contentHash": "c513d51dd4cb2b35182e954712254e66", "sourceName": "src/test/oracles/ConvexOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -8776,13 +8841,13 @@ } }, "src/test/oracles/CrabOracle.t.sol": { - "lastModificationDate": 1677499641251, + "lastModificationDate": 1677585086215, "contentHash": "1b281dfae123db44bd39f177ccab84f7", "sourceName": "src/test/oracles/CrabOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -8857,13 +8922,13 @@ } }, "src/test/oracles/ETokenMultiOracle.t.sol": { - "lastModificationDate": 1677499641251, + "lastModificationDate": 1677585086216, "contentHash": "c7b143488069190e39d78217e90c397f", "sourceName": "src/test/oracles/ETokenMultiOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -8934,13 +8999,13 @@ } }, "src/test/oracles/LidoOracle.t.sol": { - "lastModificationDate": 1677499641251, + "lastModificationDate": 1677585086216, "contentHash": "c7d1f36325a705467a6f7e1db92e5881", "sourceName": "src/test/oracles/LidoOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -9013,13 +9078,13 @@ } }, "src/test/oracles/NotionalMultiOracle.t.sol": { - "lastModificationDate": 1677499641251, + "lastModificationDate": 1677585086216, "contentHash": "ede5bda6ac3c4be170cb31151e847d4e", "sourceName": "src/test/oracles/NotionalMultiOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -9083,13 +9148,13 @@ } }, "src/test/oracles/RETHOracle.t.sol": { - "lastModificationDate": 1677499641250, + "lastModificationDate": 1677585086216, "contentHash": "8993552921d5bd0cec1b0e9505442b2f", "sourceName": "src/test/oracles/RETHOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -9147,13 +9212,13 @@ } }, "src/test/oracles/StrategyOracle.t.sol": { - "lastModificationDate": 1677499641250, + "lastModificationDate": 1677585086216, "contentHash": "73a690f07f5a49b3486d6d904a17165f", "sourceName": "src/test/oracles/StrategyOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -9217,13 +9282,13 @@ } }, "src/test/oracles/UniswapOracle.t.sol": { - "lastModificationDate": 1677499641250, + "lastModificationDate": 1677585086216, "contentHash": "915c31d152bd2e0214ff3e98212823d5", "sourceName": "src/test/oracles/UniswapOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -9298,13 +9363,13 @@ } }, "src/test/oracles/YearnVaultMultiOracle.t.sol": { - "lastModificationDate": 1677499641250, + "lastModificationDate": 1677585086216, "contentHash": "66231107e451be12e074a2b39632fc65", "sourceName": "src/test/oracles/YearnVaultMultiOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -9371,13 +9436,13 @@ } }, "src/test/oracles/YieldSpaceMultiOracle.dai.it.t.sol": { - "lastModificationDate": 1677499641250, + "lastModificationDate": 1677585086216, "contentHash": "9d4cbb1f3b3ef1a4a8796127b5698ade", "sourceName": "src/test/oracles/YieldSpaceMultiOracle.dai.it.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -9463,13 +9528,13 @@ } }, "src/test/oracles/YieldSpaceMultiOracle.t.sol": { - "lastModificationDate": 1677499641249, + "lastModificationDate": 1677585086216, "contentHash": "e2f0382f5e6cadfaf854b3b21ae56b1c", "sourceName": "src/test/oracles/YieldSpaceMultiOracle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -9539,13 +9604,13 @@ } }, "src/test/oracles/YieldSpaceMultiOracle.usdc.it.t.sol": { - "lastModificationDate": 1677499641249, + "lastModificationDate": 1677585086217, "contentHash": "c88e6a415bfa04702cde8722c5cd772b", "sourceName": "src/test/oracles/YieldSpaceMultiOracle.usdc.it.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -9622,13 +9687,13 @@ } }, "src/test/other/contango/ContangoLadle.t.sol": { - "lastModificationDate": 1677499641249, + "lastModificationDate": 1677585086217, "contentHash": "2a42cdbb44d8bc74b34e402808e65cce", "sourceName": "src/test/other/contango/ContangoLadle.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -9705,14 +9770,98 @@ } } }, + "src/test/other/contango/ContangoWand.t.sol": { + "lastModificationDate": 1677586207396, + "contentHash": "e040cfc10754b4681d5a0133ed4f5b9b", + "sourceName": "src/test/other/contango/ContangoWand.t.sol", + "solcConfig": { + "settings": { + "optimizer": { + "enabled": false, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "ipfs", + "appendCBOR": true + }, + "outputSelection": { + "*": { + "": [ + "ast" + ], + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ] + } + }, + "evmVersion": "london", + "libraries": {} + } + }, + "imports": [ + "lib/forge-std/lib/ds-test/src/test.sol", + "lib/forge-std/src/Base.sol", + "lib/forge-std/src/StdAssertions.sol", + "lib/forge-std/src/StdChains.sol", + "lib/forge-std/src/StdCheats.sol", + "lib/forge-std/src/StdError.sol", + "lib/forge-std/src/StdInvariant.sol", + "lib/forge-std/src/StdJson.sol", + "lib/forge-std/src/StdMath.sol", + "lib/forge-std/src/StdStorage.sol", + "lib/forge-std/src/StdUtils.sol", + "lib/forge-std/src/Test.sol", + "lib/forge-std/src/Vm.sol", + "lib/forge-std/src/console.sol", + "lib/forge-std/src/console2.sol", + "lib/forge-std/src/interfaces/IMulticall3.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", + "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", + "lib/yieldspace-tv/src/interfaces/IPool.sol", + "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", + "src/Router.sol", + "src/interfaces/DataTypes.sol", + "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", + "src/interfaces/IERC5095.sol", + "src/interfaces/IFYToken.sol", + "src/interfaces/IJoin.sol", + "src/interfaces/ILadle.sol", + "src/interfaces/ILadleGov.sol", + "src/interfaces/IOracle.sol", + "src/oracles/composite/CompositeMultiOracle.sol", + "src/oracles/yieldspace/YieldSpaceMultiOracle.sol", + "src/other/contango/ContangoWand.sol", + "src/test/utils/Mocks.sol", + "src/test/utils/TestConstants.sol" + ], + "versionRequirement": ">=0.8.13", + "artifacts": { + "ContangoWandTest": { + "0.8.15+commit.e14f2714.Darwin.appleclang": "ContangoWand.t.sol/ContangoWandTest.json" + } + } + }, "src/test/other/notional/NotionalJoin.t.sol": { - "lastModificationDate": 1677499641249, + "lastModificationDate": 1677585086217, "contentHash": "eb5c75a0e633784db02a9ffd2cca5f9a", "sourceName": "src/test/other/notional/NotionalJoin.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -9826,13 +9975,13 @@ } }, "src/test/other/notional/NotionalJoinHarness.t.sol": { - "lastModificationDate": 1677499641249, + "lastModificationDate": 1677585086217, "contentHash": "34f15d0086d0c54ba5f7f334e2f3d3f0", "sourceName": "src/test/other/notional/NotionalJoinHarness.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -9919,13 +10068,13 @@ } }, "src/test/other/notional/NotionalTypes.sol": { - "lastModificationDate": 1677499641249, + "lastModificationDate": 1677585086217, "contentHash": "4afe5c0b1d7be060d1a98b52905f9db4", "sourceName": "src/test/other/notional/NotionalTypes.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -9959,13 +10108,13 @@ } }, "src/test/other/tether/TetherJoin.t.sol": { - "lastModificationDate": 1677499641248, + "lastModificationDate": 1677585086217, "contentHash": "dd73fdb47106b8b3dbdf59fc7f04fd33", "sourceName": "src/test/other/tether/TetherJoin.t.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -10058,13 +10207,13 @@ } }, "src/test/utils/Mocks.sol": { - "lastModificationDate": 1677499641248, + "lastModificationDate": 1677585086218, "contentHash": "74470ac67085ce047e81bcf096f28861", "sourceName": "src/test/utils/Mocks.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -10133,13 +10282,13 @@ } }, "src/test/utils/TestConstants.sol": { - "lastModificationDate": 1677499641248, + "lastModificationDate": 1677585086218, "contentHash": "c632ca2b52fdaee35c12cdf4a23f7121", "sourceName": "src/test/utils/TestConstants.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -10173,13 +10322,13 @@ } }, "src/test/utils/TestExtensions.sol": { - "lastModificationDate": 1677499641248, + "lastModificationDate": 1677585086218, "contentHash": "4abae3e71828d835276c94c24a413f2d", "sourceName": "src/test/utils/TestExtensions.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -10231,13 +10380,13 @@ } }, "src/test/utils/Utilities.sol": { - "lastModificationDate": 1677499641248, + "lastModificationDate": 1677585086218, "contentHash": "faf18186f6616798ae602ec4eea3132f", "sourceName": "src/test/utils/Utilities.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { @@ -10288,13 +10437,13 @@ } }, "src/utils/Giver.sol": { - "lastModificationDate": 1677499641247, + "lastModificationDate": 1677585086218, "contentHash": "d607aedbc9180c81a6a42f37e9884eca", "sourceName": "src/utils/Giver.sol", "solcConfig": { "settings": { "optimizer": { - "enabled": true, + "enabled": false, "runs": 200 }, "metadata": { diff --git a/src/utils/ContangoWand.sol b/src/other/contango/ContangoWand.sol similarity index 73% rename from src/utils/ContangoWand.sol rename to src/other/contango/ContangoWand.sol index 00522ec0..c9355e2b 100644 --- a/src/utils/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -1,22 +1,22 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.8.13; -import "../interfaces/ICauldronGov.sol"; -import "../interfaces/ICauldron.sol"; -import "../interfaces/ILadleGov.sol"; -import "../interfaces/ILadle.sol"; -import "../interfaces/IJoin.sol"; -import "../oracles/yieldspace/YieldSpaceMultiOracle.sol"; -import "../oracles/composite/CompositeMultiOracle.sol"; +import "../../interfaces/ICauldronGov.sol"; +import "../../interfaces/ICauldron.sol"; +import "../../interfaces/ILadleGov.sol"; +import "../../interfaces/ILadle.sol"; +import "../../interfaces/IJoin.sol"; +import "../../oracles/yieldspace/YieldSpaceMultiOracle.sol"; +import "../../oracles/composite/CompositeMultiOracle.sol"; import "@yield-protocol/yieldspace-tv/src/interfaces/IPool.sol"; import "@yield-protocol/utils-v2/src/access/AccessControl.sol"; /// @title A contract that allows configuring the cauldron and ladle within bounds contract ContangoWand is AccessControl { - ICauldronGov public immutable cauldron; - ICauldron public immutable masterCauldron; - ILadleGov public immutable ladle; - ILadle public immutable masterLadle; + ICauldronGov public immutable contangoCauldron; + ICauldron public immutable yieldCauldron; + ILadleGov public immutable contangoLadle; + ILadle public immutable yieldLadle; YieldSpaceMultiOracle public immutable yieldSpaceOracle; CompositeMultiOracle public immutable compositeOracle; @@ -27,17 +27,17 @@ contract ContangoWand is AccessControl { uint32 public defaultRatio; constructor( - ICauldronGov cauldron_, - ICauldron masterCauldron_, - ILadleGov ladle_, - ILadle masterLadle_, + ICauldronGov contangoCauldron_, + ICauldron yieldCauldron_, + ILadleGov contangoLadle_, + ILadle yieldLadle_, YieldSpaceMultiOracle yieldSpaceOracle_, CompositeMultiOracle compositeOracle_ ) { - cauldron = cauldron_; - masterCauldron = masterCauldron_; - ladle = ladle_; - masterLadle = masterLadle_; + contangoCauldron = contangoCauldron_; + yieldCauldron = yieldCauldron_; + contangoLadle = contangoLadle_; + yieldLadle = yieldLadle_; yieldSpaceOracle = yieldSpaceOracle_; compositeOracle = compositeOracle_; } @@ -46,42 +46,42 @@ contract ContangoWand is AccessControl { /// @notice Copy the spotOracle and ratio from the master cauldron function copySpotOracle(bytes6 baseId, bytes6 ilkId) external auth { - DataTypes.SpotOracle memory spotOracle_ = masterCauldron.spotOracles(baseId, ilkId); - cauldron.setSpotOracle(baseId, ilkId, spotOracle_.oracle, spotOracle_.ratio); + DataTypes.SpotOracle memory spotOracle_ = yieldCauldron.spotOracles(baseId, ilkId); + contangoCauldron.setSpotOracle(baseId, ilkId, spotOracle_.oracle, spotOracle_.ratio); } /// @notice Copy the lending oracle from the master cauldron function copyLendingOracle(bytes6 baseId) external auth { - IOracle lendingOracle_ = masterCauldron.lendingOracles(baseId); - cauldron.setLendingOracle(baseId, lendingOracle_); + IOracle lendingOracle_ = yieldCauldron.lendingOracles(baseId); + contangoCauldron.setLendingOracle(baseId, lendingOracle_); } /// @notice Copy the debt limits from the master cauldron function copyDebtLimits(bytes6 baseId, bytes6 ilkId) external auth { - DataTypes.Debt memory debt_ = masterCauldron.debt(baseId, ilkId); - cauldron.setDebtLimits(baseId, ilkId, debt_.max, debt_.min, debt_.dec); + DataTypes.Debt memory debt_ = yieldCauldron.debt(baseId, ilkId); + contangoCauldron.setDebtLimits(baseId, ilkId, debt_.max, debt_.min, debt_.dec); } /// @notice Add a new asset in the Cauldron, as long as it is an asset or fyToken known to the Yield Cauldron function addAsset(bytes6 assetId) external auth { - address asset_ = masterCauldron.assets(assetId); + address asset_ = yieldCauldron.assets(assetId); require( asset_ != address(0) || - address(masterCauldron.series(assetId).fyToken) != address(0), + address(yieldCauldron.series(assetId).fyToken) != address(0), "Asset not known to the Yield Cauldron"); - cauldron.addAsset(assetId, asset_); + contangoCauldron.addAsset(assetId, asset_); } /// @notice Add a new series, if it exists in the Yield Cauldron function addSeries(bytes6 seriesId) external auth { - DataTypes.Series memory series_ = masterCauldron.series(seriesId); + DataTypes.Series memory series_ = yieldCauldron.series(seriesId); require(address(series_.fyToken) != address(0), "Series not known to the Yield Cauldron"); - cauldron.addSeries(seriesId, series_.baseId, series_.fyToken); + contangoCauldron.addSeries(seriesId, series_.baseId, series_.fyToken); } /// @notice Add ilks to series function addIlks(bytes6 seriesId, bytes6[] calldata ilkIds) external auth { - cauldron.addIlks(seriesId, ilkIds); + contangoCauldron.addIlks(seriesId, ilkIds); } /// @notice Bound ratio for a given asset pair @@ -98,21 +98,21 @@ contract ContangoWand is AccessControl { function setRatio(bytes6 baseId, bytes6 ilkId, uint32 ratio_) external auth { // If the ilkId is a series and boundaries are not set, set ratio to the default uint32 bound_ = ratio[baseId][ilkId]; - if (bound_ == 0 && cauldron.series(ilkId).fyToken != IFYToken(address(0))) { + if (bound_ == 0 && contangoCauldron.series(ilkId).fyToken != IFYToken(address(0))) { ratio[baseId][ilkId] = bound_ = defaultRatio; } require(ratio_ >= bound_, "Ratio out of bounds"); - cauldron.setSpotOracle(baseId, ilkId, compositeOracle, ratio_); + contangoCauldron.setSpotOracle(baseId, ilkId, compositeOracle, ratio_); } function _getDebtDecimals(bytes6 baseId, bytes6 ilkId) internal view returns (uint8 dec) { // If the debt is already set in the cauldron, we use the decimals from there // Otherwise, we use the decimals of the base - DataTypes.Debt memory cauldronDebt_ = ICauldron(address(cauldron)).debt(baseId, ilkId); + DataTypes.Debt memory cauldronDebt_ = ICauldron(address(contangoCauldron)).debt(baseId, ilkId); if (cauldronDebt_.sum != 0) { dec = cauldronDebt_.dec; } else { - dec = IERC20Metadata(cauldron.assets(baseId)).decimals(); + dec = IERC20Metadata(contangoCauldron.assets(baseId)).decimals(); } } @@ -149,7 +149,7 @@ contract ContangoWand is AccessControl { require(max <= bounds_.max, "Max debt out of bounds"); require(min >= bounds_.min, "Min debt out of bounds"); - cauldron.setDebtLimits(baseId, ilkId, max, min, bounds_.dec); + contangoCauldron.setDebtLimits(baseId, ilkId, max, min, bounds_.dec); } /// ----------------- Oracle Governance ----------------- @@ -159,9 +159,9 @@ contract ContangoWand is AccessControl { /// - The baseId matches the pool's baseId /// - The quoteId matches the pool's seriesId function setYieldSpaceOracleSource(bytes6 seriesId) external auth { - IPool pool_ = IPool(masterLadle.pools(seriesId)); + IPool pool_ = IPool(yieldLadle.pools(seriesId)); require(address(pool_) != address(0), "Pool not known to the Yield Ladle"); - DataTypes.Series memory series_ = masterCauldron.series(seriesId); + DataTypes.Series memory series_ = yieldCauldron.series(seriesId); require(address(series_.fyToken) != address(0), "Series not known to the Yield Cauldron"); require(address(series_.fyToken) == address(pool_.fyToken()), "fyToken mismatch"); // Sanity check @@ -185,24 +185,24 @@ contract ContangoWand is AccessControl { /// @notice Propagate a pool to the Ladle from the Yield Ladle function addPool(bytes6 seriesId) external auth { - address pool_ = masterLadle.pools(seriesId); + address pool_ = yieldLadle.pools(seriesId); require(pool_ != address(0), "Pool not known to the Yield Ladle"); - ladle.addPool(seriesId, pool_); + contangoLadle.addPool(seriesId, pool_); } /// @notice Propagate an integration to the Ladle from the Yield Ladle function addIntegration(address integration) external auth { - ladle.addIntegration(integration, masterLadle.integrations(integration)); + contangoLadle.addIntegration(integration, yieldLadle.integrations(integration)); } /// @notice Propagate a token to the Ladle from the Yield Ladle function addToken(address token) external auth { - ladle.addToken(token, masterLadle.tokens(token)); + contangoLadle.addToken(token, yieldLadle.tokens(token)); } /// @notice Add join to the Ladle. /// @dev These will often be used to hold fyToken, so it doesn't seem possible to put boundaries. However, it seems low risk. Famous last words. function addJoin(bytes6 assetId, address join) external auth { - ladle.addJoin(assetId, join); + contangoLadle.addJoin(assetId, join); } } diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol new file mode 100644 index 00000000..ca73f096 --- /dev/null +++ b/src/test/other/contango/ContangoWand.t.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.8.13; + +import "forge-std/src/Test.sol"; +import "../../utils/TestConstants.sol"; +import "../../utils/Mocks.sol"; + +import "../../../other/contango/ContangoWand.sol"; + +contract ContangoWandTest is Test, TestConstants { + ICauldronGov internal contangoCauldron = + ICauldronGov(0x44386ddB4C44E7CB8981f97AF89E928Ddd4258DD); + ICauldron internal yieldCauldron = + ICauldron(0x23cc87FBEBDD67ccE167Fa9Ec6Ad3b7fE3892E30); + + ILadleGov public immutable contangoLadle = + ILadleGov(0x93343C08e2055b7793a3336d659Be348FC1B08f9); + ILadle public immutable yieldLadle = + ILadle(0x16E25cf364CeCC305590128335B8f327975d0560); + + YieldSpaceMultiOracle public immutable yieldSpaceOracle = + YieldSpaceMultiOracle(0xb958bA862D70C0a4bD0ea976f9a1907686dd41e2); + CompositeMultiOracle public immutable compositeOracle = + CompositeMultiOracle(0x750B3a18115fe090Bc621F9E4B90bd442bcd02F2); + + ContangoWand internal wand; + + function setUp() public virtual { + vm.createSelectFork("ARBITRUM", 65404751); + + wand = new ContangoWand( + contangoCauldron, + yieldCauldron, + contangoLadle, + yieldLadle, + yieldSpaceOracle, + compositeOracle + ); + } + + function testFoo() public { + + } +} From 10ed29e85c772166b20a080f3e5c663fe52b10c0 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 12:29:54 +0000 Subject: [PATCH 04/32] testCopySpotOracle --- cache/solidity-files-cache.json | 49 ++++++++++++++++++---- src/interfaces/ICauldron.sol | 4 +- src/test/other/contango/ContangoWand.t.sol | 45 +++++++++++++++++--- src/test/utils/TestConstants.sol | 2 + 4 files changed, 87 insertions(+), 13 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 96a996d1..8e3d849c 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -2303,6 +2303,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -2360,6 +2361,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -2463,6 +2465,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -2828,6 +2831,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -2888,8 +2892,8 @@ } }, "src/interfaces/ICauldron.sol": { - "lastModificationDate": 1677585086204, - "contentHash": "3713f28b5f2487e6cd23d9cf06fae066", + "lastModificationDate": 1677587273355, + "contentHash": "93a3eb95ac5e34d735afc2ae5a034444", "sourceName": "src/interfaces/ICauldron.sol", "solcConfig": { "settings": { @@ -2922,6 +2926,7 @@ "imports": [ "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", "src/interfaces/DataTypes.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -3239,6 +3244,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -3459,6 +3465,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -4740,6 +4747,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -4801,6 +4809,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -4859,6 +4868,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -4927,6 +4937,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -6582,6 +6593,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -6708,6 +6720,7 @@ "src/Witch.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -6767,6 +6780,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -6864,6 +6878,7 @@ "src/Join.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -6926,6 +6941,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -7464,6 +7480,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -7655,7 +7672,7 @@ } }, "src/test/Witch.t.sol": { - "lastModificationDate": 1677585086213, + "lastModificationDate": 1677586067089, "contentHash": "c0b8779fc6b702cf9066fb226d04f889", "sourceName": "src/test/Witch.t.sol", "solcConfig": { @@ -7720,6 +7737,7 @@ "src/Witch.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -7822,6 +7840,7 @@ "src/constants/Constants.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -7930,6 +7949,7 @@ "src/constants/Constants.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -8211,6 +8231,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -8292,6 +8313,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -9511,6 +9533,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -9670,6 +9693,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -9755,6 +9779,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -9771,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677586207396, - "contentHash": "e040cfc10754b4681d5a0133ed4f5b9b", + "lastModificationDate": 1677587370092, + "contentHash": "239733f06859ada12d322cf39b6be91d", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { @@ -9803,6 +9828,7 @@ } }, "imports": [ + "lib/dss-interfaces/src/dss/DaiAbstract.sol", "lib/forge-std/lib/ds-test/src/test.sol", "lib/forge-std/src/Base.sol", "lib/forge-std/src/StdAssertions.sol", @@ -9825,13 +9851,19 @@ "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", "lib/yieldspace-tv/src/interfaces/IPool.sol", "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", + "src/Cauldron.sol", + "src/Ladle.sol", + "src/LadleStorage.sol", "src/Router.sol", + "src/constants/Constants.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", "src/interfaces/ICauldronGov.sol", @@ -9843,6 +9875,7 @@ "src/interfaces/IOracle.sol", "src/oracles/composite/CompositeMultiOracle.sol", "src/oracles/yieldspace/YieldSpaceMultiOracle.sol", + "src/other/contango/ContangoLadle.sol", "src/other/contango/ContangoWand.sol", "src/test/utils/Mocks.sol", "src/test/utils/TestConstants.sol" @@ -9925,6 +9958,7 @@ "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", @@ -10282,8 +10316,8 @@ } }, "src/test/utils/TestConstants.sol": { - "lastModificationDate": 1677585086218, - "contentHash": "c632ca2b52fdaee35c12cdf4a23f7121", + "lastModificationDate": 1677586745821, + "contentHash": "5bbedc91f75711f34894f9e75bf0f410", "sourceName": "src/test/utils/TestConstants.sol", "solcConfig": { "settings": { @@ -10473,6 +10507,7 @@ "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", diff --git a/src/interfaces/ICauldron.sol b/src/interfaces/ICauldron.sol index ea62f222..27d9981d 100644 --- a/src/interfaces/ICauldron.sol +++ b/src/interfaces/ICauldron.sol @@ -1,10 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; + import "./IFYToken.sol"; import "./IOracle.sol"; import "./DataTypes.sol"; +import "./ICauldronGov.sol"; -interface ICauldron { +interface ICauldron is ICauldronGov { /// @dev Variable rate lending oracle for an underlying function lendingOracles(bytes6 baseId) external view returns (IOracle); diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index ca73f096..918da3e4 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -5,11 +5,13 @@ import "forge-std/src/Test.sol"; import "../../utils/TestConstants.sol"; import "../../utils/Mocks.sol"; +import "../../../Cauldron.sol"; +import "../../../other/contango/ContangoLadle.sol"; import "../../../other/contango/ContangoWand.sol"; contract ContangoWandTest is Test, TestConstants { - ICauldronGov internal contangoCauldron = - ICauldronGov(0x44386ddB4C44E7CB8981f97AF89E928Ddd4258DD); + ICauldron internal contangoCauldron = + ICauldron(0x44386ddB4C44E7CB8981f97AF89E928Ddd4258DD); ICauldron internal yieldCauldron = ICauldron(0x23cc87FBEBDD67ccE167Fa9Ec6Ad3b7fE3892E30); @@ -25,20 +27,53 @@ contract ContangoWandTest is Test, TestConstants { ContangoWand internal wand; + bytes6 internal immutable baseId = USDC; + bytes6 internal immutable seriesId = FYUSDC2206; + bytes6 internal immutable ilkId = FYETH2206; + function setUp() public virtual { vm.createSelectFork("ARBITRUM", 65404751); wand = new ContangoWand( - contangoCauldron, + ICauldronGov(address(contangoCauldron)), yieldCauldron, - contangoLadle, + ILadleGov(address(contangoLadle)), yieldLadle, yieldSpaceOracle, compositeOracle ); + + vm.startPrank(addresses[ARBITRUM][TIMELOCK]); + AccessControl(address(contangoCauldron)).grantRole( + Cauldron.setSpotOracle.selector, + address(wand) + ); + vm.stopPrank(); + } + + function testCopySpotOracle_Auth() public { + vm.expectRevert("Access denied"); + wand.copySpotOracle(baseId, ilkId); } - function testFoo() public { + function testCopySpotOracle() public { + wand.grantRole(wand.copySpotOracle.selector, address(this)); + wand.copySpotOracle(baseId, ETH); + DataTypes.SpotOracle memory yieldOracle = yieldCauldron.spotOracles( + baseId, + ETH + ); + DataTypes.SpotOracle memory contangoOracle = contangoCauldron + .spotOracles(baseId, ETH); + + assertEq( + address(yieldOracle.oracle), + address(contangoOracle.oracle), + "oracle" + ); + assertEq(yieldOracle.ratio, contangoOracle.ratio, "ratio"); } + + } diff --git a/src/test/utils/TestConstants.sol b/src/test/utils/TestConstants.sol index 82c957c9..4b914f1f 100644 --- a/src/test/utils/TestConstants.sol +++ b/src/test/utils/TestConstants.sol @@ -46,6 +46,7 @@ contract TestConstants { string public constant TIMELOCK = "TIMELOCK"; string public constant CAULDRON = "CAULDRON"; string public constant LADLE = "LADLE"; + string public constant WETH = "WETH"; mapping (string => mapping (string => address)) public addresses; @@ -56,5 +57,6 @@ contract TestConstants { addresses[ARBITRUM][TIMELOCK] = 0xd0a22827Aed2eF5198EbEc0093EA33A4CD641b6c; addresses[ARBITRUM][CAULDRON] = 0x23cc87FBEBDD67ccE167Fa9Ec6Ad3b7fE3892E30; addresses[ARBITRUM][LADLE] = 0x16E25cf364CeCC305590128335B8f327975d0560; + addresses[ARBITRUM][WETH] = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1; } } From 255de9f045709cb73ca54120856d137b334a4665 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 12:32:27 +0000 Subject: [PATCH 05/32] testCopyLendingOracle --- cache/solidity-files-cache.json | 4 ++-- src/test/other/contango/ContangoWand.t.sol | 22 ++++++++++++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 8e3d849c..568219fa 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677587370092, - "contentHash": "239733f06859ada12d322cf39b6be91d", + "lastModificationDate": 1677587528841, + "contentHash": "29bfab734f1dce0143f9416359072ca4", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 918da3e4..b65ea812 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -42,12 +42,17 @@ contract ContangoWandTest is Test, TestConstants { yieldSpaceOracle, compositeOracle ); - + vm.startPrank(addresses[ARBITRUM][TIMELOCK]); AccessControl(address(contangoCauldron)).grantRole( Cauldron.setSpotOracle.selector, address(wand) ); + + AccessControl(address(contangoCauldron)).grantRole( + Cauldron.setLendingOracle.selector, + address(wand) + ); vm.stopPrank(); } @@ -75,5 +80,18 @@ contract ContangoWandTest is Test, TestConstants { assertEq(yieldOracle.ratio, contangoOracle.ratio, "ratio"); } - + function testCopyLendingOracle_Auth() public { + vm.expectRevert("Access denied"); + wand.copyLendingOracle(baseId); + } + + function testCopyLendingOracle() public { + wand.grantRole(wand.copyLendingOracle.selector, address(this)); + wand.copyLendingOracle(baseId); + + IOracle yieldOracle = yieldCauldron.lendingOracles(baseId); + IOracle contangoOracle = contangoCauldron.lendingOracles(baseId); + + assertEq(address(yieldOracle), address(contangoOracle), "oracle"); + } } From ef44d424776b8804c524e582ff3341f437832ad5 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 12:47:04 +0000 Subject: [PATCH 06/32] copyDebtLimits --- cache/solidity-files-cache.json | 12 +++---- src/other/contango/ContangoWand.sol | 3 ++ src/test/other/contango/ContangoWand.t.sol | 41 ++++++++++++++++++++-- src/test/utils/TestConstants.sol | 2 ++ 4 files changed, 49 insertions(+), 9 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 568219fa..6430b539 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -6607,8 +6607,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677585773608, - "contentHash": "f493f4d3e775b451b69cbe7b9c5eb5e5", + "lastModificationDate": 1677588156319, + "contentHash": "987d9d7ce3452441295de5aa0eaf0dd8", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677587528841, - "contentHash": "29bfab734f1dce0143f9416359072ca4", + "lastModificationDate": 1677588372157, + "contentHash": "faccd264615e4bf7cfea109893d85656", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { @@ -10316,8 +10316,8 @@ } }, "src/test/utils/TestConstants.sol": { - "lastModificationDate": 1677586745821, - "contentHash": "5bbedc91f75711f34894f9e75bf0f410", + "lastModificationDate": 1677588263355, + "contentHash": "be930a8ae3e29ffab60405b06e87daed", "sourceName": "src/test/utils/TestConstants.sol", "solcConfig": { "settings": { diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index c9355e2b..f1f6f497 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -59,6 +59,9 @@ contract ContangoWand is AccessControl { /// @notice Copy the debt limits from the master cauldron function copyDebtLimits(bytes6 baseId, bytes6 ilkId) external auth { DataTypes.Debt memory debt_ = yieldCauldron.debt(baseId, ilkId); + if(debt_.max == 0) { + debt_ = yieldCauldron.debt(baseId, yieldCauldron.series(ilkId).baseId); + } contangoCauldron.setDebtLimits(baseId, ilkId, debt_.max, debt_.min, debt_.dec); } diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index b65ea812..81877408 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -28,8 +28,8 @@ contract ContangoWandTest is Test, TestConstants { ContangoWand internal wand; bytes6 internal immutable baseId = USDC; - bytes6 internal immutable seriesId = FYUSDC2206; - bytes6 internal immutable ilkId = FYETH2206; + bytes6 internal immutable seriesId = FYUSDC2306; + bytes6 internal immutable ilkId = FYETH2306; function setUp() public virtual { vm.createSelectFork("ARBITRUM", 65404751); @@ -48,11 +48,14 @@ contract ContangoWandTest is Test, TestConstants { Cauldron.setSpotOracle.selector, address(wand) ); - AccessControl(address(contangoCauldron)).grantRole( Cauldron.setLendingOracle.selector, address(wand) ); + AccessControl(address(contangoCauldron)).grantRole( + Cauldron.setDebtLimits.selector, + address(wand) + ); vm.stopPrank(); } @@ -94,4 +97,36 @@ contract ContangoWandTest is Test, TestConstants { assertEq(address(yieldOracle), address(contangoOracle), "oracle"); } + + function testCopyDebtLimits_Auth() public { + vm.expectRevert("Access denied"); + wand.copyDebtLimits(baseId, ilkId); + } + + function testCopyDebtLimits() public { + wand.grantRole(wand.copyDebtLimits.selector, address(this)); + wand.copyDebtLimits(baseId, ETH); + + DataTypes.Debt memory yieldDebt = yieldCauldron.debt(baseId, ETH); + DataTypes.Debt memory contangoDebt = contangoCauldron.debt(baseId, ETH); + + assertEq(yieldDebt.max, contangoDebt.max, "max"); + assertEq(yieldDebt.min, contangoDebt.min, "min"); + assertEq(yieldDebt.dec, contangoDebt.dec, "dec"); + } + + function testCopyDebtLimits_FromSeries() public { + wand.grantRole(wand.copyDebtLimits.selector, address(this)); + wand.copyDebtLimits(baseId, ilkId); + + DataTypes.Debt memory yieldDebt = yieldCauldron.debt(baseId, ETH); + DataTypes.Debt memory contangoDebt = contangoCauldron.debt( + baseId, + ilkId + ); + + assertEq(yieldDebt.max, contangoDebt.max, "max"); + assertEq(yieldDebt.min, contangoDebt.min, "min"); + assertEq(yieldDebt.dec, contangoDebt.dec, "dec"); + } } diff --git a/src/test/utils/TestConstants.sol b/src/test/utils/TestConstants.sol index 4b914f1f..d0a1f94b 100644 --- a/src/test/utils/TestConstants.sol +++ b/src/test/utils/TestConstants.sol @@ -30,6 +30,8 @@ contract TestConstants { bytes6 public constant FYUSDC2209 = bytes6("0207"); bytes6 public constant FYUSDC2212 = bytes6("0208"); bytes6 public constant FYDAI2212 = bytes6("0108"); + bytes6 public constant FYETH2306 = 0x0_030_FF_000_28B; + bytes6 public constant FYUSDC2306 = 0x0_032_FF_000_28B; uint32 public constant EOJUN22 = 1656039600; From df71da564282912c8ee2cc91a03314108a1eca8a Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 12:56:38 +0000 Subject: [PATCH 07/32] addAsset --- cache/solidity-files-cache.json | 12 ++-- src/other/contango/ContangoWand.sol | 46 ++++++--------- src/test/other/contango/ContangoWand.t.sol | 65 +++++++++++++++------- src/test/utils/TestConstants.sol | 2 + 4 files changed, 71 insertions(+), 54 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 6430b539..594d4567 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -6607,8 +6607,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677588156319, - "contentHash": "987d9d7ce3452441295de5aa0eaf0dd8", + "lastModificationDate": 1677588915978, + "contentHash": "f391e04d0d3707d421efaec1db7ba0a2", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677588372157, - "contentHash": "faccd264615e4bf7cfea109893d85656", + "lastModificationDate": 1677588847294, + "contentHash": "d41bdfee29de768b903dcdeda36d06a9", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { @@ -10316,8 +10316,8 @@ } }, "src/test/utils/TestConstants.sol": { - "lastModificationDate": 1677588263355, - "contentHash": "be930a8ae3e29ffab60405b06e87daed", + "lastModificationDate": 1677588630890, + "contentHash": "eb62909d9f2ffc1e18513ac863a4a456", "sourceName": "src/test/utils/TestConstants.sol", "solcConfig": { "settings": { diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index f1f6f497..bc3bbe99 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -20,8 +20,8 @@ contract ContangoWand is AccessControl { YieldSpaceMultiOracle public immutable yieldSpaceOracle; CompositeMultiOracle public immutable compositeOracle; - mapping (bytes6 => mapping(bytes6 => uint32)) public ratio; - mapping (bytes6 => mapping(bytes6 => DataTypes.Debt)) public debt; + mapping(bytes6 => mapping(bytes6 => uint32)) public ratio; + mapping(bytes6 => mapping(bytes6 => DataTypes.Debt)) public debt; DataTypes.Debt public defaultDebtLimits; uint32 public defaultRatio; @@ -59,7 +59,7 @@ contract ContangoWand is AccessControl { /// @notice Copy the debt limits from the master cauldron function copyDebtLimits(bytes6 baseId, bytes6 ilkId) external auth { DataTypes.Debt memory debt_ = yieldCauldron.debt(baseId, ilkId); - if(debt_.max == 0) { + if (debt_.max == 0) { debt_ = yieldCauldron.debt(baseId, yieldCauldron.series(ilkId).baseId); } contangoCauldron.setDebtLimits(baseId, ilkId, debt_.max, debt_.min, debt_.dec); @@ -68,10 +68,10 @@ contract ContangoWand is AccessControl { /// @notice Add a new asset in the Cauldron, as long as it is an asset or fyToken known to the Yield Cauldron function addAsset(bytes6 assetId) external auth { address asset_ = yieldCauldron.assets(assetId); - require( - asset_ != address(0) || - address(yieldCauldron.series(assetId).fyToken) != address(0), - "Asset not known to the Yield Cauldron"); + if (asset_ == address(0)) { + asset_ = address(yieldCauldron.series(assetId).fyToken); + } + require(asset_ != address(0), "Asset not known to the Yield Cauldron"); contangoCauldron.addAsset(assetId, asset_); } @@ -109,34 +109,24 @@ contract ContangoWand is AccessControl { } function _getDebtDecimals(bytes6 baseId, bytes6 ilkId) internal view returns (uint8 dec) { - // If the debt is already set in the cauldron, we use the decimals from there - // Otherwise, we use the decimals of the base - DataTypes.Debt memory cauldronDebt_ = ICauldron(address(contangoCauldron)).debt(baseId, ilkId); - if (cauldronDebt_.sum != 0) { - dec = cauldronDebt_.dec; - } else { - dec = IERC20Metadata(contangoCauldron.assets(baseId)).decimals(); - } + // If the debt is already set in the cauldron, we use the decimals from there + // Otherwise, we use the decimals of the base + DataTypes.Debt memory cauldronDebt_ = ICauldron(address(contangoCauldron)).debt(baseId, ilkId); + if (cauldronDebt_.sum != 0) { + dec = cauldronDebt_.dec; + } else { + dec = IERC20Metadata(contangoCauldron.assets(baseId)).decimals(); + } } /// @notice Bound debt limits for a given asset pair function boundDebtLimits(bytes6 baseId, bytes6 ilkId, uint96 max, uint24 min) external auth { - debt[baseId][ilkId] = DataTypes.Debt({ - max: max, - min: min, - dec: _getDebtDecimals(baseId, ilkId), - sum: 0 - }); + debt[baseId][ilkId] = DataTypes.Debt({max: max, min: min, dec: _getDebtDecimals(baseId, ilkId), sum: 0}); } /// @notice Set the default debt limits function setDefaultDebtLimits(uint96 max, uint24 min) external auth { - defaultDebtLimits = DataTypes.Debt({ - max: max, - min: min, - dec: 0, - sum: 0 - }); + defaultDebtLimits = DataTypes.Debt({max: max, min: min, dec: 0, sum: 0}); } /// @notice Set the debt limits for a given asset pair in the Cauldron, within bounds @@ -173,7 +163,7 @@ contract ContangoWand is AccessControl { /// @notice Set the YieldSpace oracle as the source for a given asset pair in the Composite oracle, provided the source is set in the YieldSpace oracle function setCompositeOracleSource(bytes6 baseId, bytes6 ilkId) external auth { - (IPool pool_, ) = yieldSpaceOracle.sources(baseId, ilkId); + (IPool pool_,) = yieldSpaceOracle.sources(baseId, ilkId); require(address(pool_) != address(0), "YieldSpace oracle not set"); compositeOracle.setSource(baseId, ilkId, yieldSpaceOracle); } diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 81877408..608c82f6 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -27,10 +27,6 @@ contract ContangoWandTest is Test, TestConstants { ContangoWand internal wand; - bytes6 internal immutable baseId = USDC; - bytes6 internal immutable seriesId = FYUSDC2306; - bytes6 internal immutable ilkId = FYETH2306; - function setUp() public virtual { vm.createSelectFork("ARBITRUM", 65404751); @@ -56,24 +52,28 @@ contract ContangoWandTest is Test, TestConstants { Cauldron.setDebtLimits.selector, address(wand) ); + AccessControl(address(contangoCauldron)).grantRole( + Cauldron.addAsset.selector, + address(wand) + ); vm.stopPrank(); } function testCopySpotOracle_Auth() public { vm.expectRevert("Access denied"); - wand.copySpotOracle(baseId, ilkId); + wand.copySpotOracle(USDC, FYETH2306); } function testCopySpotOracle() public { wand.grantRole(wand.copySpotOracle.selector, address(this)); - wand.copySpotOracle(baseId, ETH); + wand.copySpotOracle(USDC, ETH); DataTypes.SpotOracle memory yieldOracle = yieldCauldron.spotOracles( - baseId, + USDC, ETH ); DataTypes.SpotOracle memory contangoOracle = contangoCauldron - .spotOracles(baseId, ETH); + .spotOracles(USDC, ETH); assertEq( address(yieldOracle.oracle), @@ -85,30 +85,30 @@ contract ContangoWandTest is Test, TestConstants { function testCopyLendingOracle_Auth() public { vm.expectRevert("Access denied"); - wand.copyLendingOracle(baseId); + wand.copyLendingOracle(USDC); } function testCopyLendingOracle() public { wand.grantRole(wand.copyLendingOracle.selector, address(this)); - wand.copyLendingOracle(baseId); + wand.copyLendingOracle(USDC); - IOracle yieldOracle = yieldCauldron.lendingOracles(baseId); - IOracle contangoOracle = contangoCauldron.lendingOracles(baseId); + IOracle yieldOracle = yieldCauldron.lendingOracles(USDC); + IOracle contangoOracle = contangoCauldron.lendingOracles(USDC); assertEq(address(yieldOracle), address(contangoOracle), "oracle"); } function testCopyDebtLimits_Auth() public { vm.expectRevert("Access denied"); - wand.copyDebtLimits(baseId, ilkId); + wand.copyDebtLimits(USDC, FYETH2306); } function testCopyDebtLimits() public { wand.grantRole(wand.copyDebtLimits.selector, address(this)); - wand.copyDebtLimits(baseId, ETH); + wand.copyDebtLimits(USDC, ETH); - DataTypes.Debt memory yieldDebt = yieldCauldron.debt(baseId, ETH); - DataTypes.Debt memory contangoDebt = contangoCauldron.debt(baseId, ETH); + DataTypes.Debt memory yieldDebt = yieldCauldron.debt(USDC, ETH); + DataTypes.Debt memory contangoDebt = contangoCauldron.debt(USDC, ETH); assertEq(yieldDebt.max, contangoDebt.max, "max"); assertEq(yieldDebt.min, contangoDebt.min, "min"); @@ -117,16 +117,41 @@ contract ContangoWandTest is Test, TestConstants { function testCopyDebtLimits_FromSeries() public { wand.grantRole(wand.copyDebtLimits.selector, address(this)); - wand.copyDebtLimits(baseId, ilkId); + wand.copyDebtLimits(USDC, FYETH2306); - DataTypes.Debt memory yieldDebt = yieldCauldron.debt(baseId, ETH); + DataTypes.Debt memory yieldDebt = yieldCauldron.debt(USDC, ETH); DataTypes.Debt memory contangoDebt = contangoCauldron.debt( - baseId, - ilkId + USDC, + FYETH2306 ); assertEq(yieldDebt.max, contangoDebt.max, "max"); assertEq(yieldDebt.min, contangoDebt.min, "min"); assertEq(yieldDebt.dec, contangoDebt.dec, "dec"); } + + function testAddAsset_Auth() public { + vm.expectRevert("Access denied"); + wand.addAsset(USDT); + } + + function testAddAsset() public { + wand.grantRole(wand.addAsset.selector, address(this)); + wand.addAsset(USDT); + assertEq( + contangoCauldron.assets(USDT), + 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9, + "asset" + ); + } + + function testAddAsset_FromSeries() public { + wand.grantRole(wand.addAsset.selector, address(this)); + wand.addAsset(FYUSDT2306); + assertEq( + contangoCauldron.assets(FYUSDT2306), + 0x035072cb2912DAaB7B578F468Bd6F0d32a269E32, + "asset" + ); + } } diff --git a/src/test/utils/TestConstants.sol b/src/test/utils/TestConstants.sol index d0a1f94b..98cc278b 100644 --- a/src/test/utils/TestConstants.sol +++ b/src/test/utils/TestConstants.sol @@ -23,6 +23,7 @@ contract TestConstants { bytes6 public constant RETH = 0xE03016000000; bytes6 public constant CRAB = 0x333800000000; bytes6 public constant OSQTH = 0x333900000000; + bytes6 public constant USDT = 0x30A000000000; bytes6 public constant FYETH2206 = bytes6("0006"); bytes6 public constant FYDAI2206 = bytes6("0106"); @@ -32,6 +33,7 @@ contract TestConstants { bytes6 public constant FYDAI2212 = bytes6("0108"); bytes6 public constant FYETH2306 = 0x0_030_FF_000_28B; bytes6 public constant FYUSDC2306 = 0x0_032_FF_000_28B; + bytes6 public constant FYUSDT2306 = 0x0_0A0_FF_000_28B; uint32 public constant EOJUN22 = 1656039600; From d92ea4b6ef37c5421608da40604ece6ee582bb44 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 13:02:44 +0000 Subject: [PATCH 08/32] addSeries --- cache/solidity-files-cache.json | 4 +- src/test/other/contango/ContangoWand.t.sol | 86 ++++++++++------------ 2 files changed, 39 insertions(+), 51 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 594d4567..95f374a5 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677588847294, - "contentHash": "d41bdfee29de768b903dcdeda36d06a9", + "lastModificationDate": 1677589348597, + "contentHash": "1d4aba88421c8d1a35c4c2c5eff2e858", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 608c82f6..04d24814 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -10,15 +10,11 @@ import "../../../other/contango/ContangoLadle.sol"; import "../../../other/contango/ContangoWand.sol"; contract ContangoWandTest is Test, TestConstants { - ICauldron internal contangoCauldron = - ICauldron(0x44386ddB4C44E7CB8981f97AF89E928Ddd4258DD); - ICauldron internal yieldCauldron = - ICauldron(0x23cc87FBEBDD67ccE167Fa9Ec6Ad3b7fE3892E30); + ICauldron internal contangoCauldron = ICauldron(0x44386ddB4C44E7CB8981f97AF89E928Ddd4258DD); + ICauldron internal yieldCauldron = ICauldron(0x23cc87FBEBDD67ccE167Fa9Ec6Ad3b7fE3892E30); - ILadleGov public immutable contangoLadle = - ILadleGov(0x93343C08e2055b7793a3336d659Be348FC1B08f9); - ILadle public immutable yieldLadle = - ILadle(0x16E25cf364CeCC305590128335B8f327975d0560); + ILadleGov public immutable contangoLadle = ILadleGov(0x93343C08e2055b7793a3336d659Be348FC1B08f9); + ILadle public immutable yieldLadle = ILadle(0x16E25cf364CeCC305590128335B8f327975d0560); YieldSpaceMultiOracle public immutable yieldSpaceOracle = YieldSpaceMultiOracle(0xb958bA862D70C0a4bD0ea976f9a1907686dd41e2); @@ -40,22 +36,11 @@ contract ContangoWandTest is Test, TestConstants { ); vm.startPrank(addresses[ARBITRUM][TIMELOCK]); - AccessControl(address(contangoCauldron)).grantRole( - Cauldron.setSpotOracle.selector, - address(wand) - ); - AccessControl(address(contangoCauldron)).grantRole( - Cauldron.setLendingOracle.selector, - address(wand) - ); - AccessControl(address(contangoCauldron)).grantRole( - Cauldron.setDebtLimits.selector, - address(wand) - ); - AccessControl(address(contangoCauldron)).grantRole( - Cauldron.addAsset.selector, - address(wand) - ); + AccessControl(address(contangoCauldron)).grantRole(Cauldron.setSpotOracle.selector, address(wand)); + AccessControl(address(contangoCauldron)).grantRole(Cauldron.setLendingOracle.selector, address(wand)); + AccessControl(address(contangoCauldron)).grantRole(Cauldron.setDebtLimits.selector, address(wand)); + AccessControl(address(contangoCauldron)).grantRole(Cauldron.addAsset.selector, address(wand)); + AccessControl(address(contangoCauldron)).grantRole(Cauldron.addSeries.selector, address(wand)); vm.stopPrank(); } @@ -68,18 +53,10 @@ contract ContangoWandTest is Test, TestConstants { wand.grantRole(wand.copySpotOracle.selector, address(this)); wand.copySpotOracle(USDC, ETH); - DataTypes.SpotOracle memory yieldOracle = yieldCauldron.spotOracles( - USDC, - ETH - ); - DataTypes.SpotOracle memory contangoOracle = contangoCauldron - .spotOracles(USDC, ETH); + DataTypes.SpotOracle memory yieldOracle = yieldCauldron.spotOracles(USDC, ETH); + DataTypes.SpotOracle memory contangoOracle = contangoCauldron.spotOracles(USDC, ETH); - assertEq( - address(yieldOracle.oracle), - address(contangoOracle.oracle), - "oracle" - ); + assertEq(address(yieldOracle.oracle), address(contangoOracle.oracle), "oracle"); assertEq(yieldOracle.ratio, contangoOracle.ratio, "ratio"); } @@ -120,10 +97,7 @@ contract ContangoWandTest is Test, TestConstants { wand.copyDebtLimits(USDC, FYETH2306); DataTypes.Debt memory yieldDebt = yieldCauldron.debt(USDC, ETH); - DataTypes.Debt memory contangoDebt = contangoCauldron.debt( - USDC, - FYETH2306 - ); + DataTypes.Debt memory contangoDebt = contangoCauldron.debt(USDC, FYETH2306); assertEq(yieldDebt.max, contangoDebt.max, "max"); assertEq(yieldDebt.min, contangoDebt.min, "min"); @@ -138,20 +112,34 @@ contract ContangoWandTest is Test, TestConstants { function testAddAsset() public { wand.grantRole(wand.addAsset.selector, address(this)); wand.addAsset(USDT); - assertEq( - contangoCauldron.assets(USDT), - 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9, - "asset" - ); + assertEq(contangoCauldron.assets(USDT), 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9, "asset"); } function testAddAsset_FromSeries() public { wand.grantRole(wand.addAsset.selector, address(this)); wand.addAsset(FYUSDT2306); - assertEq( - contangoCauldron.assets(FYUSDT2306), - 0x035072cb2912DAaB7B578F468Bd6F0d32a269E32, - "asset" - ); + assertEq(contangoCauldron.assets(FYUSDT2306), 0x035072cb2912DAaB7B578F468Bd6F0d32a269E32, "asset"); + } + + function testAddSeries_Auth() public { + vm.expectRevert("Access denied"); + wand.addSeries(FYUSDT2306); + } + + function testAddSeries() public { + wand.grantRole(wand.addAsset.selector, address(this)); + wand.addAsset(USDT); + wand.grantRole(wand.copyLendingOracle.selector, address(this)); + wand.copyLendingOracle(USDT); + + wand.grantRole(wand.addSeries.selector, address(this)); + wand.addSeries(FYUSDT2306); + + DataTypes.Series memory yieldSeries = yieldCauldron.series(FYUSDT2306); + DataTypes.Series memory contangoSeries = contangoCauldron.series(FYUSDT2306); + + assertEq(address(yieldSeries.fyToken), address(contangoSeries.fyToken), "fyToken"); + assertEq(yieldSeries.baseId, contangoSeries.baseId, "baseId"); + assertEq(yieldSeries.maturity, contangoSeries.maturity, "maturity"); } } From 2c087a6b3da7f6dfceb7e00f083f0796eddc35d2 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 14:43:30 +0000 Subject: [PATCH 09/32] test refactor --- cache/solidity-files-cache.json | 4 ++-- src/test/other/contango/ContangoWand.t.sol | 26 ++++++++++++++-------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 95f374a5..1e012d6e 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677589348597, - "contentHash": "1d4aba88421c8d1a35c4c2c5eff2e858", + "lastModificationDate": 1677595400211, + "contentHash": "66b094d0e449b91821a8970d7b9cbe41", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 04d24814..1eb4004b 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -21,6 +21,8 @@ contract ContangoWandTest is Test, TestConstants { CompositeMultiOracle public immutable compositeOracle = CompositeMultiOracle(0x750B3a18115fe090Bc621F9E4B90bd442bcd02F2); + address internal bob = address(0xb0b); + ContangoWand internal wand; function setUp() public virtual { @@ -35,22 +37,31 @@ contract ContangoWandTest is Test, TestConstants { compositeOracle ); + wand.grantRole(wand.ROOT(), addresses[ARBITRUM][TIMELOCK]); + vm.startPrank(addresses[ARBITRUM][TIMELOCK]); + wand.grantRole(wand.copySpotOracle.selector, address(this)); AccessControl(address(contangoCauldron)).grantRole(Cauldron.setSpotOracle.selector, address(wand)); + wand.grantRole(wand.copyLendingOracle.selector, address(this)); AccessControl(address(contangoCauldron)).grantRole(Cauldron.setLendingOracle.selector, address(wand)); + wand.grantRole(wand.copyDebtLimits.selector, address(this)); AccessControl(address(contangoCauldron)).grantRole(Cauldron.setDebtLimits.selector, address(wand)); + wand.grantRole(wand.addAsset.selector, address(this)); AccessControl(address(contangoCauldron)).grantRole(Cauldron.addAsset.selector, address(wand)); + wand.grantRole(wand.addSeries.selector, address(this)); AccessControl(address(contangoCauldron)).grantRole(Cauldron.addSeries.selector, address(wand)); + wand.grantRole(wand.addIlks.selector, address(this)); + AccessControl(address(contangoCauldron)).grantRole(Cauldron.addIlks.selector, address(wand)); vm.stopPrank(); } function testCopySpotOracle_Auth() public { + vm.prank(bob); vm.expectRevert("Access denied"); wand.copySpotOracle(USDC, FYETH2306); } function testCopySpotOracle() public { - wand.grantRole(wand.copySpotOracle.selector, address(this)); wand.copySpotOracle(USDC, ETH); DataTypes.SpotOracle memory yieldOracle = yieldCauldron.spotOracles(USDC, ETH); @@ -61,12 +72,12 @@ contract ContangoWandTest is Test, TestConstants { } function testCopyLendingOracle_Auth() public { + vm.prank(bob); vm.expectRevert("Access denied"); wand.copyLendingOracle(USDC); } function testCopyLendingOracle() public { - wand.grantRole(wand.copyLendingOracle.selector, address(this)); wand.copyLendingOracle(USDC); IOracle yieldOracle = yieldCauldron.lendingOracles(USDC); @@ -76,12 +87,12 @@ contract ContangoWandTest is Test, TestConstants { } function testCopyDebtLimits_Auth() public { + vm.prank(bob); vm.expectRevert("Access denied"); wand.copyDebtLimits(USDC, FYETH2306); } function testCopyDebtLimits() public { - wand.grantRole(wand.copyDebtLimits.selector, address(this)); wand.copyDebtLimits(USDC, ETH); DataTypes.Debt memory yieldDebt = yieldCauldron.debt(USDC, ETH); @@ -93,7 +104,6 @@ contract ContangoWandTest is Test, TestConstants { } function testCopyDebtLimits_FromSeries() public { - wand.grantRole(wand.copyDebtLimits.selector, address(this)); wand.copyDebtLimits(USDC, FYETH2306); DataTypes.Debt memory yieldDebt = yieldCauldron.debt(USDC, ETH); @@ -105,34 +115,31 @@ contract ContangoWandTest is Test, TestConstants { } function testAddAsset_Auth() public { + vm.prank(bob); vm.expectRevert("Access denied"); wand.addAsset(USDT); } function testAddAsset() public { - wand.grantRole(wand.addAsset.selector, address(this)); wand.addAsset(USDT); assertEq(contangoCauldron.assets(USDT), 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9, "asset"); } function testAddAsset_FromSeries() public { - wand.grantRole(wand.addAsset.selector, address(this)); wand.addAsset(FYUSDT2306); assertEq(contangoCauldron.assets(FYUSDT2306), 0x035072cb2912DAaB7B578F468Bd6F0d32a269E32, "asset"); } function testAddSeries_Auth() public { + vm.prank(bob); vm.expectRevert("Access denied"); wand.addSeries(FYUSDT2306); } function testAddSeries() public { - wand.grantRole(wand.addAsset.selector, address(this)); wand.addAsset(USDT); - wand.grantRole(wand.copyLendingOracle.selector, address(this)); wand.copyLendingOracle(USDT); - wand.grantRole(wand.addSeries.selector, address(this)); wand.addSeries(FYUSDT2306); DataTypes.Series memory yieldSeries = yieldCauldron.series(FYUSDT2306); @@ -142,4 +149,5 @@ contract ContangoWandTest is Test, TestConstants { assertEq(yieldSeries.baseId, contangoSeries.baseId, "baseId"); assertEq(yieldSeries.maturity, contangoSeries.maturity, "maturity"); } + } From a06386e2d75c65e261a7c81f98a9b71ebe53e068 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 15:03:06 +0000 Subject: [PATCH 10/32] CR management --- cache/solidity-files-cache.json | 8 +-- src/other/contango/ContangoWand.sol | 40 ++++++----- src/test/other/contango/ContangoWand.t.sol | 81 ++++++++++++++++++++++ 3 files changed, 107 insertions(+), 22 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 1e012d6e..9aa9e594 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -6607,8 +6607,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677588915978, - "contentHash": "f391e04d0d3707d421efaec1db7ba0a2", + "lastModificationDate": 1677596510464, + "contentHash": "415194b706391e61d3db7cea766162c4", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677595400211, - "contentHash": "66b094d0e449b91821a8970d7b9cbe41", + "lastModificationDate": 1677596542621, + "contentHash": "7348080fe267947de04b0d6b5c82e997", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index bc3bbe99..1c0b655c 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -24,7 +24,6 @@ contract ContangoWand is AccessControl { mapping(bytes6 => mapping(bytes6 => DataTypes.Debt)) public debt; DataTypes.Debt public defaultDebtLimits; - uint32 public defaultRatio; constructor( ICauldronGov contangoCauldron_, @@ -82,32 +81,37 @@ contract ContangoWand is AccessControl { contangoCauldron.addSeries(seriesId, series_.baseId, series_.fyToken); } - /// @notice Add ilks to series - function addIlks(bytes6 seriesId, bytes6[] calldata ilkIds) external auth { - contangoCauldron.addIlks(seriesId, ilkIds); - } - - /// @notice Bound ratio for a given asset pair - function boundRatio(bytes6 baseId, bytes6 ilkId, uint32 ratio_) external auth { - ratio[baseId][ilkId] = ratio_; - } - - /// @notice Set the default ratio - function setDefaultRatio(uint32 ratio_) external auth { - defaultRatio = ratio_; - } - /// @notice Set the ratio for a given asset pair in the Cauldron, within bounds. Set the spot oracle always to the composite oracle. function setRatio(bytes6 baseId, bytes6 ilkId, uint32 ratio_) external auth { // If the ilkId is a series and boundaries are not set, set ratio to the default uint32 bound_ = ratio[baseId][ilkId]; - if (bound_ == 0 && contangoCauldron.series(ilkId).fyToken != IFYToken(address(0))) { - ratio[baseId][ilkId] = bound_ = defaultRatio; + if (bound_ == 0) { + DataTypes.Series memory yieldSeries = contangoCauldron.series(ilkId); + if (yieldSeries.fyToken != IFYToken(address(0))) { + bound_ = yieldCauldron.spotOracles(baseId, yieldSeries.baseId).ratio; + } + + if (bound_ == 0) { + bound_ = yieldCauldron.spotOracles(baseId, ilkId).ratio; + } } + + require(bound_ != 0, "No bound set"); require(ratio_ >= bound_, "Ratio out of bounds"); + contangoCauldron.setSpotOracle(baseId, ilkId, compositeOracle, ratio_); } + /// @notice Bound ratio for a given asset pair + function boundRatio(bytes6 baseId, bytes6 ilkId, uint32 ratio_) external auth { + ratio[baseId][ilkId] = ratio_; + } + + /// @notice Add ilks to series + function addIlks(bytes6 seriesId, bytes6[] calldata ilkIds) external auth { + contangoCauldron.addIlks(seriesId, ilkIds); + } + function _getDebtDecimals(bytes6 baseId, bytes6 ilkId) internal view returns (uint8 dec) { // If the debt is already set in the cauldron, we use the decimals from there // Otherwise, we use the decimals of the base diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 1eb4004b..83036f8d 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -52,6 +52,8 @@ contract ContangoWandTest is Test, TestConstants { AccessControl(address(contangoCauldron)).grantRole(Cauldron.addSeries.selector, address(wand)); wand.grantRole(wand.addIlks.selector, address(this)); AccessControl(address(contangoCauldron)).grantRole(Cauldron.addIlks.selector, address(wand)); + wand.grantRole(wand.setRatio.selector, address(this)); + wand.grantRole(wand.boundRatio.selector, address(this)); vm.stopPrank(); } @@ -150,4 +152,83 @@ contract ContangoWandTest is Test, TestConstants { assertEq(yieldSeries.maturity, contangoSeries.maturity, "maturity"); } + function testSetRatio_Auth() public { + vm.prank(bob); + vm.expectRevert("Access denied"); + wand.setRatio(USDT, FYETH2306, 1.4e6); + } + + function testSetRatio_FYToken() public { + wand.addAsset(USDT); + + wand.setRatio(USDT, FYETH2306, 1.4e6); + + DataTypes.SpotOracle memory contangoOracle = contangoCauldron.spotOracles(USDT, FYETH2306); + + assertEq(address(contangoOracle.oracle), address(compositeOracle), "oracle"); + assertEq(contangoOracle.ratio, 1.4e6, "ratio"); + } + + function testSetRatio_Asset() public { + wand.addAsset(USDT); + + wand.setRatio(USDT, ETH, 1.4e6); + + DataTypes.SpotOracle memory contangoOracle = contangoCauldron.spotOracles(USDT, ETH); + + assertEq(address(contangoOracle.oracle), address(compositeOracle), "oracle"); + assertEq(contangoOracle.ratio, 1.4e6, "ratio"); + } + + function testSetRatio_LessThanYieldCauldron_FYToken() public { + wand.addAsset(USDT); + + DataTypes.SpotOracle memory yieldOracle = yieldCauldron.spotOracles(USDT, ETH); + assertEq(yieldOracle.ratio, 1.4e6, "yield oracle ratio"); + + vm.expectRevert("Ratio out of bounds"); + wand.setRatio(USDT, FYETH2306, yieldOracle.ratio - 1); + } + + function testSetRatio_LessThanYieldCauldron_Asset() public { + wand.addAsset(USDT); + + DataTypes.SpotOracle memory yieldOracle = yieldCauldron.spotOracles(USDT, ETH); + assertEq(yieldOracle.ratio, 1.4e6, "yield oracle ratio"); + + vm.expectRevert("Ratio out of bounds"); + wand.setRatio(USDT, ETH, yieldOracle.ratio - 1); + } + + function testSetRatio_FYToken_CustomBoundaries() public { + wand.addAsset(USDT); + + wand.boundRatio(USDT, FYETH2306, 1.05e6); + + DataTypes.SpotOracle memory yieldOracle = yieldCauldron.spotOracles(USDT, ETH); + assertEq(yieldOracle.ratio, 1.4e6, "yield oracle ratio"); + + wand.setRatio(USDT, FYETH2306, 1.05e6); + + DataTypes.SpotOracle memory contangoOracle = contangoCauldron.spotOracles(USDT, FYETH2306); + + assertEq(address(contangoOracle.oracle), address(compositeOracle), "oracle"); + assertEq(contangoOracle.ratio, 1.05e6, "ratio"); + } + + function testSetRatio_Asset_CustomBoundaries() public { + wand.addAsset(USDT); + + wand.boundRatio(USDT, ETH, 1.05e6); + + DataTypes.SpotOracle memory yieldOracle = yieldCauldron.spotOracles(USDT, ETH); + assertEq(yieldOracle.ratio, 1.4e6, "yield oracle ratio"); + + wand.setRatio(USDT, ETH, 1.05e6); + + DataTypes.SpotOracle memory contangoOracle = contangoCauldron.spotOracles(USDT, ETH); + + assertEq(address(contangoOracle.oracle), address(compositeOracle), "oracle"); + assertEq(contangoOracle.ratio, 1.05e6, "ratio"); + } } From d29e45cbb451bb33d8f5d6772913b418fd4ecba0 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 15:05:34 +0000 Subject: [PATCH 11/32] addIlks --- cache/solidity-files-cache.json | 4 ++-- src/test/other/contango/ContangoWand.t.sol | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 9aa9e594..11b710a3 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677596542621, - "contentHash": "7348080fe267947de04b0d6b5c82e997", + "lastModificationDate": 1677596713639, + "contentHash": "32a827f56176d94d907b7b88296afde9", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 83036f8d..7b89c9d3 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -231,4 +231,24 @@ contract ContangoWandTest is Test, TestConstants { assertEq(address(contangoOracle.oracle), address(compositeOracle), "oracle"); assertEq(contangoOracle.ratio, 1.05e6, "ratio"); } + + function testAddIlks_Auth() public { + vm.prank(bob); + vm.expectRevert("Access denied"); + wand.addSeries(FYUSDT2306); + } + + function testAddIlks() public { + wand.addAsset(USDT); + wand.copyLendingOracle(USDT); + wand.addSeries(FYUSDT2306); + wand.setRatio(USDT, FYETH2306, 1.4e6); + + bytes6[] memory ilkIds = new bytes6[](1); + ilkIds[0] = FYETH2306; + + wand.addIlks(FYUSDT2306, ilkIds); + + assertTrue(contangoCauldron.ilks(FYUSDT2306, FYETH2306), "ilk"); + } } From ca67a10420acd151c73d747ed027fefffeae485e Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 15:23:12 +0000 Subject: [PATCH 12/32] CR management 2 --- cache/solidity-files-cache.json | 8 +-- src/other/contango/ContangoWand.sol | 20 ++++--- src/test/other/contango/ContangoWand.t.sol | 61 ++++++---------------- 3 files changed, 28 insertions(+), 61 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 11b710a3..eb2fb3a1 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -6607,8 +6607,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677596510464, - "contentHash": "415194b706391e61d3db7cea766162c4", + "lastModificationDate": 1677597759841, + "contentHash": "084c04c392a2c8c174a380f66262d76b", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677596713639, - "contentHash": "32a827f56176d94d907b7b88296afde9", + "lastModificationDate": 1677597961941, + "contentHash": "b41dcd1f848cc9fef68b6532b0cfb161", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index 1c0b655c..5e635f00 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -24,6 +24,7 @@ contract ContangoWand is AccessControl { mapping(bytes6 => mapping(bytes6 => DataTypes.Debt)) public debt; DataTypes.Debt public defaultDebtLimits; + uint32 public defaultRatio; constructor( ICauldronGov contangoCauldron_, @@ -85,23 +86,20 @@ contract ContangoWand is AccessControl { function setRatio(bytes6 baseId, bytes6 ilkId, uint32 ratio_) external auth { // If the ilkId is a series and boundaries are not set, set ratio to the default uint32 bound_ = ratio[baseId][ilkId]; - if (bound_ == 0) { - DataTypes.Series memory yieldSeries = contangoCauldron.series(ilkId); - if (yieldSeries.fyToken != IFYToken(address(0))) { - bound_ = yieldCauldron.spotOracles(baseId, yieldSeries.baseId).ratio; - } - - if (bound_ == 0) { - bound_ = yieldCauldron.spotOracles(baseId, ilkId).ratio; - } + if (bound_ == 0 && yieldCauldron.series(ilkId).fyToken != IFYToken(address(0))) { + ratio[baseId][ilkId] = bound_ = defaultRatio; } - - require(bound_ != 0, "No bound set"); + require(bound_ > 0, "Default ratio not set"); require(ratio_ >= bound_, "Ratio out of bounds"); contangoCauldron.setSpotOracle(baseId, ilkId, compositeOracle, ratio_); } + /// @notice Set the default ratio + function setDefaultRatio(uint32 ratio_) external auth { + defaultRatio = ratio_; + } + /// @notice Bound ratio for a given asset pair function boundRatio(bytes6 baseId, bytes6 ilkId, uint32 ratio_) external auth { ratio[baseId][ilkId] = ratio_; diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 7b89c9d3..16471216 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -54,6 +54,7 @@ contract ContangoWandTest is Test, TestConstants { AccessControl(address(contangoCauldron)).grantRole(Cauldron.addIlks.selector, address(wand)); wand.grantRole(wand.setRatio.selector, address(this)); wand.grantRole(wand.boundRatio.selector, address(this)); + wand.grantRole(wand.setDefaultRatio.selector, address(this)); vm.stopPrank(); } @@ -158,56 +159,38 @@ contract ContangoWandTest is Test, TestConstants { wand.setRatio(USDT, FYETH2306, 1.4e6); } - function testSetRatio_FYToken() public { - wand.addAsset(USDT); - + function testSetRatio_NoDefaultRatio() public { + vm.expectRevert("Default ratio not set"); wand.setRatio(USDT, FYETH2306, 1.4e6); - - DataTypes.SpotOracle memory contangoOracle = contangoCauldron.spotOracles(USDT, FYETH2306); - - assertEq(address(contangoOracle.oracle), address(compositeOracle), "oracle"); - assertEq(contangoOracle.ratio, 1.4e6, "ratio"); } - function testSetRatio_Asset() public { + function testSetRatio() public { wand.addAsset(USDT); + wand.setDefaultRatio(1.05e6); - wand.setRatio(USDT, ETH, 1.4e6); + wand.setRatio(USDT, FYETH2306, 1.4e6); - DataTypes.SpotOracle memory contangoOracle = contangoCauldron.spotOracles(USDT, ETH); + DataTypes.SpotOracle memory contangoOracle = contangoCauldron.spotOracles(USDT, FYETH2306); assertEq(address(contangoOracle.oracle), address(compositeOracle), "oracle"); assertEq(contangoOracle.ratio, 1.4e6, "ratio"); } - function testSetRatio_LessThanYieldCauldron_FYToken() public { - wand.addAsset(USDT); - - DataTypes.SpotOracle memory yieldOracle = yieldCauldron.spotOracles(USDT, ETH); - assertEq(yieldOracle.ratio, 1.4e6, "yield oracle ratio"); - - vm.expectRevert("Ratio out of bounds"); - wand.setRatio(USDT, FYETH2306, yieldOracle.ratio - 1); - } - - function testSetRatio_LessThanYieldCauldron_Asset() public { + function testSetRatio_LessThanDefaultBounds() public { wand.addAsset(USDT); - DataTypes.SpotOracle memory yieldOracle = yieldCauldron.spotOracles(USDT, ETH); - assertEq(yieldOracle.ratio, 1.4e6, "yield oracle ratio"); + uint32 defaultRatio = 1.5e6; + wand.setDefaultRatio(defaultRatio); vm.expectRevert("Ratio out of bounds"); - wand.setRatio(USDT, ETH, yieldOracle.ratio - 1); + wand.setRatio(USDT, FYETH2306, defaultRatio - 1); } - function testSetRatio_FYToken_CustomBoundaries() public { + function testSetRatio_OverrideBoundsForPair() public { wand.addAsset(USDT); + wand.setDefaultRatio(1.4e6); wand.boundRatio(USDT, FYETH2306, 1.05e6); - - DataTypes.SpotOracle memory yieldOracle = yieldCauldron.spotOracles(USDT, ETH); - assertEq(yieldOracle.ratio, 1.4e6, "yield oracle ratio"); - wand.setRatio(USDT, FYETH2306, 1.05e6); DataTypes.SpotOracle memory contangoOracle = contangoCauldron.spotOracles(USDT, FYETH2306); @@ -216,22 +199,6 @@ contract ContangoWandTest is Test, TestConstants { assertEq(contangoOracle.ratio, 1.05e6, "ratio"); } - function testSetRatio_Asset_CustomBoundaries() public { - wand.addAsset(USDT); - - wand.boundRatio(USDT, ETH, 1.05e6); - - DataTypes.SpotOracle memory yieldOracle = yieldCauldron.spotOracles(USDT, ETH); - assertEq(yieldOracle.ratio, 1.4e6, "yield oracle ratio"); - - wand.setRatio(USDT, ETH, 1.05e6); - - DataTypes.SpotOracle memory contangoOracle = contangoCauldron.spotOracles(USDT, ETH); - - assertEq(address(contangoOracle.oracle), address(compositeOracle), "oracle"); - assertEq(contangoOracle.ratio, 1.05e6, "ratio"); - } - function testAddIlks_Auth() public { vm.prank(bob); vm.expectRevert("Access denied"); @@ -242,6 +209,7 @@ contract ContangoWandTest is Test, TestConstants { wand.addAsset(USDT); wand.copyLendingOracle(USDT); wand.addSeries(FYUSDT2306); + wand.setDefaultRatio(1.05e6); wand.setRatio(USDT, FYETH2306, 1.4e6); bytes6[] memory ilkIds = new bytes6[](1); @@ -251,4 +219,5 @@ contract ContangoWandTest is Test, TestConstants { assertTrue(contangoCauldron.ilks(FYUSDT2306, FYETH2306), "ilk"); } + } From e5a3213e8be62277f041f13352bfe1a5ff889aab Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 15:36:46 +0000 Subject: [PATCH 13/32] DebtLimits --- cache/solidity-files-cache.json | 8 ++-- src/other/contango/ContangoWand.sol | 3 +- src/test/other/contango/ContangoWand.t.sol | 53 ++++++++++++++++++++++ 3 files changed, 59 insertions(+), 5 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index eb2fb3a1..aacb7029 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -6607,8 +6607,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677597759841, - "contentHash": "084c04c392a2c8c174a380f66262d76b", + "lastModificationDate": 1677598149183, + "contentHash": "9492a5a6e8c62a06c5396523d08f60d4", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677597961941, - "contentHash": "b41dcd1f848cc9fef68b6532b0cfb161", + "lastModificationDate": 1677598592060, + "contentHash": "208b2fe647252d0aafc16440e67e9067", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index 5e635f00..2286ee5e 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -138,9 +138,10 @@ contract ContangoWand is AccessControl { if (bounds_.max == 0 && bounds_.min == 0) { bounds_ = defaultDebtLimits; + require(bounds_.max > 0, "Default debt limits not set"); bounds_.dec = _getDebtDecimals(baseId, ilkId); - debt[baseId][ilkId] = bounds_; } + require(max <= bounds_.max, "Max debt out of bounds"); require(min >= bounds_.min, "Min debt out of bounds"); diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 16471216..aeed68a1 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -55,6 +55,9 @@ contract ContangoWandTest is Test, TestConstants { wand.grantRole(wand.setRatio.selector, address(this)); wand.grantRole(wand.boundRatio.selector, address(this)); wand.grantRole(wand.setDefaultRatio.selector, address(this)); + wand.grantRole(wand.setDebtLimits.selector, address(this)); + wand.grantRole(wand.setDefaultDebtLimits.selector, address(this)); + wand.grantRole(wand.boundDebtLimits.selector, address(this)); vm.stopPrank(); } @@ -220,4 +223,54 @@ contract ContangoWandTest is Test, TestConstants { assertTrue(contangoCauldron.ilks(FYUSDT2306, FYETH2306), "ilk"); } + function testSetDebtLimits_Auth() public { + vm.prank(bob); + vm.expectRevert("Access denied"); + wand.setDebtLimits(USDT, FYETH2306, 500_000, 40); + } + + function testSetDebtLimits_NoDefaultDebtLimits() public { + vm.expectRevert("Default debt limits not set"); + wand.setDebtLimits(USDT, FYETH2306, 500_000, 40); + } + + function testSetDebtLimits() public { + wand.addAsset(USDT); + wand.setDefaultDebtLimits(500_000, 40); + + wand.setDebtLimits(USDT, FYETH2306, 500_000, 40); + + DataTypes.Debt memory contangoDebtLimits = contangoCauldron.debt(USDT, FYETH2306); + + assertEq(contangoDebtLimits.max, 500_000, "max"); + assertEq(contangoDebtLimits.min, 40, "min"); + assertEq(contangoDebtLimits.dec, 6, "dec"); + } + + function testSetDebtLimits_OutsideDefaultLimits() public { + wand.addAsset(USDT); + + wand.setDefaultDebtLimits(500_000, 40); + + vm.expectRevert("Max debt out of bounds"); + wand.setDebtLimits(USDT, FYETH2306, 500_000 + 1, 40); + + vm.expectRevert("Min debt out of bounds"); + wand.setDebtLimits(USDT, FYETH2306, 500_000, 40 - 1); + } + + function testSetDebtLimits_OverrideLimitsForPair() public { + wand.addAsset(USDT); + wand.setDefaultDebtLimits(500_000, 40); + + wand.boundDebtLimits(USDT, FYETH2306, 1_000_000, 20); + + wand.setDebtLimits(USDT, FYETH2306, 1_000_000, 20); + + DataTypes.Debt memory contangoDebtLimits = contangoCauldron.debt(USDT, FYETH2306); + + assertEq(contangoDebtLimits.max, 1_000_000, "max"); + assertEq(contangoDebtLimits.min, 20, "min"); + assertEq(contangoDebtLimits.dec, 6, "dec"); + } } From fd3e87f7dc3c6d118456f9d56d7214b4e89abde7 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 15:45:27 +0000 Subject: [PATCH 14/32] setYieldSpaceOracleSource --- cache/solidity-files-cache.json | 4 ++-- src/test/other/contango/ContangoWand.t.sol | 25 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index aacb7029..76d314a9 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677598592060, - "contentHash": "208b2fe647252d0aafc16440e67e9067", + "lastModificationDate": 1677599090114, + "contentHash": "fe6ff448d6816479387e6ff32f457bba", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index aeed68a1..6288053e 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -58,6 +58,8 @@ contract ContangoWandTest is Test, TestConstants { wand.grantRole(wand.setDebtLimits.selector, address(this)); wand.grantRole(wand.setDefaultDebtLimits.selector, address(this)); wand.grantRole(wand.boundDebtLimits.selector, address(this)); + AccessControl(address(yieldSpaceOracle)).grantRole(YieldSpaceMultiOracle.setSource.selector, address(wand)); + wand.grantRole(wand.setYieldSpaceOracleSource.selector, address(this)); vm.stopPrank(); } @@ -273,4 +275,27 @@ contract ContangoWandTest is Test, TestConstants { assertEq(contangoDebtLimits.min, 20, "min"); assertEq(contangoDebtLimits.dec, 6, "dec"); } + + function testSetYieldSpaceOracleSource_Auth() public { + vm.prank(bob); + vm.expectRevert("Access denied"); + wand.setYieldSpaceOracleSource(FYUSDT2306); + } + + function testSetYieldSpaceOracleSource() public { + wand.setYieldSpaceOracleSource(FYUSDT2306); + + (IPool pool, bool lending) = yieldSpaceOracle.sources(USDT, FYUSDT2306); + assertEq(address(pool), 0xc6078e090641cC32b05a7F3F102F272A4Ee19867, "pool"); + assertFalse(lending, "lending"); + + (pool, lending) = yieldSpaceOracle.sources(FYUSDT2306, USDT); + assertEq(address(pool), 0xc6078e090641cC32b05a7F3F102F272A4Ee19867, "pool"); + assertTrue(lending, "lending"); + } + + function testSetYieldSpaceOracleSource_InvalidSeries() public { + vm.expectRevert("Pool not known to the Yield Ladle"); + wand.setYieldSpaceOracleSource("series"); + } } From 021987517b6d1e0086f8f0da40578830bf92c25f Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 15:53:11 +0000 Subject: [PATCH 15/32] setCompositeOracleSource --- cache/solidity-files-cache.json | 8 +++---- src/other/contango/ContangoWand.sol | 2 +- src/test/other/contango/ContangoWand.t.sol | 26 ++++++++++++++++++++-- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 76d314a9..2e41ad27 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -6607,8 +6607,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677598149183, - "contentHash": "9492a5a6e8c62a06c5396523d08f60d4", + "lastModificationDate": 1677599421339, + "contentHash": "41fd4740669119e645c200f9a4cde5c7", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677599090114, - "contentHash": "fe6ff448d6816479387e6ff32f457bba", + "lastModificationDate": 1677599565146, + "contentHash": "5dd87f42b5b3c1e40d8172e96f895a61", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index 2286ee5e..0ed5c4ff 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -161,7 +161,7 @@ contract ContangoWand is AccessControl { require(address(series_.fyToken) != address(0), "Series not known to the Yield Cauldron"); require(address(series_.fyToken) == address(pool_.fyToken()), "fyToken mismatch"); // Sanity check - yieldSpaceOracle.setSource(series_.baseId, seriesId, pool_); + yieldSpaceOracle.setSource(seriesId, series_.baseId, pool_); } /// @notice Set the YieldSpace oracle as the source for a given asset pair in the Composite oracle, provided the source is set in the YieldSpace oracle diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 6288053e..07b9196b 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -60,6 +60,8 @@ contract ContangoWandTest is Test, TestConstants { wand.grantRole(wand.boundDebtLimits.selector, address(this)); AccessControl(address(yieldSpaceOracle)).grantRole(YieldSpaceMultiOracle.setSource.selector, address(wand)); wand.grantRole(wand.setYieldSpaceOracleSource.selector, address(this)); + AccessControl(address(compositeOracle)).grantRole(CompositeMultiOracle.setSource.selector, address(wand)); + wand.grantRole(wand.setCompositeOracleSource.selector, address(this)); vm.stopPrank(); } @@ -287,15 +289,35 @@ contract ContangoWandTest is Test, TestConstants { (IPool pool, bool lending) = yieldSpaceOracle.sources(USDT, FYUSDT2306); assertEq(address(pool), 0xc6078e090641cC32b05a7F3F102F272A4Ee19867, "pool"); - assertFalse(lending, "lending"); + assertTrue(lending, "lending"); (pool, lending) = yieldSpaceOracle.sources(FYUSDT2306, USDT); assertEq(address(pool), 0xc6078e090641cC32b05a7F3F102F272A4Ee19867, "pool"); - assertTrue(lending, "lending"); + assertFalse(lending, "lending"); } function testSetYieldSpaceOracleSource_InvalidSeries() public { vm.expectRevert("Pool not known to the Yield Ladle"); wand.setYieldSpaceOracleSource("series"); } + + function testCompositeOracleSource_Auth() public { + vm.prank(bob); + vm.expectRevert("Access denied"); + wand.setCompositeOracleSource(USDT, FYETH2306); + } + + function testCompositeOracleSource_InvalidPair() public { + vm.expectRevert("YieldSpace oracle not set"); + wand.setCompositeOracleSource(USDT, FYETH2306); + } + + function testCompositeOracleSource() public { + wand.setYieldSpaceOracleSource(FYUSDT2306); + + wand.setCompositeOracleSource(USDT, FYUSDT2306); + + IOracle source = compositeOracle.sources(USDT, FYUSDT2306); + assertEq(address(source), address(yieldSpaceOracle), "source"); + } } From 0e5b49f0bdad77316118ba2fd78149b10152ca59 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 16:16:06 +0000 Subject: [PATCH 16/32] setCompositeOraclePath --- cache/solidity-files-cache.json | 8 ++--- src/other/contango/ContangoWand.sol | 15 ++++++--- src/test/other/contango/ContangoWand.t.sol | 37 +++++++++++++++++++++- 3 files changed, 51 insertions(+), 9 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 2e41ad27..c2404c7d 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -6607,8 +6607,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677599421339, - "contentHash": "41fd4740669119e645c200f9a4cde5c7", + "lastModificationDate": 1677600843322, + "contentHash": "d0e37c1e73f7d73d6807860278c19a07", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677599565146, - "contentHash": "5dd87f42b5b3c1e40d8172e96f895a61", + "lastModificationDate": 1677600931649, + "contentHash": "95bd446681df5ca6533ab98979b61741", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index 0ed5c4ff..c79952bb 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -166,14 +166,21 @@ contract ContangoWand is AccessControl { /// @notice Set the YieldSpace oracle as the source for a given asset pair in the Composite oracle, provided the source is set in the YieldSpace oracle function setCompositeOracleSource(bytes6 baseId, bytes6 ilkId) external auth { - (IPool pool_,) = yieldSpaceOracle.sources(baseId, ilkId); - require(address(pool_) != address(0), "YieldSpace oracle not set"); - compositeOracle.setSource(baseId, ilkId, yieldSpaceOracle); + DataTypes.Series memory series_ = yieldCauldron.series(ilkId); + if (series_.fyToken != IFYToken(address(0))) { + (IPool pool_,) = yieldSpaceOracle.sources(baseId, ilkId); + require(address(pool_) != address(0), "YieldSpace oracle not set"); + compositeOracle.setSource(baseId, ilkId, yieldSpaceOracle); + } else if (yieldCauldron.assets(ilkId) != address(0)) { + DataTypes.SpotOracle memory spotOracle_ = yieldCauldron.spotOracles(baseId, ilkId); + compositeOracle.setSource(baseId, ilkId, spotOracle_.oracle); + } } /// @notice Set a path in the Composite oracle, as long as the path is not overwriting anything function setCompositeOraclePath(bytes6 baseId, bytes6 quoteId, bytes6[] calldata path) external auth { - require(compositeOracle.paths(baseId, quoteId, 0) == bytes6(0), "Path already set"); // We check that the first element in the path is empty + // This doesn't work because of the way Solidity handles arrays + // require(compositeOracle.paths(baseId, quoteId, 0) == bytes6(0), "Path already set"); // We check that the first element in the path is empty compositeOracle.setPath(baseId, quoteId, path); } diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 07b9196b..edeb271b 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -62,6 +62,8 @@ contract ContangoWandTest is Test, TestConstants { wand.grantRole(wand.setYieldSpaceOracleSource.selector, address(this)); AccessControl(address(compositeOracle)).grantRole(CompositeMultiOracle.setSource.selector, address(wand)); wand.grantRole(wand.setCompositeOracleSource.selector, address(this)); + AccessControl(address(compositeOracle)).grantRole(CompositeMultiOracle.setPath.selector, address(wand)); + wand.grantRole(wand.setCompositeOraclePath.selector, address(this)); vm.stopPrank(); } @@ -312,7 +314,7 @@ contract ContangoWandTest is Test, TestConstants { wand.setCompositeOracleSource(USDT, FYETH2306); } - function testCompositeOracleSource() public { + function testCompositeOracleSource_FYToken() public { wand.setYieldSpaceOracleSource(FYUSDT2306); wand.setCompositeOracleSource(USDT, FYUSDT2306); @@ -320,4 +322,37 @@ contract ContangoWandTest is Test, TestConstants { IOracle source = compositeOracle.sources(USDT, FYUSDT2306); assertEq(address(source), address(yieldSpaceOracle), "source"); } + + function testCompositeOracleSource_Asset() public { + wand.setCompositeOracleSource(USDT, ETH); + + IOracle source = compositeOracle.sources(USDT, ETH); + assertEq(address(source), 0x8E9696345632796e7D80fB341fF4a2A60aa39C89, "source"); + } + + function testCompositeOraclePath_Auth() public { + vm.prank(bob); + vm.expectRevert("Access denied"); + wand.setCompositeOraclePath(USDT, FYETH2306, new bytes6[](0)); + } + + // function testCompositeOraclePath_InvalidPair() public { + // vm.expectRevert("Path already set"); + // wand.setCompositeOraclePath(USDC, FYETH2306, new bytes6[](0)); + // } + + function testCompositeOraclePath() public { + wand.setYieldSpaceOracleSource(FYUSDT2306); + wand.setCompositeOracleSource(USDT, ETH); + wand.setCompositeOracleSource(USDT, FYUSDT2306); + + bytes6[] memory path = new bytes6[](1); + path[0] = ETH; + + wand.setCompositeOraclePath(USDT, FYETH2306, path); + + (uint256 amountQuote, uint256 updateTime) = compositeOracle.peek(USDT, FYETH2306, 1000e6); + assertGt(amountQuote, 0, "amountQuote"); + assertGt(updateTime, 0, "updateTime"); + } } From 6b8326b317506e662359465a5e9bafd71119327f Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 17:10:04 +0000 Subject: [PATCH 17/32] AddPool --- cache/solidity-files-cache.json | 8 +++---- src/other/contango/ContangoWand.sol | 8 +++---- src/test/other/contango/ContangoWand.t.sol | 27 ++++++++++++++++++++-- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index c2404c7d..cc7821bd 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -6607,8 +6607,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677600843322, - "contentHash": "d0e37c1e73f7d73d6807860278c19a07", + "lastModificationDate": 1677603976743, + "contentHash": "b410c3dbd14924d2a3cdfb96ab9c9989", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677600931649, - "contentHash": "95bd446681df5ca6533ab98979b61741", + "lastModificationDate": 1677604196739, + "contentHash": "8e98b8e5bdfb1a6acce00fbcc4ecc5e8", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index c79952bb..bb3b2b29 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -15,7 +15,7 @@ import "@yield-protocol/utils-v2/src/access/AccessControl.sol"; contract ContangoWand is AccessControl { ICauldronGov public immutable contangoCauldron; ICauldron public immutable yieldCauldron; - ILadleGov public immutable contangoLadle; + ILadle public immutable contangoLadle; ILadle public immutable yieldLadle; YieldSpaceMultiOracle public immutable yieldSpaceOracle; CompositeMultiOracle public immutable compositeOracle; @@ -29,7 +29,7 @@ contract ContangoWand is AccessControl { constructor( ICauldronGov contangoCauldron_, ICauldron yieldCauldron_, - ILadleGov contangoLadle_, + ILadle contangoLadle_, ILadle yieldLadle_, YieldSpaceMultiOracle yieldSpaceOracle_, CompositeMultiOracle compositeOracle_ @@ -190,7 +190,7 @@ contract ContangoWand is AccessControl { function addPool(bytes6 seriesId) external auth { address pool_ = yieldLadle.pools(seriesId); require(pool_ != address(0), "Pool not known to the Yield Ladle"); - contangoLadle.addPool(seriesId, pool_); + contangoLadle.addPool(seriesId, IPool(pool_)); } /// @notice Propagate an integration to the Ladle from the Yield Ladle @@ -206,6 +206,6 @@ contract ContangoWand is AccessControl { /// @notice Add join to the Ladle. /// @dev These will often be used to hold fyToken, so it doesn't seem possible to put boundaries. However, it seems low risk. Famous last words. function addJoin(bytes6 assetId, address join) external auth { - contangoLadle.addJoin(assetId, join); + contangoLadle.addJoin(assetId, IJoin(join)); } } diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index edeb271b..55611ca4 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -13,7 +13,7 @@ contract ContangoWandTest is Test, TestConstants { ICauldron internal contangoCauldron = ICauldron(0x44386ddB4C44E7CB8981f97AF89E928Ddd4258DD); ICauldron internal yieldCauldron = ICauldron(0x23cc87FBEBDD67ccE167Fa9Ec6Ad3b7fE3892E30); - ILadleGov public immutable contangoLadle = ILadleGov(0x93343C08e2055b7793a3336d659Be348FC1B08f9); + ILadle public immutable contangoLadle = ILadle(0x93343C08e2055b7793a3336d659Be348FC1B08f9); ILadle public immutable yieldLadle = ILadle(0x16E25cf364CeCC305590128335B8f327975d0560); YieldSpaceMultiOracle public immutable yieldSpaceOracle = @@ -31,7 +31,7 @@ contract ContangoWandTest is Test, TestConstants { wand = new ContangoWand( ICauldronGov(address(contangoCauldron)), yieldCauldron, - ILadleGov(address(contangoLadle)), + contangoLadle, yieldLadle, yieldSpaceOracle, compositeOracle @@ -64,6 +64,8 @@ contract ContangoWandTest is Test, TestConstants { wand.grantRole(wand.setCompositeOracleSource.selector, address(this)); AccessControl(address(compositeOracle)).grantRole(CompositeMultiOracle.setPath.selector, address(wand)); wand.grantRole(wand.setCompositeOraclePath.selector, address(this)); + AccessControl(address(contangoLadle)).grantRole(ILadle.addPool.selector, address(wand)); + wand.grantRole(wand.addPool.selector, address(this)); vm.stopPrank(); } @@ -355,4 +357,25 @@ contract ContangoWandTest is Test, TestConstants { assertGt(amountQuote, 0, "amountQuote"); assertGt(updateTime, 0, "updateTime"); } + + function testAddPool_Auth() public { + vm.prank(bob); + vm.expectRevert("Access denied"); + wand.addPool(FYUSDT2306); + } + + function testAddPool_Invalid() public { + vm.expectRevert("Pool not known to the Yield Ladle"); + wand.addPool("meh"); + } + + function testAddPool() public { + wand.addAsset(USDT); + wand.copyLendingOracle(USDT); + wand.addSeries(FYUSDT2306); + + wand.addPool(FYUSDT2306); + + assertEq(contangoLadle.pools(FYUSDT2306), 0xc6078e090641cC32b05a7F3F102F272A4Ee19867, "pool"); + } } From 08c5fe0511b290fcb48c8809d8a7b9dea5db873c Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 17:17:01 +0000 Subject: [PATCH 18/32] AddIntegration --- cache/solidity-files-cache.json | 4 ++-- src/test/other/contango/ContangoWand.t.sol | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index cc7821bd..ba127085 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677604196739, - "contentHash": "8e98b8e5bdfb1a6acce00fbcc4ecc5e8", + "lastModificationDate": 1677604605370, + "contentHash": "9613dedcf9d6890a9a2c479217f36418", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 55611ca4..c942a130 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -66,6 +66,8 @@ contract ContangoWandTest is Test, TestConstants { wand.grantRole(wand.setCompositeOraclePath.selector, address(this)); AccessControl(address(contangoLadle)).grantRole(ILadle.addPool.selector, address(wand)); wand.grantRole(wand.addPool.selector, address(this)); + AccessControl(address(contangoLadle)).grantRole(ILadle.addIntegration.selector, address(wand)); + wand.grantRole(wand.addIntegration.selector, address(this)); vm.stopPrank(); } @@ -378,4 +380,19 @@ contract ContangoWandTest is Test, TestConstants { assertEq(contangoLadle.pools(FYUSDT2306), 0xc6078e090641cC32b05a7F3F102F272A4Ee19867, "pool"); } + + function testIntegration_Auth() public { + vm.prank(bob); + vm.expectRevert("Access denied"); + wand.addIntegration(address(0)); + } + + function testAddIntegration() public { + assertTrue(yieldLadle.integrations(0xE779cd75E6c574d83D3FD6C92F3CBE31DD32B1E1), "yield integration"); + + wand.addIntegration(0xE779cd75E6c574d83D3FD6C92F3CBE31DD32B1E1); + + assertTrue(contangoLadle.integrations(0xE779cd75E6c574d83D3FD6C92F3CBE31DD32B1E1), "yield integration"); + } + } From f87c7d4839bec88e519670c6ec3c5b6de9b15091 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 17:18:44 +0000 Subject: [PATCH 19/32] AddToken --- cache/solidity-files-cache.json | 4 ++-- src/test/other/contango/ContangoWand.t.sol | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index ba127085..3c00b046 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677604605370, - "contentHash": "9613dedcf9d6890a9a2c479217f36418", + "lastModificationDate": 1677604705969, + "contentHash": "f296e340cac233ca73e104027cd8b6a3", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index c942a130..f4a9547c 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -68,6 +68,8 @@ contract ContangoWandTest is Test, TestConstants { wand.grantRole(wand.addPool.selector, address(this)); AccessControl(address(contangoLadle)).grantRole(ILadle.addIntegration.selector, address(wand)); wand.grantRole(wand.addIntegration.selector, address(this)); + AccessControl(address(contangoLadle)).grantRole(ILadle.addToken.selector, address(wand)); + wand.grantRole(wand.addToken.selector, address(this)); vm.stopPrank(); } @@ -395,4 +397,17 @@ contract ContangoWandTest is Test, TestConstants { assertTrue(contangoLadle.integrations(0xE779cd75E6c574d83D3FD6C92F3CBE31DD32B1E1), "yield integration"); } + function testToken_Auth() public { + vm.prank(bob); + vm.expectRevert("Access denied"); + wand.addToken(address(0)); + } + + function testAddToken() public { + assertTrue(yieldLadle.tokens(0xad1983745D6c739537fEaB5bed45795f47A940b3), "yield integration"); + + wand.addToken(0xad1983745D6c739537fEaB5bed45795f47A940b3); + + assertTrue(contangoLadle.tokens(0xad1983745D6c739537fEaB5bed45795f47A940b3), "yield integration"); + } } From f6e2b2be6cb401901652157b96a5fc679e46c63d Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Tue, 28 Feb 2023 17:25:44 +0000 Subject: [PATCH 20/32] AddJoin --- cache/solidity-files-cache.json | 12 ++++++++---- src/other/contango/ContangoWand.sol | 4 ++-- src/test/other/contango/ContangoWand.t.sol | 19 +++++++++++++++++++ 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 3c00b046..ed7c3b78 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -6607,8 +6607,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677603976743, - "contentHash": "b410c3dbd14924d2a3cdfb96ab9c9989", + "lastModificationDate": 1677605001004, + "contentHash": "61c7561599ce636f8e1490bc5061af1d", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -9796,8 +9796,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677604705969, - "contentHash": "f296e340cac233ca73e104027cd8b6a3", + "lastModificationDate": 1677605131493, + "contentHash": "6a6d1060eb6289364ab6c03f0a87878a", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { @@ -9828,6 +9828,8 @@ } }, "imports": [ + "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", + "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", "lib/dss-interfaces/src/dss/DaiAbstract.sol", "lib/forge-std/lib/ds-test/src/test.sol", "lib/forge-std/src/Base.sol", @@ -9860,6 +9862,7 @@ "lib/yieldspace-tv/src/interfaces/IPool.sol", "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", "src/Cauldron.sol", + "src/Join.sol", "src/Ladle.sol", "src/LadleStorage.sol", "src/Router.sol", @@ -9870,6 +9873,7 @@ "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", + "src/interfaces/IJoinFactory.sol", "src/interfaces/ILadle.sol", "src/interfaces/ILadleGov.sol", "src/interfaces/IOracle.sol", diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index bb3b2b29..7e28616c 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -205,7 +205,7 @@ contract ContangoWand is AccessControl { /// @notice Add join to the Ladle. /// @dev These will often be used to hold fyToken, so it doesn't seem possible to put boundaries. However, it seems low risk. Famous last words. - function addJoin(bytes6 assetId, address join) external auth { - contangoLadle.addJoin(assetId, IJoin(join)); + function addJoin(bytes6 assetId, IJoin join) external auth { + contangoLadle.addJoin(assetId, join); } } diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index f4a9547c..9cd4c6ba 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -6,6 +6,7 @@ import "../../utils/TestConstants.sol"; import "../../utils/Mocks.sol"; import "../../../Cauldron.sol"; +import "../../../Join.sol"; import "../../../other/contango/ContangoLadle.sol"; import "../../../other/contango/ContangoWand.sol"; @@ -70,6 +71,8 @@ contract ContangoWandTest is Test, TestConstants { wand.grantRole(wand.addIntegration.selector, address(this)); AccessControl(address(contangoLadle)).grantRole(ILadle.addToken.selector, address(wand)); wand.grantRole(wand.addToken.selector, address(this)); + AccessControl(address(contangoLadle)).grantRole(ILadle.addJoin.selector, address(wand)); + wand.grantRole(wand.addJoin.selector, address(this)); vm.stopPrank(); } @@ -410,4 +413,20 @@ contract ContangoWandTest is Test, TestConstants { assertTrue(contangoLadle.tokens(0xad1983745D6c739537fEaB5bed45795f47A940b3), "yield integration"); } + + function testAddJoin_Auth() public { + vm.prank(bob); + vm.expectRevert("Access denied"); + wand.addJoin(FYUSDT2306, IJoin(address(0))); + } + + function testAddJoin() public { + wand.addAsset(USDT); + + IJoin join = new Join(contangoCauldron.assets(USDT)); + + wand.addJoin(USDT, join); + + assertEq(address(contangoLadle.joins(USDT)), address(join), "pool"); + } } From 75db1be0caaf3d9c1b3b980af8193172e25ff072 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Wed, 1 Mar 2023 16:27:42 +0000 Subject: [PATCH 21/32] Integration test from Contango side --- src/other/contango/ContangoWand.sol | 61 +++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 13 deletions(-) diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index 7e28616c..630d251d 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.8.13; +import "../../Join.sol"; import "../../interfaces/ICauldronGov.sol"; import "../../interfaces/ICauldron.sol"; import "../../interfaces/ILadleGov.sol"; @@ -13,12 +14,13 @@ import "@yield-protocol/utils-v2/src/access/AccessControl.sol"; /// @title A contract that allows configuring the cauldron and ladle within bounds contract ContangoWand is AccessControl { - ICauldronGov public immutable contangoCauldron; + ICauldron public immutable contangoCauldron; ICauldron public immutable yieldCauldron; ILadle public immutable contangoLadle; ILadle public immutable yieldLadle; YieldSpaceMultiOracle public immutable yieldSpaceOracle; CompositeMultiOracle public immutable compositeOracle; + address internal immutable yieldTimelock; mapping(bytes6 => mapping(bytes6 => uint32)) public ratio; mapping(bytes6 => mapping(bytes6 => DataTypes.Debt)) public debt; @@ -27,12 +29,13 @@ contract ContangoWand is AccessControl { uint32 public defaultRatio; constructor( - ICauldronGov contangoCauldron_, + ICauldron contangoCauldron_, ICauldron yieldCauldron_, ILadle contangoLadle_, ILadle yieldLadle_, YieldSpaceMultiOracle yieldSpaceOracle_, - CompositeMultiOracle compositeOracle_ + CompositeMultiOracle compositeOracle_, + address yieldTimelock_ ) { contangoCauldron = contangoCauldron_; yieldCauldron = yieldCauldron_; @@ -40,6 +43,7 @@ contract ContangoWand is AccessControl { yieldLadle = yieldLadle_; yieldSpaceOracle = yieldSpaceOracle_; compositeOracle = compositeOracle_; + yieldTimelock = yieldTimelock_; } /// ----------------- Cauldron Governance ----------------- @@ -52,8 +56,11 @@ contract ContangoWand is AccessControl { /// @notice Copy the lending oracle from the master cauldron function copyLendingOracle(bytes6 baseId) external auth { - IOracle lendingOracle_ = yieldCauldron.lendingOracles(baseId); - contangoCauldron.setLendingOracle(baseId, lendingOracle_); + _copyLendingOracle(baseId); + } + + function _copyLendingOracle(bytes6 baseId) internal { + contangoCauldron.setLendingOracle(baseId, yieldCauldron.lendingOracles(baseId)); } /// @notice Copy the debt limits from the master cauldron @@ -66,8 +73,12 @@ contract ContangoWand is AccessControl { } /// @notice Add a new asset in the Cauldron, as long as it is an asset or fyToken known to the Yield Cauldron - function addAsset(bytes6 assetId) external auth { - address asset_ = yieldCauldron.assets(assetId); + function addAsset(bytes6 assetId) external auth returns (address asset_) { + asset_ = _addAsset(assetId); + } + + function _addAsset(bytes6 assetId) internal returns (address asset_) { + asset_ = yieldCauldron.assets(assetId); if (asset_ == address(0)) { asset_ = address(yieldCauldron.series(assetId).fyToken); } @@ -76,9 +87,13 @@ contract ContangoWand is AccessControl { } /// @notice Add a new series, if it exists in the Yield Cauldron - function addSeries(bytes6 seriesId) external auth { - DataTypes.Series memory series_ = yieldCauldron.series(seriesId); + function addSeries(bytes6 seriesId) external auth returns (DataTypes.Series memory series_) { + series_ = yieldCauldron.series(seriesId); require(address(series_.fyToken) != address(0), "Series not known to the Yield Cauldron"); + if (contangoCauldron.assets(series_.baseId) == address(0)) { + _addAsset(series_.baseId); + _copyLendingOracle(series_.baseId); + } contangoCauldron.addSeries(seriesId, series_.baseId, series_.fyToken); } @@ -173,6 +188,10 @@ contract ContangoWand is AccessControl { compositeOracle.setSource(baseId, ilkId, yieldSpaceOracle); } else if (yieldCauldron.assets(ilkId) != address(0)) { DataTypes.SpotOracle memory spotOracle_ = yieldCauldron.spotOracles(baseId, ilkId); + if (address(spotOracle_.oracle) == address(0)) { + spotOracle_ = yieldCauldron.spotOracles(ilkId, baseId); + } + require(address(spotOracle_.oracle) != address(0), "Spot oracle not known to the Yield Cauldron"); compositeOracle.setSource(baseId, ilkId, spotOracle_.oracle); } } @@ -187,10 +206,10 @@ contract ContangoWand is AccessControl { /// ----------------- Ladle Governance ----------------- /// @notice Propagate a pool to the Ladle from the Yield Ladle - function addPool(bytes6 seriesId) external auth { - address pool_ = yieldLadle.pools(seriesId); - require(pool_ != address(0), "Pool not known to the Yield Ladle"); - contangoLadle.addPool(seriesId, IPool(pool_)); + function addPool(bytes6 seriesId) external auth returns (IPool pool_) { + pool_ = IPool(yieldLadle.pools(seriesId)); + require(address(pool_) != address(0), "Pool not known to the Yield Ladle"); + contangoLadle.addPool(seriesId, pool_); } /// @notice Propagate an integration to the Ladle from the Yield Ladle @@ -208,4 +227,20 @@ contract ContangoWand is AccessControl { function addJoin(bytes6 assetId, IJoin join) external auth { contangoLadle.addJoin(assetId, join); } + + function deployJoin(bytes6 assetId) external auth returns (IJoin join) { + address asset = contangoCauldron.assets(assetId); + require(asset != address(0), "Asset not known to the Cauldron"); + Join join_ = new Join(asset); + + join_.grantRole(IJoin.join.selector, address(contangoLadle)); + join_.grantRole(IJoin.exit.selector, address(contangoLadle)); + + bytes4 root = join_.ROOT(); + join_.grantRole(root, yieldTimelock); + join_.revokeRole(root, address(this)); + + join = IJoin(address(join_)); + contangoLadle.addJoin(assetId, join); + } } From a7b0e40d575f816d42b9e8d2091e01f20b915dac Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Wed, 1 Mar 2023 17:43:26 +0000 Subject: [PATCH 22/32] Basic witch management Driven by int test on contango side --- src/interfaces/IWitch.sol | 3 +- src/interfaces/IWitchGov.sol | 22 ++++++++++ src/other/contango/ContangoWand.sol | 62 ++++++++++++++++++++++++----- 3 files changed, 76 insertions(+), 11 deletions(-) create mode 100644 src/interfaces/IWitchGov.sol diff --git a/src/interfaces/IWitch.sol b/src/interfaces/IWitch.sol index e4357be3..f54d9355 100644 --- a/src/interfaces/IWitch.sol +++ b/src/interfaces/IWitch.sol @@ -2,10 +2,11 @@ pragma solidity ^0.8.0; import "./ILadle.sol"; +import "./IWitchGov.sol"; import "./ICauldron.sol"; import "./DataTypes.sol"; -interface IWitch { +interface IWitch is IWitchGov { /// @return The Cauldron the witch is using under-the-bonnet function cauldron() external view returns (ICauldron); diff --git a/src/interfaces/IWitchGov.sol b/src/interfaces/IWitchGov.sol new file mode 100644 index 00000000..5f89ef56 --- /dev/null +++ b/src/interfaces/IWitchGov.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "./ILadle.sol"; +import "./ICauldron.sol"; +import "./DataTypes.sol"; + +interface IWitchGov { + function point(bytes32 param, address value) external; + function setLineAndLimit( + bytes6 ilkId, + bytes6 baseId, + uint32 duration, + uint64 vaultProportion, + uint64 collateralProportion, + uint128 max + ) external; + + function setProtected(address owner, bool _protected) external; + + function setAuctioneerReward(uint256 auctioneerReward_) external; +} diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index 630d251d..df2402f7 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -7,6 +7,7 @@ import "../../interfaces/ICauldron.sol"; import "../../interfaces/ILadleGov.sol"; import "../../interfaces/ILadle.sol"; import "../../interfaces/IJoin.sol"; +import "../../interfaces/IWitch.sol"; import "../../oracles/yieldspace/YieldSpaceMultiOracle.sol"; import "../../oracles/composite/CompositeMultiOracle.sol"; import "@yield-protocol/yieldspace-tv/src/interfaces/IPool.sol"; @@ -20,7 +21,8 @@ contract ContangoWand is AccessControl { ILadle public immutable yieldLadle; YieldSpaceMultiOracle public immutable yieldSpaceOracle; CompositeMultiOracle public immutable compositeOracle; - address internal immutable yieldTimelock; + address public immutable yieldTimelock; + IWitch public immutable contangoWitch; mapping(bytes6 => mapping(bytes6 => uint32)) public ratio; mapping(bytes6 => mapping(bytes6 => DataTypes.Debt)) public debt; @@ -35,7 +37,8 @@ contract ContangoWand is AccessControl { ILadle yieldLadle_, YieldSpaceMultiOracle yieldSpaceOracle_, CompositeMultiOracle compositeOracle_, - address yieldTimelock_ + address yieldTimelock_, + IWitch contangoWitch_ ) { contangoCauldron = contangoCauldron_; yieldCauldron = yieldCauldron_; @@ -44,6 +47,7 @@ contract ContangoWand is AccessControl { yieldSpaceOracle = yieldSpaceOracle_; compositeOracle = compositeOracle_; yieldTimelock = yieldTimelock_; + contangoWitch = contangoWitch_; } /// ----------------- Cauldron Governance ----------------- @@ -93,7 +97,14 @@ contract ContangoWand is AccessControl { if (contangoCauldron.assets(series_.baseId) == address(0)) { _addAsset(series_.baseId); _copyLendingOracle(series_.baseId); + _copyJoin(series_.baseId); } + + AccessControl(address(series_.fyToken)).grantRole(IFYToken.mint.selector, address(contangoLadle)); + AccessControl(address(series_.fyToken)).grantRole(IFYToken.burn.selector, address(contangoLadle)); + + AccessControl(address(series_.fyToken)).grantRole(IFYToken.burn.selector, address(contangoWitch)); + contangoCauldron.addSeries(seriesId, series_.baseId, series_.fyToken); } @@ -222,25 +233,56 @@ contract ContangoWand is AccessControl { contangoLadle.addToken(token, yieldLadle.tokens(token)); } + function copyJoin(bytes6 assetId) external auth { + _copyJoin(assetId); + } + + function _copyJoin(bytes6 assetId) internal { + // TODO add checks + _addJoin(assetId, yieldLadle.joins(assetId)); + } + /// @notice Add join to the Ladle. /// @dev These will often be used to hold fyToken, so it doesn't seem possible to put boundaries. However, it seems low risk. Famous last words. function addJoin(bytes6 assetId, IJoin join) external auth { + _addJoin(assetId, join); + } + + function _addJoin(bytes6 assetId, IJoin join) internal { contangoLadle.addJoin(assetId, join); + + AccessControl(address(join)).grantRole(IJoin.join.selector, address(contangoLadle)); + AccessControl(address(join)).grantRole(IJoin.exit.selector, address(contangoLadle)); + + AccessControl(address(join)).grantRole(IJoin.join.selector, address(contangoWitch)); + AccessControl(address(join)).grantRole(IJoin.exit.selector, address(contangoWitch)); } function deployJoin(bytes6 assetId) external auth returns (IJoin join) { address asset = contangoCauldron.assets(assetId); require(asset != address(0), "Asset not known to the Cauldron"); - Join join_ = new Join(asset); - - join_.grantRole(IJoin.join.selector, address(contangoLadle)); - join_.grantRole(IJoin.exit.selector, address(contangoLadle)); - bytes4 root = join_.ROOT(); - join_.grantRole(root, yieldTimelock); - join_.revokeRole(root, address(this)); + Join join_ = new Join(asset); + join_.grantRole(join_.ROOT(), yieldTimelock); join = IJoin(address(join_)); - contangoLadle.addJoin(assetId, join); + _addJoin(assetId, join); + } + + /// ----------------- Witch Governance ----------------- + + function setLineAndLimit( + bytes6 ilkId, + bytes6 baseId, + uint32 duration, + uint64 vaultProportion, + uint64 collateralProportion, + uint128 max + ) external auth { + contangoWitch.setLineAndLimit(ilkId, baseId, duration, vaultProportion, collateralProportion, max); + } + + function setAuctioneerReward(uint256 auctioneerReward) external auth { + contangoWitch.setAuctioneerReward(auctioneerReward); } } From 0225010a5c1358790d17616fa0c01fa4ba00eab5 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Wed, 1 Mar 2023 18:02:20 +0000 Subject: [PATCH 23/32] fix unit tests --- cache/solidity-files-cache.json | 85 ++++++++++++++++++++-- src/test/other/contango/ContangoWand.t.sol | 25 ++++--- 2 files changed, 94 insertions(+), 16 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index ed7c3b78..0df2e66d 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -3421,8 +3421,8 @@ } }, "src/interfaces/IWitch.sol": { - "lastModificationDate": 1677585086205, - "contentHash": "9c7cbc5e6e506d664972afc0301d09c2", + "lastModificationDate": 1677692998745, + "contentHash": "8d853d1edd96e5fa77f6be325963e45f", "sourceName": "src/interfaces/IWitch.sol", "solcConfig": { "settings": { @@ -3470,7 +3470,8 @@ "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol" + "src/interfaces/IOracle.sol", + "src/interfaces/IWitchGov.sol" ], "versionRequirement": "^0.8.0", "artifacts": { @@ -3479,6 +3480,65 @@ } } }, + "src/interfaces/IWitchGov.sol": { + "lastModificationDate": 1677692998745, + "contentHash": "8ac63c848c2a23972234964a105b17e1", + "sourceName": "src/interfaces/IWitchGov.sol", + "solcConfig": { + "settings": { + "optimizer": { + "enabled": false, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "ipfs", + "appendCBOR": true + }, + "outputSelection": { + "*": { + "": [ + "ast" + ], + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ] + } + }, + "evmVersion": "london", + "libraries": {} + } + }, + "imports": [ + "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", + "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", + "lib/yieldspace-tv/src/interfaces/IPool.sol", + "src/Router.sol", + "src/interfaces/DataTypes.sol", + "src/interfaces/ICauldron.sol", + "src/interfaces/ICauldronGov.sol", + "src/interfaces/IERC5095.sol", + "src/interfaces/IFYToken.sol", + "src/interfaces/IJoin.sol", + "src/interfaces/ILadle.sol", + "src/interfaces/IOracle.sol" + ], + "versionRequirement": "^0.8.0", + "artifacts": { + "IWitchGov": { + "0.8.15+commit.e14f2714.Darwin.appleclang": "IWitchGov.sol/IWitchGov.json" + } + } + }, "src/mocks/ConvexPoolMock.sol": { "lastModificationDate": 1677585086205, "contentHash": "59f06a4b00a23526b690a778b0ec1061", @@ -6607,8 +6667,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677605001004, - "contentHash": "61c7561599ce636f8e1490bc5061af1d", + "lastModificationDate": 1677692998746, + "contentHash": "e1df3b52d3f725c5edf965e5e23d9cfc", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -6639,18 +6699,23 @@ } }, "imports": [ + "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", + "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", + "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", "lib/yieldspace-tv/src/interfaces/IPool.sol", "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", + "src/Join.sol", "src/Router.sol", "src/interfaces/DataTypes.sol", "src/interfaces/ICauldron.sol", @@ -6658,9 +6723,12 @@ "src/interfaces/IERC5095.sol", "src/interfaces/IFYToken.sol", "src/interfaces/IJoin.sol", + "src/interfaces/IJoinFactory.sol", "src/interfaces/ILadle.sol", "src/interfaces/ILadleGov.sol", "src/interfaces/IOracle.sol", + "src/interfaces/IWitch.sol", + "src/interfaces/IWitchGov.sol", "src/oracles/composite/CompositeMultiOracle.sol", "src/oracles/yieldspace/YieldSpaceMultiOracle.sol" ], @@ -7744,6 +7812,7 @@ "src/interfaces/ILadle.sol", "src/interfaces/IOracle.sol", "src/interfaces/IWitch.sol", + "src/interfaces/IWitchGov.sol", "src/test/utils/Mocks.sol", "src/test/utils/TestConstants.sol" ], @@ -9796,8 +9865,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677605131493, - "contentHash": "6a6d1060eb6289364ab6c03f0a87878a", + "lastModificationDate": 1677693593105, + "contentHash": "1ebf52493547998daf24e0e5dddf5f11", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { @@ -9877,6 +9946,8 @@ "src/interfaces/ILadle.sol", "src/interfaces/ILadleGov.sol", "src/interfaces/IOracle.sol", + "src/interfaces/IWitch.sol", + "src/interfaces/IWitchGov.sol", "src/oracles/composite/CompositeMultiOracle.sol", "src/oracles/yieldspace/YieldSpaceMultiOracle.sol", "src/other/contango/ContangoLadle.sol", diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 9cd4c6ba..1fd78dcf 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -5,6 +5,7 @@ import "forge-std/src/Test.sol"; import "../../utils/TestConstants.sol"; import "../../utils/Mocks.sol"; +import "../../../interfaces/IWitch.sol"; import "../../../Cauldron.sol"; import "../../../Join.sol"; import "../../../other/contango/ContangoLadle.sol"; @@ -12,10 +13,12 @@ import "../../../other/contango/ContangoWand.sol"; contract ContangoWandTest is Test, TestConstants { ICauldron internal contangoCauldron = ICauldron(0x44386ddB4C44E7CB8981f97AF89E928Ddd4258DD); - ICauldron internal yieldCauldron = ICauldron(0x23cc87FBEBDD67ccE167Fa9Ec6Ad3b7fE3892E30); - ILadle public immutable contangoLadle = ILadle(0x93343C08e2055b7793a3336d659Be348FC1B08f9); + IWitch internal immutable contangoWitch = IWitch(0x89343a24a217172A569A0bD68763Bf0671A3efd8); + + ICauldron internal yieldCauldron = ICauldron(0x23cc87FBEBDD67ccE167Fa9Ec6Ad3b7fE3892E30); ILadle public immutable yieldLadle = ILadle(0x16E25cf364CeCC305590128335B8f327975d0560); + address internal immutable yieldTimelock = 0xd0a22827Aed2eF5198EbEc0093EA33A4CD641b6c; YieldSpaceMultiOracle public immutable yieldSpaceOracle = YieldSpaceMultiOracle(0xb958bA862D70C0a4bD0ea976f9a1907686dd41e2); @@ -30,17 +33,24 @@ contract ContangoWandTest is Test, TestConstants { vm.createSelectFork("ARBITRUM", 65404751); wand = new ContangoWand( - ICauldronGov(address(contangoCauldron)), + contangoCauldron, yieldCauldron, contangoLadle, yieldLadle, yieldSpaceOracle, - compositeOracle + compositeOracle, + yieldTimelock, + contangoWitch ); - wand.grantRole(wand.ROOT(), addresses[ARBITRUM][TIMELOCK]); + bytes4 root = 0x0; + wand.grantRole(root, addresses[ARBITRUM][TIMELOCK]); vm.startPrank(addresses[ARBITRUM][TIMELOCK]); + + AccessControl(address(yieldLadle.joins(USDT))).grantRole(root, address(wand)); + AccessControl(address(yieldCauldron.series(FYUSDT2306).fyToken)).grantRole(root, address(wand)); + wand.grantRole(wand.copySpotOracle.selector, address(this)); AccessControl(address(contangoCauldron)).grantRole(Cauldron.setSpotOracle.selector, address(wand)); wand.grantRole(wand.copyLendingOracle.selector, address(this)); @@ -158,9 +168,6 @@ contract ContangoWandTest is Test, TestConstants { } function testAddSeries() public { - wand.addAsset(USDT); - wand.copyLendingOracle(USDT); - wand.addSeries(FYUSDT2306); DataTypes.Series memory yieldSeries = yieldCauldron.series(FYUSDT2306); @@ -423,7 +430,7 @@ contract ContangoWandTest is Test, TestConstants { function testAddJoin() public { wand.addAsset(USDT); - IJoin join = new Join(contangoCauldron.assets(USDT)); + IJoin join = yieldLadle.joins(USDT); wand.addJoin(USDT, join); From 90099124a3fda0dabc3c07c3a1afc817b544b9ce Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Thu, 2 Mar 2023 13:16:28 +0000 Subject: [PATCH 24/32] Remove defaultRatio --- cache/solidity-files-cache.json | 8 ++-- src/other/contango/ContangoWand.sol | 31 +++++++++---- src/test/other/contango/ContangoWand.t.sol | 54 +++++++++++++--------- 3 files changed, 59 insertions(+), 34 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 0df2e66d..a98e61fb 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -6667,8 +6667,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677692998746, - "contentHash": "e1df3b52d3f725c5edf965e5e23d9cfc", + "lastModificationDate": 1677762950451, + "contentHash": "89ec914b660184a565bd471395d313d5", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -9865,8 +9865,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677693593105, - "contentHash": "1ebf52493547998daf24e0e5dddf5f11", + "lastModificationDate": 1677762934421, + "contentHash": "0e06ea68c392ae7f3054cf79fd1c1813", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index df2402f7..64c97d97 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -28,7 +28,6 @@ contract ContangoWand is AccessControl { mapping(bytes6 => mapping(bytes6 => DataTypes.Debt)) public debt; DataTypes.Debt public defaultDebtLimits; - uint32 public defaultRatio; constructor( ICauldron contangoCauldron_, @@ -102,7 +101,7 @@ contract ContangoWand is AccessControl { AccessControl(address(series_.fyToken)).grantRole(IFYToken.mint.selector, address(contangoLadle)); AccessControl(address(series_.fyToken)).grantRole(IFYToken.burn.selector, address(contangoLadle)); - + AccessControl(address(series_.fyToken)).grantRole(IFYToken.burn.selector, address(contangoWitch)); contangoCauldron.addSeries(seriesId, series_.baseId, series_.fyToken); @@ -112,20 +111,22 @@ contract ContangoWand is AccessControl { function setRatio(bytes6 baseId, bytes6 ilkId, uint32 ratio_) external auth { // If the ilkId is a series and boundaries are not set, set ratio to the default uint32 bound_ = ratio[baseId][ilkId]; - if (bound_ == 0 && yieldCauldron.series(ilkId).fyToken != IFYToken(address(0))) { - ratio[baseId][ilkId] = bound_ = defaultRatio; + if (bound_ == 0) { + bound_ = ratio[baseId][yieldCauldron.series(ilkId).baseId]; + } + if (bound_ == 0) { + bound_ = yieldCauldron.spotOracles(baseId, ilkId).ratio; + } + if (bound_ == 0) { + bound_ = yieldCauldron.spotOracles(baseId, yieldCauldron.series(ilkId).baseId).ratio; } + require(bound_ > 0, "Default ratio not set"); require(ratio_ >= bound_, "Ratio out of bounds"); contangoCauldron.setSpotOracle(baseId, ilkId, compositeOracle, ratio_); } - /// @notice Set the default ratio - function setDefaultRatio(uint32 ratio_) external auth { - defaultRatio = ratio_; - } - /// @notice Bound ratio for a given asset pair function boundRatio(bytes6 baseId, bytes6 ilkId, uint32 ratio_) external auth { ratio[baseId][ilkId] = ratio_; @@ -136,6 +137,8 @@ contract ContangoWand is AccessControl { contangoCauldron.addIlks(seriesId, ilkIds); } + // TODO kill + function _getDebtDecimals(bytes6 baseId, bytes6 ilkId) internal view returns (uint8 dec) { // If the debt is already set in the cauldron, we use the decimals from there // Otherwise, we use the decimals of the base @@ -152,11 +155,15 @@ contract ContangoWand is AccessControl { debt[baseId][ilkId] = DataTypes.Debt({max: max, min: min, dec: _getDebtDecimals(baseId, ilkId), sum: 0}); } + // TODO kill + /// @notice Set the default debt limits function setDefaultDebtLimits(uint96 max, uint24 min) external auth { defaultDebtLimits = DataTypes.Debt({max: max, min: min, dec: 0, sum: 0}); } + // TODO index bounds by baseId on the ilk side + /// @notice Set the debt limits for a given asset pair in the Cauldron, within bounds function setDebtLimits(bytes6 baseId, bytes6 ilkId, uint96 max, uint24 min) external auth { // If the ilkId is a series and boundaries are not set, set them to default values @@ -207,6 +214,8 @@ contract ContangoWand is AccessControl { } } + // TODO re-instate check with try-catching or something + /// @notice Set a path in the Composite oracle, as long as the path is not overwriting anything function setCompositeOraclePath(bytes6 baseId, bytes6 quoteId, bytes6[] calldata path) external auth { // This doesn't work because of the way Solidity handles arrays @@ -242,6 +251,8 @@ contract ContangoWand is AccessControl { _addJoin(assetId, yieldLadle.joins(assetId)); } + // Maybe kill this + /// @notice Add join to the Ladle. /// @dev These will often be used to hold fyToken, so it doesn't seem possible to put boundaries. However, it seems low risk. Famous last words. function addJoin(bytes6 assetId, IJoin join) external auth { @@ -258,6 +269,8 @@ contract ContangoWand is AccessControl { AccessControl(address(join)).grantRole(IJoin.exit.selector, address(contangoWitch)); } + // TODO Maybe check if the join exists before deploying? + function deployJoin(bytes6 assetId) external auth returns (IJoin join) { address asset = contangoCauldron.assets(assetId); require(asset != address(0), "Asset not known to the Cauldron"); diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 1fd78dcf..073c8bc4 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -65,7 +65,6 @@ contract ContangoWandTest is Test, TestConstants { AccessControl(address(contangoCauldron)).grantRole(Cauldron.addIlks.selector, address(wand)); wand.grantRole(wand.setRatio.selector, address(this)); wand.grantRole(wand.boundRatio.selector, address(this)); - wand.grantRole(wand.setDefaultRatio.selector, address(this)); wand.grantRole(wand.setDebtLimits.selector, address(this)); wand.grantRole(wand.setDefaultDebtLimits.selector, address(this)); wand.grantRole(wand.boundDebtLimits.selector, address(this)); @@ -184,44 +183,58 @@ contract ContangoWandTest is Test, TestConstants { wand.setRatio(USDT, FYETH2306, 1.4e6); } - function testSetRatio_NoDefaultRatio() public { - vm.expectRevert("Default ratio not set"); - wand.setRatio(USDT, FYETH2306, 1.4e6); + function testSetRatio_BoundsSetForSeriesId() public { + wand.addAsset(USDT); + uint32 bound = 1.3e6; + wand.boundRatio(USDT, FYETH2306, bound); + + vm.expectRevert("Ratio out of bounds"); + wand.setRatio(USDT, FYETH2306, bound - 1); + + wand.setRatio(USDT, FYETH2306, bound); + DataTypes.SpotOracle memory contangoOracle = contangoCauldron.spotOracles(USDT, FYETH2306); + assertEq(address(contangoOracle.oracle), address(compositeOracle), "oracle"); + assertEq(contangoOracle.ratio, bound, "ratio"); } - function testSetRatio() public { + function testSetRatio_BoundsSetForSeriesIdBaseId() public { wand.addAsset(USDT); - wand.setDefaultRatio(1.05e6); + uint32 bound = 1.3e6; + wand.boundRatio(USDT, ETH, bound); - wand.setRatio(USDT, FYETH2306, 1.4e6); + vm.expectRevert("Ratio out of bounds"); + wand.setRatio(USDT, FYETH2306, bound - 1); + wand.setRatio(USDT, FYETH2306, bound); DataTypes.SpotOracle memory contangoOracle = contangoCauldron.spotOracles(USDT, FYETH2306); - assertEq(address(contangoOracle.oracle), address(compositeOracle), "oracle"); - assertEq(contangoOracle.ratio, 1.4e6, "ratio"); + assertEq(contangoOracle.ratio, bound, "ratio"); } - function testSetRatio_LessThanDefaultBounds() public { + function testSetRatio_YieldCauldronAsBounds_BoundsSetForAssetId() public { wand.addAsset(USDT); - - uint32 defaultRatio = 1.5e6; - wand.setDefaultRatio(defaultRatio); + uint32 bound = 1.4e6; vm.expectRevert("Ratio out of bounds"); - wand.setRatio(USDT, FYETH2306, defaultRatio - 1); + wand.setRatio(USDT, ETH, bound - 1); + + wand.setRatio(USDT, ETH, bound); + DataTypes.SpotOracle memory contangoOracle = contangoCauldron.spotOracles(USDT, ETH); + assertEq(address(contangoOracle.oracle), address(compositeOracle), "oracle"); + assertEq(contangoOracle.ratio, bound, "ratio"); } - function testSetRatio_OverrideBoundsForPair() public { + function testSetRatio_YieldCauldronAsBounds_BoundsSetForSeriesIdBaseId() public { wand.addAsset(USDT); - wand.setDefaultRatio(1.4e6); + uint32 bound = 1.4e6; - wand.boundRatio(USDT, FYETH2306, 1.05e6); - wand.setRatio(USDT, FYETH2306, 1.05e6); + vm.expectRevert("Ratio out of bounds"); + wand.setRatio(USDT, FYETH2306, bound - 1); + wand.setRatio(USDT, FYETH2306, bound); DataTypes.SpotOracle memory contangoOracle = contangoCauldron.spotOracles(USDT, FYETH2306); - assertEq(address(contangoOracle.oracle), address(compositeOracle), "oracle"); - assertEq(contangoOracle.ratio, 1.05e6, "ratio"); + assertEq(contangoOracle.ratio, bound, "ratio"); } function testAddIlks_Auth() public { @@ -234,7 +247,6 @@ contract ContangoWandTest is Test, TestConstants { wand.addAsset(USDT); wand.copyLendingOracle(USDT); wand.addSeries(FYUSDT2306); - wand.setDefaultRatio(1.05e6); wand.setRatio(USDT, FYETH2306, 1.4e6); bytes6[] memory ilkIds = new bytes6[](1); From 4054a697c9dc772ff6b1af6024648d66685ec787 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Thu, 2 Mar 2023 15:09:46 +0000 Subject: [PATCH 25/32] Remove defaultDebtLimits --- cache/solidity-files-cache.json | 8 +- src/other/contango/ContangoWand.sol | 51 ++++------- src/test/other/contango/ContangoWand.t.sol | 99 ++++++++++++++++------ 3 files changed, 97 insertions(+), 61 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index a98e61fb..bd6b7986 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -6667,8 +6667,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677762950451, - "contentHash": "89ec914b660184a565bd471395d313d5", + "lastModificationDate": 1677769790708, + "contentHash": "1a0a578f7dc55136d7a5db0449c6e360", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -9865,8 +9865,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677762934421, - "contentHash": "0e06ea68c392ae7f3054cf79fd1c1813", + "lastModificationDate": 1677769766173, + "contentHash": "2c1050e7af08b667ea2c50dab3bca0b2", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index 64c97d97..d26ec44a 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -27,8 +27,6 @@ contract ContangoWand is AccessControl { mapping(bytes6 => mapping(bytes6 => uint32)) public ratio; mapping(bytes6 => mapping(bytes6 => DataTypes.Debt)) public debt; - DataTypes.Debt public defaultDebtLimits; - constructor( ICauldron contangoCauldron_, ICauldron yieldCauldron_, @@ -137,48 +135,35 @@ contract ContangoWand is AccessControl { contangoCauldron.addIlks(seriesId, ilkIds); } - // TODO kill - - function _getDebtDecimals(bytes6 baseId, bytes6 ilkId) internal view returns (uint8 dec) { - // If the debt is already set in the cauldron, we use the decimals from there - // Otherwise, we use the decimals of the base - DataTypes.Debt memory cauldronDebt_ = ICauldron(address(contangoCauldron)).debt(baseId, ilkId); - if (cauldronDebt_.sum != 0) { - dec = cauldronDebt_.dec; - } else { - dec = IERC20Metadata(contangoCauldron.assets(baseId)).decimals(); - } - } - /// @notice Bound debt limits for a given asset pair - function boundDebtLimits(bytes6 baseId, bytes6 ilkId, uint96 max, uint24 min) external auth { - debt[baseId][ilkId] = DataTypes.Debt({max: max, min: min, dec: _getDebtDecimals(baseId, ilkId), sum: 0}); - } - - // TODO kill - - /// @notice Set the default debt limits - function setDefaultDebtLimits(uint96 max, uint24 min) external auth { - defaultDebtLimits = DataTypes.Debt({max: max, min: min, dec: 0, sum: 0}); + function boundDebtLimits(bytes6 baseId, bytes6 ilkId, uint96 max, uint24 min, uint8 dec) external auth { + debt[baseId][ilkId] = DataTypes.Debt({max: max, min: min, dec: dec, sum: 0}); } // TODO index bounds by baseId on the ilk side + // TODO add dec as parameter and check bounds on full amount /// @notice Set the debt limits for a given asset pair in the Cauldron, within bounds - function setDebtLimits(bytes6 baseId, bytes6 ilkId, uint96 max, uint24 min) external auth { + function setDebtLimits(bytes6 baseId, bytes6 ilkId, uint96 max, uint24 min, uint8 dec) external auth { // If the ilkId is a series and boundaries are not set, set them to default values DataTypes.Debt memory bounds_ = debt[baseId][ilkId]; - - if (bounds_.max == 0 && bounds_.min == 0) { - bounds_ = defaultDebtLimits; - require(bounds_.max > 0, "Default debt limits not set"); - bounds_.dec = _getDebtDecimals(baseId, ilkId); + if (bounds_.max == 0) { + bounds_ = debt[baseId][yieldCauldron.series(ilkId).baseId]; } + if (bounds_.max == 0) { + bounds_ = yieldCauldron.debt(baseId, ilkId); + } + if (bounds_.max == 0) { + bounds_ = yieldCauldron.debt(baseId, yieldCauldron.series(ilkId).baseId); + } + + uint256 paramMultiplier = 10 ** dec; + uint256 boundsMultiplier = 10 ** bounds_.dec; - require(max <= bounds_.max, "Max debt out of bounds"); - require(min >= bounds_.min, "Min debt out of bounds"); + require(max * paramMultiplier <= bounds_.max * boundsMultiplier, "Max debt out of bounds"); + require(min * paramMultiplier >= bounds_.min * boundsMultiplier, "Min debt out of bounds"); - contangoCauldron.setDebtLimits(baseId, ilkId, max, min, bounds_.dec); + contangoCauldron.setDebtLimits(baseId, ilkId, max, min, dec); } /// ----------------- Oracle Governance ----------------- diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 073c8bc4..6dd0a172 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -66,7 +66,6 @@ contract ContangoWandTest is Test, TestConstants { wand.grantRole(wand.setRatio.selector, address(this)); wand.grantRole(wand.boundRatio.selector, address(this)); wand.grantRole(wand.setDebtLimits.selector, address(this)); - wand.grantRole(wand.setDefaultDebtLimits.selector, address(this)); wand.grantRole(wand.boundDebtLimits.selector, address(this)); AccessControl(address(yieldSpaceOracle)).grantRole(YieldSpaceMultiOracle.setSource.selector, address(wand)); wand.grantRole(wand.setYieldSpaceOracleSource.selector, address(this)); @@ -260,52 +259,104 @@ contract ContangoWandTest is Test, TestConstants { function testSetDebtLimits_Auth() public { vm.prank(bob); vm.expectRevert("Access denied"); - wand.setDebtLimits(USDT, FYETH2306, 500_000, 40); + wand.setDebtLimits(USDT, FYETH2306, 500_000, 40, 6); } - function testSetDebtLimits_NoDefaultDebtLimits() public { - vm.expectRevert("Default debt limits not set"); - wand.setDebtLimits(USDT, FYETH2306, 500_000, 40); + function testSetDebtLimits_BoundsSetForSeriesId() public { + wand.addAsset(USDT); + uint96 max = 500_000; + uint24 min = 40; + uint8 dec = 6; + wand.boundDebtLimits(USDT, FYETH2306, max, min, dec); + + vm.expectRevert("Max debt out of bounds"); + wand.setDebtLimits(USDT, FYETH2306, max + 1, min, dec); + + vm.expectRevert("Min debt out of bounds"); + wand.setDebtLimits(USDT, FYETH2306, max, min - 1, dec); + + wand.setDebtLimits(USDT, FYETH2306, max, min, dec); + DataTypes.Debt memory contangoDebtLimits = contangoCauldron.debt(USDT, FYETH2306); + assertEq(contangoDebtLimits.max, max, "max"); + assertEq(contangoDebtLimits.min, min, "min"); + assertEq(contangoDebtLimits.dec, dec, "dec"); } - function testSetDebtLimits() public { + function testSetDebtLimits_BoundsSetForSeriesIdBaseId() public { wand.addAsset(USDT); - wand.setDefaultDebtLimits(500_000, 40); + uint96 max = 500_000; + uint24 min = 40; + uint8 dec = 6; + wand.boundDebtLimits(USDT, ETH, max, min, dec); - wand.setDebtLimits(USDT, FYETH2306, 500_000, 40); + vm.expectRevert("Max debt out of bounds"); + wand.setDebtLimits(USDT, FYETH2306, max + 1, min, dec); - DataTypes.Debt memory contangoDebtLimits = contangoCauldron.debt(USDT, FYETH2306); + vm.expectRevert("Min debt out of bounds"); + wand.setDebtLimits(USDT, FYETH2306, max, min - 1, dec); - assertEq(contangoDebtLimits.max, 500_000, "max"); - assertEq(contangoDebtLimits.min, 40, "min"); - assertEq(contangoDebtLimits.dec, 6, "dec"); + wand.setDebtLimits(USDT, FYETH2306, max, min, dec); + DataTypes.Debt memory contangoDebtLimits = contangoCauldron.debt(USDT, FYETH2306); + assertEq(contangoDebtLimits.max, max, "max"); + assertEq(contangoDebtLimits.min, min, "min"); + assertEq(contangoDebtLimits.dec, dec, "dec"); } - function testSetDebtLimits_OutsideDefaultLimits() public { + function testSetDebtLimits_YieldCauldronAsBounds_BoundsSetForAssetId() public { wand.addAsset(USDT); - - wand.setDefaultDebtLimits(500_000, 40); + uint96 max = 100_000; + uint24 min = 100; + uint8 dec = 6; vm.expectRevert("Max debt out of bounds"); - wand.setDebtLimits(USDT, FYETH2306, 500_000 + 1, 40); + wand.setDebtLimits(USDT, ETH, max + 1, min, dec); vm.expectRevert("Min debt out of bounds"); - wand.setDebtLimits(USDT, FYETH2306, 500_000, 40 - 1); + wand.setDebtLimits(USDT, ETH, max, min - 1, dec); + + wand.setDebtLimits(USDT, ETH, max, min, dec); + DataTypes.Debt memory contangoDebtLimits = contangoCauldron.debt(USDT, ETH); + assertEq(contangoDebtLimits.max, max, "max"); + assertEq(contangoDebtLimits.min, min, "min"); + assertEq(contangoDebtLimits.dec, dec, "dec"); } - function testSetDebtLimits_OverrideLimitsForPair() public { + function testSetDebtLimits_YieldCauldronAsBounds_BoundsSetForSeriesIdBaseId() public { wand.addAsset(USDT); - wand.setDefaultDebtLimits(500_000, 40); + uint96 max = 100_000; + uint24 min = 100; + uint8 dec = 6; - wand.boundDebtLimits(USDT, FYETH2306, 1_000_000, 20); + vm.expectRevert("Max debt out of bounds"); + wand.setDebtLimits(USDT, FYETH2306, max + 1, min, dec); - wand.setDebtLimits(USDT, FYETH2306, 1_000_000, 20); + vm.expectRevert("Min debt out of bounds"); + wand.setDebtLimits(USDT, FYETH2306, max, min - 1, dec); + wand.setDebtLimits(USDT, FYETH2306, max, min, dec); DataTypes.Debt memory contangoDebtLimits = contangoCauldron.debt(USDT, FYETH2306); + assertEq(contangoDebtLimits.max, max, "max"); + assertEq(contangoDebtLimits.min, min, "min"); + assertEq(contangoDebtLimits.dec, dec, "dec"); + } + + function testSetDebtLimits_OverrideDecPrecision() public { + wand.addAsset(USDT); + uint96 max = 100_000_0; + uint24 min = 100_0; + uint8 dec = 5; + + vm.expectRevert("Max debt out of bounds"); + wand.setDebtLimits(USDT, ETH, max + 1, min, dec); + + vm.expectRevert("Min debt out of bounds"); + wand.setDebtLimits(USDT, ETH, max, min - 1, dec); - assertEq(contangoDebtLimits.max, 1_000_000, "max"); - assertEq(contangoDebtLimits.min, 20, "min"); - assertEq(contangoDebtLimits.dec, 6, "dec"); + wand.setDebtLimits(USDT, ETH, max, min, dec); + DataTypes.Debt memory contangoDebtLimits = contangoCauldron.debt(USDT, ETH); + assertEq(contangoDebtLimits.max, max, "max"); + assertEq(contangoDebtLimits.min, min, "min"); + assertEq(contangoDebtLimits.dec, dec, "dec"); } function testSetYieldSpaceOracleSource_Auth() public { From 17ff990140a5cc16ccafb72cd9e4ad0843c87b54 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Thu, 2 Mar 2023 15:28:05 +0000 Subject: [PATCH 26/32] Assing permissions when copying Joins/FYTokens --- cache/solidity-files-cache.json | 8 ++--- package.json | 3 +- src/other/contango/ContangoWand.sol | 11 ++----- src/test/other/contango/ContangoWand.t.sol | 34 +++++++++++++++++----- 4 files changed, 34 insertions(+), 22 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index bd6b7986..8a92faf6 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -6667,8 +6667,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677769790708, - "contentHash": "1a0a578f7dc55136d7a5db0449c6e360", + "lastModificationDate": 1677770673333, + "contentHash": "a8e4f89f716e36cccc8e10685031ba79", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -9865,8 +9865,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677769766173, - "contentHash": "2c1050e7af08b667ea2c50dab3bca0b2", + "lastModificationDate": 1677770847806, + "contentHash": "63240febc8e859d47e847c238794200a", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/package.json b/package.json index 882d4e68..087c32b1 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,8 @@ "scripts": { "forge:build": "forge build", "forge:test": "forge test -vvv", - "forge:snapshot": "forge snapshot" + "forge:snapshot": "forge snapshot", + "forge:coverage": "forge coverage --report lcov && genhtml lcov.info -o report --branch-coverage --legend --dark-mode && open report/index.html" }, "repository": { "url": "git+https://github.com/yieldprotocol/vault-v2.git", diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index d26ec44a..07749489 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -232,18 +232,11 @@ contract ContangoWand is AccessControl { } function _copyJoin(bytes6 assetId) internal { - // TODO add checks + IJoin join = yieldLadle.joins(assetId); + require(address(join) != address(0), "Join not known to the Yield Ladle"); _addJoin(assetId, yieldLadle.joins(assetId)); } - // Maybe kill this - - /// @notice Add join to the Ladle. - /// @dev These will often be used to hold fyToken, so it doesn't seem possible to put boundaries. However, it seems low risk. Famous last words. - function addJoin(bytes6 assetId, IJoin join) external auth { - _addJoin(assetId, join); - } - function _addJoin(bytes6 assetId, IJoin join) internal { contangoLadle.addJoin(assetId, join); diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 6dd0a172..759a5c89 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -80,7 +80,7 @@ contract ContangoWandTest is Test, TestConstants { AccessControl(address(contangoLadle)).grantRole(ILadle.addToken.selector, address(wand)); wand.grantRole(wand.addToken.selector, address(this)); AccessControl(address(contangoLadle)).grantRole(ILadle.addJoin.selector, address(wand)); - wand.grantRole(wand.addJoin.selector, address(this)); + wand.grantRole(wand.copyJoin.selector, address(this)); vm.stopPrank(); } @@ -171,9 +171,16 @@ contract ContangoWandTest is Test, TestConstants { DataTypes.Series memory yieldSeries = yieldCauldron.series(FYUSDT2306); DataTypes.Series memory contangoSeries = contangoCauldron.series(FYUSDT2306); - assertEq(address(yieldSeries.fyToken), address(contangoSeries.fyToken), "fyToken"); + AccessControl fyToken = AccessControl(address(yieldSeries.fyToken)); + + assertEq(address(contangoSeries.fyToken), address(fyToken), "fyToken"); assertEq(yieldSeries.baseId, contangoSeries.baseId, "baseId"); assertEq(yieldSeries.maturity, contangoSeries.maturity, "maturity"); + + assertTrue(fyToken.hasRole(IFYToken.mint.selector, address(contangoLadle)), "contango ladle can mint"); + assertTrue(fyToken.hasRole(IFYToken.burn.selector, address(contangoLadle)), "contango ladle can burn"); + + assertTrue(fyToken.hasRole(IFYToken.burn.selector, address(contangoWitch)), "contango witch can burn"); } function testSetRatio_Auth() public { @@ -484,19 +491,30 @@ contract ContangoWandTest is Test, TestConstants { assertTrue(contangoLadle.tokens(0xad1983745D6c739537fEaB5bed45795f47A940b3), "yield integration"); } - function testAddJoin_Auth() public { + function testCopyJoin_Auth() public { vm.prank(bob); vm.expectRevert("Access denied"); - wand.addJoin(FYUSDT2306, IJoin(address(0))); + wand.copyJoin(FYUSDT2306); } - function testAddJoin() public { + function testCopyJoin_Invalid() public { + vm.expectRevert("Join not known to the Yield Ladle"); + wand.copyJoin("meh"); + } + + function testCopyJoin() public { wand.addAsset(USDT); - IJoin join = yieldLadle.joins(USDT); + AccessControl join = AccessControl(address(yieldLadle.joins(USDT))); + + wand.copyJoin(USDT); + + assertEq(address(contangoLadle.joins(USDT)), address(join), "join"); - wand.addJoin(USDT, join); + assertTrue(join.hasRole(IJoin.join.selector, address(contangoLadle)), "contango ladle can join"); + assertTrue(join.hasRole(IJoin.exit.selector, address(contangoLadle)), "contango ladle can exit"); - assertEq(address(contangoLadle.joins(USDT)), address(join), "pool"); + assertTrue(join.hasRole(IJoin.join.selector, address(contangoWitch)), "contango witch can join"); + assertTrue(join.hasRole(IJoin.exit.selector, address(contangoWitch)), "contango witch can exit"); } } From 3d58390bcd22fa9f4755a2626306b1badc9bc942 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Thu, 2 Mar 2023 18:12:49 +0000 Subject: [PATCH 27/32] Deploy Join --- cache/solidity-files-cache.json | 12 ++++----- src/other/contango/ContangoWand.sol | 3 ++- src/test/other/contango/ContangoWand.t.sol | 31 ++++++++++++++++++++++ 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 8a92faf6..4c00ef68 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -3200,7 +3200,7 @@ } }, "src/interfaces/ILadle.sol": { - "lastModificationDate": 1677585086205, + "lastModificationDate": 1677603945704, "contentHash": "993fb6448ab02c216c47d7cdf496b36e", "sourceName": "src/interfaces/ILadle.sol", "solcConfig": { @@ -3258,7 +3258,7 @@ } }, "src/interfaces/ILadleGov.sol": { - "lastModificationDate": 1677585086223, + "lastModificationDate": 1677603936769, "contentHash": "02488b6ad21a07aa8d889a60faed4166", "sourceName": "src/interfaces/ILadleGov.sol", "solcConfig": { @@ -6667,8 +6667,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677770673333, - "contentHash": "a8e4f89f716e36cccc8e10685031ba79", + "lastModificationDate": 1677771063970, + "contentHash": "fe6cb26d3422534dfea3136238a61ba9", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -9865,8 +9865,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677770847806, - "contentHash": "63240febc8e859d47e847c238794200a", + "lastModificationDate": 1677771402904, + "contentHash": "af1bb22be74da0807669cbf8b4ff7951", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index 07749489..18d673b9 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -251,7 +251,8 @@ contract ContangoWand is AccessControl { function deployJoin(bytes6 assetId) external auth returns (IJoin join) { address asset = contangoCauldron.assets(assetId); - require(asset != address(0), "Asset not known to the Cauldron"); + require(asset != address(0), "Asset not known to the Contango Cauldron"); + require(contangoLadle.joins(assetId) == IJoin(address(0)), "Join already known to the Contango Ladle"); Join join_ = new Join(asset); join_.grantRole(join_.ROOT(), yieldTimelock); diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 759a5c89..f74ccd5f 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -81,6 +81,7 @@ contract ContangoWandTest is Test, TestConstants { wand.grantRole(wand.addToken.selector, address(this)); AccessControl(address(contangoLadle)).grantRole(ILadle.addJoin.selector, address(wand)); wand.grantRole(wand.copyJoin.selector, address(this)); + wand.grantRole(wand.deployJoin.selector, address(this)); vm.stopPrank(); } @@ -517,4 +518,34 @@ contract ContangoWandTest is Test, TestConstants { assertTrue(join.hasRole(IJoin.join.selector, address(contangoWitch)), "contango witch can join"); assertTrue(join.hasRole(IJoin.exit.selector, address(contangoWitch)), "contango witch can exit"); } + + function testDeployJoin_Auth() public { + vm.prank(bob); + vm.expectRevert("Access denied"); + wand.deployJoin(FYUSDT2306); + } + + function testDeployJoin_InvalidAsset() public { + vm.expectRevert("Asset not known to the Contango Cauldron"); + wand.deployJoin("meh"); + } + + function testDeployJoin_JoinExists() public { + vm.expectRevert("Join already known to the Contango Ladle"); + wand.deployJoin(ETH); + } + + function testDeployJoin() public { + wand.addAsset(USDT); + + AccessControl join = AccessControl(address(wand.deployJoin(USDT))); + + assertEq(address(contangoLadle.joins(USDT)), address(join), "join"); + + assertTrue(join.hasRole(IJoin.join.selector, address(contangoLadle)), "contango ladle can join"); + assertTrue(join.hasRole(IJoin.exit.selector, address(contangoLadle)), "contango ladle can exit"); + + assertTrue(join.hasRole(IJoin.join.selector, address(contangoWitch)), "contango witch can join"); + assertTrue(join.hasRole(IJoin.exit.selector, address(contangoWitch)), "contango witch can exit"); + } } From ad74505da3c0828a90459983b6c24fc8a9862f61 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Thu, 2 Mar 2023 18:39:39 +0000 Subject: [PATCH 28/32] ConfigureWitch --- cache/solidity-files-cache.json | 11 +++-- src/other/contango/ContangoWand.sol | 49 ++++++++++++++++++--- src/test/other/contango/ContangoWand.t.sol | 51 ++++++++++++++++++++++ 3 files changed, 102 insertions(+), 9 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 4c00ef68..87ab42fc 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -6667,8 +6667,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677771063970, - "contentHash": "fe6cb26d3422534dfea3136238a61ba9", + "lastModificationDate": 1677782297611, + "contentHash": "67c87b27a8136cc13fd0c1d67172395f", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -6734,6 +6734,9 @@ ], "versionRequirement": ">=0.8.13", "artifacts": { + "CauldronUtils": { + "0.8.15+commit.e14f2714.Darwin.appleclang": "ContangoWand.sol/CauldronUtils.json" + }, "ContangoWand": { "0.8.15+commit.e14f2714.Darwin.appleclang": "ContangoWand.sol/ContangoWand.json" } @@ -9865,8 +9868,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677771402904, - "contentHash": "af1bb22be74da0807669cbf8b4ff7951", + "lastModificationDate": 1677782327313, + "contentHash": "1a1d208bdf91f97b16bf7ec57b506e59", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index 18d673b9..745dd98c 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -15,6 +15,11 @@ import "@yield-protocol/utils-v2/src/access/AccessControl.sol"; /// @title A contract that allows configuring the cauldron and ladle within bounds contract ContangoWand is AccessControl { + using CauldronUtils for ICauldron; + using Math for *; + + uint256 public constant WAD = 1e18; + ICauldron public immutable contangoCauldron; ICauldron public immutable yieldCauldron; ILadle public immutable contangoLadle; @@ -24,6 +29,13 @@ contract ContangoWand is AccessControl { address public immutable yieldTimelock; IWitch public immutable contangoWitch; + struct WitchDefaults { + uint32 duration; + uint64 vaultProportion; + uint64 intialDiscount; + } + + WitchDefaults public witchDefaults; mapping(bytes6 => mapping(bytes6 => uint32)) public ratio; mapping(bytes6 => mapping(bytes6 => DataTypes.Debt)) public debt; @@ -190,11 +202,7 @@ contract ContangoWand is AccessControl { require(address(pool_) != address(0), "YieldSpace oracle not set"); compositeOracle.setSource(baseId, ilkId, yieldSpaceOracle); } else if (yieldCauldron.assets(ilkId) != address(0)) { - DataTypes.SpotOracle memory spotOracle_ = yieldCauldron.spotOracles(baseId, ilkId); - if (address(spotOracle_.oracle) == address(0)) { - spotOracle_ = yieldCauldron.spotOracles(ilkId, baseId); - } - require(address(spotOracle_.oracle) != address(0), "Spot oracle not known to the Yield Cauldron"); + DataTypes.SpotOracle memory spotOracle_ = yieldCauldron.lookupSpotOracle(baseId, ilkId); compositeOracle.setSource(baseId, ilkId, spotOracle_.oracle); } } @@ -263,6 +271,10 @@ contract ContangoWand is AccessControl { /// ----------------- Witch Governance ----------------- + function setWitchDefaults(uint32 duration, uint64 vaultProportion, uint64 intialDiscount) external auth { + witchDefaults = WitchDefaults(duration, vaultProportion, intialDiscount); + } + function setLineAndLimit( bytes6 ilkId, bytes6 baseId, @@ -274,7 +286,34 @@ contract ContangoWand is AccessControl { contangoWitch.setLineAndLimit(ilkId, baseId, duration, vaultProportion, collateralProportion, max); } + function configureWitch(bytes6 ilkId, bytes6 baseId, uint128 max) external auth { + DataTypes.SpotOracle memory spotOracle_ = contangoCauldron.lookupSpotOracle(baseId, ilkId); + + contangoWitch.setLineAndLimit({ + ilkId: ilkId, + baseId: baseId, + duration: witchDefaults.duration, + vaultProportion: witchDefaults.vaultProportion, + collateralProportion: uint64((WAD + witchDefaults.intialDiscount).wdivup(uint256(spotOracle_.ratio) * 10 ** 12)), + max: max + }); + } + function setAuctioneerReward(uint256 auctioneerReward) external auth { contangoWitch.setAuctioneerReward(auctioneerReward); } } + +library CauldronUtils { + function lookupSpotOracle(ICauldron cauldron, bytes6 baseId, bytes6 ilkId) + internal + view + returns (DataTypes.SpotOracle memory spotOracle_) + { + spotOracle_ = cauldron.spotOracles(baseId, ilkId); + if (address(spotOracle_.oracle) == address(0)) { + spotOracle_ = cauldron.spotOracles(ilkId, baseId); + } + require(address(spotOracle_.oracle) != address(0), "Spot oracle not known to the Cauldron"); + } +} diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index f74ccd5f..60a4e238 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -82,6 +82,10 @@ contract ContangoWandTest is Test, TestConstants { AccessControl(address(contangoLadle)).grantRole(ILadle.addJoin.selector, address(wand)); wand.grantRole(wand.copyJoin.selector, address(this)); wand.grantRole(wand.deployJoin.selector, address(this)); + AccessControl(address(contangoWitch)).grantRole(IWitchGov.setLineAndLimit.selector, address(wand)); + wand.grantRole(wand.setLineAndLimit.selector, address(this)); + wand.grantRole(wand.setWitchDefaults.selector, address(this)); + wand.grantRole(wand.configureWitch.selector, address(this)); vm.stopPrank(); } @@ -548,4 +552,51 @@ contract ContangoWandTest is Test, TestConstants { assertTrue(join.hasRole(IJoin.join.selector, address(contangoWitch)), "contango witch can join"); assertTrue(join.hasRole(IJoin.exit.selector, address(contangoWitch)), "contango witch can exit"); } + + function testSetLineAndLimit_Auth() public { + vm.prank(bob); + vm.expectRevert("Access denied"); + wand.setLineAndLimit(FYUSDT2306, ETH, 10 minutes, 0.5e18, 0.75e18, 500_000e6); + } + + function testSetLineAndLimit() public { + wand.setLineAndLimit(FYUSDT2306, ETH, 10 minutes, 0.5e18, 0.75e18, 500_000e6); + + DataTypes.Line memory line = contangoWitch.lines(FYUSDT2306, ETH); + assertEq(line.duration, 10 minutes, "duration"); + assertEq(line.vaultProportion, 0.5e18, "vaultProportion"); + assertEq(line.collateralProportion, 0.75e18, "collateralProportion"); + DataTypes.Limits memory limits = contangoWitch.limits(FYUSDT2306, ETH); + assertEq(limits.max, 500_000e6, "max"); + } + + function testSetWitchDefaults_Auth() public { + vm.prank(bob); + vm.expectRevert("Access denied"); + wand.setWitchDefaults(10 minutes, 0.5e18, 0.05e18); + } + + function testSetWitchDefaults() public { + wand.setWitchDefaults(10 minutes, 0.5e18, 0.05e18); + + (uint32 duration, uint64 vaultProportion, uint64 intialDiscount) = wand.witchDefaults(); + assertEq(duration, 10 minutes, "duration"); + assertEq(vaultProportion, 0.5e18, "vaultProportion"); + assertEq(intialDiscount, 0.05e18, "intialDiscount"); + } + + function testConfigureWitch() public { + wand.setLineAndLimit(FYUSDC2306, ETH, 60 minutes, 1e18, 1e18, 1_000_000e6); + + wand.setWitchDefaults(10 minutes, 0.5e18, 0.05e18); + + wand.configureWitch(FYUSDC2306, ETH, 500_000e6); + + DataTypes.Line memory line = contangoWitch.lines(FYUSDC2306, ETH); + assertEq(line.duration, 10 minutes, "duration"); + assertEq(line.vaultProportion, 0.5e18, "vaultProportion"); + assertEq(line.collateralProportion, 0.75e18, "collateralProportion"); + DataTypes.Limits memory limits = contangoWitch.limits(FYUSDC2306, ETH); + assertEq(limits.max, 500_000e6, "max"); + } } From 8a945426d4e17c2309b6f3131c259d9c62cb8b4d Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Thu, 2 Mar 2023 18:41:40 +0000 Subject: [PATCH 29/32] SetAuctioneerReward --- cache/solidity-files-cache.json | 8 ++++---- src/interfaces/IWitchGov.sol | 2 ++ src/test/other/contango/ContangoWand.t.sol | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 87ab42fc..1757b215 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -3481,8 +3481,8 @@ } }, "src/interfaces/IWitchGov.sol": { - "lastModificationDate": 1677692998745, - "contentHash": "8ac63c848c2a23972234964a105b17e1", + "lastModificationDate": 1677782466516, + "contentHash": "c35f2c5fc1c83ec970e1a382ea9c6fa1", "sourceName": "src/interfaces/IWitchGov.sol", "solcConfig": { "settings": { @@ -9868,8 +9868,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677782327313, - "contentHash": "1a1d208bdf91f97b16bf7ec57b506e59", + "lastModificationDate": 1677782488111, + "contentHash": "26cb81eafdb8cf40d59dde31fcc397be", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/interfaces/IWitchGov.sol b/src/interfaces/IWitchGov.sol index 5f89ef56..f11d4945 100644 --- a/src/interfaces/IWitchGov.sol +++ b/src/interfaces/IWitchGov.sol @@ -19,4 +19,6 @@ interface IWitchGov { function setProtected(address owner, bool _protected) external; function setAuctioneerReward(uint256 auctioneerReward_) external; + + function auctioneerReward() external returns (uint256); } diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index 60a4e238..fc0fcb8b 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -86,6 +86,8 @@ contract ContangoWandTest is Test, TestConstants { wand.grantRole(wand.setLineAndLimit.selector, address(this)); wand.grantRole(wand.setWitchDefaults.selector, address(this)); wand.grantRole(wand.configureWitch.selector, address(this)); + AccessControl(address(contangoWitch)).grantRole(IWitchGov.setAuctioneerReward.selector, address(wand)); + wand.grantRole(wand.setAuctioneerReward.selector, address(this)); vm.stopPrank(); } @@ -599,4 +601,16 @@ contract ContangoWandTest is Test, TestConstants { DataTypes.Limits memory limits = contangoWitch.limits(FYUSDC2306, ETH); assertEq(limits.max, 500_000e6, "max"); } + + function testSetAuctioneerReward_Auth() public { + vm.prank(bob); + vm.expectRevert("Access denied"); + wand.setAuctioneerReward(0.02e18); + } + + function testSetAuctioneerReward() public { + wand.setAuctioneerReward(0.02e18); + + assertEq(contangoWitch.auctioneerReward(), 0.02e18, "auctioneerReward"); + } } From adc62988024c1966e9e5d1080568cc53e48b5db8 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Thu, 2 Mar 2023 18:44:24 +0000 Subject: [PATCH 30/32] ignore coverage report --- .gitignore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index f923f84e..853c8338 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,8 @@ crytic-export/ .VsCodeCounter/ # Foundry -out/ \ No newline at end of file +out/ + +# coverage +report/ +lcov.info \ No newline at end of file From b55c6934c4dbf4484158bf567886ffd2ea4c2af2 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Thu, 2 Mar 2023 18:48:05 +0000 Subject: [PATCH 31/32] re-instate check for composite oracle paths --- cache/solidity-files-cache.json | 8 ++++---- src/other/contango/ContangoWand.sol | 14 ++++++-------- src/test/other/contango/ContangoWand.t.sol | 8 ++++---- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 1757b215..23e66f65 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -6667,8 +6667,8 @@ } }, "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677782297611, - "contentHash": "67c87b27a8136cc13fd0c1d67172395f", + "lastModificationDate": 1677782855643, + "contentHash": "80ba0bf0db7f4c713b7b8b6faa5f3f89", "sourceName": "src/other/contango/ContangoWand.sol", "solcConfig": { "settings": { @@ -9868,8 +9868,8 @@ } }, "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677782488111, - "contentHash": "26cb81eafdb8cf40d59dde31fcc397be", + "lastModificationDate": 1677782699671, + "contentHash": "3250af0dc876907da369fbf190154007", "sourceName": "src/test/other/contango/ContangoWand.t.sol", "solcConfig": { "settings": { diff --git a/src/other/contango/ContangoWand.sol b/src/other/contango/ContangoWand.sol index 745dd98c..3a21dc96 100644 --- a/src/other/contango/ContangoWand.sol +++ b/src/other/contango/ContangoWand.sol @@ -152,9 +152,6 @@ contract ContangoWand is AccessControl { debt[baseId][ilkId] = DataTypes.Debt({max: max, min: min, dec: dec, sum: 0}); } - // TODO index bounds by baseId on the ilk side - // TODO add dec as parameter and check bounds on full amount - /// @notice Set the debt limits for a given asset pair in the Cauldron, within bounds function setDebtLimits(bytes6 baseId, bytes6 ilkId, uint96 max, uint24 min, uint8 dec) external auth { // If the ilkId is a series and boundaries are not set, set them to default values @@ -207,13 +204,14 @@ contract ContangoWand is AccessControl { } } - // TODO re-instate check with try-catching or something - /// @notice Set a path in the Composite oracle, as long as the path is not overwriting anything function setCompositeOraclePath(bytes6 baseId, bytes6 quoteId, bytes6[] calldata path) external auth { - // This doesn't work because of the way Solidity handles arrays - // require(compositeOracle.paths(baseId, quoteId, 0) == bytes6(0), "Path already set"); // We check that the first element in the path is empty - compositeOracle.setPath(baseId, quoteId, path); + // This is hideous, but's the only way to check if a path is already set + try compositeOracle.paths(baseId, quoteId, 0) { + revert("Path already set"); + } catch { + compositeOracle.setPath(baseId, quoteId, path); + } } /// ----------------- Ladle Governance ----------------- diff --git a/src/test/other/contango/ContangoWand.t.sol b/src/test/other/contango/ContangoWand.t.sol index fc0fcb8b..26b8728a 100644 --- a/src/test/other/contango/ContangoWand.t.sol +++ b/src/test/other/contango/ContangoWand.t.sol @@ -429,10 +429,10 @@ contract ContangoWandTest is Test, TestConstants { wand.setCompositeOraclePath(USDT, FYETH2306, new bytes6[](0)); } - // function testCompositeOraclePath_InvalidPair() public { - // vm.expectRevert("Path already set"); - // wand.setCompositeOraclePath(USDC, FYETH2306, new bytes6[](0)); - // } + function testCompositeOraclePath_InvalidPair() public { + vm.expectRevert("Path already set"); + wand.setCompositeOraclePath(USDC, FYETH2306, new bytes6[](0)); + } function testCompositeOraclePath() public { wand.setYieldSpaceOracleSource(FYUSDT2306); From 728e570415a3b7663c9f8a7fa07b4b3cc1b52160 Mon Sep 17 00:00:00 2001 From: "ultrasecr.eth" <241804+ultrasecreth@users.noreply.github.com> Date: Thu, 2 Mar 2023 18:50:13 +0000 Subject: [PATCH 32/32] remove cache from git --- .gitignore | 1 + cache/solidity-files-cache.json | 10602 ------------------------------ 2 files changed, 1 insertion(+), 10602 deletions(-) delete mode 100644 cache/solidity-files-cache.json diff --git a/.gitignore b/.gitignore index 853c8338..9ce6bb1d 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ crytic-export/ # Foundry out/ +cache/ # coverage report/ diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json deleted file mode 100644 index 23e66f65..00000000 --- a/cache/solidity-files-cache.json +++ /dev/null @@ -1,10602 +0,0 @@ -{ - "_format": "ethers-rs-sol-cache-3", - "paths": { - "artifacts": "out", - "build_infos": "out/build-info", - "sources": "src", - "tests": "test", - "scripts": "script", - "libraries": [ - "lib" - ] - }, - "files": { - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol": { - "lastModificationDate": 1677505236890, - "contentHash": "c78ab7ef731c2b040b3e709f5b2dc9bd", - "sourceName": "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.6.0, <0.9.0", - "artifacts": { - "IERC3156FlashBorrower": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IERC3156FlashBorrower.sol/IERC3156FlashBorrower.json" - } - } - }, - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol": { - "lastModificationDate": 1677505236890, - "contentHash": "cbd1895591d4e92d0ed90ebb1cc14c44", - "sourceName": "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol" - ], - "versionRequirement": ">=0.6.0, <0.9.0", - "artifacts": { - "IERC3156FlashLender": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IERC3156FlashLender.sol/IERC3156FlashLender.json" - } - } - }, - "lib/dss-interfaces/src/dss/DaiAbstract.sol": { - "lastModificationDate": 1677505236910, - "contentHash": "c99dd027ff9e54c6250c18d04232b46d", - "sourceName": "lib/dss-interfaces/src/dss/DaiAbstract.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.5.12", - "artifacts": { - "DaiAbstract": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "DaiAbstract.sol/DaiAbstract.json" - } - } - }, - "lib/forge-std/lib/ds-test/src/test.sol": { - "lastModificationDate": 1677505238392, - "contentHash": "962996f0e05d5218857a538a62d7c47e", - "sourceName": "lib/forge-std/lib/ds-test/src/test.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.5.0", - "artifacts": { - "DSTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "test.sol/DSTest.json" - } - } - }, - "lib/forge-std/src/Base.sol": { - "lastModificationDate": 1677505236928, - "contentHash": "8f04bbbb2c16f79e14fdc321695a8ec2", - "sourceName": "lib/forge-std/src/Base.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/Vm.sol" - ], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "CommonBase": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Base.sol/CommonBase.json" - }, - "ScriptBase": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Base.sol/ScriptBase.json" - }, - "TestBase": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Base.sol/TestBase.json" - } - } - }, - "lib/forge-std/src/StdAssertions.sol": { - "lastModificationDate": 1677505236928, - "contentHash": "5bc6a90903a666d831370fa46838ed73", - "sourceName": "lib/forge-std/src/StdAssertions.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/StdMath.sol" - ], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "StdAssertions": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "StdAssertions.sol/StdAssertions.json" - } - } - }, - "lib/forge-std/src/StdChains.sol": { - "lastModificationDate": 1677505236929, - "contentHash": "f73fef006f384b898c755b0e404b84a2", - "sourceName": "lib/forge-std/src/StdChains.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/src/Vm.sol" - ], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "StdChains": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "StdChains.sol/StdChains.json" - } - } - }, - "lib/forge-std/src/StdCheats.sol": { - "lastModificationDate": 1677505236929, - "contentHash": "027b46591bff2397c69867fd06ddc0c1", - "sourceName": "lib/forge-std/src/StdCheats.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/Vm.sol" - ], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "StdCheats": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "StdCheats.sol/StdCheats.json" - }, - "StdCheatsSafe": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "StdCheats.sol/StdCheatsSafe.json" - } - } - }, - "lib/forge-std/src/StdError.sol": { - "lastModificationDate": 1677505236929, - "contentHash": "64c896e1276a291776e5ea5aecb3870a", - "sourceName": "lib/forge-std/src/StdError.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "stdError": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "StdError.sol/stdError.json" - } - } - }, - "lib/forge-std/src/StdInvariant.sol": { - "lastModificationDate": 1677505236929, - "contentHash": "12c06010ec43ce935ed209d5aca30828", - "sourceName": "lib/forge-std/src/StdInvariant.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "StdInvariant": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "StdInvariant.sol/StdInvariant.json" - } - } - }, - "lib/forge-std/src/StdJson.sol": { - "lastModificationDate": 1677505236929, - "contentHash": "2e1d13674e152408867795362d833c24", - "sourceName": "lib/forge-std/src/StdJson.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/src/Vm.sol" - ], - "versionRequirement": ">=0.6.0, <0.9.0", - "artifacts": { - "stdJson": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "StdJson.sol/stdJson.json" - } - } - }, - "lib/forge-std/src/StdMath.sol": { - "lastModificationDate": 1677505236929, - "contentHash": "9da8f453eba6bb98f3d75bc6822bfb29", - "sourceName": "lib/forge-std/src/StdMath.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "stdMath": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "StdMath.sol/stdMath.json" - } - } - }, - "lib/forge-std/src/StdStorage.sol": { - "lastModificationDate": 1677505236929, - "contentHash": "3cb9868082df39a53927db09dbc21f23", - "sourceName": "lib/forge-std/src/StdStorage.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/src/Vm.sol" - ], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "stdStorage": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "StdStorage.sol/stdStorage.json" - }, - "stdStorageSafe": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "StdStorage.sol/stdStorageSafe.json" - } - } - }, - "lib/forge-std/src/StdUtils.sol": { - "lastModificationDate": 1677505236929, - "contentHash": "45fc08daaa17b7908fa5de7d758d8c86", - "sourceName": "lib/forge-std/src/StdUtils.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol" - ], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "StdUtils": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "StdUtils.sol/StdUtils.json" - } - } - }, - "lib/forge-std/src/Test.sol": { - "lastModificationDate": 1677505236929, - "contentHash": "095f745449cb5b6ff27a2e53892b648f", - "sourceName": "lib/forge-std/src/Test.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol" - ], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "Test": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Test.sol/Test.json" - } - } - }, - "lib/forge-std/src/Vm.sol": { - "lastModificationDate": 1677505236929, - "contentHash": "86d01713430fa0877970a6ed8f99dc78", - "sourceName": "lib/forge-std/src/Vm.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "Vm": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Vm.sol/Vm.json" - }, - "VmSafe": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Vm.sol/VmSafe.json" - } - } - }, - "lib/forge-std/src/console.sol": { - "lastModificationDate": 1677505236929, - "contentHash": "100b8a33b917da1147740d7ab8b0ded3", - "sourceName": "lib/forge-std/src/console.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.4.22, <0.9.0", - "artifacts": { - "console": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "console.sol/console.json" - } - } - }, - "lib/forge-std/src/console2.sol": { - "lastModificationDate": 1677505236930, - "contentHash": "2096b4e5f252c5df9909cccbe3d2da2e", - "sourceName": "lib/forge-std/src/console2.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.4.22, <0.9.0", - "artifacts": { - "console2": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "console2.sol/console2.json" - } - } - }, - "lib/forge-std/src/interfaces/IMulticall3.sol": { - "lastModificationDate": 1677505236930, - "contentHash": "7b131ca1ca32ef6378b7b9ad5488b901", - "sourceName": "lib/forge-std/src/interfaces/IMulticall3.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "IMulticall3": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IMulticall3.sol/IMulticall3.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol": { - "lastModificationDate": 1677505247093, - "contentHash": "8a72d8f5255345c5756cc72a8952b620", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": "^0.8.0", - "artifacts": { - "AccessControl": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "AccessControl.sol/AccessControl.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/Ownable.sol": { - "lastModificationDate": 1677505247093, - "contentHash": "df011b503197ac463a97572996667291", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/access/Ownable.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": "^0.8.0", - "artifacts": { - "Ownable": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Ownable.sol/Ownable.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol": { - "lastModificationDate": 1677505247093, - "contentHash": "b3c9f38a2e2d83933765e38a85f34ad0", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "IWETH9": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IWETH9.sol/IWETH9.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol": { - "lastModificationDate": 1677505247094, - "contentHash": "717becb3eba94d8d3607a84ebd6f88c4", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "ERC20": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ERC20.sol/ERC20.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol": { - "lastModificationDate": 1677505247094, - "contentHash": "43cbacf0f9683ef274dc5b52550e5300", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "ERC20Permit": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ERC20Permit.sol/ERC20Permit.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol": { - "lastModificationDate": 1677505247094, - "contentHash": "776f140b8a9f56eddcebbf9a07982c7c", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": "^0.8.0", - "artifacts": { - "IERC20": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IERC20.sol/IERC20.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol": { - "lastModificationDate": 1677505247094, - "contentHash": "16693e9c680c69c02d0979cdfa0407e4", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "IERC20Metadata": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IERC20Metadata.sol/IERC20Metadata.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol": { - "lastModificationDate": 1677505247094, - "contentHash": "e420861b28de80b995a8247ab92ca787", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": "^0.8.0", - "artifacts": { - "IERC2612": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IERC2612.sol/IERC2612.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/MinimalTransferHelper.sol": { - "lastModificationDate": 1677505247095, - "contentHash": "d372000139f92d029ac128b6bfb512f8", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/MinimalTransferHelper.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol" - ], - "versionRequirement": ">=0.6.0", - "artifacts": { - "MinimalTransferHelper": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "MinimalTransferHelper.sol/MinimalTransferHelper.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/SafeERC20Namer.sol": { - "lastModificationDate": 1677505247095, - "contentHash": "c04484b4d6dbba53aa1f5cbc35166bc6", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/SafeERC20Namer.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/AddressStringUtil.sol" - ], - "versionRequirement": ">=0.5.0", - "artifacts": { - "SafeERC20Namer": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "SafeERC20Namer.sol/SafeERC20Namer.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol": { - "lastModificationDate": 1677505247095, - "contentHash": "69b36a0098368997dee405844187cab3", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "TransferHelper": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TransferHelper.sol/TransferHelper.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/AddressStringUtil.sol": { - "lastModificationDate": 1677505247095, - "contentHash": "e955c127dcc488f43ec8b850a4c7394f", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/AddressStringUtil.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.5.0", - "artifacts": { - "AddressStringUtil": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "AddressStringUtil.sol/AddressStringUtil.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol": { - "lastModificationDate": 1677505247095, - "contentHash": "162ed110173f70fca1d0f63050539f0d", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": "^0.8.13", - "artifacts": { - "Cast": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Cast.sol/Cast.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol": { - "lastModificationDate": 1677505247095, - "contentHash": "59c2b4a265b68c1b3ba7666d47ae7fe0", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": "^0.8.0", - "artifacts": { - "IsContract": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IsContract.sol/IsContract.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol": { - "lastModificationDate": 1677505247095, - "contentHash": "ea4996aefc7d57d6832af5c0bf1f98a0", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": "^0.8.13", - "artifacts": { - "Math": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Math.sol/Math.json" - } - } - }, - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol": { - "lastModificationDate": 1677505247096, - "contentHash": "e6c569515585a617a539dd64cfd49dd3", - "sourceName": "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.6.0", - "artifacts": { - "RevertMsgExtractor": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "RevertMsgExtractor.sol/RevertMsgExtractor.json" - } - } - }, - "lib/yieldspace-tv/src/Exp64x64.sol": { - "lastModificationDate": 1677505238414, - "contentHash": "d99c5f2254d7957239545c6ee61b7249", - "sourceName": "lib/yieldspace-tv/src/Exp64x64.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/src/Math64x64.sol" - ], - "versionRequirement": ">=0.8.15", - "artifacts": { - "Exp64x64": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Exp64x64.sol/Exp64x64.json" - } - } - }, - "lib/yieldspace-tv/src/Math64x64.sol": { - "lastModificationDate": 1677505238414, - "contentHash": "7650460df63b601c0ee856ee09666842", - "sourceName": "lib/yieldspace-tv/src/Math64x64.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.15", - "artifacts": { - "Math64x64": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Math64x64.sol/Math64x64.json" - } - } - }, - "lib/yieldspace-tv/src/Pool/Pool.sol": { - "lastModificationDate": 1677505238415, - "contentHash": "335ee7c30b236e4bf0519dfb67bd63a0", - "sourceName": "lib/yieldspace-tv/src/Pool/Pool.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/Exp64x64.sol", - "lib/yieldspace-tv/src/Math64x64.sol", - "lib/yieldspace-tv/src/Pool/PoolErrors.sol", - "lib/yieldspace-tv/src/Pool/PoolEvents.sol", - "lib/yieldspace-tv/src/Pool/PoolImports.sol", - "lib/yieldspace-tv/src/YieldMath.sol", - "lib/yieldspace-tv/src/interfaces/IERC4626.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol" - ], - "versionRequirement": ">=0.8.15", - "artifacts": { - "Pool": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Pool.sol/Pool.json" - } - } - }, - "lib/yieldspace-tv/src/Pool/PoolErrors.sol": { - "lastModificationDate": 1677505238415, - "contentHash": "752b4056131ad302d769c9f5d09614fe", - "sourceName": "lib/yieldspace-tv/src/Pool/PoolErrors.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.15", - "artifacts": { - "PoolErrors": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "PoolErrors.sol/PoolErrors.json" - } - } - }, - "lib/yieldspace-tv/src/Pool/PoolEvents.sol": { - "lastModificationDate": 1677505238415, - "contentHash": "4fcba90dbbb1f28c9e6612b4305c4013", - "sourceName": "lib/yieldspace-tv/src/Pool/PoolEvents.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.15", - "artifacts": { - "PoolEvents": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "PoolEvents.sol/PoolEvents.json" - } - } - }, - "lib/yieldspace-tv/src/Pool/PoolImports.sol": { - "lastModificationDate": 1677505238415, - "contentHash": "3e51dfee0c3a433927ceeabfc6350237", - "sourceName": "lib/yieldspace-tv/src/Pool/PoolImports.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/Exp64x64.sol", - "lib/yieldspace-tv/src/Math64x64.sol", - "lib/yieldspace-tv/src/Pool/PoolErrors.sol", - "lib/yieldspace-tv/src/Pool/PoolEvents.sol", - "lib/yieldspace-tv/src/YieldMath.sol", - "lib/yieldspace-tv/src/interfaces/IERC4626.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol" - ], - "versionRequirement": ">=0.8.15", - "artifacts": { - "PoolImports": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "PoolImports.sol/PoolImports.json" - } - } - }, - "lib/yieldspace-tv/src/YieldMath.sol": { - "lastModificationDate": 1677505238416, - "contentHash": "a99b352d8d285868cfd120ac96481d77", - "sourceName": "lib/yieldspace-tv/src/YieldMath.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/src/Exp64x64.sol", - "lib/yieldspace-tv/src/Math64x64.sol" - ], - "versionRequirement": ">=0.8.15", - "artifacts": { - "YieldMath": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "YieldMath.sol/YieldMath.json" - } - } - }, - "lib/yieldspace-tv/src/interfaces/IERC4626.sol": { - "lastModificationDate": 1677505238416, - "contentHash": "36141e33c078bd42271054cc2ea91935", - "sourceName": "lib/yieldspace-tv/src/interfaces/IERC4626.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol" - ], - "versionRequirement": ">=0.8.15", - "artifacts": { - "IERC4626": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IERC4626.sol/IERC4626.json" - } - } - }, - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol": { - "lastModificationDate": 1677505238416, - "contentHash": "16dbfc65c73503825be9e1d7a65cfdac", - "sourceName": "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol" - ], - "versionRequirement": ">=0.8.15", - "artifacts": { - "IMaturingToken": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IMaturingToken.sol/IMaturingToken.json" - } - } - }, - "lib/yieldspace-tv/src/interfaces/IPool.sol": { - "lastModificationDate": 1677505238416, - "contentHash": "9b53f22a04bd5cb0183c17da0fb80cd7", - "sourceName": "lib/yieldspace-tv/src/interfaces/IPool.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol" - ], - "versionRequirement": null, - "artifacts": { - "IPool": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IPool.sol/IPool.json" - } - } - }, - "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol": { - "lastModificationDate": 1677505238416, - "contentHash": "2c361aac7074152a5d0415e2dd630908", - "sourceName": "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol" - ], - "versionRequirement": ">=0.8.15", - "artifacts": { - "IPoolOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IPoolOracle.sol/IPoolOracle.json" - } - } - }, - "lib/yieldspace-tv/src/oracle/PoolOracle.sol": { - "lastModificationDate": 1677505238416, - "contentHash": "8adf5c8232fff5d2b0f232193e045b0d", - "sourceName": "lib/yieldspace-tv/src/oracle/PoolOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/src/Exp64x64.sol", - "lib/yieldspace-tv/src/Math64x64.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol" - ], - "versionRequirement": ">=0.8.15", - "artifacts": { - "PoolOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "PoolOracle.sol/PoolOracle.json" - } - } - }, - "src/Cauldron.sol": { - "lastModificationDate": 1677585086202, - "contentHash": "bfad21f10e48bfd70d0570b88c376cf1", - "sourceName": "src/Cauldron.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "src/constants/Constants.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "Cauldron": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Cauldron.sol/Cauldron.json" - }, - "CauldronMath": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Cauldron.sol/CauldronMath.json" - } - } - }, - "src/FYToken.sol": { - "lastModificationDate": 1677585086202, - "contentHash": "56285becaf2d2a4045241173215503f4", - "sourceName": "src/FYToken.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/SafeERC20Namer.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/AddressStringUtil.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "src/constants/Constants.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "FYToken": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYToken.sol/FYToken.json" - } - } - }, - "src/FlashJoin.sol": { - "lastModificationDate": 1677585086202, - "contentHash": "4a44e7504ba288801c4a8f2120367635", - "sourceName": "src/FlashJoin.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "src/Join.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IJoinFactory.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "FlashJoin": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FlashJoin.sol/FlashJoin.json" - } - } - }, - "src/Join.sol": { - "lastModificationDate": 1677585086202, - "contentHash": "eca9de66bf065891e2170228e705c3ca", - "sourceName": "src/Join.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IJoinFactory.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "Join": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Join.sol/Join.json" - } - } - }, - "src/Ladle.sol": { - "lastModificationDate": 1677585086203, - "contentHash": "1d3d2047df11eca438fa24490fe4a66f", - "sourceName": "src/Ladle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/dss-interfaces/src/dss/DaiAbstract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/LadleStorage.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "Ladle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Ladle.sol/Ladle.json" - } - } - }, - "src/LadleStorage.sol": { - "lastModificationDate": 1677585086203, - "contentHash": "48f86639c130a500429ff93375834227", - "sourceName": "src/LadleStorage.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "LadleStorage": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "LadleStorage.sol/LadleStorage.json" - } - } - }, - "src/Router.sol": { - "lastModificationDate": 1677585086203, - "contentHash": "d7391413179b1c07c3835e97a15b02ce", - "sourceName": "src/Router.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "Router": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Router.sol/Router.json" - } - } - }, - "src/Witch.sol": { - "lastModificationDate": 1677585086203, - "contentHash": "099ede16588b5481096ad4087855c851", - "sourceName": "src/Witch.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "Witch": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Witch.sol/Witch.json" - } - } - }, - "src/constants/Constants.sol": { - "lastModificationDate": 1677585086203, - "contentHash": "c3ddd7ca09b5a70a63845d1b1e8fc739", - "sourceName": "src/constants/Constants.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.13", - "artifacts": { - "Constants": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Constants.sol/Constants.json" - } - } - }, - "src/deprecated/FYTokenFactoryMock.sol": { - "lastModificationDate": 1677585086203, - "contentHash": "a81b26f8c12de85e68a512ed5d78d5f2", - "sourceName": "src/deprecated/FYTokenFactoryMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/SafeERC20Namer.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/AddressStringUtil.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "src/FYToken.sol", - "src/constants/Constants.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IFYTokenFactory.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "FYTokenFactoryMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYTokenFactoryMock.sol/FYTokenFactoryMock.json" - } - } - }, - "src/deprecated/IPoolFactory.sol": { - "lastModificationDate": 1677585086203, - "contentHash": "800a26da67c69b31e29497f3bb9680d7", - "sourceName": "src/deprecated/IPoolFactory.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": "^0.8.0", - "artifacts": { - "IPoolFactory": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IPoolFactory.sol/IPoolFactory.json" - } - } - }, - "src/deprecated/JoinFactoryMock.sol": { - "lastModificationDate": 1677585086203, - "contentHash": "dbbb3e0495e54f04ae3fcc51135a8fd1", - "sourceName": "src/deprecated/JoinFactoryMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "src/Join.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IJoinFactory.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "JoinFactoryMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "JoinFactoryMock.sol/JoinFactoryMock.json" - } - } - }, - "src/deprecated/PoolFactoryMock.sol": { - "lastModificationDate": 1677585086203, - "contentHash": "2bac320b9f64546800dd35a2ae485a0e", - "sourceName": "src/deprecated/PoolFactoryMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/Ownable.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "src/deprecated/IPoolFactory.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol", - "src/mocks/ERC20Mock.sol", - "src/mocks/PoolMock.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "PoolFactoryMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "PoolFactoryMock.sol/PoolFactoryMock.json" - } - } - }, - "src/deprecated/Wand.sol": { - "lastModificationDate": 1677585086204, - "contentHash": "5d942b39275070f71cd57912e6144274", - "sourceName": "src/deprecated/Wand.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "src/constants/Constants.sol", - "src/deprecated/IPoolFactory.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IFYTokenFactory.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IJoinFactory.sol", - "src/interfaces/ILadleGov.sol", - "src/interfaces/IMultiOracleGov.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "IWitchGov": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Wand.sol/IWitchGov.json" - }, - "Wand": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Wand.sol/Wand.json" - } - } - }, - "src/deprecated/WitchOld.sol": { - "lastModificationDate": 1677585086204, - "contentHash": "d0b3fc31f2dce786f01a7b90bde5cdcc", - "sourceName": "src/deprecated/WitchOld.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "WitchOld": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "WitchOld.sol/WitchOld.json" - } - } - }, - "src/interfaces/DataTypes.sol": { - "lastModificationDate": 1677585086204, - "contentHash": "e3c86fd61226fa77ac9d110acf3f0b70", - "sourceName": "src/interfaces/DataTypes.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "DataTypes": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "DataTypes.sol/DataTypes.json" - } - } - }, - "src/interfaces/ICauldron.sol": { - "lastModificationDate": 1677587273355, - "contentHash": "93a3eb95ac5e34d735afc2ae5a034444", - "sourceName": "src/interfaces/ICauldron.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "ICauldron": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ICauldron.sol/ICauldron.json" - } - } - }, - "src/interfaces/ICauldronGov.sol": { - "lastModificationDate": 1677585086204, - "contentHash": "e09763bc5e22803dba05b2ff5a9bb695", - "sourceName": "src/interfaces/ICauldronGov.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "ICauldronGov": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ICauldronGov.sol/ICauldronGov.json" - } - } - }, - "src/interfaces/IERC5095.sol": { - "lastModificationDate": 1677585086204, - "contentHash": "a52f45d8389356aefa8c48af2dc903d0", - "sourceName": "src/interfaces/IERC5095.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "IERC5095": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IERC5095.sol/IERC5095.json" - } - } - }, - "src/interfaces/IFYToken.sol": { - "lastModificationDate": 1677585086204, - "contentHash": "2dde05b49e84f14b757b62ef78beb517", - "sourceName": "src/interfaces/IFYToken.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "IFYToken": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IFYToken.sol/IFYToken.json" - } - } - }, - "src/interfaces/IFYTokenFactory.sol": { - "lastModificationDate": 1677585086204, - "contentHash": "7d2e2f3addf1080c9e0ac318535b4a61", - "sourceName": "src/interfaces/IFYTokenFactory.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "IFYTokenFactory": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IFYTokenFactory.sol/IFYTokenFactory.json" - } - } - }, - "src/interfaces/IJoin.sol": { - "lastModificationDate": 1677585086204, - "contentHash": "540020ec7d91348df94a506411040ec0", - "sourceName": "src/interfaces/IJoin.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "IJoin": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IJoin.sol/IJoin.json" - } - } - }, - "src/interfaces/IJoinFactory.sol": { - "lastModificationDate": 1677585086204, - "contentHash": "1426c885a7cb4c4c89931c6e958405e3", - "sourceName": "src/interfaces/IJoinFactory.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": "^0.8.0", - "artifacts": { - "IJoinFactory": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IJoinFactory.sol/IJoinFactory.json" - } - } - }, - "src/interfaces/ILadle.sol": { - "lastModificationDate": 1677603945704, - "contentHash": "993fb6448ab02c216c47d7cdf496b36e", - "sourceName": "src/interfaces/ILadle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "ILadle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ILadle.sol/ILadle.json" - } - } - }, - "src/interfaces/ILadleGov.sol": { - "lastModificationDate": 1677603936769, - "contentHash": "02488b6ad21a07aa8d889a60faed4166", - "sourceName": "src/interfaces/ILadleGov.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "src/interfaces/IJoin.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "ILadleGov": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ILadleGov.sol/ILadleGov.json" - } - } - }, - "src/interfaces/IMultiOracleGov.sol": { - "lastModificationDate": 1677585086205, - "contentHash": "e0cad6c6985bbddc1c519c53da67ad95", - "sourceName": "src/interfaces/IMultiOracleGov.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": "^0.8.0", - "artifacts": { - "IMultiOracleGov": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IMultiOracleGov.sol/IMultiOracleGov.json" - } - } - }, - "src/interfaces/IOracle.sol": { - "lastModificationDate": 1677585086205, - "contentHash": "fbec703dd8228a0636d95f02596cca53", - "sourceName": "src/interfaces/IOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": "^0.8.0", - "artifacts": { - "IOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IOracle.sol/IOracle.json" - } - } - }, - "src/interfaces/IStrategy.sol": { - "lastModificationDate": 1677585086205, - "contentHash": "77e33c88764c278be63e4d57e74f331c", - "sourceName": "src/interfaces/IStrategy.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.13", - "artifacts": { - "IStrategy": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IStrategy.sol/IStrategy.json" - } - } - }, - "src/interfaces/IWitch.sol": { - "lastModificationDate": 1677692998745, - "contentHash": "8d853d1edd96e5fa77f6be325963e45f", - "sourceName": "src/interfaces/IWitch.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol", - "src/interfaces/IWitchGov.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "IWitch": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IWitch.sol/IWitch.json" - } - } - }, - "src/interfaces/IWitchGov.sol": { - "lastModificationDate": 1677782466516, - "contentHash": "c35f2c5fc1c83ec970e1a382ea9c6fa1", - "sourceName": "src/interfaces/IWitchGov.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "IWitchGov": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IWitchGov.sol/IWitchGov.json" - } - } - }, - "src/mocks/ConvexPoolMock.sol": { - "lastModificationDate": 1677585086205, - "contentHash": "59f06a4b00a23526b690a778b0ec1061", - "sourceName": "src/mocks/ConvexPoolMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ConvexPoolMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ConvexPoolMock.sol/ConvexPoolMock.json" - } - } - }, - "src/mocks/ConvexYieldWrapperMock.sol": { - "lastModificationDate": 1677585086205, - "contentHash": "860bdcf3611cc6f4cc67720162ea7dbc", - "sourceName": "src/mocks/ConvexYieldWrapperMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ConvexYieldWrapperMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ConvexYieldWrapperMock.sol/ConvexYieldWrapperMock.json" - }, - "ICauldron": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ConvexYieldWrapperMock.sol/ICauldron.json" - }, - "IRewardStaking": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ConvexYieldWrapperMock.sol/IRewardStaking.json" - } - } - }, - "src/mocks/DAIMock.sol": { - "lastModificationDate": 1677585086205, - "contentHash": "4cfc400e3026ecaadd1b778b977d578b", - "sourceName": "src/mocks/DAIMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "DAIMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "DAIMock.sol/DAIMock.json" - } - } - }, - "src/mocks/ERC20Mock.sol": { - "lastModificationDate": 1677585086205, - "contentHash": "d10127a12042b0848a077a1b1806bc0c", - "sourceName": "src/mocks/ERC20Mock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ERC20Mock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ERC20Mock.sol/ERC20Mock.json" - } - } - }, - "src/mocks/FlashBorrower.sol": { - "lastModificationDate": 1677585086205, - "contentHash": "b8671650af40061e7fbe3850b4c26cb5", - "sourceName": "src/mocks/FlashBorrower.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "FlashBorrower": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FlashBorrower.sol/FlashBorrower.json" - } - } - }, - "src/mocks/PoolMock.sol": { - "lastModificationDate": 1677585086205, - "contentHash": "c15b280ee6d6ba9e896c3cb3830bee38", - "sourceName": "src/mocks/PoolMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/Ownable.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "src/deprecated/IPoolFactory.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol", - "src/mocks/ERC20Mock.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "PoolMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "PoolMock.sol/PoolMock.json" - }, - "RMath": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "PoolMock.sol/RMath.json" - } - } - }, - "src/mocks/RestrictedERC20Mock.sol": { - "lastModificationDate": 1677585086205, - "contentHash": "ed278818d4467a9965222a2f575dcab0", - "sourceName": "src/mocks/RestrictedERC20Mock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "RestrictedERC20Mock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "RestrictedERC20Mock.sol/RestrictedERC20Mock.json" - } - } - }, - "src/mocks/TLMMock.sol": { - "lastModificationDate": 1677585086206, - "contentHash": "e5e6f32ff7f3e5d28a2159e00d2abc6b", - "sourceName": "src/mocks/TLMMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "src/mocks/ERC20Mock.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "GemJoinMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TLMMock.sol/GemJoinMock.json" - }, - "TLMMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TLMMock.sol/TLMMock.json" - } - } - }, - "src/mocks/TokenProxy.sol": { - "lastModificationDate": 1677585086206, - "contentHash": "c1bc4f95082996118aa3856405815e2c", - "sourceName": "src/mocks/TokenProxy.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "TokenProxy": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TokenProxy.sol/TokenProxy.json" - } - } - }, - "src/mocks/USDCMock.sol": { - "lastModificationDate": 1677585086206, - "contentHash": "36e91fc2f2a61b18464cea61abc40e40", - "sourceName": "src/mocks/USDCMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "USDCMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "USDCMock.sol/USDCMock.json" - } - } - }, - "src/mocks/WETH9Mock.sol": { - "lastModificationDate": 1677585086206, - "contentHash": "0968bbd7ca8cb68e648aa5ca6a2fe16f", - "sourceName": "src/mocks/WETH9Mock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "WETH9Mock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "WETH9Mock.sol/WETH9Mock.json" - } - } - }, - "src/mocks/WstETHMock.sol": { - "lastModificationDate": 1677585086206, - "contentHash": "b2df47e4b404a6e194e94a11edffa4d8", - "sourceName": "src/mocks/WstETHMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "WstETHMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "WstETHMock.sol/WstETHMock.json" - } - } - }, - "src/mocks/YvTokenMock.sol": { - "lastModificationDate": 1677585086206, - "contentHash": "ff1de7e2fe5066589a44ee1a84125593", - "sourceName": "src/mocks/YvTokenMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "src/mocks/oracles/ISourceMock.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "YvTokenMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "YvTokenMock.sol/YvTokenMock.json" - } - } - }, - "src/mocks/oracles/ISourceMock.sol": { - "lastModificationDate": 1677585086206, - "contentHash": "44e9d8e43fb84387fac4ce7fe69353f0", - "sourceName": "src/mocks/oracles/ISourceMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ISourceMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ISourceMock.sol/ISourceMock.json" - } - } - }, - "src/mocks/oracles/OracleMock.sol": { - "lastModificationDate": 1677585086206, - "contentHash": "ab94ce6bee1e837994859e6e1886d028", - "sourceName": "src/mocks/oracles/OracleMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "OracleMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "OracleMock.sol/OracleMock.json" - } - } - }, - "src/mocks/oracles/chainlink/ChainlinkAggregatorV3Mock.sol": { - "lastModificationDate": 1677585086206, - "contentHash": "4bea9abf9ef7926e11c65e0b73e40871", - "sourceName": "src/mocks/oracles/chainlink/ChainlinkAggregatorV3Mock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "src/mocks/oracles/ISourceMock.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ChainlinkAggregatorV3Mock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ChainlinkAggregatorV3Mock.sol/ChainlinkAggregatorV3Mock.json" - } - } - }, - "src/mocks/oracles/chainlink/ChainlinkAggregatorV3MockEx.sol": { - "lastModificationDate": 1677585086206, - "contentHash": "3ec23d2f742d6cf3208a113d26d68e85", - "sourceName": "src/mocks/oracles/chainlink/ChainlinkAggregatorV3MockEx.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "src/mocks/oracles/ISourceMock.sol", - "src/mocks/oracles/chainlink/ChainlinkAggregatorV3Mock.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ChainlinkAggregatorV3MockEx": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ChainlinkAggregatorV3MockEx.sol/ChainlinkAggregatorV3MockEx.json" - } - } - }, - "src/mocks/oracles/chainlink/FlagsInterfaceMock.sol": { - "lastModificationDate": 1677585086206, - "contentHash": "ce3c5add5ac42ab0b279fd5b1a28624d", - "sourceName": "src/mocks/oracles/chainlink/FlagsInterfaceMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "src/oracles/chainlink/FlagsInterface.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "FlagsInterfaceMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FlagsInterfaceMock.sol/FlagsInterfaceMock.json" - } - } - }, - "src/mocks/oracles/compound/CTokenChiMock.sol": { - "lastModificationDate": 1677585086206, - "contentHash": "fbaf55af65ede5b41e5a13e715f87499", - "sourceName": "src/mocks/oracles/compound/CTokenChiMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "src/mocks/oracles/ISourceMock.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "CTokenChiMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CTokenChiMock.sol/CTokenChiMock.json" - } - } - }, - "src/mocks/oracles/compound/CTokenMock.sol": { - "lastModificationDate": 1677585086207, - "contentHash": "6af91788f1ce96cc22001438fa940424", - "sourceName": "src/mocks/oracles/compound/CTokenMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "src/mocks/oracles/ISourceMock.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "CTokenMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CTokenMock.sol/CTokenMock.json" - } - } - }, - "src/mocks/oracles/compound/CTokenRateMock.sol": { - "lastModificationDate": 1677585086207, - "contentHash": "b3592dc089d7c5fe16551877c823f6cd", - "sourceName": "src/mocks/oracles/compound/CTokenRateMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "src/mocks/oracles/ISourceMock.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "CTokenRateMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CTokenRateMock.sol/CTokenRateMock.json" - } - } - }, - "src/mocks/oracles/convex/CurvePoolMock.sol": { - "lastModificationDate": 1677585086207, - "contentHash": "a821051acdb945b4af901fa5fbcd2aa4", - "sourceName": "src/mocks/oracles/convex/CurvePoolMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.13", - "artifacts": { - "CurvePoolMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CurvePoolMock.sol/CurvePoolMock.json" - }, - "ICurvePool": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CurvePoolMock.sol/ICurvePool.json" - } - } - }, - "src/mocks/oracles/lido/WstETHMock.sol": { - "lastModificationDate": 1677585086207, - "contentHash": "97b6c02ceaf8d34118040c12fba59cd8", - "sourceName": "src/mocks/oracles/lido/WstETHMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "src/mocks/ERC20Mock.sol", - "src/mocks/oracles/ISourceMock.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "WstETHMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "lido/WstETHMock.sol/WstETHMock.json" - } - } - }, - "src/mocks/oracles/uniswap/UniswapV2PairMock.sol": { - "lastModificationDate": 1677585086207, - "contentHash": "7524c32b3e7e74e0dfe07c89b45f6161", - "sourceName": "src/mocks/oracles/uniswap/UniswapV2PairMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.13", - "artifacts": { - "UniswapV2PairMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "UniswapV2PairMock.sol/UniswapV2PairMock.json" - } - } - }, - "src/mocks/oracles/uniswap/UniswapV3FactoryMock.sol": { - "lastModificationDate": 1677585086207, - "contentHash": "86f6dc18a002434300868f7557661467", - "sourceName": "src/mocks/oracles/uniswap/UniswapV3FactoryMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "src/mocks/oracles/ISourceMock.sol", - "src/mocks/oracles/uniswap/UniswapV3PoolMock.sol", - "src/oracles/uniswap/IUniswapV3PoolImmutables.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "UniswapV3FactoryMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "UniswapV3FactoryMock.sol/UniswapV3FactoryMock.json" - } - } - }, - "src/mocks/oracles/uniswap/UniswapV3OracleLibraryMock.sol": { - "lastModificationDate": 1677585086207, - "contentHash": "94086dd7e88f41b6774b4c02fc649f4a", - "sourceName": "src/mocks/oracles/uniswap/UniswapV3OracleLibraryMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "src/mocks/oracles/ISourceMock.sol", - "src/mocks/oracles/uniswap/UniswapV3FactoryMock.sol", - "src/mocks/oracles/uniswap/UniswapV3PoolMock.sol", - "src/oracles/uniswap/IUniswapV3PoolImmutables.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "UniswapV3OracleLibraryMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "UniswapV3OracleLibraryMock.sol/UniswapV3OracleLibraryMock.json" - } - } - }, - "src/mocks/oracles/uniswap/UniswapV3PoolMock.sol": { - "lastModificationDate": 1677585086207, - "contentHash": "af699a9b2dab7167484fbd10d5f2b2ad", - "sourceName": "src/mocks/oracles/uniswap/UniswapV3PoolMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "src/mocks/oracles/ISourceMock.sol", - "src/oracles/uniswap/IUniswapV3PoolImmutables.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "UniswapV3PoolMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "UniswapV3PoolMock.sol/UniswapV3PoolMock.json" - } - } - }, - "src/modules/HealerModule.sol": { - "lastModificationDate": 1677585086207, - "contentHash": "143b9671a2c51d508f819687fce4c16b", - "sourceName": "src/modules/HealerModule.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/LadleStorage.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "HealerModule": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "HealerModule.sol/HealerModule.json" - } - } - }, - "src/modules/RepayFromLadleModule.sol": { - "lastModificationDate": 1677585086207, - "contentHash": "856d5fe0d07b5ba0e1d4d809df445b8b", - "sourceName": "src/modules/RepayFromLadleModule.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/LadleStorage.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "RepayFromLadleModule": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "RepayFromLadleModule.sol/RepayFromLadleModule.json" - } - } - }, - "src/modules/TLMModule.sol": { - "lastModificationDate": 1677585086207, - "contentHash": "369d818283378a7340be67f748d56b33", - "sourceName": "src/modules/TLMModule.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/LadleStorage.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "AuthGemJoinAbstract": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TLMModule.sol/AuthGemJoinAbstract.json" - }, - "DssTlmAbstract": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TLMModule.sol/DssTlmAbstract.json" - }, - "MaturingGemAbstract": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TLMModule.sol/MaturingGemAbstract.json" - }, - "TLMModule": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TLMModule.sol/TLMModule.json" - } - } - }, - "src/modules/WrapEtherModule.sol": { - "lastModificationDate": 1677585086207, - "contentHash": "4b4b24b86d0c31e2159fce649008f256", - "sourceName": "src/modules/WrapEtherModule.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/LadleStorage.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "WrapEtherModule": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "WrapEtherModule.sol/WrapEtherModule.json" - } - } - }, - "src/oracles/accumulator/AccumulatorMultiOracle.sol": { - "lastModificationDate": 1677585086208, - "contentHash": "f77f8696a88dbe9674f1fdd8fc88db25", - "sourceName": "src/oracles/accumulator/AccumulatorMultiOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "src/constants/Constants.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "AccumulatorMultiOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "AccumulatorMultiOracle.sol/AccumulatorMultiOracle.json" - } - } - }, - "src/oracles/chainlink/AggregatorV3Interface.sol": { - "lastModificationDate": 1677585086208, - "contentHash": "b213894d1186ed5f03cceedb9a7811a2", - "sourceName": "src/oracles/chainlink/AggregatorV3Interface.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.6.0", - "artifacts": { - "AggregatorV3Interface": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "AggregatorV3Interface.sol/AggregatorV3Interface.json" - } - } - }, - "src/oracles/chainlink/ChainlinkL2USDMultiOracle.sol": { - "lastModificationDate": 1677585086208, - "contentHash": "54600a72189318340a2e35068ce967ff", - "sourceName": "src/oracles/chainlink/ChainlinkL2USDMultiOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/constants/Constants.sol", - "src/interfaces/IOracle.sol", - "src/oracles/chainlink/AggregatorV3Interface.sol", - "src/oracles/chainlink/ChainlinkUSDMultiOracle.sol", - "src/oracles/chainlink/FlagsInterface.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ChainlinkL2USDMultiOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ChainlinkL2USDMultiOracle.sol/ChainlinkL2USDMultiOracle.json" - } - } - }, - "src/oracles/chainlink/ChainlinkMultiOracle.sol": { - "lastModificationDate": 1677585086208, - "contentHash": "a22b18e9ca40e7135457b337d8c3fd38", - "sourceName": "src/oracles/chainlink/ChainlinkMultiOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/constants/Constants.sol", - "src/interfaces/IOracle.sol", - "src/oracles/chainlink/AggregatorV3Interface.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ChainlinkMultiOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ChainlinkMultiOracle.sol/ChainlinkMultiOracle.json" - } - } - }, - "src/oracles/chainlink/ChainlinkUSDMultiOracle.sol": { - "lastModificationDate": 1677585086208, - "contentHash": "e3eafb32950259d322666e47d29ffebd", - "sourceName": "src/oracles/chainlink/ChainlinkUSDMultiOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/constants/Constants.sol", - "src/interfaces/IOracle.sol", - "src/oracles/chainlink/AggregatorV3Interface.sol", - "src/oracles/chainlink/FlagsInterface.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ChainlinkUSDMultiOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ChainlinkUSDMultiOracle.sol/ChainlinkUSDMultiOracle.json" - } - } - }, - "src/oracles/chainlink/FlagsInterface.sol": { - "lastModificationDate": 1677585086208, - "contentHash": "d37f32515fb3edcdcc0728ca80cfe987", - "sourceName": "src/oracles/chainlink/FlagsInterface.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": "^0.8.0", - "artifacts": { - "FlagsInterface": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FlagsInterface.sol/FlagsInterface.json" - } - } - }, - "src/oracles/composite/CompositeMultiOracle.sol": { - "lastModificationDate": 1677585086208, - "contentHash": "aaf5d39dd4a9b1274f02bf4099bc32ac", - "sourceName": "src/oracles/composite/CompositeMultiOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "CompositeMultiOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CompositeMultiOracle.sol/CompositeMultiOracle.json" - } - } - }, - "src/oracles/compound/CTokenInterface.sol": { - "lastModificationDate": 1677585086208, - "contentHash": "c2c3908e2ef28463858f56d16113b926", - "sourceName": "src/oracles/compound/CTokenInterface.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol" - ], - "versionRequirement": ">=0.5.16", - "artifacts": { - "CTokenInterface": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CTokenInterface.sol/CTokenInterface.json" - } - } - }, - "src/oracles/compound/CTokenMultiOracle.sol": { - "lastModificationDate": 1677585086208, - "contentHash": "37cce1c8be448a4b289477b00f189811", - "sourceName": "src/oracles/compound/CTokenMultiOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/constants/Constants.sol", - "src/interfaces/IOracle.sol", - "src/oracles/compound/CTokenInterface.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "CTokenMultiOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CTokenMultiOracle.sol/CTokenMultiOracle.json" - } - } - }, - "src/oracles/compound/CompoundMultiOracle.sol": { - "lastModificationDate": 1677585086208, - "contentHash": "a38b16ba44ac30c2261de503e0d7b1ea", - "sourceName": "src/oracles/compound/CompoundMultiOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/constants/Constants.sol", - "src/interfaces/IOracle.sol", - "src/oracles/compound/CTokenInterface.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "CompoundMultiOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CompoundMultiOracle.sol/CompoundMultiOracle.json" - } - } - }, - "src/oracles/convex/Cvx3CrvOracle.sol": { - "lastModificationDate": 1677585086209, - "contentHash": "c57bb600d05628698d51d7d1614de190", - "sourceName": "src/oracles/convex/Cvx3CrvOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol", - "src/oracles/chainlink/AggregatorV3Interface.sol", - "src/oracles/convex/ICurvePool.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "Cvx3CrvOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Cvx3CrvOracle.sol/Cvx3CrvOracle.json" - } - } - }, - "src/oracles/convex/ICurvePool.sol": { - "lastModificationDate": 1677585086209, - "contentHash": "e89afd47a330d791e058f8215c6aaf1a", - "sourceName": "src/oracles/convex/ICurvePool.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ICurvePool": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ICurvePool.sol/ICurvePool.json" - } - } - }, - "src/oracles/crab/CrabOracle.sol": { - "lastModificationDate": 1677585086209, - "contentHash": "b85271615dd82b3ffa9c49da0c4afcf2", - "sourceName": "src/oracles/crab/CrabOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "CrabOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CrabOracle.sol/CrabOracle.json" - }, - "ICrabStrategy": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CrabOracle.sol/ICrabStrategy.json" - } - } - }, - "src/oracles/euler/ETokenMultiOracle.sol": { - "lastModificationDate": 1677585086209, - "contentHash": "1bf8321912a233ffc4091c5342c848ff", - "sourceName": "src/oracles/euler/ETokenMultiOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol", - "src/oracles/euler/IEToken.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ETokenMultiOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ETokenMultiOracle.sol/ETokenMultiOracle.json" - } - } - }, - "src/oracles/euler/IEToken.sol": { - "lastModificationDate": 1677585086209, - "contentHash": "cfd4d6aae3f8d8abf6272154423f73f8", - "sourceName": "src/oracles/euler/IEToken.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.6.0", - "artifacts": { - "IEToken": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IEToken.sol/IEToken.json" - } - } - }, - "src/oracles/lido/IWstETH.sol": { - "lastModificationDate": 1677585086209, - "contentHash": "a460d641bb88bcea2f5a410b964f3296", - "sourceName": "src/oracles/lido/IWstETH.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol" - ], - "versionRequirement": ">=0.6.0", - "artifacts": { - "IWstETH": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IWstETH.sol/IWstETH.json" - } - } - }, - "src/oracles/lido/LidoOracle.sol": { - "lastModificationDate": 1677585086209, - "contentHash": "9392d449de9d6d72bd8a9feb30bc62c2", - "sourceName": "src/oracles/lido/LidoOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol", - "src/oracles/lido/IWstETH.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "LidoOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "LidoOracle.sol/LidoOracle.json" - } - } - }, - "src/oracles/rocket/RETHOracle.sol": { - "lastModificationDate": 1677585086209, - "contentHash": "baaee57d6e94e29d174a3711738869b7", - "sourceName": "src/oracles/rocket/RETHOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "IRocketTokenRETH": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "RETHOracle.sol/IRocketTokenRETH.json" - }, - "RETHOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "RETHOracle.sol/RETHOracle.json" - } - } - }, - "src/oracles/strategy/StrategyOracle.sol": { - "lastModificationDate": 1677585086209, - "contentHash": "95db87bd5d85fb1638640bc20e7053b4", - "sourceName": "src/oracles/strategy/StrategyOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol", - "src/interfaces/IStrategy.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "StrategyOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "StrategyOracle.sol/StrategyOracle.json" - } - } - }, - "src/oracles/uniswap/IUniswapV3PoolImmutables.sol": { - "lastModificationDate": 1677585086210, - "contentHash": "e236e09a9d654fb2f20a6da5dba2bd2f", - "sourceName": "src/oracles/uniswap/IUniswapV3PoolImmutables.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.5.0", - "artifacts": { - "IUniswapV3PoolImmutables": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IUniswapV3PoolImmutables.sol/IUniswapV3PoolImmutables.json" - } - } - }, - "src/oracles/uniswap/UniswapV3Oracle.sol": { - "lastModificationDate": 1677585086210, - "contentHash": "26e047d35409662423f0818194fa883f", - "sourceName": "src/oracles/uniswap/UniswapV3Oracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol", - "src/oracles/uniswap/uniswapv0.8/FullMath.sol", - "src/oracles/uniswap/uniswapv0.8/IUniswapV3Pool.sol", - "src/oracles/uniswap/uniswapv0.8/LowGasSafeMath.sol", - "src/oracles/uniswap/uniswapv0.8/OracleLibrary.sol", - "src/oracles/uniswap/uniswapv0.8/PoolAddress.sol", - "src/oracles/uniswap/uniswapv0.8/TickMath.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolActions.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolDerivedState.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolEvents.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolImmutables.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolOwnerActions.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolState.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "UniswapV3Oracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "UniswapV3Oracle.sol/UniswapV3Oracle.json" - } - } - }, - "src/oracles/uniswap/uniswapv0.8/FullMath.sol": { - "lastModificationDate": 1677585086210, - "contentHash": "604af1431f8a64e05968a314822fa488", - "sourceName": "src/oracles/uniswap/uniswapv0.8/FullMath.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.4.0", - "artifacts": { - "FullMath": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FullMath.sol/FullMath.json" - } - } - }, - "src/oracles/uniswap/uniswapv0.8/IUniswapV3Pool.sol": { - "lastModificationDate": 1677585086210, - "contentHash": "e6badd8268772b99e7ca397aff11a965", - "sourceName": "src/oracles/uniswap/uniswapv0.8/IUniswapV3Pool.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolActions.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolDerivedState.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolEvents.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolImmutables.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolOwnerActions.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolState.sol" - ], - "versionRequirement": ">=0.5.0", - "artifacts": { - "IUniswapV3Pool": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IUniswapV3Pool.sol/IUniswapV3Pool.json" - } - } - }, - "src/oracles/uniswap/uniswapv0.8/LowGasSafeMath.sol": { - "lastModificationDate": 1677585086210, - "contentHash": "ff4d506a22d90b314ab325b437ff7729", - "sourceName": "src/oracles/uniswap/uniswapv0.8/LowGasSafeMath.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.7.0", - "artifacts": { - "LowGasSafeMath": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "LowGasSafeMath.sol/LowGasSafeMath.json" - } - } - }, - "src/oracles/uniswap/uniswapv0.8/OracleLibrary.sol": { - "lastModificationDate": 1677585086210, - "contentHash": "db5b1e96b6fa2ce26bf049ab8c516366", - "sourceName": "src/oracles/uniswap/uniswapv0.8/OracleLibrary.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "src/oracles/uniswap/uniswapv0.8/FullMath.sol", - "src/oracles/uniswap/uniswapv0.8/IUniswapV3Pool.sol", - "src/oracles/uniswap/uniswapv0.8/LowGasSafeMath.sol", - "src/oracles/uniswap/uniswapv0.8/PoolAddress.sol", - "src/oracles/uniswap/uniswapv0.8/TickMath.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolActions.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolDerivedState.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolEvents.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolImmutables.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolOwnerActions.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolState.sol" - ], - "versionRequirement": ">=0.5.0", - "artifacts": { - "OracleLibrary": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "OracleLibrary.sol/OracleLibrary.json" - } - } - }, - "src/oracles/uniswap/uniswapv0.8/PoolAddress.sol": { - "lastModificationDate": 1677585086210, - "contentHash": "0ede1d2569429314158fd791823e9148", - "sourceName": "src/oracles/uniswap/uniswapv0.8/PoolAddress.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.5.0", - "artifacts": { - "PoolAddress": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "PoolAddress.sol/PoolAddress.json" - } - } - }, - "src/oracles/uniswap/uniswapv0.8/TickMath.sol": { - "lastModificationDate": 1677585086210, - "contentHash": "51f56be5c19bedfa154a201466e87be6", - "sourceName": "src/oracles/uniswap/uniswapv0.8/TickMath.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.5.0", - "artifacts": { - "TickMath": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TickMath.sol/TickMath.json" - } - } - }, - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolActions.sol": { - "lastModificationDate": 1677585086210, - "contentHash": "83d338eb1394008c808a20ac7c5bab0c", - "sourceName": "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolActions.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.5.0", - "artifacts": { - "IUniswapV3PoolActions": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IUniswapV3PoolActions.sol/IUniswapV3PoolActions.json" - } - } - }, - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolDerivedState.sol": { - "lastModificationDate": 1677585086210, - "contentHash": "25b71180ec9f5132a158334971ee2ace", - "sourceName": "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolDerivedState.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.5.0", - "artifacts": { - "IUniswapV3PoolDerivedState": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IUniswapV3PoolDerivedState.sol/IUniswapV3PoolDerivedState.json" - } - } - }, - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolEvents.sol": { - "lastModificationDate": 1677585086210, - "contentHash": "05abb59ec113db1046f7dadc78bb297b", - "sourceName": "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolEvents.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.5.0", - "artifacts": { - "IUniswapV3PoolEvents": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IUniswapV3PoolEvents.sol/IUniswapV3PoolEvents.json" - } - } - }, - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolImmutables.sol": { - "lastModificationDate": 1677585086210, - "contentHash": "e236e09a9d654fb2f20a6da5dba2bd2f", - "sourceName": "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolImmutables.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.5.0", - "artifacts": { - "IUniswapV3PoolImmutables": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "pool/IUniswapV3PoolImmutables.sol/IUniswapV3PoolImmutables.json" - } - } - }, - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolOwnerActions.sol": { - "lastModificationDate": 1677585086210, - "contentHash": "1b06ecc79e75f836c446ccf286e671e4", - "sourceName": "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolOwnerActions.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.5.0", - "artifacts": { - "IUniswapV3PoolOwnerActions": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IUniswapV3PoolOwnerActions.sol/IUniswapV3PoolOwnerActions.json" - } - } - }, - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolState.sol": { - "lastModificationDate": 1677585086211, - "contentHash": "0488495ef9087b4513d3b43634035ef9", - "sourceName": "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolState.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.5.0", - "artifacts": { - "IUniswapV3PoolState": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IUniswapV3PoolState.sol/IUniswapV3PoolState.json" - } - } - }, - "src/oracles/yearn/IYvToken.sol": { - "lastModificationDate": 1677585086211, - "contentHash": "9dc68080d5785ae36d098a8ede1d7daf", - "sourceName": "src/oracles/yearn/IYvToken.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol" - ], - "versionRequirement": ">=0.6.0", - "artifacts": { - "IYvToken": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IYvToken.sol/IYvToken.json" - } - } - }, - "src/oracles/yearn/YearnVaultMultiOracle.sol": { - "lastModificationDate": 1677585086211, - "contentHash": "4ae06b6b44beb7693d8072bc33e01169", - "sourceName": "src/oracles/yearn/YearnVaultMultiOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol", - "src/oracles/yearn/IYvToken.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "YearnVaultMultiOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "YearnVaultMultiOracle.sol/YearnVaultMultiOracle.json" - } - } - }, - "src/oracles/yieldspace/YieldSpaceMultiOracle.sol": { - "lastModificationDate": 1677585086211, - "contentHash": "96ed0890aa962024b18f4a784003bd41", - "sourceName": "src/oracles/yieldspace/YieldSpaceMultiOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "YieldSpaceMultiOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "YieldSpaceMultiOracle.sol/YieldSpaceMultiOracle.json" - } - } - }, - "src/other/contango/ContangoLadle.sol": { - "lastModificationDate": 1677585086211, - "contentHash": "80ac1df950baf0e14779de3ffbdc89bb", - "sourceName": "src/other/contango/ContangoLadle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/dss-interfaces/src/dss/DaiAbstract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/Ladle.sol", - "src/LadleStorage.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ContangoLadle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ContangoLadle.sol/ContangoLadle.json" - } - } - }, - "src/other/contango/ContangoWand.sol": { - "lastModificationDate": 1677782855643, - "contentHash": "80ba0bf0db7f4c713b7b8b6faa5f3f89", - "sourceName": "src/other/contango/ContangoWand.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", - "src/Join.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IJoinFactory.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/ILadleGov.sol", - "src/interfaces/IOracle.sol", - "src/interfaces/IWitch.sol", - "src/interfaces/IWitchGov.sol", - "src/oracles/composite/CompositeMultiOracle.sol", - "src/oracles/yieldspace/YieldSpaceMultiOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "CauldronUtils": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ContangoWand.sol/CauldronUtils.json" - }, - "ContangoWand": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ContangoWand.sol/ContangoWand.json" - } - } - }, - "src/other/contango/ContangoWitch.sol": { - "lastModificationDate": 1677585086211, - "contentHash": "d7951e3fd7f0ef6bd40a555ab634126c", - "sourceName": "src/other/contango/ContangoWitch.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/Router.sol", - "src/Witch.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol", - "src/other/contango/interfaces/IContangoWitchListener.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ContangoWitch": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ContangoWitch.sol/ContangoWitch.json" - } - } - }, - "src/other/contango/interfaces/IContangoLadle.sol": { - "lastModificationDate": 1677585086211, - "contentHash": "b52ec7e556d20d66531bf885a4e9466b", - "sourceName": "src/other/contango/interfaces/IContangoLadle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "IContangoLadle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IContangoLadle.sol/IContangoLadle.json" - } - } - }, - "src/other/contango/interfaces/IContangoWitchListener.sol": { - "lastModificationDate": 1677585086211, - "contentHash": "4dcb34ccccdcff6e59ed64d65302390e", - "sourceName": "src/other/contango/interfaces/IContangoWitchListener.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": "^0.8.0", - "artifacts": { - "IContangoWitchListener": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IContangoWitchListener.sol/IContangoWitchListener.json" - } - } - }, - "src/other/convex/ConvexJoin.sol": { - "lastModificationDate": 1677585086211, - "contentHash": "588ae49fcafb47ea0d29f5982657d5e0", - "sourceName": "src/other/convex/ConvexJoin.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "src/Join.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IJoinFactory.sol", - "src/interfaces/IOracle.sol", - "src/other/convex/CvxMining.sol", - "src/other/convex/interfaces/ICvx.sol", - "src/other/convex/interfaces/IRewardStaking.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ConvexJoin": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ConvexJoin.sol/ConvexJoin.json" - } - } - }, - "src/other/convex/ConvexModule.sol": { - "lastModificationDate": 1677585086211, - "contentHash": "1d03761a915274ba81e37cbe5b3c578a", - "sourceName": "src/other/convex/ConvexModule.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/LadleStorage.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol", - "src/other/convex/interfaces/IConvexJoin.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ConvexModule": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ConvexModule.sol/ConvexModule.json" - } - } - }, - "src/other/convex/CvxMining.sol": { - "lastModificationDate": 1677585086212, - "contentHash": "b4bbfab3943d36b8ca8f4ccdfc370258", - "sourceName": "src/other/convex/CvxMining.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "src/other/convex/interfaces/ICvx.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "CvxMining": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CvxMining.sol/CvxMining.json" - } - } - }, - "src/other/convex/interfaces/IConvexDeposits.sol": { - "lastModificationDate": 1677585086212, - "contentHash": "3027b43c9e67f94fa3c9850b41357114", - "sourceName": "src/other/convex/interfaces/IConvexDeposits.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.13", - "artifacts": { - "IConvexDeposits": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IConvexDeposits.sol/IConvexDeposits.json" - } - } - }, - "src/other/convex/interfaces/IConvexJoin.sol": { - "lastModificationDate": 1677585086212, - "contentHash": "70485476a0dca0bff99588df9754c261", - "sourceName": "src/other/convex/interfaces/IConvexJoin.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.13", - "artifacts": { - "IConvexJoin": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IConvexJoin.sol/IConvexJoin.json" - } - } - }, - "src/other/convex/interfaces/ICvx.sol": { - "lastModificationDate": 1677585086212, - "contentHash": "1cbd674278dc1ad5aff0241240720723", - "sourceName": "src/other/convex/interfaces/ICvx.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ICvx": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ICvx.sol/ICvx.json" - } - } - }, - "src/other/convex/interfaces/IRewardStaking.sol": { - "lastModificationDate": 1677585086212, - "contentHash": "e723f65694b3775bc182d938bcf19598", - "sourceName": "src/other/convex/interfaces/IRewardStaking.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.13", - "artifacts": { - "IRewardStaking": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IRewardStaking.sol/IRewardStaking.json" - } - } - }, - "src/other/lido/StEthConverter.sol": { - "lastModificationDate": 1677585086212, - "contentHash": "2186b39d065ead42197108d38843b964", - "sourceName": "src/other/lido/StEthConverter.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "src/oracles/lido/IWstETH.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "StEthConverter": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "StEthConverter.sol/StEthConverter.json" - } - } - }, - "src/other/notional/ERC1155.sol": { - "lastModificationDate": 1677585086212, - "contentHash": "47c2fbebd45a0f3c61ba2751d867fbfd", - "sourceName": "src/other/notional/ERC1155.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.0", - "artifacts": { - "ERC1155": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ERC1155.sol/ERC1155.json" - }, - "ERC1155TokenReceiver": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ERC1155.sol/ERC1155TokenReceiver.json" - } - } - }, - "src/other/notional/ERC1155Mock.sol": { - "lastModificationDate": 1677585086212, - "contentHash": "8bfe53e4dbd2b7b9194a923104465a0c", - "sourceName": "src/other/notional/ERC1155Mock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "src/other/notional/ERC1155.sol" - ], - "versionRequirement": ">=0.8.0", - "artifacts": { - "ERC1155Mock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ERC1155Mock.sol/ERC1155Mock.json" - } - } - }, - "src/other/notional/FCashMock.sol": { - "lastModificationDate": 1677585086212, - "contentHash": "54192903a7f90f8fda596f7d330707c5", - "sourceName": "src/other/notional/FCashMock.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "src/mocks/ERC20Mock.sol", - "src/other/notional/ERC1155.sol", - "src/other/notional/interfaces/IBatchAction.sol" - ], - "versionRequirement": ">=0.8.0", - "artifacts": { - "FCashMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FCashMock.sol/FCashMock.json" - } - } - }, - "src/other/notional/NotionalJoin.sol": { - "lastModificationDate": 1677585086212, - "contentHash": "cf5b9df6c1245ea872416c12493525ed", - "sourceName": "src/other/notional/NotionalJoin.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/MinimalTransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "src/interfaces/IJoin.sol", - "src/other/notional/ERC1155.sol", - "src/other/notional/interfaces/IBatchAction.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "NotionalJoin": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoin.sol/NotionalJoin.json" - } - } - }, - "src/other/notional/NotionalMultiOracle.sol": { - "lastModificationDate": 1677585086213, - "contentHash": "a41c58912e815e862563da016e9a629b", - "sourceName": "src/other/notional/NotionalMultiOracle.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "NotionalMultiOracle": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalMultiOracle.sol/NotionalMultiOracle.json" - } - } - }, - "src/other/notional/Transfer1155Module.sol": { - "lastModificationDate": 1677585086213, - "contentHash": "84c6baf88798989885df4b13ccc1d1a2", - "sourceName": "src/other/notional/Transfer1155Module.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/LadleStorage.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol", - "src/other/notional/ERC1155.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "Transfer1155Module": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Transfer1155Module.sol/Transfer1155Module.json" - } - } - }, - "src/other/notional/interfaces/IBatchAction.sol": { - "lastModificationDate": 1677585086213, - "contentHash": "927fc9f85037f762f69573227d76b2e9", - "sourceName": "src/other/notional/interfaces/IBatchAction.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.13", - "artifacts": { - "IBatchAction": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IBatchAction.sol/IBatchAction.json" - } - } - }, - "src/other/notional/interfaces/INotionalJoin.sol": { - "lastModificationDate": 1677585086213, - "contentHash": "c9d88f7310d32a1d920ad02bd7f482d4", - "sourceName": "src/other/notional/interfaces/INotionalJoin.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "src/interfaces/IJoin.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "INotionalJoin": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "INotionalJoin.sol/INotionalJoin.json" - } - } - }, - "src/other/tether/IUSDT.sol": { - "lastModificationDate": 1677585086213, - "contentHash": "5c4a8103d08bde65e8c291109bd6688f", - "sourceName": "src/other/tether/IUSDT.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": "^0.8.13", - "artifacts": { - "IUSDT": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "IUSDT.sol/IUSDT.json" - } - } - }, - "src/other/tether/TetherJoin.sol": { - "lastModificationDate": 1677585086213, - "contentHash": "3087600c8a27b7dbca389506df0d5349", - "sourceName": "src/other/tether/TetherJoin.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "src/FlashJoin.sol", - "src/Join.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IJoinFactory.sol", - "src/other/tether/IUSDT.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "TetherJoin": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TetherJoin.sol/TetherJoin.json" - } - } - }, - "src/test/Witch.t.sol": { - "lastModificationDate": 1677586067089, - "contentHash": "c0b8779fc6b702cf9066fb226d04f889", - "sourceName": "src/test/Witch.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", - "src/Router.sol", - "src/Witch.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol", - "src/interfaces/IWitch.sol", - "src/interfaces/IWitchGov.sol", - "src/test/utils/Mocks.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "WitchStateZero": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Witch.t.sol/WitchStateZero.json" - }, - "WitchStateZeroTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Witch.t.sol/WitchStateZeroTest.json" - }, - "WitchWithAuction": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Witch.t.sol/WitchWithAuction.json" - }, - "WitchWithMetadata": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Witch.t.sol/WitchWithMetadata.json" - }, - "WitchWithMetadataTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Witch.t.sol/WitchWithMetadataTest.json" - } - } - }, - "src/test/fyToken/FYToken.t.sol": { - "lastModificationDate": 1677585086213, - "contentHash": "15841854951d4b33ed24331502ce9abe", - "sourceName": "src/test/fyToken/FYToken.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/SafeERC20Namer.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/AddressStringUtil.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/Cauldron.sol", - "src/FYToken.sol", - "src/Join.sol", - "src/Router.sol", - "src/constants/Constants.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IJoinFactory.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol", - "src/mocks/ERC20Mock.sol", - "src/mocks/oracles/ISourceMock.sol", - "src/mocks/oracles/compound/CTokenChiMock.sol", - "src/test/utils/TestConstants.sol", - "src/test/utils/TestExtensions.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "AfterMaturity": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYToken.t.sol/AfterMaturity.json" - }, - "AfterMaturityTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYToken.t.sol/AfterMaturityTest.json" - }, - "FYTokenTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYToken.t.sol/FYTokenTest.json" - }, - "OnceMatured": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYToken.t.sol/OnceMatured.json" - }, - "OnceMaturedTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYToken.t.sol/OnceMaturedTest.json" - }, - "ZeroState": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYToken.t.sol/ZeroState.json" - } - } - }, - "src/test/fyToken/FYTokenFlash.t.sol": { - "lastModificationDate": 1677585086214, - "contentHash": "a95e82148d824ae9a71c490bbb187323", - "sourceName": "src/test/fyToken/FYTokenFlash.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/SafeERC20Namer.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/AddressStringUtil.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/Cauldron.sol", - "src/FYToken.sol", - "src/Join.sol", - "src/Router.sol", - "src/constants/Constants.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IJoinFactory.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol", - "src/mocks/ERC20Mock.sol", - "src/mocks/FlashBorrower.sol", - "src/mocks/oracles/ISourceMock.sol", - "src/mocks/oracles/compound/CTokenChiMock.sol", - "src/test/utils/TestConstants.sol", - "src/test/utils/TestExtensions.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "AfterMaturity": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYTokenFlash.t.sol/AfterMaturity.json" - }, - "AfterMaturityTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYTokenFlash.t.sol/AfterMaturityTest.json" - }, - "FYTokenFlashTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYTokenFlash.t.sol/FYTokenFlashTest.json" - }, - "WithNonZeroFee": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYTokenFlash.t.sol/WithNonZeroFee.json" - }, - "WithNonZeroFeeTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYTokenFlash.t.sol/WithNonZeroFeeTest.json" - }, - "WithZeroFee": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYTokenFlash.t.sol/WithZeroFee.json" - }, - "WithZeroFeeTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYTokenFlash.t.sol/WithZeroFeeTest.json" - }, - "ZeroState": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FYTokenFlash.t.sol/ZeroState.json" - } - } - }, - "src/test/join/FlashJoin.t.sol": { - "lastModificationDate": 1677585086214, - "contentHash": "52728dcb19e2d1946adacaeb7b292ace", - "sourceName": "src/test/join/FlashJoin.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "src/FlashJoin.sol", - "src/Join.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IJoinFactory.sol", - "src/mocks/ERC20Mock.sol", - "src/mocks/FlashBorrower.sol", - "src/test/utils/TestConstants.sol", - "src/test/utils/TestExtensions.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "Deployed": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FlashJoin.t.sol/Deployed.json" - }, - "NonZeroFees": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FlashJoin.t.sol/NonZeroFees.json" - }, - "NonZeroFeesTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FlashJoin.t.sol/NonZeroFeesTest.json" - }, - "ZeroFeeTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "FlashJoin.t.sol/ZeroFeeTest.json" - } - } - }, - "src/test/join/Join.t.sol": { - "lastModificationDate": 1677585086214, - "contentHash": "99f930b94db5104be3d747110d30b6d7", - "sourceName": "src/test/join/Join.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "src/Join.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IJoinFactory.sol", - "src/mocks/ERC20Mock.sol", - "src/test/utils/TestConstants.sol", - "src/test/utils/TestExtensions.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "Deployed": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Join.t.sol/Deployed.json" - }, - "DeployedTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Join.t.sol/DeployedTest.json" - }, - "WithOtherTokens": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Join.t.sol/WithOtherTokens.json" - }, - "WithOtherTokensTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Join.t.sol/WithOtherTokensTest.json" - }, - "WithTokens": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Join.t.sol/WithTokens.json" - }, - "WithTokensTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Join.t.sol/WithTokensTest.json" - } - } - }, - "src/test/modules/HealerModule.t.sol": { - "lastModificationDate": 1677585086214, - "contentHash": "c548642a373402a87398131d3c291d9b", - "sourceName": "src/test/modules/HealerModule.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/LadleStorage.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol", - "src/mocks/WETH9Mock.sol", - "src/modules/HealerModule.sol", - "src/test/utils/TestConstants.sol", - "src/test/utils/TestExtensions.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "HealerModuleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "HealerModule.t.sol/HealerModuleTest.json" - } - } - }, - "src/test/modules/RepayFromLadleModule.t.sol": { - "lastModificationDate": 1677585086214, - "contentHash": "0b799e38332723fc51a32ba4c70978b1", - "sourceName": "src/test/modules/RepayFromLadleModule.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "src/LadleStorage.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol", - "src/mocks/WETH9Mock.sol", - "src/modules/RepayFromLadleModule.sol", - "src/test/utils/TestConstants.sol", - "src/test/utils/TestExtensions.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "RepayFromLadleModuleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "RepayFromLadleModule.t.sol/RepayFromLadleModuleTest.json" - }, - "WithVaultProvisioned": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "RepayFromLadleModule.t.sol/WithVaultProvisioned.json" - }, - "ZeroTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "RepayFromLadleModule.t.sol/ZeroTest.json" - } - } - }, - "src/test/oracles/AccumulatorOracle.t.sol": { - "lastModificationDate": 1677585086214, - "contentHash": "3ff730eaf458a6485d1745397760679d", - "sourceName": "src/test/oracles/AccumulatorOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "src/constants/Constants.sol", - "src/interfaces/IOracle.sol", - "src/oracles/accumulator/AccumulatorMultiOracle.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "AccumulatorOracleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "AccumulatorOracle.t.sol/AccumulatorOracleTest.json" - }, - "WithSourceSet": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "AccumulatorOracle.t.sol/WithSourceSet.json" - }, - "WithSourceSetTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "AccumulatorOracle.t.sol/WithSourceSetTest.json" - }, - "ZeroState": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "AccumulatorOracle.t.sol/ZeroState.json" - } - } - }, - "src/test/oracles/CTokenMultiOracle.t.sol": { - "lastModificationDate": 1677585086215, - "contentHash": "ed46da9a58dc5f4d2a6c305383f0b027", - "sourceName": "src/test/oracles/CTokenMultiOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/constants/Constants.sol", - "src/interfaces/IOracle.sol", - "src/mocks/DAIMock.sol", - "src/mocks/USDCMock.sol", - "src/mocks/oracles/ISourceMock.sol", - "src/mocks/oracles/compound/CTokenMock.sol", - "src/oracles/compound/CTokenInterface.sol", - "src/oracles/compound/CTokenMultiOracle.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "CTokenMultiOracleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CTokenMultiOracle.t.sol/CTokenMultiOracleTest.json" - } - } - }, - "src/test/oracles/ChainlinkMultiOracle.t.sol": { - "lastModificationDate": 1677585086215, - "contentHash": "55fbea7071b38f2f3fa3ef4575a80a0c", - "sourceName": "src/test/oracles/ChainlinkMultiOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/constants/Constants.sol", - "src/interfaces/IOracle.sol", - "src/mocks/DAIMock.sol", - "src/mocks/ERC20Mock.sol", - "src/mocks/USDCMock.sol", - "src/mocks/WETH9Mock.sol", - "src/mocks/oracles/ISourceMock.sol", - "src/mocks/oracles/OracleMock.sol", - "src/mocks/oracles/chainlink/ChainlinkAggregatorV3Mock.sol", - "src/oracles/chainlink/AggregatorV3Interface.sol", - "src/oracles/chainlink/ChainlinkMultiOracle.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ChainlinkMultiOracleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ChainlinkMultiOracle.t.sol/ChainlinkMultiOracleTest.json" - } - } - }, - "src/test/oracles/ChainlinkUSDMultiOracle.t.sol": { - "lastModificationDate": 1677585086215, - "contentHash": "58c8dbe1e62ebf85c8abe4cb4f4ce2d1", - "sourceName": "src/test/oracles/ChainlinkUSDMultiOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/constants/Constants.sol", - "src/interfaces/IOracle.sol", - "src/mocks/ERC20Mock.sol", - "src/mocks/oracles/ISourceMock.sol", - "src/mocks/oracles/chainlink/ChainlinkAggregatorV3Mock.sol", - "src/mocks/oracles/chainlink/ChainlinkAggregatorV3MockEx.sol", - "src/mocks/oracles/chainlink/FlagsInterfaceMock.sol", - "src/oracles/chainlink/AggregatorV3Interface.sol", - "src/oracles/chainlink/ChainlinkL2USDMultiOracle.sol", - "src/oracles/chainlink/ChainlinkUSDMultiOracle.sol", - "src/oracles/chainlink/FlagsInterface.sol", - "src/test/utils/TestConstants.sol", - "src/test/utils/TestExtensions.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ChainlinkUSDMultiOracleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ChainlinkUSDMultiOracle.t.sol/ChainlinkUSDMultiOracleTest.json" - } - } - }, - "src/test/oracles/CompositeMultiOracle.t.sol": { - "lastModificationDate": 1677585086215, - "contentHash": "18568dad409a49eb28f92db83eb4d627", - "sourceName": "src/test/oracles/CompositeMultiOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/constants/Constants.sol", - "src/interfaces/IOracle.sol", - "src/mocks/DAIMock.sol", - "src/mocks/ERC20Mock.sol", - "src/mocks/USDCMock.sol", - "src/mocks/WETH9Mock.sol", - "src/mocks/oracles/ISourceMock.sol", - "src/mocks/oracles/chainlink/ChainlinkAggregatorV3Mock.sol", - "src/mocks/oracles/chainlink/ChainlinkAggregatorV3MockEx.sol", - "src/oracles/chainlink/AggregatorV3Interface.sol", - "src/oracles/chainlink/ChainlinkMultiOracle.sol", - "src/oracles/composite/CompositeMultiOracle.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "CompositeMultiOracleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CompositeMultiOracle.t.sol/CompositeMultiOracleTest.json" - } - } - }, - "src/test/oracles/CompoundMultiOracle.t.sol": { - "lastModificationDate": 1677585086215, - "contentHash": "a6674ff35055da68d04f0218bef97b19", - "sourceName": "src/test/oracles/CompoundMultiOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/constants/Constants.sol", - "src/interfaces/IOracle.sol", - "src/mocks/ERC20Mock.sol", - "src/mocks/oracles/ISourceMock.sol", - "src/mocks/oracles/compound/CTokenChiMock.sol", - "src/mocks/oracles/compound/CTokenRateMock.sol", - "src/oracles/compound/CTokenInterface.sol", - "src/oracles/compound/CompoundMultiOracle.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "CompoundMultiOracleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CompoundMultiOracle.t.sol/CompoundMultiOracleTest.json" - } - } - }, - "src/test/oracles/ConvexOracle.t.sol": { - "lastModificationDate": 1677585086215, - "contentHash": "c513d51dd4cb2b35182e954712254e66", - "sourceName": "src/test/oracles/ConvexOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/constants/Constants.sol", - "src/interfaces/IOracle.sol", - "src/mocks/ERC20Mock.sol", - "src/oracles/chainlink/AggregatorV3Interface.sol", - "src/oracles/chainlink/ChainlinkMultiOracle.sol", - "src/oracles/composite/CompositeMultiOracle.sol", - "src/oracles/convex/Cvx3CrvOracle.sol", - "src/oracles/convex/ICurvePool.sol", - "src/test/utils/TestConstants.sol", - "src/test/utils/TestExtensions.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ConvexOracleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ConvexOracle.t.sol/ConvexOracleTest.json" - } - } - }, - "src/test/oracles/CrabOracle.t.sol": { - "lastModificationDate": 1677585086215, - "contentHash": "1b281dfae123db44bd39f177ccab84f7", - "sourceName": "src/test/oracles/CrabOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol", - "src/mocks/ERC20Mock.sol", - "src/oracles/crab/CrabOracle.sol", - "src/oracles/uniswap/UniswapV3Oracle.sol", - "src/oracles/uniswap/uniswapv0.8/FullMath.sol", - "src/oracles/uniswap/uniswapv0.8/IUniswapV3Pool.sol", - "src/oracles/uniswap/uniswapv0.8/LowGasSafeMath.sol", - "src/oracles/uniswap/uniswapv0.8/OracleLibrary.sol", - "src/oracles/uniswap/uniswapv0.8/PoolAddress.sol", - "src/oracles/uniswap/uniswapv0.8/TickMath.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolActions.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolDerivedState.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolEvents.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolImmutables.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolOwnerActions.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolState.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "CrabOracleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "CrabOracle.t.sol/CrabOracleTest.json" - } - } - }, - "src/test/oracles/ETokenMultiOracle.t.sol": { - "lastModificationDate": 1677585086216, - "contentHash": "c7b143488069190e39d78217e90c397f", - "sourceName": "src/test/oracles/ETokenMultiOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol", - "src/oracles/euler/ETokenMultiOracle.sol", - "src/oracles/euler/IEToken.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "PermissionedState": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ETokenMultiOracle.t.sol/PermissionedState.json" - }, - "PermissionedStateTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ETokenMultiOracle.t.sol/PermissionedStateTest.json" - }, - "SourceSetState": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ETokenMultiOracle.t.sol/SourceSetState.json" - }, - "SourceSetStateTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ETokenMultiOracle.t.sol/SourceSetStateTest.json" - }, - "ZeroState": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ETokenMultiOracle.t.sol/ZeroState.json" - }, - "ZeroStateTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ETokenMultiOracle.t.sol/ZeroStateTest.json" - } - } - }, - "src/test/oracles/LidoOracle.t.sol": { - "lastModificationDate": 1677585086216, - "contentHash": "c7d1f36325a705467a6f7e1db92e5881", - "sourceName": "src/test/oracles/LidoOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/constants/Constants.sol", - "src/interfaces/IOracle.sol", - "src/mocks/ERC20Mock.sol", - "src/mocks/USDCMock.sol", - "src/mocks/WETH9Mock.sol", - "src/mocks/oracles/ISourceMock.sol", - "src/mocks/oracles/chainlink/ChainlinkAggregatorV3Mock.sol", - "src/mocks/oracles/chainlink/ChainlinkAggregatorV3MockEx.sol", - "src/mocks/oracles/lido/WstETHMock.sol", - "src/oracles/chainlink/AggregatorV3Interface.sol", - "src/oracles/chainlink/ChainlinkMultiOracle.sol", - "src/oracles/composite/CompositeMultiOracle.sol", - "src/oracles/lido/IWstETH.sol", - "src/oracles/lido/LidoOracle.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "LidoOracleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "LidoOracle.t.sol/LidoOracleTest.json" - } - } - }, - "src/test/oracles/NotionalMultiOracle.t.sol": { - "lastModificationDate": 1677585086216, - "contentHash": "ede5bda6ac3c4be170cb31151e847d4e", - "sourceName": "src/test/oracles/NotionalMultiOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol", - "src/mocks/DAIMock.sol", - "src/mocks/ERC20Mock.sol", - "src/mocks/USDCMock.sol", - "src/other/notional/NotionalMultiOracle.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "NotionalMultiOracleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalMultiOracle.t.sol/NotionalMultiOracleTest.json" - } - } - }, - "src/test/oracles/RETHOracle.t.sol": { - "lastModificationDate": 1677585086216, - "contentHash": "8993552921d5bd0cec1b0e9505442b2f", - "sourceName": "src/test/oracles/RETHOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol", - "src/oracles/rocket/RETHOracle.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "RETHOracleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "RETHOracle.t.sol/RETHOracleTest.json" - } - } - }, - "src/test/oracles/StrategyOracle.t.sol": { - "lastModificationDate": 1677585086216, - "contentHash": "73a690f07f5a49b3486d6d904a17165f", - "sourceName": "src/test/oracles/StrategyOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol", - "src/interfaces/IStrategy.sol", - "src/mocks/ERC20Mock.sol", - "src/oracles/strategy/StrategyOracle.sol", - "src/test/utils/TestConstants.sol", - "src/test/utils/TestExtensions.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "StrategyOracleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "StrategyOracle.t.sol/StrategyOracleTest.json" - } - } - }, - "src/test/oracles/UniswapOracle.t.sol": { - "lastModificationDate": 1677585086216, - "contentHash": "915c31d152bd2e0214ff3e98212823d5", - "sourceName": "src/test/oracles/UniswapOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol", - "src/mocks/ERC20Mock.sol", - "src/oracles/uniswap/UniswapV3Oracle.sol", - "src/oracles/uniswap/uniswapv0.8/FullMath.sol", - "src/oracles/uniswap/uniswapv0.8/IUniswapV3Pool.sol", - "src/oracles/uniswap/uniswapv0.8/LowGasSafeMath.sol", - "src/oracles/uniswap/uniswapv0.8/OracleLibrary.sol", - "src/oracles/uniswap/uniswapv0.8/PoolAddress.sol", - "src/oracles/uniswap/uniswapv0.8/TickMath.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolActions.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolDerivedState.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolEvents.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolImmutables.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolOwnerActions.sol", - "src/oracles/uniswap/uniswapv0.8/pool/IUniswapV3PoolState.sol", - "src/test/utils/TestConstants.sol", - "src/test/utils/TestExtensions.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "UniswapOracleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "UniswapOracle.t.sol/UniswapOracleTest.json" - } - } - }, - "src/test/oracles/YearnVaultMultiOracle.t.sol": { - "lastModificationDate": 1677585086216, - "contentHash": "66231107e451be12e074a2b39632fc65", - "sourceName": "src/test/oracles/YearnVaultMultiOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "src/interfaces/IOracle.sol", - "src/mocks/DAIMock.sol", - "src/mocks/ERC20Mock.sol", - "src/mocks/USDCMock.sol", - "src/mocks/YvTokenMock.sol", - "src/mocks/oracles/ISourceMock.sol", - "src/oracles/yearn/IYvToken.sol", - "src/oracles/yearn/YearnVaultMultiOracle.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "YearnVaultMultiOracleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "YearnVaultMultiOracle.t.sol/YearnVaultMultiOracleTest.json" - } - } - }, - "src/test/oracles/YieldSpaceMultiOracle.dai.it.t.sol": { - "lastModificationDate": 1677585086216, - "contentHash": "9d4cbb1f3b3ef1a4a8796127b5698ade", - "sourceName": "src/test/oracles/YieldSpaceMultiOracle.dai.it.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/Exp64x64.sol", - "lib/yieldspace-tv/src/Math64x64.sol", - "lib/yieldspace-tv/src/Pool/Pool.sol", - "lib/yieldspace-tv/src/Pool/PoolErrors.sol", - "lib/yieldspace-tv/src/Pool/PoolEvents.sol", - "lib/yieldspace-tv/src/Pool/PoolImports.sol", - "lib/yieldspace-tv/src/YieldMath.sol", - "lib/yieldspace-tv/src/interfaces/IERC4626.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", - "lib/yieldspace-tv/src/oracle/PoolOracle.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol", - "src/oracles/yieldspace/YieldSpaceMultiOracle.sol", - "src/test/utils/Mocks.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "YieldSpaceMultiOracleDAIIntegrationTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "YieldSpaceMultiOracle.dai.it.t.sol/YieldSpaceMultiOracleDAIIntegrationTest.json" - } - } - }, - "src/test/oracles/YieldSpaceMultiOracle.t.sol": { - "lastModificationDate": 1677585086216, - "contentHash": "e2f0382f5e6cadfaf854b3b21ae56b1c", - "sourceName": "src/test/oracles/YieldSpaceMultiOracle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol", - "src/mocks/ERC20Mock.sol", - "src/oracles/yieldspace/YieldSpaceMultiOracle.sol", - "src/test/utils/Mocks.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "YieldSpaceMultiOracleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "YieldSpaceMultiOracle.t.sol/YieldSpaceMultiOracleTest.json" - } - } - }, - "src/test/oracles/YieldSpaceMultiOracle.usdc.it.t.sol": { - "lastModificationDate": 1677585086217, - "contentHash": "c88e6a415bfa04702cde8722c5cd772b", - "sourceName": "src/test/oracles/YieldSpaceMultiOracle.usdc.it.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/Exp64x64.sol", - "lib/yieldspace-tv/src/Math64x64.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", - "lib/yieldspace-tv/src/oracle/PoolOracle.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol", - "src/oracles/yieldspace/YieldSpaceMultiOracle.sol", - "src/test/utils/Mocks.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "YieldSpaceMultiOracleUSDCIntegrationTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "YieldSpaceMultiOracle.usdc.it.t.sol/YieldSpaceMultiOracleUSDCIntegrationTest.json" - } - } - }, - "src/test/other/contango/ContangoLadle.t.sol": { - "lastModificationDate": 1677585086217, - "contentHash": "2a42cdbb44d8bc74b34e402808e65cce", - "sourceName": "src/test/other/contango/ContangoLadle.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/dss-interfaces/src/dss/DaiAbstract.sol", - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", - "src/Ladle.sol", - "src/LadleStorage.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol", - "src/other/contango/ContangoLadle.sol", - "src/test/utils/Mocks.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ContangoLadleTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ContangoLadle.t.sol/ContangoLadleTest.json" - } - } - }, - "src/test/other/contango/ContangoWand.t.sol": { - "lastModificationDate": 1677782699671, - "contentHash": "3250af0dc876907da369fbf190154007", - "sourceName": "src/test/other/contango/ContangoWand.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/dss-interfaces/src/dss/DaiAbstract.sol", - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", - "src/Cauldron.sol", - "src/Join.sol", - "src/Ladle.sol", - "src/LadleStorage.sol", - "src/Router.sol", - "src/constants/Constants.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IJoinFactory.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/ILadleGov.sol", - "src/interfaces/IOracle.sol", - "src/interfaces/IWitch.sol", - "src/interfaces/IWitchGov.sol", - "src/oracles/composite/CompositeMultiOracle.sol", - "src/oracles/yieldspace/YieldSpaceMultiOracle.sol", - "src/other/contango/ContangoLadle.sol", - "src/other/contango/ContangoWand.sol", - "src/test/utils/Mocks.sol", - "src/test/utils/TestConstants.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "ContangoWandTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "ContangoWand.t.sol/ContangoWandTest.json" - } - } - }, - "src/test/other/notional/NotionalJoin.t.sol": { - "lastModificationDate": 1677585086217, - "contentHash": "eb5c75a0e633784db02a9ffd2cca5f9a", - "sourceName": "src/test/other/notional/NotionalJoin.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/MinimalTransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/IsContract.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", - "src/Join.sol", - "src/Router.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IJoinFactory.sol", - "src/interfaces/ILadle.sol", - "src/interfaces/IOracle.sol", - "src/mocks/ERC20Mock.sol", - "src/other/notional/ERC1155.sol", - "src/other/notional/NotionalJoin.sol", - "src/other/notional/interfaces/IBatchAction.sol", - "src/test/other/notional/NotionalTypes.sol", - "src/test/utils/Mocks.sol", - "src/test/utils/TestConstants.sol", - "src/test/utils/TestExtensions.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "StateJoined": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoin.t.sol/StateJoined.json" - }, - "StateJoinedTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoin.t.sol/StateJoinedTest.json" - }, - "StateMatured": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoin.t.sol/StateMatured.json" - }, - "StateMaturedTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoin.t.sol/StateMaturedTest.json" - }, - "StatePositiveStoredBalance": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoin.t.sol/StatePositiveStoredBalance.json" - }, - "StatePositiveStoredBalanceTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoin.t.sol/StatePositiveStoredBalanceTest.json" - }, - "StateRedeemed": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoin.t.sol/StateRedeemed.json" - }, - "StateRedeemedTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoin.t.sol/StateRedeemedTest.json" - }, - "StateZero": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoin.t.sol/StateZero.json" - }, - "StateZeroTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoin.t.sol/StateZeroTest.json" - } - } - }, - "src/test/other/notional/NotionalJoinHarness.t.sol": { - "lastModificationDate": 1677585086217, - "contentHash": "34f15d0086d0c54ba5f7f334e2f3d3f0", - "sourceName": "src/test/other/notional/NotionalJoinHarness.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/interfaces/IWETH9.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/MinimalTransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "src/interfaces/IJoin.sol", - "src/other/notional/ERC1155.sol", - "src/other/notional/NotionalJoin.sol", - "src/other/notional/interfaces/IBatchAction.sol", - "src/test/other/notional/NotionalTypes.sol", - "src/test/utils/TestConstants.sol", - "src/test/utils/TestExtensions.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "StateJoined": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoinHarness.t.sol/StateJoined.json" - }, - "StateJoinedTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoinHarness.t.sol/StateJoinedTest.json" - }, - "StateMatured": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoinHarness.t.sol/StateMatured.json" - }, - "StateMaturedTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoinHarness.t.sol/StateMaturedTest.json" - }, - "StateRedeemed": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoinHarness.t.sol/StateRedeemed.json" - }, - "StateRedeemedTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoinHarness.t.sol/StateRedeemedTest.json" - }, - "StateZero": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoinHarness.t.sol/StateZero.json" - }, - "StateZeroTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalJoinHarness.t.sol/StateZeroTest.json" - } - } - }, - "src/test/other/notional/NotionalTypes.sol": { - "lastModificationDate": 1677585086217, - "contentHash": "4afe5c0b1d7be060d1a98b52905f9db4", - "sourceName": "src/test/other/notional/NotionalTypes.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": "^0.8.14", - "artifacts": { - "Notional": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "NotionalTypes.sol/Notional.json" - } - } - }, - "src/test/other/tether/TetherJoin.t.sol": { - "lastModificationDate": 1677585086217, - "contentHash": "dd73fdb47106b8b3dbdf59fc7f04fd33", - "sourceName": "src/test/other/tether/TetherJoin.t.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/ERC3156/contracts/interfaces/IERC3156FlashBorrower.sol", - "lib/ERC3156/contracts/interfaces/IERC3156FlashLender.sol", - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20Permit.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/TransferHelper.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Cast.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/Math.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/utils/RevertMsgExtractor.sol", - "src/FlashJoin.sol", - "src/Join.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IJoinFactory.sol", - "src/mocks/ERC20Mock.sol", - "src/other/tether/IUSDT.sol", - "src/other/tether/TetherJoin.sol", - "src/test/utils/TestConstants.sol", - "src/test/utils/TestExtensions.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "Deployed": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TetherJoin.t.sol/Deployed.json" - }, - "DeployedTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TetherJoin.t.sol/DeployedTest.json" - }, - "WithFees": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TetherJoin.t.sol/WithFees.json" - }, - "WithFeesTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TetherJoin.t.sol/WithFeesTest.json" - }, - "WithOtherTokens": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TetherJoin.t.sol/WithOtherTokens.json" - }, - "WithOtherTokensTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TetherJoin.t.sol/WithOtherTokensTest.json" - }, - "WithTokens": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TetherJoin.t.sol/WithTokens.json" - }, - "WithTokensTest": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TetherJoin.t.sol/WithTokensTest.json" - } - } - }, - "src/test/utils/Mocks.sol": { - "lastModificationDate": 1677585086218, - "contentHash": "74470ac67085ce047e81bcf096f28861", - "sourceName": "src/test/utils/Mocks.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/ERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20Metadata.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC2612.sol", - "lib/yieldspace-tv/src/interfaces/IMaturingToken.sol", - "lib/yieldspace-tv/src/interfaces/IPool.sol", - "lib/yieldspace-tv/src/interfaces/IPoolOracle.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.0", - "artifacts": { - "LenientMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Mocks.sol/LenientMock.json" - }, - "Mocks": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Mocks.sol/Mocks.json" - }, - "StrictMock": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Mocks.sol/StrictMock.json" - } - } - }, - "src/test/utils/TestConstants.sol": { - "lastModificationDate": 1677588630890, - "contentHash": "eb62909d9f2ffc1e18513ac863a4a456", - "sourceName": "src/test/utils/TestConstants.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [], - "versionRequirement": ">=0.8.13", - "artifacts": { - "TestConstants": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TestConstants.sol/TestConstants.json" - } - } - }, - "src/test/utils/TestExtensions.sol": { - "lastModificationDate": 1677585086218, - "contentHash": "4abae3e71828d835276c94c24a413f2d", - "sourceName": "src/test/utils/TestExtensions.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "TestExtensions": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "TestExtensions.sol/TestExtensions.json" - } - } - }, - "src/test/utils/Utilities.sol": { - "lastModificationDate": 1677585086218, - "contentHash": "faf18186f6616798ae602ec4eea3132f", - "sourceName": "src/test/utils/Utilities.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/forge-std/lib/ds-test/src/test.sol", - "lib/forge-std/src/Base.sol", - "lib/forge-std/src/StdAssertions.sol", - "lib/forge-std/src/StdChains.sol", - "lib/forge-std/src/StdCheats.sol", - "lib/forge-std/src/StdError.sol", - "lib/forge-std/src/StdInvariant.sol", - "lib/forge-std/src/StdJson.sol", - "lib/forge-std/src/StdMath.sol", - "lib/forge-std/src/StdStorage.sol", - "lib/forge-std/src/StdUtils.sol", - "lib/forge-std/src/Test.sol", - "lib/forge-std/src/Vm.sol", - "lib/forge-std/src/console.sol", - "lib/forge-std/src/console2.sol", - "lib/forge-std/src/interfaces/IMulticall3.sol" - ], - "versionRequirement": ">=0.8.0", - "artifacts": { - "Utilities": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Utilities.sol/Utilities.json" - } - } - }, - "src/utils/Giver.sol": { - "lastModificationDate": 1677585086218, - "contentHash": "d607aedbc9180c81a6a42f37e9884eca", - "sourceName": "src/utils/Giver.sol", - "solcConfig": { - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "": [ - "ast" - ], - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "london", - "libraries": {} - } - }, - "imports": [ - "lib/yieldspace-tv/lib/yield-utils-v2/src/access/AccessControl.sol", - "lib/yieldspace-tv/lib/yield-utils-v2/src/token/IERC20.sol", - "src/interfaces/DataTypes.sol", - "src/interfaces/ICauldron.sol", - "src/interfaces/ICauldronGov.sol", - "src/interfaces/IERC5095.sol", - "src/interfaces/IFYToken.sol", - "src/interfaces/IJoin.sol", - "src/interfaces/IOracle.sol" - ], - "versionRequirement": ">=0.8.13", - "artifacts": { - "Giver": { - "0.8.15+commit.e14f2714.Darwin.appleclang": "Giver.sol/Giver.json" - } - } - } - } -} \ No newline at end of file