@@ -3,13 +3,14 @@ use crate::{
3
3
execution, post_execution, pre_execution, validation, Frame , FrameInitOrResult , FrameOrResult ,
4
4
FrameResult , ItemOrResult ,
5
5
} ;
6
+ use context:: result:: FromStringError ;
6
7
use context:: JournalOutput ;
8
+ use context_interface:: context:: ContextError ;
7
9
use context_interface:: ContextTr ;
8
10
use context_interface:: {
9
11
result:: { HaltReasonTr , InvalidHeader , InvalidTransaction , ResultAndState } ,
10
12
Cfg , Database , JournalTr , Transaction ,
11
13
} ;
12
- use core:: mem;
13
14
use interpreter:: { FrameInput , Gas , InitialAndFloorGas } ;
14
15
use precompile:: PrecompileError ;
15
16
use std:: { vec, vec:: Vec } ;
@@ -19,6 +20,7 @@ pub trait EvmTrError<EVM: EvmTr>:
19
20
+ From < InvalidHeader >
20
21
+ From < <<EVM :: Context as ContextTr >:: Db as Database >:: Error >
21
22
+ From < PrecompileError >
23
+ + FromStringError
22
24
{
23
25
}
24
26
27
29
T : From < InvalidTransaction >
28
30
+ From < InvalidHeader >
29
31
+ From < <<EVM :: Context as ContextTr >:: Db as Database >:: Error >
30
- + From < PrecompileError > ,
32
+ + From < PrecompileError >
33
+ + FromStringError ,
31
34
> EvmTrError < EVM > for T
32
35
{
33
36
}
@@ -431,9 +434,13 @@ pub trait Handler {
431
434
evm : & mut Self :: Evm ,
432
435
result : <Self :: Frame as Frame >:: FrameResult ,
433
436
) -> Result < ResultAndState < Self :: HaltReason > , Self :: Error > {
434
- let ctx = evm. ctx ( ) ;
435
- mem:: replace ( ctx. error ( ) , Ok ( ( ) ) ) ?;
436
- let output = post_execution:: output ( ctx, result) ;
437
+ match core:: mem:: replace ( evm. ctx ( ) . error ( ) , Ok ( ( ) ) ) {
438
+ Err ( ContextError :: Db ( e) ) => return Err ( e. into ( ) ) ,
439
+ Err ( ContextError :: Custom ( e) ) => return Err ( Self :: Error :: from_string ( e) ) ,
440
+ Ok ( _) => ( ) ,
441
+ }
442
+
443
+ let output = post_execution:: output ( evm. ctx ( ) , result) ;
437
444
438
445
// Clear journal
439
446
evm. ctx ( ) . journal ( ) . clear ( ) ;
0 commit comments