Skip to content

Commit 4f487db

Browse files
author
µ
committed
async_substrate.py: drop _old_metadata_v15, load self.registry and make it part of runtime object/cache
1 parent 09795ef commit 4f487db

File tree

1 file changed

+20
-23
lines changed

1 file changed

+20
-23
lines changed

async_substrate_interface/async_substrate.py

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,6 @@ def __init__(
706706
self.runtime_config = RuntimeConfigurationObject(
707707
ss58_format=self.ss58_format, implements_scale_info=True
708708
)
709-
self._old_metadata_v15 = None
710709
self._nonces = {}
711710
self.metadata_version_hex = "0x0f000000" # v15
712711
self.reload_type_registry()
@@ -729,7 +728,6 @@ async def initialize(self):
729728
chain = await self.rpc_request("system_chain", [])
730729
self._chain = chain.get("result")
731730
init_load = await asyncio.gather(
732-
self.load_registry(),
733731
self._first_initialize_runtime(),
734732
return_exceptions=True,
735733
)
@@ -794,12 +792,6 @@ async def _get_current_block_hash(
794792
return self.last_block_hash
795793
return block_hash
796794

797-
async def load_registry(self):
798-
# TODO this needs to happen before init_runtime
799-
self.metadata_v15 = await self._load_registry_at_block(None)
800-
self.registry = PortableRegistry.from_metadata_v15(self.metadata_v15)
801-
self._load_registry_type_map()
802-
803795
async def _load_registry_at_block(self, block_hash: Optional[str]) -> MetadataV15:
804796
# Should be called for any block that fails decoding.
805797
# Possibly the metadata was different.
@@ -823,6 +815,8 @@ async def _load_registry_at_block(self, block_hash: Optional[str]) -> MetadataV1
823815
metadata_option_hex_str = metadata_rpc_result["result"]
824816
metadata_option_bytes = bytes.fromhex(metadata_option_hex_str[2:])
825817
metadata = MetadataV15.decode_from_metadata_option(metadata_option_bytes)
818+
self.registry = PortableRegistry.from_metadata_v15(metadata)
819+
self._load_registry_type_map()
826820
return metadata
827821

828822
async def _wait_for_registry(self, _attempt: int = 1, _retries: int = 3) -> None:
@@ -843,7 +837,7 @@ async def _waiter():
843837
"`await AsyncSubstrateInterface.initialize()` or running with `async with`"
844838
)
845839
elif _attempt < _retries:
846-
await self.load_registry()
840+
await self._load_registry_at_block(None)
847841
return await self._wait_for_registry(_attempt + 1, _retries)
848842
else:
849843
raise AttributeError(
@@ -909,10 +903,17 @@ async def _first_initialize_runtime(self):
909903
"""
910904
TODO docstring
911905
"""
912-
runtime_info, metadata = await asyncio.gather(
913-
self.get_block_runtime_info(None), self.get_block_metadata()
906+
runtime_info, metadata, metadata_v15 = await asyncio.gather(
907+
self.get_block_runtime_info(None),
908+
self.get_block_metadata(),
909+
self._load_registry_at_block(None)
910+
)
911+
await self.load_runtime(
912+
runtime_info = runtime_info,
913+
metadata = metadata,
914+
metadata_v15 = metadata_v15,
915+
registry = self.registry
914916
)
915-
await self.load_runtime(runtime_info=runtime_info, metadata=metadata)
916917

917918
# Check and apply runtime constants
918919
ss58_prefix_constant = await self.get_constant(
@@ -922,19 +923,19 @@ async def _first_initialize_runtime(self):
922923
if ss58_prefix_constant:
923924
self.ss58_format = ss58_prefix_constant
924925

925-
async def load_runtime(self,runtime_info=None,metadata=None,metadata_v15=None):
926+
async def load_runtime(self,runtime_info=None,metadata=None,metadata_v15=None,registry=None):
926927
# Update type registry
927928
self.reload_type_registry(use_remote_preset=False, auto_discover=True)
928929

930+
self.metadata_v15 = metadata_v15
931+
self.registry = registry
929932
self.runtime_version = runtime_info.get("specVersion")
930933
self._metadata = metadata
931934
self.runtime_config.set_active_spec_version_id(self.runtime_version)
932935
self.transaction_version = runtime_info.get("transactionVersion")
933936
if self.implements_scaleinfo:
934937
logger.debug("Add PortableRegistry from metadata to type registry")
935938
self.runtime_config.add_portable_registry(metadata)
936-
if metadata_v15 is not None:
937-
self._old_metadata_v15 = metadata_v15
938939
# Set runtime compatibility flags
939940
try:
940941
_ = self.runtime_config.create_scale_object("sp_weights::weight_v2::Weight")
@@ -1021,13 +1022,15 @@ async def init_runtime(
10211022
type_registry=self.type_registry,
10221023
metadata_v15=metadata_v15,
10231024
runtime_info=runtime_info,
1025+
registry=self.registry,
10241026
)
10251027
self.runtime_cache.add_item(runtime_version=runtime_version, runtime=runtime)
10261028

10271029
await self.load_runtime(
10281030
runtime_info=runtime.runtime_info,
10291031
metadata=runtime.metadata,
10301032
metadata_v15=runtime.metadata_v15,
1033+
registry=runtime.registry,
10311034
)
10321035

10331036
async def create_storage_key(
@@ -2545,14 +2548,8 @@ async def runtime_call(
25452548
params = {}
25462549

25472550
try:
2548-
if block_hash:
2549-
# Use old metadata v15 from init_runtime call
2550-
metadata_v15 = self._old_metadata_v15
2551-
else:
2552-
metadata_v15 = self.metadata_v15
2553-
2554-
self.registry = PortableRegistry.from_metadata_v15(metadata_v15)
2555-
metadata_v15_value = metadata_v15.value()
2551+
self.registry = PortableRegistry.from_metadata_v15(self.metadata_v15)
2552+
metadata_v15_value = self.metadata_v15.value()
25562553

25572554
apis = {entry["name"]: entry for entry in metadata_v15_value["apis"]}
25582555
api_entry = apis[api]

0 commit comments

Comments
 (0)