@@ -140,6 +140,114 @@ TEST(statetest_loader, tx_confusing)
140140 test::from_json<state::Transaction>(json::json::parse (input)), std::invalid_argument);
141141}
142142
143+ TEST (statetest_loader, tx_type_1)
144+ {
145+ constexpr std::string_view input = R"( {
146+ "input": "",
147+ "gas": "0",
148+ "type": "1",
149+ "value": "0",
150+ "sender": "",
151+ "to": "",
152+ "gasPrice": "0",
153+ "accessList": [
154+ {"address": "ac01", "storageKeys": []},
155+ {"address": "ac02", "storageKeys": ["fe", "00"]}
156+ ],
157+ "nonce": "0",
158+ "r": "0x1111111111111111111111111111111111111111111111111111111111111111",
159+ "s": "0x2222222222222222222222222222222222222222222222222222222222222222",
160+ "v": "1"
161+ })" ;
162+
163+ const auto tx = test::from_json<state::Transaction>(json::json::parse (input));
164+ EXPECT_EQ (tx.kind , state::Transaction::Kind::eip2930);
165+ EXPECT_TRUE (tx.data .empty ());
166+ EXPECT_EQ (tx.gas_limit , 0 );
167+ EXPECT_EQ (tx.value , 0 );
168+ EXPECT_EQ (tx.sender , 0x00_address);
169+ EXPECT_FALSE (tx.to .has_value ());
170+ EXPECT_EQ (tx.max_gas_price , 0 );
171+ EXPECT_EQ (tx.max_priority_gas_price , 0 );
172+ ASSERT_EQ (tx.access_list .size (), 2 );
173+ EXPECT_EQ (tx.access_list [0 ].first , 0xac01_address);
174+ EXPECT_EQ (tx.access_list [0 ].second .size (), 0 );
175+ EXPECT_EQ (tx.access_list [1 ].first , 0xac02_address);
176+ EXPECT_EQ (tx.access_list [1 ].second , (std::vector{0xfe_bytes32, 0x00_bytes32}));
177+ EXPECT_EQ (tx.nonce , 0 );
178+ EXPECT_EQ (tx.r , 0x1111111111111111111111111111111111111111111111111111111111111111_u256);
179+ EXPECT_EQ (tx.s , 0x2222222222222222222222222222222222222222222222222222222222222222_u256);
180+ EXPECT_EQ (tx.v , 1 );
181+ }
182+
183+ TEST (statetest_loader, invalid_tx_type)
184+ {
185+ {
186+ constexpr std::string_view input = R"( {
187+ "input": "",
188+ "gas": "0",
189+ "type": "2",
190+ "value": "0",
191+ "sender": "",
192+ "to": "",
193+ "gasPrice": "0",
194+ "accessList": [
195+ {"address": "ac01", "storageKeys": []},
196+ {"address": "ac02", "storageKeys": ["fe", "00"]}
197+ ],
198+ "nonce": "0",
199+ "r": "0x1111111111111111111111111111111111111111111111111111111111111111",
200+ "s": "0x2222222222222222222222222222222222222222222222222222222222222222",
201+ "v": "1"
202+ })" ;
203+
204+ EXPECT_THROW (
205+ test::from_json<state::Transaction>(json::json::parse (input)), std::invalid_argument);
206+ }
207+ {
208+ constexpr std::string_view input = R"( {
209+ "input": "",
210+ "gas": "0",
211+ "type": "1",
212+ "value": "0",
213+ "sender": "",
214+ "to": "",
215+ "gasPrice": "0",
216+ "nonce": "0",
217+ "r": "0x1111111111111111111111111111111111111111111111111111111111111111",
218+ "s": "0x2222222222222222222222222222222222222222222222222222222222222222",
219+ "v": "1"
220+ })" ;
221+
222+ EXPECT_THROW (
223+ test::from_json<state::Transaction>(json::json::parse (input)), std::invalid_argument);
224+ }
225+
226+ {
227+ constexpr std::string_view input = R"( {
228+ "input": "",
229+ "gas": "0",
230+ "type": "1",
231+ "value": "0",
232+ "sender": "",
233+ "to": "",
234+ "maxFeePerGas": "0",
235+ "maxPriorityFeePerGas": "0",
236+ "accessList": [
237+ {"address": "ac01", "storageKeys": []},
238+ {"address": "ac02", "storageKeys": ["fe", "00"]}
239+ ],
240+ "nonce": "0",
241+ "r": "0x1111111111111111111111111111111111111111111111111111111111111111",
242+ "s": "0x2222222222222222222222222222222222222222222222222222222222222222",
243+ "v": "1"
244+ })" ;
245+
246+ EXPECT_THROW (
247+ test::from_json<state::Transaction>(json::json::parse (input)), std::invalid_argument);
248+ }
249+ }
250+
143251namespace evmone ::test
144252{
145253// This function is used only by the following test case and in `statetest_loader.cpp` where it is
0 commit comments