@@ -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 ):
0 commit comments