Skip to content

Commit 4c8cddc

Browse files
echonet: add get_block_metadata, get_starknet_version, _get_fgw_block_or_upstream (#13715)
1 parent 0b4317b commit 4c8cddc

1 file changed

Lines changed: 56 additions & 5 deletions

File tree

echonet/echo_center.py

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
187197
class 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"])
10911142
def block_dump() -> flask.Response:
10921143
return service.handle_block_dump()

0 commit comments

Comments
 (0)