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 .hbar import Hbar
3234from hiero_sdk_python .tokens .token_pause_transaction import TokenPauseTransaction
3335from hiero_sdk_python .tokens .token_revoke_kyc_transaction import TokenRevokeKycTransaction
3436from hiero_sdk_python .tokens .token_type import TokenType
37+ from hiero_sdk_python .transaction .transaction import Transaction
3538from hiero_sdk_python .transaction .transaction_receipt import TransactionReceipt
3639from tck .handlers .registry import rpc_method
3740from tck .param .custom_fee import CustomFeeParams , FixedFeeParams
@@ -299,16 +302,30 @@ def _build_delete_token_transaction(params: DeleteTokenParams) -> TokenDeleteTra
299302 return transaction
300303
301304
302- def _build_freeze_token_transaction (params : FreezeTokenParams ) -> TokenFreezeTransaction :
303- """Build a TokenFreezeTransaction from TCK params."""
304- transaction = TokenFreezeTransaction ().set_grpc_deadline (DEFAULT_GRPC_TIMEOUT )
305+ class _HasTokenAndAccountId (Protocol ):
306+ """Structural type for TCK params that carry an optional tokenId/accountId.
307+
308+ Matches FreezeTokenParams, GrantTokenKycParams, RevokeTokenKycParams, and
309+ any future status-only endpoint (e.g. unfreezeToken) with this same shape.
310+ """
311+
312+ tokenId : str | None
313+ accountId : str | None
314+
305315
316+ def _apply_token_account_ids (transaction : Transaction , params : _HasTokenAndAccountId ) -> None :
317+ """Apply tokenId/accountId from TCK params onto a transaction, if present."""
306318 if params .tokenId is not None :
307319 transaction .set_token_id (TokenId .from_string (params .tokenId ))
308320
309321 if params .accountId is not None :
310322 transaction .set_account_id (AccountId .from_string (params .accountId ))
311323
324+
325+ def _build_freeze_token_transaction (params : FreezeTokenParams ) -> TokenFreezeTransaction :
326+ """Build a TokenFreezeTransaction from TCK params."""
327+ transaction = TokenFreezeTransaction ().set_grpc_deadline (DEFAULT_GRPC_TIMEOUT )
328+ _apply_token_account_ids (transaction , params )
312329 return transaction
313330
314331
@@ -325,26 +342,14 @@ def _build_pause_token_transaction(params: PauseTokenParams) -> TokenPauseTransa
325342def _build_grant_token_kyc_transaction (params : GrantTokenKycParams ) -> TokenGrantKycTransaction :
326343 """Build a TokenGrantKycTransaction from TCK params."""
327344 transaction = TokenGrantKycTransaction ().set_grpc_deadline (DEFAULT_GRPC_TIMEOUT )
328-
329- if params .tokenId is not None :
330- transaction .set_token_id (TokenId .from_string (params .tokenId ))
331-
332- if params .accountId is not None :
333- transaction .set_account_id (AccountId .from_string (params .accountId ))
334-
345+ _apply_token_account_ids (transaction , params )
335346 return transaction
336347
337348
338349def _build_revoke_token_kyc_transaction (params : RevokeTokenKycParams ) -> TokenRevokeKycTransaction :
339350 """Build a TokenRevokeKycTransaction from TCK params."""
340351 transaction = TokenRevokeKycTransaction ().set_grpc_deadline (DEFAULT_GRPC_TIMEOUT )
341-
342- if params .tokenId is not None :
343- transaction .set_token_id (TokenId .from_string (params .tokenId ))
344-
345- if params .accountId is not None :
346- transaction .set_account_id (AccountId .from_string (params .accountId ))
347-
352+ _apply_token_account_ids (transaction , params )
348353 return transaction
349354
350355
0 commit comments