@@ -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