diff --git a/CHANGELOG.md b/CHANGELOG.md index b01b78b..f9bc44e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 1.4.3 /2025-07-28 +* Add "Token" to caught error messages for extrinsic receipts by @thewhaleking in https://github.com/opentensor/async-substrate-interface/pull/156 +* runtime version switching by @thewhaleking in https://github.com/opentensor/async-substrate-interface/pull/157 + +**Full Changelog**: https://github.com/opentensor/async-substrate-interface/compare/v1.4.2...v1.4.3 + ## 1.4.2 /2025-07-23 * Use scalecodec rather than bt-decode for query_multi by @thewhaleking in https://github.com/opentensor/async-substrate-interface/pull/152 diff --git a/async_substrate_interface/async_substrate.py b/async_substrate_interface/async_substrate.py index b0ca9b0..fc4f034 100644 --- a/async_substrate_interface/async_substrate.py +++ b/async_substrate_interface/async_substrate.py @@ -326,6 +326,12 @@ async def process_events(self): "name": "Other", "docs": "Unspecified error occurred", } + elif "Token" in dispatch_error: + self.__error_message = { + "type": "System", + "name": "Token", + "docs": dispatch_error["Token"], + } elif not has_transaction_fee_paid_event: if ( @@ -1062,6 +1068,7 @@ async def init_runtime( return runtime runtime_version = await self.get_block_runtime_version_for(block_hash) + if runtime_version is None: raise SubstrateRequestException( f"No runtime information for block '{block_hash}'" diff --git a/async_substrate_interface/sync_substrate.py b/async_substrate_interface/sync_substrate.py index 7e9ba44..f6d1876 100644 --- a/async_substrate_interface/sync_substrate.py +++ b/async_substrate_interface/sync_substrate.py @@ -293,6 +293,12 @@ def process_events(self): "name": "Other", "docs": "Unspecified error occurred", } + elif "Token" in dispatch_error: + self.__error_message = { + "type": "System", + "name": "Token", + "docs": dispatch_error["Token"], + } elif not has_transaction_fee_paid_event: if ( @@ -767,9 +773,6 @@ def init_runtime( if block_id is not None: if runtime := self.runtime_cache.retrieve(block=block_id): self.runtime = runtime - self.runtime.load_runtime() - if self.runtime.registry: - self.runtime.load_registry_type_map() return self.runtime block_hash = self.get_block_hash(block_id) @@ -779,9 +782,6 @@ def init_runtime( self.last_block_hash = block_hash if runtime := self.runtime_cache.retrieve(block_hash=block_hash): self.runtime = runtime - self.runtime.load_runtime() - if self.runtime.registry: - self.runtime.load_registry_type_map() return self.runtime runtime_version = self.get_block_runtime_version_for(block_hash) @@ -795,15 +795,9 @@ def init_runtime( if runtime := self.runtime_cache.retrieve(runtime_version=runtime_version): self.runtime = runtime - self.runtime.load_runtime() - if self.runtime.registry: - self.runtime.load_registry_type_map() - return runtime + return self.runtime else: self.runtime = self.get_runtime_for_version(runtime_version, block_hash) - self.runtime.load_runtime() - if self.runtime.registry: - self.runtime.load_registry_type_map() return self.runtime def get_runtime_for_version( diff --git a/async_substrate_interface/types.py b/async_substrate_interface/types.py index 57681f3..95575bf 100644 --- a/async_substrate_interface/types.py +++ b/async_substrate_interface/types.py @@ -75,16 +75,25 @@ def retrieve( runtime = self.blocks.get(block) if runtime is not None: self.last_used = runtime + runtime.load_runtime() + if runtime.registry: + runtime.load_registry_type_map() return runtime if block_hash is not None: runtime = self.block_hashes.get(block_hash) if runtime is not None: self.last_used = runtime + runtime.load_runtime() + if runtime.registry: + runtime.load_registry_type_map() return runtime if runtime_version is not None: runtime = self.versions.get(runtime_version) if runtime is not None: self.last_used = runtime + runtime.load_runtime() + if runtime.registry: + runtime.load_registry_type_map() return runtime return None diff --git a/pyproject.toml b/pyproject.toml index cdc6ee3..5fe8b39 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "async-substrate-interface" -version = "1.4.2" +version = "1.4.3" description = "Asyncio library for interacting with substrate. Mostly API-compatible with py-substrate-interface" readme = "README.md" license = { file = "LICENSE" }