Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Part 1] feat: refactor v4 to infinity #77

Merged
merged 14 commits into from
Feb 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[submodule "lib/pancake-v4-core"]
path = lib/pancake-v4-core
url = https://github.com/pancakeswap/pancake-v4-core
[submodule "lib/infinity-core"]
path = lib/infinity-core
url = https://github.com/pancakeswap/infinity-core
[submodule "lib/permit2"]
path = lib/permit2
url = https://github.com/pancakeswap/permit2
Expand Down
6 changes: 2 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
# Pancake v4 periphery

1. Setup mimic https://github.com/pancakeswap/pancake-v4-core
# Infinity periphery

## Running test

1. Install dependencies with `forge install`
2. Run test with `forge test --isolate`

See https://github.com/pancakeswap/pancake-v4-core/pull/35 on why `--isolate` flag is used.
See https://github.com/pancakeswap/infinity-core/pull/35 on why `--isolate` flag is used.

## Update dependencies

Expand Down
1 change: 1 addition & 0 deletions lib/infinity-core
Submodule infinity-core added at ec36a4
1 change: 0 additions & 1 deletion lib/pancake-v4-core
Submodule pancake-v4-core deleted from 284e45
10 changes: 5 additions & 5 deletions remappings.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
pancake-v4-core/=lib/pancake-v4-core/
ds-test/=lib/pancake-v4-core/lib/forge-std/lib/ds-test/src/
forge-std/=lib/pancake-v4-core/lib/forge-std/src/
openzeppelin-contracts/=lib/pancake-v4-core/lib/openzeppelin-contracts/
solmate/=lib/pancake-v4-core/lib/solmate/
infinity-core/=lib/infinity-core/
ds-test/=lib/infinity-core/lib/forge-std/lib/ds-test/src/
forge-std/=lib/infinity-core/lib/forge-std/src/
openzeppelin-contracts/=lib/infinity-core/lib/openzeppelin-contracts/
solmate/=lib/infinity-core/lib/solmate/
permit2/=lib/permit2
2 changes: 1 addition & 1 deletion script/01_DeployCLPositionDescriptorOffchain.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
*/
contract DeployCLPositionDescriptorOffChainScript is BaseScript {
function getDeploymentSalt() public pure override returns (bytes32) {
return keccak256("PANCAKE-V4-PERIPHERY/CLPositionDescriptorOffChain/0.90");
return keccak256("INFINITY-PERIPHERY/CLPositionDescriptorOffChain/0.90");
}

function run() public {
Expand Down
6 changes: 3 additions & 3 deletions script/02_DeployCLPositionManager.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ pragma solidity ^0.8.24;

import "forge-std/Script.sol";
import {BaseScript} from "./BaseScript.sol";
import {IVault} from "pancake-v4-core/src/interfaces/IVault.sol";
import {ICLPoolManager} from "pancake-v4-core/src/pool-cl/interfaces/ICLPoolManager.sol";
import {IVault} from "infinity-core/src/interfaces/IVault.sol";
import {ICLPoolManager} from "infinity-core/src/pool-cl/interfaces/ICLPoolManager.sol";
import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol";
import {CLPositionManager} from "../src/pool-cl/CLPositionManager.sol";
import {ICLPositionDescriptor} from "../src/pool-cl/interfaces/ICLPositionDescriptor.sol";
Expand All @@ -25,7 +25,7 @@ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
*/
contract DeployCLPositionManagerScript is BaseScript {
function getDeploymentSalt() public pure override returns (bytes32) {
return keccak256("PANCAKE-V4-PERIPHERY/CLPositionManager/0.90");
return keccak256("INFINITY-PERIPHERY/CLPositionManager/0.90");
}

function run() public {
Expand Down
6 changes: 3 additions & 3 deletions script/03_DeployBinPositionManager.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ pragma solidity ^0.8.24;

import "forge-std/Script.sol";
import {BaseScript} from "./BaseScript.sol";
import {IVault} from "pancake-v4-core/src/interfaces/IVault.sol";
import {IBinPoolManager} from "pancake-v4-core/src/pool-bin/interfaces/IBinPoolManager.sol";
import {IVault} from "infinity-core/src/interfaces/IVault.sol";
import {IBinPoolManager} from "infinity-core/src/pool-bin/interfaces/IBinPoolManager.sol";
import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol";
import {BinPositionManager} from "../src/pool-bin/BinPositionManager.sol";
import {IWETH9} from "../src/interfaces/external/IWETH9.sol";
Expand All @@ -24,7 +24,7 @@ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
*/
contract DeployBinPositionManagerScript is BaseScript {
function getDeploymentSalt() public pure override returns (bytes32) {
return keccak256("PANCAKE-V4-PERIPHERY/BinPositionManager/0.90");
return keccak256("INFINITY-PERIPHERY/BinPositionManager/0.90");
}

function run() public {
Expand Down
2 changes: 1 addition & 1 deletion script/04_DeployCLQuoter.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import {Create3Factory} from "pancake-create3-factory/src/Create3Factory.sol";
*/
contract DeployCLQuoterScript is BaseScript {
function getDeploymentSalt() public pure override returns (bytes32) {
return keccak256("PANCAKE-V4-PERIPHERY/CLQuoter/0.92");
return keccak256("INFINITY-PERIPHERY/CLQuoter/0.92");
}

function run() public {
Expand Down
2 changes: 1 addition & 1 deletion script/05_DeployBinQuoter.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import {Create3Factory} from "pancake-create3-factory/src/Create3Factory.sol";
*/
contract DeployBinQuoterScript is BaseScript {
function getDeploymentSalt() public pure override returns (bytes32) {
return keccak256("PANCAKE-V4-PERIPHERY/BinQuoter/0.92");
return keccak256("INFINITY-PERIPHERY/BinQuoter/0.92");
}

function run() public {
Expand Down
4 changes: 2 additions & 2 deletions script/06_DeployCLMigrator.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ pragma solidity ^0.8.24;

import "forge-std/Script.sol";
import {BaseScript} from "./BaseScript.sol";
import {IVault} from "pancake-v4-core/src/interfaces/IVault.sol";
import {IVault} from "infinity-core/src/interfaces/IVault.sol";
import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol";
import {CLMigrator} from "../src/pool-cl/CLMigrator.sol";
import {Create3Factory} from "pancake-create3-factory/src/Create3Factory.sol";
Expand All @@ -22,7 +22,7 @@ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
*/
contract DeployCLMigratorScript is BaseScript {
function getDeploymentSalt() public pure override returns (bytes32) {
return keccak256("PANCAKE-V4-PERIPHERY/CLMigrator/0.90");
return keccak256("INFINITY-PERIPHERY/CLMigrator/0.90");
}

function run() public {
Expand Down
4 changes: 2 additions & 2 deletions script/07_DeployBinMigrator.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ pragma solidity ^0.8.24;

import "forge-std/Script.sol";
import {BaseScript} from "./BaseScript.sol";
import {IVault} from "pancake-v4-core/src/interfaces/IVault.sol";
import {IVault} from "infinity-core/src/interfaces/IVault.sol";
import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol";
import {BinMigrator} from "../src/pool-bin/BinMigrator.sol";
import {Create3Factory} from "pancake-create3-factory/src/Create3Factory.sol";
Expand All @@ -22,7 +22,7 @@ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
*/
contract DeployBinMigratorScript is BaseScript {
function getDeploymentSalt() public pure override returns (bytes32) {
return keccak256("PANCAKE-V4-PERIPHERY/BinMigrator/0.90");
return keccak256("INFINITY-PERIPHERY/BinMigrator/0.90");
}

function run() public {
Expand Down
2 changes: 1 addition & 1 deletion script/08_DeployMixedQuoter.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import {Create3Factory} from "pancake-create3-factory/src/Create3Factory.sol";
*/
contract DeployMixedQuoterScript is BaseScript {
function getDeploymentSalt() public pure override returns (bytes32) {
return keccak256("PANCAKE-V4-PERIPHERY/MixedQuoter/0.92");
return keccak256("INFINITY-PERIPHERY/MixedQuoter/0.92");
}

function run() public {
Expand Down
4 changes: 2 additions & 2 deletions script/09_DeployCLTickLens.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ pragma solidity ^0.8.24;

import "forge-std/Script.sol";
import {BaseScript} from "./BaseScript.sol";
import {ICLPoolManager} from "pancake-v4-core/src/pool-cl/interfaces/ICLPoolManager.sol";
import {ICLPoolManager} from "infinity-core/src/pool-cl/interfaces/ICLPoolManager.sol";
import {TickLens} from "../src/pool-cl/lens/TickLens.sol";
import {Create3Factory} from "pancake-create3-factory/src/Create3Factory.sol";

Expand All @@ -20,7 +20,7 @@ import {Create3Factory} from "pancake-create3-factory/src/Create3Factory.sol";
*/
contract DeployCLTickLensScript is BaseScript {
function getDeploymentSalt() public pure override returns (bytes32) {
return keccak256("PANCAKE-V4-PERIPHERY/TickLens/0.90");
return keccak256("INFINITY-PERIPHERY/TickLens/0.90");
}

function run() public {
Expand Down
39 changes: 21 additions & 18 deletions src/V4Router.sol → src/InfinityRouter.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
// Copyright (C) 2024 PancakeSwap
pragma solidity ^0.8.24;

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";
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 {BipsLibrary} from "./libraries/BipsLibrary.sol";
import {CalldataDecoder} from "./libraries/CalldataDecoder.sol";
import {IV4Router} from "./interfaces/IV4Router.sol";
import {IInfinityRouter} from "./interfaces/IInfinityRouter.sol";
import {BaseActionsRouter} from "./base/BaseActionsRouter.sol";
import {DeltaResolver} from "./base/DeltaResolver.sol";
import {Actions} from "./libraries/Actions.sol";
Expand All @@ -17,11 +17,11 @@ import {BinCalldataDecoder} from "./pool-bin/libraries/BinCalldataDecoder.sol";
import {CLRouterBase} from "./pool-cl/CLRouterBase.sol";
import {BinRouterBase} from "./pool-bin/BinRouterBase.sol";

/// @title PancakeswapV4Router
/// @notice Abstract contract that contains all internal logic needed for routing through Pancakeswap V4 pools
/// @title InfinityRouter
/// @notice Abstract contract that contains all internal logic needed for routing through Pancakeswap infinity pools
/// @dev the entry point to executing actions in this contract is calling `BaseActionsRouter._executeActions`
/// An inheriting contract should call _executeActions at the point that they wish actions to be executed
abstract contract V4Router is IV4Router, CLRouterBase, BinRouterBase, BaseActionsRouter {
abstract contract InfinityRouter is IInfinityRouter, CLRouterBase, BinRouterBase, BaseActionsRouter {
using BipsLibrary for uint256;
using CalldataDecoder for bytes;
using CLCalldataDecoder for bytes;
Expand All @@ -37,37 +37,40 @@ abstract contract V4Router is IV4Router, CLRouterBase, BinRouterBase, BaseAction
// swap actions and payment actions in different blocks for gas efficiency
if (action < Actions.SETTLE) {
if (action == Actions.CL_SWAP_EXACT_IN) {
IV4Router.CLSwapExactInputParams calldata swapParams = params.decodeCLSwapExactInParams();
IInfinityRouter.CLSwapExactInputParams calldata swapParams = params.decodeCLSwapExactInParams();
_swapExactInput(swapParams);
return;
} else if (action == Actions.CL_SWAP_EXACT_IN_SINGLE) {
IV4Router.CLSwapExactInputSingleParams calldata swapParams = params.decodeCLSwapExactInSingleParams();
IInfinityRouter.CLSwapExactInputSingleParams calldata swapParams =
params.decodeCLSwapExactInSingleParams();
_swapExactInputSingle(swapParams);
return;
} else if (action == Actions.CL_SWAP_EXACT_OUT) {
IV4Router.CLSwapExactOutputParams calldata swapParams = params.decodeCLSwapExactOutParams();
IInfinityRouter.CLSwapExactOutputParams calldata swapParams = params.decodeCLSwapExactOutParams();
_swapExactOutput(swapParams);
return;
} else if (action == Actions.CL_SWAP_EXACT_OUT_SINGLE) {
IV4Router.CLSwapExactOutputSingleParams calldata swapParams = params.decodeCLSwapExactOutSingleParams();
IInfinityRouter.CLSwapExactOutputSingleParams calldata swapParams =
params.decodeCLSwapExactOutSingleParams();
_swapExactOutputSingle(swapParams);
return;
}
} else if (action > Actions.BURN_6909) {
if (action == Actions.BIN_SWAP_EXACT_IN) {
IV4Router.BinSwapExactInputParams calldata swapParams = params.decodeBinSwapExactInParams();
IInfinityRouter.BinSwapExactInputParams calldata swapParams = params.decodeBinSwapExactInParams();
_swapExactInput(swapParams);
return;
} else if (action == Actions.BIN_SWAP_EXACT_IN_SINGLE) {
IV4Router.BinSwapExactInputSingleParams calldata swapParams = params.decodeBinSwapExactInSingleParams();
IInfinityRouter.BinSwapExactInputSingleParams calldata swapParams =
params.decodeBinSwapExactInSingleParams();
_swapExactInputSingle(swapParams);
return;
} else if (action == Actions.BIN_SWAP_EXACT_OUT) {
IV4Router.BinSwapExactOutputParams calldata swapParams = params.decodeBinSwapExactOutParams();
IInfinityRouter.BinSwapExactOutputParams calldata swapParams = params.decodeBinSwapExactOutParams();
_swapExactOutput(swapParams);
return;
} else if (action == Actions.BIN_SWAP_EXACT_OUT_SINGLE) {
IV4Router.BinSwapExactOutputSingleParams calldata swapParams =
IInfinityRouter.BinSwapExactOutputSingleParams calldata swapParams =
params.decodeBinSwapExactOutSingleParams();
_swapExactOutputSingle(swapParams);
return;
Expand All @@ -76,13 +79,13 @@ abstract contract V4Router is IV4Router, CLRouterBase, BinRouterBase, BaseAction
if (action == Actions.SETTLE_ALL) {
(Currency currency, uint256 maxAmount) = params.decodeCurrencyAndUint256();
uint256 amount = _getFullDebt(currency);
if (amount > maxAmount) revert V4TooMuchRequested(maxAmount, amount);
if (amount > maxAmount) revert TooMuchRequested(maxAmount, amount);
_settle(currency, msgSender(), amount);
return;
} else if (action == Actions.TAKE_ALL) {
(Currency currency, uint256 minAmount) = params.decodeCurrencyAndUint256();
uint256 amount = _getFullCredit(currency);
if (amount < minAmount) revert V4TooLittleReceived(minAmount, amount);
if (amount < minAmount) revert TooLittleReceived(minAmount, amount);
_take(currency, msgSender(), amount);
return;
} else if (action == Actions.SETTLE) {
Expand Down
Loading