2323from hiero_sdk_python .tokens .token_delete_transaction import TokenDeleteTransaction
2424from hiero_sdk_python .tokens .token_freeze_status import TokenFreezeStatus
2525from hiero_sdk_python .tokens .token_freeze_transaction import TokenFreezeTransaction
26+ from hiero_sdk_python .tokens .token_grant_kyc_transaction import TokenGrantKycTransaction
2627from hiero_sdk_python .tokens .token_id import TokenId
2728from hiero_sdk_python .tokens .token_info import TokenInfo
2829from hiero_sdk_python .tokens .token_kyc_status import TokenKycStatus
2930from hiero_sdk_python .tokens .token_mint_transaction import TokenMintTransaction
3031from hiero_sdk_python .tokens .token_pause_status import TokenPauseStatus
3132from hiero_sdk_python .tokens .token_pause_transaction import TokenPauseTransaction
33+ from hiero_sdk_python .tokens .token_revoke_kyc_transaction import TokenRevokeKycTransaction
3234from hiero_sdk_python .tokens .token_type import TokenType
3335from hiero_sdk_python .transaction .transaction_receipt import TransactionReceipt
3436from tck .handlers .registry import rpc_method
4143 DeleteTokenParams ,
4244 FreezeTokenParams ,
4345 GetTokenInfoParams ,
46+ GrantTokenKycParams ,
4447 MintTokenParams ,
4548 PauseTokenParams ,
49+ RevokeTokenKycParams ,
4650)
4751from tck .response .token import (
4852 AirdropTokenResponse ,
5357 DeleteTokenResponse ,
5458 FreezeTokenResponse ,
5559 GetTokenInfoResponse ,
60+ GrantTokenKycResponse ,
5661 MintTokenResponse ,
5762 PauseTokenResponse ,
63+ RevokeTokenKycResponse ,
5864)
5965from tck .util .client_utils import get_client
6066from tck .util .constants import DEFAULT_GRPC_TIMEOUT
@@ -296,13 +302,11 @@ def _build_delete_token_transaction(params: DeleteTokenParams) -> TokenDeleteTra
296302def _build_freeze_token_transaction (params : FreezeTokenParams ) -> TokenFreezeTransaction :
297303 """Build a TokenFreezeTransaction from TCK params."""
298304 transaction = TokenFreezeTransaction ().set_grpc_deadline (DEFAULT_GRPC_TIMEOUT )
299-
300305 if params .tokenId is not None :
301306 transaction .set_token_id (TokenId .from_string (params .tokenId ))
302307
303308 if params .accountId is not None :
304309 transaction .set_account_id (AccountId .from_string (params .accountId ))
305-
306310 return transaction
307311
308312
@@ -316,6 +320,28 @@ def _build_pause_token_transaction(params: PauseTokenParams) -> TokenPauseTransa
316320 return transaction
317321
318322
323+ def _build_grant_token_kyc_transaction (params : GrantTokenKycParams ) -> TokenGrantKycTransaction :
324+ """Build a TokenGrantKycTransaction from TCK params."""
325+ transaction = TokenGrantKycTransaction ().set_grpc_deadline (DEFAULT_GRPC_TIMEOUT )
326+ if params .tokenId is not None :
327+ transaction .set_token_id (TokenId .from_string (params .tokenId ))
328+
329+ if params .accountId is not None :
330+ transaction .set_account_id (AccountId .from_string (params .accountId ))
331+ return transaction
332+
333+
334+ def _build_revoke_token_kyc_transaction (params : RevokeTokenKycParams ) -> TokenRevokeKycTransaction :
335+ """Build a TokenRevokeKycTransaction from TCK params."""
336+ transaction = TokenRevokeKycTransaction ().set_grpc_deadline (DEFAULT_GRPC_TIMEOUT )
337+ if params .tokenId is not None :
338+ transaction .set_token_id (TokenId .from_string (params .tokenId ))
339+
340+ if params .accountId is not None :
341+ transaction .set_account_id (AccountId .from_string (params .accountId ))
342+ return transaction
343+
344+
319345@rpc_method ("associateToken" )
320346def associate_token (params : AssociateTokenParams ) -> AssociateTokenResponse :
321347 """Associate tokens with an account using TCK associateToken parameters."""
@@ -380,6 +406,38 @@ def pause_token(params: PauseTokenParams) -> PauseTokenResponse:
380406 return PauseTokenResponse (status = ResponseCode (receipt .status ).name )
381407
382408
409+ @rpc_method ("grantTokenKyc" )
410+ def grant_token_kyc (params : GrantTokenKycParams ) -> GrantTokenKycResponse :
411+ """Grant KYC to an account for a token using TCK grantTokenKyc parameters."""
412+ client = get_client (params .sessionId )
413+
414+ transaction = _build_grant_token_kyc_transaction (params )
415+
416+ if params .commonTransactionParams is not None :
417+ params .commonTransactionParams .apply_common_params (transaction , client )
418+
419+ response = transaction .execute (client , wait_for_receipt = False )
420+ receipt : TransactionReceipt = response .get_receipt (client , validate_status = True )
421+
422+ return GrantTokenKycResponse (status = ResponseCode (receipt .status ).name )
423+
424+
425+ @rpc_method ("revokeTokenKyc" )
426+ def revoke_token_kyc (params : RevokeTokenKycParams ) -> RevokeTokenKycResponse :
427+ """Revoke KYC from an account for a token using TCK revokeTokenKyc parameters."""
428+ client = get_client (params .sessionId )
429+
430+ transaction = _build_revoke_token_kyc_transaction (params )
431+
432+ if params .commonTransactionParams is not None :
433+ params .commonTransactionParams .apply_common_params (transaction , client )
434+
435+ response = transaction .execute (client , wait_for_receipt = False )
436+ receipt : TransactionReceipt = response .get_receipt (client , validate_status = True )
437+
438+ return RevokeTokenKycResponse (status = ResponseCode (receipt .status ).name )
439+
440+
383441def _build_airdrop_token_transaction (params : AirdropTokenParams ) -> TokenAirdropTransaction :
384442 """Build a TokenAirdropTransaction from TCK params."""
385443 tx = TokenAirdropTransaction ()
0 commit comments