From 2cda33e1c1afa33050517df077ff6182b221cbc2 Mon Sep 17 00:00:00 2001 From: bdhimes Date: Wed, 15 Oct 2025 15:58:41 +0200 Subject: [PATCH 1/2] Ensures `_make_rpc_request` request manager keys are unique to prevent possible lockups. --- async_substrate_interface/async_substrate.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/async_substrate_interface/async_substrate.py b/async_substrate_interface/async_substrate.py index f0c4a92..d7df725 100644 --- a/async_substrate_interface/async_substrate.py +++ b/async_substrate_interface/async_substrate.py @@ -2395,6 +2395,9 @@ async def _make_rpc_request( ) -> RequestResults: request_manager = RequestManager(payloads) + if len(set(x["id"] for x in payloads)) != len(payloads): + raise ValueError("Payloads must have unique ids") + subscription_added = False async with self.ws as ws: @@ -3670,6 +3673,7 @@ async def query_map( self.decode_ss58, ) else: + # storage item and value scale type are not included here because this is batch-decoded in rust page_batches = [ result_keys[i : i + page_size] for i in range(0, len(result_keys), page_size) From c642732d2bdf2f548178e2aec0839f3d4ca88d1c Mon Sep 17 00:00:00 2001 From: bdhimes Date: Wed, 15 Oct 2025 16:00:21 +0200 Subject: [PATCH 2/2] Do the same for sync --- async_substrate_interface/sync_substrate.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/async_substrate_interface/sync_substrate.py b/async_substrate_interface/sync_substrate.py index 9d743c9..5349b31 100644 --- a/async_substrate_interface/sync_substrate.py +++ b/async_substrate_interface/sync_substrate.py @@ -1896,6 +1896,10 @@ def _make_rpc_request( ) -> RequestResults: request_manager = RequestManager(payloads) _received = {} + + if len(set(x["id"] for x in payloads)) != len(payloads): + raise ValueError("Payloads must have unique ids") + subscription_added = False ws = self.connect(init=False if attempt == 1 else True)