@@ -2,57 +2,120 @@ use std::fmt::Debug;
22
33use katana_gateway_types:: TxTryFromError ;
44use katana_primitives:: block:: { GasPrices , PartialHeader , PendingBlock } ;
5- use katana_primitives:: transaction:: TxWithHash ;
5+ use katana_primitives:: transaction:: { TxHash , TxWithHash } ;
66use katana_primitives:: Felt ;
77use katana_provider:: api:: state:: { StateFactoryProvider , StateProvider } ;
8- use katana_rpc:: starknet:: PendingBlockProvider ;
8+ use katana_rpc:: starknet:: { PendingBlockProvider , StarknetApiResult } ;
9+ use katana_rpc_types:: PreConfirmedBlockWithTxs ;
910use num_traits:: ToPrimitive ;
1011use starknet:: core:: types:: ResourcePrice ;
1112
1213use crate :: full:: pending:: PreconfStateFactory ;
1314
1415impl < P : StateFactoryProvider + Debug > PendingBlockProvider for PreconfStateFactory < P > {
15- fn pending_block ( & self ) -> Option < PendingBlock > {
16- if let Some ( preconf_block) = self . block ( ) {
17- Some ( PendingBlock {
18- header : PartialHeader {
19- l1_da_mode : preconf_block. l1_da_mode ,
20- l1_gas_prices : to_gas_prices ( preconf_block. l1_gas_price ) ,
21- l2_gas_prices : to_gas_prices ( preconf_block. l2_gas_price ) ,
22- l1_data_gas_prices : to_gas_prices ( preconf_block. l1_data_gas_price ) ,
23- sequencer_address : preconf_block. sequencer_address ,
24- starknet_version : preconf_block. starknet_version . try_into ( ) . unwrap ( ) ,
25- timestamp : preconf_block. timestamp ,
26- number : 0 ,
27- parent_hash : Felt :: ZERO ,
28- } ,
29- transactions : preconf_block
30- . transactions
31- . clone ( )
32- . into_iter ( )
33- . map ( TxWithHash :: try_from)
34- . collect :: < Result < Vec < _ > , TxTryFromError > > ( )
35- . unwrap ( ) ,
36- } )
16+ fn get_pending_block_with_txs (
17+ & self ,
18+ ) -> StarknetApiResult < Option < katana_rpc_types:: PreConfirmedBlockWithTxs > > {
19+ if let Some ( block) = self . block ( ) {
20+ let transactions = block
21+ . transactions
22+ . clone ( )
23+ . into_iter ( )
24+ . map ( TxWithHash :: try_from)
25+ . collect :: < Result < Vec < _ > , TxTryFromError > > ( )
26+ . unwrap ( ) ;
27+
28+ Ok ( Some ( katana_rpc_types:: PreConfirmedBlockWithTxs {
29+ transactions,
30+ block_number : 0 ,
31+ l1_da_mode : block. l1_da_mode ,
32+ l1_gas_price : to_gas_prices ( block. l1_gas_price ) ,
33+ l2_gas_price : to_gas_prices ( block. l2_gas_price ) ,
34+ l1_data_gas_price : to_gas_prices ( block. l1_data_gas_price ) ,
35+ sequencer_address : block. sequencer_address ,
36+ starknet_version : block. starknet_version ,
37+ timestamp : block. timestamp ,
38+ } ) )
39+ } else {
40+ Ok ( None )
41+ }
42+ }
43+
44+ fn get_pending_block_with_receipts (
45+ & self ,
46+ ) -> StarknetApiResult < Option < katana_rpc_types:: PreConfirmedBlockWithReceipts > > {
47+ if let Some ( block) = self . block ( ) {
48+ Ok ( Some ( katana_rpc_types:: PreConfirmedBlockWithReceipts {
49+ transactions : Vec :: new ( ) ,
50+ block_number : 0 ,
51+ l1_da_mode : block. l1_da_mode ,
52+ l1_gas_price : to_gas_prices ( block. l1_gas_price ) ,
53+ l2_gas_price : to_gas_prices ( block. l2_gas_price ) ,
54+ l1_data_gas_price : to_gas_prices ( block. l1_data_gas_price ) ,
55+ sequencer_address : block. sequencer_address ,
56+ starknet_version : block. starknet_version ,
57+ timestamp : block. timestamp ,
58+ } ) )
59+ } else {
60+ Ok ( None )
61+ }
62+ }
63+
64+ fn get_pending_block_with_tx_hashes (
65+ & self ,
66+ ) -> StarknetApiResult < Option < katana_rpc_types:: PreConfirmedBlockWithTxHashes > > {
67+ if let Some ( block) = self . block ( ) {
68+ let transactions = block
69+ . transactions
70+ . clone ( )
71+ . into_iter ( )
72+ . map ( |tx| tx. transaction_hash )
73+ . collect :: < Vec < TxHash > > ( ) ;
74+
75+ Ok ( Some ( katana_rpc_types:: PreConfirmedBlockWithTxHashes {
76+ transactions,
77+ block_number : 0 ,
78+ l1_da_mode : block. l1_da_mode ,
79+ l1_gas_price : to_gas_prices ( block. l1_gas_price ) ,
80+ l2_gas_price : to_gas_prices ( block. l2_gas_price ) ,
81+ l1_data_gas_price : to_gas_prices ( block. l1_data_gas_price ) ,
82+ sequencer_address : block. sequencer_address ,
83+ starknet_version : block. starknet_version ,
84+ timestamp : block. timestamp ,
85+ } ) )
3786 } else {
38- None
87+ Ok ( None )
3988 }
4089 }
4190
42- fn pending_state_update ( & self ) -> Option < katana_primitives:: state:: StateUpdates > {
43- self . state_updates ( )
91+ fn get_pending_receipt (
92+ & self ,
93+ hash : TxHash ,
94+ ) -> StarknetApiResult < Option < katana_rpc_types:: TxReceiptWithBlockInfo > > {
95+ Ok ( None )
96+ }
97+
98+ fn get_pending_state_update (
99+ & self ,
100+ ) -> StarknetApiResult < Option < katana_rpc_types:: PreConfirmedStateUpdate > > {
101+ Ok ( None )
102+ }
103+
104+ fn get_pending_transaction (
105+ & self ,
106+ hash : TxHash ,
107+ ) -> StarknetApiResult < Option < katana_rpc_types:: RpcTxWithHash > > {
108+ Ok ( None )
44109 }
45110
46- fn pending_transactions (
111+ fn get_pending_transaction_by_index (
47112 & self ,
48- ) -> Vec < (
49- katana_primitives:: transaction:: TxWithHash ,
50- Option < katana_primitives:: receipt:: Receipt > ,
51- ) > {
52- todo ! ( )
113+ hash : TxHash ,
114+ ) -> StarknetApiResult < Option < katana_rpc_types:: RpcTxWithHash > > {
115+ Ok ( None )
53116 }
54117
55- fn pending_state ( & self ) -> Option < Box < dyn StateProvider > > {
118+ fn pending_state ( & self ) -> StarknetApiResult < Option < Box < dyn StateProvider > > > {
56119 Some ( Box :: new ( self . state ( ) ) )
57120 }
58121}
0 commit comments