Skip to content

Commit 3b46c31

Browse files
committed
add transferFromSender tests
1 parent 223b8c3 commit 3b46c31

File tree

1 file changed

+76
-1
lines changed

1 file changed

+76
-1
lines changed

test/Swaps/Swaps1Inch.sol

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ import {ISwapper} from "../../src/Swaps/ISwapper.sol";
1010
import {Swapper} from "../../src/Swaps/Swapper.sol";
1111
import {SwapVerifier} from "../../src/Swaps/SwapVerifier.sol";
1212

13+
import {Permit2ECDSASigner} from "evk-test/mocks/Permit2ECDSASigner.sol";
14+
import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol";
15+
1316
import "./Payloads.sol";
1417

1518
import "forge-std/Test.sol";
@@ -25,6 +28,7 @@ contract Swaps1Inch is EVaultTestBase {
2528
address constant uniswapRouterV2 = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
2629
address constant uniswapRouterV3 = 0xE592427A0AEce92De3Edee1F18E0157C05861564;
2730
address constant uniswapRouter02 = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;
31+
address constant permit2Address = 0x000000000022D473030F116dDEE9F6B43aC78BA3;
2832

2933
address constant GRT = 0xc944E90C64B2c07662A292be6244BDf05Cda44a7;
3034
address constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
@@ -53,7 +57,7 @@ contract Swaps1Inch is EVaultTestBase {
5357
user2 = makeAddr("user2");
5458

5559
swapper = new Swapper(uniswapRouterV2, uniswapRouterV3);
56-
swapVerifier = new SwapVerifier(address(1), address(1));
60+
swapVerifier = new SwapVerifier(address(evc), permit2Address);
5761

5862
if (bytes(FORK_RPC_URL).length != 0) {
5963
mainnetFork = vm.createSelectFork(FORK_RPC_URL);
@@ -1453,4 +1457,75 @@ contract Swaps1Inch is EVaultTestBase {
14531457
assertEq(eTST.debtOf(user2), 0);
14541458
assertEq(eTST.balanceOf(user2), 2e18);
14551459
}
1460+
1461+
function test_transferFromSender_allowance() external {
1462+
assetTST.mint(user, 1e18);
1463+
assertEq(assetTST.balanceOf(address(swapper)), 0);
1464+
1465+
startHoax(user);
1466+
vm.expectRevert(); // no approvals
1467+
swapVerifier.transferFromSender(address(assetTST), 1e18, address(swapper));
1468+
1469+
assetTST.approve(address(swapVerifier), 2e18);
1470+
1471+
startHoax(user2);
1472+
vm.expectRevert(); // other users can't pull
1473+
swapVerifier.transferFromSender(address(assetTST), 1e18, address(swapper));
1474+
1475+
startHoax(user);
1476+
swapVerifier.transferFromSender(address(assetTST), 1e18, address(swapper));
1477+
1478+
assertEq(assetTST.balanceOf(address(swapper)), 1e18);
1479+
}
1480+
1481+
function test_transferFromSender_permit2() external {
1482+
assertEq(assetTST.balanceOf(address(swapper)), 0);
1483+
1484+
Permit2ECDSASigner permit2Signer = new Permit2ECDSASigner(address(permit2));
1485+
1486+
uint256 userPK = 0x123400;
1487+
address signer = vm.addr(userPK);
1488+
1489+
assetTST.mint(signer, 1e18);
1490+
1491+
startHoax(signer);
1492+
vm.expectRevert(); // no approvals
1493+
swapVerifier.transferFromSender(address(assetTST), 1e18, address(swapper));
1494+
1495+
1496+
// approve permit2 contract to spend the tokens
1497+
assetTST.approve(permit2, type(uint160).max);
1498+
1499+
// build permit2 object
1500+
IAllowanceTransfer.PermitSingle memory permitSingle = IAllowanceTransfer.PermitSingle({
1501+
details: IAllowanceTransfer.PermitDetails({
1502+
token: address(assetTST),
1503+
amount: type(uint160).max,
1504+
expiration: type(uint48).max,
1505+
nonce: 0
1506+
}),
1507+
spender: address(swapVerifier),
1508+
sigDeadline: type(uint256).max
1509+
});
1510+
1511+
IEVC.BatchItem[] memory items = new IEVC.BatchItem[](2);
1512+
items[0].onBehalfOfAccount = signer;
1513+
items[0].targetContract = permit2;
1514+
items[0].value = 0;
1515+
items[0].data = abi.encodeWithSignature(
1516+
"permit(address,((address,uint160,uint48,uint48),address,uint256),bytes)",
1517+
signer,
1518+
permitSingle,
1519+
permit2Signer.signPermitSingle(userPK, permitSingle)
1520+
);
1521+
1522+
items[1].onBehalfOfAccount = signer;
1523+
items[1].targetContract = address(swapVerifier);
1524+
items[1].value = 0;
1525+
items[1].data = abi.encodeCall(swapVerifier.transferFromSender, (address(assetTST), 1e18, address(swapper)));
1526+
1527+
evc.batch(items);
1528+
1529+
assertEq(assetTST.balanceOf(address(swapper)), 1e18);
1530+
}
14561531
}

0 commit comments

Comments
 (0)