@@ -6,16 +6,15 @@ use crate::{
66 DebugError ,
77 types:: { TraceBlockParams , TraceTransactionParams } ,
88 } ,
9- eth:: helpers:: { CfgFiller , await_handler, response_tri } ,
9+ eth:: helpers:: { CfgFiller , await_handler} ,
1010} ;
11- use ajj:: { HandlerCtx , ResponsePayload } ;
11+ use ajj:: HandlerCtx ;
1212use alloy:: {
1313 consensus:: BlockHeader ,
1414 eips:: BlockId ,
1515 rpc:: types:: trace:: geth:: { GethTrace , TraceResult } ,
1616} ;
1717use itertools:: Itertools ;
18- use signet_evm:: EvmErrored ;
1918use signet_hot:: { HotKv , model:: HotKvRead } ;
2019use signet_types:: MagicSig ;
2120use tracing:: Instrument ;
@@ -26,13 +25,13 @@ pub(super) async fn trace_block<T, H>(
2625 hctx : HandlerCtx ,
2726 TraceBlockParams ( id, opts) : TraceBlockParams < T > ,
2827 ctx : StorageRpcCtx < H > ,
29- ) -> ResponsePayload < Vec < TraceResult > , DebugError >
28+ ) -> Result < Vec < TraceResult > , DebugError >
3029where
3130 T : Into < BlockId > ,
3231 H : HotKv + Send + Sync + ' static ,
3332 <H :: RoTx as HotKvRead >:: Error : DBErrorMarker ,
3433{
35- let opts = response_tri ! ( opts. ok_or( DebugError :: InvalidTracerConfig ) ) ;
34+ let opts = opts. ok_or ( DebugError :: InvalidTracerConfig ) ? ;
3635
3736 // Acquire a tracing semaphore permit to limit concurrent debug
3837 // requests. The permit is held for the entire handler lifetime and
@@ -44,41 +43,37 @@ where
4443
4544 let fut = async move {
4645 let cold = ctx. cold ( ) ;
47- let block_num = response_tri ! ( ctx. resolve_block_id( id) . map_err( |e| {
46+ let block_num = ctx. resolve_block_id ( id) . map_err ( |e| {
4847 tracing:: warn!( error = %e, ?id, "block resolution failed" ) ;
49- DebugError :: BlockNotFound ( id )
50- } ) ) ;
48+ DebugError :: Resolve ( e )
49+ } ) ? ;
5150
52- let sealed =
53- response_tri ! ( ctx. resolve_header( BlockId :: Number ( block_num. into( ) ) ) . map_err( |e| {
54- tracing:: warn!( error = %e, block_num, "header resolution failed" ) ;
55- DebugError :: BlockNotFound ( id)
56- } ) ) ;
51+ let sealed = ctx. resolve_header ( BlockId :: Number ( block_num. into ( ) ) ) . map_err ( |e| {
52+ tracing:: warn!( error = %e, block_num, "header resolution failed" ) ;
53+ DebugError :: Resolve ( e)
54+ } ) ?;
5755
5856 let Some ( sealed) = sealed else {
59- return ResponsePayload :: internal_error_message (
60- format ! ( "block not found: {id}" ) . into ( ) ,
61- ) ;
57+ return Err ( DebugError :: BlockNotFound ( id) ) ;
6258 } ;
6359
6460 let block_hash = sealed. hash ( ) ;
6561 let header = sealed. into_inner ( ) ;
6662
67- let txs = response_tri ! ( cold. get_transactions_in_block( block_num) . await . map_err( |e| {
63+ let txs = cold. get_transactions_in_block ( block_num) . await . map_err ( |e| {
6864 tracing:: warn!( error = %e, block_num, "cold storage read failed" ) ;
6965 DebugError :: from ( e)
70- } ) ) ;
66+ } ) ? ;
7167
7268 tracing:: debug!( number = header. number, "Loaded block" ) ;
7369
7470 let mut frames = Vec :: with_capacity ( txs. len ( ) ) ;
7571
7672 // State BEFORE this block.
77- let db =
78- response_tri ! ( ctx. revm_state_at_height( header. number. saturating_sub( 1 ) ) . map_err( |e| {
79- tracing:: warn!( error = %e, block_num, "hot storage read failed" ) ;
80- DebugError :: from( e)
81- } ) ) ;
73+ let db = ctx. revm_state_at_height ( header. number . saturating_sub ( 1 ) ) . map_err ( |e| {
74+ tracing:: warn!( error = %e, block_num, "hot storage read failed" ) ;
75+ DebugError :: from ( e)
76+ } ) ?;
8277
8378 let spec_id = ctx. spec_id_for_header ( & header) ;
8479 let mut evm = signet_evm:: signet_evm ( db, ctx. constants ( ) . clone ( ) ) ;
@@ -100,30 +95,33 @@ where
10095
10196 let t = trevm. fill_tx ( tx) ;
10297 let frame;
103- ( frame, trevm) = response_tri ! ( crate :: debug:: tracer:: trace( t, & opts, tx_info) ) ;
98+ ( frame, trevm) = crate :: debug:: tracer:: trace ( t, & opts, tx_info) ? ;
10499 frames. push ( TraceResult :: Success { result : frame, tx_hash : Some ( * tx. tx_hash ( ) ) } ) ;
105100
106101 tracing:: debug!( tx_index = idx, tx_hash = ?tx. tx_hash( ) , "Traced transaction" ) ;
107102 }
108103
109- ResponsePayload ( Ok ( frames) )
104+ Ok ( frames)
110105 }
111106 . instrument ( span) ;
112107
113- await_handler ! ( @response_option hctx. spawn( fut) )
108+ await_handler ! (
109+ hctx. spawn( fut) ,
110+ DebugError :: EvmHalt { reason: "task panicked or cancelled" . into( ) }
111+ )
114112}
115113
116114/// `debug_traceTransaction` handler.
117115pub ( super ) async fn trace_transaction < H > (
118116 hctx : HandlerCtx ,
119117 TraceTransactionParams ( tx_hash, opts) : TraceTransactionParams ,
120118 ctx : StorageRpcCtx < H > ,
121- ) -> ResponsePayload < GethTrace , DebugError >
119+ ) -> Result < GethTrace , DebugError >
122120where
123121 H : HotKv + Send + Sync + ' static ,
124122 <H :: RoTx as HotKvRead >:: Error : DBErrorMarker ,
125123{
126- let opts = response_tri ! ( opts. ok_or( DebugError :: InvalidTracerConfig ) ) ;
124+ let opts = opts. ok_or ( DebugError :: InvalidTracerConfig ) ? ;
127125
128126 // Held for the handler duration; dropped when the async block completes.
129127 let _permit = ctx. acquire_tracing_permit ( ) . await ;
@@ -134,37 +132,36 @@ where
134132 let cold = ctx. cold ( ) ;
135133
136134 // Look up the transaction and its containing block.
137- let confirmed = response_tri ! ( cold. get_tx_by_hash( tx_hash) . await . map_err( |e| {
135+ let confirmed = cold. get_tx_by_hash ( tx_hash) . await . map_err ( |e| {
138136 tracing:: warn!( error = %e, %tx_hash, "cold storage read failed" ) ;
139137 DebugError :: from ( e)
140- } ) ) ;
138+ } ) ? ;
141139
142- let confirmed = response_tri ! ( confirmed. ok_or( DebugError :: TransactionNotFound ) ) ;
140+ let confirmed = confirmed. ok_or ( DebugError :: TransactionNotFound ( tx_hash ) ) ? ;
143141 let ( _tx, meta) = confirmed. into_parts ( ) ;
144142
145143 let block_num = meta. block_number ( ) ;
146144 let block_hash = meta. block_hash ( ) ;
147145
148146 let block_id = BlockId :: Number ( block_num. into ( ) ) ;
149- let sealed = response_tri ! ( ctx. resolve_header( block_id) . map_err( |e| {
147+ let sealed = ctx. resolve_header ( block_id) . map_err ( |e| {
150148 tracing:: warn!( error = %e, block_num, "header resolution failed" ) ;
151149 DebugError :: BlockNotFound ( block_id)
152- } ) ) ;
153- let header = response_tri ! ( sealed. ok_or( DebugError :: BlockNotFound ( block_id) ) ) . into_inner ( ) ;
150+ } ) ? ;
151+ let header = sealed. ok_or ( DebugError :: BlockNotFound ( block_id) ) ? . into_inner ( ) ;
154152
155- let txs = response_tri ! ( cold. get_transactions_in_block( block_num) . await . map_err( |e| {
153+ let txs = cold. get_transactions_in_block ( block_num) . await . map_err ( |e| {
156154 tracing:: warn!( error = %e, block_num, "cold storage read failed" ) ;
157155 DebugError :: from ( e)
158- } ) ) ;
156+ } ) ? ;
159157
160158 tracing:: debug!( number = block_num, "Loaded containing block" ) ;
161159
162160 // State BEFORE this block.
163- let db =
164- response_tri ! ( ctx. revm_state_at_height( block_num. saturating_sub( 1 ) ) . map_err( |e| {
165- tracing:: warn!( error = %e, block_num, "hot storage read failed" ) ;
166- DebugError :: from( e)
167- } ) ) ;
161+ let db = ctx. revm_state_at_height ( block_num. saturating_sub ( 1 ) ) . map_err ( |e| {
162+ tracing:: warn!( error = %e, block_num, "hot storage read failed" ) ;
163+ DebugError :: from ( e)
164+ } ) ?;
168165
169166 let spec_id = ctx. spec_id_for_header ( & header) ;
170167 let mut evm = signet_evm:: signet_evm ( db, ctx. constants ( ) . clone ( ) ) ;
@@ -175,15 +172,16 @@ where
175172 let mut txns = txs. iter ( ) . enumerate ( ) . peekable ( ) ;
176173 for ( _idx, tx) in txns. by_ref ( ) . peeking_take_while ( |( _, t) | t. tx_hash ( ) != & tx_hash) {
177174 if MagicSig :: try_from_signature ( tx. signature ( ) ) . is_some ( ) {
178- return ResponsePayload :: internal_error_message (
179- DebugError :: TransactionNotFound . to_string ( ) . into ( ) ,
180- ) ;
175+ return Err ( DebugError :: TransactionNotFound ( tx_hash) ) ;
181176 }
182177
183- trevm = response_tri ! ( trevm. run_tx( tx) . map_err( EvmErrored :: into_error) ) . accept_state ( ) ;
178+ trevm = trevm
179+ . run_tx ( tx)
180+ . map_err ( |e| DebugError :: EvmHalt { reason : e. into_error ( ) . to_string ( ) } ) ?
181+ . accept_state ( ) ;
184182 }
185183
186- let ( index, tx) = response_tri ! ( txns. next( ) . ok_or( DebugError :: TransactionNotFound ) ) ;
184+ let ( index, tx) = txns. next ( ) . ok_or ( DebugError :: TransactionNotFound ( tx_hash ) ) ? ;
187185
188186 let trevm = trevm. fill_tx ( tx) ;
189187
@@ -195,11 +193,14 @@ where
195193 base_fee : header. base_fee_per_gas ( ) ,
196194 } ;
197195
198- let res = response_tri ! ( crate :: debug:: tracer:: trace( trevm, & opts, tx_info) ) . 0 ;
196+ let res = crate :: debug:: tracer:: trace ( trevm, & opts, tx_info) ? . 0 ;
199197
200- ResponsePayload ( Ok ( res) )
198+ Ok ( res)
201199 }
202200 . instrument ( span) ;
203201
204- await_handler ! ( @response_option hctx. spawn( fut) )
202+ await_handler ! (
203+ hctx. spawn( fut) ,
204+ DebugError :: EvmHalt { reason: "task panicked or cancelled" . into( ) }
205+ )
205206}
0 commit comments