1
+ // SPDX-License-Identifier: Apache 2
2
+
3
+ pragma solidity ^ 0.8.24 ;
4
+
5
+ import "forge-std/Test.sol " ;
6
+
7
+ import { BytesParsing } from "wormhole-sdk/libraries/BytesParsing.sol " ;
8
+ import { PermitParsing } from "wormhole-sdk/libraries/PermitParsing.sol " ;
9
+
10
+ contract PermitParsingTest is Test {
11
+ using BytesParsing for bytes ;
12
+
13
+ function parsePermit (
14
+ bytes calldata params ,
15
+ uint offset
16
+ ) external pure returns (uint256 , uint256 , bytes32 , bytes32 , uint8 , uint ) {
17
+ return PermitParsing.asPermitCdUnchecked (params, offset);
18
+ }
19
+
20
+ function parsePermit2Permit (
21
+ bytes calldata params ,
22
+ uint offset
23
+ ) external pure returns (uint160 , uint48 , uint48 , uint256 , bytes memory , uint ) {
24
+ return PermitParsing.asPermit2PermitCdUnchecked (params, offset);
25
+ }
26
+
27
+ function parsePermit2Transfer (
28
+ bytes calldata params ,
29
+ uint offset
30
+ ) external pure returns (uint256 , uint256 , uint256 , bytes memory , uint ) {
31
+ return PermitParsing.asPermit2TransferCdUnchecked (params, offset);
32
+ }
33
+
34
+ function testParsePermit (
35
+ uint256 value ,
36
+ uint256 deadline ,
37
+ bytes32 r ,
38
+ bytes32 s ,
39
+ uint8 v
40
+ ) public {
41
+ bytes memory params = abi.encodePacked (value, deadline, r, s, v);
42
+
43
+ (
44
+ uint256 _value ,
45
+ uint256 _deadline ,
46
+ bytes32 _r ,
47
+ bytes32 _s ,
48
+ uint8 _v ,
49
+ uint offset
50
+ ) = PermitParsing.asPermitUnchecked (params, 0 );
51
+ assertEq (_value, value);
52
+ assertEq (_deadline, deadline);
53
+ assertEq (_r, r);
54
+ assertEq (_s, s);
55
+ assertEq (_v, v);
56
+ assertEq (offset, params.length );
57
+
58
+ (
59
+ _value,
60
+ _deadline,
61
+ _r,
62
+ _s,
63
+ _v,
64
+ offset
65
+ ) = this .parsePermit (params, 0 );
66
+ assertEq (_value, value);
67
+ assertEq (_deadline, deadline);
68
+ assertEq (_r, r);
69
+ assertEq (_s, s);
70
+ assertEq (_v, v);
71
+ assertEq (offset, params.length );
72
+ }
73
+
74
+ function testParsePermit2Permit (
75
+ uint160 amount ,
76
+ uint48 expiration ,
77
+ uint48 nonce ,
78
+ uint256 sigDeadline ,
79
+ bytes memory signature
80
+ ) public {
81
+ vm.assume (signature.length == 65 );
82
+ bytes memory params = abi.encodePacked (amount, expiration, nonce, sigDeadline, signature);
83
+
84
+ (
85
+ uint160 _amount ,
86
+ uint48 _expiration ,
87
+ uint48 _nonce ,
88
+ uint256 _sigDeadline ,
89
+ bytes memory _signature ,
90
+ uint offset
91
+ ) = PermitParsing.asPermit2PermitUnchecked (params, 0 );
92
+ assertEq (_amount, amount);
93
+ assertEq (_expiration, expiration);
94
+ assertEq (_nonce, nonce);
95
+ assertEq (_sigDeadline, sigDeadline);
96
+ assertEq (_signature, signature);
97
+ assertEq (offset, params.length );
98
+
99
+
100
+ (
101
+ _amount,
102
+ _expiration,
103
+ _nonce,
104
+ _sigDeadline,
105
+ _signature,
106
+ offset
107
+ ) = this .parsePermit2Permit (params, 0 );
108
+ assertEq (_amount, amount);
109
+ assertEq (_expiration, expiration);
110
+ assertEq (_nonce, nonce);
111
+ assertEq (_sigDeadline, sigDeadline);
112
+ assertEq (_signature, signature);
113
+ assertEq (offset, params.length );
114
+ }
115
+
116
+ function testParsePermit2Transfer (
117
+ uint256 amount ,
118
+ uint256 nonce ,
119
+ uint256 sigDeadline ,
120
+ bytes memory signature
121
+ ) public {
122
+ vm.assume (signature.length == 65 );
123
+ bytes memory params = abi.encodePacked (amount, nonce, sigDeadline, signature);
124
+
125
+ (
126
+ uint256 _amount ,
127
+ uint256 _nonce ,
128
+ uint256 _sigDeadline ,
129
+ bytes memory _signature ,
130
+ uint offset
131
+ ) = PermitParsing.asPermit2TransferUnchecked (params, 0 );
132
+ assertEq (_amount, amount);
133
+ assertEq (_nonce, nonce);
134
+ assertEq (_sigDeadline, sigDeadline);
135
+ assertEq (_signature, signature);
136
+ assertEq (offset, params.length );
137
+
138
+ (
139
+ _amount,
140
+ _nonce,
141
+ _sigDeadline,
142
+ _signature,
143
+ offset
144
+ ) = this .parsePermit2Transfer (params, 0 );
145
+ assertEq (_amount, amount);
146
+ assertEq (_nonce, nonce);
147
+ assertEq (_sigDeadline, sigDeadline);
148
+ assertEq (_signature, signature);
149
+ assertEq (offset, params.length );
150
+ }
151
+ }
0 commit comments