Make balance hard limits work correctly. Add back capability
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user