Skip to content

Commit a953c01

Browse files
committed
True runtime independence
1 parent 0144ee0 commit a953c01

File tree

3 files changed

+33
-23
lines changed

3 files changed

+33
-23
lines changed

async_substrate_interface/async_substrate.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import inspect
99
import logging
1010
import ssl
11-
import time
1211
import warnings
1312
from unittest.mock import AsyncMock
1413
from hashlib import blake2b
@@ -19,7 +18,6 @@
1918
Callable,
2019
Awaitable,
2120
cast,
22-
TYPE_CHECKING,
2321
)
2422

2523
from bt_decode import MetadataV15, PortableRegistry, decode as decode_by_type_string
@@ -32,7 +30,10 @@
3230
MultiAccountId,
3331
)
3432
from websockets.asyncio.client import connect, ClientConnection
35-
from websockets.exceptions import ConnectionClosed, WebSocketException
33+
from websockets.exceptions import (
34+
ConnectionClosed,
35+
WebSocketException,
36+
)
3637
from websockets.protocol import State
3738

3839
from async_substrate_interface.errors import (
@@ -1142,12 +1143,8 @@ async def _get_runtime_for_version(
11421143
f"Exported method Metadata_metadata_at_version is not found for {runtime_version}. This indicates the "
11431144
f"block is quite old, decoding for this block will use legacy Python decoding."
11441145
)
1145-
implements_scale_info = metadata.portable_registry is not None
11461146
runtime = Runtime(
11471147
chain=self.chain,
1148-
runtime_config=self._runtime_config_copy(
1149-
implements_scale_info=implements_scale_info
1150-
),
11511148
metadata=metadata,
11521149
type_registry=self.type_registry,
11531150
metadata_v15=metadata_v15,

async_substrate_interface/sync_substrate.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -774,6 +774,9 @@ def init_runtime(
774774

775775
if block_id is not None:
776776
if runtime := self.runtime_cache.retrieve(block=block_id):
777+
runtime.load_runtime()
778+
if runtime.registry:
779+
runtime.load_registry_type_map()
777780
self.runtime = runtime
778781
return self.runtime
779782
block_hash = self.get_block_hash(block_id)
@@ -783,6 +786,9 @@ def init_runtime(
783786
else:
784787
self.last_block_hash = block_hash
785788
if runtime := self.runtime_cache.retrieve(block_hash=block_hash):
789+
runtime.load_runtime()
790+
if runtime.registry:
791+
runtime.load_registry_type_map()
786792
self.runtime = runtime
787793
return self.runtime
788794

@@ -795,12 +801,17 @@ def init_runtime(
795801
if self.runtime and runtime_version == self.runtime.runtime_version:
796802
return self.runtime
797803

798-
if runtime := self.runtime_cache.retrieve(runtime_version=runtime_version):
799-
self.runtime = runtime
800-
return self.runtime
804+
if (
805+
runtime := self.runtime_cache.retrieve(runtime_version=runtime_version)
806+
) is not None:
807+
pass
801808
else:
802-
self.runtime = self.get_runtime_for_version(runtime_version, block_hash)
803-
return self.runtime
809+
runtime = self.get_runtime_for_version(runtime_version, block_hash)
810+
runtime.load_runtime()
811+
if runtime.registry:
812+
runtime.load_registry_type_map()
813+
self.runtime = runtime
814+
return self.runtime
804815

805816
def get_runtime_for_version(
806817
self, runtime_version: int, block_hash: Optional[str] = None

async_substrate_interface/types.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,25 +75,25 @@ def retrieve(
7575
runtime = self.blocks.get(block)
7676
if runtime is not None:
7777
self.last_used = runtime
78-
runtime.load_runtime()
79-
if runtime.registry:
80-
runtime.load_registry_type_map()
78+
# runtime.load_runtime()
79+
# if runtime.registry:
80+
# runtime.load_registry_type_map()
8181
return runtime
8282
if block_hash is not None:
8383
runtime = self.block_hashes.get(block_hash)
8484
if runtime is not None:
8585
self.last_used = runtime
86-
runtime.load_runtime()
87-
if runtime.registry:
88-
runtime.load_registry_type_map()
86+
# runtime.load_runtime()
87+
# if runtime.registry:
88+
# runtime.load_registry_type_map()
8989
return runtime
9090
if runtime_version is not None:
9191
runtime = self.versions.get(runtime_version)
9292
if runtime is not None:
9393
self.last_used = runtime
94-
runtime.load_runtime()
95-
if runtime.registry:
96-
runtime.load_registry_type_map()
94+
# runtime.load_runtime()
95+
# if runtime.registry:
96+
# runtime.load_registry_type_map()
9797
return runtime
9898
return None
9999

@@ -119,9 +119,9 @@ class Runtime:
119119
def __init__(
120120
self,
121121
chain: str,
122-
runtime_config: RuntimeConfigurationObject,
123122
metadata,
124123
type_registry,
124+
runtime_config: Optional[RuntimeConfigurationObject] = None,
125125
metadata_v15=None,
126126
runtime_info=None,
127127
registry=None,
@@ -131,13 +131,15 @@ def __init__(
131131
self.config = {}
132132
self.chain = chain
133133
self.type_registry = type_registry
134-
self.runtime_config = runtime_config
135134
self.metadata = metadata
136135
self.metadata_v15 = metadata_v15
137136
self.runtime_info = runtime_info
138137
self.registry = registry
139138
self.runtime_version = runtime_info.get("specVersion")
140139
self.transaction_version = runtime_info.get("transactionVersion")
140+
self.runtime_config = runtime_config or RuntimeConfigurationObject(
141+
implements_scale_info=self.implements_scaleinfo
142+
)
141143
self.load_runtime()
142144
if registry is not None:
143145
self.load_registry_type_map()

0 commit comments

Comments
 (0)