From fe09138ed4cf741e5827d947c905d6175865f51f Mon Sep 17 00:00:00 2001 From: ibraheem-latent Date: Mon, 1 Dec 2025 10:00:45 -0800 Subject: [PATCH 1/8] add type checking --- async_substrate_interface/async_substrate.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/async_substrate_interface/async_substrate.py b/async_substrate_interface/async_substrate.py index 6a1de27..d9a7406 100644 --- a/async_substrate_interface/async_substrate.py +++ b/async_substrate_interface/async_substrate.py @@ -378,7 +378,14 @@ async def process_events(self): event["event"]["module_id"] == "Balances" and event["event"]["event_id"] == "Deposit" ): - self.__total_fee_amount += event.value["attributes"]["amount"] + if isinstance(event, dict): + self.__total_fee_amount += event["event"]["attributes"][ + "amount" + ] + else: + self.__total_fee_amount += event.value["attributes"][ + "amount" + ] if possible_success is True and self.__error_message is None: # we delay the positive setting of the __is_success flag until we have finished iteration of the # events and have ensured nothing has set an error message From 627a8f2060dd35cab2b6d14b4e85bfef3860ee85 Mon Sep 17 00:00:00 2001 From: bdhimes Date: Mon, 1 Dec 2025 20:44:54 +0200 Subject: [PATCH 2/8] Removed non-dict event check, applied to sync --- async_substrate_interface/async_substrate.py | 11 +++-------- async_substrate_interface/sync_substrate.py | 4 +++- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/async_substrate_interface/async_substrate.py b/async_substrate_interface/async_substrate.py index d9a7406..c97d94d 100644 --- a/async_substrate_interface/async_substrate.py +++ b/async_substrate_interface/async_substrate.py @@ -378,14 +378,9 @@ async def process_events(self): event["event"]["module_id"] == "Balances" and event["event"]["event_id"] == "Deposit" ): - if isinstance(event, dict): - self.__total_fee_amount += event["event"]["attributes"][ - "amount" - ] - else: - self.__total_fee_amount += event.value["attributes"][ - "amount" - ] + self.__total_fee_amount += event["event"]["attributes"][ + "amount" + ] if possible_success is True and self.__error_message is None: # we delay the positive setting of the __is_success flag until we have finished iteration of the # events and have ensured nothing has set an error message diff --git a/async_substrate_interface/sync_substrate.py b/async_substrate_interface/sync_substrate.py index 96d1d7f..3fd85ee 100644 --- a/async_substrate_interface/sync_substrate.py +++ b/async_substrate_interface/sync_substrate.py @@ -331,7 +331,9 @@ def process_events(self): event["event"]["module_id"] == "Balances" and event["event"]["event_id"] == "Deposit" ): - self.__total_fee_amount += event.value["attributes"]["amount"] + self.__total_fee_amount += event["event"]["attributes"][ + "amount" + ] if possible_success is True and self.__error_message is None: # we delay the positive setting of the __is_success flag until we have finished iteration of the # events and have ensured nothing has set an error message From 48cfac77f022668f52971bc4e87b947ef1508750 Mon Sep 17 00:00:00 2001 From: bdhimes Date: Mon, 1 Dec 2025 20:46:26 +0200 Subject: [PATCH 3/8] Added TODOs --- async_substrate_interface/async_substrate.py | 1 + async_substrate_interface/sync_substrate.py | 1 + 2 files changed, 2 insertions(+) diff --git a/async_substrate_interface/async_substrate.py b/async_substrate_interface/async_substrate.py index c97d94d..a654c1b 100644 --- a/async_substrate_interface/async_substrate.py +++ b/async_substrate_interface/async_substrate.py @@ -276,6 +276,7 @@ async def process_events(self): # Process other events possible_success = False for event in await self.triggered_events: + # TODO make this more readable # Check events if ( event["event"]["module_id"] == "System" diff --git a/async_substrate_interface/sync_substrate.py b/async_substrate_interface/sync_substrate.py index 3fd85ee..e6a2e3b 100644 --- a/async_substrate_interface/sync_substrate.py +++ b/async_substrate_interface/sync_substrate.py @@ -237,6 +237,7 @@ def process_events(self): # Process other events possible_success = False for event in self.triggered_events: + # TODO make this more readable # Check events if ( event["event"]["module_id"] == "System" From f3471cba7a0537dc103b306dbc74992014e99c21 Mon Sep 17 00:00:00 2001 From: ibraheem-latent Date: Thu, 4 Dec 2025 13:10:36 -0800 Subject: [PATCH 4/8] adds supp for DecryptedRejected --- async_substrate_interface/async_substrate.py | 27 ++++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/async_substrate_interface/async_substrate.py b/async_substrate_interface/async_substrate.py index a654c1b..dae91e5 100644 --- a/async_substrate_interface/async_substrate.py +++ b/async_substrate_interface/async_substrate.py @@ -297,7 +297,8 @@ async def process_events(self): and event["event"]["event_id"] == "ExtrinsicFailed" ) or ( event["event"]["module_id"] == "MevShield" - and event["event"]["event_id"] == "DecryptedRejected" + and event["event"]["event_id"] + in ("DecryptedRejected", "DecryptionFailed") ): possible_success = False self.__is_success = False @@ -308,13 +309,23 @@ async def process_events(self): self.__weight = dispatch_info["weight"] else: # MEV shield extrinsics - dispatch_info = event["event"]["attributes"]["reason"][ - "post_info" - ] - dispatch_error = event["event"]["attributes"]["reason"]["error"] - self.__weight = event["event"]["attributes"]["reason"][ - "post_info" - ]["actual_weight"] + if event["event"]["event_id"] == "DecryptedRejected": + dispatch_info = event["event"]["attributes"]["reason"][ + "post_info" + ] + dispatch_error = event["event"]["attributes"]["reason"][ + "error" + ] + self.__weight = event["event"]["attributes"]["reason"][ + "post_info" + ]["actual_weight"] + else: + self.__error_message = { + "type": "MevShield", + "name": "DecryptionFailed", + "docs": event["event"]["attributes"]["reason"], + } + continue if "Module" in dispatch_error: if isinstance(dispatch_error["Module"], tuple): From 8cd9af6219fa2d3ab74409e75d07baea28be8b62 Mon Sep 17 00:00:00 2001 From: ibraheem-latent Date: Thu, 4 Dec 2025 14:43:58 -0800 Subject: [PATCH 5/8] bumps version and changelog --- CHANGELOG.md | 6 ++++++ pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57433b2..a157b62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ # Changelog + +## 1.5.14 /2025-12-04 +* Update: Adds support for custom extrinsic `DecryptionFailed` by @ibraheem-abe in https://github.com/opentensor/async-substrate-interface/pull/247 + +**Full Changelog**: https://github.com/opentensor/async-substrate-interface/compare/v1.5.13...v1.5.14 + ## 1.5.13 /2025-12-01 * Update `Checkout PR branch in async-substrate-interface` step by @basfroman in https://github.com/opentensor/async-substrate-interface/pull/240 * No continual reconnection without cause by @thewhaleking in https://github.com/opentensor/async-substrate-interface/pull/241 diff --git a/pyproject.toml b/pyproject.toml index a060d67..d260931 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "async-substrate-interface" -version = "1.5.13" +version = "1.5.14" description = "Asyncio library for interacting with substrate. Mostly API-compatible with py-substrate-interface" readme = "README.md" license = { file = "LICENSE" } From 968846cc54278ff4fb0cc8a9715fe3cfeb8bd521 Mon Sep 17 00:00:00 2001 From: ibraheem-latent Date: Thu, 4 Dec 2025 15:06:27 -0800 Subject: [PATCH 6/8] apply addition in sync_substrate --- async_substrate_interface/sync_substrate.py | 27 +++++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/async_substrate_interface/sync_substrate.py b/async_substrate_interface/sync_substrate.py index e6a2e3b..8ddd90b 100644 --- a/async_substrate_interface/sync_substrate.py +++ b/async_substrate_interface/sync_substrate.py @@ -258,7 +258,8 @@ def process_events(self): and event["event"]["event_id"] == "ExtrinsicFailed" ) or ( event["event"]["module_id"] == "MevShield" - and event["event"]["event_id"] == "DecryptedRejected" + and event["event"]["event_id"] + in ("DecryptedRejected", "DecryptionFailed") ): possible_success = False self.__is_success = False @@ -269,13 +270,23 @@ def process_events(self): self.__weight = dispatch_info["weight"] else: # MEV shield extrinsics - dispatch_info = event["event"]["attributes"]["reason"][ - "post_info" - ] - dispatch_error = event["event"]["attributes"]["reason"]["error"] - self.__weight = event["event"]["attributes"]["reason"][ - "post_info" - ]["actual_weight"] + if event["event"]["event_id"] == "DecryptedRejected": + dispatch_info = event["event"]["attributes"]["reason"][ + "post_info" + ] + dispatch_error = event["event"]["attributes"]["reason"][ + "error" + ] + self.__weight = event["event"]["attributes"]["reason"][ + "post_info" + ]["actual_weight"] + else: + self.__error_message = { + "type": "MevShield", + "name": "DecryptionFailed", + "docs": event["event"]["attributes"]["reason"], + } + continue if "Module" in dispatch_error: if isinstance(dispatch_error["Module"], tuple): From 7e6aa0ad03790c6661fb73d123eac44e7281c508 Mon Sep 17 00:00:00 2001 From: ibraheem-latent Date: Thu, 4 Dec 2025 15:31:19 -0800 Subject: [PATCH 7/8] Add master as target --- .github/workflows/check-btcli-tests.yml | 1 + .github/workflows/check-sdk-tests.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/check-btcli-tests.yml b/.github/workflows/check-btcli-tests.yml index f49102f..f8f2176 100644 --- a/.github/workflows/check-btcli-tests.yml +++ b/.github/workflows/check-btcli-tests.yml @@ -13,6 +13,7 @@ on: branches: - main - staging + - master types: [opened, synchronize, reopened, labeled, unlabeled] env: diff --git a/.github/workflows/check-sdk-tests.yml b/.github/workflows/check-sdk-tests.yml index cd1832d..cc8c839 100644 --- a/.github/workflows/check-sdk-tests.yml +++ b/.github/workflows/check-sdk-tests.yml @@ -13,6 +13,7 @@ on: branches: - main - staging + - master types: [opened, synchronize, reopened, labeled, unlabeled] workflow_dispatch: From f0480de068c7674cf65afce72941d8809a71260e Mon Sep 17 00:00:00 2001 From: ibraheem-latent Date: Thu, 4 Dec 2025 17:07:47 -0800 Subject: [PATCH 8/8] update _get_metadata_storage_functions --- async_substrate_interface/types.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/async_substrate_interface/types.py b/async_substrate_interface/types.py index a627132..b9fbfae 100644 --- a/async_substrate_interface/types.py +++ b/async_substrate_interface/types.py @@ -1127,7 +1127,7 @@ def _get_metadata_storage_functions(self, runtime: Runtime) -> list[dict[str, An self.serialize_storage_item( storage_item=storage, module=module, - spec_version_id=self.runtime.runtime_version, + spec_version_id=runtime.runtime_version, runtime=runtime, ) )