@@ -223,14 +223,55 @@ impl Tx for Signed<alloy::consensus::TxEip4844Variant> {
223
223
}
224
224
}
225
225
226
+ impl Tx for Signed < alloy:: consensus:: TxEip7702 > {
227
+ fn fill_tx_env ( & self , tx_env : & mut TxEnv ) {
228
+ let TxEnv {
229
+ tx_type,
230
+ caller,
231
+ gas_limit,
232
+ gas_price,
233
+ kind,
234
+ value,
235
+ data,
236
+ nonce,
237
+ chain_id,
238
+ access_list,
239
+ gas_priority_fee,
240
+ blob_hashes,
241
+ max_fee_per_blob_gas,
242
+ authorization_list,
243
+ } = tx_env;
244
+ * tx_type = TxType :: Eip7702 as u8 ;
245
+ * caller = self . recover_signer ( ) . unwrap ( ) ;
246
+ * gas_limit = self . tx ( ) . gas_limit ;
247
+ * gas_price = self . tx ( ) . max_fee_per_gas ;
248
+ * kind = self . tx ( ) . to . into ( ) ;
249
+ * value = self . tx ( ) . value ;
250
+ * data = self . tx ( ) . input . clone ( ) ;
251
+ * nonce = self . tx ( ) . nonce ;
252
+ * chain_id = Some ( self . tx ( ) . chain_id ) ;
253
+ access_list. clone_from ( & self . tx ( ) . access_list ) ;
254
+ * gas_priority_fee = Some ( self . tx ( ) . max_priority_fee_per_gas ) ;
255
+ blob_hashes. clear ( ) ;
256
+ * max_fee_per_blob_gas = 0 ;
257
+ * authorization_list = self
258
+ . tx ( )
259
+ . authorization_list
260
+ . iter ( )
261
+ . cloned ( )
262
+ . map ( revm:: context:: either:: Either :: Left )
263
+ . collect ( ) ;
264
+ }
265
+ }
266
+
226
267
impl Tx for alloy:: consensus:: TxEnvelope {
227
268
fn fill_tx_env ( & self , tx_env : & mut TxEnv ) {
228
269
match self {
229
270
Self :: Legacy ( t) => t. fill_tx_env ( tx_env) ,
230
271
Self :: Eip2930 ( t) => t. fill_tx_env ( tx_env) ,
231
272
Self :: Eip1559 ( t) => t. fill_tx_env ( tx_env) ,
232
273
Self :: Eip4844 ( t) => t. fill_tx_env ( tx_env) ,
233
- _ => panic ! ( "Unsupported transaction type" ) ,
274
+ Self :: Eip7702 ( t ) => t . fill_tx_env ( tx_env ) ,
234
275
}
235
276
}
236
277
}
0 commit comments