Skip to content

Commit aae368e

Browse files
authored
Merge pull request #243 from opentensor/fix/thewhaleking/usurped-handling
Handle subscription failures from substrate
2 parents 04b7354 + 73b6586 commit aae368e

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

async_substrate_interface/async_substrate.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4021,6 +4021,32 @@ async def result_handler(message: dict, subscription_id) -> tuple[dict, bool]:
40214021
message_result = {
40224022
k.lower(): v for k, v in message["params"]["result"].items()
40234023
}
4024+
# check for any subscription indicators of failure
4025+
failure_message = None
4026+
if "usurped" in message_result:
4027+
failure_message = (
4028+
f"Subscription {subscription_id} usurped: {message_result}"
4029+
)
4030+
if "retracted" in message_result:
4031+
failure_message = (
4032+
f"Subscription {subscription_id} retracted: {message_result}"
4033+
)
4034+
if "finalitytimeout" in message_result:
4035+
failure_message = f"Subscription {subscription_id} finalityTimeout: {message_result}"
4036+
if "dropped" in message_result:
4037+
failure_message = (
4038+
f"Subscription {subscription_id} dropped: {message_result}"
4039+
)
4040+
if "invalid" in message_result:
4041+
failure_message = (
4042+
f"Subscription {subscription_id} invalid: {message_result}"
4043+
)
4044+
4045+
if failure_message is not None:
4046+
async with self.ws as ws:
4047+
await ws.unsubscribe(subscription_id)
4048+
logger.error(failure_message)
4049+
raise SubstrateRequestException(failure_message)
40244050

40254051
if "finalized" in message_result and wait_for_finalization:
40264052
logger.debug("Extrinsic finalized. Unsubscribing.")
@@ -4032,7 +4058,7 @@ async def result_handler(message: dict, subscription_id) -> tuple[dict, bool]:
40324058
"finalized": True,
40334059
}, True
40344060
elif (
4035-
any(x in message_result for x in ["inblock", "inBlock"])
4061+
"inblock" in message_result
40364062
and wait_for_inclusion
40374063
and not wait_for_finalization
40384064
):

async_substrate_interface/sync_substrate.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3187,6 +3187,32 @@ def result_handler(message: dict, subscription_id) -> tuple[dict, bool]:
31873187
k.lower(): v for k, v in message["params"]["result"].items()
31883188
}
31893189

3190+
# check for any subscription indicators of failure
3191+
failure_message = None
3192+
if "usurped" in message_result:
3193+
failure_message = (
3194+
f"Subscription {subscription_id} usurped: {message_result}"
3195+
)
3196+
if "retracted" in message_result:
3197+
failure_message = (
3198+
f"Subscription {subscription_id} retracted: {message_result}"
3199+
)
3200+
if "finalitytimeout" in message_result:
3201+
failure_message = f"Subscription {subscription_id} finalityTimeout: {message_result}"
3202+
if "dropped" in message_result:
3203+
failure_message = (
3204+
f"Subscription {subscription_id} dropped: {message_result}"
3205+
)
3206+
if "invalid" in message_result:
3207+
failure_message = (
3208+
f"Subscription {subscription_id} invalid: {message_result}"
3209+
)
3210+
3211+
if failure_message is not None:
3212+
self.rpc_request("author_unwatchExtrinsic", [subscription_id])
3213+
logger.error(failure_message)
3214+
raise SubstrateRequestException(failure_message)
3215+
31903216
if "finalized" in message_result and wait_for_finalization:
31913217
# Created as a task because we don't actually care about the result
31923218
# TODO change this logic

0 commit comments

Comments
 (0)