foundry-rs / foundry

Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.
https://getfoundry.sh
Apache License 2.0
8.21k stars 1.71k forks source link

`forge install <lib>` results in incorrect remappings #7080

Closed AbhinavMir closed 3 months ago

AbhinavMir commented 8 months ago

Component

Forge

Have you ensured that all of these are up to date?

What version of Foundry are you on?

forge 0.2.0

What command(s) is the bug in?

forge install / forge remappings

Operating System

Linux

Describe the bug

When I install uniswap/v3-core or uniswap/v3-periphery, it gives me a wrong remapping candidate when I run forge remappings.

Example: forge install @uniswap/v3-periphery will give me the remapping of v3-periphery/=lib/v3-periphery/contracts/, which will cause compilations to fail due to incorrect dependency resolution.

This results in basic examples from popular docs not running, causing friction.

Possible solutions could be hardcoding these in the CLI tool, or creating a DNS that allows to fetch both the module via original git repo + the correct remapping. I'd be down to help with either!

But first I probably need a sanity check on if this is an actual requirement or am I missing something haha

Cheers, Abhinav.

0xc2a5 commented 6 months ago

For anyone passing by, add the following to remappings.txt at your project root as a temporary workaround:

@uniswap/v3-core/=lib/v3-core/
@uniswap/v3-periphery=lib/v3-periphery/
dvncan commented 3 months ago

I am also facing a version issue when I install uniswap v3 into forge:

