chore: Add BalancerSwapExecutor
This commit is contained in:
81
evm/test/BalancerSwapExecutor.t.sol
Normal file
81
evm/test/BalancerSwapExecutor.t.sol
Normal file
@@ -0,0 +1,81 @@
|
||||
// SPDX-License-Identifier: UNLICENSED
|
||||
pragma solidity ^0.8.13;
|
||||
|
||||
import "./SwapExecutorTest.sol";
|
||||
import "../src/balancer-v2/BalancerSwapExecutor.sol";
|
||||
|
||||
contract TestBalancerSwapExecutor is SwapExecutorTest {
|
||||
BalancerSwapExecutor balancer;
|
||||
IERC20 USDC = IERC20(USDC_ADDR);
|
||||
IERC20 USDT = IERC20(USDT_ADDR);
|
||||
|
||||
constructor() {}
|
||||
|
||||
function setUp() public {
|
||||
//Fork
|
||||
uint256 forkBlock = 16000000;
|
||||
vm.createSelectFork(vm.rpcUrl("mainnet"), forkBlock);
|
||||
|
||||
//Setup
|
||||
balancer = new BalancerSwapExecutor();
|
||||
}
|
||||
|
||||
function testBalancerSwap() public {
|
||||
//Set up
|
||||
uint256 sellAmount = 1000_000000;
|
||||
uint256 expectedAmount = 998_919380; //Swap 1k USDT for 998 USDC
|
||||
bool exactOut = false;
|
||||
// This is required because balancer does a transferFrom sender.
|
||||
// That also means we need to do this approval with our swapRouter.
|
||||
bool tokenApprovalNeeded = true;
|
||||
bytes memory protocolData = abi.encodePacked(
|
||||
USDT_ADDR,
|
||||
USDC_ADDR,
|
||||
DAI_USDC_USDT_balancer,
|
||||
bob,
|
||||
exactOut,
|
||||
tokenApprovalNeeded
|
||||
);
|
||||
|
||||
// Logic
|
||||
vm.prank(address(balancer));
|
||||
deal(USDT_ADDR, address(balancer), sellAmount);
|
||||
vm.prank(executor);
|
||||
uint256 responseAmount = balancer.swap(sellAmount, protocolData);
|
||||
|
||||
//Assertions
|
||||
assertEq(responseAmount, expectedAmount);
|
||||
assertEq(USDC.balanceOf(bob), expectedAmount);
|
||||
assertEq(USDT.balanceOf(address(balancer)), 0);
|
||||
}
|
||||
|
||||
function testBalancerExactOutSwap() public {
|
||||
//Set up
|
||||
uint256 buyAmount = 1000_979168;
|
||||
uint256 expectedSellAmount = 1000 * 10 ** 6;
|
||||
bool exactOut = true;
|
||||
bool tokenApprovalNeeded = true;
|
||||
bytes memory protocolData = abi.encodePacked(
|
||||
USDC_ADDR,
|
||||
USDT_ADDR,
|
||||
DAI_USDC_USDT_balancer,
|
||||
bob,
|
||||
exactOut,
|
||||
tokenApprovalNeeded
|
||||
);
|
||||
|
||||
//Logic
|
||||
// This is required because balancer does a transferFrom sender.
|
||||
// That also means we need to do this approval with our swapRouter.
|
||||
vm.prank(address(balancer));
|
||||
|
||||
deal(USDC_ADDR, address(balancer), expectedSellAmount);
|
||||
vm.prank(executor);
|
||||
uint256 responseAmount = balancer.swap(buyAmount, protocolData);
|
||||
|
||||
// //Assertions
|
||||
assertEq(responseAmount, expectedSellAmount);
|
||||
assertEq(USDT.balanceOf(bob), buyAmount);
|
||||
assertEq(USDC.balanceOf(address(balancer)), 0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user