Skip to content

Commit e8c9787

Browse files
authored
feat: implemented wipeToken TCK endpt. (hiero-ledger#2414)
Signed-off-by: Adityarya11 <arya050411@gmail.com> Signed-off-by: Aditya Arya <arya050411@gmail.com>
1 parent a6f6388 commit e8c9787

3 files changed

Lines changed: 81 additions & 0 deletions

File tree

tck/handlers/token.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
from hiero_sdk_python.tokens.token_reject_transaction import TokenRejectTransaction
3535
from hiero_sdk_python.tokens.token_revoke_kyc_transaction import TokenRevokeKycTransaction
3636
from hiero_sdk_python.tokens.token_type import TokenType
37+
from hiero_sdk_python.tokens.token_wipe_transaction import TokenWipeTransaction
3738
from hiero_sdk_python.transaction.transaction_receipt import TransactionReceipt
3839
from tck.handlers.registry import rpc_method
3940
from tck.param.custom_fee import CustomFeeParams, FixedFeeParams
@@ -51,6 +52,7 @@
5152
PauseTokenParams,
5253
RejectTokenParams,
5354
RevokeTokenKycParams,
55+
WipeTokenParams,
5456
)
5557
from tck.response.token import (
5658
AirdropTokenResponse,
@@ -67,6 +69,7 @@
6769
PauseTokenResponse,
6870
RejectTokenResponse,
6971
RevokeTokenKycResponse,
72+
WipeTokenResponse,
7073
)
7174
from tck.util.client_utils import get_client
7275
from tck.util.constants import DEFAULT_GRPC_TIMEOUT
@@ -776,3 +779,41 @@ def reject_token(params: RejectTokenParams) -> RejectTokenResponse:
776779
return RejectTokenResponse(
777780
status=ResponseCode(receipt.status).name,
778781
)
782+
783+
784+
def _build_wipe_token_transaction(params: WipeTokenParams) -> TokenWipeTransaction:
785+
"""Build a TokenWipeTransaction from TCK params."""
786+
787+
transaction = TokenWipeTransaction().set_grpc_deadline(DEFAULT_GRPC_TIMEOUT)
788+
789+
if params.tokenId is not None:
790+
transaction.set_token_id(TokenId.from_string(params.tokenId))
791+
792+
if params.accountId is not None:
793+
transaction.set_account_id(AccountId.from_string(params.accountId))
794+
795+
if params.amount is not None:
796+
transaction.set_amount(to_int(params.amount))
797+
798+
if params.serialNumbers is not None:
799+
serial_number_list = [int(serial_number) for serial_number in params.serialNumbers]
800+
transaction.set_serial(serial_number_list)
801+
802+
return transaction
803+
804+
805+
@rpc_method("wipeToken")
806+
def wipe_token(params: WipeTokenParams) -> WipeTokenResponse:
807+
"""Wipes the provided amount of fungible or non-fungible tokens from the specified Hedera account"""
808+
809+
client = get_client(params.sessionId)
810+
811+
transaction = _build_wipe_token_transaction(params)
812+
813+
if params.commonTransactionParams is not None:
814+
params.commonTransactionParams.apply_common_params(transaction, client)
815+
816+
response = transaction.execute(client, wait_for_receipt=False)
817+
receipt: TransactionReceipt = response.get_receipt(client, validate_status=True)
818+
819+
return WipeTokenResponse(status=ResponseCode(receipt.status).name)

tck/param/token.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,3 +341,38 @@ def parse_json_params(cls, params: dict) -> RejectTokenParams:
341341
sessionId=parse_session_id(params),
342342
commonTransactionParams=parse_common_transaction_params(params),
343343
)
344+
345+
346+
@dataclass
347+
class WipeTokenParams(BaseTransactionParams):
348+
"""Wipes the provided amount of fungible or non-fungible tokens from the specified Hedera account."""
349+
350+
tokenId: str | None = None
351+
accountId: str | None = None
352+
amount: str | None = None
353+
serialNumbers: list[str] | None = None
354+
355+
@classmethod
356+
def parse_json_params(cls, params: dict) -> WipeTokenParams:
357+
"""Parse JSON-RPC params into a WipeTokenParams instance."""
358+
token_id = params.get("tokenId")
359+
360+
account_id = params.get("accountId")
361+
362+
amount = params.get("amount")
363+
364+
serial_numbers = params.get("serialNumbers")
365+
if serial_numbers is not None and (
366+
not isinstance(serial_numbers, list)
367+
or not all(isinstance(serial_number, str) for serial_number in serial_numbers)
368+
):
369+
raise ValueError("serialNumbers must be a list of strings")
370+
371+
return cls(
372+
tokenId=token_id,
373+
accountId=account_id,
374+
amount=amount,
375+
serialNumbers=serial_numbers,
376+
sessionId=parse_session_id(params),
377+
commonTransactionParams=parse_common_transaction_params(params),
378+
)

tck/response/token.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,8 @@ class GetTokenInfoResponse:
117117
maxSupply: str | None = None
118118
metadata: str | None = None
119119
ledgerId: str | None = None
120+
121+
122+
@dataclass
123+
class WipeTokenResponse(StatusOnlyResponse):
124+
"""Response payload for wipeToken."""

0 commit comments

Comments
 (0)