diff --git a/.gitmodules b/.gitmodules index e38343e..906860a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,9 @@ [submodule "lib/forge-std"] path = lib/forge-std url = https://github.com/foundry-rs/forge-std -[submodule "lib/pancake-v4-periphery"] - path = lib/pancake-v4-periphery - url = https://github.com/pancakeswap/pancake-v4-periphery +[submodule "lib/infinity-periphery"] + path = lib/infinity-periphery + url = https://github.com/pancakeswap/infinity-periphery [submodule "lib/pancake-create3-factory"] path = lib/pancake-create3-factory url = https://github.com/pancakeswap/pancake-create3-factory diff --git a/README.md b/README.md index d302964..163002e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Pancake v4 universal-router +# Infinity universal-router ## Running test @@ -6,7 +6,7 @@ 2. Grab a RPC (eg. from nodereal) with history ```bash -// testnet fork test for v4, mainnet fork test for v2/v3 +// testnet fork test for infinity, mainnet fork test for v2/v3 export FORK_URL=https://bsc-mainnet.nodereal.io/v1/xxx export TESTNET_FORK_URL=https://bsc-testnet.nodereal.io/v1/xxx ``` diff --git a/lib/infinity-periphery b/lib/infinity-periphery new file mode 160000 index 0000000..0fd19f4 --- /dev/null +++ b/lib/infinity-periphery @@ -0,0 +1 @@ +Subproject commit 0fd19f40556afd77d783d85ca8f9df8dba707ca1 diff --git a/lib/pancake-v4-periphery b/lib/pancake-v4-periphery deleted file mode 160000 index d7820fb..0000000 --- a/lib/pancake-v4-periphery +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d7820fbb33ea5536db504a2dd5bd62fcc623e523 diff --git a/remappings.txt b/remappings.txt index 61c894e..48ef549 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,9 +1,9 @@ forge-std/=lib/forge-std/src/ ds-test/=lib/forge-std/lib/ds-test/src/ -@openzeppelin/=lib/pancake-v4-periphery/lib/pancake-v4-core/lib/openzeppelin-contracts/ -openzeppelin-contracts/=lib/pancake-v4-periphery/lib/pancake-v4-core/lib/openzeppelin-contracts/ -solmate/=lib/pancake-v4-periphery/lib/pancake-v4-core/lib/solmate/ -pancake-v4-periphery/=lib/pancake-v4-periphery/ -pancake-v4-core/=lib/pancake-v4-periphery/lib/pancake-v4-core -permit2/=lib/pancake-v4-periphery/lib/permit2/ +@openzeppelin/=lib/infinity-periphery/lib/infinity-core/lib/openzeppelin-contracts/ +openzeppelin-contracts/=lib/infinity-periphery/lib/infinity-core/lib/openzeppelin-contracts/ +solmate/=lib/infinity-periphery/lib/infinity-core/lib/solmate/ +infinity-periphery/=lib/infinity-periphery/ +infinity-core/=lib/infinity-periphery/lib/infinity-core +permit2/=lib/infinity-periphery/lib/permit2/ pancake-create3-factory/=lib/pancake-create3-factory/ diff --git a/script/02_DeployQaSwapRouter.s.sol b/script/02_DeployQaSwapRouter.s.sol new file mode 100644 index 0000000..7196092 --- /dev/null +++ b/script/02_DeployQaSwapRouter.s.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.15; + +import "forge-std/console2.sol"; +import "forge-std/Script.sol"; +import {IVault} from "infinity-core/src/interfaces/IVault.sol"; +import {ICLPoolManager} from "infinity-core/src/pool-cl/interfaces/ICLPoolManager.sol"; +import {IBinPoolManager} from "infinity-core/src/pool-bin/interfaces/IBinPoolManager.sol"; +import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol"; + +import {QaSwapRouter} from "../src/QaSwapRouter.sol"; + +/** + * Step 1: Deploy + * forge script script/02_DeployQaSwapRouter.s.sol:DeployQaSwapRouter -vvv \ + * --rpc-url $RPC_URL \ + * --broadcast \ + * --slow \ + * --verify + */ +contract DeployQaSwapRouter is Script { + // ref: https://github.com/pancakeswap/infinity-periphery/blob/main/script/config/bsc-testnet.json + // WIP pending release + IVault vault = IVault(0x000000000000000000000000000000000000dEaD); + ICLPoolManager clPoolManager = ICLPoolManager(0x000000000000000000000000000000000000dEaD); + IBinPoolManager binPoolManager = IBinPoolManager(0x000000000000000000000000000000000000dEaD); + IAllowanceTransfer permit2 = IAllowanceTransfer(0x000000000000000000000000000000000000dEaD); + + function run() public { + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(deployerPrivateKey); + + QaSwapRouter router = new QaSwapRouter(vault, clPoolManager, binPoolManager, permit2); + console2.log("QaSwapRouter :", address(router)); + + vm.stopBroadcast(); + } +} \ No newline at end of file diff --git a/script/DeployUniversalRouter.s.sol b/script/DeployUniversalRouter.s.sol index 8ff738f..a571afe 100644 --- a/script/DeployUniversalRouter.s.sol +++ b/script/DeployUniversalRouter.s.sol @@ -52,12 +52,12 @@ abstract contract DeployUniversalRouter is Script { v3InitCodeHash: params.v3InitCodeHash, stableFactory: mapUnsupported(params.stableFactory), stableInfo: mapUnsupported(params.stableInfo), - v4Vault: mapUnsupported(params.v4Vault), - v4ClPoolManager: mapUnsupported(params.v4ClPoolManager), - v4BinPoolManager: mapUnsupported(params.v4BinPoolManager), + infiVault: mapUnsupported(params.infiVault), + infiClPoolManager: mapUnsupported(params.infiClPoolManager), + infiBinPoolManager: mapUnsupported(params.infiBinPoolManager), v3NFTPositionManager: mapUnsupported(params.v3NFTPositionManager), - v4ClPositionManager: mapUnsupported(params.v4ClPositionManager), - v4BinPositionManager: mapUnsupported(params.v4BinPositionManager) + infiClPositionManager: mapUnsupported(params.infiClPositionManager), + infiBinPositionManager: mapUnsupported(params.infiBinPositionManager) }); logParams(); @@ -92,12 +92,12 @@ abstract contract DeployUniversalRouter is Script { console2.logBytes32(params.v3InitCodeHash); console2.log("stableFactory:", params.stableFactory); console2.log("stableInfo:", params.stableInfo); - console2.log("v4Vault:", params.v4Vault); - console2.log("v4ClPoolManager:", params.v4ClPoolManager); - console2.log("v4BinPoolManager:", params.v4BinPoolManager); + console2.log("infiVault:", params.infiVault); + console2.log("infiClPoolManager:", params.infiClPoolManager); + console2.log("infiBinPoolManager:", params.infiBinPoolManager); console2.log("v3NFTPositionManager:", params.v3NFTPositionManager); - console2.log("v4ClPositionManager:", params.v4ClPositionManager); - console2.log("v4BinPositionManager:", params.v4BinPositionManager); + console2.log("infiClPositionManager:", params.infiClPositionManager); + console2.log("infiBinPositionManager:", params.infiBinPositionManager); } function mapUnsupported(address protocol) internal view returns (address) { diff --git a/script/deployParameters/mainnet/DeployArbitrum.s.sol b/script/deployParameters/mainnet/DeployArbitrum.s.sol index 4d61df2..f1ae13e 100644 --- a/script/deployParameters/mainnet/DeployArbitrum.s.sol +++ b/script/deployParameters/mainnet/DeployArbitrum.s.sol @@ -17,7 +17,7 @@ import {RouterParameters} from "../../../src/base/RouterImmutables.sol"; contract DeployArbitrum is DeployUniversalRouter { /// @notice contract address will be based on deployment salt function getDeploymentSalt() public pure override returns (bytes32) { - return keccak256("PANCAKE-V4-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); + return keccak256("INFINITY-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); } function setUp() public override { @@ -31,12 +31,12 @@ contract DeployArbitrum is DeployUniversalRouter { v3InitCodeHash: 0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2, stableFactory: UNSUPPORTED_PROTOCOL, stableInfo: UNSUPPORTED_PROTOCOL, - v4Vault: UNSUPPORTED_PROTOCOL, - v4ClPoolManager: UNSUPPORTED_PROTOCOL, - v4BinPoolManager: UNSUPPORTED_PROTOCOL, + infiVault: UNSUPPORTED_PROTOCOL, + infiClPoolManager: UNSUPPORTED_PROTOCOL, + infiBinPoolManager: UNSUPPORTED_PROTOCOL, v3NFTPositionManager: UNSUPPORTED_PROTOCOL, - v4ClPositionManager: UNSUPPORTED_PROTOCOL, - v4BinPositionManager: UNSUPPORTED_PROTOCOL + infiClPositionManager: UNSUPPORTED_PROTOCOL, + infiBinPositionManager: UNSUPPORTED_PROTOCOL }); unsupported = 0x64D74e1EAAe3176744b5767b93B7Bee39Cf7898F; diff --git a/script/deployParameters/mainnet/DeployBase.s.sol b/script/deployParameters/mainnet/DeployBase.s.sol index e799a92..17647bf 100644 --- a/script/deployParameters/mainnet/DeployBase.s.sol +++ b/script/deployParameters/mainnet/DeployBase.s.sol @@ -17,7 +17,7 @@ import {RouterParameters} from "../../../src/base/RouterImmutables.sol"; contract DeployBase is DeployUniversalRouter { /// @notice contract address will be based on deployment salt function getDeploymentSalt() public pure override returns (bytes32) { - return keccak256("PANCAKE-V4-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); + return keccak256("INFINITY-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); } function setUp() public override { @@ -31,12 +31,12 @@ contract DeployBase is DeployUniversalRouter { v3InitCodeHash: 0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2, stableFactory: UNSUPPORTED_PROTOCOL, stableInfo: UNSUPPORTED_PROTOCOL, - v4Vault: UNSUPPORTED_PROTOCOL, - v4ClPoolManager: UNSUPPORTED_PROTOCOL, - v4BinPoolManager: UNSUPPORTED_PROTOCOL, + infiVault: UNSUPPORTED_PROTOCOL, + infiClPoolManager: UNSUPPORTED_PROTOCOL, + infiBinPoolManager: UNSUPPORTED_PROTOCOL, v3NFTPositionManager: UNSUPPORTED_PROTOCOL, - v4ClPositionManager: UNSUPPORTED_PROTOCOL, - v4BinPositionManager: UNSUPPORTED_PROTOCOL + infiClPositionManager: UNSUPPORTED_PROTOCOL, + infiBinPositionManager: UNSUPPORTED_PROTOCOL }); unsupported = 0x64D74e1EAAe3176744b5767b93B7Bee39Cf7898F; diff --git a/script/deployParameters/mainnet/DeployBsc.s.sol b/script/deployParameters/mainnet/DeployBsc.s.sol index 7689198..180cc6f 100644 --- a/script/deployParameters/mainnet/DeployBsc.s.sol +++ b/script/deployParameters/mainnet/DeployBsc.s.sol @@ -17,7 +17,7 @@ import {RouterParameters} from "../../../src/base/RouterImmutables.sol"; contract DeployBsc is DeployUniversalRouter { /// @notice contract address will be based on deployment salt function getDeploymentSalt() public pure override returns (bytes32) { - return keccak256("PANCAKE-V4-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); + return keccak256("INFINITY-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); } function setUp() public override { @@ -31,12 +31,12 @@ contract DeployBsc is DeployUniversalRouter { v3InitCodeHash: 0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2, stableFactory: 0x25a55f9f2279A54951133D503490342b50E5cd15, stableInfo: 0xf3A6938945E68193271Cad8d6f79B1f878b16Eb1, - v4Vault: UNSUPPORTED_PROTOCOL, - v4ClPoolManager: UNSUPPORTED_PROTOCOL, - v4BinPoolManager: UNSUPPORTED_PROTOCOL, + infiVault: UNSUPPORTED_PROTOCOL, + infiClPoolManager: UNSUPPORTED_PROTOCOL, + infiBinPoolManager: UNSUPPORTED_PROTOCOL, v3NFTPositionManager: UNSUPPORTED_PROTOCOL, - v4ClPositionManager: UNSUPPORTED_PROTOCOL, - v4BinPositionManager: UNSUPPORTED_PROTOCOL + infiClPositionManager: UNSUPPORTED_PROTOCOL, + infiBinPositionManager: UNSUPPORTED_PROTOCOL }); unsupported = 0x2979d1ea8f04C60423eb7735Cc3ed1BF74b565b8; diff --git a/script/deployParameters/mainnet/DeployEth.s.sol b/script/deployParameters/mainnet/DeployEth.s.sol index 4e49911..60bedeb 100644 --- a/script/deployParameters/mainnet/DeployEth.s.sol +++ b/script/deployParameters/mainnet/DeployEth.s.sol @@ -17,7 +17,7 @@ import {RouterParameters} from "../../../src/base/RouterImmutables.sol"; contract DeployEth is DeployUniversalRouter { /// @notice contract address will be based on deployment salt function getDeploymentSalt() public pure override returns (bytes32) { - return keccak256("PANCAKE-V4-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); + return keccak256("INFINITY-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); } function setUp() public override { @@ -31,12 +31,12 @@ contract DeployEth is DeployUniversalRouter { v3InitCodeHash: 0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2, stableFactory: UNSUPPORTED_PROTOCOL, stableInfo: UNSUPPORTED_PROTOCOL, - v4Vault: UNSUPPORTED_PROTOCOL, - v4ClPoolManager: UNSUPPORTED_PROTOCOL, - v4BinPoolManager: UNSUPPORTED_PROTOCOL, + infiVault: UNSUPPORTED_PROTOCOL, + infiClPoolManager: UNSUPPORTED_PROTOCOL, + infiBinPoolManager: UNSUPPORTED_PROTOCOL, v3NFTPositionManager: UNSUPPORTED_PROTOCOL, - v4ClPositionManager: UNSUPPORTED_PROTOCOL, - v4BinPositionManager: UNSUPPORTED_PROTOCOL + infiClPositionManager: UNSUPPORTED_PROTOCOL, + infiBinPositionManager: UNSUPPORTED_PROTOCOL }); unsupported = 0x5C19Add791a23C55be09fAB1db73bFd5fa80C2b0; diff --git a/script/deployParameters/mainnet/DeployLinea.s.sol b/script/deployParameters/mainnet/DeployLinea.s.sol index b2cd67b..eda7242 100644 --- a/script/deployParameters/mainnet/DeployLinea.s.sol +++ b/script/deployParameters/mainnet/DeployLinea.s.sol @@ -17,7 +17,7 @@ import {RouterParameters} from "../../../src/base/RouterImmutables.sol"; contract DeployLinea is DeployUniversalRouter { /// @notice contract address will be based on deployment salt function getDeploymentSalt() public pure override returns (bytes32) { - return keccak256("PANCAKE-V4-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); + return keccak256("INFINITY-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); } function setUp() public override { @@ -31,12 +31,12 @@ contract DeployLinea is DeployUniversalRouter { v3InitCodeHash: 0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2, stableFactory: UNSUPPORTED_PROTOCOL, stableInfo: UNSUPPORTED_PROTOCOL, - v4Vault: UNSUPPORTED_PROTOCOL, - v4ClPoolManager: UNSUPPORTED_PROTOCOL, - v4BinPoolManager: UNSUPPORTED_PROTOCOL, + infiVault: UNSUPPORTED_PROTOCOL, + infiClPoolManager: UNSUPPORTED_PROTOCOL, + infiBinPoolManager: UNSUPPORTED_PROTOCOL, v3NFTPositionManager: UNSUPPORTED_PROTOCOL, - v4ClPositionManager: UNSUPPORTED_PROTOCOL, - v4BinPositionManager: UNSUPPORTED_PROTOCOL + infiClPositionManager: UNSUPPORTED_PROTOCOL, + infiBinPositionManager: UNSUPPORTED_PROTOCOL }); unsupported = 0x64D74e1EAAe3176744b5767b93B7Bee39Cf7898F; diff --git a/script/deployParameters/mainnet/DeployOpBnb.s.sol b/script/deployParameters/mainnet/DeployOpBnb.s.sol index f2c0e37..f9dd0a9 100644 --- a/script/deployParameters/mainnet/DeployOpBnb.s.sol +++ b/script/deployParameters/mainnet/DeployOpBnb.s.sol @@ -16,7 +16,7 @@ import {RouterParameters} from "../../../src/base/RouterImmutables.sol"; contract DeployOpbnb is DeployUniversalRouter { /// @notice contract address will be based on deployment salt function getDeploymentSalt() public pure override returns (bytes32) { - return keccak256("PANCAKE-V4-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); + return keccak256("INFINITY-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); } function setUp() public override { @@ -30,12 +30,12 @@ contract DeployOpbnb is DeployUniversalRouter { v3InitCodeHash: 0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2, stableFactory: UNSUPPORTED_PROTOCOL, stableInfo: UNSUPPORTED_PROTOCOL, - v4Vault: UNSUPPORTED_PROTOCOL, - v4ClPoolManager: UNSUPPORTED_PROTOCOL, - v4BinPoolManager: UNSUPPORTED_PROTOCOL, + infiVault: UNSUPPORTED_PROTOCOL, + infiClPoolManager: UNSUPPORTED_PROTOCOL, + infiBinPoolManager: UNSUPPORTED_PROTOCOL, v3NFTPositionManager: UNSUPPORTED_PROTOCOL, - v4ClPositionManager: UNSUPPORTED_PROTOCOL, - v4BinPositionManager: UNSUPPORTED_PROTOCOL + infiClPositionManager: UNSUPPORTED_PROTOCOL, + infiBinPositionManager: UNSUPPORTED_PROTOCOL }); unsupported = 0xFE6508f0015C778Bdcc1fB5465bA5ebE224C9912; diff --git a/script/deployParameters/mainnet/DeployzkEvm.s.sol b/script/deployParameters/mainnet/DeployzkEvm.s.sol index cddae16..effcc0b 100644 --- a/script/deployParameters/mainnet/DeployzkEvm.s.sol +++ b/script/deployParameters/mainnet/DeployzkEvm.s.sol @@ -17,7 +17,7 @@ import {RouterParameters} from "../../../src/base/RouterImmutables.sol"; contract DeployZkEvm is DeployUniversalRouter { /// @notice contract address will be based on deployment salt function getDeploymentSalt() public pure override returns (bytes32) { - return keccak256("PANCAKE-V4-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); + return keccak256("INFINITY-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); } function setUp() public override { @@ -31,12 +31,12 @@ contract DeployZkEvm is DeployUniversalRouter { v3InitCodeHash: 0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2, stableFactory: UNSUPPORTED_PROTOCOL, stableInfo: UNSUPPORTED_PROTOCOL, - v4Vault: UNSUPPORTED_PROTOCOL, - v4ClPoolManager: UNSUPPORTED_PROTOCOL, - v4BinPoolManager: UNSUPPORTED_PROTOCOL, + infiVault: UNSUPPORTED_PROTOCOL, + infiClPoolManager: UNSUPPORTED_PROTOCOL, + infiBinPoolManager: UNSUPPORTED_PROTOCOL, v3NFTPositionManager: UNSUPPORTED_PROTOCOL, - v4ClPositionManager: UNSUPPORTED_PROTOCOL, - v4BinPositionManager: UNSUPPORTED_PROTOCOL + infiClPositionManager: UNSUPPORTED_PROTOCOL, + infiBinPositionManager: UNSUPPORTED_PROTOCOL }); unsupported = 0xFE6508f0015C778Bdcc1fB5465bA5ebE224C9912; diff --git a/script/deployParameters/testnet/DeployBscTestnet.s.sol b/script/deployParameters/testnet/DeployBscTestnet.s.sol index 0404b02..3939f9e 100644 --- a/script/deployParameters/testnet/DeployBscTestnet.s.sol +++ b/script/deployParameters/testnet/DeployBscTestnet.s.sol @@ -17,7 +17,7 @@ import {RouterParameters} from "../../../src/base/RouterImmutables.sol"; contract DeployBscTestnet is DeployUniversalRouter { /// @notice contract address will be based on deployment salt function getDeploymentSalt() public pure override returns (bytes32) { - return keccak256("PANCAKE-V4-UNIVERSAL-ROUTER/UniversalRouter/0.90"); + return keccak256("INFINITY-UNIVERSAL-ROUTER/UniversalRouter/0.90"); } // ref from v3 universal router: https://testnet.bscscan.com/tx/0xdfab014e4f5df56d5a8b16375028ad0340f80070bd848eb57c4e0baf41210487 @@ -32,12 +32,12 @@ contract DeployBscTestnet is DeployUniversalRouter { v3InitCodeHash: 0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2, stableFactory: 0xe6A00f8b819244e8Ab9Ea930e46449C2F20B6609, stableInfo: 0x0A548d59D04096Bc01206D58C3D63c478e1e06dB, - v4Vault: 0xd557753bde3f0EaF32626F8681Ac6d8c1EBA2BBa, - v4ClPoolManager: 0x70890E308DCE727180ac1B9550928fED342dea52, - v4BinPoolManager: 0x68554d088F3640Bd2A7B38b43AE70FDcc16ef197, + infiVault: 0xd557753bde3f0EaF32626F8681Ac6d8c1EBA2BBa, + infiClPoolManager: 0x70890E308DCE727180ac1B9550928fED342dea52, + infiBinPoolManager: 0x68554d088F3640Bd2A7B38b43AE70FDcc16ef197, v3NFTPositionManager: 0x427bF5b37357632377eCbEC9de3626C71A5396c1, - v4ClPositionManager: 0x7E7856fBE18cd868dc9E2C161a7a78c53074D106, - v4BinPositionManager: 0x69317a4bF9Cd6bED6ea9b5C61ebcf78b5994A63E + infiClPositionManager: 0x7E7856fBE18cd868dc9E2C161a7a78c53074D106, + infiBinPositionManager: 0x69317a4bF9Cd6bED6ea9b5C61ebcf78b5994A63E }); unsupported = 0xe4da88F38C11C1450c720b8aDeDd94956610a4e5; diff --git a/script/deployParameters/testnet/DeployEthSepolia.s.sol b/script/deployParameters/testnet/DeployEthSepolia.s.sol index c3f7e28..a155ba6 100644 --- a/script/deployParameters/testnet/DeployEthSepolia.s.sol +++ b/script/deployParameters/testnet/DeployEthSepolia.s.sol @@ -17,7 +17,7 @@ import {RouterParameters} from "../../../src/base/RouterImmutables.sol"; contract DeployEthSepolia is DeployUniversalRouter { /// @notice contract address will be based on deployment salt function getDeploymentSalt() public pure override returns (bytes32) { - return keccak256("PANCAKE-V4-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); + return keccak256("INFINITY-UNIVERSAL-ROUTER/UniversalRouter/0.0001"); } // ref from v3 universal router: https://sepolia.etherscan.io/tx/0xb4610521d3fc61f4837edbd899acb6c33a5fe0f3bb32ab84745ac0a8b1859906 @@ -33,12 +33,12 @@ contract DeployEthSepolia is DeployUniversalRouter { v3InitCodeHash: 0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2, stableFactory: UNSUPPORTED_PROTOCOL, stableInfo: UNSUPPORTED_PROTOCOL, - v4Vault: 0x4670F769Daa625FF5F89719AE5295E9824f5805f, - v4ClPoolManager: 0xD4EAc75ee0E76EAD6AC6995DF30CA14b38549682, - v4BinPoolManager: 0x0Ca8430E263A098B998E47e0544C2C82B30CbDB1, + infiVault: 0x4670F769Daa625FF5F89719AE5295E9824f5805f, + infiClPoolManager: 0xD4EAc75ee0E76EAD6AC6995DF30CA14b38549682, + infiBinPoolManager: 0x0Ca8430E263A098B998E47e0544C2C82B30CbDB1, v3NFTPositionManager: 0x46A15B0b27311cedF172AB29E4f4766fbE7F4364, - v4ClPositionManager: 0x53C9802F47295979c0E154779eD10fa6af27D7cA, - v4BinPositionManager: 0x21015eF9927e06b7Fc19D986A214e449Aa22FF7d + infiClPositionManager: 0x53C9802F47295979c0E154779eD10fa6af27D7cA, + infiBinPositionManager: 0x21015eF9927e06b7Fc19D986A214e449Aa22FF7d }); unsupported = 0x6879F5C1AdaDDF29892bf650F9C48350C12795D9; diff --git a/snapshots/BinNativePancakeSwapInfinityTest.json b/snapshots/BinNativePancakeSwapInfinityTest.json new file mode 100644 index 0000000..d4f9548 --- /dev/null +++ b/snapshots/BinNativePancakeSwapInfinityTest.json @@ -0,0 +1,6 @@ +{ + "test_infiBinSwap_ExactInSingle_NativeIn": "128929", + "test_infiBinSwap_ExactInSingle_NativeOut": "117627", + "test_infiBinSwap_ExactInSingle_NativeOut_RouterRecipient": "117916", + "test_infiBinSwap_infiInitializeBinPool": "132846" +} \ No newline at end of file diff --git a/snapshots/BinNativePancakeSwapV4Test.json b/snapshots/BinNativePancakeSwapV4Test.json deleted file mode 100644 index 771d136..0000000 --- a/snapshots/BinNativePancakeSwapV4Test.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "test_v4BinSwap_ExactInSingle_NativeIn": "128907", - "test_v4BinSwap_ExactInSingle_NativeOut": "117605", - "test_v4BinSwap_ExactInSingle_NativeOut_RouterRecipient": "117894", - "test_v4BinSwap_v4InitializeBinPool": "132846" -} \ No newline at end of file diff --git a/snapshots/BinPancakeSwapInfinityTest.json b/snapshots/BinPancakeSwapInfinityTest.json new file mode 100644 index 0000000..198c77c --- /dev/null +++ b/snapshots/BinPancakeSwapInfinityTest.json @@ -0,0 +1,9 @@ +{ + "test_infiBinSwap_ExactInSingle": "143529", + "test_infiBinSwap_ExactIn_MultiHop": "174923", + "test_infiBinSwap_ExactIn_SingleHop": "145327", + "test_infiBinSwap_ExactOutSingle": "147891", + "test_infiBinSwap_ExactOut_MultiHop": "178771", + "test_infiBinSwap_ExactOut_SingleHop": "149699", + "test_infiBinSwap_InitializeBinPool": "152986" +} \ No newline at end of file diff --git a/snapshots/BinPancakeSwapV4Test.json b/snapshots/BinPancakeSwapV4Test.json deleted file mode 100644 index a847fdf..0000000 --- a/snapshots/BinPancakeSwapV4Test.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "test_v4BinSwap_ExactInSingle": "143507", - "test_v4BinSwap_ExactIn_MultiHop": "174901", - "test_v4BinSwap_ExactIn_SingleHop": "145305", - "test_v4BinSwap_ExactOutSingle": "147869", - "test_v4BinSwap_ExactOut_MultiHop": "178749", - "test_v4BinSwap_ExactOut_SingleHop": "149677", - "test_v4BinSwap_InitializeBinPool": "152986" -} \ No newline at end of file diff --git a/snapshots/CLNativePancakeSwapInfinityTest.json b/snapshots/CLNativePancakeSwapInfinityTest.json new file mode 100644 index 0000000..a30e2e8 --- /dev/null +++ b/snapshots/CLNativePancakeSwapInfinityTest.json @@ -0,0 +1,5 @@ +{ + "test_infiClSwap_ExactInSingle_NativeIn": "161970", + "test_infiClSwap_ExactInSingle_NativeOut": "144706", + "test_infiClSwap_infiInitializeClPool": "133628" +} \ No newline at end of file diff --git a/snapshots/CLNativePancakeSwapV4Test.json b/snapshots/CLNativePancakeSwapV4Test.json deleted file mode 100644 index 9819616..0000000 --- a/snapshots/CLNativePancakeSwapV4Test.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "test_v4ClSwap_ExactInSingle_NativeIn": "161948", - "test_v4ClSwap_ExactInSingle_NativeOut": "144684", - "test_v4ClSwap_v4InitializeClPool": "133628" -} \ No newline at end of file diff --git a/snapshots/CLPancakeSwapInfinityTest.json b/snapshots/CLPancakeSwapInfinityTest.json new file mode 100644 index 0000000..71b9b15 --- /dev/null +++ b/snapshots/CLPancakeSwapInfinityTest.json @@ -0,0 +1,9 @@ +{ + "test_infiClSwap_ExactInSingle": "176570", + "test_infiClSwap_ExactIn_MultiHop": "241016", + "test_infiClSwap_ExactIn_SingleHop": "178361", + "test_infiClSwap_ExactOutSingle": "180894", + "test_infiClSwap_ExactOut_MultiHop": "244792", + "test_infiClSwap_ExactOut_SingleHop": "182697", + "test_infiClSwap_infiInitializeClPool": "153756" +} \ No newline at end of file diff --git a/snapshots/CLPancakeSwapV4Test.json b/snapshots/CLPancakeSwapV4Test.json deleted file mode 100644 index 144d103..0000000 --- a/snapshots/CLPancakeSwapV4Test.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "test_v4ClSwap_ExactInSingle": "176548", - "test_v4ClSwap_ExactIn_MultiHop": "240994", - "test_v4ClSwap_ExactIn_SingleHop": "178339", - "test_v4ClSwap_ExactOutSingle": "180872", - "test_v4ClSwap_ExactOut_MultiHop": "244770", - "test_v4ClSwap_ExactOut_SingleHop": "182675", - "test_v4ClSwap_v4InitializeClPool": "153756" -} \ No newline at end of file diff --git a/snapshots/V3ToInfiMigrationNativeTest.json b/snapshots/V3ToInfiMigrationNativeTest.json new file mode 100644 index 0000000..a458c3f --- /dev/null +++ b/snapshots/V3ToInfiMigrationNativeTest.json @@ -0,0 +1,4 @@ +{ + "test_infiBinPositionmanager_BinAddLiquidity_Native": "543857", + "test_infiCLPositionmanager_Mint_Native": "533474" +} \ No newline at end of file diff --git a/snapshots/V3ToInfiMigrationTest.json b/snapshots/V3ToInfiMigrationTest.json new file mode 100644 index 0000000..6af1ec8 --- /dev/null +++ b/snapshots/V3ToInfiMigrationTest.json @@ -0,0 +1,5 @@ +{ + "test_infiBinPositionmanager_BinAddLiquidity": "591530", + "test_infiCLPositionmanager_Mint": "581171", + "test_v3PositionManager_burn": "286990" +} \ No newline at end of file diff --git a/snapshots/V3ToV4MigrationNativeTest.json b/snapshots/V3ToV4MigrationNativeTest.json deleted file mode 100644 index 14e3d51..0000000 --- a/snapshots/V3ToV4MigrationNativeTest.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "test_v4BinPositionmanager_BinAddLiquidity_Native": "543857", - "test_v4CLPositionmanager_Mint_Native": "533474" -} \ No newline at end of file diff --git a/snapshots/V3ToV4MigrationTest.json b/snapshots/V3ToV4MigrationTest.json deleted file mode 100644 index 9f45c9c..0000000 --- a/snapshots/V3ToV4MigrationTest.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "test_v3PositionManager_burn": "286990", - "test_v4BinPositionmanager_BinAddLiquidity": "591530", - "test_v4CLPositionmanager_Mint": "581171" -} \ No newline at end of file diff --git a/src/QaSwapRouter.sol b/src/QaSwapRouter.sol new file mode 100644 index 0000000..33347aa --- /dev/null +++ b/src/QaSwapRouter.sol @@ -0,0 +1,210 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.26; + +import {IVault} from "infinity-core/src/interfaces/IVault.sol"; +import {ICLPoolManager} from "infinity-core/src/pool-cl/interfaces/ICLPoolManager.sol"; +import {IBinPoolManager} from "infinity-core/src/pool-bin/interfaces/IBinPoolManager.sol"; +import {Currency} from "infinity-core/src/types/Currency.sol"; +import {PoolKey} from "infinity-core/src/types/PoolKey.sol"; +import {PoolId} from "infinity-core/src/types/PoolId.sol"; +import {BalanceDelta} from "infinity-core/src/types/BalanceDelta.sol"; +import {TickMath} from "infinity-core/src/pool-cl/libraries/TickMath.sol"; +import {SafeCast} from "infinity-core/src/pool-bin/libraries/math/SafeCast.sol"; +import {IHooks} from "infinity-core/src/interfaces/IHooks.sol"; +import {IPoolManager} from "infinity-core/src/interfaces/IPoolManager.sol"; + +import {InfinityRouter} from "infinity-periphery/src/InfinityRouter.sol"; +import {ICLRouterBase} from "infinity-periphery/src/pool-cl/interfaces/ICLRouterBase.sol"; +import {IBinRouterBase} from "infinity-periphery/src/pool-bin/interfaces/IBinRouterBase.sol"; +import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; +import {DeltaResolver} from "infinity-periphery/src/base/DeltaResolver.sol"; +import {CLCalldataDecoder} from "infinity-periphery/src/pool-cl/libraries/CLCalldataDecoder.sol"; +import {BinCalldataDecoder} from "infinity-periphery/src/pool-bin/libraries/BinCalldataDecoder.sol"; +import {IInfinityRouter} from "infinity-periphery/src/interfaces/IInfinityRouter.sol"; +import {SafeCastTemp} from "infinity-periphery/src/libraries/SafeCast.sol"; +import {ImmutableState} from "infinity-periphery/src/base/ImmutableState.sol"; + +/// @dev simple contract for internal use to perform a swap on testnet. +/// !!!!!! STRICTLY NOT for production use +contract QaSwapRouter is DeltaResolver { + using CLCalldataDecoder for bytes; + using BinCalldataDecoder for bytes; + using SafeCastTemp for *; + using SafeCast for *; + + error NotVault(); + + // IVault public vault; + ICLPoolManager public clPoolManager; + IBinPoolManager public binPoolManager; + IAllowanceTransfer public permit2; + + /// @notice Only allow calls from the Vault contract + modifier onlyByVault() { + if (msg.sender != address(vault)) revert NotVault(); + _; + } + + constructor( + IVault _vault, + ICLPoolManager _clPoolManager, + IBinPoolManager _binPoolManager, + IAllowanceTransfer _permit2 + ) ImmutableState(_vault) { + clPoolManager = _clPoolManager; + binPoolManager = _binPoolManager; + permit2 = _permit2; + } + + function clSwapExactInputSingle(ICLRouterBase.CLSwapExactInputSingleParams calldata params) external payable { + vault.lock(abi.encode("clSwapExactInputSingle", abi.encode(msg.sender, params))); + } + + function clSwapExactInputSingle( + PoolId poolId, + bool zeroForOne, + uint128 amountIn, + uint128 amountOutMinimum, + bytes memory hookData + ) external payable { + (Currency curr0, Currency curr1, IHooks hook, IPoolManager pm, uint24 fee, bytes32 param) = + clPoolManager.poolIdToPoolKey(poolId); + PoolKey memory poolKey = PoolKey(curr0, curr1, hook, pm, fee, param); + + ICLRouterBase.CLSwapExactInputSingleParams memory params = ICLRouterBase.CLSwapExactInputSingleParams({ + poolKey: poolKey, + zeroForOne: zeroForOne, + amountIn: amountIn, + amountOutMinimum: amountOutMinimum, + hookData: hookData + }); + vault.lock(abi.encode("clSwapExactInputSingle", abi.encode(msg.sender, params))); + } + + function poolKeyToPoolId(Currency curr0, Currency curr1, IHooks hook, IPoolManager pm, uint24 fee, bytes32 param) + external + pure + returns (bytes32) + { + PoolKey memory poolKey = PoolKey(curr0, curr1, hook, pm, fee, param); + return PoolId.unwrap(poolKey.toId()); + } + + function binSwapExactInputSingle(IBinRouterBase.BinSwapExactInputSingleParams calldata params) external payable { + vault.lock(abi.encode("binSwapExactInputSingle", abi.encode(msg.sender, params))); + } + + function binSwapExactInputSingle( + PoolId poolId, + bool swapForY, + uint128 amountIn, + uint128 amountOutMinimum, + bytes memory hookData + ) external payable { + (Currency curr0, Currency curr1, IHooks hook, IPoolManager pm, uint24 fee, bytes32 param) = + binPoolManager.poolIdToPoolKey(poolId); + PoolKey memory poolKey = PoolKey(curr0, curr1, hook, pm, fee, param); + + IBinRouterBase.BinSwapExactInputSingleParams memory params = IBinRouterBase.BinSwapExactInputSingleParams({ + poolKey: poolKey, + swapForY: swapForY, + amountIn: amountIn, + amountOutMinimum: amountOutMinimum, + hookData: hookData + }); + vault.lock(abi.encode("binSwapExactInputSingle", abi.encode(msg.sender, params))); + } + + function lockAcquired(bytes calldata callbackData) external onlyByVault returns (bytes memory) { + (bytes memory action, bytes memory rawCallbackData) = abi.decode(callbackData, (bytes, bytes)); + + if (keccak256(action) == keccak256("clSwapExactInputSingle")) { + (address sender, ICLRouterBase.CLSwapExactInputSingleParams memory params) = + abi.decode(rawCallbackData, (address, ICLRouterBase.CLSwapExactInputSingleParams)); + + _clSwapExactInputSingle(sender, params); + } else if (keccak256(action) == keccak256("binSwapExactInputSingle")) { + (address sender, IBinRouterBase.BinSwapExactInputSingleParams memory params) = + abi.decode(rawCallbackData, (address, IBinRouterBase.BinSwapExactInputSingleParams)); + + _binSwapExactInputSingle(sender, params); + } else { + revert("QaSwapRouter: invalid action"); + } + } + + /// @dev referenced from CLRouterBase.sol + function _clSwapExactInputSingle(address sender, ICLRouterBase.CLSwapExactInputSingleParams memory params) + internal + { + uint128 amountOut = _clSwapExactPrivate( + params.poolKey, params.zeroForOne, -int256(uint256(params.amountIn)), params.hookData + ).toUint128(); + if (amountOut < params.amountOutMinimum) { + revert IInfinityRouter.TooLittleReceived(params.amountOutMinimum, amountOut); + } + + (Currency inputCurrency, Currency outputCurrency) = params.zeroForOne + ? (params.poolKey.currency0, params.poolKey.currency1) + : (params.poolKey.currency1, params.poolKey.currency0); + + // pay and take + _settle(inputCurrency, sender, _getFullDebt(inputCurrency)); + _take(outputCurrency, sender, _getFullCredit(outputCurrency)); + } + + /// @dev referenced from CLRouterBase.sol + function _clSwapExactPrivate(PoolKey memory poolKey, bool zeroForOne, int256 amountSpecified, bytes memory hookData) + private + returns (int128 reciprocalAmount) + { + BalanceDelta delta = clPoolManager.swap( + poolKey, + ICLPoolManager.SwapParams( + zeroForOne, amountSpecified, zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1 + ), + hookData + ); + + reciprocalAmount = (zeroForOne == amountSpecified < 0) ? delta.amount1() : delta.amount0(); + } + + /// @dev reference from BinRouterBase.sol + function _binSwapExactInputSingle(address sender, IBinRouterBase.BinSwapExactInputSingleParams memory params) + internal + { + uint128 amountOut = _swapBinExactPrivate( + params.poolKey, params.swapForY, -(params.amountIn.safeInt128()), params.hookData + ).toUint128(); + + if (amountOut < params.amountOutMinimum) { + revert IInfinityRouter.TooLittleReceived(params.amountOutMinimum, amountOut); + } + + (Currency inputCurrency, Currency outputCurrency) = params.swapForY + ? (params.poolKey.currency0, params.poolKey.currency1) + : (params.poolKey.currency1, params.poolKey.currency0); + + // pay and take + _settle(inputCurrency, sender, _getFullDebt(inputCurrency)); + _take(outputCurrency, sender, _getFullCredit(outputCurrency)); + } + + /// @dev referenced from BinRouterBase.sol + function _swapBinExactPrivate(PoolKey memory poolKey, bool swapForY, int128 amountSpecified, bytes memory hookData) + private + returns (int128 reciprocalAmount) + { + BalanceDelta delta = binPoolManager.swap(poolKey, swapForY, amountSpecified, hookData); + reciprocalAmount = (swapForY == amountSpecified < 0) ? delta.amount1() : delta.amount0(); + } + + function _pay(Currency currency, address payer, uint256 amount) internal override(DeltaResolver) { + if (payer == address(this)) { + currency.transfer(address(vault), amount); + } else { + permit2.transferFrom(payer, address(vault), uint160(amount), Currency.unwrap(currency)); + } + } +} diff --git a/src/UniversalRouter.sol b/src/UniversalRouter.sol index ce81892..f68f098 100755 --- a/src/UniversalRouter.sol +++ b/src/UniversalRouter.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.26; // Command implementations import {Dispatcher} from "./base/Dispatcher.sol"; import {RouterParameters, RouterImmutables} from "./base/RouterImmutables.sol"; -import {V4SwapRouter} from "./modules/pancakeswap/v4/V4SwapRouter.sol"; +import {InfinitySwapRouter} from "./modules/pancakeswap/infinity/InfinitySwapRouter.sol"; import {Commands} from "./libraries/Commands.sol"; import {Constants} from "./libraries/Constants.sol"; import {IUniversalRouter} from "./interfaces/IUniversalRouter.sol"; @@ -16,7 +16,7 @@ contract UniversalRouter is RouterImmutables, IUniversalRouter, Dispatcher, Paus constructor(RouterParameters memory params) RouterImmutables(params) StableSwapRouter(params.stableFactory, params.stableInfo) - V4SwapRouter(params.v4Vault, params.v4ClPoolManager, params.v4BinPoolManager) + InfinitySwapRouter(params.infiVault, params.infiClPoolManager, params.infiBinPoolManager) {} modifier checkDeadline(uint256 deadline) { diff --git a/src/base/Dispatcher.sol b/src/base/Dispatcher.sol index cade62c..92e5f12 100755 --- a/src/base/Dispatcher.sol +++ b/src/base/Dispatcher.sol @@ -3,22 +3,22 @@ pragma solidity ^0.8.24; import {V2SwapRouter} from "../modules/pancakeswap/v2/V2SwapRouter.sol"; import {V3SwapRouter} from "../modules/pancakeswap/v3/V3SwapRouter.sol"; -import {V4SwapRouter} from "../modules/pancakeswap/v4/V4SwapRouter.sol"; +import {InfinitySwapRouter} from "../modules/pancakeswap/infinity/InfinitySwapRouter.sol"; import {StableSwapRouter} from "../modules/pancakeswap/StableSwapRouter.sol"; import {Payments} from "../modules/Payments.sol"; import {RouterImmutables} from "../base/RouterImmutables.sol"; -import {V3ToV4Migrator} from "../modules/V3ToV4Migrator.sol"; +import {V3ToInfinityMigrator} from "../modules/V3ToInfinityMigrator.sol"; import {BytesLib} from "../libraries/BytesLib.sol"; import {Commands} from "../libraries/Commands.sol"; import {Lock} from "./Lock.sol"; import {ERC20} from "solmate/src/tokens/ERC20.sol"; import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol"; -import {ActionConstants} from "pancake-v4-periphery/src/libraries/ActionConstants.sol"; -import {BaseActionsRouter} from "pancake-v4-periphery/src/base/BaseActionsRouter.sol"; -import {CalldataDecoder} from "pancake-v4-periphery/src/libraries/CalldataDecoder.sol"; -import {PoolKey} from "pancake-v4-core/src/types/PoolKey.sol"; -import {ICLPoolManager} from "pancake-v4-core/src/pool-cl/interfaces/ICLPoolManager.sol"; -import {IBinPoolManager} from "pancake-v4-core/src/pool-bin/interfaces/IBinPoolManager.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; +import {BaseActionsRouter} from "infinity-periphery/src/base/BaseActionsRouter.sol"; +import {CalldataDecoder} from "infinity-periphery/src/libraries/CalldataDecoder.sol"; +import {PoolKey} from "infinity-core/src/types/PoolKey.sol"; +import {ICLPoolManager} from "infinity-core/src/pool-cl/interfaces/ICLPoolManager.sol"; +import {IBinPoolManager} from "infinity-core/src/pool-bin/interfaces/IBinPoolManager.sol"; /// @title Decodes and Executes Commands /// @notice Called by the UniversalRouter contract to efficiently decode and execute a singular command @@ -27,8 +27,8 @@ abstract contract Dispatcher is V2SwapRouter, V3SwapRouter, StableSwapRouter, - V4SwapRouter, - V3ToV4Migrator, + InfinitySwapRouter, + V3ToInfinityMigrator, Lock { using BytesLib for bytes; @@ -64,7 +64,7 @@ abstract contract Dispatcher is // 0x00 <= command < 0x21 if (command < Commands.EXECUTE_SUB_PLAN) { // 0x00 <= command < 0x10 - if (command < Commands.V4_SWAP) { + if (command < Commands.INFI_SWAP) { // 0x00 <= command < 0x08 if (command < Commands.V2_SWAP_EXACT_IN) { if (command == Commands.V3_SWAP_EXACT_IN) { @@ -271,8 +271,8 @@ abstract contract Dispatcher is } } else { // 0x10 <= command < 0x21 - if (command == Commands.V4_SWAP) { - // pass the calldata provided to V4SwapRouter._executeActions (defined in BaseActionsRouter) + if (command == Commands.INFI_SWAP) { + // pass the calldata provided to InfinitySwapRouter._executeActions (defined in BaseActionsRouter) _executeActions(inputs); return (success, output); // This contract MUST be approved to spend the token since its going to be doing the call on the position manager @@ -285,7 +285,7 @@ abstract contract Dispatcher is /// @dev ensure there's follow-up action if v3 position's removed token are sent to router contract (success, output) = address(V3_POSITION_MANAGER).call(inputs); return (success, output); - } else if (command == Commands.V4_CL_INITIALIZE_POOL) { + } else if (command == Commands.INFI_CL_INITIALIZE_POOL) { // equivalent: abi.decode(inputs, (PoolKey, uint160)) where PoolKey is // (Currency currency0, Currency currency1, IHooks hooks, IPoolManager poolManager, uint24 fee, bytes32 parameters) PoolKey calldata poolKey; @@ -296,7 +296,7 @@ abstract contract Dispatcher is } (success, output) = address(clPoolManager).call(abi.encodeCall(ICLPoolManager.initialize, (poolKey, sqrtPriceX96))); - } else if (command == Commands.V4_BIN_INITIALIZE_POOL) { + } else if (command == Commands.INFI_BIN_INITIALIZE_POOL) { // equivalent: abi.decode(inputs, (PoolKey, uint24)) where PoolKey is // (Currency currency0, Currency currency1, IHooks hooks, IPoolManager poolManager, uint24 fee, bytes32 parameters) PoolKey calldata poolKey; @@ -307,13 +307,13 @@ abstract contract Dispatcher is } (success, output) = address(binPoolManager).call(abi.encodeCall(IBinPoolManager.initialize, (poolKey, activeId))); - } else if (command == Commands.V4_CL_POSITION_CALL) { - _checkV4ClPositionManagerCall(inputs); - (success, output) = address(V4_CL_POSITION_MANAGER).call{value: address(this).balance}(inputs); + } else if (command == Commands.INFI_CL_POSITION_CALL) { + _checkInfiClPositionManagerCall(inputs); + (success, output) = address(INFI_CL_POSITION_MANAGER).call{value: address(this).balance}(inputs); return (success, output); - } else if (command == Commands.V4_BIN_POSITION_CALL) { - _checkV4BinPositionManagerCall(inputs); - (success, output) = address(V4_BIN_POSITION_MANAGER).call{value: address(this).balance}(inputs); + } else if (command == Commands.INFI_BIN_POSITION_CALL) { + _checkInfiBinPositionManagerCall(inputs); + (success, output) = address(INFI_BIN_POSITION_MANAGER).call{value: address(this).balance}(inputs); return (success, output); } else { // placeholder area for commands 0x15-0x20 diff --git a/src/base/RouterImmutables.sol b/src/base/RouterImmutables.sol index 6fe658e..d0c4f0b 100755 --- a/src/base/RouterImmutables.sol +++ b/src/base/RouterImmutables.sol @@ -3,10 +3,10 @@ pragma solidity ^0.8.0; import {IPermit2} from "permit2/src/interfaces/IPermit2.sol"; import {IV3NonfungiblePositionManager} from - "pancake-v4-periphery/src/interfaces/external/IV3NonfungiblePositionManager.sol"; -import {IPositionManager} from "pancake-v4-periphery/src/interfaces/IPositionManager.sol"; + "infinity-periphery/src/interfaces/external/IV3NonfungiblePositionManager.sol"; +import {IPositionManager} from "infinity-periphery/src/interfaces/IPositionManager.sol"; import {ERC20} from "solmate/src/tokens/ERC20.sol"; -import {IWETH9} from "pancake-v4-periphery/src/interfaces/external/IWETH9.sol"; +import {IWETH9} from "infinity-periphery/src/interfaces/external/IWETH9.sol"; struct RouterParameters { // Payment parameters @@ -20,14 +20,14 @@ struct RouterParameters { bytes32 v3InitCodeHash; address stableFactory; address stableInfo; - // PCS v4 swapping parameters, param not in this contract as stored in v4SwapRouter - address v4Vault; - address v4ClPoolManager; - address v4BinPoolManager; - // PCS v3->v4 migration parameters + // PCS infinity swapping parameters, param not in this contract as stored in infiSwapRouter + address infiVault; + address infiClPoolManager; + address infiBinPoolManager; + // PCS v3->infinity migration parameters address v3NFTPositionManager; - address v4ClPositionManager; - address v4BinPositionManager; + address infiClPositionManager; + address infiBinPositionManager; } /// @title Router Immutable Storage contract @@ -57,11 +57,11 @@ contract RouterImmutables { /// @dev v3PositionManager address IV3NonfungiblePositionManager public immutable V3_POSITION_MANAGER; - /// @dev v4 CLPositionManager address - IPositionManager public immutable V4_CL_POSITION_MANAGER; + /// @dev infinity CLPositionManager address + IPositionManager public immutable INFI_CL_POSITION_MANAGER; - /// @dev v4 BinPositionManager address - IPositionManager public immutable V4_BIN_POSITION_MANAGER; + /// @dev infinity BinPositionManager address + IPositionManager public immutable INFI_BIN_POSITION_MANAGER; constructor(RouterParameters memory params) { PERMIT2 = IPermit2(params.permit2); @@ -72,7 +72,7 @@ contract RouterImmutables { PANCAKESWAP_V3_POOL_INIT_CODE_HASH = params.v3InitCodeHash; PANCAKESWAP_V3_DEPLOYER = params.v3Deployer; V3_POSITION_MANAGER = IV3NonfungiblePositionManager(params.v3NFTPositionManager); - V4_CL_POSITION_MANAGER = IPositionManager(params.v4ClPositionManager); - V4_BIN_POSITION_MANAGER = IPositionManager(params.v4BinPositionManager); + INFI_CL_POSITION_MANAGER = IPositionManager(params.infiClPositionManager); + INFI_BIN_POSITION_MANAGER = IPositionManager(params.infiBinPositionManager); } } diff --git a/src/libraries/BytesLib.sol b/src/libraries/BytesLib.sol index 5ea34eb..389ee81 100755 --- a/src/libraries/BytesLib.sol +++ b/src/libraries/BytesLib.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {Constants} from "./Constants.sol"; -import {CalldataDecoder} from "pancake-v4-periphery/src/libraries/CalldataDecoder.sol"; +import {CalldataDecoder} from "infinity-periphery/src/libraries/CalldataDecoder.sol"; library BytesLib { using CalldataDecoder for bytes; diff --git a/src/libraries/Commands.sol b/src/libraries/Commands.sol index b1a266f..aab2bd5 100755 --- a/src/libraries/Commands.sol +++ b/src/libraries/Commands.sol @@ -32,13 +32,13 @@ library Commands { // COMMAND_PLACEHOLDER = 0x0f; // Command Types where 0x10<=value<=0x20, executed in the third nested-if block - uint256 constant V4_SWAP = 0x10; + uint256 constant INFI_SWAP = 0x10; uint256 constant V3_POSITION_MANAGER_PERMIT = 0x11; uint256 constant V3_POSITION_MANAGER_CALL = 0x12; - uint256 constant V4_CL_INITIALIZE_POOL = 0x13; - uint256 constant V4_BIN_INITIALIZE_POOL = 0x14; - uint256 constant V4_CL_POSITION_CALL = 0x15; - uint256 constant V4_BIN_POSITION_CALL = 0x16; + uint256 constant INFI_CL_INITIALIZE_POOL = 0x13; + uint256 constant INFI_BIN_INITIALIZE_POOL = 0x14; + uint256 constant INFI_CL_POSITION_CALL = 0x15; + uint256 constant INFI_BIN_POSITION_CALL = 0x16; // COMMAND_PLACEHOLDER = 0x17 -> 0x20 // Command Types where 0x21<=value<=0x3f diff --git a/src/modules/Payments.sol b/src/modules/Payments.sol index 71d5cac..9161989 100755 --- a/src/modules/Payments.sol +++ b/src/modules/Payments.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.0; import {Constants} from "../libraries/Constants.sol"; -import {ActionConstants} from "pancake-v4-periphery/src/libraries/ActionConstants.sol"; -import {BipsLibrary} from "pancake-v4-periphery/src/libraries/BipsLibrary.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; +import {BipsLibrary} from "infinity-periphery/src/libraries/BipsLibrary.sol"; import {RouterImmutables} from "../base/RouterImmutables.sol"; import {SafeTransferLib} from "solmate/src/utils/SafeTransferLib.sol"; import {ERC20} from "solmate/src/tokens/ERC20.sol"; diff --git a/src/modules/V3ToV4Migrator.sol b/src/modules/V3ToInfinityMigrator.sol similarity index 83% rename from src/modules/V3ToV4Migrator.sol rename to src/modules/V3ToInfinityMigrator.sol index 07d37bc..3c944c4 100644 --- a/src/modules/V3ToV4Migrator.sol +++ b/src/modules/V3ToInfinityMigrator.sol @@ -4,15 +4,15 @@ pragma solidity ^0.8.0; import {RouterImmutables} from "../base/RouterImmutables.sol"; import {IV3NonfungiblePositionManager} from - "pancake-v4-periphery/src/interfaces/external/IV3NonfungiblePositionManager.sol"; -import {Actions} from "pancake-v4-periphery/src/libraries/Actions.sol"; -import {CalldataDecoder} from "pancake-v4-periphery/src/libraries/CalldataDecoder.sol"; -import {IPositionManager} from "pancake-v4-periphery/src/interfaces/IPositionManager.sol"; -import {IERC721Permit} from "pancake-v4-periphery/src/pool-cl/interfaces/IERC721Permit.sol"; - -/// @title V3 to V4 Migrator -/// @notice A contract that migrates liquidity from PancakeSwap V3 to V4 -abstract contract V3ToV4Migrator is RouterImmutables { + "infinity-periphery/src/interfaces/external/IV3NonfungiblePositionManager.sol"; +import {Actions} from "infinity-periphery/src/libraries/Actions.sol"; +import {CalldataDecoder} from "infinity-periphery/src/libraries/CalldataDecoder.sol"; +import {IPositionManager} from "infinity-periphery/src/interfaces/IPositionManager.sol"; +import {IERC721Permit} from "infinity-periphery/src/interfaces/IERC721Permit.sol"; + +/// @title V3 to Infinity Migrator +/// @notice A contract that migrates liquidity from PancakeSwap V3 to Infinity +abstract contract V3ToInfinityMigrator is RouterImmutables { using CalldataDecoder for bytes; error NotAuthorizedForToken(uint256 tokenId); @@ -71,16 +71,16 @@ abstract contract V3ToV4Migrator is RouterImmutables { } } - /// @dev check that the v4 position manager call is a safe call + /// @dev check that the cl position manager call is a safe call /// of the position-altering Actions, we only allow Actions.MINT /// this is because, if a user could be tricked into approving the UniversalRouter for /// their position, an attacker could take their fees, or drain their entire position - function _checkV4ClPositionManagerCall(bytes calldata inputs) internal view { + function _checkInfiClPositionManagerCall(bytes calldata inputs) internal view { bytes4 selector; assembly { selector := calldataload(inputs.offset) } - if (selector != V4_CL_POSITION_MANAGER.modifyLiquidities.selector) { + if (selector != INFI_CL_POSITION_MANAGER.modifyLiquidities.selector) { revert InvalidAction(selector); } @@ -105,16 +105,16 @@ abstract contract V3ToV4Migrator is RouterImmutables { } } - /// @dev check that the v4 position manager call is a safe call + /// @dev check that the bin position manager call is a safe call /// of the position-altering Actions, we only allow Actions.BIN_ADD_LIQUIDITY /// this is because, if a user could be tricked into approving the UniversalRouter for /// their position, an attacker could drain their entire position - function _checkV4BinPositionManagerCall(bytes calldata inputs) internal view { + function _checkInfiBinPositionManagerCall(bytes calldata inputs) internal view { bytes4 selector; assembly { selector := calldataload(inputs.offset) } - if (selector != V4_BIN_POSITION_MANAGER.modifyLiquidities.selector) { + if (selector != INFI_BIN_POSITION_MANAGER.modifyLiquidities.selector) { revert InvalidAction(selector); } diff --git a/src/modules/pancakeswap/StableSwapRouter.sol b/src/modules/pancakeswap/StableSwapRouter.sol index 5fc1ae6..846c3d2 100644 --- a/src/modules/pancakeswap/StableSwapRouter.sol +++ b/src/modules/pancakeswap/StableSwapRouter.sol @@ -2,7 +2,7 @@ // Copyright (C) 2024 PancakeSwap pragma solidity ^0.8.0; -import {ActionConstants} from "pancake-v4-periphery/src/libraries/ActionConstants.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; import {RouterImmutables} from "../../base/RouterImmutables.sol"; import {Payments} from "../Payments.sol"; import {Permit2Payments} from "../Permit2Payments.sol"; diff --git a/src/modules/pancakeswap/infinity/InfinitySwapRouter.sol b/src/modules/pancakeswap/infinity/InfinitySwapRouter.sol new file mode 100644 index 0000000..a118f7f --- /dev/null +++ b/src/modules/pancakeswap/infinity/InfinitySwapRouter.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +// Copyright (C) 2024 PancakeSwap +pragma solidity ^0.8.24; + +import {Permit2Payments} from "../../Permit2Payments.sol"; +import {InfinityRouter} from "infinity-periphery/src/InfinityRouter.sol"; +import {IVault} from "infinity-core/src/interfaces/IVault.sol"; +import {ICLPoolManager} from "infinity-core/src/pool-cl/interfaces/ICLPoolManager.sol"; +import {IBinPoolManager} from "infinity-core/src/pool-bin/interfaces/IBinPoolManager.sol"; +import {Currency} from "infinity-core/src/types/Currency.sol"; + +/// @title Router for PCS Infinity Trades +abstract contract InfinitySwapRouter is InfinityRouter, Permit2Payments { + constructor(address _vault, address _clPoolManager, address _binPoolManager) + InfinityRouter(IVault(_vault), ICLPoolManager(_clPoolManager), IBinPoolManager(_binPoolManager)) + {} + + function _pay(Currency token, address payer, uint256 amount) internal override { + payOrPermit2Transfer(Currency.unwrap(token), payer, address(vault), amount); + } +} diff --git a/src/modules/pancakeswap/v3/V3SwapRouter.sol b/src/modules/pancakeswap/v3/V3SwapRouter.sol index 1650856..afb445d 100755 --- a/src/modules/pancakeswap/v3/V3SwapRouter.sol +++ b/src/modules/pancakeswap/v3/V3SwapRouter.sol @@ -2,7 +2,7 @@ // Copyright (C) 2024 PancakeSwap pragma solidity ^0.8.0; -import {ActionConstants} from "pancake-v4-periphery/src/libraries/ActionConstants.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; import {SafeCast} from "./SafeCast.sol"; import {IPancakeV3Pool} from "./interfaces/IPancakeV3Pool.sol"; import {IPancakeV3SwapCallback} from "./interfaces/IPancakeV3SwapCallback.sol"; @@ -13,7 +13,7 @@ import {RouterImmutables} from "../../../base/RouterImmutables.sol"; import {Permit2Payments} from "../../Permit2Payments.sol"; import {MaxInputAmount} from "../../../libraries/MaxInputAmount.sol"; import {ERC20} from "solmate/src/tokens/ERC20.sol"; -import {CalldataDecoder} from "pancake-v4-periphery/src/libraries/CalldataDecoder.sol"; +import {CalldataDecoder} from "infinity-periphery/src/libraries/CalldataDecoder.sol"; /// @title Router for PancakeSwap v3 Trades abstract contract V3SwapRouter is RouterImmutables, Permit2Payments, IPancakeV3SwapCallback { diff --git a/src/modules/pancakeswap/v4/V4SwapRouter.sol b/src/modules/pancakeswap/v4/V4SwapRouter.sol deleted file mode 100644 index a37eb40..0000000 --- a/src/modules/pancakeswap/v4/V4SwapRouter.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -// Copyright (C) 2024 PancakeSwap -pragma solidity ^0.8.24; - -import {Permit2Payments} from "../../Permit2Payments.sol"; -import {V4Router} from "pancake-v4-periphery/src/V4Router.sol"; -import {IVault} from "pancake-v4-core/src/interfaces/IVault.sol"; -import {ICLPoolManager} from "pancake-v4-core/src/pool-cl/interfaces/ICLPoolManager.sol"; -import {IBinPoolManager} from "pancake-v4-core/src/pool-bin/interfaces/IBinPoolManager.sol"; -import {Currency} from "pancake-v4-core/src/types/Currency.sol"; - -/// @title Router for PCS v4 Trades -abstract contract V4SwapRouter is V4Router, Permit2Payments { - constructor(address _vault, address _clPoolManager, address _binPoolManager) - V4Router(IVault(_vault), ICLPoolManager(_clPoolManager), IBinPoolManager(_binPoolManager)) - {} - - function _pay(Currency token, address payer, uint256 amount) internal override { - payOrPermit2Transfer(Currency.unwrap(token), payer, address(vault), amount); - } -} diff --git a/test/QaSwapRouter.t.sol b/test/QaSwapRouter.t.sol new file mode 100644 index 0000000..b93c92b --- /dev/null +++ b/test/QaSwapRouter.t.sol @@ -0,0 +1,359 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.15; + +import "forge-std/Test.sol"; +import {ERC20} from "solmate/src/tokens/ERC20.sol"; +import {WETH} from "solmate/src/tokens/WETH.sol"; + +import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol"; +import {DeployPermit2} from "permit2/test/utils/DeployPermit2.sol"; + +import {Currency, CurrencyLibrary} from "infinity-core/src/types/Currency.sol"; +import {IHooks} from "infinity-core/src/interfaces/IHooks.sol"; +import {PoolKey} from "infinity-core/src/types/PoolKey.sol"; +import {PoolId} from "infinity-core/src/types/PoolId.sol"; +import {Currency} from "infinity-core/src/types/Currency.sol"; +import {IVault} from "infinity-core/src/interfaces/IVault.sol"; +import {Vault} from "infinity-core/src/Vault.sol"; +import {IBinPoolManager} from "infinity-core/src/pool-bin/interfaces/IBinPoolManager.sol"; +import {BinPoolManager} from "infinity-core/src/pool-bin/BinPoolManager.sol"; +import {BinPoolParametersHelper} from "infinity-core/src/pool-bin/libraries/BinPoolParametersHelper.sol"; +import {ICLPoolManager} from "infinity-core/src/pool-cl/interfaces/ICLPoolManager.sol"; +import {CLPoolManager} from "infinity-core/src/pool-cl/CLPoolManager.sol"; +import {CLPoolParametersHelper} from "infinity-core/src/pool-cl/libraries/CLPoolParametersHelper.sol"; +import {TickMath} from "infinity-core/src/pool-cl/libraries/TickMath.sol"; +import {FixedPoint96} from "infinity-core/src/pool-cl/libraries/FixedPoint96.sol"; + +import {Actions} from "infinity-periphery/src/libraries/Actions.sol"; +import {IWETH9} from "infinity-periphery/src/interfaces/external/IWETH9.sol"; +import {BinPositionManager} from "infinity-periphery/src/pool-bin/BinPositionManager.sol"; +import {CLPositionManager} from "infinity-periphery/src/pool-cl/CLPositionManager.sol"; +import {CLPositionDescriptorOffChain} from "infinity-periphery/src/pool-cl/CLPositionDescriptorOffChain.sol"; +import {Plan, Planner} from "infinity-periphery/src/libraries/Planner.sol"; +import {BinLiquidityHelper} from "infinity-periphery/test/pool-bin/helper/BinLiquidityHelper.sol"; +import {LiquidityAmounts} from "infinity-periphery/src/pool-cl/libraries/LiquidityAmounts.sol"; +import {IBinPositionManager} from "infinity-periphery/src/pool-bin/interfaces/IBinPositionManager.sol"; +import {ICLRouterBase} from "infinity-periphery/src/pool-cl/interfaces/ICLRouterBase.sol"; +import {IBinRouterBase} from "infinity-periphery/src/pool-bin/interfaces/IBinRouterBase.sol"; + +import {UniversalRouter} from "../src/UniversalRouter.sol"; +import {Dispatcher} from "../src/base/Dispatcher.sol"; +import {IUniversalRouter} from "../src/interfaces/IUniversalRouter.sol"; +import {Payments} from "../src/modules/Payments.sol"; +import {MockERC20} from "./mock/MockERC20.sol"; +import {BasePancakeSwapInfinity} from "./infinity/BasePancakeSwapInfinity.sol"; +import {QaSwapRouter} from "../src/QaSwapRouter.sol"; + +contract QaSwapRouterTest is BasePancakeSwapInfinity, BinLiquidityHelper { + using BinPoolParametersHelper for bytes32; + using CLPoolParametersHelper for bytes32; + using Planner for Plan; + + QaSwapRouter router; + MockERC20 erc20; + MockERC20 erc20_2; + + IVault public vault; + ICLPoolManager public clPoolManager; + CLPositionManager public clPositionManager; + IBinPoolManager public binPoolManager; + BinPositionManager public binPositionManager; + + WETH weth9 = new WETH(); + IAllowanceTransfer permit2; + + address alice = makeAddr("alice"); + uint160 constant SQRT_PRICE_1_1 = uint160(1 * FixedPoint96.Q96); // price 1 + uint24 constant ACTIVE_ID_1_1 = 2 ** 23; // where token0 and token1 price is the same + + MockERC20 token0; + MockERC20 token1; + + PoolKey public clPoolKey; + PoolKey public clNativePoolKey; + PoolKey public binPoolKey; + PoolKey public binNativePoolKey; + + function setUp() public { + initializeTokens(); + vm.label(Currency.unwrap(currency0), "token0"); + vm.label(Currency.unwrap(currency1), "token1"); + + token0 = MockERC20(Currency.unwrap(currency0)); + token1 = MockERC20(Currency.unwrap(currency1)); + + // pre-req: create vault + vault = IVault(new Vault()); + clPoolManager = new CLPoolManager(vault); + binPoolManager = new BinPoolManager(vault); + vault.registerApp(address(clPoolManager)); + vault.registerApp(address(binPoolManager)); + + permit2 = IAllowanceTransfer(deployPermit2()); + + CLPositionDescriptorOffChain pd = + new CLPositionDescriptorOffChain("https://pancakeswap.finance/infinity/pool-cl/positions/"); + clPositionManager = new CLPositionManager(vault, clPoolManager, permit2, 100_000, pd, IWETH9(address(weth9))); + binPositionManager = new BinPositionManager(vault, binPoolManager, permit2, IWETH9(address(weth9))); + _approvePermit2ForCurrency(address(this), currency0, address(clPositionManager), permit2); + _approvePermit2ForCurrency(address(this), currency1, address(clPositionManager), permit2); + _approvePermit2ForCurrency(address(this), currency0, address(binPositionManager), permit2); + _approvePermit2ForCurrency(address(this), currency1, address(binPositionManager), permit2); + + router = new QaSwapRouter(vault, clPoolManager, binPoolManager, permit2); + _approvePermit2ForCurrency(alice, currency0, address(router), permit2); + _approvePermit2ForCurrency(alice, currency1, address(router), permit2); + + clPoolKey = PoolKey({ + currency0: currency0, + currency1: currency1, + hooks: IHooks(address(0)), + poolManager: clPoolManager, + fee: uint24(3000), + parameters: bytes32(0).setTickSpacing(10) + }); + clPoolManager.initialize(clPoolKey, SQRT_PRICE_1_1); + _mintCl(clPoolKey); + + clNativePoolKey = PoolKey({ + currency0: CurrencyLibrary.NATIVE, + currency1: currency1, + hooks: IHooks(address(0)), + poolManager: clPoolManager, + fee: uint24(3000), + parameters: bytes32(0).setTickSpacing(10) + }); + clPoolManager.initialize(clNativePoolKey, SQRT_PRICE_1_1); + _mintCl(clNativePoolKey); + + binPoolKey = PoolKey({ + currency0: currency0, + currency1: currency1, + hooks: IHooks(address(0)), + poolManager: binPoolManager, + fee: uint24(3000), + parameters: bytes32(0).setBinStep(10) + }); + binPoolManager.initialize(binPoolKey, ACTIVE_ID_1_1); + _mintBin(binPoolKey); + + binNativePoolKey = PoolKey({ + currency0: CurrencyLibrary.NATIVE, + currency1: currency1, + hooks: IHooks(address(0)), + poolManager: binPoolManager, + fee: uint24(3000), + parameters: bytes32(0).setBinStep(10) + }); + binPoolManager.initialize(binNativePoolKey, ACTIVE_ID_1_1); + _mintBin(binNativePoolKey); + } + + function test_clSwapExactInputSingle_ZeroForOne() external { + uint128 amountIn = 0.01 ether; + MockERC20(Currency.unwrap(currency0)).mint(alice, amountIn); + vm.startPrank(alice); + + ICLRouterBase.CLSwapExactInputSingleParams memory params = + ICLRouterBase.CLSwapExactInputSingleParams(clPoolKey, true, amountIn, 0, ""); + + // before + assertEq(token0.balanceOf(alice), 0.01 ether); + assertEq(token1.balanceOf(alice), 0 ether); + + router.clSwapExactInputSingle(params); + + // after + assertEq(token0.balanceOf(alice), 0); + assertEq(token1.balanceOf(alice), 9969940541342903); + } + + function test_clSwapExactInputSingle_OneForZero() external { + uint128 amountIn = 0.01 ether; + MockERC20(Currency.unwrap(currency1)).mint(alice, amountIn); + vm.startPrank(alice); + + ICLRouterBase.CLSwapExactInputSingleParams memory params = + ICLRouterBase.CLSwapExactInputSingleParams(clPoolKey, false, amountIn, 0, ""); + + // before + assertEq(token0.balanceOf(alice), 0 ether); + assertEq(token1.balanceOf(alice), 0.01 ether); + + router.clSwapExactInputSingle(params); + + // after + assertEq(token0.balanceOf(alice), 9969940541342903); + assertEq(token1.balanceOf(alice), 0); + } + + function test_clSwapExactInputSingle_NativePool() external { + uint128 amountIn = 0.01 ether; + vm.deal(alice, amountIn); + vm.startPrank(alice); + + ICLRouterBase.CLSwapExactInputSingleParams memory params = + ICLRouterBase.CLSwapExactInputSingleParams(clNativePoolKey, true, amountIn, 0, ""); + + // before + assertEq(alice.balance, 0.01 ether); + assertEq(token1.balanceOf(alice), 0 ether); + + router.clSwapExactInputSingle{value: amountIn}(params); + + // after + assertEq(alice.balance, 0); + assertEq(token1.balanceOf(alice), 9969940541342903); + } + + function test_clSwapExactInputSingle_NativePool_PoolId() external { + uint128 amountIn = 0.01 ether; + vm.deal(alice, amountIn); + vm.startPrank(alice); + + // before + assertEq(alice.balance, 0.01 ether); + assertEq(token1.balanceOf(alice), 0 ether); + + router.clSwapExactInputSingle{value: amountIn}(clNativePoolKey.toId(), true, amountIn, 0, ""); + + // after + assertEq(alice.balance, 0); + assertEq(token1.balanceOf(alice), 9969940541342903); + } + + function test_binSwapExactInputSingle_NativePool() external { + uint128 amountIn = 0.01 ether; + vm.deal(alice, amountIn); + vm.startPrank(alice); + + IBinRouterBase.BinSwapExactInputSingleParams memory params = + IBinRouterBase.BinSwapExactInputSingleParams(binNativePoolKey, true, amountIn, 0, ""); + + // before + assertEq(alice.balance, 0.01 ether); + assertEq(token1.balanceOf(alice), 0 ether); + + router.binSwapExactInputSingle{value: amountIn}(params); + + // after + assertEq(alice.balance, 0); + assertEq(token1.balanceOf(alice), 9970000000000000); // 0.01 eth * 0.997 + } + + function test_binSwapExactInputSingle_ZeroForOne() external { + uint128 amountIn = 0.01 ether; + MockERC20(Currency.unwrap(currency0)).mint(alice, amountIn); + vm.startPrank(alice); + + IBinRouterBase.BinSwapExactInputSingleParams memory params = + IBinRouterBase.BinSwapExactInputSingleParams(binPoolKey, true, amountIn, 0, ""); + + // before + assertEq(token0.balanceOf(alice), 0.01 ether); + assertEq(token1.balanceOf(alice), 0 ether); + + router.binSwapExactInputSingle(params); + + // after + assertEq(token0.balanceOf(alice), 0 ether); + assertEq(token1.balanceOf(alice), 9970000000000000); // 0.01 eth * 0.997 + } + + function test_binSwapExactInputSingle_OneForZero() external { + uint128 amountIn = 0.01 ether; + MockERC20(Currency.unwrap(currency1)).mint(alice, amountIn); + vm.startPrank(alice); + + IBinRouterBase.BinSwapExactInputSingleParams memory params = + IBinRouterBase.BinSwapExactInputSingleParams(binPoolKey, false, amountIn, 0, ""); + + // before + assertEq(token0.balanceOf(alice), 0 ether); + assertEq(token1.balanceOf(alice), 0.01 ether); + + router.binSwapExactInputSingle(params); + + // after + assertEq(token0.balanceOf(alice), 9970000000000000); + assertEq(token1.balanceOf(alice), 0 ether); // 0.01 eth * 0.997 + } + + function test_binSwapExactInputSingle_OneForZero_poolId() external { + uint128 amountIn = 0.01 ether; + MockERC20(Currency.unwrap(currency1)).mint(alice, amountIn); + vm.startPrank(alice); + + // before + assertEq(token0.balanceOf(alice), 0 ether); + assertEq(token1.balanceOf(alice), 0.01 ether); + + router.binSwapExactInputSingle(binPoolKey.toId(), false, amountIn, 0, ""); + + // after + assertEq(token0.balanceOf(alice), 9970000000000000); + assertEq(token1.balanceOf(alice), 0 ether); // 0.01 eth * 0.997 + } + + function test_poolKeyToPoolId() external { + bytes32 clPoolId = router.poolKeyToPoolId( + clPoolKey.currency0, + clPoolKey.currency1, + clPoolKey.hooks, + clPoolKey.poolManager, + clPoolKey.fee, + clPoolKey.parameters + ); + assertEq(clPoolId, PoolId.unwrap(clPoolKey.toId())); + + bytes32 binNativePoolId = router.poolKeyToPoolId( + binNativePoolKey.currency0, + binNativePoolKey.currency1, + binNativePoolKey.hooks, + binNativePoolKey.poolManager, + binNativePoolKey.fee, + binNativePoolKey.parameters + ); + assertEq(binNativePoolId, PoolId.unwrap(binNativePoolKey.toId())); + } + + /// @dev add 10 ether of token0, token1 at tick(-120, 120) to poolKey + function _mintCl(PoolKey memory key) private { + int24 tickLower = -120; + int24 tickUpper = 120; + + uint160 sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower); + uint160 sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper); + uint256 liquidity = + LiquidityAmounts.getLiquidityForAmounts(SQRT_PRICE_1_1, sqrtRatioAX96, sqrtRatioBX96, 10 ether, 10 ether); // around 1671 e18 liquidity + + Plan memory mintPlan = Planner.init(); + mintPlan.add( + Actions.CL_MINT_POSITION, + abi.encode(key, tickLower, tickUpper, liquidity, type(uint128).max, type(uint128).max, address(this), "") + ); + + bytes memory calls = mintPlan.finalizeModifyLiquidityWithClose(key); + + if (key.currency0 == CurrencyLibrary.NATIVE) { + clPositionManager.modifyLiquidities{value: 10 ether}(calls, block.timestamp + 1); + } else { + clPositionManager.modifyLiquidities(calls, block.timestamp + 1); + } + } + + function _mintBin(PoolKey memory key) private { + uint24[] memory binIds = getBinIds(ACTIVE_ID_1_1, 1); + IBinPositionManager.BinAddLiquidityParams memory addParams; + addParams = _getAddParams(key, binIds, 10 ether, 10 ether, ACTIVE_ID_1_1, address(this)); + + Plan memory planner = Planner.init().add(Actions.BIN_ADD_LIQUIDITY, abi.encode(addParams)); + bytes memory payload = planner.finalizeModifyLiquidityWithClose(key); + + if (key.currency0 == CurrencyLibrary.NATIVE) { + binPositionManager.modifyLiquidities{value: 10 ether}(payload, block.timestamp + 1); + } else { + binPositionManager.modifyLiquidities(payload, block.timestamp + 1); + } + } +} diff --git a/test/UniversalRouter.crossVersion.t.sol b/test/UniversalRouter.crossVersion.t.sol index a60b78c..a714dd1 100644 --- a/test/UniversalRouter.crossVersion.t.sol +++ b/test/UniversalRouter.crossVersion.t.sol @@ -3,35 +3,35 @@ pragma solidity ^0.8.15; import {Test, console} from "forge-std/Test.sol"; import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol"; -import {IWETH9} from "pancake-v4-periphery/src/interfaces/external/IWETH9.sol"; +import {IWETH9} from "infinity-periphery/src/interfaces/external/IWETH9.sol"; import {WETH} from "solmate/src/tokens/WETH.sol"; import {MockERC20} from "solmate/src/test/utils/mocks/MockERC20.sol"; -import {PoolKey} from "pancake-v4-core/src/types/PoolKey.sol"; -import {Currency, CurrencyLibrary} from "pancake-v4-core/src/types/Currency.sol"; -import {IVault} from "pancake-v4-core/src/interfaces/IVault.sol"; -import {Vault} from "pancake-v4-core/src/Vault.sol"; -import {CLPoolManager} from "pancake-v4-core/src/pool-cl/CLPoolManager.sol"; -import {ICLPoolManager} from "pancake-v4-core/src/pool-cl/interfaces/ICLPoolManager.sol"; -import {BinPoolManager} from "pancake-v4-core/src/pool-bin/BinPoolManager.sol"; -import {IBinPoolManager} from "pancake-v4-core/src/pool-bin/interfaces/IBinPoolManager.sol"; -import {FixedPoint96} from "pancake-v4-core/src/pool-cl/libraries/FixedPoint96.sol"; -import {IHooks} from "pancake-v4-core/src/interfaces/IHooks.sol"; -import {CLPoolParametersHelper} from "pancake-v4-core/src/pool-cl/libraries/CLPoolParametersHelper.sol"; -import {BinPoolParametersHelper} from "pancake-v4-core/src/pool-bin/libraries/BinPoolParametersHelper.sol"; -import {ActionConstants} from "pancake-v4-periphery/src/libraries/ActionConstants.sol"; -import {Plan, Planner} from "pancake-v4-periphery/src/libraries/Planner.sol"; -import {CLPositionDescriptorOffChain} from "pancake-v4-periphery/src/pool-cl/CLPositionDescriptorOffChain.sol"; -import {CLPositionManager} from "pancake-v4-periphery/src/pool-cl/CLPositionManager.sol"; -import {BinPositionManager} from "pancake-v4-periphery/src/pool-bin/BinPositionManager.sol"; -import {Actions} from "pancake-v4-periphery/src/libraries/Actions.sol"; +import {PoolKey} from "infinity-core/src/types/PoolKey.sol"; +import {Currency, CurrencyLibrary} from "infinity-core/src/types/Currency.sol"; +import {IVault} from "infinity-core/src/interfaces/IVault.sol"; +import {Vault} from "infinity-core/src/Vault.sol"; +import {CLPoolManager} from "infinity-core/src/pool-cl/CLPoolManager.sol"; +import {ICLPoolManager} from "infinity-core/src/pool-cl/interfaces/ICLPoolManager.sol"; +import {BinPoolManager} from "infinity-core/src/pool-bin/BinPoolManager.sol"; +import {IBinPoolManager} from "infinity-core/src/pool-bin/interfaces/IBinPoolManager.sol"; +import {FixedPoint96} from "infinity-core/src/pool-cl/libraries/FixedPoint96.sol"; +import {IHooks} from "infinity-core/src/interfaces/IHooks.sol"; +import {CLPoolParametersHelper} from "infinity-core/src/pool-cl/libraries/CLPoolParametersHelper.sol"; +import {BinPoolParametersHelper} from "infinity-core/src/pool-bin/libraries/BinPoolParametersHelper.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; +import {Plan, Planner} from "infinity-periphery/src/libraries/Planner.sol"; +import {CLPositionDescriptorOffChain} from "infinity-periphery/src/pool-cl/CLPositionDescriptorOffChain.sol"; +import {CLPositionManager} from "infinity-periphery/src/pool-cl/CLPositionManager.sol"; +import {BinPositionManager} from "infinity-periphery/src/pool-bin/BinPositionManager.sol"; +import {Actions} from "infinity-periphery/src/libraries/Actions.sol"; import {IV3NonfungiblePositionManager} from - "pancake-v4-periphery/src/interfaces/external/IV3NonfungiblePositionManager.sol"; -import {IERC721Permit} from "pancake-v4-periphery/src/pool-cl/interfaces/IERC721Permit.sol"; -import {IPositionManager} from "pancake-v4-periphery/src/interfaces/IPositionManager.sol"; -import {IBinPositionManager} from "pancake-v4-periphery/src/pool-bin/interfaces/IBinPositionManager.sol"; -import {OldVersionHelper} from "pancake-v4-periphery/test/helpers/OldVersionHelper.sol"; -import {BinLiquidityHelper} from "pancake-v4-periphery/test/pool-bin/helper/BinLiquidityHelper.sol"; + "infinity-periphery/src/interfaces/external/IV3NonfungiblePositionManager.sol"; +import {IERC721Permit} from "infinity-periphery/src/interfaces/IERC721Permit.sol"; +import {IPositionManager} from "infinity-periphery/src/interfaces/IPositionManager.sol"; +import {IBinPositionManager} from "infinity-periphery/src/pool-bin/interfaces/IBinPositionManager.sol"; +import {OldVersionHelper} from "infinity-periphery/test/helpers/OldVersionHelper.sol"; +import {BinLiquidityHelper} from "infinity-periphery/test/pool-bin/helper/BinLiquidityHelper.sol"; import {IPancakeV3PoolDeployer} from "../src/modules/pancakeswap/v3/interfaces/IPancakeV3PoolDeployer.sol"; import {IPancakeV3Factory} from "../src/modules/pancakeswap/v3/interfaces/IPancakeV3Factory.sol"; @@ -40,15 +40,15 @@ import {Commands} from "../src/libraries/Commands.sol"; import {RouterParameters} from "../src/base/RouterImmutables.sol"; import {Dispatcher} from "../src/base/Dispatcher.sol"; import {UniversalRouter} from "../src/UniversalRouter.sol"; -import {BasePancakeSwapV4} from "./v4/BasePancakeSwapV4.sol"; -import {ICLRouterBase} from "pancake-v4-periphery/src/interfaces/IV4Router.sol"; -import {TickMath} from "pancake-v4-core/src/pool-cl/libraries/TickMath.sol"; +import {BasePancakeSwapInfinity} from "./infinity/BasePancakeSwapInfinity.sol"; +import {ICLRouterBase} from "infinity-periphery/src/interfaces/IInfinityRouter.sol"; +import {TickMath} from "infinity-core/src/pool-cl/libraries/TickMath.sol"; interface IPancakeV3LikePairFactory { function createPool(address tokenA, address tokenB, uint24 fee) external returns (address pool); } -contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidityHelper { +contract UniversalRouterCrossVersionTest is BasePancakeSwapInfinity, OldVersionHelper, BinLiquidityHelper { using BinPoolParametersHelper for bytes32; using CLPoolParametersHelper for bytes32; using Planner for Plan; @@ -64,7 +64,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, // v3 related IV3NonfungiblePositionManager v3Nfpm; - // v4 related + // infinity related IVault vault; IBinPoolManager binPoolManager; BinPositionManager binPositionManager; @@ -105,7 +105,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, ); /////////////////////////////////// - //////////// v4 setup ///////////// + //////////// infinity setup ///////////// /////////////////////////////////// vault = IVault(new Vault()); binPoolManager = new BinPoolManager(vault); @@ -115,7 +115,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, binPositionManager = new BinPositionManager(vault, binPoolManager, permit2, IWETH9(address(weth))); CLPositionDescriptorOffChain pd = - new CLPositionDescriptorOffChain("https://pancakeswap.finance/v4/pool-cl/positions/"); + new CLPositionDescriptorOffChain("https://pancakeswap.finance/infinity/pool-cl/positions/"); clPositionManager = new CLPositionManager(vault, clPoolManager, permit2, 100_000, pd, IWETH9(address(weth))); /////////////////////////////////// @@ -131,12 +131,12 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, v3InitCodeHash: bytes32(0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2), stableFactory: address(0), stableInfo: address(0), - v4Vault: address(vault), - v4ClPoolManager: address(clPoolManager), - v4BinPoolManager: address(binPoolManager), + infiVault: address(vault), + infiClPoolManager: address(clPoolManager), + infiBinPoolManager: address(binPoolManager), v3NFTPositionManager: address(v3Nfpm), - v4ClPositionManager: address(clPositionManager), - v4BinPositionManager: address(binPositionManager) + infiClPositionManager: address(clPositionManager), + infiBinPositionManager: address(binPositionManager) }); router = new UniversalRouter(params); _approvePermit2ForCurrency(address(this), currency0, address(router), permit2); @@ -150,15 +150,15 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, // add liquidity to v3 usdt-weth pool _mintV3Liquidity(address(usdt), address(weth), liquidityProvider); - // add liquidity to v4 usdc-eth cl-pool - clPoolKeyWithETH = _mintV4CLLiquidity(address(usdc), address(0), liquidityProvider); - // add liquidity to v4 usdc-weth cl-pool - clPoolKeyWithWrappedETH = _mintV4CLLiquidity(address(usdc), address(weth), liquidityProvider); + // add liquidity to infinity usdc-eth cl-pool + clPoolKeyWithETH = _mintInfiCLLiquidity(address(usdc), address(0), liquidityProvider); + // add liquidity to infinity usdc-weth cl-pool + clPoolKeyWithWrappedETH = _mintInfiCLLiquidity(address(usdc), address(weth), liquidityProvider); } /// @dev case0: /// hop1. swap with a v3 (weth-usdt) pool - /// hop2. swap with a v4 native (eth-usdc) pool + /// hop2. swap with a infinity native (eth-usdc) pool function test_corssVersionSwapCase0() public { // 0. user starts with 1 ether USDT address trader = makeAddr("trader"); @@ -171,7 +171,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, bytes memory commands = abi.encodePacked( bytes1(uint8(Commands.V3_SWAP_EXACT_IN)), // USDT-> WETH bytes1(uint8(Commands.UNWRAP_WETH)), // WETH -> ETH - bytes1(uint8(Commands.V4_SWAP)) // ETH -> USDC + bytes1(uint8(Commands.INFI_SWAP)) // ETH -> USDC ); // 2. build up corresponding inputs @@ -191,7 +191,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, // uint256 amountMin = 0 (by default all the WETH will be unwrapped); inputs[1] = abi.encode(ActionConstants.ADDRESS_THIS, 0); - // 2.3. prepare v4 exact in params (i.e. ETH -> USDC) + // 2.3. prepare infinity exact in params (i.e. ETH -> USDC) Plan memory planner = Planner.init(); // 2.3.1. send ETH to vault ahead of time so that we can use it to pay for the following swap @@ -200,7 +200,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, // bool payerIsUser = false i.e. use the ETH we just received from unwrapping WETH planner.add(Actions.SETTLE, abi.encode(CurrencyLibrary.NATIVE, ActionConstants.CONTRACT_BALANCE, false)); - // 2.3.2. v4 swap params + // 2.3.2. infinity swap params ICLRouterBase.CLSwapExactInputSingleParams memory params = ICLRouterBase.CLSwapExactInputSingleParams({ poolKey: clPoolKeyWithETH, zeroForOne: true, // token0 is ETH @@ -234,7 +234,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, /// @dev case1: /// hop1. swap with a v3 (weth-usdt) pool - /// hop2. swap with a v4 non-native (weth-usdc) pool + /// hop2. swap with a infinity non-native (weth-usdc) pool function test_corssVersionSwapCase1() public { // 0. user starts with 1 ether USDT address trader = makeAddr("trader"); @@ -246,7 +246,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, // 1. build up univeral router commands list bytes memory commands = abi.encodePacked( bytes1(uint8(Commands.V3_SWAP_EXACT_IN)), // USDT-> WETH - bytes1(uint8(Commands.V4_SWAP)) // WETH -> USDC + bytes1(uint8(Commands.INFI_SWAP)) // WETH -> USDC ); // 2. build up corresponding inputs @@ -260,7 +260,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, // bool payerIsUser = true since user is paying USDT inputs[0] = abi.encode(ActionConstants.ADDRESS_THIS, 1 ether, 0, path, true); - // 2.2. prepare v4 exact in params (i.e. WETH -> USDC) + // 2.2. prepare infinity exact in params (i.e. WETH -> USDC) Plan memory planner = Planner.init(); // 2.2.1. send ETH to vault ahead of time so that we can use it to pay for the following swap @@ -269,7 +269,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, // bool payerIsUser = false i.e. use the WETH we just received from v3Swap planner.add(Actions.SETTLE, abi.encode(Currency.wrap(address(weth)), ActionConstants.CONTRACT_BALANCE, false)); - // 2.2.2. v4 swap params + // 2.2.2. infinity swap params bool zeroForOne = Currency.unwrap(clPoolKeyWithWrappedETH.currency0) == address(weth); ICLRouterBase.CLSwapExactInputSingleParams memory params = ICLRouterBase.CLSwapExactInputSingleParams({ poolKey: clPoolKeyWithWrappedETH, @@ -303,7 +303,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, } /// @dev case2: - /// hop1. swap with a v4 native (eth-usdc) pool + /// hop1. swap with a infinity native (eth-usdc) pool /// hop2. swap with a v3 (weth-usdt) pool function test_corssVersionSwapCase2() public { // 0. user starts with 1 ether usdc @@ -315,7 +315,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, // 1. build up univeral router commands list bytes memory commands = abi.encodePacked( - bytes1(uint8(Commands.V4_SWAP)), // USDC -> ETH + bytes1(uint8(Commands.INFI_SWAP)), // USDC -> ETH bytes1(uint8(Commands.WRAP_ETH)), // ETH -> WETH bytes1(uint8(Commands.V3_SWAP_EXACT_IN)), // WETH -> USDT bytes1(uint8(Commands.SWEEP)) // SWEEP WETH @@ -324,10 +324,10 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, // 2. build up corresponding inputs bytes[] memory inputs = new bytes[](4); - // 2.1. prepare v4 exact in params (i.e. ETH -> USDC) + // 2.1. prepare infinity exact in params (i.e. ETH -> USDC) Plan memory planner = Planner.init(); - // 2.1.1. v4 swap params + // 2.1.1. infinity swap params ICLRouterBase.CLSwapExactInputSingleParams memory params = ICLRouterBase.CLSwapExactInputSingleParams({ poolKey: clPoolKeyWithETH, zeroForOne: false, // token0 is ETH @@ -351,7 +351,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, // 2.2. wrap ETH to WETH: // address recipient = ADDRESS_THIS to make sure WETH is send back to universal router; - // uint256 amount = ActionConstants.CONTRACT_BALANCE to make sure all the ETH from v4 is wrapped + // uint256 amount = ActionConstants.CONTRACT_BALANCE to make sure all the ETH from infinity is wrapped inputs[1] = abi.encode(ActionConstants.ADDRESS_THIS, ActionConstants.CONTRACT_BALANCE); // 2.3. prepare v3 exact in params (i.e. WETH -> USDT): @@ -384,7 +384,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, } /// @dev case3: - /// hop1. swap with a v4 non-native (weth-usdc) pool + /// hop1. swap with a infinity non-native (weth-usdc) pool /// hop2. swap with a v3 (weth-usdt) pool function test_corssVersionSwapCase3() public { // 0. user starts with 1 ether usdc @@ -396,7 +396,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, // 1. build up univeral router commands list bytes memory commands = abi.encodePacked( - bytes1(uint8(Commands.V4_SWAP)), // USDC -> WETH + bytes1(uint8(Commands.INFI_SWAP)), // USDC -> WETH bytes1(uint8(Commands.V3_SWAP_EXACT_IN)), // WETH -> USDT bytes1(uint8(Commands.SWEEP)) // SWEEP WETH ); @@ -404,10 +404,10 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, // 2. build up corresponding inputs bytes[] memory inputs = new bytes[](3); - // 2.1. prepare v4 exact in params (i.e. WETH -> USDC) + // 2.1. prepare infinity exact in params (i.e. WETH -> USDC) Plan memory planner = Planner.init(); - // 2.1.1. v4 swap params + // 2.1.1. infinity swap params bool zeroForOne = Currency.unwrap(clPoolKeyWithWrappedETH.currency0) != address(weth); ICLRouterBase.CLSwapExactInputSingleParams memory params = ICLRouterBase.CLSwapExactInputSingleParams({ poolKey: clPoolKeyWithWrappedETH, @@ -490,7 +490,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, v3Nfpm.mint(mintParams); } - function _mintV4CLLiquidity(address _token0, address _token1, address recipient) + function _mintInfiCLLiquidity(address _token0, address _token1, address recipient) internal returns (PoolKey memory key) { @@ -522,7 +522,7 @@ contract UniversalRouterCrossVersionTest is BasePancakeSwapV4, OldVersionHelper, planner.add(Actions.SWEEP, abi.encode(key.currency1, recipient)); // prep universal router actions - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_CL_POSITION_CALL))); + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_CL_POSITION_CALL))); bytes[] memory inputs = new bytes[](1); inputs[0] = abi.encodePacked(IPositionManager.modifyLiquidities.selector, abi.encode(planner.encode(), block.timestamp)); diff --git a/test/UniversalRouter.t.sol b/test/UniversalRouter.t.sol index 3567b13..e5db4fd 100644 --- a/test/UniversalRouter.t.sol +++ b/test/UniversalRouter.t.sol @@ -4,8 +4,8 @@ pragma solidity ^0.8.15; import "forge-std/Test.sol"; import {ERC20} from "solmate/src/tokens/ERC20.sol"; import {IERC165} from "@openzeppelin/contracts/interfaces/IERC165.sol"; -import {ActionConstants} from "pancake-v4-periphery/src/libraries/ActionConstants.sol"; -import {Permit2SignatureHelpers} from "pancake-v4-periphery/test/shared/Permit2SignatureHelpers.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; +import {Permit2SignatureHelpers} from "infinity-periphery/test/shared/Permit2SignatureHelpers.sol"; import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol"; import {DeployPermit2} from "permit2/test/utils/DeployPermit2.sol"; import {StructBuilder} from "permit2/test/utils/StructBuilder.sol"; @@ -56,12 +56,12 @@ contract UniversalRouterTest is Test, Permit2SignatureHelpers, DeployPermit2 { v3InitCodeHash: bytes32(0), stableFactory: address(0), stableInfo: address(0), - v4Vault: address(0), - v4ClPoolManager: address(0), - v4BinPoolManager: address(0), + infiVault: address(0), + infiClPoolManager: address(0), + infiBinPoolManager: address(0), v3NFTPositionManager: address(0), - v4ClPositionManager: address(0), - v4BinPositionManager: address(0) + infiClPositionManager: address(0), + infiBinPositionManager: address(0) }); router = new UniversalRouter(params); assertEq(router.owner(), address(this)); diff --git a/test/V3ToV4Migration.t.sol b/test/V3ToInfinityMigration.t.sol similarity index 81% rename from test/V3ToV4Migration.t.sol rename to test/V3ToInfinityMigration.t.sol index 6c103d4..d4810f1 100644 --- a/test/V3ToV4Migration.t.sol +++ b/test/V3ToInfinityMigration.t.sol @@ -3,51 +3,51 @@ pragma solidity ^0.8.15; import {Test, console} from "forge-std/Test.sol"; import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol"; -import {IWETH9} from "pancake-v4-periphery/src/interfaces/external/IWETH9.sol"; +import {IWETH9} from "infinity-periphery/src/interfaces/external/IWETH9.sol"; import {WETH} from "solmate/src/tokens/WETH.sol"; import {MockERC20} from "solmate/src/test/utils/mocks/MockERC20.sol"; -import {PoolKey} from "pancake-v4-core/src/types/PoolKey.sol"; -import {Currency} from "pancake-v4-core/src/types/Currency.sol"; -import {IVault} from "pancake-v4-core/src/interfaces/IVault.sol"; -import {Vault} from "pancake-v4-core/src/Vault.sol"; -import {CLPoolManager} from "pancake-v4-core/src/pool-cl/CLPoolManager.sol"; -import {ICLPoolManager} from "pancake-v4-core/src/pool-cl/interfaces/ICLPoolManager.sol"; -import {BinPoolManager} from "pancake-v4-core/src/pool-bin/BinPoolManager.sol"; -import {IBinPoolManager} from "pancake-v4-core/src/pool-bin/interfaces/IBinPoolManager.sol"; -import {FixedPoint96} from "pancake-v4-core/src/pool-cl/libraries/FixedPoint96.sol"; -import {IHooks} from "pancake-v4-core/src/interfaces/IHooks.sol"; -import {CLPoolParametersHelper} from "pancake-v4-core/src/pool-cl/libraries/CLPoolParametersHelper.sol"; -import {BinPoolParametersHelper} from "pancake-v4-core/src/pool-bin/libraries/BinPoolParametersHelper.sol"; -import {ActionConstants} from "pancake-v4-periphery/src/libraries/ActionConstants.sol"; -import {Plan, Planner} from "pancake-v4-periphery/src/libraries/Planner.sol"; -import {CLPositionManager} from "pancake-v4-periphery/src/pool-cl/CLPositionManager.sol"; -import {CLPositionDescriptorOffChain} from "pancake-v4-periphery/src/pool-cl/CLPositionDescriptorOffChain.sol"; -import {BinPositionManager} from "pancake-v4-periphery/src/pool-bin/BinPositionManager.sol"; -import {Actions} from "pancake-v4-periphery/src/libraries/Actions.sol"; +import {PoolKey} from "infinity-core/src/types/PoolKey.sol"; +import {Currency} from "infinity-core/src/types/Currency.sol"; +import {IVault} from "infinity-core/src/interfaces/IVault.sol"; +import {Vault} from "infinity-core/src/Vault.sol"; +import {CLPoolManager} from "infinity-core/src/pool-cl/CLPoolManager.sol"; +import {ICLPoolManager} from "infinity-core/src/pool-cl/interfaces/ICLPoolManager.sol"; +import {BinPoolManager} from "infinity-core/src/pool-bin/BinPoolManager.sol"; +import {IBinPoolManager} from "infinity-core/src/pool-bin/interfaces/IBinPoolManager.sol"; +import {FixedPoint96} from "infinity-core/src/pool-cl/libraries/FixedPoint96.sol"; +import {IHooks} from "infinity-core/src/interfaces/IHooks.sol"; +import {CLPoolParametersHelper} from "infinity-core/src/pool-cl/libraries/CLPoolParametersHelper.sol"; +import {BinPoolParametersHelper} from "infinity-core/src/pool-bin/libraries/BinPoolParametersHelper.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; +import {Plan, Planner} from "infinity-periphery/src/libraries/Planner.sol"; +import {CLPositionManager} from "infinity-periphery/src/pool-cl/CLPositionManager.sol"; +import {CLPositionDescriptorOffChain} from "infinity-periphery/src/pool-cl/CLPositionDescriptorOffChain.sol"; +import {BinPositionManager} from "infinity-periphery/src/pool-bin/BinPositionManager.sol"; +import {Actions} from "infinity-periphery/src/libraries/Actions.sol"; import {IV3NonfungiblePositionManager} from - "pancake-v4-periphery/src/interfaces/external/IV3NonfungiblePositionManager.sol"; -import {IERC721Permit} from "pancake-v4-periphery/src/pool-cl/interfaces/IERC721Permit.sol"; -import {IPositionManager} from "pancake-v4-periphery/src/interfaces/IPositionManager.sol"; -import {IBinPositionManager} from "pancake-v4-periphery/src/pool-bin/interfaces/IBinPositionManager.sol"; -import {OldVersionHelper} from "pancake-v4-periphery/test/helpers/OldVersionHelper.sol"; -import {BinLiquidityHelper} from "pancake-v4-periphery/test/pool-bin/helper/BinLiquidityHelper.sol"; + "infinity-periphery/src/interfaces/external/IV3NonfungiblePositionManager.sol"; +import {IERC721Permit} from "infinity-periphery/src/interfaces/IERC721Permit.sol"; +import {IPositionManager} from "infinity-periphery/src/interfaces/IPositionManager.sol"; +import {IBinPositionManager} from "infinity-periphery/src/pool-bin/interfaces/IBinPositionManager.sol"; +import {OldVersionHelper} from "infinity-periphery/test/helpers/OldVersionHelper.sol"; +import {BinLiquidityHelper} from "infinity-periphery/test/pool-bin/helper/BinLiquidityHelper.sol"; import {IPancakeV3PoolDeployer} from "../src/modules/pancakeswap/v3/interfaces/IPancakeV3PoolDeployer.sol"; import {IPancakeV3Factory} from "../src/modules/pancakeswap/v3/interfaces/IPancakeV3Factory.sol"; -import {V3ToV4Migrator} from "../src/modules/V3ToV4Migrator.sol"; +import {V3ToInfinityMigrator} from "../src/modules/V3ToInfinityMigrator.sol"; import {IUniversalRouter} from "../src/interfaces/IUniversalRouter.sol"; import {Commands} from "../src/libraries/Commands.sol"; import {RouterParameters} from "../src/base/RouterImmutables.sol"; import {Dispatcher} from "../src/base/Dispatcher.sol"; import {UniversalRouter} from "../src/UniversalRouter.sol"; -import {BasePancakeSwapV4} from "./v4/BasePancakeSwapV4.sol"; +import {BasePancakeSwapInfinity} from "./infinity/BasePancakeSwapInfinity.sol"; interface IPancakeV3LikePairFactory { function createPool(address tokenA, address tokenB, uint24 fee) external returns (address pool); } -contract V3ToV4MigrationTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidityHelper { +contract V3ToInfinityMigrationTest is BasePancakeSwapInfinity, OldVersionHelper, BinLiquidityHelper { using BinPoolParametersHelper for bytes32; using CLPoolParametersHelper for bytes32; using Planner for Plan; @@ -62,7 +62,7 @@ contract V3ToV4MigrationTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidit uint256 alicePK; uint256 v3TokenId; - // v4 related + // infinity related IVault vault; IBinPoolManager binPoolManager; BinPositionManager binPositionManager; @@ -112,7 +112,7 @@ contract V3ToV4MigrationTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidit vm.stopPrank(); /////////////////////////////////// - //////////// v4 setup ///////////// + ////////// infinity setup ///////// /////////////////////////////////// vault = IVault(new Vault()); binPoolManager = new BinPoolManager(vault); @@ -125,7 +125,7 @@ contract V3ToV4MigrationTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidit _approvePermit2ForCurrency(address(this), currency1, address(binPositionManager), permit2); CLPositionDescriptorOffChain pd = - new CLPositionDescriptorOffChain("https://pancakeswap.finance/v4/pool-cl/positions/"); + new CLPositionDescriptorOffChain("https://pancakeswap.finance/infinity/pool-cl/positions/"); clPositionManager = new CLPositionManager(vault, clPoolManager, permit2, 100_000, pd, IWETH9(address(weth))); _approvePermit2ForCurrency(address(this), currency0, address(clPositionManager), permit2); _approvePermit2ForCurrency(address(this), currency1, address(clPositionManager), permit2); @@ -163,12 +163,12 @@ contract V3ToV4MigrationTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidit v3InitCodeHash: bytes32(0), stableFactory: address(0), stableInfo: address(0), - v4Vault: address(vault), - v4ClPoolManager: address(clPoolManager), - v4BinPoolManager: address(binPoolManager), + infiVault: address(vault), + infiClPoolManager: address(clPoolManager), + infiBinPoolManager: address(binPoolManager), v3NFTPositionManager: address(v3Nfpm), - v4ClPositionManager: address(clPositionManager), - v4BinPositionManager: address(binPositionManager) + infiClPositionManager: address(clPositionManager), + infiBinPositionManager: address(binPositionManager) }); router = new UniversalRouter(params); _approvePermit2ForCurrency(alice, currency0, address(router), permit2); @@ -188,7 +188,7 @@ contract V3ToV4MigrationTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidit bytes[] memory inputs = new bytes[](1); inputs[0] = abi.encodePacked(IV3NonfungiblePositionManager.collect.selector, abi.encode(params)); - vm.expectRevert(abi.encodeWithSelector(V3ToV4Migrator.NotAuthorizedForToken.selector, params.tokenId)); + vm.expectRevert(abi.encodeWithSelector(V3ToInfinityMigrator.NotAuthorizedForToken.selector, params.tokenId)); router.execute(commands, inputs); } @@ -212,7 +212,9 @@ contract V3ToV4MigrationTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidit inputs[0] = abi.encodePacked(IV3NonfungiblePositionManager.mint.selector, abi.encode(params)); vm.expectRevert( - abi.encodeWithSelector(V3ToV4Migrator.InvalidAction.selector, IV3NonfungiblePositionManager.mint.selector) + abi.encodeWithSelector( + V3ToInfinityMigrator.InvalidAction.selector, IV3NonfungiblePositionManager.mint.selector + ) ); router.execute(commands, inputs); } @@ -283,22 +285,22 @@ contract V3ToV4MigrationTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidit assertEq(token1.balanceOf(address(router)), 9999999999999999999); } - function test_v4CLPositionmanger_InvalidAction() public { + function test_infiCLPositionmanger_InvalidAction() public { Plan memory planner = Planner.init(); // prep universal router actions - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_CL_POSITION_CALL))); + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_CL_POSITION_CALL))); bytes[] memory inputs = new bytes[](1); bytes4 invalidSelector = IPositionManager.modifyLiquiditiesWithoutLock.selector; inputs[0] = abi.encodePacked(invalidSelector, abi.encode(planner.encode(), block.timestamp)); - vm.expectRevert(abi.encodeWithSelector(V3ToV4Migrator.InvalidAction.selector, invalidSelector)); + vm.expectRevert(abi.encodeWithSelector(V3ToInfinityMigrator.InvalidAction.selector, invalidSelector)); router.execute(commands, inputs); } - function test_v4CLPositionmanger_BlacklistedAction() public { + function test_infiCLPositionmanger_BlacklistedAction() public { Plan memory planner = Planner.init(); - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_CL_POSITION_CALL))); + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_CL_POSITION_CALL))); bytes[] memory inputs = new bytes[](1); uint256[] memory invalidActions = new uint256[](3); @@ -313,27 +315,27 @@ contract V3ToV4MigrationTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidit ); // verify revert for invalid actions - vm.expectRevert(V3ToV4Migrator.OnlyMintAllowed.selector); + vm.expectRevert(V3ToInfinityMigrator.OnlyMintAllowed.selector); router.execute(commands, inputs); } } - function test_v4BinPositionmanger_InvalidAction() public { + function test_infiBinPositionmanger_InvalidAction() public { Plan memory planner = Planner.init(); // prep universal router actions - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_BIN_POSITION_CALL))); + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_BIN_POSITION_CALL))); bytes[] memory inputs = new bytes[](1); bytes4 invalidSelector = IPositionManager.modifyLiquiditiesWithoutLock.selector; inputs[0] = abi.encodePacked(invalidSelector, abi.encode(planner.encode(), block.timestamp)); - vm.expectRevert(abi.encodeWithSelector(V3ToV4Migrator.InvalidAction.selector, invalidSelector)); + vm.expectRevert(abi.encodeWithSelector(V3ToInfinityMigrator.InvalidAction.selector, invalidSelector)); router.execute(commands, inputs); } - function test_v4BinPositionmanger_BlacklistedAction() public { + function test_infiBinPositionmanger_BlacklistedAction() public { Plan memory planner = Planner.init(); - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_BIN_POSITION_CALL))); + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_BIN_POSITION_CALL))); bytes[] memory inputs = new bytes[](1); uint256[] memory invalidActions = new uint256[](1); @@ -346,14 +348,14 @@ contract V3ToV4MigrationTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidit ); // verify revert for invalid actions - vm.expectRevert(V3ToV4Migrator.OnlyAddLiqudityAllowed.selector); + vm.expectRevert(V3ToInfinityMigrator.OnlyAddLiqudityAllowed.selector); router.execute(commands, inputs); } } /// @dev Assume token0/token1 is aready in universal router from earlier steps on v3 - /// then add liquidity to v4 cl and sweep remaining token - function test_v4CLPositionmanager_Mint() public { + /// then add liquidity to infinity cl and sweep remaining token + function test_infiCLPositionmanager_Mint() public { // assume token0/token1 is in universal router token0.mint(address(router), 10 ether); token1.mint(address(router), 10 ether); @@ -368,7 +370,7 @@ contract V3ToV4MigrationTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidit // prep universal router actions bytes memory commands = abi.encodePacked( - bytes1(uint8(Commands.SWEEP)), bytes1(uint8(Commands.SWEEP)), bytes1(uint8(Commands.V4_CL_POSITION_CALL)) + bytes1(uint8(Commands.SWEEP)), bytes1(uint8(Commands.SWEEP)), bytes1(uint8(Commands.INFI_CL_POSITION_CALL)) ); bytes[] memory inputs = new bytes[](3); inputs[0] = abi.encode(token0, address(clPositionManager), 0); // send token to clPositionmanager @@ -378,7 +380,7 @@ contract V3ToV4MigrationTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidit vm.prank(alice); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4CLPositionmanager_Mint"); + vm.snapshotGasLastCall("test_infiCLPositionmanager_Mint"); // verify balance sent back to alice assertEq(token0.balanceOf(address(alice)), 9994018262239490337); @@ -387,8 +389,8 @@ contract V3ToV4MigrationTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidit } /// @dev Assume token0/token1 is aready in universal router from earlier steps on v3 - /// then add liquidity to v4 cl and sweep remaining token - function test_v4BinPositionmanager_BinAddLiquidity() public { + /// then add liquidity to infinity cl and sweep remaining token + function test_infiBinPositionmanager_BinAddLiquidity() public { // assume token0/token1 is in universal router token0.mint(address(router), 10 ether); token1.mint(address(router), 10 ether); @@ -407,7 +409,7 @@ contract V3ToV4MigrationTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidit // prep universal router actions bytes memory commands = abi.encodePacked( - bytes1(uint8(Commands.SWEEP)), bytes1(uint8(Commands.SWEEP)), bytes1(uint8(Commands.V4_BIN_POSITION_CALL)) + bytes1(uint8(Commands.SWEEP)), bytes1(uint8(Commands.SWEEP)), bytes1(uint8(Commands.INFI_BIN_POSITION_CALL)) ); bytes[] memory inputs = new bytes[](3); inputs[0] = abi.encode(token0, address(binPositionManager), 0); // send token to binPositionManager @@ -417,7 +419,7 @@ contract V3ToV4MigrationTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidit vm.prank(alice); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4BinPositionmanager_BinAddLiquidity"); + vm.snapshotGasLastCall("test_infiBinPositionmanager_BinAddLiquidity"); // verify balance sent back to alice assertEq(token0.balanceOf(address(alice)), 5 ether); diff --git a/test/V3ToV4MigrationNative.t.sol b/test/V3ToInfinityMigrationNative.t.sol similarity index 71% rename from test/V3ToV4MigrationNative.t.sol rename to test/V3ToInfinityMigrationNative.t.sol index 3d468a8..81f8292 100644 --- a/test/V3ToV4MigrationNative.t.sol +++ b/test/V3ToInfinityMigrationNative.t.sol @@ -3,35 +3,35 @@ pragma solidity ^0.8.15; import {Test, console} from "forge-std/Test.sol"; import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol"; -import {IWETH9} from "pancake-v4-periphery/src/interfaces/external/IWETH9.sol"; +import {IWETH9} from "infinity-periphery/src/interfaces/external/IWETH9.sol"; import {WETH} from "solmate/src/tokens/WETH.sol"; import {MockERC20} from "solmate/src/test/utils/mocks/MockERC20.sol"; -import {PoolKey} from "pancake-v4-core/src/types/PoolKey.sol"; -import {Currency, CurrencyLibrary} from "pancake-v4-core/src/types/Currency.sol"; -import {IVault} from "pancake-v4-core/src/interfaces/IVault.sol"; -import {Vault} from "pancake-v4-core/src/Vault.sol"; -import {CLPoolManager} from "pancake-v4-core/src/pool-cl/CLPoolManager.sol"; -import {ICLPoolManager} from "pancake-v4-core/src/pool-cl/interfaces/ICLPoolManager.sol"; -import {BinPoolManager} from "pancake-v4-core/src/pool-bin/BinPoolManager.sol"; -import {IBinPoolManager} from "pancake-v4-core/src/pool-bin/interfaces/IBinPoolManager.sol"; -import {FixedPoint96} from "pancake-v4-core/src/pool-cl/libraries/FixedPoint96.sol"; -import {IHooks} from "pancake-v4-core/src/interfaces/IHooks.sol"; -import {CLPoolParametersHelper} from "pancake-v4-core/src/pool-cl/libraries/CLPoolParametersHelper.sol"; -import {BinPoolParametersHelper} from "pancake-v4-core/src/pool-bin/libraries/BinPoolParametersHelper.sol"; -import {ActionConstants} from "pancake-v4-periphery/src/libraries/ActionConstants.sol"; -import {Plan, Planner} from "pancake-v4-periphery/src/libraries/Planner.sol"; -import {CLPositionManager} from "pancake-v4-periphery/src/pool-cl/CLPositionManager.sol"; -import {CLPositionDescriptorOffChain} from "pancake-v4-periphery/src/pool-cl/CLPositionDescriptorOffChain.sol"; -import {BinPositionManager} from "pancake-v4-periphery/src/pool-bin/BinPositionManager.sol"; -import {Actions} from "pancake-v4-periphery/src/libraries/Actions.sol"; +import {PoolKey} from "infinity-core/src/types/PoolKey.sol"; +import {Currency, CurrencyLibrary} from "infinity-core/src/types/Currency.sol"; +import {IVault} from "infinity-core/src/interfaces/IVault.sol"; +import {Vault} from "infinity-core/src/Vault.sol"; +import {CLPoolManager} from "infinity-core/src/pool-cl/CLPoolManager.sol"; +import {ICLPoolManager} from "infinity-core/src/pool-cl/interfaces/ICLPoolManager.sol"; +import {BinPoolManager} from "infinity-core/src/pool-bin/BinPoolManager.sol"; +import {IBinPoolManager} from "infinity-core/src/pool-bin/interfaces/IBinPoolManager.sol"; +import {FixedPoint96} from "infinity-core/src/pool-cl/libraries/FixedPoint96.sol"; +import {IHooks} from "infinity-core/src/interfaces/IHooks.sol"; +import {CLPoolParametersHelper} from "infinity-core/src/pool-cl/libraries/CLPoolParametersHelper.sol"; +import {BinPoolParametersHelper} from "infinity-core/src/pool-bin/libraries/BinPoolParametersHelper.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; +import {Plan, Planner} from "infinity-periphery/src/libraries/Planner.sol"; +import {CLPositionManager} from "infinity-periphery/src/pool-cl/CLPositionManager.sol"; +import {CLPositionDescriptorOffChain} from "infinity-periphery/src/pool-cl/CLPositionDescriptorOffChain.sol"; +import {BinPositionManager} from "infinity-periphery/src/pool-bin/BinPositionManager.sol"; +import {Actions} from "infinity-periphery/src/libraries/Actions.sol"; import {IV3NonfungiblePositionManager} from - "pancake-v4-periphery/src/interfaces/external/IV3NonfungiblePositionManager.sol"; -import {IERC721Permit} from "pancake-v4-periphery/src/pool-cl/interfaces/IERC721Permit.sol"; -import {IPositionManager} from "pancake-v4-periphery/src/interfaces/IPositionManager.sol"; -import {IBinPositionManager} from "pancake-v4-periphery/src/pool-bin/interfaces/IBinPositionManager.sol"; -import {OldVersionHelper} from "pancake-v4-periphery/test/helpers/OldVersionHelper.sol"; -import {BinLiquidityHelper} from "pancake-v4-periphery/test/pool-bin/helper/BinLiquidityHelper.sol"; + "infinity-periphery/src/interfaces/external/IV3NonfungiblePositionManager.sol"; +import {IERC721Permit} from "infinity-periphery/src/interfaces/IERC721Permit.sol"; +import {IPositionManager} from "infinity-periphery/src/interfaces/IPositionManager.sol"; +import {IBinPositionManager} from "infinity-periphery/src/pool-bin/interfaces/IBinPositionManager.sol"; +import {OldVersionHelper} from "infinity-periphery/test/helpers/OldVersionHelper.sol"; +import {BinLiquidityHelper} from "infinity-periphery/test/pool-bin/helper/BinLiquidityHelper.sol"; import {Constants} from "../src/libraries/Constants.sol"; import {IUniversalRouter} from "../src/interfaces/IUniversalRouter.sol"; @@ -39,14 +39,14 @@ import {Commands} from "../src/libraries/Commands.sol"; import {RouterParameters} from "../src/base/RouterImmutables.sol"; import {Dispatcher} from "../src/base/Dispatcher.sol"; import {UniversalRouter} from "../src/UniversalRouter.sol"; -import {BasePancakeSwapV4} from "./v4/BasePancakeSwapV4.sol"; +import {BasePancakeSwapInfinity} from "./infinity/BasePancakeSwapInfinity.sol"; interface IPancakeV3LikePairFactory { function createPool(address tokenA, address tokenB, uint24 fee) external returns (address pool); } /// @dev Test simplified, assume weth-token pair is already broken and token reside in universal router -contract V3ToV4MigrationNativeTest is BasePancakeSwapV4, OldVersionHelper, BinLiquidityHelper { +contract V3ToInfinityMigrationNativeTest is BasePancakeSwapInfinity, OldVersionHelper, BinLiquidityHelper { using BinPoolParametersHelper for bytes32; using CLPoolParametersHelper for bytes32; using Planner for Plan; @@ -57,7 +57,7 @@ contract V3ToV4MigrationNativeTest is BasePancakeSwapV4, OldVersionHelper, BinLi address alice; uint256 alicePK; - // v4 related + // infinity related IVault vault; IBinPoolManager binPoolManager; BinPositionManager binPositionManager; @@ -81,7 +81,7 @@ contract V3ToV4MigrationNativeTest is BasePancakeSwapV4, OldVersionHelper, BinLi permit2 = IAllowanceTransfer(deployPermit2()); /////////////////////////////////// - //////////// v4 setup ///////////// + ///////// infinity setup ////////// /////////////////////////////////// vault = IVault(new Vault()); binPoolManager = new BinPoolManager(vault); @@ -93,7 +93,7 @@ contract V3ToV4MigrationNativeTest is BasePancakeSwapV4, OldVersionHelper, BinLi _approvePermit2ForCurrency(address(this), currency1, address(binPositionManager), permit2); CLPositionDescriptorOffChain pd = - new CLPositionDescriptorOffChain("https://pancakeswap.finance/v4/pool-cl/positions/"); + new CLPositionDescriptorOffChain("https://pancakeswap.finance/infinity/pool-cl/positions/"); clPositionManager = new CLPositionManager(vault, clPoolManager, permit2, 100_000, pd, IWETH9(address(weth))); _approvePermit2ForCurrency(address(this), currency1, address(clPositionManager), permit2); @@ -130,20 +130,20 @@ contract V3ToV4MigrationNativeTest is BasePancakeSwapV4, OldVersionHelper, BinLi v3InitCodeHash: bytes32(0), stableFactory: address(0), stableInfo: address(0), - v4Vault: address(vault), - v4ClPoolManager: address(clPoolManager), - v4BinPoolManager: address(binPoolManager), + infiVault: address(vault), + infiClPoolManager: address(clPoolManager), + infiBinPoolManager: address(binPoolManager), v3NFTPositionManager: address(0), - v4ClPositionManager: address(clPositionManager), - v4BinPositionManager: address(binPositionManager) + infiClPositionManager: address(clPositionManager), + infiBinPositionManager: address(binPositionManager) }); router = new UniversalRouter(params); _approvePermit2ForCurrency(alice, currency1, address(router), permit2); } /// @dev Assume weth/token1 is aready in universal router from v3 removal liquidity - /// then add liquidity to v4 cl and sweep remaining token - function test_v4CLPositionmanager_Mint_Native() public { + /// then add liquidity to infinity cl and sweep remaining token + function test_infiCLPositionmanager_Mint_Native() public { // assume weth/token1 is in universal router vm.deal(address(this), 10 ether); weth.deposit{value: 10 ether}(); @@ -162,7 +162,7 @@ contract V3ToV4MigrationNativeTest is BasePancakeSwapV4, OldVersionHelper, BinLi bytes memory commands = abi.encodePacked( bytes1(uint8(Commands.UNWRAP_WETH)), bytes1(uint8(Commands.SWEEP)), - bytes1(uint8(Commands.V4_CL_POSITION_CALL)) + bytes1(uint8(Commands.INFI_CL_POSITION_CALL)) ); bytes[] memory inputs = new bytes[](3); inputs[0] = abi.encode(address(router), 10 ether); // get native eth to router @@ -172,7 +172,7 @@ contract V3ToV4MigrationNativeTest is BasePancakeSwapV4, OldVersionHelper, BinLi vm.prank(alice); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4CLPositionmanager_Mint_Native"); + vm.snapshotGasLastCall("test_infiCLPositionmanager_Mint_Native"); // verify remaining balance sent back to alice assertEq(alice.balance, 9994018262239490337); @@ -181,8 +181,8 @@ contract V3ToV4MigrationNativeTest is BasePancakeSwapV4, OldVersionHelper, BinLi } /// @dev Assume weth/token1 is aready in universal router from v3 removal liquidity - /// then add liquidity to v4 cl and sweep remaining token - function test_v4BinPositionmanager_BinAddLiquidity_Native() public { + /// then add liquidity to infinity cl and sweep remaining token + function test_infiBinPositionmanager_BinAddLiquidity_Native() public { // assume weth/token1 is in universal router vm.deal(address(this), 10 ether); weth.deposit{value: 10 ether}(); @@ -205,7 +205,7 @@ contract V3ToV4MigrationNativeTest is BasePancakeSwapV4, OldVersionHelper, BinLi bytes memory commands = abi.encodePacked( bytes1(uint8(Commands.UNWRAP_WETH)), bytes1(uint8(Commands.SWEEP)), - bytes1(uint8(Commands.V4_BIN_POSITION_CALL)) + bytes1(uint8(Commands.INFI_BIN_POSITION_CALL)) ); bytes[] memory inputs = new bytes[](3); inputs[0] = abi.encode(address(router), 10 ether); // get native eth to universal router @@ -215,7 +215,7 @@ contract V3ToV4MigrationNativeTest is BasePancakeSwapV4, OldVersionHelper, BinLi vm.prank(alice); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4BinPositionmanager_BinAddLiquidity_Native"); + vm.snapshotGasLastCall("test_infiBinPositionmanager_BinAddLiquidity_Native"); // verify remaining balance sent back to alice assertEq(alice.balance, 5 ether); diff --git a/test/v4/BasePancakeSwapV4.sol b/test/infinity/BasePancakeSwapInfinity.sol similarity index 80% rename from test/v4/BasePancakeSwapV4.sol rename to test/infinity/BasePancakeSwapInfinity.sol index 1c0467c..1652674 100644 --- a/test/v4/BasePancakeSwapV4.sol +++ b/test/infinity/BasePancakeSwapInfinity.sol @@ -7,10 +7,10 @@ import {ERC20} from "solmate/src/tokens/ERC20.sol"; import {DeployPermit2} from "permit2/test/utils/DeployPermit2.sol"; import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol"; -import {TokenFixture} from "pancake-v4-periphery/test/helpers/TokenFixture.sol"; -import {Currency} from "pancake-v4-core/src/types/Currency.sol"; +import {TokenFixture} from "infinity-periphery/test/helpers/TokenFixture.sol"; +import {Currency} from "infinity-core/src/types/Currency.sol"; -abstract contract BasePancakeSwapV4 is TokenFixture, Test, DeployPermit2 { +abstract contract BasePancakeSwapInfinity is TokenFixture, Test, DeployPermit2 { function _approvePermit2ForCurrency(address from, Currency currency, address to, IAllowanceTransfer permit2) internal { diff --git a/test/v4/BinNativePancakeSwapV4.t.sol b/test/infinity/BinNativePancakeSwapInfinity.t.sol similarity index 71% rename from test/v4/BinNativePancakeSwapV4.t.sol rename to test/infinity/BinNativePancakeSwapInfinity.t.sol index b798868..21dc897 100644 --- a/test/v4/BinNativePancakeSwapV4.t.sol +++ b/test/infinity/BinNativePancakeSwapInfinity.t.sol @@ -4,36 +4,36 @@ pragma solidity ^0.8.13; import {Test, console} from "forge-std/Test.sol"; import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol"; import {WETH} from "solmate/src/tokens/WETH.sol"; -import {IWETH9} from "pancake-v4-periphery/src/interfaces/external/IWETH9.sol"; +import {IWETH9} from "infinity-periphery/src/interfaces/external/IWETH9.sol"; import {MockERC20} from "solmate/src/test/utils/mocks/MockERC20.sol"; -import {PoolKey} from "pancake-v4-core/src/types/PoolKey.sol"; -import {Currency, CurrencyLibrary} from "pancake-v4-core/src/types/Currency.sol"; -import {IVault} from "pancake-v4-core/src/interfaces/IVault.sol"; -import {Vault} from "pancake-v4-core/src/Vault.sol"; -import {BinPoolManager} from "pancake-v4-core/src/pool-bin/BinPoolManager.sol"; -import {IBinPoolManager} from "pancake-v4-core/src/pool-bin/interfaces/IBinPoolManager.sol"; -import {IHooks} from "pancake-v4-core/src/interfaces/IHooks.sol"; -import {BinPoolParametersHelper} from "pancake-v4-core/src/pool-bin/libraries/BinPoolParametersHelper.sol"; -import {ActionConstants} from "pancake-v4-periphery/src/libraries/ActionConstants.sol"; -import {Plan, Planner} from "pancake-v4-periphery/src/libraries/Planner.sol"; -import {BinPositionManager} from "pancake-v4-periphery/src/pool-bin/BinPositionManager.sol"; -import {Actions} from "pancake-v4-periphery/src/libraries/Actions.sol"; -import {IBinRouterBase} from "pancake-v4-periphery/src/pool-bin/interfaces/IBinRouterBase.sol"; -import {BinLiquidityHelper} from "pancake-v4-periphery/test/pool-bin/helper/BinLiquidityHelper.sol"; -import {IBinPositionManager} from "pancake-v4-periphery/src/pool-bin/interfaces/IBinPositionManager.sol"; -import {PathKey} from "pancake-v4-periphery/src/libraries/PathKey.sol"; -import {BinPool} from "pancake-v4-core/src/pool-bin/libraries/BinPool.sol"; - -import {BasePancakeSwapV4} from "./BasePancakeSwapV4.sol"; +import {PoolKey} from "infinity-core/src/types/PoolKey.sol"; +import {Currency, CurrencyLibrary} from "infinity-core/src/types/Currency.sol"; +import {IVault} from "infinity-core/src/interfaces/IVault.sol"; +import {Vault} from "infinity-core/src/Vault.sol"; +import {BinPoolManager} from "infinity-core/src/pool-bin/BinPoolManager.sol"; +import {IBinPoolManager} from "infinity-core/src/pool-bin/interfaces/IBinPoolManager.sol"; +import {IHooks} from "infinity-core/src/interfaces/IHooks.sol"; +import {BinPoolParametersHelper} from "infinity-core/src/pool-bin/libraries/BinPoolParametersHelper.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; +import {Plan, Planner} from "infinity-periphery/src/libraries/Planner.sol"; +import {BinPositionManager} from "infinity-periphery/src/pool-bin/BinPositionManager.sol"; +import {Actions} from "infinity-periphery/src/libraries/Actions.sol"; +import {IBinRouterBase} from "infinity-periphery/src/pool-bin/interfaces/IBinRouterBase.sol"; +import {BinLiquidityHelper} from "infinity-periphery/test/pool-bin/helper/BinLiquidityHelper.sol"; +import {IBinPositionManager} from "infinity-periphery/src/pool-bin/interfaces/IBinPositionManager.sol"; +import {PathKey} from "infinity-periphery/src/libraries/PathKey.sol"; +import {BinPool} from "infinity-core/src/pool-bin/libraries/BinPool.sol"; + +import {BasePancakeSwapInfinity} from "./BasePancakeSwapInfinity.sol"; import {UniversalRouter} from "../../src/UniversalRouter.sol"; import {IUniversalRouter} from "../../src/interfaces/IUniversalRouter.sol"; import {Constants} from "../../src/libraries/Constants.sol"; import {Commands} from "../../src/libraries/Commands.sol"; import {RouterParameters} from "../../src/base/RouterImmutables.sol"; -/// @dev similar to BinPancakeSwapV4, except focus on native ETH transfers -contract BinNativePancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { +/// @dev similar to BinPancakeSwapInfinity, except focus on native ETH transfers +contract BinNativePancakeSwapInfinityTest is BasePancakeSwapInfinity, BinLiquidityHelper { using BinPoolParametersHelper for bytes32; using Planner for Plan; @@ -76,12 +76,12 @@ contract BinNativePancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { v3InitCodeHash: bytes32(0), stableFactory: address(0), stableInfo: address(0), - v4Vault: address(vault), - v4ClPoolManager: address(0), - v4BinPoolManager: address(poolManager), + infiVault: address(vault), + infiClPoolManager: address(0), + infiBinPoolManager: address(poolManager), v3NFTPositionManager: address(0), - v4ClPositionManager: address(0), - v4BinPositionManager: address(positionManager) + infiClPositionManager: address(0), + infiBinPositionManager: address(positionManager) }); router = new UniversalRouter(params); _approvePermit2ForCurrency(alice, currency1, address(router), permit2); @@ -98,7 +98,7 @@ contract BinNativePancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { _mint(poolKey0); } - function test_v4BinSwap_v4InitializeBinPool() public { + function test_infiBinSwap_infiInitializeBinPool() public { MockERC20 _token = new MockERC20("token", "token", 18); PoolKey memory _poolKey = PoolKey({ currency0: CurrencyLibrary.NATIVE, @@ -114,11 +114,11 @@ contract BinNativePancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { assertEq(activeId, 0); // initialize - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_BIN_INITIALIZE_POOL))); + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_BIN_INITIALIZE_POOL))); bytes[] memory inputs = new bytes[](1); inputs[0] = abi.encode(_poolKey, ACTIVE_ID_1_1); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4BinSwap_v4InitializeBinPool"); + vm.snapshotGasLastCall("test_infiBinSwap_infiInitializeBinPool"); // verify (activeId,,) = poolManager.getSlot0(_poolKey.toId()); @@ -133,74 +133,74 @@ contract BinNativePancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { router.execute(commands, inputs); } - function test_v4BinSwap_ExactInSingle_NativeIn() public { + function test_infiBinSwap_ExactInSingle_NativeIn() public { uint128 amountIn = 0.01 ether; vm.deal(alice, amountIn); vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input IBinRouterBase.BinSwapExactInputSingleParams memory params = IBinRouterBase.BinSwapExactInputSingleParams(poolKey0, true, amountIn, 0, ""); plan = Planner.init().add(Actions.BIN_SWAP_EXACT_IN_SINGLE, abi.encode(params)); bytes memory data = plan.finalizeSwap(poolKey0.currency0, poolKey0.currency1, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; assertEq(alice.balance, 0.01 ether); assertEq(token1.balanceOf(alice), 0 ether); router.execute{value: amountIn}(commands, inputs); - vm.snapshotGasLastCall("test_v4BinSwap_ExactInSingle_NativeIn"); + vm.snapshotGasLastCall("test_infiBinSwap_ExactInSingle_NativeIn"); assertEq(alice.balance, 0 ether); assertEq(token1.balanceOf(alice), 9970000000000000); // 0.01 eth * 0.997 } - function test_v4BinSwap_ExactInSingle_NativeOut() public { + function test_infiBinSwap_ExactInSingle_NativeOut() public { uint128 amountIn = 0.01 ether; MockERC20(Currency.unwrap(currency1)).mint(alice, amountIn); vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input IBinRouterBase.BinSwapExactInputSingleParams memory params = IBinRouterBase.BinSwapExactInputSingleParams(poolKey0, false, amountIn, 0, ""); plan = Planner.init().add(Actions.BIN_SWAP_EXACT_IN_SINGLE, abi.encode(params)); bytes memory data = plan.finalizeSwap(poolKey0.currency1, poolKey0.currency0, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; assertEq(alice.balance, 0 ether); assertEq(token1.balanceOf(alice), 0.01 ether); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4BinSwap_ExactInSingle_NativeOut"); + vm.snapshotGasLastCall("test_infiBinSwap_ExactInSingle_NativeOut"); assertEq(alice.balance, 9970000000000000); assertEq(token1.balanceOf(alice), 0); // 0.01 eth * 0.997 } - function test_v4BinSwap_ExactInSingle_NativeOut_RouterRecipient() public { + function test_infiBinSwap_ExactInSingle_NativeOut_RouterRecipient() public { uint128 amountIn = 0.01 ether; MockERC20(Currency.unwrap(currency1)).mint(alice, amountIn); vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input IBinRouterBase.BinSwapExactInputSingleParams memory params = IBinRouterBase.BinSwapExactInputSingleParams(poolKey0, false, amountIn, 0, ""); plan = Planner.init().add(Actions.BIN_SWAP_EXACT_IN_SINGLE, abi.encode(params)); bytes memory data = plan.finalizeSwap(poolKey0.currency1, poolKey0.currency0, ActionConstants.ADDRESS_THIS); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; assertEq(alice.balance, 0 ether); assertEq(token1.balanceOf(alice), 0.01 ether); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4BinSwap_ExactInSingle_NativeOut_RouterRecipient"); + vm.snapshotGasLastCall("test_infiBinSwap_ExactInSingle_NativeOut_RouterRecipient"); assertEq(address(router).balance, 9970000000000000); assertEq(token1.balanceOf(alice), 0); // 0.01 eth * 0.997 } diff --git a/test/v4/BinPancakeSwapV4.t.sol b/test/infinity/BinPancakeSwapInfinity.t.sol similarity index 80% rename from test/v4/BinPancakeSwapV4.t.sol rename to test/infinity/BinPancakeSwapInfinity.t.sol index 019b9d9..4babec7 100644 --- a/test/v4/BinPancakeSwapV4.t.sol +++ b/test/infinity/BinPancakeSwapInfinity.t.sol @@ -4,35 +4,35 @@ pragma solidity ^0.8.13; import {Test, console} from "forge-std/Test.sol"; import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol"; import {WETH} from "solmate/src/tokens/WETH.sol"; -import {IWETH9} from "pancake-v4-periphery/src/interfaces/external/IWETH9.sol"; +import {IWETH9} from "infinity-periphery/src/interfaces/external/IWETH9.sol"; import {MockERC20} from "solmate/src/test/utils/mocks/MockERC20.sol"; -import {PoolKey} from "pancake-v4-core/src/types/PoolKey.sol"; -import {Currency} from "pancake-v4-core/src/types/Currency.sol"; -import {IVault} from "pancake-v4-core/src/interfaces/IVault.sol"; -import {Vault} from "pancake-v4-core/src/Vault.sol"; -import {BinPoolManager} from "pancake-v4-core/src/pool-bin/BinPoolManager.sol"; -import {IBinPoolManager} from "pancake-v4-core/src/pool-bin/interfaces/IBinPoolManager.sol"; -import {IHooks} from "pancake-v4-core/src/interfaces/IHooks.sol"; -import {BinPoolParametersHelper} from "pancake-v4-core/src/pool-bin/libraries/BinPoolParametersHelper.sol"; -import {ActionConstants} from "pancake-v4-periphery/src/libraries/ActionConstants.sol"; -import {Plan, Planner} from "pancake-v4-periphery/src/libraries/Planner.sol"; -import {BinPositionManager} from "pancake-v4-periphery/src/pool-bin/BinPositionManager.sol"; -import {Actions} from "pancake-v4-periphery/src/libraries/Actions.sol"; -import {IBinRouterBase} from "pancake-v4-periphery/src/pool-bin/interfaces/IBinRouterBase.sol"; -import {BinLiquidityHelper} from "pancake-v4-periphery/test/pool-bin/helper/BinLiquidityHelper.sol"; -import {IBinPositionManager} from "pancake-v4-periphery/src/pool-bin/interfaces/IBinPositionManager.sol"; -import {PathKey} from "pancake-v4-periphery/src/libraries/PathKey.sol"; -import {BinPool} from "pancake-v4-core/src/pool-bin/libraries/BinPool.sol"; - -import {BasePancakeSwapV4} from "./BasePancakeSwapV4.sol"; +import {PoolKey} from "infinity-core/src/types/PoolKey.sol"; +import {Currency} from "infinity-core/src/types/Currency.sol"; +import {IVault} from "infinity-core/src/interfaces/IVault.sol"; +import {Vault} from "infinity-core/src/Vault.sol"; +import {BinPoolManager} from "infinity-core/src/pool-bin/BinPoolManager.sol"; +import {IBinPoolManager} from "infinity-core/src/pool-bin/interfaces/IBinPoolManager.sol"; +import {IHooks} from "infinity-core/src/interfaces/IHooks.sol"; +import {BinPoolParametersHelper} from "infinity-core/src/pool-bin/libraries/BinPoolParametersHelper.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; +import {Plan, Planner} from "infinity-periphery/src/libraries/Planner.sol"; +import {BinPositionManager} from "infinity-periphery/src/pool-bin/BinPositionManager.sol"; +import {Actions} from "infinity-periphery/src/libraries/Actions.sol"; +import {IBinRouterBase} from "infinity-periphery/src/pool-bin/interfaces/IBinRouterBase.sol"; +import {BinLiquidityHelper} from "infinity-periphery/test/pool-bin/helper/BinLiquidityHelper.sol"; +import {IBinPositionManager} from "infinity-periphery/src/pool-bin/interfaces/IBinPositionManager.sol"; +import {PathKey} from "infinity-periphery/src/libraries/PathKey.sol"; +import {BinPool} from "infinity-core/src/pool-bin/libraries/BinPool.sol"; + +import {BasePancakeSwapInfinity} from "./BasePancakeSwapInfinity.sol"; import {UniversalRouter} from "../../src/UniversalRouter.sol"; import {IUniversalRouter} from "../../src/interfaces/IUniversalRouter.sol"; import {Constants} from "../../src/libraries/Constants.sol"; import {Commands} from "../../src/libraries/Commands.sol"; import {RouterParameters} from "../../src/base/RouterImmutables.sol"; -contract BinPancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { +contract BinPancakeSwapInfinityTest is BasePancakeSwapInfinity, BinLiquidityHelper { using BinPoolParametersHelper for bytes32; using Planner for Plan; @@ -84,12 +84,12 @@ contract BinPancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { v3InitCodeHash: bytes32(0), stableFactory: address(0), stableInfo: address(0), - v4Vault: address(vault), - v4ClPoolManager: address(0), - v4BinPoolManager: address(poolManager), + infiVault: address(vault), + infiClPoolManager: address(0), + infiBinPoolManager: address(poolManager), v3NFTPositionManager: address(0), - v4ClPositionManager: address(0), - v4BinPositionManager: address(positionManager) + infiClPositionManager: address(0), + infiBinPositionManager: address(positionManager) }); router = new UniversalRouter(params); _approvePermit2ForCurrency(alice, currency0, address(router), permit2); @@ -116,14 +116,14 @@ contract BinPancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { fee: uint24(3000), parameters: bytes32(0).setBinStep(10) }); - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_BIN_INITIALIZE_POOL))); + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_BIN_INITIALIZE_POOL))); bytes[] memory inputs = new bytes[](1); inputs[0] = abi.encode(poolKey1, ACTIVE_ID_1_1); router.execute(commands, inputs); _mint(poolKey1); } - function test_v4BinSwap_InitializeBinPool() public { + function test_infiBinSwap_InitializeBinPool() public { PoolKey memory _poolKey = PoolKey({ currency0: currency0, currency1: currency2, @@ -138,11 +138,11 @@ contract BinPancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { assertEq(activeId, 0); // initialize - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_BIN_INITIALIZE_POOL))); + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_BIN_INITIALIZE_POOL))); bytes[] memory inputs = new bytes[](1); inputs[0] = abi.encode(_poolKey, ACTIVE_ID_1_1); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4BinSwap_InitializeBinPool"); + vm.snapshotGasLastCall("test_infiBinSwap_InitializeBinPool"); // verify (activeId,,) = poolManager.getSlot0(_poolKey.toId()); @@ -157,31 +157,31 @@ contract BinPancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { router.execute(commands, inputs); } - function test_v4BinSwap_ExactInSingle() public { + function test_infiBinSwap_ExactInSingle() public { uint128 amountIn = 0.01 ether; MockERC20(Currency.unwrap(currency0)).mint(alice, amountIn); vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input IBinRouterBase.BinSwapExactInputSingleParams memory params = IBinRouterBase.BinSwapExactInputSingleParams(poolKey0, true, amountIn, 0, ""); plan = Planner.init().add(Actions.BIN_SWAP_EXACT_IN_SINGLE, abi.encode(params)); bytes memory data = plan.finalizeSwap(poolKey0.currency0, poolKey0.currency1, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; assertEq(token0.balanceOf(alice), 0.01 ether); assertEq(token1.balanceOf(alice), 0 ether); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4BinSwap_ExactInSingle"); + vm.snapshotGasLastCall("test_infiBinSwap_ExactInSingle"); assertEq(token0.balanceOf(alice), 0 ether); assertEq(token1.balanceOf(alice), 9970000000000000); // 0.01 eth * 0.997 } - function test_v4BinSwap_ExactIn_SingleHop() public { + function test_infiBinSwap_ExactIn_SingleHop() public { uint128 amountIn = 0.01 ether; MockERC20(Currency.unwrap(currency0)).mint(alice, amountIn); vm.startPrank(alice); @@ -200,8 +200,8 @@ contract BinPancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { plan = Planner.init().add(Actions.BIN_SWAP_EXACT_IN, abi.encode(params)); bytes memory data = plan.finalizeSwap(currency0, currency1, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; @@ -209,17 +209,17 @@ contract BinPancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { assertEq(token0.balanceOf(alice), 0.01 ether); assertEq(token1.balanceOf(alice), 0 ether); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4BinSwap_ExactIn_SingleHop"); + vm.snapshotGasLastCall("test_infiBinSwap_ExactIn_SingleHop"); assertEq(token0.balanceOf(alice), 0 ether); assertEq(token1.balanceOf(alice), 9970000000000000); // 0.01 eth * 0.997 } - function test_v4BinSwap_ExactIn_MultiHop() public { + function test_infiBinSwap_ExactIn_MultiHop() public { uint128 amountIn = 0.01 ether; MockERC20(Currency.unwrap(currency0)).mint(alice, amountIn); vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input PathKey[] memory path = new PathKey[](2); path[0] = PathKey({ intermediateCurrency: currency1, @@ -242,8 +242,8 @@ contract BinPancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { plan = Planner.init().add(Actions.BIN_SWAP_EXACT_IN, abi.encode(params)); bytes memory data = plan.finalizeSwap(currency0, currency2, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; @@ -251,24 +251,24 @@ contract BinPancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { assertEq(token0.balanceOf(alice), 0.01 ether); assertEq(token2.balanceOf(alice), 0 ether); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4BinSwap_ExactIn_MultiHop"); + vm.snapshotGasLastCall("test_infiBinSwap_ExactIn_MultiHop"); assertEq(token0.balanceOf(alice), 0 ether); assertEq(token2.balanceOf(alice), 9940090000000000); // around 0.01 eth - 0.3% fee twice } - function test_v4BinSwap_ExactOutSingle() public { + function test_infiBinSwap_ExactOutSingle() public { uint128 amountOut = 0.01 ether; MockERC20(Currency.unwrap(currency0)).mint(alice, amountOut * 2); // *2 to handle slippage vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input IBinRouterBase.BinSwapExactOutputSingleParams memory params = IBinRouterBase.BinSwapExactOutputSingleParams(poolKey0, true, amountOut, amountOut * 2, ""); plan = Planner.init().add(Actions.BIN_SWAP_EXACT_OUT_SINGLE, abi.encode(params)); bytes memory data = plan.finalizeSwap(poolKey0.currency0, poolKey0.currency1, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; @@ -276,17 +276,17 @@ contract BinPancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { assertEq(token0.balanceOf(alice), 0.02 ether); assertEq(token1.balanceOf(alice), 0 ether); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4BinSwap_ExactOutSingle"); + vm.snapshotGasLastCall("test_infiBinSwap_ExactOutSingle"); assertEq(token0.balanceOf(alice), 9969909729187562); // around 0.02 eth - 0.01 eth - fee assertEq(token1.balanceOf(alice), 0.01 ether); } - function test_v4BinSwap_ExactOut_SingleHop() public { + function test_infiBinSwap_ExactOut_SingleHop() public { uint128 amountOut = 0.01 ether; MockERC20(Currency.unwrap(currency0)).mint(alice, amountOut * 2); // *2 to handle slippage vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input PathKey[] memory path = new PathKey[](1); path[0] = PathKey({ intermediateCurrency: currency0, @@ -301,8 +301,8 @@ contract BinPancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { plan = Planner.init().add(Actions.BIN_SWAP_EXACT_OUT, abi.encode(params)); bytes memory data = plan.finalizeSwap(currency0, currency1, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; @@ -310,17 +310,17 @@ contract BinPancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { assertEq(token0.balanceOf(alice), 0.02 ether); assertEq(token1.balanceOf(alice), 0 ether); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4BinSwap_ExactOut_SingleHop"); + vm.snapshotGasLastCall("test_infiBinSwap_ExactOut_SingleHop"); assertEq(token0.balanceOf(alice), 9969909729187562); // around 0.02 eth - 0.01 eth - slippage assertEq(token1.balanceOf(alice), 0.01 ether); } - function test_v4BinSwap_ExactOut_MultiHop() public { + function test_infiBinSwap_ExactOut_MultiHop() public { uint128 amountOut = 0.01 ether; MockERC20(Currency.unwrap(currency0)).mint(alice, amountOut * 2); // *2 to handle slippage vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input PathKey[] memory path = new PathKey[](2); path[0] = PathKey({ intermediateCurrency: currency0, @@ -343,8 +343,8 @@ contract BinPancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { plan = Planner.init().add(Actions.BIN_SWAP_EXACT_OUT, abi.encode(params)); bytes memory data = plan.finalizeSwap(currency0, currency2, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; @@ -352,7 +352,7 @@ contract BinPancakeSwapV4Test is BasePancakeSwapV4, BinLiquidityHelper { assertEq(token0.balanceOf(alice), 0.02 ether); assertEq(token2.balanceOf(alice), 0 ether); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4BinSwap_ExactOut_MultiHop"); + vm.snapshotGasLastCall("test_infiBinSwap_ExactOut_MultiHop"); assertEq(token0.balanceOf(alice), 9939728915935368); assertEq(token2.balanceOf(alice), 0.01 ether); } diff --git a/test/v4/CLNativePancakeSwapV4.t.sol b/test/infinity/CLNativePancakeSwapInfinity.t.sol similarity index 72% rename from test/v4/CLNativePancakeSwapV4.t.sol rename to test/infinity/CLNativePancakeSwapInfinity.t.sol index 9f22a5e..9947922 100644 --- a/test/v4/CLNativePancakeSwapV4.t.sol +++ b/test/infinity/CLNativePancakeSwapInfinity.t.sol @@ -3,40 +3,40 @@ pragma solidity ^0.8.13; import {Test, console} from "forge-std/Test.sol"; import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol"; -import {IWETH9} from "pancake-v4-periphery/src/interfaces/external/IWETH9.sol"; +import {IWETH9} from "infinity-periphery/src/interfaces/external/IWETH9.sol"; import {WETH} from "solmate/src/tokens/WETH.sol"; import {MockERC20} from "solmate/src/test/utils/mocks/MockERC20.sol"; -import {PoolKey} from "pancake-v4-core/src/types/PoolKey.sol"; -import {Currency, CurrencyLibrary} from "pancake-v4-core/src/types/Currency.sol"; -import {IVault} from "pancake-v4-core/src/interfaces/IVault.sol"; -import {Vault} from "pancake-v4-core/src/Vault.sol"; -import {CLPoolManager} from "pancake-v4-core/src/pool-cl/CLPoolManager.sol"; -import {ICLPoolManager} from "pancake-v4-core/src/pool-cl/interfaces/ICLPoolManager.sol"; -import {FixedPoint96} from "pancake-v4-core/src/pool-cl/libraries/FixedPoint96.sol"; -import {IHooks} from "pancake-v4-core/src/interfaces/IHooks.sol"; -import {CLPoolParametersHelper} from "pancake-v4-core/src/pool-cl/libraries/CLPoolParametersHelper.sol"; -import {SqrtPriceMath} from "pancake-v4-core/src/pool-cl/libraries/SqrtPriceMath.sol"; -import {TickMath} from "pancake-v4-core/src/pool-cl/libraries/TickMath.sol"; -import {ActionConstants} from "pancake-v4-periphery/src/libraries/ActionConstants.sol"; -import {Plan, Planner} from "pancake-v4-periphery/src/libraries/Planner.sol"; -import {CLPositionDescriptorOffChain} from "pancake-v4-periphery/src/pool-cl/CLPositionDescriptorOffChain.sol"; -import {CLPositionManager} from "pancake-v4-periphery/src/pool-cl/CLPositionManager.sol"; -import {Actions} from "pancake-v4-periphery/src/libraries/Actions.sol"; -import {ICLRouterBase} from "pancake-v4-periphery/src/pool-cl/interfaces/ICLRouterBase.sol"; -import {LiquidityAmounts} from "pancake-v4-periphery/src/pool-cl/libraries/LiquidityAmounts.sol"; -import {PathKey} from "pancake-v4-periphery/src/libraries/PathKey.sol"; -import {CLPool} from "pancake-v4-core/src/pool-cl/libraries/CLPool.sol"; - -import {BasePancakeSwapV4} from "./BasePancakeSwapV4.sol"; +import {PoolKey} from "infinity-core/src/types/PoolKey.sol"; +import {Currency, CurrencyLibrary} from "infinity-core/src/types/Currency.sol"; +import {IVault} from "infinity-core/src/interfaces/IVault.sol"; +import {Vault} from "infinity-core/src/Vault.sol"; +import {CLPoolManager} from "infinity-core/src/pool-cl/CLPoolManager.sol"; +import {ICLPoolManager} from "infinity-core/src/pool-cl/interfaces/ICLPoolManager.sol"; +import {FixedPoint96} from "infinity-core/src/pool-cl/libraries/FixedPoint96.sol"; +import {IHooks} from "infinity-core/src/interfaces/IHooks.sol"; +import {CLPoolParametersHelper} from "infinity-core/src/pool-cl/libraries/CLPoolParametersHelper.sol"; +import {SqrtPriceMath} from "infinity-core/src/pool-cl/libraries/SqrtPriceMath.sol"; +import {TickMath} from "infinity-core/src/pool-cl/libraries/TickMath.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; +import {Plan, Planner} from "infinity-periphery/src/libraries/Planner.sol"; +import {CLPositionDescriptorOffChain} from "infinity-periphery/src/pool-cl/CLPositionDescriptorOffChain.sol"; +import {CLPositionManager} from "infinity-periphery/src/pool-cl/CLPositionManager.sol"; +import {Actions} from "infinity-periphery/src/libraries/Actions.sol"; +import {ICLRouterBase} from "infinity-periphery/src/pool-cl/interfaces/ICLRouterBase.sol"; +import {LiquidityAmounts} from "infinity-periphery/src/pool-cl/libraries/LiquidityAmounts.sol"; +import {PathKey} from "infinity-periphery/src/libraries/PathKey.sol"; +import {CLPool} from "infinity-core/src/pool-cl/libraries/CLPool.sol"; + +import {BasePancakeSwapInfinity} from "./BasePancakeSwapInfinity.sol"; import {UniversalRouter} from "../../src/UniversalRouter.sol"; import {IUniversalRouter} from "../../src/interfaces/IUniversalRouter.sol"; import {Constants} from "../../src/libraries/Constants.sol"; import {Commands} from "../../src/libraries/Commands.sol"; import {RouterParameters} from "../../src/base/RouterImmutables.sol"; -/// @dev similar to CLPancakeSwapV4, except focus on native ETH transfers -contract CLNativePancakeSwapV4Test is BasePancakeSwapV4 { +/// @dev similar to CLPancakeSwapInfinity, except focus on native ETH transfers +contract CLNativePancakeSwapInfinityTest is BasePancakeSwapInfinity { using CLPoolParametersHelper for bytes32; using Planner for Plan; @@ -67,7 +67,7 @@ contract CLNativePancakeSwapV4Test is BasePancakeSwapV4 { token1 = MockERC20(Currency.unwrap(currency1)); CLPositionDescriptorOffChain pd = - new CLPositionDescriptorOffChain("https://pancakeswap.finance/v4/pool-cl/positions/"); + new CLPositionDescriptorOffChain("https://pancakeswap.finance/infinity/pool-cl/positions/"); positionManager = new CLPositionManager(vault, poolManager, permit2, 100_000, pd, IWETH9(address(weth9))); _approvePermit2ForCurrency(address(this), currency1, address(positionManager), permit2); @@ -81,12 +81,12 @@ contract CLNativePancakeSwapV4Test is BasePancakeSwapV4 { v3InitCodeHash: bytes32(0), stableFactory: address(0), stableInfo: address(0), - v4Vault: address(vault), - v4ClPoolManager: address(poolManager), - v4BinPoolManager: address(0), + infiVault: address(vault), + infiClPoolManager: address(poolManager), + infiBinPoolManager: address(0), v3NFTPositionManager: address(0), - v4ClPositionManager: address(positionManager), - v4BinPositionManager: address(0) + infiClPositionManager: address(positionManager), + infiBinPositionManager: address(0) }); router = new UniversalRouter(params); _approvePermit2ForCurrency(alice, currency1, address(router), permit2); @@ -103,7 +103,7 @@ contract CLNativePancakeSwapV4Test is BasePancakeSwapV4 { _mint(poolKey0); } - function test_v4ClSwap_v4InitializeClPool() public { + function test_infiClSwap_infiInitializeClPool() public { MockERC20 _token = new MockERC20("token", "token", 18); PoolKey memory _poolKey = PoolKey({ currency0: CurrencyLibrary.NATIVE, @@ -119,11 +119,11 @@ contract CLNativePancakeSwapV4Test is BasePancakeSwapV4 { assertEq(sqrtPriceX96, 0); // initialize - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_CL_INITIALIZE_POOL))); + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_CL_INITIALIZE_POOL))); bytes[] memory inputs = new bytes[](1); inputs[0] = abi.encode(_poolKey, SQRT_PRICE_1_1); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4ClSwap_v4InitializeClPool"); + vm.snapshotGasLastCall("test_infiClSwap_infiInitializeClPool"); // verify (sqrtPriceX96,,,) = poolManager.getSlot0(_poolKey.toId()); @@ -138,19 +138,19 @@ contract CLNativePancakeSwapV4Test is BasePancakeSwapV4 { router.execute(commands, inputs); } - function test_v4ClSwap_ExactInSingle_NativeIn() public { + function test_infiClSwap_ExactInSingle_NativeIn() public { uint128 amountIn = 0.01 ether; vm.deal(alice, amountIn); vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input ICLRouterBase.CLSwapExactInputSingleParams memory params = ICLRouterBase.CLSwapExactInputSingleParams(poolKey0, true, amountIn, 0, ""); plan = Planner.init().add(Actions.CL_SWAP_EXACT_IN_SINGLE, abi.encode(params)); bytes memory data = plan.finalizeSwap(poolKey0.currency0, poolKey0.currency1, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; @@ -158,24 +158,24 @@ contract CLNativePancakeSwapV4Test is BasePancakeSwapV4 { assertEq(alice.balance, 0.01 ether); assertEq(token1.balanceOf(alice), 0 ether); router.execute{value: amountIn}(commands, inputs); - vm.snapshotGasLastCall("test_v4ClSwap_ExactInSingle_NativeIn"); + vm.snapshotGasLastCall("test_infiClSwap_ExactInSingle_NativeIn"); assertEq(alice.balance, 0 ether); assertEq(token1.balanceOf(alice), 9969940541342903); // around 0.01 eth * 0.997 - slippage } - function test_v4ClSwap_ExactInSingle_NativeOut() public { + function test_infiClSwap_ExactInSingle_NativeOut() public { uint128 amountIn = 0.01 ether; MockERC20(Currency.unwrap(currency1)).mint(alice, amountIn); vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input ICLRouterBase.CLSwapExactInputSingleParams memory params = ICLRouterBase.CLSwapExactInputSingleParams(poolKey0, false, amountIn, 0, ""); plan = Planner.init().add(Actions.CL_SWAP_EXACT_IN_SINGLE, abi.encode(params)); bytes memory data = plan.finalizeSwap(poolKey0.currency1, poolKey0.currency0, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; @@ -183,24 +183,24 @@ contract CLNativePancakeSwapV4Test is BasePancakeSwapV4 { assertEq(alice.balance, 0 ether); assertEq(token1.balanceOf(alice), 0.01 ether); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4ClSwap_ExactInSingle_NativeOut"); + vm.snapshotGasLastCall("test_infiClSwap_ExactInSingle_NativeOut"); assertEq(alice.balance, 9969940541342903); // around 0.01 eth * 0.997 - slippage assertEq(token1.balanceOf(alice), 0); } - function test_v4ClSwap_ExactInSingle_NativeOut_RouterRecipient() public { + function test_infiClSwap_ExactInSingle_NativeOut_RouterRecipient() public { uint128 amountIn = 0.01 ether; MockERC20(Currency.unwrap(currency1)).mint(alice, amountIn); vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input ICLRouterBase.CLSwapExactInputSingleParams memory params = ICLRouterBase.CLSwapExactInputSingleParams(poolKey0, false, amountIn, 0, ""); plan = Planner.init().add(Actions.CL_SWAP_EXACT_IN_SINGLE, abi.encode(params)); bytes memory data = plan.finalizeSwap(poolKey0.currency1, poolKey0.currency0, ActionConstants.ADDRESS_THIS); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; diff --git a/test/v4/CLPancakeSwapV4.t.sol b/test/infinity/CLPancakeSwapInfinity.t.sol similarity index 79% rename from test/v4/CLPancakeSwapV4.t.sol rename to test/infinity/CLPancakeSwapInfinity.t.sol index b34cf64..3be17d7 100644 --- a/test/v4/CLPancakeSwapV4.t.sol +++ b/test/infinity/CLPancakeSwapInfinity.t.sol @@ -3,39 +3,39 @@ pragma solidity ^0.8.13; import {Test, console} from "forge-std/Test.sol"; import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol"; -import {IWETH9} from "pancake-v4-periphery/src/interfaces/external/IWETH9.sol"; +import {IWETH9} from "infinity-periphery/src/interfaces/external/IWETH9.sol"; import {WETH} from "solmate/src/tokens/WETH.sol"; import {MockERC20} from "solmate/src/test/utils/mocks/MockERC20.sol"; -import {PoolKey} from "pancake-v4-core/src/types/PoolKey.sol"; -import {Currency} from "pancake-v4-core/src/types/Currency.sol"; -import {IVault} from "pancake-v4-core/src/interfaces/IVault.sol"; -import {Vault} from "pancake-v4-core/src/Vault.sol"; -import {CLPoolManager} from "pancake-v4-core/src/pool-cl/CLPoolManager.sol"; -import {ICLPoolManager} from "pancake-v4-core/src/pool-cl/interfaces/ICLPoolManager.sol"; -import {FixedPoint96} from "pancake-v4-core/src/pool-cl/libraries/FixedPoint96.sol"; -import {IHooks} from "pancake-v4-core/src/interfaces/IHooks.sol"; -import {CLPoolParametersHelper} from "pancake-v4-core/src/pool-cl/libraries/CLPoolParametersHelper.sol"; -import {SqrtPriceMath} from "pancake-v4-core/src/pool-cl/libraries/SqrtPriceMath.sol"; -import {TickMath} from "pancake-v4-core/src/pool-cl/libraries/TickMath.sol"; -import {ActionConstants} from "pancake-v4-periphery/src/libraries/ActionConstants.sol"; -import {Plan, Planner} from "pancake-v4-periphery/src/libraries/Planner.sol"; -import {CLPositionDescriptorOffChain} from "pancake-v4-periphery/src/pool-cl/CLPositionDescriptorOffChain.sol"; -import {CLPositionManager} from "pancake-v4-periphery/src/pool-cl/CLPositionManager.sol"; -import {Actions} from "pancake-v4-periphery/src/libraries/Actions.sol"; -import {ICLRouterBase} from "pancake-v4-periphery/src/pool-cl/interfaces/ICLRouterBase.sol"; -import {LiquidityAmounts} from "pancake-v4-periphery/src/pool-cl/libraries/LiquidityAmounts.sol"; -import {PathKey} from "pancake-v4-periphery/src/libraries/PathKey.sol"; -import {CLPool} from "pancake-v4-core/src/pool-cl/libraries/CLPool.sol"; - -import {BasePancakeSwapV4} from "./BasePancakeSwapV4.sol"; +import {PoolKey} from "infinity-core/src/types/PoolKey.sol"; +import {Currency} from "infinity-core/src/types/Currency.sol"; +import {IVault} from "infinity-core/src/interfaces/IVault.sol"; +import {Vault} from "infinity-core/src/Vault.sol"; +import {CLPoolManager} from "infinity-core/src/pool-cl/CLPoolManager.sol"; +import {ICLPoolManager} from "infinity-core/src/pool-cl/interfaces/ICLPoolManager.sol"; +import {FixedPoint96} from "infinity-core/src/pool-cl/libraries/FixedPoint96.sol"; +import {IHooks} from "infinity-core/src/interfaces/IHooks.sol"; +import {CLPoolParametersHelper} from "infinity-core/src/pool-cl/libraries/CLPoolParametersHelper.sol"; +import {SqrtPriceMath} from "infinity-core/src/pool-cl/libraries/SqrtPriceMath.sol"; +import {TickMath} from "infinity-core/src/pool-cl/libraries/TickMath.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; +import {Plan, Planner} from "infinity-periphery/src/libraries/Planner.sol"; +import {CLPositionDescriptorOffChain} from "infinity-periphery/src/pool-cl/CLPositionDescriptorOffChain.sol"; +import {CLPositionManager} from "infinity-periphery/src/pool-cl/CLPositionManager.sol"; +import {Actions} from "infinity-periphery/src/libraries/Actions.sol"; +import {ICLRouterBase} from "infinity-periphery/src/pool-cl/interfaces/ICLRouterBase.sol"; +import {LiquidityAmounts} from "infinity-periphery/src/pool-cl/libraries/LiquidityAmounts.sol"; +import {PathKey} from "infinity-periphery/src/libraries/PathKey.sol"; +import {CLPool} from "infinity-core/src/pool-cl/libraries/CLPool.sol"; + +import {BasePancakeSwapInfinity} from "./BasePancakeSwapInfinity.sol"; import {UniversalRouter} from "../../src/UniversalRouter.sol"; import {IUniversalRouter} from "../../src/interfaces/IUniversalRouter.sol"; import {Constants} from "../../src/libraries/Constants.sol"; import {Commands} from "../../src/libraries/Commands.sol"; import {RouterParameters} from "../../src/base/RouterImmutables.sol"; -contract CLPancakeSwapV4Test is BasePancakeSwapV4 { +contract CLPancakeSwapInfinityTest is BasePancakeSwapInfinity { using CLPoolParametersHelper for bytes32; using Planner for Plan; @@ -73,7 +73,7 @@ contract CLPancakeSwapV4Test is BasePancakeSwapV4 { token2 = MockERC20(Currency.unwrap(currency2)); CLPositionDescriptorOffChain pd = - new CLPositionDescriptorOffChain("https://pancakeswap.finance/v4/pool-cl/positions/"); + new CLPositionDescriptorOffChain("https://pancakeswap.finance/infinity/pool-cl/positions/"); positionManager = new CLPositionManager(vault, poolManager, permit2, 100_000, pd, IWETH9(address(weth9))); _approvePermit2ForCurrency(address(this), currency0, address(positionManager), permit2); _approvePermit2ForCurrency(address(this), currency1, address(positionManager), permit2); @@ -89,12 +89,12 @@ contract CLPancakeSwapV4Test is BasePancakeSwapV4 { v3InitCodeHash: bytes32(0), stableFactory: address(0), stableInfo: address(0), - v4Vault: address(vault), - v4ClPoolManager: address(poolManager), - v4BinPoolManager: address(0), + infiVault: address(vault), + infiClPoolManager: address(poolManager), + infiBinPoolManager: address(0), v3NFTPositionManager: address(0), - v4ClPositionManager: address(positionManager), - v4BinPositionManager: address(0) + infiClPositionManager: address(positionManager), + infiBinPositionManager: address(0) }); router = new UniversalRouter(params); _approvePermit2ForCurrency(alice, currency0, address(router), permit2); @@ -121,15 +121,14 @@ contract CLPancakeSwapV4Test is BasePancakeSwapV4 { fee: uint24(3000), parameters: bytes32(0).setTickSpacing(10) }); - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_CL_INITIALIZE_POOL))); + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_CL_INITIALIZE_POOL))); bytes[] memory inputs = new bytes[](1); inputs[0] = abi.encode(poolKey1, SQRT_PRICE_1_1); router.execute(commands, inputs); _mint(poolKey1); } - function test_v4ClSwap_v4InitializeClPool() public { - MockERC20 _token = new MockERC20("token", "token", 18); + function test_infiClSwap_infiInitializeClPool() public { PoolKey memory _poolKey = PoolKey({ currency0: currency0, currency1: currency2, @@ -144,11 +143,11 @@ contract CLPancakeSwapV4Test is BasePancakeSwapV4 { assertEq(sqrtPriceX96, 0); // initialize - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_CL_INITIALIZE_POOL))); + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_CL_INITIALIZE_POOL))); bytes[] memory inputs = new bytes[](1); inputs[0] = abi.encode(_poolKey, SQRT_PRICE_1_1); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4ClSwap_v4InitializeClPool"); + vm.snapshotGasLastCall("test_infiClSwap_infiInitializeClPool"); // verify (sqrtPriceX96,,,) = poolManager.getSlot0(_poolKey.toId()); @@ -163,19 +162,19 @@ contract CLPancakeSwapV4Test is BasePancakeSwapV4 { router.execute(commands, inputs); } - function test_v4ClSwap_ExactInSingle() public { + function test_infiClSwap_ExactInSingle() public { uint128 amountIn = 0.01 ether; MockERC20(Currency.unwrap(currency0)).mint(alice, amountIn); vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input ICLRouterBase.CLSwapExactInputSingleParams memory params = ICLRouterBase.CLSwapExactInputSingleParams(poolKey0, true, amountIn, 0, ""); plan = Planner.init().add(Actions.CL_SWAP_EXACT_IN_SINGLE, abi.encode(params)); bytes memory data = plan.finalizeSwap(poolKey0.currency0, poolKey0.currency1, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; @@ -183,17 +182,17 @@ contract CLPancakeSwapV4Test is BasePancakeSwapV4 { assertEq(token0.balanceOf(alice), 0.01 ether); assertEq(token1.balanceOf(alice), 0 ether); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4ClSwap_ExactInSingle"); + vm.snapshotGasLastCall("test_infiClSwap_ExactInSingle"); assertEq(token0.balanceOf(alice), 0 ether); assertEq(token1.balanceOf(alice), 9969940541342903); // around 0.01 eth * 0.997 - slippage } - function test_v4ClSwap_ExactIn_SingleHop() public { + function test_infiClSwap_ExactIn_SingleHop() public { uint128 amountIn = 0.01 ether; MockERC20(Currency.unwrap(currency0)).mint(alice, amountIn); vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input PathKey[] memory path = new PathKey[](1); path[0] = PathKey({ intermediateCurrency: currency1, @@ -208,8 +207,8 @@ contract CLPancakeSwapV4Test is BasePancakeSwapV4 { plan = Planner.init().add(Actions.CL_SWAP_EXACT_IN, abi.encode(params)); bytes memory data = plan.finalizeSwap(currency0, currency1, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; @@ -217,17 +216,17 @@ contract CLPancakeSwapV4Test is BasePancakeSwapV4 { assertEq(token0.balanceOf(alice), 0.01 ether); assertEq(token1.balanceOf(alice), 0 ether); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4ClSwap_ExactIn_SingleHop"); + vm.snapshotGasLastCall("test_infiClSwap_ExactIn_SingleHop"); assertEq(token0.balanceOf(alice), 0 ether); assertEq(token1.balanceOf(alice), 9969940541342903); // around 0.01 eth * 0.997 - slippage } - function test_v4ClSwap_ExactIn_MultiHop() public { + function test_infiClSwap_ExactIn_MultiHop() public { uint128 amountIn = 0.01 ether; MockERC20(Currency.unwrap(currency0)).mint(alice, amountIn); vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input PathKey[] memory path = new PathKey[](2); path[0] = PathKey({ intermediateCurrency: currency1, @@ -250,8 +249,8 @@ contract CLPancakeSwapV4Test is BasePancakeSwapV4 { plan = Planner.init().add(Actions.CL_SWAP_EXACT_IN, abi.encode(params)); bytes memory data = plan.finalizeSwap(currency0, currency2, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; @@ -259,24 +258,24 @@ contract CLPancakeSwapV4Test is BasePancakeSwapV4 { assertEq(token0.balanceOf(alice), 0.01 ether); assertEq(token2.balanceOf(alice), 0 ether); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4ClSwap_ExactIn_MultiHop"); + vm.snapshotGasLastCall("test_infiClSwap_ExactIn_MultiHop"); assertEq(token0.balanceOf(alice), 0 ether); assertEq(token2.balanceOf(alice), 9939971617982475); // around 0.01 eth - fee/slippage } - function test_v4ClSwap_ExactOutSingle() public { + function test_infiClSwap_ExactOutSingle() public { uint128 amountOut = 0.01 ether; MockERC20(Currency.unwrap(currency0)).mint(alice, amountOut * 2); // *2 to handle slippage vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input ICLRouterBase.CLSwapExactOutputSingleParams memory params = ICLRouterBase.CLSwapExactOutputSingleParams(poolKey0, true, amountOut, amountOut * 2, ""); plan = Planner.init().add(Actions.CL_SWAP_EXACT_OUT_SINGLE, abi.encode(params)); bytes memory data = plan.finalizeSwap(poolKey0.currency0, poolKey0.currency1, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; @@ -284,17 +283,17 @@ contract CLPancakeSwapV4Test is BasePancakeSwapV4 { assertEq(token0.balanceOf(alice), 0.02 ether); assertEq(token1.balanceOf(alice), 0 ether); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4ClSwap_ExactOutSingle"); + vm.snapshotGasLastCall("test_infiClSwap_ExactOutSingle"); assertEq(token0.balanceOf(alice), 9969849731458956); // around 0.02 eth - 0.01 eth - slippage assertEq(token1.balanceOf(alice), 0.01 ether); } - function test_v4ClSwap_ExactOut_SingleHop() public { + function test_infiClSwap_ExactOut_SingleHop() public { uint128 amountOut = 0.01 ether; MockERC20(Currency.unwrap(currency0)).mint(alice, amountOut * 2); // *2 to handle slippage vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input PathKey[] memory path = new PathKey[](1); path[0] = PathKey({ intermediateCurrency: currency0, @@ -309,8 +308,8 @@ contract CLPancakeSwapV4Test is BasePancakeSwapV4 { plan = Planner.init().add(Actions.CL_SWAP_EXACT_OUT, abi.encode(params)); bytes memory data = plan.finalizeSwap(currency0, currency1, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; @@ -318,17 +317,17 @@ contract CLPancakeSwapV4Test is BasePancakeSwapV4 { assertEq(token0.balanceOf(alice), 0.02 ether); assertEq(token1.balanceOf(alice), 0 ether); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4ClSwap_ExactOut_SingleHop"); + vm.snapshotGasLastCall("test_infiClSwap_ExactOut_SingleHop"); assertEq(token0.balanceOf(alice), 9969849731458956); // around 0.02 eth - 0.01 eth - slippage assertEq(token1.balanceOf(alice), 0.01 ether); } - function test_v4ClSwap_ExactOut_MultiHop() public { + function test_infiClSwap_ExactOut_MultiHop() public { uint128 amountOut = 0.01 ether; MockERC20(Currency.unwrap(currency0)).mint(alice, amountOut * 2); // *2 to handle slippage vm.startPrank(alice); - // prepare v4 swap input + // prepare infinity swap input PathKey[] memory path = new PathKey[](2); path[0] = PathKey({ intermediateCurrency: currency0, @@ -351,8 +350,8 @@ contract CLPancakeSwapV4Test is BasePancakeSwapV4 { plan = Planner.init().add(Actions.CL_SWAP_EXACT_OUT, abi.encode(params)); bytes memory data = plan.finalizeSwap(currency0, currency2, ActionConstants.MSG_SENDER); - // call v4_swap - bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.V4_SWAP))); + // call infi_swap + bytes memory commands = abi.encodePacked(bytes1(uint8(Commands.INFI_SWAP))); bytes[] memory inputs = new bytes[](1); inputs[0] = data; @@ -360,7 +359,7 @@ contract CLPancakeSwapV4Test is BasePancakeSwapV4 { assertEq(token0.balanceOf(alice), 0.02 ether); assertEq(token2.balanceOf(alice), 0 ether); router.execute(commands, inputs); - vm.snapshotGasLastCall("test_v4ClSwap_ExactOut_MultiHop"); + vm.snapshotGasLastCall("test_infiClSwap_ExactOut_MultiHop"); assertEq(token0.balanceOf(alice), 9939608377607349); assertEq(token2.balanceOf(alice), 0.01 ether); } diff --git a/test/stableSwap/StableSwap.t.sol b/test/stableSwap/StableSwap.t.sol index 2b1bd1c..5db1f35 100644 --- a/test/stableSwap/StableSwap.t.sol +++ b/test/stableSwap/StableSwap.t.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.13; import {Test, console} from "forge-std/Test.sol"; import {ERC20} from "solmate/src/tokens/ERC20.sol"; -import {ActionConstants} from "pancake-v4-periphery/src/libraries/ActionConstants.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {IPermit2} from "permit2/src/interfaces/IPermit2.sol"; @@ -44,12 +44,12 @@ abstract contract StableSwapTest is Test { v3InitCodeHash: bytes32(0), stableFactory: address(STABLE_FACTORY), stableInfo: address(STABLE_INFO), - v4Vault: address(0), - v4ClPoolManager: address(0), - v4BinPoolManager: address(0), + infiVault: address(0), + infiClPoolManager: address(0), + infiBinPoolManager: address(0), v3NFTPositionManager: address(0), - v4ClPositionManager: address(0), - v4BinPositionManager: address(0) + infiClPositionManager: address(0), + infiBinPositionManager: address(0) }); router = new UniversalRouter(params); diff --git a/test/v2/PancakeSwapV2.t.sol b/test/v2/PancakeSwapV2.t.sol index 1297a7f..395d95f 100644 --- a/test/v2/PancakeSwapV2.t.sol +++ b/test/v2/PancakeSwapV2.t.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.13; import {Test, console} from "forge-std/Test.sol"; import {ERC20} from "solmate/src/tokens/ERC20.sol"; -import {ActionConstants} from "pancake-v4-periphery/src/libraries/ActionConstants.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; import {IPermit2} from "permit2/src/interfaces/IPermit2.sol"; import {UniversalRouter} from "../../src/UniversalRouter.sol"; @@ -39,12 +39,12 @@ abstract contract PancakeSwapV2Test is Test { v3InitCodeHash: bytes32(0), stableFactory: address(0), stableInfo: address(0), - v4Vault: address(0), - v4ClPoolManager: address(0), - v4BinPoolManager: address(0), + infiVault: address(0), + infiClPoolManager: address(0), + infiBinPoolManager: address(0), v3NFTPositionManager: address(0), - v4ClPositionManager: address(0), - v4BinPositionManager: address(0) + infiClPositionManager: address(0), + infiBinPositionManager: address(0) }); router = new UniversalRouter(params); diff --git a/test/v3/PancakeSwapV3.t.sol b/test/v3/PancakeSwapV3.t.sol index 98c5ef9..acdbcd1 100644 --- a/test/v3/PancakeSwapV3.t.sol +++ b/test/v3/PancakeSwapV3.t.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.13; import {Test, console} from "forge-std/Test.sol"; import {ERC20} from "solmate/src/tokens/ERC20.sol"; -import {ActionConstants} from "pancake-v4-periphery/src/libraries/ActionConstants.sol"; +import {ActionConstants} from "infinity-periphery/src/libraries/ActionConstants.sol"; import {IPermit2} from "permit2/src/interfaces/IPermit2.sol"; import {UniversalRouter} from "../../src/UniversalRouter.sol"; @@ -42,12 +42,12 @@ abstract contract PancakeSwapV3Test is Test { v3InitCodeHash: bytes32(0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2), stableFactory: address(0), stableInfo: address(0), - v4Vault: address(0), - v4ClPoolManager: address(0), - v4BinPoolManager: address(0), + infiVault: address(0), + infiClPoolManager: address(0), + infiBinPoolManager: address(0), v3NFTPositionManager: address(0), - v4ClPositionManager: address(0), - v4BinPositionManager: address(0) + infiClPositionManager: address(0), + infiBinPositionManager: address(0) }); router = new UniversalRouter(params);