@@ -33,23 +33,35 @@ def __init__(self) -> None:
3333 self .hash : bytes = b""
3434 self .validate_status : bool = False
3535 self .transaction : Transaction | None = None
36+ self ._transaction_node_ids : list [AccountId ] | None = None
3637
37- def get_receipt_query (self , validate_status : bool = False ):
38+ def get_receipt_query (self , validate_status : bool = False , client : Client | None = None ):
3839 """
3940 Create a receipt query for this transaction.
4041
4142 Args:
4243 validate_status (bool, optional): The query should automatically validate the transaction status. (default False)
44+ client (Client, optional): The client to enable failover behavior.
4345
4446 Returns:
4547 TransactionGetReceiptQuery: A configured receipt query.
48+
49+ Raises:
50+ TypeError: If `validate_status` is not a bool or `client` is not a Client.
4651 """
4752 from hiero_sdk_python .query .transaction_get_receipt_query import TransactionGetReceiptQuery
4853
54+ if not isinstance (validate_status , bool ):
55+ raise TypeError ("validate_status must be a boolean" )
56+
57+ if client is not None and not isinstance (client , Client ):
58+ raise TypeError ("client must be an instance of Client" )
59+
60+ node_account_ids = self ._resolve_node_account_ids (client )
4961 return (
5062 TransactionGetReceiptQuery ()
5163 .set_transaction_id (self .transaction_id )
52- .set_node_account_ids ([ self . node_id ] )
64+ .set_node_account_ids (node_account_ids )
5365 .set_validate_status (validate_status )
5466 )
5567
@@ -68,18 +80,28 @@ def get_receipt(
6880 TransactionReceipt: The receipt from the network, containing the status
6981 and any entities created by the transaction
7082 """
71- return self .get_receipt_query (validate_status = validate_status ).execute (client , timeout )
83+ return self .get_receipt_query (validate_status = validate_status , client = client ).execute (client , timeout )
7284
73- def get_record_query (self ):
85+ def get_record_query (self , client : Client | None = None ):
7486 """
7587 Create a record query for this transaction.
7688
89+ Args:
90+ client (Client, optional): The client to enable failover behavior.
91+
7792 Returns:
7893 TransactionRecordQuery: A configured record query.
94+
95+ Raises:
96+ TypeError: If `client` is not a Client.
7997 """
8098 from hiero_sdk_python .query .transaction_record_query import TransactionRecordQuery
8199
82- return TransactionRecordQuery ().set_transaction_id (self .transaction_id ).set_node_account_ids ([self .node_id ])
100+ if client is not None and not isinstance (client , Client ):
101+ raise TypeError ("client must be an instance of Client" )
102+
103+ node_account_ids = self ._resolve_node_account_ids (client )
104+ return TransactionRecordQuery ().set_transaction_id (self .transaction_id ).set_node_account_ids (node_account_ids )
83105
84106 def get_record (self , client : Client , timeout : int | float | None = None ) -> TransactionRecord :
85107 """
@@ -92,4 +114,15 @@ def get_record(self, client: Client, timeout: int | float | None = None) -> Tran
92114 Returns:
93115 TransactionRecord: The full transaction record.
94116 """
95- return self .get_record_query ().execute (client , timeout )
117+ return self .get_record_query (client ).execute (client , timeout )
118+
119+ def _resolve_node_account_ids (self , client : Client ) -> list [AccountId ]:
120+ """Resolve node account IDs for receipt or record query failover."""
121+ node_account_ids = [self .node_id ]
122+
123+ if client is None or not client .allow_receipt_node_failover :
124+ return node_account_ids
125+
126+ available_node_ids = self ._transaction_node_ids if self ._transaction_node_ids else client .get_node_account_ids ()
127+ node_account_ids .extend (node_id for node_id in available_node_ids if node_id != self .node_id )
128+ return node_account_ids
0 commit comments