Skip to content

Commit d8a6deb

Browse files
authored
feat: fork tests (#86)
1 parent 7f43cf2 commit d8a6deb

File tree

11 files changed

+243
-139
lines changed

11 files changed

+243
-139
lines changed

.gas-snapshot

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,20 @@ OrderOriginPermit2Test:test_fillPermit2() (gas: 174723)
33
OrderOriginPermit2Test:test_fillPermit2_multi() (gas: 510586)
44
OrderOriginPermit2Test:test_initiatePermit2() (gas: 187081)
55
OrderOriginPermit2Test:test_initiatePermit2_multi() (gas: 470943)
6+
OrdersForkTest:test_fill_ERC20() (gas: 74581)
7+
OrdersForkTest:test_fill_ETH() (gas: 71687)
8+
OrdersForkTest:test_fill_both() (gas: 175984)
9+
OrdersForkTest:test_fill_multiETH() (gas: 138365)
10+
OrdersForkTest:test_fill_underflowETH() (gas: 118654)
11+
OrdersForkTest:test_initiate_ERC20() (gas: 87520)
12+
OrdersForkTest:test_initiate_ETH() (gas: 49955)
13+
OrdersForkTest:test_initiate_both() (gas: 126223)
14+
OrdersForkTest:test_initiate_multiERC20() (gas: 183468)
15+
OrdersForkTest:test_initiate_multiETH() (gas: 82210)
16+
OrdersForkTest:test_orderExpired() (gas: 30996)
17+
OrdersForkTest:test_sweepERC20() (gas: 61825)
18+
OrdersForkTest:test_sweepETH() (gas: 85828)
19+
OrdersForkTest:test_underflowETH() (gas: 66905)
620
OrdersTest:test_fill_ERC20() (gas: 76273)
721
OrdersTest:test_fill_ETH() (gas: 73740)
822
OrdersTest:test_fill_both() (gas: 179143)
@@ -17,6 +31,19 @@ OrdersTest:test_orderExpired() (gas: 32846)
1731
OrdersTest:test_sweepERC20() (gas: 62965)
1832
OrdersTest:test_sweepETH() (gas: 89995)
1933
OrdersTest:test_underflowETH() (gas: 69404)
34+
PassageForkTest:test_configureEnter() (gas: 141651)
35+
PassageForkTest:test_disallowedEnter() (gas: 58928)
36+
PassageForkTest:test_enter() (gas: 26523)
37+
PassageForkTest:test_enterToken() (gas: 66880)
38+
PassageForkTest:test_enterToken_defaultChain() (gas: 65384)
39+
PassageForkTest:test_enter_defaultChain() (gas: 24949)
40+
PassageForkTest:test_fallback() (gas: 22784)
41+
PassageForkTest:test_onlyTokenAdmin() (gas: 19145)
42+
PassageForkTest:test_receive() (gas: 22222)
43+
PassageForkTest:test_setUp() (gas: 23289)
44+
PassageForkTest:test_withdraw() (gas: 64486)
45+
PassagePermit2ForkTest:test_disallowedEnterPermit2() (gas: 1133422)
46+
PassagePermit2ForkTest:test_enterTokenPermit2() (gas: 150565)
2047
PassagePermit2Test:test_disallowedEnterPermit2() (gas: 1130187)
2148
PassagePermit2Test:test_enterTokenPermit2() (gas: 150794)
2249
PassageTest:test_configureEnter() (gas: 141651)
@@ -30,11 +57,28 @@ PassageTest:test_onlyTokenAdmin() (gas: 19145)
3057
PassageTest:test_receive() (gas: 22222)
3158
PassageTest:test_setUp() (gas: 23289)
3259
PassageTest:test_withdraw() (gas: 64486)
60+
Permit2OrdersForkTest:test_fillPermit2() (gas: 168424)
61+
Permit2OrdersForkTest:test_fillPermit2_multi() (gas: 500785)
62+
Permit2OrdersForkTest:test_initiatePermit2() (gas: 179960)
63+
Permit2OrdersForkTest:test_initiatePermit2_multi() (gas: 465362)
64+
RollupPassageForkTest:test_exit() (gas: 22860)
65+
RollupPassageForkTest:test_exitToken() (gas: 53288)
66+
RollupPassageForkTest:test_fallback() (gas: 20803)
67+
RollupPassageForkTest:test_receive() (gas: 20286)
68+
RollupPassagePermit2ForkTest:test_exitTokenPermit2() (gas: 131368)
3369
RollupPassagePermit2Test:test_exitTokenPermit2() (gas: 135717)
3470
RollupPassageTest:test_exit() (gas: 23114)
3571
RollupPassageTest:test_exitToken() (gas: 53266)
3672
RollupPassageTest:test_fallback() (gas: 20910)
3773
RollupPassageTest:test_receive() (gas: 20393)
74+
TransactForkTest:test_configureGas() (gas: 27486)
75+
TransactForkTest:test_enterTransact() (gas: 127464)
76+
TransactForkTest:test_onlyGasAdmin() (gas: 9895)
77+
TransactForkTest:test_setUp() (gas: 23757)
78+
TransactForkTest:test_transact() (gas: 107567)
79+
TransactForkTest:test_transact_defaultChain() (gas: 106574)
80+
TransactForkTest:test_transact_globalGasLimit() (gas: 117828)
81+
TransactForkTest:test_transact_perTransactGasLimit() (gas: 34574)
3882
TransactTest:test_configureGas() (gas: 27486)
3983
TransactTest:test_enterTransact() (gas: 127464)
4084
TransactTest:test_onlyGasAdmin() (gas: 9895)
@@ -43,6 +87,15 @@ TransactTest:test_transact() (gas: 107567)
4387
TransactTest:test_transact_defaultChain() (gas: 106574)
4488
TransactTest:test_transact_globalGasLimit() (gas: 117828)
4589
TransactTest:test_transact_perTransactGasLimit() (gas: 34574)
90+
ZenithForkTest:test_addSequencer() (gas: 81516)
91+
ZenithForkTest:test_badSignature() (gas: 46355)
92+
ZenithForkTest:test_incorrectHostBlock() (gas: 42276)
93+
ZenithForkTest:test_notSequencer() (gas: 39566)
94+
ZenithForkTest:test_notSequencerAdmin() (gas: 11279)
95+
ZenithForkTest:test_onePerBlock() (gas: 61287)
96+
ZenithForkTest:test_removeSequencer() (gas: 50114)
97+
ZenithForkTest:test_setUp() (gas: 8035)
98+
ZenithForkTest:test_submitBlock() (gas: 53334)
4699
ZenithTest:test_addSequencer() (gas: 98616)
47100
ZenithTest:test_badSignature() (gas: 46355)
48101
ZenithTest:test_incorrectHostBlock() (gas: 42276)

.github/workflows/test.yml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,22 @@ permissions:
1111
checks: read
1212
contents: read
1313
repository-projects: read
14-
14+
1515
jobs:
1616
solidity-base:
1717
uses: init4tech/actions/.github/workflows/solidity-base.yml@main
1818
with:
1919
gas-diff-tolerance: 2 # setting the gas diff tolerance to 2%
20+
fork-rollup:
21+
uses: init4tech/actions/.github/workflows/solidity-base.yml@main
22+
with:
23+
gas-diff-tolerance: 2 # setting the gas diff tolerance to 2%
24+
foundry-profile: rollup
25+
fork-url: ${{ vars.RU_RPC_URL }}
26+
fork-host:
27+
uses: init4tech/actions/.github/workflows/solidity-base.yml@main
28+
with:
29+
gas-diff-tolerance: 2 # setting the gas diff tolerance to 2%
30+
foundry-profile: host
31+
fork-url: ${{ vars.HOST_RPC_URL }}
32+

foundry.toml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,10 @@ out = "out"
44
libs = ["lib"]
55
evm_version = "cancun"
66

7-
# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options
7+
[profile.rollup]
8+
test= "test/rollup"
9+
10+
[profile.host]
11+
test= "test/host"
12+
13+
# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options

test/Passage.t.sol renamed to test/host/Passage.t.sol

Lines changed: 4 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
pragma solidity 0.8.26;
33

44
// test contracts
5-
import {Passage} from "../src/passage/Passage.sol";
6-
import {RollupPassage} from "../src/passage/RollupPassage.sol";
5+
import {Passage} from "../../src/passage/Passage.sol";
6+
import {RollupPassage} from "../../src/passage/RollupPassage.sol";
77
// utils
8-
import {TestERC20} from "./Helpers.t.sol";
8+
import {TestERC20} from "../Helpers.t.sol";
9+
import {SignetStdTest} from "../SignetStdTest.t.sol";
910
import {ERC20} from "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol";
1011
import {ERC20Burnable} from "openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol";
1112
import {Address} from "openzeppelin-contracts/contracts/utils/Address.sol";
1213
import {Test, console2} from "forge-std/Test.sol";
13-
import {SignetStdTest} from "./SignetStdTest.t.sol";
1414
import {IERC20} from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";
1515

1616
contract PassageTest is SignetStdTest {
@@ -153,55 +153,3 @@ contract PassageTest is SignetStdTest {
153153
target.withdraw(token, recipient, amount);
154154
}
155155
}
156-
157-
contract RollupPassageTest is SignetStdTest {
158-
using Address for address payable;
159-
160-
RollupPassage public target;
161-
address token;
162-
address recipient = address(0x123);
163-
uint256 amount = 200;
164-
165-
event Exit(address indexed hostRecipient, uint256 amount);
166-
167-
event ExitToken(address indexed hostRecipient, address indexed token, uint256 amount);
168-
169-
function setUp() public virtual {
170-
// setup target
171-
target = ROLLUP_PASSAGE;
172-
173-
// setup token
174-
token = address(ROLLUP_WETH);
175-
vm.prank(ROLLUP_MINTER);
176-
TestERC20(token).mint(address(this), amount * 10000);
177-
TestERC20(token).approve(address(target), amount * 10000);
178-
}
179-
180-
function test_receive() public {
181-
vm.expectEmit();
182-
emit Exit(address(this), amount);
183-
payable(address(target)).sendValue(amount);
184-
}
185-
186-
function test_fallback() public {
187-
vm.expectEmit();
188-
emit Exit(address(this), amount);
189-
payable(address(target)).functionCallWithValue("0xabcd", amount);
190-
}
191-
192-
function test_exit() public {
193-
vm.expectEmit();
194-
emit Exit(recipient, amount);
195-
target.exit{value: amount}(recipient);
196-
}
197-
198-
function test_exitToken() public {
199-
vm.expectEmit();
200-
emit ExitToken(recipient, token, amount);
201-
vm.expectCall(
202-
token, abi.encodeWithSelector(ERC20.transferFrom.selector, address(this), address(target), amount)
203-
);
204-
vm.expectCall(token, abi.encodeWithSelector(ERC20Burnable.burn.selector, amount));
205-
target.exitToken(recipient, token, amount);
206-
}
207-
}

test/Permit2Passage.t.sol renamed to test/host/Permit2Passage.t.sol

Lines changed: 4 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
pragma solidity 0.8.26;
33

44
// test contracts
5-
import {Passage} from "../src/passage/Passage.sol";
6-
import {RollupPassage} from "../src/passage/RollupPassage.sol";
7-
import {UsesPermit2} from "../src/UsesPermit2.sol";
5+
import {Passage} from "../../src/passage/Passage.sol";
6+
import {RollupPassage} from "../../src/passage/RollupPassage.sol";
7+
import {UsesPermit2} from "../../src/UsesPermit2.sol";
88
// utils
9-
import {Permit2Helpers, ISinglePermit, TestERC20} from "./Helpers.t.sol";
9+
import {Permit2Helpers, ISinglePermit, TestERC20} from "../Helpers.t.sol";
1010
import {ISignatureTransfer} from "permit2/src/interfaces/ISignatureTransfer.sol";
1111
import {ERC20} from "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol";
1212
import {ERC20Burnable} from "openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol";
@@ -98,65 +98,3 @@ contract PassagePermit2Test is Permit2Helpers {
9898
target.enterTokenPermit2(ROLLUP_CHAIN_ID, recipient, singlePermit);
9999
}
100100
}
101-
102-
contract RollupPassagePermit2Test is Permit2Helpers {
103-
RollupPassage public target;
104-
105-
// token consts
106-
address token;
107-
uint256 amount = 200;
108-
address recipient = address(0x123);
109-
110-
event ExitToken(address indexed hostRecipient, address indexed token, uint256 amount);
111-
112-
function setUp() public virtual {
113-
// setup RollupPassage
114-
target = ROLLUP_PASSAGE;
115-
vm.label(address(target), "rollup_passage");
116-
vm.label(address(PERMIT2), "permit2");
117-
vm.label(owner, "owner");
118-
119-
// setup token
120-
token = address(ROLLUP_WBTC);
121-
// mint tokens to owner
122-
vm.prank(ROLLUP_MINTER);
123-
TestERC20(token).mint(owner, amount * 10000);
124-
// approve permit2 from owner
125-
vm.prank(owner);
126-
TestERC20(token).approve(address(PERMIT2), amount * 10000);
127-
128-
// set basic permit details
129-
singlePermit.permit.nonce = 0;
130-
singlePermit.permit.deadline = block.timestamp;
131-
singlePermit.owner = owner;
132-
singlePermit.permit.permitted = ISignatureTransfer.TokenPermissions({token: token, amount: amount});
133-
singleTransferDetails =
134-
ISignatureTransfer.SignatureTransferDetails({to: address(target), requestedAmount: amount});
135-
136-
// construct Exit witness
137-
witness = target.exitWitness(recipient);
138-
139-
// sign permit + witness
140-
singlePermit.signature = signPermit(ownerKey, address(target), singlePermit.permit, witness);
141-
}
142-
143-
function test_exitTokenPermit2() public {
144-
vm.expectEmit();
145-
emit ExitToken(recipient, token, amount);
146-
vm.expectCall(
147-
address(PERMIT2),
148-
abi.encodeWithSelector(
149-
ISinglePermit.permitWitnessTransferFrom.selector,
150-
singlePermit.permit,
151-
singleTransferDetails,
152-
owner,
153-
witness.witnessHash,
154-
witness.witnessTypeString,
155-
singlePermit.signature
156-
)
157-
);
158-
vm.expectCall(token, abi.encodeWithSelector(ERC20.transferFrom.selector, owner, address(target), amount));
159-
vm.expectCall(token, abi.encodeWithSelector(ERC20Burnable.burn.selector, amount));
160-
target.exitTokenPermit2(recipient, singlePermit);
161-
}
162-
}

