Skip to content

Commit 688f46f

Browse files
authored
refactor: update tests with SignetStd for easy local/fork testing (#84)
* forge update * WIP: refactor tests with SignetStd for easy local/fork testing * outstanding TODOs * feat: etch WETH and PERMIT2 addresses in local tests * add actual admins for Pecorino * update gas snapshot * remove todos * fix: do zenith tests * fix: test tweaks * fix: new pecorino values * snapshot
1 parent 1eeb14a commit 688f46f

14 files changed

+528
-365
lines changed

.gas-snapshot

Lines changed: 54 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,54 @@
1-
GnosisSafeTest:test_gnosis_receive() (gas: 15927)
2-
OrderOriginPermit2Test:test_fillPermit2() (gas: 223464)
3-
OrderOriginPermit2Test:test_fillPermit2_multi() (gas: 1007964)
4-
OrderOriginPermit2Test:test_initiatePermit2() (gas: 233946)
5-
OrderOriginPermit2Test:test_initiatePermit2_multi() (gas: 984506)
6-
OrdersTest:test_fill_ERC20() (gas: 71459)
7-
OrdersTest:test_fill_ETH() (gas: 69090)
8-
OrdersTest:test_fill_both() (gas: 169814)
9-
OrdersTest:test_fill_multiETH() (gas: 132830)
10-
OrdersTest:test_fill_underflowETH() (gas: 115817)
11-
OrdersTest:test_initiate_ERC20() (gas: 82526)
12-
OrdersTest:test_initiate_ETH() (gas: 45597)
13-
OrdersTest:test_initiate_both() (gas: 119816)
14-
OrdersTest:test_initiate_multiERC20() (gas: 175432)
15-
OrdersTest:test_initiate_multiETH() (gas: 76000)
16-
OrdersTest:test_orderExpired() (gas: 28383)
17-
OrdersTest:test_sweepERC20() (gas: 60695)
18-
OrdersTest:test_sweepETH() (gas: 83379)
19-
OrdersTest:test_underflowETH() (gas: 63976)
20-
PassagePermit2Test:test_disallowedEnterPermit2() (gas: 691528)
21-
PassagePermit2Test:test_enterTokenPermit2() (gas: 144090)
22-
PassageTest:test_configureEnter() (gas: 128735)
23-
PassageTest:test_disallowedEnter() (gas: 57503)
24-
PassageTest:test_enter() (gas: 25519)
25-
PassageTest:test_enterToken() (gas: 65326)
26-
PassageTest:test_enterToken_defaultChain() (gas: 63912)
27-
PassageTest:test_enter_defaultChain() (gas: 24055)
28-
PassageTest:test_fallback() (gas: 22093)
29-
PassageTest:test_onlyTokenAdmin() (gas: 17173)
30-
PassageTest:test_receive() (gas: 21487)
31-
PassageTest:test_setUp() (gas: 17000)
32-
PassageTest:test_withdraw() (gas: 60168)
33-
RollupPassagePermit2Test:test_exitTokenPermit2() (gas: 127878)
34-
RollupPassageTest:test_exit() (gas: 22403)
35-
RollupPassageTest:test_exitToken() (gas: 50824)
36-
RollupPassageTest:test_fallback() (gas: 20509)
37-
RollupPassageTest:test_receive() (gas: 19948)
38-
TransactTest:test_configureGas() (gas: 22828)
39-
TransactTest:test_enterTransact() (gas: 103979)
40-
TransactTest:test_onlyGasAdmin() (gas: 8810)
41-
TransactTest:test_setUp() (gas: 17494)
42-
TransactTest:test_transact() (gas: 101449)
43-
TransactTest:test_transact_defaultChain() (gas: 100562)
44-
TransactTest:test_transact_globalGasLimit() (gas: 104972)
45-
TransactTest:test_transact_perTransactGasLimit() (gas: 32776)
46-
ZenithTest:test_addSequencer() (gas: 88101)
47-
ZenithTest:test_badSignature() (gas: 37061)
48-
ZenithTest:test_incorrectHostBlock() (gas: 35075)
49-
ZenithTest:test_notSequencer() (gas: 33887)
50-
ZenithTest:test_notSequencerAdmin() (gas: 10125)
51-
ZenithTest:test_onePerBlock() (gas: 68153)
52-
ZenithTest:test_removeSequencer() (gas: 39476)
53-
ZenithTest:test_setUp() (gas: 8366)
54-
ZenithTest:test_submitBlock() (gas: 63313)
1+
GnosisSafeTest:test_gnosis_receive() (gas: 16106)
2+
OrderOriginPermit2Test:test_fillPermit2() (gas: 174723)
3+
OrderOriginPermit2Test:test_fillPermit2_multi() (gas: 510586)
4+
OrderOriginPermit2Test:test_initiatePermit2() (gas: 187081)
5+
OrderOriginPermit2Test:test_initiatePermit2_multi() (gas: 470943)
6+
OrdersTest:test_fill_ERC20() (gas: 76273)
7+
OrdersTest:test_fill_ETH() (gas: 73740)
8+
OrdersTest:test_fill_both() (gas: 179143)
9+
OrdersTest:test_fill_multiETH() (gas: 141885)
10+
OrdersTest:test_fill_underflowETH() (gas: 120789)
11+
OrdersTest:test_initiate_ERC20() (gas: 90588)
12+
OrdersTest:test_initiate_ETH() (gas: 53217)
13+
OrdersTest:test_initiate_both() (gas: 130158)
14+
OrdersTest:test_initiate_multiERC20() (gas: 186451)
15+
OrdersTest:test_initiate_multiETH() (gas: 86339)
16+
OrdersTest:test_orderExpired() (gas: 32846)
17+
OrdersTest:test_sweepERC20() (gas: 62965)
18+
OrdersTest:test_sweepETH() (gas: 89995)
19+
OrdersTest:test_underflowETH() (gas: 69404)
20+
PassagePermit2Test:test_disallowedEnterPermit2() (gas: 1130187)
21+
PassagePermit2Test:test_enterTokenPermit2() (gas: 150794)
22+
PassageTest:test_configureEnter() (gas: 141651)
23+
PassageTest:test_disallowedEnter() (gas: 58928)
24+
PassageTest:test_enter() (gas: 26523)
25+
PassageTest:test_enterToken() (gas: 66880)
26+
PassageTest:test_enterToken_defaultChain() (gas: 65384)
27+
PassageTest:test_enter_defaultChain() (gas: 24949)
28+
PassageTest:test_fallback() (gas: 22784)
29+
PassageTest:test_onlyTokenAdmin() (gas: 19145)
30+
PassageTest:test_receive() (gas: 22222)
31+
PassageTest:test_setUp() (gas: 23289)
32+
PassageTest:test_withdraw() (gas: 64486)
33+
RollupPassagePermit2Test:test_exitTokenPermit2() (gas: 135717)
34+
RollupPassageTest:test_exit() (gas: 23114)
35+
RollupPassageTest:test_exitToken() (gas: 53266)
36+
RollupPassageTest:test_fallback() (gas: 20910)
37+
RollupPassageTest:test_receive() (gas: 20393)
38+
TransactTest:test_configureGas() (gas: 27486)
39+
TransactTest:test_enterTransact() (gas: 127464)
40+
TransactTest:test_onlyGasAdmin() (gas: 9895)
41+
TransactTest:test_setUp() (gas: 23757)
42+
TransactTest:test_transact() (gas: 107567)
43+
TransactTest:test_transact_defaultChain() (gas: 106574)
44+
TransactTest:test_transact_globalGasLimit() (gas: 117828)
45+
TransactTest:test_transact_perTransactGasLimit() (gas: 34574)
46+
ZenithTest:test_addSequencer() (gas: 98616)
47+
ZenithTest:test_badSignature() (gas: 46355)
48+
ZenithTest:test_incorrectHostBlock() (gas: 42276)
49+
ZenithTest:test_notSequencer() (gas: 39566)
50+
ZenithTest:test_notSequencerAdmin() (gas: 11279)
51+
ZenithTest:test_onePerBlock() (gas: 78387)
52+
ZenithTest:test_removeSequencer() (gas: 50114)
53+
ZenithTest:test_setUp() (gas: 8035)
54+
ZenithTest:test_submitBlock() (gas: 70434)

lib/openzeppelin-contracts

lib/safe-smart-account

Submodule safe-smart-account updated 224 files

lib/stablecoin-evm

Submodule stablecoin-evm updated 221 files

test/Helpers.t.sol

Lines changed: 12 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,28 @@ pragma solidity 0.8.26;
44
// system contracts
55
import {Zenith} from "../src/Zenith.sol";
66
import {UsesPermit2} from "../src/UsesPermit2.sol";
7+
import {RollupOrders} from "../src/orders/RollupOrders.sol";
78
// deps
8-
import {ERC20} from "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol";
9-
import {ERC20Burnable} from "openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol";
109
import {ISignatureTransfer} from "permit2/src/interfaces/ISignatureTransfer.sol";
1110
import {Test, console2} from "forge-std/Test.sol";
11+
import {SignetStdTest, TestERC20} from "./SignetStdTest.t.sol";
1212

13-
contract TestERC20 is ERC20Burnable {
14-
constructor(string memory name_, string memory symbol_) ERC20(name_, symbol_) {}
15-
16-
function mint(address recipient, uint256 amount) external {
17-
_mint(recipient, amount);
18-
}
19-
}
20-
21-
contract Permit2Helpers is Test {
22-
address permit2Contract;
23-
13+
contract Permit2Helpers is SignetStdTest {
2414
/// @notice the address signing the Permit messages and its pk
2515
uint256 ownerKey = 123;
2616
address owner = vm.addr(ownerKey);
2717

2818
// permit consts
2919
UsesPermit2.Witness witness;
3020

21+
// single permit
22+
UsesPermit2.Permit2 singlePermit;
23+
ISignatureTransfer.SignatureTransferDetails singleTransferDetails;
24+
25+
// batch permit
26+
UsesPermit2.Permit2Batch batchPermit;
27+
ISignatureTransfer.SignatureTransferDetails[] batchTransferDetails;
28+
3129
bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;
3230
uint256 private immutable _CACHED_CHAIN_ID;
3331

@@ -50,18 +48,6 @@ contract Permit2Helpers is Test {
5048
_CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME);
5149
}
5250

53-
function _setUpPermit2(address token, uint256 amount) internal {
54-
vm.label(owner, "owner");
55-
56-
// setup permit2 contract
57-
permit2Contract = 0x000000000022D473030F116dDEE9F6B43aC78BA3;
58-
vm.label(address(permit2Contract), "permit2");
59-
60-
// approve permit2
61-
vm.prank(owner);
62-
TestERC20(token).approve(address(permit2Contract), amount * 10000);
63-
}
64-
6551
/// @notice given a Permit and a Witness, produce a signature from the `owner`
6652
function signPermit(
6753
uint256 signingKey,
@@ -154,7 +140,7 @@ contract Permit2Helpers is Test {
154140

155141
/// @notice Builds a domain separator using the current chainId and contract address.
156142
function _buildDomainSeparator(bytes32 typeHash, bytes32 nameHash) private view returns (bytes32) {
157-
return keccak256(abi.encode(typeHash, nameHash, block.chainid, permit2Contract));
143+
return keccak256(abi.encode(typeHash, nameHash, block.chainid, PERMIT2));
158144
}
159145

160146
/// @notice Creates an EIP-712 typed data hash
@@ -187,22 +173,3 @@ interface IBatchPermit {
187173
bytes calldata /*signature*/
188174
) external;
189175
}
190-
191-
contract HelpersTest is Test {
192-
Zenith public target;
193-
194-
function setUp() public {
195-
vm.createSelectFork("https://rpc.holesky.ethpandaops.io");
196-
target = new Zenith(0x29403F107781ea45Bf93710abf8df13F67f2008f);
197-
}
198-
199-
function check_signature() public {
200-
bytes32 hash = 0xdcd0af9a45fa82dcdd1e4f9ef703d8cd459b6950c0638154c67117e86facf9c1;
201-
uint8 v = 28;
202-
bytes32 r = 0xb89764d107f812dbbebb925711b320d336ff8d03f08570f051123df86334f3f5;
203-
bytes32 s = 0x394cd592577ce6307154045607b9b18ecc1de0eb636e996981477c2d9b1a7675;
204-
address signer = ecrecover(hash, v, r, s);
205-
vm.label(signer, "recovered signer");
206-
assertEq(signer, 0x5b0517Dc94c413a5871536872605522E54C85a03);
207-
}
208-
}

test/Orders.t.sol

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,20 @@ import {OrderOrigin} from "../src/orders/OrderOrigin.sol";
99
import {TestERC20} from "./Helpers.t.sol";
1010
import {ERC20} from "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol";
1111
import {Test, console2} from "forge-std/Test.sol";
12+
import {SignetStdTest} from "./SignetStdTest.t.sol";
1213

13-
contract OrdersTest is Test {
14+
contract OrdersTest is SignetStdTest {
1415
RollupOrders public target;
16+
1517
IOrders.Input[] public inputs;
1618
IOrders.Output[] public outputs;
1719

1820
address token;
1921
address token2;
20-
uint32 chainId = 3;
22+
2123
address recipient = address(0x123);
2224
uint256 amount = 200;
23-
uint256 deadline = block.timestamp;
25+
uint256 deadline;
2426

2527
event Filled(IOrders.Output[] outputs);
2628

@@ -29,24 +31,28 @@ contract OrdersTest is Test {
2931
event Sweep(address indexed recipient, address indexed token, uint256 amount);
3032

3133
function setUp() public virtual {
32-
target = new RollupOrders(address(0));
34+
target = ROLLUP_ORDERS;
3335

34-
// setup token
35-
token = address(new TestERC20("hi", "HI"));
36+
// setup first token
37+
token = address(ROLLUP_WBTC);
38+
vm.prank(ROLLUP_MINTER);
3639
TestERC20(token).mint(address(this), amount * 10000);
3740
TestERC20(token).approve(address(target), amount * 10000);
3841

3942
// setup second token
40-
token2 = address(new TestERC20("bye", "BYE"));
43+
token2 = address(ROLLUP_WETH);
44+
vm.prank(ROLLUP_MINTER);
4145
TestERC20(token2).mint(address(this), amount * 10000);
4246
TestERC20(token2).approve(address(target), amount * 10000);
4347

4448
// setup simple Order Inputs/Outputs
4549
IOrders.Input memory input = IOrders.Input(token, amount);
4650
inputs.push(input);
4751

48-
IOrders.Output memory output = IOrders.Output(token, amount, recipient, chainId);
52+
IOrders.Output memory output = IOrders.Output(token, amount, recipient, ROLLUP_CHAIN_ID);
4953
outputs.push(output);
54+
55+
deadline = block.timestamp;
5056
}
5157

5258
// input ERC20
@@ -143,9 +149,6 @@ contract OrdersTest is Test {
143149
}
144150

145151
function test_sweepETH() public {
146-
// set self as Builder
147-
vm.coinbase(address(this));
148-
149152
// initiate an ETH order
150153
inputs[0].token = address(0);
151154
target.initiate{value: amount}(deadline, inputs, outputs);
@@ -161,9 +164,6 @@ contract OrdersTest is Test {
161164
}
162165

163166
function test_sweepERC20() public {
164-
// set self as Builder
165-
vm.coinbase(address(this));
166-
167167
// send ERC20 to the contract
168168
TestERC20(token).transfer(address(target), amount);
169169

@@ -194,7 +194,7 @@ contract OrdersTest is Test {
194194

195195
function test_fill_both() public {
196196
// add ETH output
197-
outputs.push(IOrders.Output(address(0), amount * 2, recipient, chainId));
197+
outputs.push(IOrders.Output(address(0), amount * 2, recipient, ROLLUP_CHAIN_ID));
198198

199199
// expect Outputs are filled, ERC20 is transferred
200200
vm.expectEmit();
@@ -211,7 +211,7 @@ contract OrdersTest is Test {
211211
// change first output to ETH
212212
outputs[0].token = address(0);
213213
// add second ETH oputput
214-
outputs.push(IOrders.Output(address(0), amount * 2, recipient, chainId));
214+
outputs.push(IOrders.Output(address(0), amount * 2, recipient, ROLLUP_CHAIN_ID));
215215

216216
// expect Order event is initiated
217217
vm.expectEmit();
@@ -226,7 +226,7 @@ contract OrdersTest is Test {
226226
// change first output to ETH
227227
outputs[0].token = address(0);
228228
// add second ETH output
229-
outputs.push(IOrders.Output(address(0), 1, recipient, chainId));
229+
outputs.push(IOrders.Output(address(0), 1, recipient, ROLLUP_CHAIN_ID));
230230

231231
// total ETH outputs should be `amount` + 1; function should underflow only sending `amount`
232232
vm.expectRevert();

0 commit comments

Comments
 (0)