@@ -184,6 +184,16 @@ def base_block_hash_hex(self) -> str:
184184 return self ._base .base_block_hash_hex
185185
186186
187+ def _get_fgw_block_or_upstream (
188+ feeder_client : FeederClient , shared_ctx : SharedContext , block_number : int
189+ ) -> JsonObject :
190+ """Return the cached FGW block if available, otherwise fetch it from the feeder client."""
191+ obj = shared_ctx .get_fgw_block (block_number )
192+ if not obj :
193+ obj = feeder_client .get_block (block_number , with_fee_market_info = True )
194+ return dict (obj )
195+
196+
187197class BlobTransformer :
188198 """Transforms blobs recieved from the sequencer into block + state_update block documents, formatted as Feeder Gateway outputs."""
189199
@@ -353,11 +363,7 @@ def _fetch_upstream_source_block(self, block_number: Optional[int]) -> JsonObjec
353363 """
354364 if block_number is None :
355365 block_number = self ._chain .base_block_number
356-
357- obj = self ._shared .get_fgw_block (block_number )
358- if obj is None :
359- obj = self ._feeder_client .get_block (block_number , with_fee_market_info = True )
360- return dict (obj )
366+ return _get_fgw_block_or_upstream (self ._feeder_client , self ._shared , block_number )
361367
362368 @staticmethod
363369 def _extract_blob_block_meta (blob : JsonObject ) -> JsonObject :
@@ -885,6 +891,41 @@ def handle_get_tx_block_metadata(self) -> flask.Response:
885891 payload = self .shared .get_sent_tx_timestamp_and_block_number (tx_hash )
886892 return self ._json_response (payload , requests .codes .ok )
887893
894+ def handle_get_starknet_version (self ) -> flask .Response :
895+ """
896+ GET /echonet/get_starknet_version
897+
898+ Returns the starknet_version string of the configured start block.
899+ """
900+ block = self .feeder_client .get_block (CONFIG .blocks .start_block )
901+ return flask .Response (
902+ block ["starknet_version" ].encode ("utf-8" ),
903+ status = requests .codes .ok ,
904+ headers = [["Content-Type" , "text/plain; charset=utf-8" ]],
905+ )
906+
907+ def handle_get_block_metadata (self ) -> flask .Response :
908+ """
909+ GET /echonet/get_block_metadata?block_number=<n>
910+
911+ Returns metadata for the given block from the mainnet FGW.
912+ """
913+ logger .info (f"handle_get_block_metadata: { flask .request .args } " )
914+ args = flask .request .args .to_dict (flat = True )
915+ block_number = int (args ["block_number" ])
916+ block = _get_fgw_block_or_upstream (self .feeder_client , self .shared , block_number )
917+ return self ._json_response (
918+ {
919+ "timestamp" : block ["timestamp" ],
920+ "l1_gas_price_wei" : block ["l1_gas_price" ]["price_in_wei" ],
921+ "l1_gas_price_fri" : block ["l1_gas_price" ]["price_in_fri" ],
922+ "l1_data_gas_price_wei" : block ["l1_data_gas_price" ]["price_in_wei" ],
923+ "l1_data_gas_price_fri" : block ["l1_data_gas_price" ]["price_in_fri" ],
924+ "l2_gas_price_fri" : block ["l2_gas_price" ]["price_in_fri" ],
925+ },
926+ requests .codes .ok ,
927+ )
928+
888929 def handle_block_dump (self ) -> flask .Response :
889930 args = flask .request .args .to_dict (flat = True )
890931 bn = int (args ["blockNumber" ])
@@ -1087,6 +1128,16 @@ def get_tx_block_metadata() -> flask.Response:
10871128 return service .handle_get_tx_block_metadata ()
10881129
10891130
1131+ @app .route ("/echonet/get_block_metadata" , methods = ["GET" ])
1132+ def get_block_metadata () -> flask .Response :
1133+ return service .handle_get_block_metadata ()
1134+
1135+
1136+ @app .route ("/echonet/get_starknet_version" , methods = ["GET" ])
1137+ def get_starknet_version () -> flask .Response :
1138+ return service .handle_get_starknet_version ()
1139+
1140+
10901141@app .route ("/echonet/block_dump" , methods = ["GET" ])
10911142def block_dump () -> flask .Response :
10921143 return service .handle_block_dump ()
0 commit comments