Make balance hard limits work correctly. Add back capability

This commit is contained in:
czanella
2024-07-19 10:27:36 +01:00
parent 260fd7fbb5
commit 1f509897ef
2 changed files with 17 additions and 6 deletions

View File

@@ -9,7 +9,7 @@ import {
// Maximum Swap In/Out Ratio - 0.3 // Maximum Swap In/Out Ratio - 0.3
// https://balancer.gitbook.io/balancer/core-concepts/protocol/limitations#v2-limits // https://balancer.gitbook.io/balancer/core-concepts/protocol/limitations#v2-limits
uint256 constant RESERVE_LIMIT_FACTOR = 4; uint256 constant RESERVE_LIMIT_FACTOR = 3;
uint256 constant SWAP_DEADLINE_SEC = 1000; uint256 constant SWAP_DEADLINE_SEC = 1000;
contract BalancerV2SwapAdapter is ISwapAdapter { contract BalancerV2SwapAdapter is ISwapAdapter {
@@ -174,10 +174,10 @@ contract BalancerV2SwapAdapter is ISwapAdapter {
for (uint256 i = 0; i < tokens.length; i++) { for (uint256 i = 0; i < tokens.length; i++) {
if (tokens[i] == sellToken) { if (tokens[i] == sellToken) {
limits[0] = balances[i] / RESERVE_LIMIT_FACTOR; limits[0] = balances[i] * RESERVE_LIMIT_FACTOR / 10;
} }
if (tokens[i] == buyToken) { if (tokens[i] == buyToken) {
limits[1] = balances[i] / RESERVE_LIMIT_FACTOR; limits[1] = balances[i] * RESERVE_LIMIT_FACTOR / 10;
} }
} }
} }
@@ -188,10 +188,11 @@ contract BalancerV2SwapAdapter is ISwapAdapter {
override override
returns (Capability[] memory capabilities) returns (Capability[] memory capabilities)
{ {
capabilities = new Capability[](3); capabilities = new Capability[](4);
capabilities[0] = Capability.SellOrder; capabilities[0] = Capability.SellOrder;
capabilities[1] = Capability.BuyOrder; capabilities[1] = Capability.BuyOrder;
capabilities[2] = Capability.PriceFunction; capabilities[2] = Capability.PriceFunction;
capabilities[3] = Capability.HardLimits;
} }
function getTokens(bytes32 poolId) function getTokens(bytes32 poolId)

View File

@@ -87,6 +87,8 @@ contract AdapterTest is Test, ISwapAdapterTypes {
Trade memory trade; Trade memory trade;
deal(tokenIn, address(this), 5 * amounts[amounts.length - 1]); deal(tokenIn, address(this), 5 * amounts[amounts.length - 1]);
uint256 initialState = vm.snapshot();
for (uint256 j = 1; j < amounts.length; j++) { for (uint256 j = 1; j < amounts.length; j++) {
console2.log( console2.log(
"TEST: Testing behavior for price at %s of limit.", "TEST: Testing behavior for price at %s of limit.",
@@ -139,6 +141,8 @@ contract AdapterTest is Test, ISwapAdapterTypes {
"Price should be or equal to price after swap." "Price should be or equal to price after swap."
); );
} }
vm.revertTo(initialState);
} }
uint256 amountAboveLimit = sellLimit * 105 / 100; uint256 amountAboveLimit = sellLimit * 105 / 100;
@@ -167,7 +171,10 @@ contract AdapterTest is Test, ISwapAdapterTypes {
address tokenOut, address tokenOut,
uint256 amountAboveLimit uint256 amountAboveLimit
) internal { ) internal {
console2.log("TEST: Testing revert behavior above the sell limit"); console2.log(
"TEST: Testing revert behavior above the sell limit: %d",
amountAboveLimit
);
uint256[] memory aboveLimitArray = new uint256[](1); uint256[] memory aboveLimitArray = new uint256[](1);
aboveLimitArray[0] = amountAboveLimit; aboveLimitArray[0] = amountAboveLimit;
@@ -198,7 +205,10 @@ contract AdapterTest is Test, ISwapAdapterTypes {
address tokenOut, address tokenOut,
uint256 amountAboveLimit uint256 amountAboveLimit
) internal { ) internal {
console2.log("TEST: Testing operations above the sell limit"); console2.log(
"TEST: Testing operations above the sell limit: %d",
amountAboveLimit
);
uint256[] memory aboveLimitArray = new uint256[](1); uint256[] memory aboveLimitArray = new uint256[](1);
aboveLimitArray[0] = amountAboveLimit; aboveLimitArray[0] = amountAboveLimit;