Problem
The TCK server does not implement ping / pingAll, so the TCK driver's ClientPing suite cannot run against the Python SDK.
This one has an SDK prerequisite and a deprecation constraint. The Python SDK currently has no Client.ping() / Client.ping_all(). Per the AccountBalanceQuery deprecation proposal (Stage 1), the ping probe must be a CryptoService/getAccountInfo query for account 0.0.2 with ResponseType = COST_ANSWER. Do not implement ping on top of AccountBalanceQuery — that was the historical approach in other SDKs, and its consensus endpoint (CryptoService/cryptoGetBalance) is being shut down in consensus node release 0.77 (testnet ~Aug 13, 2026; mainnet ~Sept 9, 2026). The TCK spec enforces this: the driver runs a gRPC-aware proxy in front of the consensus node and asserts the probe is getAccountInfo COST_ANSWER and that no cryptoGetBalance call is ever sent.
The spec also tests node-health bookkeeping, not just the probe: a failed ping must open backoff for that node, and a successful ping must reset it so the node selector considers the node again immediately. Read the spec's test table (including the proxy-based assertions) in full before designing anything.
Ordering: the spec requires the ClientPing suite to pass before the Stage 2 AccountBalanceQuery deprecation tests may run — so this issue is effectively a prerequisite of hiero-ledger#2525.
Before you start — required reading
TCK handlers are contract work: the TCK driver validates exact parameter names, optionality, defaults, and error semantics against the published spec. Please do not code from this issue title alone (or paste it into an AI tool and ship the first thing that runs) — read these first:
- The spec page linked below, in full — especially the parameter table, the expected response shape, and the error/edge-case tests. If your handler's behavior differs from the spec table, the TCK suite will fail even if the happy path works.
- The deprecation proposal linked above — it defines what the probe must be.
tck/README.md — how the JSON-RPC server, param dataclasses, handler registry, and responses fit together, and how to run the TCK driver locally against your handler. Run the actual TCK suite before opening a PR; unit tests alone are not enough.
- An existing handler as your pattern — pick the closest one in
tck/handlers/ with its matching tck/param/ dataclass and follow its structure, naming, and error handling exactly. Do not invent a new style, and do not re-implement SDK logic in the handler — handlers only wire validated params onto the existing SDK transaction/query.
- Other SDKs' post-Stage-1
Client.ping() implementations — match their semantics (probe form, backoff reset behavior), don't improvise.
CONTRIBUTING.md — test and PR conventions.
Solution
Acceptance criteria
Spec: https://github.com/hiero-ledger/hiero-sdk-tck/blob/main/docs/test-specifications/crypto-service/ClientPing.md
Deprecation proposal: https://github.com/hiero-ledger/sdk-collaboration-hub/blob/main/proposals/account-balance-query-deprecation.md
Problem
The TCK server does not implement
ping/pingAll, so the TCK driver'sClientPingsuite cannot run against the Python SDK.This one has an SDK prerequisite and a deprecation constraint. The Python SDK currently has no
Client.ping()/Client.ping_all(). Per the AccountBalanceQuery deprecation proposal (Stage 1), the ping probe must be aCryptoService/getAccountInfoquery for account0.0.2withResponseType = COST_ANSWER. Do not implement ping on top ofAccountBalanceQuery— that was the historical approach in other SDKs, and its consensus endpoint (CryptoService/cryptoGetBalance) is being shut down in consensus node release 0.77 (testnet ~Aug 13, 2026; mainnet ~Sept 9, 2026). The TCK spec enforces this: the driver runs a gRPC-aware proxy in front of the consensus node and asserts the probe isgetAccountInfoCOST_ANSWER and that nocryptoGetBalancecall is ever sent.The spec also tests node-health bookkeeping, not just the probe: a failed ping must open backoff for that node, and a successful ping must reset it so the node selector considers the node again immediately. Read the spec's test table (including the proxy-based assertions) in full before designing anything.
Ordering: the spec requires the ClientPing suite to pass before the Stage 2
AccountBalanceQuerydeprecation tests may run — so this issue is effectively a prerequisite of hiero-ledger#2525.Before you start — required reading
TCK handlers are contract work: the TCK driver validates exact parameter names, optionality, defaults, and error semantics against the published spec. Please do not code from this issue title alone (or paste it into an AI tool and ship the first thing that runs) — read these first:
tck/README.md— how the JSON-RPC server, param dataclasses, handler registry, and responses fit together, and how to run the TCK driver locally against your handler. Run the actual TCK suite before opening a PR; unit tests alone are not enough.tck/handlers/with its matchingtck/param/dataclass and follow its structure, naming, and error handling exactly. Do not invent a new style, and do not re-implement SDK logic in the handler — handlers only wire validated params onto the existing SDK transaction/query.Client.ping()implementations — match their semantics (probe form, backoff reset behavior), don't improvise.CONTRIBUTING.md— test and PR conventions.Solution
Client.ping(node_account_id)/Client.ping_all()implemented as agetAccountInfoCOST_ANSWER probe of0.0.2pinned to the target node, wired into the SDK's node-health/backoff bookkeeping — possibly as its own issue/PR.PingParams(node account ID / node ID per the spec table) to a suitabletck/param/module.pingandpingAllhandlers registered via@rpc_method("ping")/@rpc_method("pingAll").tests/tck/, then run the TCK driver's ClientPing suite locally (it uses the driver's gRPC proxy via thesetupnodeIpparameter — no extra per-SDK introspection surface is needed).Acceptance criteria
pingandpingAllregistered and dispatchableCryptoService/getAccountInfoCOST_ANSWER probe of0.0.2and nocryptoGetBalancecallpingtargets exactly the requested node;pingAllprobes every node in the network map exactly onceClientPingsuite passesSpec: https://github.com/hiero-ledger/hiero-sdk-tck/blob/main/docs/test-specifications/crypto-service/ClientPing.md
Deprecation proposal: https://github.com/hiero-ledger/sdk-collaboration-hub/blob/main/proposals/account-balance-query-deprecation.md