test/Transactor.t.sol renamed to test/host/Transactor.t.sol

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
pragma solidity 0.8.26;
33

44
// test contracts
5-
import {Transactor} from "../src/Transactor.sol";
6-
import {Passage} from "../src/passage/Passage.sol";
5+
import {Transactor} from "../../src/Transactor.sol";
6+
import {Passage} from "../../src/passage/Passage.sol";
77
// utils
8-
import {SignetStdTest} from "./SignetStdTest.t.sol";
8+
import {SignetStdTest} from "../SignetStdTest.t.sol";
99
import {Test, console2} from "forge-std/Test.sol";
1010

1111
contract TransactTest is SignetStdTest {

test/Zenith.t.sol renamed to test/host/Zenith.t.sol

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
pragma solidity 0.8.26;
33

44
// test contracts
5-
import {Zenith} from "../src/Zenith.sol";
5+
import {Zenith} from "../../src/Zenith.sol";
66
// utils
7-
import {SignetStdTest} from "./SignetStdTest.t.sol";
7+
import {SignetStdTest} from "../SignetStdTest.t.sol";
88
import {Test, console2} from "forge-std/Test.sol";
99

1010
contract ZenithTest is SignetStdTest {
@@ -35,6 +35,10 @@ contract ZenithTest is SignetStdTest {
3535
vm.prank(SEQUENCER_ADMIN);
3636
target.addSequencer(vm.addr(sequencerKey));
3737

38+
// advance to next block number to avoid the possibility during fork testing
39+
// that a rollup block was already submitted in the current block
40+
vm.roll(block.number + 1);
41+
3842
// set default block values
3943
header.rollupChainId = ROLLUP_CHAIN_ID;
4044
header.hostBlockNumber = block.number;

test/Orders.t.sol renamed to test/rollup/Orders.t.sol

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
pragma solidity 0.8.26;
33

44
// test contracts
5-
import {IOrders} from "../src/orders/IOrders.sol";
6-
import {RollupOrders} from "../src/orders/RollupOrders.sol";
7-
import {OrderOrigin} from "../src/orders/OrderOrigin.sol";
5+
import {IOrders} from "../../src/orders/IOrders.sol";
6+
import {RollupOrders} from "../../src/orders/RollupOrders.sol";
7+
import {OrderOrigin} from "../../src/orders/OrderOrigin.sol";
88
// utils
9-
import {TestERC20} from "./Helpers.t.sol";
9+
import {TestERC20} from "../Helpers.t.sol";
10+
import {SignetStdTest} from "../SignetStdTest.t.sol";
1011
import {ERC20} from "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol";
1112
import {Test, console2} from "forge-std/Test.sol";
12-
import {SignetStdTest} from "./SignetStdTest.t.sol";
1313

1414
contract OrdersTest is SignetStdTest {
1515
RollupOrders public target;

test/Permit2Orders.t.sol renamed to test/rollup/Permit2Orders.t.sol

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
pragma solidity 0.8.26;
33

44
// test contracts
5-
import {RollupOrders} from "../src/orders/RollupOrders.sol";
6-
import {IOrders} from "../src/orders/IOrders.sol";
7-
import {UsesPermit2} from "../src/UsesPermit2.sol";
5+
import {RollupOrders} from "../../src/orders/RollupOrders.sol";
6+
import {IOrders} from "../../src/orders/IOrders.sol";
7+
import {UsesPermit2} from "../../src/UsesPermit2.sol";
88
// utils
9-
import {Permit2Helpers, IBatchPermit, TestERC20} from "./Helpers.t.sol";
9+
import {Permit2Helpers, IBatchPermit, TestERC20} from "../Helpers.t.sol";
1010
import {ISignatureTransfer} from "permit2/src/interfaces/ISignatureTransfer.sol";
1111
import {ERC20} from "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol";
12-
import {Test, console2} from "forge-std/Test.sol";
1312
import {IERC20} from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";
13+
import {Test, console2} from "forge-std/Test.sol";
1414

1515
contract OrderOriginPermit2Test is Permit2Helpers {
1616
RollupOrders public target;

0 commit comments

Comments
 (0)