Skip to content

refactor(api): remove dead WalletExtension gRPC service and config - #6975

Merged
kuny0707 merged 3 commits into
tronprotocol:release_v4.8.3from
0xbigapple:feature/remove-wallet-extension-service
Oct 10, 2026
Merged

kuny0707 merged 3 commits into
tronprotocol:release_v4.8.3from
0xbigapple:feature/remove-wallet-extension-service

Conversation

@0xbigapple

@0xbigapple 0xbigapple commented Sep 17, 2026 •

Copy link
Copy Markdown
Collaborator

What does this PR do?

close #6931.
Removes the dead WalletExtension gRPC service and everything reachable only from it:

  • api.proto: service WalletExtension (GetTransactionsFromThis/2, GetTransactionsToThis/2), plus messages AccountPaginated, TransactionList, TransactionListExtention (referenced only by these four RPCs) and TimeMessage / TimePaginatedMessage (request types of the WalletExtension *ByTimestamp RPCs deleted in 2018, orphaned ever since)
  • RpcApiService: the registration branch and the empty WalletExtensionApi inner class
  • The node.walletExtensionApi config item: CommonParameter / NodeConfig fields, the Args binding, and the key in reference.conf / config.conf / config-shield.conf. Following the retirement convention for node.* keys, NodeConfig.fromConfig now logs a removal warning when the old key is still present in an operator config
  • Dead code only reachable from the above: Util.printTransactionList (sole caller was its own mock test), the WalletExtension stub and wrappers in test utilities GrpcClient / WalletClient, HttpMethed.getTransactions{From,To}ThisFromSolidity (targets /walletextension/* HTTP paths that have no servlet), and commented-out getTransactionsByTimestamp / getAssetIssueListByTimestamp blocks

Why are these changes required?

WalletExtension has had no implementation in any release since v3.7 (2020-03): RpcApiService$WalletExtensionApi overrides none of the four RPCs, so every call falls through to the generated ImplBase default handlers and returns UNIMPLEMENTED. This makes node.walletExtensionApi behavior-irrelevant — enabled, a solidity node registers a service with zero implemented methods (advertised via gRPC reflection when node.rpc.reflectionService is on); disabled, callers get the same UNIMPLEMENTED. Removing it also resolves the default-value inconsistency between config.conf (true) and reference.conf (false).

Six years of unconditional UNIMPLEMENTED rules out any functional dependency, so the service is removed directly without a deprecation period, following existing practice for dead interfaces.

This PR has been tested by:

  • Unit Tests
  • Manual Test

Compatibility

  • Generated code: removing service WalletExtension and the five messages breaks code compiled against WalletExtensionGrpc, AccountPaginated, TransactionList, TransactionListExtention, TimeMessage or TimePaginatedMessage. Other messages and their wire format are unchanged.
  • gRPC status: the four methods return UNIMPLEMENTED before and after; the description changes from "is unimplemented" to "Method not found". On a solidity node with walletExtensionApi = true and one of these methods in node.disabledApi, the call returned UNAVAILABLE and now returns UNIMPLEMENTED; server interceptors (rate limiter, API access, Prometheus) no longer run for these calls.
  • Reflection: protocol.WalletExtension is no longer listed.
  • Config: node.walletExtensionApi is ignored with a startup warning. No action needed for node operators.

Release note

Remove the dead WalletExtension gRPC service

The WalletExtension gRPC service has returned UNIMPLEMENTED for all four RPCs since v3.7. This release removes the service, its messages AccountPaginated, TransactionList, TransactionListExtention, TimeMessage and TimePaginatedMessage, and the node.walletExtensionApi config key.

Compatibility tip: Clients compiled against these generated classes must drop them; to query transactions by account address, use TronGrid. An existing node.walletExtensionApi entry is ignored with a startup warning.

Affected interfaces: WalletExtension/GetTransactionsFromThis, GetTransactionsFromThis2, GetTransactionsToThis, GetTransactionsToThis2.

Follow up

  • tronprotocol/protocol: sync api.proto
  • wallet-cli: no impact now, since it compiles its own proto; when updating its proto, clean up the related code as well, e.g. Utils.printTransactionList
  • tron-docker, tron-deployment, documentation-zh: drop walletExtensionApi from config samples

Extra details

None.

The four WalletExtension RPCs have returned UNIMPLEMENTED since 2019;
the service was only registered on solidity nodes behind
node.walletExtensionApi, which config.conf enabled but reference.conf
disabled. Remove the service, its now-unreferenced messages (including
the TimeMessage/TimePaginatedMessage orphans left by the 2018 RPC
removal), the config key, and the dead client/test helpers. Log a
removal warning when the old key is still present in operator configs.
@halibobo1205 halibobo1205 added this to the GreatVoyage-v4.8.3 milestone Sep 17, 2026
@317787106
317787106 changed the base branch from develop to release_v4.8.3 September 17, 2026 07:19
Comment thread common/src/main/java/org/tron/core/config/args/NodeConfig.java
Comment thread common/src/main/java/org/tron/core/config/args/NodeConfig.java

@waynercheung waynercheung left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed ca08100d717a0ba5cf97fc615ef7124eb84c213e. The removal scope matches #6931, and I found no remaining code references to the removed types. Checkstyle and the 43 targeted tests in ArgsTest, ParameterTest, and UtilMockTest pass. I found no consensus/database changes or confirmed runtime correctness defect.

[SHOULD] Please narrow the "compile-time impact only / runtime behavior is unchanged" claim in the PR description and #6931. On a solidity node with WalletExtension enabled and node.disabledApi = ["gettransactionsfromthis"], the registered method returns UNAVAILABLE through RpcApiAccessInterceptor; after removal, gRPC returns UNIMPLEMENTED without running the configured access/rate-limit interceptors. Reflection output also changes, and replacing the protocol artifact can break compiled consumers that reference the removed types. Please document these intentional compatibility changes.

Requesting changes to complete the config/gRPC regression coverage and the previously requested migration documentation and follow-up links. These do not require retaining the removed service.

Comment thread framework/src/test/java/org/tron/core/config/args/ArgsTest.java Outdated
Comment thread common/src/main/java/org/tron/core/config/args/NodeConfig.java
…emove-wallet-extension-service

# Conflicts:
#	framework/src/main/java/org/tron/core/services/http/Util.java
@0xbigapple

Copy link
Copy Markdown
Collaborator Author

Reviewed ca08100d717a0ba5cf97fc615ef7124eb84c213e. The removal scope matches #6931, and I found no remaining code references to the removed types. Checkstyle and the 43 targeted tests in ArgsTest, ParameterTest, and UtilMockTest pass. I found no consensus/database changes or confirmed runtime correctness defect.

[SHOULD] Please narrow the "compile-time impact only / runtime behavior is unchanged" claim in the PR description and #6931. On a solidity node with WalletExtension enabled and node.disabledApi = ["gettransactionsfromthis"], the registered method returns UNAVAILABLE through RpcApiAccessInterceptor; after removal, gRPC returns UNIMPLEMENTED without running the configured access/rate-limit interceptors. Reflection output also changes, and replacing the protocol artifact can break compiled consumers that reference the removed types. Please document these intentional compatibility changes.

Requesting changes to complete the config/gRPC regression coverage and the previously requested migration documentation and follow-up links. These do not require retaining the removed service.

@waynercheung Thanks. Agreed. Confirmed on a solidity node with node.disabledApi = ["gettransactionsfromthis"]:

# before
ERROR:
  Code: Unavailable
  Message: this API is unavailable due to config

# after
ERROR:
  Code: Unimplemented
  Message: Method not found: protocol.WalletExtension/GetTransactionsFromThis

The description and #6931 now list this node.disabledApi case, the reflection change and the generated-code break under Compatibility.

@waynercheung waynercheung left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed af2f8ce. The previous code and test concerns are addressed, and I found no remaining implementation issues. The 50 targeted tests and Checkstyle pass locally. Approving.

Non-blocking follow-ups:

  • Please track the applicable protocol, deployment, and documentation updates listed in #6931, and add the links under "Follow up".
  • Before the v4.8.3 release, @317787106 please update #6921's principle 2 and item 4 to record the agreed direct-removal exception and target release.

@kuny0707
kuny0707 merged commit 8bb6150 into tronprotocol:release_v4.8.3 Oct 10, 2026
24 of 25 checks passed
Little-Peony added a commit to Little-Peony/java-tron that referenced this pull request Oct 10, 2026
* release_v4.8.3:
  refactor(api): remove dead WalletExtension gRPC service and config (tronprotocol#6975)
Little-Peony added a commit to Little-Peony/java-tron that referenced this pull request Oct 12, 2026
* release_v4.8.3:
  feat(framework): remove --keystore-factory support from FullNode (tronprotocol#6978)
  refactor(proto): remove unused proto discover definition (tronprotocol#7014)
  fix(config): close resource streams (tronprotocol#7002)
  refactor(crypto): remove unused SM2 and SM3 (tronprotocol#6999)
  feat(plugins): backfill section bloom (tronprotocol#6973)
  refactor(api): remove dead WalletExtension gRPC service and config (tronprotocol#6975)
  refactor(framework): decouple Manager from TronJsonRpcImpl (tronprotocol#6990)
  refactor(api): replace response copy wrappers with Jetty content count (tronprotocol#6982)
  update a new version. version name:GreatVoyage-v4.8.2.2-1-gf3e81404fe,version code:18830 (tronprotocol#7008)
  feat: improve node stability and execution efficiency (tronprotocol#7007)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[Feature] Remove the dead WalletExtension gRPC service and config

6 participants