Skip to content

Commit 7ee4eab

Browse files
meetmangukiyamfw78
authored andcommitted
chore: migrate E2E smartOrder test to Foundry
1 parent f176400 commit 7ee4eab

File tree

2 files changed

+114
-133
lines changed

2 files changed

+114
-133
lines changed

test/e2e/SmartOrder.t.sol

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
// SPDX-License-Identifier: LGPL-3.0-or-later
2+
pragma solidity ^0.8;
3+
4+
import {Vm} from "forge-std/Vm.sol";
5+
6+
import {IERC20} from "src/contracts/interfaces/IERC20.sol";
7+
import {GPv2Order} from "src/contracts/libraries/GPv2Order.sol";
8+
import {GPv2Signing} from "src/contracts/mixins/GPv2Signing.sol";
9+
10+
import {Sign} from "../libraries/Sign.sol";
11+
import {SettlementEncoder} from "../libraries/encoders/SettlementEncoder.sol";
12+
import {Registry, TokenRegistry} from "../libraries/encoders/TokenRegistry.sol";
13+
import {SmartSellOrder} from "../src/SmartSellOrder.sol";
14+
import {Helper, IERC20Mintable} from "./Helper.sol";
15+
16+
using SettlementEncoder for SettlementEncoder.State;
17+
using TokenRegistry for TokenRegistry.State;
18+
using TokenRegistry for Registry;
19+
20+
contract SmartOrderTest is Helper(false) {
21+
IERC20Mintable token1;
22+
IERC20Mintable token2;
23+
24+
function setUp() public override {
25+
super.setUp();
26+
27+
token1 = deployMintableErc20("TK1", "TK1");
28+
token2 = deployMintableErc20("TK2", "TK2");
29+
}
30+
31+
function test_permits_trader_allowance_with_settlement() external {
32+
Vm.Wallet memory trader1 = vm.createWallet("trader1");
33+
Vm.Wallet memory trader2 = vm.createWallet("trader2");
34+
35+
// mint some tokens
36+
token1.mint(trader1.addr, 1.01 ether);
37+
vm.prank(trader1.addr);
38+
// approve tokens to vault relayer
39+
token1.approve(vaultRelayer, type(uint256).max);
40+
// place order to buy 0.5 token2 with 1 token1 max
41+
encoder.signEncodeTrade(
42+
vm,
43+
trader1,
44+
GPv2Order.Data({
45+
kind: GPv2Order.KIND_BUY,
46+
partiallyFillable: false,
47+
sellToken: token1,
48+
buyToken: token2,
49+
sellAmount: 1 ether,
50+
buyAmount: 0.5 ether,
51+
feeAmount: 0.01 ether,
52+
validTo: 0xffffffff,
53+
appData: bytes32(uint256(1)),
54+
sellTokenBalance: GPv2Order.BALANCE_ERC20,
55+
buyTokenBalance: GPv2Order.BALANCE_ERC20,
56+
receiver: GPv2Order.RECEIVER_SAME_AS_OWNER
57+
}),
58+
domainSeparator,
59+
GPv2Signing.Scheme.Eip712,
60+
0
61+
);
62+
63+
vm.prank(trader2.addr);
64+
SmartSellOrder smartOrder = new SmartSellOrder(settlement, token2, token1, 0xffffffff, 1 ether, 0.1 ether);
65+
token2.mint(trader2.addr, 1.1 ether);
66+
vm.prank(trader2.addr);
67+
token2.transfer(address(smartOrder), 1.1 ether);
68+
69+
uint256 smartOrderSellAmount = 0.5 ether;
70+
GPv2Order.Data memory smartOrderTrade = smartOrder.orderForSellAmount(smartOrderSellAmount);
71+
GPv2Order.Data memory expectedOrder = GPv2Order.Data({
72+
kind: GPv2Order.KIND_SELL,
73+
partiallyFillable: false,
74+
sellToken: token2,
75+
buyToken: token1,
76+
receiver: trader2.addr,
77+
sellAmount: smartOrderSellAmount,
78+
buyAmount: 0.75 ether,
79+
feeAmount: 0.05 ether,
80+
validTo: 0xffffffff,
81+
appData: smartOrder.APPDATA(),
82+
sellTokenBalance: GPv2Order.BALANCE_ERC20,
83+
buyTokenBalance: GPv2Order.BALANCE_ERC20
84+
});
85+
assertEq(
86+
keccak256(abi.encode(smartOrderTrade)), keccak256(abi.encode(expectedOrder)), "smart order not as expected"
87+
);
88+
89+
encoder.encodeTrade(
90+
smartOrderTrade,
91+
Sign.Signature({
92+
scheme: GPv2Signing.Scheme.Eip1271,
93+
data: abi.encodePacked(address(smartOrder), abi.encode(smartOrderSellAmount))
94+
}),
95+
0
96+
);
97+
98+
// set token prices
99+
IERC20[] memory tokens = new IERC20[](2);
100+
tokens[0] = token1;
101+
tokens[1] = token2;
102+
uint256[] memory prices = new uint256[](2);
103+
prices[0] = 10;
104+
prices[1] = 15;
105+
encoder.tokenRegistry.tokenRegistry().setPrices(tokens, prices);
106+
107+
SettlementEncoder.EncodedSettlement memory encodedSettlement = encoder.encode(settlement);
108+
109+
vm.prank(solver);
110+
settle(encodedSettlement);
111+
112+
assertEq(token1.balanceOf(trader2.addr), 0.75 ether);
113+
}
114+
}

test/e2e/smartOrder.test.ts

Lines changed: 0 additions & 133 deletions
This file was deleted.

0 commit comments

Comments
 (0)