From 66e9567ca0caf2e0c95c5546933f6bf2ec52d17e Mon Sep 17 00:00:00 2001 From: MonaaEid Date: Sat, 18 Jul 2026 15:21:25 +0300 Subject: [PATCH 1/3] feat: implement endpoint for deleteTopic method Signed-off-by: MonaaEid --- tck/handlers/topic.py | 23 ++++++++++++++++++++++- tck/param/topic.py | 18 ++++++++++++++++++ tck/response/topic.py | 7 +++++++ 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/tck/handlers/topic.py b/tck/handlers/topic.py index d7d413a20..ce6d97f46 100644 --- a/tck/handlers/topic.py +++ b/tck/handlers/topic.py @@ -2,6 +2,7 @@ from hiero_sdk_python.account.account_id import AccountId from hiero_sdk_python.consensus.topic_create_transaction import TopicCreateTransaction +from hiero_sdk_python.consensus.topic_delete_transaction import TopicDeleteTransaction from hiero_sdk_python.consensus.topic_id import TopicId from hiero_sdk_python.consensus.topic_info import TopicInfo from hiero_sdk_python.consensus.topic_message_submit_transaction import TopicMessageSubmitTransaction @@ -14,13 +15,14 @@ from hiero_sdk_python.transaction.transaction_receipt import TransactionReceipt from tck.handlers.registry import rpc_method from tck.param.custom_fee import CustomFeeLimitParams, CustomFeeParams -from tck.param.topic import CreateTopicParams, TopicMessageInfoParams, TopicMessageSubmitParams +from tck.param.topic import CreateTopicParams, TopicMessageInfoParams, TopicMessageSubmitParams, DeleteTopicParams from tck.response.topic import ( CreateTopicResponse, CustomFeeResponse, FixedFeeResponse, TopicInfoResponse, TopicMessageSubmitResponse, + DeleteTopicResponse, ) from tck.util.client_utils import get_client from tck.util.constants import DEFAULT_GRPC_TIMEOUT @@ -95,6 +97,25 @@ def create_topic(params: CreateTopicParams) -> CreateTopicResponse: return CreateTopicResponse(topic_id, ResponseCode(receipt.status).name) +@rpc_method("deleteTopic") +def delete_topic(params: DeleteTopicParams) -> DeleteTopicResponse: + """Delete topic.""" + client = get_client(params.sessionId) + + transaction = TopicDeleteTransaction().set_grpc_deadline(DEFAULT_GRPC_TIMEOUT) + + if params.topicId is not None: + transaction.set_topic_id(TopicId.from_string(params.topicId)) + + if params.commonTransactionParams is not None: + params.commonTransactionParams.apply_common_params(transaction, client) + + response = transaction.execute(client, wait_for_receipt=False) + receipt: TransactionReceipt = response.get_receipt(client, validate_status=True) + + return DeleteTopicResponse(ResponseCode(receipt.status).name) + + def _build_custom_fee_limit(params: CustomFeeLimitParams) -> CustomFeeLimit: """Build custom fee limit from params.""" custom_fee_limit = CustomFeeLimit() diff --git a/tck/param/topic.py b/tck/param/topic.py index e94f296c0..189a9610a 100644 --- a/tck/param/topic.py +++ b/tck/param/topic.py @@ -56,6 +56,24 @@ def parse_json_params(cls, params: dict) -> CreateTopicParams: ) +@dataclass +class DeleteTopicParams(BaseTransactionParams): + """Parameters for deleting a topic. Extends BaseTransactionParams to include common transaction parameters.""" + + topicId: str | None = None + + @classmethod + def parse_json_params(cls, params: dict) -> DeleteTopicParams: + """Parse JSON-RPC params into a DeleteTopicParams instance.""" + if "topicId" not in params or not isinstance(params["topicId"], str): + raise ValueError("topicId is required and must be a string") + return cls( + topicId=params.get("topicId"), + sessionId=parse_session_id(params), + commonTransactionParams=parse_common_transaction_params(params), + ) + + @dataclass class TopicMessageSubmitParams(BaseTransactionParams): """Request parameters for submitTopicMessage endpoint.""" diff --git a/tck/response/topic.py b/tck/response/topic.py index ef378b92c..535f8cbfa 100644 --- a/tck/response/topic.py +++ b/tck/response/topic.py @@ -2,6 +2,8 @@ from dataclasses import dataclass +from tck.response.base import StatusOnlyResponse + @dataclass class CreateTopicResponse: @@ -11,6 +13,11 @@ class CreateTopicResponse: status: str | None = None +@dataclass +class DeleteTopicResponse(StatusOnlyResponse): + """Response payload for deleteTopic.""" + + @dataclass class TopicMessageSubmitResponse: """Response payload for submitTopicMessage.""" From 3b8ef869ac5c1d31df3207b065d802aae8b87ae9 Mon Sep 17 00:00:00 2001 From: MonaaEid Date: Sat, 18 Jul 2026 15:45:48 +0300 Subject: [PATCH 2/3] feat: implement endpoint for deleteTopic method Signed-off-by: MonaaEid --- tck/handlers/topic.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tck/handlers/topic.py b/tck/handlers/topic.py index ce6d97f46..e255332d5 100644 --- a/tck/handlers/topic.py +++ b/tck/handlers/topic.py @@ -15,14 +15,14 @@ from hiero_sdk_python.transaction.transaction_receipt import TransactionReceipt from tck.handlers.registry import rpc_method from tck.param.custom_fee import CustomFeeLimitParams, CustomFeeParams -from tck.param.topic import CreateTopicParams, TopicMessageInfoParams, TopicMessageSubmitParams, DeleteTopicParams +from tck.param.topic import CreateTopicParams, DeleteTopicParams, TopicMessageInfoParams, TopicMessageSubmitParams from tck.response.topic import ( CreateTopicResponse, CustomFeeResponse, + DeleteTopicResponse, FixedFeeResponse, TopicInfoResponse, TopicMessageSubmitResponse, - DeleteTopicResponse, ) from tck.util.client_utils import get_client from tck.util.constants import DEFAULT_GRPC_TIMEOUT From 22f484dab0fe584700678100223b624ad3830eb2 Mon Sep 17 00:00:00 2001 From: MonaaEid Date: Sat, 18 Jul 2026 16:10:13 +0300 Subject: [PATCH 3/3] feat: implement endpoint for deleteTopic method Signed-off-by: MonaaEid --- tck/param/topic.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tck/param/topic.py b/tck/param/topic.py index 189a9610a..e54feb9da 100644 --- a/tck/param/topic.py +++ b/tck/param/topic.py @@ -65,8 +65,6 @@ class DeleteTopicParams(BaseTransactionParams): @classmethod def parse_json_params(cls, params: dict) -> DeleteTopicParams: """Parse JSON-RPC params into a DeleteTopicParams instance.""" - if "topicId" not in params or not isinstance(params["topicId"], str): - raise ValueError("topicId is required and must be a string") return cls( topicId=params.get("topicId"), sessionId=parse_session_id(params),