Error: 
Found incompatible Solidity versions:
    lib/forge-std/src/Script.sol >=0.6.2, <0.9.0
    lib/forge-std/src/Base.sol >=0.6.2, <0.9.0
    lib/forge-std/src/console.sol >=0.4.22, <0.9.0
    lib/forge-std/src/console2.sol >=0.4.22, <0.9.0
    lib/forge-std/src/StdChains.sol >=0.6.2, <0.9.0
    lib/forge-std/src/StdCheats.sol >=0.6.2, <0.9.0
    lib/forge-std/src/StdJson.sol >=0.6.0, <0.9.0
    lib/forge-std/src/StdMath.sol >=0.6.2, <0.9.0
    lib/forge-std/src/StdStorage.sol >=0.6.2, <0.9.0
    lib/forge-std/src/StdUtils.sol >=0.6.2, <0.9.0
    lib/forge-std/src/Vm.sol >=0.6.2, <0.9.0
    lib/forge-std/src/Base.sol >=0.6.2, <0.9.0
    lib/v3-periphery/contracts/interfaces/ISwapRouter.sol >=0.7.5
    lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol ^0.8.0
    lib/v3-periphery/contracts/V3Migrator.sol =0.7.6
    lib/v3-periphery/contracts/libraries/TransferHelper.sol >=0.6.0
    lib/v3-core/contracts/interfaces/IUniswapV3Factory.sol >=0.5.0
    lib/v3-periphery/contracts/NonfungiblePositionManager.sol >=0.7.6
    lib/v3-periphery/contracts/interfaces/INonfungiblePositionManager.sol >=0.7.5
    lib/forge-std/src/StdStorage.sol >=0.6.2, <0.9.0
    lib/forge-std/src/Vm.sol >=0.6.2, <0.9.0
    lib/forge-std/src/Vm.sol >=0.6.2, <0.9.0
    lib/forge-std/src/StdStorage.sol >=0.6.2, <0.9.0
    lib/forge-std/src/Vm.sol >=0.6.2, <0.9.0
    lib/forge-std/src/console2.sol >=0.4.22, <0.9.0
    lib/forge-std/src/Vm.sol >=0.6.2, <0.9.0
    lib/forge-std/src/Vm.sol >=0.6.2, <0.9.0
    lib/forge-std/src/interfaces/IMulticall3.sol >=0.6.2, <0.9.0
    lib/forge-std/src/Vm.sol >=0.6.2, <0.9.0
    lib/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol >=0.5.0
    lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol ^0.8.0
    lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol ^0.8.0
    lib/openzeppelin-contracts/contracts/utils/Context.sol ^0.8.0
    lib/v3-core/contracts/libraries/LowGasSafeMath.sol >=0.7.0
    lib/v2-core/contracts/interfaces/IUniswapV2Pair.sol >=0.5.0
    lib/v3-periphery/contracts/interfaces/INonfungiblePositionManager.sol >=0.7.5
    lib/v3-periphery/contracts/libraries/TransferHelper.sol >=0.6.0
    lib/v3-periphery/contracts/interfaces/IV3Migrator.sol >=0.7.5
    lib/v3-periphery/contracts/base/PeripheryImmutableState.sol =0.7.6
    lib/v3-periphery/contracts/base/Multicall.sol =0.7.6
    lib/v3-periphery/contracts/base/SelfPermit.sol >=0.5.0
    lib/v3-periphery/contracts/interfaces/external/IWETH9.sol =0.7.6
    lib/v3-periphery/contracts/base/PoolInitializer.sol =0.7.6
    lib/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol ^0.8.0
    lib/v3-core/contracts/interfaces/IUniswapV3Pool.sol >=0.5.0
    lib/v3-core/contracts/libraries/FixedPoint128.sol >=0.4.0
    lib/v3-core/contracts/libraries/FullMath.sol >=0.4.0
    lib/v3-periphery/contracts/interfaces/INonfungiblePositionManager.sol >=0.7.5
    lib/v3-periphery/contracts/interfaces/INonfungibleTokenPositionDescriptor.sol >=0.5.0
    lib/v3-periphery/contracts/libraries/PositionKey.sol >=0.5.0
    lib/v3-periphery/contracts/libraries/PoolAddress.sol >=0.5.0
    lib/v3-periphery/contracts/base/LiquidityManagement.sol =0.7.6
    lib/v3-periphery/contracts/base/PeripheryImmutableState.sol =0.7.6
    lib/v3-periphery/contracts/base/Multicall.sol =0.7.6
    lib/v3-periphery/contracts/base/ERC721Permit.sol =0.7.6
    lib/v3-periphery/contracts/base/PeripheryValidation.sol =0.7.6
    lib/v3-periphery/contracts/base/SelfPermit.sol >=0.5.0
    lib/v3-periphery/contracts/base/PoolInitializer.sol =0.7.6
    lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol ^0.8.0
    lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol ^0.8.0
    lib/v3-periphery/contracts/interfaces/IPoolInitializer.sol >=0.7.5
    lib/v3-periphery/contracts/interfaces/IERC721Permit.sol >=0.7.5
    lib/v3-periphery/contracts/interfaces/IPeripheryPayments.sol >=0.7.5
    lib/v3-periphery/contracts/interfaces/IPeripheryImmutableState.sol >=0.5.0
    lib/v3-periphery/contracts/libraries/PoolAddress.sol >=0.5.0
    lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol ^0.8.0
    lib/v3-periphery/contracts/interfaces/IMulticall.sol >=0.7.5
    lib/v3-periphery/contracts/interfaces/ISelfPermit.sol >=0.7.5
    lib/v3-periphery/contracts/interfaces/IPoolInitializer.sol >=0.7.5
    lib/v3-periphery/contracts/interfaces/IPeripheryImmutableState.sol >=0.5.0
    lib/v3-periphery/contracts/interfaces/IMulticall.sol >=0.7.5
    lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol ^0.8.0
    lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol ^0.8.0
    lib/v3-periphery/contracts/interfaces/ISelfPermit.sol >=0.7.5
    lib/v3-periphery/contracts/interfaces/external/IERC20PermitAllowed.sol >=0.5.0
    lib/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol ^0.8.0
    lib/v3-core/contracts/interfaces/IUniswapV3Factory.sol >=0.5.0
    lib/v3-core/contracts/interfaces/IUniswapV3Pool.sol >=0.5.0
    lib/v3-periphery/contracts/base/PeripheryImmutableState.sol =0.7.6
    lib/v3-periphery/contracts/interfaces/IPoolInitializer.sol >=0.7.5
    lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol >=0.5.0
    lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol >=0.5.0
    lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol >=0.5.0
    lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol >=0.5.0
    lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol >=0.5.0
    lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol >=0.5.0
    lib/v3-periphery/contracts/interfaces/INonfungiblePositionManager.sol >=0.7.5
    lib/v3-core/contracts/interfaces/IUniswapV3Factory.sol >=0.5.0
    lib/v3-core/contracts/interfaces/callback/IUniswapV3MintCallback.sol >=0.5.0
    lib/v3-core/contracts/libraries/TickMath.sol >=0.5.0
    lib/v3-periphery/contracts/libraries/PoolAddress.sol >=0.5.0
    lib/v3-periphery/contracts/libraries/CallbackValidation.sol =0.7.6
    lib/v3-periphery/contracts/libraries/LiquidityAmounts.sol >=0.5.0
    lib/v3-periphery/contracts/base/PeripheryPayments.sol >=0.7.5
    lib/v3-periphery/contracts/base/PeripheryImmutableState.sol =0.7.6
    lib/openzeppelin-solidity/contracts/token/ERC721/ERC721.sol ^0.8.0
    lib/openzeppelin-solidity/contracts/utils/Address.sol ^0.8.1
    lib/v3-periphery/contracts/libraries/ChainId.sol >=0.7.0
    lib/v3-periphery/contracts/interfaces/external/IERC1271.sol >=0.5.0
    lib/v3-periphery/contracts/interfaces/IERC721Permit.sol >=0.7.5
    lib/v3-periphery/contracts/base/BlockTimestamp.sol =0.7.6
    lib/v3-periphery/contracts/base/BlockTimestamp.sol =0.7.6
    lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol ^0.8.0
    lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol ^0.8.0
    lib/openzeppelin-solidity/contracts/token/ERC721/IERC721.sol ^0.8.0
    lib/v3-core/contracts/interfaces/IUniswapV3Pool.sol >=0.5.0
    lib/v3-periphery/contracts/libraries/PoolAddress.sol >=0.5.0
    lib/v3-core/contracts/libraries/FullMath.sol >=0.4.0
    lib/v3-core/contracts/libraries/FixedPoint96.sol >=0.4.0
    lib/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol ^0.8.0
    lib/v3-periphery/contracts/interfaces/IPeripheryPayments.sol >=0.7.5
    lib/v3-periphery/contracts/interfaces/external/IWETH9.sol =0.7.6
    lib/v3-periphery/contracts/libraries/TransferHelper.sol >=0.6.0
    lib/v3-periphery/contracts/base/PeripheryImmutableState.sol =0.7.6
    lib/openzeppelin-solidity/contracts/token/ERC721/IERC721.sol ^0.8.0
    lib/openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol ^0.8.0
    lib/openzeppelin-solidity/contracts/token/ERC721/extensions/IERC721Metadata.sol ^0.8.0
    lib/openzeppelin-solidity/contracts/utils/Address.sol ^0.8.1
    lib/openzeppelin-solidity/contracts/utils/Context.sol ^0.8.0
    lib/openzeppelin-solidity/contracts/utils/Strings.sol ^0.8.0
    lib/openzeppelin-solidity/contracts/utils/introspection/ERC165.sol ^0.8.0
    lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol ^0.8.0
    lib/openzeppelin-solidity/contracts/utils/introspection/IERC165.sol ^0.8.0
    lib/openzeppelin-solidity/contracts/token/ERC721/IERC721.sol ^0.8.0
    lib/openzeppelin-solidity/contracts/utils/math/Math.sol ^0.8.0
    lib/openzeppelin-solidity/contracts/utils/math/SignedMath.sol ^0.8.0
    lib/openzeppelin-solidity/contracts/utils/introspection/IERC165.sol ^0.8.0
zerosnacks commented 3 months ago

Hi @AbhinavMir thanks for opening the issue

Automated remappings are a best guess, there is no planned integration of individual projects

As recommended by @0xc2a5

Add to your remappings (either in foundry.toml or remappings.txt)

@uniswap/v3-core/=lib/v3-core/
@uniswap/v3-periphery=lib/v3-periphery/

@dvncan make sure to install the 0.8 branch of Uniswap V3 as follows: