@@ -257,6 +257,15 @@ impl<'a, 'b, B: Backend, P: PrecompileSet> SputnikExecutor<CheatcodeStackState<'
257
257
) ) ] ) ,
258
258
)
259
259
}
260
+
261
+ if !self . state ( ) . expected_emits . is_empty ( ) {
262
+ return (
263
+ ExitReason :: Revert ( ExitRevert :: Reverted ) ,
264
+ ethers:: abi:: encode ( & [ Token :: String (
265
+ "Expected an emit, but no logs were emitted afterward" . to_string ( ) ,
266
+ ) ] ) ,
267
+ )
268
+ }
260
269
( s, v)
261
270
}
262
271
Capture :: Trap ( _) => {
@@ -668,12 +677,21 @@ impl<'a, 'b, B: Backend, P: PrecompileSet> CheatcodeStackExecutor<'a, 'b, B, P>
668
677
outdir. join ( format ! ( "{}/{}.json" , contract_file, contract_name) )
669
678
} ;
670
679
671
- let mut file = File :: open ( path) . unwrap ( ) ;
672
680
let mut data = String :: new ( ) ;
673
- file. read_to_string ( & mut data) . unwrap ( ) ;
681
+ match File :: open ( path) {
682
+ Ok ( mut file) => match file. read_to_string ( & mut data) {
683
+ Ok ( _) => { }
684
+ Err ( e) => return evm_error ( & e. to_string ( ) ) ,
685
+ } ,
686
+ Err ( e) => return evm_error ( & e. to_string ( ) ) ,
687
+ }
674
688
675
- let contract_file: ContractFile = serde_json:: from_str ( & data) . unwrap ( ) ;
676
- res = ethers:: abi:: encode ( & [ Token :: Bytes ( contract_file. bin . to_vec ( ) ) ] ) ;
689
+ match serde_json:: from_str :: < ContractFile > ( & data) {
690
+ Ok ( contract_file) => {
691
+ res = ethers:: abi:: encode ( & [ Token :: Bytes ( contract_file. bin . to_vec ( ) ) ] ) ;
692
+ }
693
+ Err ( e) => return evm_error ( & e. to_string ( ) ) ,
694
+ }
677
695
}
678
696
HEVMCalls :: Addr ( inner) => {
679
697
self . add_debug ( CheatOp :: ADDR ) ;
@@ -711,7 +729,11 @@ impl<'a, 'b, B: Backend, P: PrecompileSet> CheatcodeStackExecutor<'a, 'b, B, P>
711
729
// The EVM precompile does not use EIP-155
712
730
let sig = wallet. sign_hash ( digest. into ( ) , false ) ;
713
731
714
- let recovered = sig. recover ( digest) . unwrap ( ) ;
732
+ let recovered = match sig. recover ( digest) {
733
+ Ok ( rec) => rec,
734
+ Err ( e) => return evm_error ( & e. to_string ( ) ) ,
735
+ } ;
736
+
715
737
assert_eq ! ( recovered, wallet. address( ) ) ;
716
738
717
739
let mut r_bytes = [ 0u8 ; 32 ] ;
@@ -1557,6 +1579,9 @@ impl<'a, 'b, B: Backend, P: PrecompileSet> Handler for CheatcodeStackExecutor<'a
1557
1579
. all ( |expected| expected. found )
1558
1580
{
1559
1581
return evm_error ( "Log != expected log" )
1582
+ } else {
1583
+ // empty out expected_emits after successfully capturing all of them
1584
+ self . state_mut ( ) . expected_emits = Vec :: new ( ) ;
1560
1585
}
1561
1586
1562
1587
self . expected_revert ( ExpectRevertReturn :: Call ( res) , expected_revert) . into_call_inner ( )
@@ -1770,6 +1795,9 @@ impl<'a, 'b, B: Backend, P: PrecompileSet> Handler for CheatcodeStackExecutor<'a
1770
1795
. all ( |expected| expected. found )
1771
1796
{
1772
1797
return revert_return_evm ( false , None , || "Log != expected log" ) . into_create_inner ( )
1798
+ } else {
1799
+ // empty out expected_emits after successfully capturing all of them
1800
+ self . state_mut ( ) . expected_emits = Vec :: new ( ) ;
1773
1801
}
1774
1802
1775
1803
self . expected_revert ( ExpectRevertReturn :: Create ( res) , expected_revert) . into_create_inner ( )
0 commit comments