From ca08100d717a0ba5cf97fc615ef7124eb84c213e Mon Sep 17 00:00:00 2001 From: 0xbigapple Date: Fri, 7 Aug 2026 17:46:38 +0800 Subject: [PATCH] refactor(api): remove dead WalletExtension gRPC service and config 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. --- .../common/parameter/CommonParameter.java | 3 - .../org/tron/core/config/args/NodeConfig.java | 7 ++- common/src/main/resources/reference.conf | 3 - .../java/org/tron/core/config/args/Args.java | 1 - .../org/tron/core/services/RpcApiService.java | 23 -------- .../org/tron/core/services/http/Util.java | 12 ---- framework/src/main/resources/config.conf | 3 - .../java/org/tron/common/ParameterTest.java | 2 - .../tron/common/utils/client/GrpcClient.java | 55 ------------------- .../common/utils/client/WalletClient.java | 18 ------ .../common/utils/client/utils/HttpMethed.java | 44 --------------- .../org/tron/core/config/args/ArgsTest.java | 12 ++++ .../tron/core/services/http/UtilMockTest.java | 10 ---- .../src/test/resources/config-shield.conf | 3 - protocol/src/main/protos/api/api.proto | 36 ------------ 15 files changed, 18 insertions(+), 214 deletions(-) diff --git a/common/src/main/java/org/tron/common/parameter/CommonParameter.java b/common/src/main/java/org/tron/common/parameter/CommonParameter.java index eeb92fdbd60..3f1b623fca1 100644 --- a/common/src/main/java/org/tron/common/parameter/CommonParameter.java +++ b/common/src/main/java/org/tron/common/parameter/CommonParameter.java @@ -295,9 +295,6 @@ public class CommonParameter { public String trustNodeAddr; // clearParam: "" @Getter @Setter - public boolean walletExtensionApi; - @Getter - @Setter public boolean estimateEnergy; @Getter @Setter diff --git a/common/src/main/java/org/tron/core/config/args/NodeConfig.java b/common/src/main/java/org/tron/core/config/args/NodeConfig.java index 91945b5a73b..9d3ae5449ae 100644 --- a/common/src/main/java/org/tron/core/config/args/NodeConfig.java +++ b/common/src/main/java/org/tron/core/config/args/NodeConfig.java @@ -26,7 +26,6 @@ public class NodeConfig { // ---- Flat scalar fields (auto-bound by ConfigBeanFactory) ---- private String trustNode = ""; - private boolean walletExtensionApi = false; private int syncFetchBatchNum = 2000; private int maxPendingBlockSize = 500; private int validateSignThreadNum = 0; // 0 = auto (availableProcessors) @@ -327,6 +326,12 @@ public static NodeConfig fromConfig(Config config) { nc.maxConnectionsWithSameIp = section.getInt("maxActiveNodesWithSameIp"); } + // node.walletExtensionApi (removed): the WalletExtension gRPC service no longer exists + if (section.hasPath("walletExtensionApi")) { + logger.warn("Configuring [node.walletExtensionApi] has been removed and is ignored. " + + "The WalletExtension gRPC service no longer exists."); + } + // Legacy key fallback: node.allowShieldedTransactionApi wins fullNodeAllowShieldedTransaction if (section.hasPath("allowShieldedTransactionApi")) { nc.allowShieldedTransactionApi = diff --git a/common/src/main/resources/reference.conf b/common/src/main/resources/reference.conf index d8c483d932a..a8d0a56a242 100644 --- a/common/src/main/resources/reference.conf +++ b/common/src/main/resources/reference.conf @@ -185,9 +185,6 @@ node { # Trust node for solidity node (example: "127.0.0.1:50051"). trustNode = "" - # Expose extension api to public or not - walletExtensionApi = false - listen.port = 18888 # P2P listen port. fetchBlock.timeout = 500 # Block fetch timeout (ms). diff --git a/framework/src/main/java/org/tron/core/config/args/Args.java b/framework/src/main/java/org/tron/core/config/args/Args.java index 0bca242606e..6d8ae1503fa 100644 --- a/framework/src/main/java/org/tron/core/config/args/Args.java +++ b/framework/src/main/java/org/tron/core/config/args/Args.java @@ -598,7 +598,6 @@ private static void applyNodeConfig(NodeConfig nc) { PARAMETER.trustNodeAddr = nc.getTrustNode(); PARAMETER.validateSignThreadNum = nc.getValidateSignThreadNum(); - PARAMETER.walletExtensionApi = nc.isWalletExtensionApi(); PARAMETER.isOpenFullTcpDisconnect = nc.isOpenFullTcpDisconnect(); PARAMETER.nodeDetectEnable = nc.isNodeDetectEnable(); diff --git a/framework/src/main/java/org/tron/core/services/RpcApiService.java b/framework/src/main/java/org/tron/core/services/RpcApiService.java index b9cb05a3b14..06d00c15b82 100755 --- a/framework/src/main/java/org/tron/core/services/RpcApiService.java +++ b/framework/src/main/java/org/tron/core/services/RpcApiService.java @@ -63,13 +63,10 @@ import org.tron.api.GrpcAPI.TransactionExtention; import org.tron.api.GrpcAPI.TransactionIdList; import org.tron.api.GrpcAPI.TransactionInfoList; -import org.tron.api.GrpcAPI.TransactionList; -import org.tron.api.GrpcAPI.TransactionListExtention; import org.tron.api.GrpcAPI.TransactionSignWeight; import org.tron.api.GrpcAPI.ViewingKeyMessage; import org.tron.api.GrpcAPI.WitnessList; import org.tron.api.MonitorGrpc; -import org.tron.api.WalletExtensionGrpc; import org.tron.api.WalletGrpc.WalletImplBase; import org.tron.api.WalletSolidityGrpc.WalletSolidityImplBase; import org.tron.common.application.RpcService; @@ -199,9 +196,6 @@ protected void addService(NettyServerBuilder serverBuilder) { CommonParameter parameter = Args.getInstance(); if (parameter.isSolidityNode()) { serverBuilder.addService(walletSolidityApi); - if (parameter.isWalletExtensionApi()) { - serverBuilder.addService(new WalletExtensionApi()); - } } else { serverBuilder.addService(walletApi); } @@ -935,23 +929,6 @@ public void getEnergyPrices(EmptyMessage request, } } - /** - * WalletExtensionApi. - */ - public class WalletExtensionApi extends WalletExtensionGrpc.WalletExtensionImplBase { - - private TransactionListExtention transactionList2Extention(TransactionList transactionList) { - if (transactionList == null) { - return null; - } - TransactionListExtention.Builder builder = TransactionListExtention.newBuilder(); - for (Transaction transaction : transactionList.getTransactionList()) { - builder.addTransaction(transaction2Extention(transaction)); - } - return builder.build(); - } - } - /** * WalletApi. */ diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/Util.java index 5be2495e1f7..711f02593db 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/Util.java @@ -36,7 +36,6 @@ import org.tron.api.GrpcAPI.TransactionApprovedList; import org.tron.api.GrpcAPI.TransactionExtention; import org.tron.api.GrpcAPI.TransactionIdList; -import org.tron.api.GrpcAPI.TransactionList; import org.tron.api.GrpcAPI.TransactionSignWeight; import org.tron.common.crypto.Hash; import org.tron.common.parameter.CommonParameter; @@ -148,17 +147,6 @@ public static JSONObject printBlockToJSON(Block block, boolean selfType) { return jsonObject; } - public static String printTransactionList(TransactionList list, boolean selfType) { - List transactions = list.getTransactionList(); - JSONObject jsonObject = JSONObject.parseObject(JsonFormat.printToString(list, selfType)); - JSONArray jsonArray = new JSONArray(); - transactions.stream() - .forEach(transaction -> jsonArray.add(printTransactionToJSON(transaction, selfType))); - jsonObject.put(TRANSACTION, jsonArray); - - return jsonObject.toJSONString(); - } - public static String printTransactionIdList(TransactionIdList list, boolean selfType) { JSONObject jsonObject = JSONObject.parseObject(JsonFormat.printToString(list, selfType)); diff --git a/framework/src/main/resources/config.conf b/framework/src/main/resources/config.conf index 1176dd46311..ddd79c7a0a3 100644 --- a/framework/src/main/resources/config.conf +++ b/framework/src/main/resources/config.conf @@ -78,9 +78,6 @@ node.metrics = { node { trustNode = "127.0.0.1:50051" - # expose extension api to public or not - walletExtensionApi = true - listen.port = 18888 fetchBlock.timeout = 200 diff --git a/framework/src/test/java/org/tron/common/ParameterTest.java b/framework/src/test/java/org/tron/common/ParameterTest.java index 0b66c96462c..250738c127a 100644 --- a/framework/src/test/java/org/tron/common/ParameterTest.java +++ b/framework/src/test/java/org/tron/common/ParameterTest.java @@ -168,8 +168,6 @@ public void testCommonParameter() { assertEquals(1, parameter.getForbidTransferToContract()); parameter.setTrustNodeAddr("address"); assertEquals("address", parameter.getTrustNodeAddr()); - parameter.setWalletExtensionApi(false); - assertFalse(parameter.isWalletExtensionApi()); parameter.setEstimateEnergy(false); assertFalse(parameter.isEstimateEnergy()); parameter.setEstimateEnergyMaxRetry(2); diff --git a/framework/src/test/java/org/tron/common/utils/client/GrpcClient.java b/framework/src/test/java/org/tron/common/utils/client/GrpcClient.java index 139485e4e2b..c8dd6711f42 100644 --- a/framework/src/test/java/org/tron/common/utils/client/GrpcClient.java +++ b/framework/src/test/java/org/tron/common/utils/client/GrpcClient.java @@ -8,7 +8,6 @@ import org.tron.api.GrpcAPI; import org.tron.api.GrpcAPI.AccountNetMessage; -import org.tron.api.GrpcAPI.AccountPaginated; import org.tron.api.GrpcAPI.AssetIssueList; import org.tron.api.GrpcAPI.BlockLimit; import org.tron.api.GrpcAPI.BlockList; @@ -17,9 +16,7 @@ import org.tron.api.GrpcAPI.NodeList; import org.tron.api.GrpcAPI.NumberMessage; import org.tron.api.GrpcAPI.PaginatedMessage; -import org.tron.api.GrpcAPI.TransactionList; import org.tron.api.GrpcAPI.WitnessList; -import org.tron.api.WalletExtensionGrpc; import org.tron.api.WalletGrpc; import org.tron.api.WalletSolidityGrpc; import org.tron.common.utils.ByteArray; @@ -42,7 +39,6 @@ public class GrpcClient { private ManagedChannel channelSolidity = null; private WalletGrpc.WalletBlockingStub blockingStubFull = null; private WalletSolidityGrpc.WalletSolidityBlockingStub blockingStubSolidity = null; - private WalletExtensionGrpc.WalletExtensionBlockingStub blockingStubExtension = null; // public GrpcClient(String host, int port) { // channel = ManagedChannelBuilder.forAddress(host, port) @@ -67,7 +63,6 @@ public GrpcClient(String fullnode, String soliditynode) { .usePlaintext() .build(); blockingStubSolidity = WalletSolidityGrpc.newBlockingStub(channelSolidity); - blockingStubExtension = WalletExtensionGrpc.newBlockingStub(channelSolidity); } } @@ -284,56 +279,6 @@ public Optional listNodes() { } }*/ - /* public Optional getAssetIssueListByTimestamp(long time) { - NumberMessage.Builder timeStamp = NumberMessage.newBuilder(); - timeStamp.setNum(time); - AssetIssueList assetIssueList = blockingStubSolidity - .getAssetIssueListByTimestamp(timeStamp.build()); - return Optional.ofNullable(assetIssueList); - }*/ - /* public Optional getTransactionsByTimestamp( - long start, long end, int offset , int limit) { - TimeMessage.Builder timeMessage = TimeMessage.newBuilder(); - timeMessage.setBeginInMilliseconds(start); - timeMessage.setEndInMilliseconds(end); - TimePaginatedMessage.Builder timePageMessage = TimePaginatedMessage.newBuilder(); - timePageMessage.setTimeMessage(timeMessage); - timePageMessage.setOffset(offset); - timePageMessage.setLimit(limit); - TransactionList transactionList = blockingStubExtension - .getTransactionsByTimestamp(timePageMessage.build()); - return Optional.ofNullable(transactionList); - }*/ - - /** - * constructor. - */ - - public Optional getTransactionsFromThis(byte[] address) { - ByteString addressBs = ByteString.copyFrom(address); - Account account = Account.newBuilder().setAddress(addressBs).build(); - AccountPaginated.Builder builder = AccountPaginated.newBuilder().setAccount(account); - builder.setLimit(1000); - builder.setOffset(0); - TransactionList transactionList = blockingStubExtension - .getTransactionsFromThis(builder.build()); - return Optional.ofNullable(transactionList); - } - - /** - * constructor. - */ - - public Optional getTransactionsToThis(byte[] address) { - ByteString addressBs = ByteString.copyFrom(address); - Account account = Account.newBuilder().setAddress(addressBs).build(); - AccountPaginated.Builder builder = AccountPaginated.newBuilder().setAccount(account); - builder.setLimit(1000); - builder.setOffset(0); - TransactionList transactionList = blockingStubExtension.getTransactionsToThis(builder.build()); - return Optional.ofNullable(transactionList); - } - /* public Optional getTransactionById(String txID){ ByteString bsTxid = ByteString.copyFrom(ByteArray.fromHexString(txID)); BytesMessage request = BytesMessage.newBuilder().setValue(bsTxid).build(); diff --git a/framework/src/test/java/org/tron/common/utils/client/WalletClient.java b/framework/src/test/java/org/tron/common/utils/client/WalletClient.java index 9d9a68da49d..168099182f5 100644 --- a/framework/src/test/java/org/tron/common/utils/client/WalletClient.java +++ b/framework/src/test/java/org/tron/common/utils/client/WalletClient.java @@ -22,7 +22,6 @@ import org.tron.api.GrpcAPI.AssetIssueList; import org.tron.api.GrpcAPI.BlockList; import org.tron.api.GrpcAPI.NodeList; -import org.tron.api.GrpcAPI.TransactionList; import org.tron.api.GrpcAPI.WitnessList; import org.tron.common.crypto.ECKey; import org.tron.common.parameter.CommonParameter; @@ -647,14 +646,6 @@ public static Optional listNodes() { return rpcCli.listNodes(); } - public static Optional getTransactionsFromThis(byte[] address) { - return rpcCli.getTransactionsFromThis(address); - } - - public static Optional getTransactionsToThis(byte[] address) { - return rpcCli.getTransactionsToThis(address); - } - public static Block getBlock(long blockNum) { return rpcCli.getBlock(blockNum); } @@ -701,15 +692,6 @@ private Transaction signTransaction(Transaction transaction) { return TransactionUtils.sign(transaction, this.ecKey); } - /* public static Optional getAssetIssueListByTimestamp(long timestamp) { - return rpcCli.getAssetIssueListByTimestamp(timestamp); - }*/ - - /* public static Optional getTransactionsByTimestamp( - long start, long end, int offset, int limit) { - return rpcCli.getTransactionsByTimestamp(start, end, offset, limit); - }*/ - /** * constructor. */ diff --git a/framework/src/test/java/org/tron/common/utils/client/utils/HttpMethed.java b/framework/src/test/java/org/tron/common/utils/client/utils/HttpMethed.java index cea17b0c033..0f7cf9eeb7e 100644 --- a/framework/src/test/java/org/tron/common/utils/client/utils/HttpMethed.java +++ b/framework/src/test/java/org/tron/common/utils/client/utils/HttpMethed.java @@ -1910,50 +1910,6 @@ public static HttpResponse getTransactionCountByBlocknumFromPbft( return response; } - /** constructor. */ - public static HttpResponse getTransactionsFromThisFromSolidity( - String httpSolidityNode, byte[] fromAddress, long offset, long limit) { - try { - Map map1 = new HashMap(); - Map map = new HashMap(); - map1.put("address", ByteArray.toHexString(fromAddress)); - map.put("account", map1); - map.put("offset", offset); - map.put("limit", limit); - String requestUrl = "http://" + httpSolidityNode + "/walletextension/gettransactionsfromthis"; - String jsonStr = new Gson().toJson(map); - JsonObject jsonObj = new JsonParser().parse(jsonStr).getAsJsonObject(); - response = createConnect(requestUrl, jsonObj); - } catch (Exception e) { - e.printStackTrace(); - httppost.releaseConnection(); - return null; - } - return response; - } - - /** constructor. */ - public static HttpResponse getTransactionsToThisFromSolidity( - String httpSolidityNode, byte[] toAddress, long offset, long limit) { - try { - Map map1 = new HashMap(); - Map map = new HashMap(); - map1.put("address", ByteArray.toHexString(toAddress)); - map.put("account", map1); - map.put("offset", offset); - map.put("limit", limit); - String requestUrl = "http://" + httpSolidityNode + "/walletextension/gettransactionstothis"; - String jsonStr = new Gson().toJson(map); - JsonObject jsonObj = new JsonParser().parse(jsonStr).getAsJsonObject(); - response = createConnect(requestUrl, jsonObj); - } catch (Exception e) { - e.printStackTrace(); - httppost.releaseConnection(); - return null; - } - return response; - } - /** constructor. */ public static HttpResponse getAssetIssueByName(String httpNode, String name) { try { diff --git a/framework/src/test/java/org/tron/core/config/args/ArgsTest.java b/framework/src/test/java/org/tron/core/config/args/ArgsTest.java index 36b8a3269c1..a8d56009ee0 100644 --- a/framework/src/test/java/org/tron/core/config/args/ArgsTest.java +++ b/framework/src/test/java/org/tron/core/config/args/ArgsTest.java @@ -369,6 +369,18 @@ public void testConfigStorageDefaults() { Args.clearParam(); } + /** + * The removed node.walletExtensionApi key must stay harmless in operator configs: + * binding ignores it and fromConfig logs a removal warning. Lives here rather than + * NodeConfigTest because module jacoco reports only aggregate framework execution data. + */ + @Test + public void testRemovedWalletExtensionApiKeyIsIgnored() { + Config config = ConfigFactory.parseString("node { walletExtensionApi = true }") + .withFallback(ConfigFactory.defaultReference()); + Assert.assertNotNull(NodeConfig.fromConfig(config)); + } + // =========================================================================== // Boundary tests for node.fetchBlock.timeout clamping. // diff --git a/framework/src/test/java/org/tron/core/services/http/UtilMockTest.java b/framework/src/test/java/org/tron/core/services/http/UtilMockTest.java index d4124c90adf..ed43e960520 100644 --- a/framework/src/test/java/org/tron/core/services/http/UtilMockTest.java +++ b/framework/src/test/java/org/tron/core/services/http/UtilMockTest.java @@ -198,16 +198,6 @@ public void testPrintBlockToJSONCoversAllProtoTopLevelFields() { } } - @Test - public void testPrintTransactionList() { - TransactionCapsule transactionCapsule = getTransactionCapsuleExample(); - GrpcAPI.TransactionList list = GrpcAPI.TransactionList.newBuilder() - .addTransaction(transactionCapsule.getInstance()) - .build(); - String out = Util.printTransactionList(list, true); - Assert.assertNotNull(out); - } - private TransactionCapsule getTransactionCapsuleExample() { final String OWNER_ADDRESS = "41548794500882809695a8a687866e76d4271a1abc"; final String RECEIVER_ADDRESS = "41abd4b9367799eaa3197fecb144eb71de1e049150"; diff --git a/framework/src/test/resources/config-shield.conf b/framework/src/test/resources/config-shield.conf index 1c185f8f82f..33f270bfa03 100644 --- a/framework/src/test/resources/config-shield.conf +++ b/framework/src/test/resources/config-shield.conf @@ -41,9 +41,6 @@ node { # trustNode = "ip:port" trustNode = "127.0.0.1:50051" - # expose extension api to public or not - walletExtensionApi = true - listen.port = 6666 # Number of validate sign thread, default availableProcessors / 2 diff --git a/protocol/src/main/protos/api/api.proto b/protocol/src/main/protos/api/api.proto index f8d13a6bbd3..515fa4222c2 100644 --- a/protocol/src/main/protos/api/api.proto +++ b/protocol/src/main/protos/api/api.proto @@ -613,21 +613,6 @@ service WalletSolidity { } }; -service WalletExtension { - //Please use GetTransactionsFromThis2 instead of this function. - rpc GetTransactionsFromThis (AccountPaginated) returns (TransactionList) { - } - //Use this function instead of GetTransactionsFromThis. - rpc GetTransactionsFromThis2 (AccountPaginated) returns (TransactionListExtention) { - } - //Please use GetTransactionsToThis2 instead of this function. - rpc GetTransactionsToThis (AccountPaginated) returns (TransactionList) { - } - //Use this function instead of GetTransactionsToThis. - rpc GetTransactionsToThis2 (AccountPaginated) returns (TransactionListExtention) { - } -}; - // the api of tron's db service Database { // for tapos @@ -699,9 +684,6 @@ message AssetIssueList { message BlockList { repeated Block block = 1; } -message TransactionList { - repeated Transaction transaction = 1; -} message TransactionIdList { repeated string txId = 1; } @@ -764,10 +746,6 @@ message NumberMessage { message BytesMessage { bytes value = 1; } -message TimeMessage { - int64 beginInMilliseconds = 1; - int64 endInMilliseconds = 2; -} message BlockReq { string id_or_num = 1; bool detail = 2; @@ -780,16 +758,6 @@ message TransactionLimit { bytes transactionId = 1; int64 limitNum = 2; } -message AccountPaginated { - Account account = 1; - int64 offset = 2; - int64 limit = 3; -} -message TimePaginatedMessage { - TimeMessage timeMessage = 1; - int64 offset = 2; - int64 limit = 3; -} //deprecated message AccountNetMessage { int64 freeNetUsed = 1; @@ -854,10 +822,6 @@ message BlockListExtention { repeated BlockExtention block = 1; } -message TransactionListExtention { - repeated TransactionExtention transaction = 1; -} - message BlockIncrementalMerkleTree { int64 number = 1; IncrementalMerkleTree merkleTree = 2;