@@ -512,7 +512,6 @@ def __init__(
512512 self .runtime_config = RuntimeConfigurationObject (
513513 ss58_format = self .ss58_format , implements_scale_info = True
514514 )
515- self ._old_metadata_v15 = None
516515 self .metadata_version_hex = "0x0f000000" # v15
517516 self .reload_type_registry ()
518517 self .ws = self .connect (init = True )
@@ -536,7 +535,6 @@ def initialize(self):
536535 if not self ._chain :
537536 chain = self .rpc_request ("system_chain" , [])
538537 self ._chain = chain .get ("result" )
539- self .load_registry ()
540538 self ._first_initialize_runtime ()
541539 self .initialized = True
542540
@@ -602,12 +600,6 @@ def _get_current_block_hash(
602600 return self .last_block_hash
603601 return block_hash
604602
605- def load_registry (self ):
606- # This needs to happen before init_runtime
607- self .metadata_v15 = self ._load_registry_at_block (None )
608- self .registry = PortableRegistry .from_metadata_v15 (self .metadata_v15 )
609- self ._load_registry_type_map ()
610-
611603 def _load_registry_at_block (self , block_hash : Optional [str ]) -> MetadataV15 :
612604 # Should be called for any block that fails decoding.
613605 # Possibly the metadata was different.
@@ -619,6 +611,8 @@ def _load_registry_at_block(self, block_hash: Optional[str]) -> MetadataV15:
619611 metadata_option_hex_str = metadata_rpc_result ["result" ]
620612 metadata_option_bytes = bytes .fromhex (metadata_option_hex_str [2 :])
621613 metadata = MetadataV15 .decode_from_metadata_option (metadata_option_bytes )
614+ self .registry = PortableRegistry .from_metadata_v15 (metadata )
615+ self ._load_registry_type_map ()
622616 return metadata
623617
624618 def decode_scale (
@@ -654,9 +648,12 @@ def _first_initialize_runtime(self):
654648 """
655649 TODO docstring
656650 """
651+ metadata_v15 = self ._load_registry_at_block (None )
657652 self .load_runtime (
658653 runtime_info = self .get_block_runtime_info (None ),
659654 metadata = self .get_block_metadata (),
655+ metadata_v15 = metadata_v15 ,
656+ registry = self .registry ,
660657 )
661658
662659 # Check and apply runtime constants
@@ -667,19 +664,19 @@ def _first_initialize_runtime(self):
667664 if ss58_prefix_constant :
668665 self .ss58_format = ss58_prefix_constant
669666
670- def load_runtime (self ,runtime_info = None ,metadata = None ,metadata_v15 = None ):
667+ def load_runtime (self ,runtime_info = None ,metadata = None ,metadata_v15 = None , registry = None ):
671668 # Update type registry
672669 self .reload_type_registry (use_remote_preset = False , auto_discover = True )
673670
671+ self .metadata_v15 = metadata_v15
672+ self .registry = registry
674673 self .runtime_version = runtime_info .get ("specVersion" )
675674 self ._metadata = metadata
676675 self .runtime_config .set_active_spec_version_id (self .runtime_version )
677676 self .transaction_version = runtime_info .get ("transactionVersion" )
678677 if self .implements_scaleinfo :
679678 logger .debug ("Add PortableRegistry from metadata to type registry" )
680679 self .runtime_config .add_portable_registry (metadata )
681- if metadata_v15 is not None :
682- self ._old_metadata_v15 = metadata_v15
683680 # Set runtime compatibility flags
684681 try :
685682 _ = self .runtime_config .create_scale_object ("sp_weights::weight_v2::Weight" )
@@ -766,13 +763,15 @@ def init_runtime(
766763 type_registry = self .type_registry ,
767764 metadata_v15 = metadata_v15 ,
768765 runtime_info = runtime_info ,
766+ registry = self .registry ,
769767 )
770768 self .runtime_cache .add_item (runtime_version = runtime_version , runtime = runtime )
771769
772770 self .load_runtime (
773771 runtime_info = runtime .runtime_info ,
774772 metadata = runtime .metadata ,
775773 metadata_v15 = runtime .metadata_v15 ,
774+ registry = runtime .registry ,
776775 )
777776
778777 def create_storage_key (
@@ -2261,14 +2260,8 @@ def runtime_call(
22612260 params = {}
22622261
22632262 try :
2264- if block_hash :
2265- # Use old metadata v15 from init_runtime call
2266- metadata_v15 = self ._old_metadata_v15
2267- else :
2268- metadata_v15 = self .metadata_v15
2269-
2270- self .registry = PortableRegistry .from_metadata_v15 (metadata_v15 )
2271- metadata_v15_value = metadata_v15 .value ()
2263+ self .registry = PortableRegistry .from_metadata_v15 (self .metadata_v15 )
2264+ metadata_v15_value = self .metadata_v15 .value ()
22722265
22732266 apis = {entry ["name" ]: entry for entry in metadata_v15_value ["apis" ]}
22742267 api_entry = apis [api ]
0 commit comments