balanced pair optimization
This commit is contained in:
@@ -162,7 +162,42 @@ contract GasTest is Test {
|
||||
// Deploy pool with a small fee to test fee-handling paths (use 1000 ppm = 0.1%)
|
||||
uint256 feePpm = 1000;
|
||||
string memory poolName = string(abi.encodePacked("LP", vm.toString(numTokens)));
|
||||
PartyPool newPool = new PartyPool(poolName, poolName, tokens, bases, tradeFrac, targetSlippage, feePpm, feePpm);
|
||||
PartyPool newPool = new PartyPool(poolName, poolName, tokens, bases, tradeFrac, targetSlippage, feePpm, feePpm, false);
|
||||
|
||||
// Transfer initial deposit amounts into pool before initial mint
|
||||
for (uint256 i = 0; i < numTokens; i++) {
|
||||
TestERC20(tokens[i]).transfer(address(newPool), INIT_BAL);
|
||||
}
|
||||
|
||||
// Perform initial mint (initial deposit); receiver is this contract
|
||||
newPool.mint(address(0), address(this), 0, 0);
|
||||
|
||||
return newPool;
|
||||
}
|
||||
|
||||
/// @notice Helper to create a pool with the stable-pair optimization enabled
|
||||
function createPoolStable(uint256 numTokens) internal returns (PartyPool) {
|
||||
// Deploy tokens dynamically
|
||||
address[] memory tokens = new address[](numTokens);
|
||||
uint256[] memory bases = new uint256[](numTokens);
|
||||
|
||||
for (uint256 i = 0; i < numTokens; i++) {
|
||||
string memory name = string(abi.encodePacked("T", vm.toString(i)));
|
||||
TestERC20 token = new TestERC20(name, name, 0);
|
||||
tokens[i] = address(token);
|
||||
bases[i] = BASE;
|
||||
|
||||
// Mint initial balances for pool initialization and test users
|
||||
token.mint(address(this), INIT_BAL);
|
||||
token.mint(alice, INIT_BAL);
|
||||
token.mint(bob, INIT_BAL);
|
||||
}
|
||||
|
||||
// Deploy pool with a small fee to test fee-handling paths (use 1000 ppm = 0.1%)
|
||||
uint256 feePpm = 1000;
|
||||
string memory poolName = string(abi.encodePacked("LPs", vm.toString(numTokens)));
|
||||
// Note the final 'true' arg to activate stable-pair optimization path
|
||||
PartyPool newPool = new PartyPool(poolName, poolName, tokens, bases, tradeFrac, targetSlippage, feePpm, feePpm, true);
|
||||
|
||||
// Transfer initial deposit amounts into pool before initial mint
|
||||
for (uint256 i = 0; i < numTokens; i++) {
|
||||
@@ -253,6 +288,24 @@ contract GasTest is Test {
|
||||
_performSwapGasTest(pool50);
|
||||
}
|
||||
|
||||
/// @notice Gas measurement: perform 10 swaps back-and-forth on a 2-token stable pair (stable-path enabled)
|
||||
function testSwapGasStablePair() public {
|
||||
PartyPool stablePair = createPoolStable(2);
|
||||
_performSwapGasTest(stablePair);
|
||||
}
|
||||
|
||||
/// @notice Gas-style test: alternate swapMint then burnSwap on a 2-token stable pair
|
||||
function testSwapMintBurnSwapGasStablePair() public {
|
||||
PartyPool stablePair = createPoolStable(2);
|
||||
_performSwapMintBurnSwapGasTest(stablePair);
|
||||
}
|
||||
|
||||
/// @notice Combined gas test (mint then burn) on 2-token stable pair using mint() and burn().
|
||||
function testMintBurnGasStablePair() public {
|
||||
PartyPool stablePair = createPoolStable(2);
|
||||
_performMintBurnGasTest(stablePair);
|
||||
}
|
||||
|
||||
/// @notice Helper function: alternate swapMint then burnSwap to keep pool size roughly stable.
|
||||
function _performSwapMintBurnSwapGasTest(PartyPool testPool) internal {
|
||||
uint256 iterations = 10;
|
||||
|
||||
Reference in New Issue
Block a user