22
33from __future__ import annotations
44
5+ from typing import Protocol
6+
57from hiero_sdk_python .account .account_id import AccountId
68from hiero_sdk_python .Duration import Duration
79from hiero_sdk_python .response_code import ResponseCode
2628from hiero_sdk_python .tokens .token_pause_transaction import TokenPauseTransaction
2729from hiero_sdk_python .tokens .token_revoke_kyc_transaction import TokenRevokeKycTransaction
2830from hiero_sdk_python .tokens .token_type import TokenType
31+ from hiero_sdk_python .transaction .transaction import Transaction
2932from hiero_sdk_python .transaction .transaction_receipt import TransactionReceipt
3033from tck .handlers .registry import rpc_method
3134from tck .param .custom_fee import CustomFeeParams , FixedFeeParams
@@ -290,16 +293,30 @@ def _build_delete_token_transaction(params: DeleteTokenParams) -> TokenDeleteTra
290293 return transaction
291294
292295
293- def _build_freeze_token_transaction (params : FreezeTokenParams ) -> TokenFreezeTransaction :
294- """Build a TokenFreezeTransaction from TCK params."""
295- transaction = TokenFreezeTransaction ().set_grpc_deadline (DEFAULT_GRPC_TIMEOUT )
296+ class _HasTokenAndAccountId (Protocol ):
297+ """Structural type for TCK params that carry an optional tokenId/accountId.
298+
299+ Matches FreezeTokenParams, GrantTokenKycParams, RevokeTokenKycParams, and
300+ any future status-only endpoint (e.g. unfreezeToken) with this same shape.
301+ """
302+
303+ tokenId : str | None
304+ accountId : str | None
305+
296306
307+ def _apply_token_account_ids (transaction : Transaction , params : _HasTokenAndAccountId ) -> None :
308+ """Apply tokenId/accountId from TCK params onto a transaction, if present."""
297309 if params .tokenId is not None :
298310 transaction .set_token_id (TokenId .from_string (params .tokenId ))
299311
300312 if params .accountId is not None :
301313 transaction .set_account_id (AccountId .from_string (params .accountId ))
302314
315+
316+ def _build_freeze_token_transaction (params : FreezeTokenParams ) -> TokenFreezeTransaction :
317+ """Build a TokenFreezeTransaction from TCK params."""
318+ transaction = TokenFreezeTransaction ().set_grpc_deadline (DEFAULT_GRPC_TIMEOUT )
319+ _apply_token_account_ids (transaction , params )
303320 return transaction
304321
305322
@@ -316,26 +333,14 @@ def _build_pause_token_transaction(params: PauseTokenParams) -> TokenPauseTransa
316333def _build_grant_token_kyc_transaction (params : GrantTokenKycParams ) -> TokenGrantKycTransaction :
317334 """Build a TokenGrantKycTransaction from TCK params."""
318335 transaction = TokenGrantKycTransaction ().set_grpc_deadline (DEFAULT_GRPC_TIMEOUT )
319-
320- if params .tokenId is not None :
321- transaction .set_token_id (TokenId .from_string (params .tokenId ))
322-
323- if params .accountId is not None :
324- transaction .set_account_id (AccountId .from_string (params .accountId ))
325-
336+ _apply_token_account_ids (transaction , params )
326337 return transaction
327338
328339
329340def _build_revoke_token_kyc_transaction (params : RevokeTokenKycParams ) -> TokenRevokeKycTransaction :
330341 """Build a TokenRevokeKycTransaction from TCK params."""
331342 transaction = TokenRevokeKycTransaction ().set_grpc_deadline (DEFAULT_GRPC_TIMEOUT )
332-
333- if params .tokenId is not None :
334- transaction .set_token_id (TokenId .from_string (params .tokenId ))
335-
336- if params .accountId is not None :
337- transaction .set_account_id (AccountId .from_string (params .accountId ))
338-
343+ _apply_token_account_ids (transaction , params )
339344 return transaction
340345
341346
0 commit comments