Skip to content

Commit ca54f12

Browse files
committed
feat: implemented wipeToken Tck endpt
Signed-off-by: Adityarya11 <arya050411@gmail.com>
1 parent ec5baa2 commit ca54f12

3 files changed

Lines changed: 74 additions & 0 deletions

File tree

tck/handlers/token.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from __future__ import annotations
44

5+
from hiero_sdk_python import TokenWipeTransaction
56
from hiero_sdk_python.account.account_id import AccountId
67
from hiero_sdk_python.Duration import Duration
78
from hiero_sdk_python.hbar import Hbar
@@ -43,6 +44,7 @@
4344
GetTokenInfoParams,
4445
MintTokenParams,
4546
PauseTokenParams,
47+
WipeTokenParams,
4648
)
4749
from tck.response.token import (
4850
AirdropTokenResponse,
@@ -55,6 +57,7 @@
5557
GetTokenInfoResponse,
5658
MintTokenResponse,
5759
PauseTokenResponse,
60+
WipeTokenResponse,
5861
)
5962
from tck.util.client_utils import get_client
6063
from tck.util.constants import DEFAULT_GRPC_TIMEOUT
@@ -641,3 +644,42 @@ def get_token_info(params: GetTokenInfoParams) -> GetTokenInfoResponse:
641644

642645
info = query.execute(client)
643646
return _build_token_info_response(info)
647+
648+
649+
def _build_wipe_token_transaction(params: WipeTokenParams) -> TokenWipeTransaction:
650+
"""Build a TokenWipeTransaction from TCK params."""
651+
652+
transaction = TokenWipeTransaction().set_grpc_deadline(DEFAULT_GRPC_TIMEOUT)
653+
654+
if params.tokenId is not None:
655+
transaction.set_token_id(TokenId.from_string(params.tokenId))
656+
657+
if params.accountId is not None:
658+
transaction.set_account_id(AccountId.from_string(params.accountId))
659+
660+
if params.amount is not None:
661+
transaction.set_amount(to_int(params.amount))
662+
663+
if params.serialNumbers is not None:
664+
serialNumberList = [int(serial_number) for serial_number in params.serialNumbers]
665+
666+
transaction.set_serial(serialNumberList)
667+
668+
return transaction
669+
670+
671+
@rpc_method("wipeToken")
672+
def wipe_token(params: WipeTokenParams) -> WipeTokenResponse:
673+
"""Wipes the provided amount of fungible or non-fungible tokens from the specified Hedera account"""
674+
675+
client = get_client(params.sessionId)
676+
677+
transaction = _build_wipe_token_transaction(params)
678+
679+
if params.commonTransactionParams is not None:
680+
params.commonTransactionParams.apply_common_params(transaction, client)
681+
682+
response = transaction.execute(client, wait_for_receipt=False)
683+
reciept: TransactionReceipt = response.get_receipt(client, validate_status=True)
684+
685+
return WipeTokenResponse(status=ResponseCode(reciept.status).name)

tck/param/token.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,3 +251,31 @@ def parse_json_params(cls, params: dict) -> GetTokenInfoParams:
251251
maxQueryPayment=params.get("maxQueryPayment"),
252252
sessionId=parse_session_id(params),
253253
)
254+
255+
256+
@dataclass
257+
class WipeTokenParams(BaseTransactionParams):
258+
"""Wipes the provided amount of fungible or non-fungible tokens from the specified Hedera account."""
259+
260+
tokenId: str | None = None
261+
accountId: str | None = None
262+
amount: str | None = None
263+
serialNumbers: list[str] | None = None
264+
265+
@classmethod
266+
def parse_json_params(cls, params: dict) -> WipeTokenParams:
267+
"""Parse JSON-RPC params into a WipeTokenParams instance."""
268+
serial_numbers = params.get("serialNumbers")
269+
if serial_numbers is not None and not isinstance(serial_numbers, list):
270+
raise ValueError("serialNumbers must be a list")
271+
if serial_numbers is not None and any(not isinstance(serial_number, str) for serial_number in serial_numbers):
272+
raise ValueError("Each serialNumbers item must be a string")
273+
274+
return cls(
275+
tokenId=params.get("tokenId"),
276+
accountId=params.get("accountId"),
277+
amount=params.get("amount"),
278+
serialNumbers=serial_numbers,
279+
sessionId=parse_session_id(params),
280+
commonTransactionParams=parse_common_transaction_params(params),
281+
)

tck/response/token.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,7 @@ class GetTokenInfoResponse:
9797
maxSupply: str | None = None
9898
metadata: str | None = None
9999
ledgerId: str | None = None
100+
101+
102+
class WipeTokenResponse(StatusOnlyResponse):
103+
"""Response payload for wipeToken."""

0 commit comments

Comments
 (0)