Skip to content

Commit b93cafc

Browse files
author
µ
committed
sync_substrate.py: drop _old_metadata_v15, load self.registry and make it part of runtime object/cache
1 parent b9e9f39 commit b93cafc

File tree

2 files changed

+15
-20
lines changed

2 files changed

+15
-20
lines changed

async_substrate_interface/sync_substrate.py

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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]

async_substrate_interface/types.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,10 @@ class Runtime:
7070
runtime_config: RuntimeConfigurationObject
7171
runtime_info = None
7272
type_registry_preset = None
73+
registry: Optional[PortableRegistry] = None
7374

7475
def __init__(
75-
self, chain, runtime_config: RuntimeConfigurationObject, metadata, type_registry, metadata_v15=None, runtime_info=None
76+
self, chain, runtime_config: RuntimeConfigurationObject, metadata, type_registry, metadata_v15=None, runtime_info=None, registry=None
7677
):
7778
self.config = {}
7879
self.chain = chain
@@ -81,6 +82,7 @@ def __init__(
8182
self.metadata = metadata
8283
self.metadata_v15 = metadata_v15
8384
self.runtime_info = runtime_info
85+
self.registry = registry
8486

8587
def __str__(self):
8688
return f"Runtime: {self.chain} | {self.config}"

0 commit comments

Comments
 (0)