@@ -12,6 +12,7 @@ use mp_rpc::v0_9_0::{
1212} ;
1313use mp_transactions:: { L1HandlerTransactionResult , L1HandlerTransactionWithFee } ;
1414use mp_utils:: service:: MadaraServiceId ;
15+ use mp_block:: header:: CustomHeader ;
1516
1617#[ async_trait]
1718impl MadaraWriteRpcApiV0_1_0Server for Starknet {
@@ -89,22 +90,22 @@ impl MadaraWriteRpcApiV0_1_0Server for Starknet {
8990 }
9091
9192 /// Force revert chain to a previous block by hash.
92- /// Only works in full node mode .
93+ /// Only available when unsafe RPC methods are enabled .
9394 async fn revert_to ( & self , block_hash : Felt ) -> RpcResult < ( ) > {
94- // Only allow revert when in full node mode
95- if self . ctx . service_status ( MadaraServiceId :: BlockProduction ) . is_off ( ) {
96- self . backend . revert_to ( & block_hash) . map_err ( StarknetRpcApiError :: from) ?;
97- // TODO(heemankv, 04-11-25): We should spend time in ruling out the two sources of truth problem for ChainTip
98- // For now, we have to manually fetch Chain Tip from DB and update this in backend
99- let fresh_chain_tip = self . backend . db . get_chain_tip ( ) . unwrap ( ) ;
100- let backend_chain_tip = mc_db:: ChainTip :: from_storage ( fresh_chain_tip) ;
101- self . backend . chain_tip . send_replace ( backend_chain_tip) ;
102- Ok ( ( ) )
103- } else {
104- Err ( StarknetRpcApiError :: ErrUnexpectedError {
105- error : "This method is only available in full node mode" . to_string ( ) . into ( ) ,
106- } ) ?
95+ // Check if unsafe RPC methods are enabled
96+ if !self . rpc_unsafe_enabled {
97+ return Err ( StarknetRpcApiError :: ErrUnexpectedError {
98+ error : "This method requires the --rpc-unsafe flag to be enabled" . to_string ( ) . into ( )
99+ } . into ( ) ) ;
107100 }
101+
102+ self . backend . revert_to ( & block_hash) . map_err ( StarknetRpcApiError :: from) ?;
103+ let fresh_chain_tip = self . backend . db . get_chain_tip ( )
104+ . context ( "Failed to get chain tip after revert" )
105+ . map_err ( StarknetRpcApiError :: from) ?;
106+ let backend_chain_tip = mc_db:: ChainTip :: from_storage ( fresh_chain_tip) ;
107+ self . backend . chain_tip . send_replace ( backend_chain_tip) ;
108+ Ok ( ( ) )
108109 }
109110
110111 async fn add_l1_handler_message (
@@ -121,6 +122,13 @@ impl MadaraWriteRpcApiV0_1_0Server for Starknet {
121122 }
122123
123124 async fn set_block_header ( & self , custom_block_headers : CustomHeader ) -> RpcResult < ( ) > {
125+ // Check if unsafe RPC methods are enabled
126+ if !self . rpc_unsafe_enabled {
127+ return Err ( StarknetRpcApiError :: ErrUnexpectedError {
128+ error : "This method requires the --rpc-unsafe flag to be enabled" . to_string ( ) . into ( )
129+ } . into ( ) ) ;
130+ }
131+
124132 self . backend . set_custom_header ( custom_block_headers) ;
125133 Ok ( ( ) )
126134 }
0 commit comments