From 82a1615f951af18314e54602e7aba0b512c81bad Mon Sep 17 00:00:00 2001 From: Quentin Garchery Date: Fri, 31 Jul 2026 10:49:58 +0200 Subject: [PATCH 1/3] add missing comments --- src/morpho-chainlink/MorphoChainlinkOracleV2.sol | 1 + .../interfaces/IMorphoChainlinkOracleV2Factory.sol | 2 +- src/morpho-chainlink/libraries/ChainlinkDataFeedLib.sol | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/morpho-chainlink/MorphoChainlinkOracleV2.sol b/src/morpho-chainlink/MorphoChainlinkOracleV2.sol index 728a9dc..3a14a3c 100644 --- a/src/morpho-chainlink/MorphoChainlinkOracleV2.sol +++ b/src/morpho-chainlink/MorphoChainlinkOracleV2.sol @@ -55,6 +55,7 @@ contract MorphoChainlinkOracleV2 is IMorphoChainlinkOracleV2 { /// - Decimals passed as argument are correct. /// - The base vaults's sample shares quoted as assets and the base feed prices don't overflow when multiplied. /// - The quote vault's sample shares quoted as assets and the quote feed prices don't overflow when multiplied. + /// - The scale factor is not zero. /// @param baseVault Base vault. Pass address zero to omit this parameter. /// @param baseVaultConversionSample The sample amount of base vault shares used to convert to underlying. /// Pass 1 if the base asset is not a vault. Should be chosen such that converting `baseVaultConversionSample` to diff --git a/src/morpho-chainlink/interfaces/IMorphoChainlinkOracleV2Factory.sol b/src/morpho-chainlink/interfaces/IMorphoChainlinkOracleV2Factory.sol index df1ccde..75b0909 100644 --- a/src/morpho-chainlink/interfaces/IMorphoChainlinkOracleV2Factory.sol +++ b/src/morpho-chainlink/interfaces/IMorphoChainlinkOracleV2Factory.sol @@ -11,8 +11,8 @@ import {IMorphoChainlinkOracleV2} from "./IMorphoChainlinkOracleV2.sol"; /// @notice Interface for MorphoChainlinkOracleV2Factory interface IMorphoChainlinkOracleV2Factory { /// @notice Emitted when a new Chainlink oracle is created. - /// @param oracle The address of the Chainlink oracle. /// @param caller The caller of the function. + /// @param oracle The address of the Chainlink oracle. event CreateMorphoChainlinkOracleV2(address caller, address oracle); /// @notice Whether a Chainlink oracle vault was created with the factory. diff --git a/src/morpho-chainlink/libraries/ChainlinkDataFeedLib.sol b/src/morpho-chainlink/libraries/ChainlinkDataFeedLib.sol index 10da74e..29b8f7a 100644 --- a/src/morpho-chainlink/libraries/ChainlinkDataFeedLib.sol +++ b/src/morpho-chainlink/libraries/ChainlinkDataFeedLib.sol @@ -13,7 +13,7 @@ library ChainlinkDataFeedLib { /// @dev Performs safety checks and returns the latest price of a `feed`. /// @dev When `feed` is the address zero, returns 1. /// @dev Notes on safety checks: - /// - L2s are not supported. + /// - Using oracles on L2s assumes that the liveness risks are acceptable, there is no additional safety check. /// - Staleness is not checked because it's assumed that the Chainlink feed keeps its promises on this. /// - The price is not checked to be in the min/max bounds because it's assumed that the Chainlink feed keeps its /// promises on this. From 5a6661fc8615efb3f69fe483f36a2dddf823a376 Mon Sep 17 00:00:00 2001 From: Quentin Garchery Date: Fri, 31 Jul 2026 10:57:06 +0200 Subject: [PATCH 2/3] improve forking method --- foundry.toml | 9 +++++++-- test/MorphoChainlinkOracleV2FactoryTest.sol | 3 +-- test/MorphoChainlinkOracleV2Test.sol | 3 +-- test/WstEthStEthExchangeRateChainlinkAdapterTest.sol | 3 +-- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/foundry.toml b/foundry.toml index 5098ef6..d7f3d88 100644 --- a/foundry.toml +++ b/foundry.toml @@ -12,6 +12,11 @@ evm_version = "paris" wrap_comments = true [lint] -exclude_lints = ["unsafe-typecast", "unaliased-plain-import", "screaming-snake-case-const"] +exclude_lints = [ + "unsafe-typecast", + "unaliased-plain-import", + "screaming-snake-case-const", +] -# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options +[rpc_endpoints] +ethereum = "https://eth-mainnet.g.alchemy.com/v2/${ALCHEMY_KEY}" diff --git a/test/MorphoChainlinkOracleV2FactoryTest.sol b/test/MorphoChainlinkOracleV2FactoryTest.sol index ee7e89c..d98d40d 100644 --- a/test/MorphoChainlinkOracleV2FactoryTest.sol +++ b/test/MorphoChainlinkOracleV2FactoryTest.sol @@ -12,8 +12,7 @@ contract ChainlinkOracleFactoryTest is Test { MorphoChainlinkOracleV2Factory factory; function setUp() public { - vm.createSelectFork(vm.envString("ETH_RPC_URL")); - require(block.chainid == 1, "chain isn't Ethereum"); + vm.createSelectFork("ethereum"); factory = new MorphoChainlinkOracleV2Factory(); } diff --git a/test/MorphoChainlinkOracleV2Test.sol b/test/MorphoChainlinkOracleV2Test.sol index 25a24e2..9db419f 100644 --- a/test/MorphoChainlinkOracleV2Test.sol +++ b/test/MorphoChainlinkOracleV2Test.sol @@ -10,8 +10,7 @@ contract MorphoChainlinkOracleV2Test is Test { using Math for uint256; function setUp() public { - vm.createSelectFork(vm.envString("ETH_RPC_URL")); - require(block.chainid == 1, "chain isn't Ethereum"); + vm.createSelectFork("ethereum"); } function testOracleWbtcUsdc() public { diff --git a/test/WstEthStEthExchangeRateChainlinkAdapterTest.sol b/test/WstEthStEthExchangeRateChainlinkAdapterTest.sol index a2e43cb..fcdbba0 100644 --- a/test/WstEthStEthExchangeRateChainlinkAdapterTest.sol +++ b/test/WstEthStEthExchangeRateChainlinkAdapterTest.sol @@ -13,8 +13,7 @@ contract WstEthStEthExchangeRateChainlinkAdapterTest is Test { MorphoChainlinkOracleV2 internal morphoOracle; function setUp() public { - vm.createSelectFork(vm.envString("ETH_RPC_URL")); - require(block.chainid == 1, "chain isn't Ethereum"); + vm.createSelectFork("ethereum"); adapter = new WstEthStEthExchangeRateChainlinkAdapter(); morphoOracle = new MorphoChainlinkOracleV2( vaultZero, 1, AggregatorV3Interface(address(adapter)), feedZero, 18, vaultZero, 1, feedZero, feedZero, 18 From 16d2ddcd0cca7f1d2c83f9d50de24ef976e15e83 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 19 Aug 2026 13:09:54 +0000 Subject: [PATCH 3/3] ci: pass ALCHEMY_KEY to forge test foundry.toml now builds the fork URL from [rpc_endpoints] ethereum = ".../${ALCHEMY_KEY}", so the raw ETH_RPC_URL is no longer read. --- .github/workflows/foundry.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/foundry.yml b/.github/workflows/foundry.yml index c48beda..281fd95 100644 --- a/.github/workflows/foundry.yml +++ b/.github/workflows/foundry.yml @@ -32,4 +32,4 @@ jobs: forge test -vvv id: test env: - ETH_RPC_URL: "https://eth-mainnet.g.alchemy.com/v2/${{ secrets.PROTOCOL_ALCHEMY_KEY }}" + ALCHEMY_KEY: ${{ secrets.PROTOCOL_ALCHEMY_KEY }}