Skip to content

Commit 68b5faf

Browse files
authored
Merge pull request #5412 from lxcmyf/feature/add_grpc_api
feat(api): add gRPC implementation for certain interfaces
2 parents 03e903e + cc5488b commit 68b5faf

13 files changed

Lines changed: 414 additions & 117 deletions

File tree

framework/src/main/java/org/tron/core/Wallet.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
import org.tron.api.GrpcAPI.NoteParameters;
8585
import org.tron.api.GrpcAPI.NumberMessage;
8686
import org.tron.api.GrpcAPI.PaymentAddressMessage;
87+
import org.tron.api.GrpcAPI.PricesResponseMessage;
8788
import org.tron.api.GrpcAPI.PrivateParameters;
8889
import org.tron.api.GrpcAPI.PrivateParametersWithoutAsk;
8990
import org.tron.api.GrpcAPI.PrivateShieldedTRC20Parameters;
@@ -4295,23 +4296,25 @@ public long getEnergyFee(long timestamp) {
42954296
}
42964297
}
42974298

4298-
public String getEnergyPrices() {
4299+
public PricesResponseMessage getEnergyPrices() {
4300+
PricesResponseMessage.Builder builder = PricesResponseMessage.newBuilder();
42994301
try {
4300-
return chainBaseManager.getDynamicPropertiesStore().getEnergyPriceHistory();
4302+
builder.setPrices(chainBaseManager.getDynamicPropertiesStore().getEnergyPriceHistory());
4303+
return builder.build();
43014304
} catch (Exception e) {
43024305
logger.error("GetEnergyPrices failed", e);
43034306
}
4304-
43054307
return null;
43064308
}
43074309

4308-
public String getBandwidthPrices() {
4310+
public PricesResponseMessage getBandwidthPrices() {
4311+
PricesResponseMessage.Builder builder = PricesResponseMessage.newBuilder();
43094312
try {
4310-
return chainBaseManager.getDynamicPropertiesStore().getBandwidthPriceHistory();
4313+
builder.setPrices(chainBaseManager.getDynamicPropertiesStore().getBandwidthPriceHistory());
4314+
return builder.build();
43114315
} catch (Exception e) {
43124316
logger.error("GetBandwidthPrices failed", e);
43134317
}
4314-
43154318
return null;
43164319
}
43174320

@@ -4426,9 +4429,11 @@ public Block getBlock(GrpcAPI.BlockReq request) {
44264429
return block.toBuilder().clearTransactions().build();
44274430
}
44284431

4429-
public String getMemoFeePrices() {
4432+
public PricesResponseMessage getMemoFeePrices() {
4433+
PricesResponseMessage.Builder builder = PricesResponseMessage.newBuilder();
44304434
try {
4431-
return chainBaseManager.getDynamicPropertiesStore().getMemoFeeHistory();
4435+
builder.setPrices(chainBaseManager.getDynamicPropertiesStore().getMemoFeeHistory());
4436+
return builder.build();
44324437
} catch (Exception e) {
44334438
logger.error("GetMemoFeePrices failed", e);
44344439
}

framework/src/main/java/org/tron/core/services/RpcApiService.java

Lines changed: 56 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import org.tron.api.GrpcAPI.OvkDecryptTRC20Parameters;
5050
import org.tron.api.GrpcAPI.PaginatedMessage;
5151
import org.tron.api.GrpcAPI.PaymentAddressMessage;
52+
import org.tron.api.GrpcAPI.PricesResponseMessage;
5253
import org.tron.api.GrpcAPI.PrivateParameters;
5354
import org.tron.api.GrpcAPI.PrivateParametersWithoutAsk;
5455
import org.tron.api.GrpcAPI.PrivateShieldedTRC20Parameters;
@@ -174,16 +175,12 @@ public class RpcApiService implements Service {
174175
private Server apiServer;
175176
@Autowired
176177
private Manager dbManager;
177-
178178
@Autowired
179179
private ChainBaseManager chainBaseManager;
180-
181180
@Autowired
182181
private Wallet wallet;
183-
184182
@Autowired
185183
private TransactionUtil transactionUtil;
186-
187184
@Autowired
188185
private NodeInfoService nodeInfoService;
189186
@Autowired
@@ -192,10 +189,8 @@ public class RpcApiService implements Service {
192189
private LiteFnQueryGrpcInterceptor liteFnQueryGrpcInterceptor;
193190
@Autowired
194191
private RpcApiAccessInterceptor apiAccessInterceptor;
195-
196192
@Autowired
197193
private MetricsApiService metricsApiService;
198-
199194
@Getter
200195
private DatabaseApi databaseApi = new DatabaseApi();
201196
private WalletApi walletApi = new WalletApi();
@@ -997,6 +992,28 @@ public void getBlock(GrpcAPI.BlockReq request,
997992
StreamObserver<BlockExtention> responseObserver) {
998993
getBlockCommon(request, responseObserver);
999994
}
995+
996+
@Override
997+
public void getBandwidthPrices(EmptyMessage request,
998+
StreamObserver<PricesResponseMessage> responseObserver) {
999+
try {
1000+
responseObserver.onNext(wallet.getBandwidthPrices());
1001+
} catch (Exception e) {
1002+
responseObserver.onError(getRunTimeException(e));
1003+
}
1004+
responseObserver.onCompleted();
1005+
}
1006+
1007+
@Override
1008+
public void getEnergyPrices(EmptyMessage request,
1009+
StreamObserver<PricesResponseMessage> responseObserver) {
1010+
try {
1011+
responseObserver.onNext(wallet.getEnergyPrices());
1012+
} catch (Exception e) {
1013+
responseObserver.onError(getRunTimeException(e));
1014+
}
1015+
responseObserver.onCompleted();
1016+
}
10001017
}
10011018

10021019
/**
@@ -2030,6 +2047,39 @@ public void getCanWithdrawUnfreezeAmount(CanWithdrawUnfreezeAmountRequestMessage
20302047
responseObserver.onCompleted();
20312048
}
20322049

2050+
@Override
2051+
public void getBandwidthPrices(EmptyMessage request,
2052+
StreamObserver<PricesResponseMessage> responseObserver) {
2053+
try {
2054+
responseObserver.onNext(wallet.getBandwidthPrices());
2055+
} catch (Exception e) {
2056+
responseObserver.onError(getRunTimeException(e));
2057+
}
2058+
responseObserver.onCompleted();
2059+
}
2060+
2061+
@Override
2062+
public void getEnergyPrices(EmptyMessage request,
2063+
StreamObserver<PricesResponseMessage> responseObserver) {
2064+
try {
2065+
responseObserver.onNext(wallet.getEnergyPrices());
2066+
} catch (Exception e) {
2067+
responseObserver.onError(getRunTimeException(e));
2068+
}
2069+
responseObserver.onCompleted();
2070+
}
2071+
2072+
@Override
2073+
public void getMemoFee(EmptyMessage request,
2074+
StreamObserver<PricesResponseMessage> responseObserver) {
2075+
try {
2076+
responseObserver.onNext(wallet.getMemoFeePrices());
2077+
} catch (Exception e) {
2078+
responseObserver.onError(getRunTimeException(e));
2079+
}
2080+
responseObserver.onCompleted();
2081+
}
2082+
20332083
@Override
20342084
public void getPaginatedProposalList(PaginatedMessage request,
20352085
StreamObserver<ProposalList> responseObserver) {

framework/src/main/java/org/tron/core/services/http/GetBandwidthPricesServlet.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,31 @@
11
package org.tron.core.services.http;
22

3-
import com.alibaba.fastjson.JSONObject;
43
import javax.servlet.http.HttpServletRequest;
54
import javax.servlet.http.HttpServletResponse;
65
import lombok.extern.slf4j.Slf4j;
76
import org.springframework.beans.factory.annotation.Autowired;
87
import org.springframework.stereotype.Component;
8+
import org.tron.api.GrpcAPI.PricesResponseMessage;
99
import org.tron.core.Wallet;
1010

11-
1211
@Component
1312
@Slf4j(topic = "API")
1413
public class GetBandwidthPricesServlet extends RateLimiterServlet {
1514

1615
@Autowired
1716
private Wallet wallet;
1817

18+
@Override
1919
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
2020
try {
21-
String reply = wallet.getBandwidthPrices();
22-
if (reply != null) {
23-
JSONObject jsonObject = new JSONObject();
24-
jsonObject.put("prices", reply);
25-
response.getWriter().println(jsonObject);
26-
} else {
27-
response.getWriter().println("{}");
28-
}
21+
PricesResponseMessage reply = wallet.getBandwidthPrices();
22+
response.getWriter().println(reply == null ? "{}" : JsonFormat.printToString(reply));
2923
} catch (Exception e) {
3024
Util.processError(e, response);
3125
}
3226
}
3327

28+
@Override
3429
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
3530
doGet(request, response);
3631
}

framework/src/main/java/org/tron/core/services/http/GetEnergyPricesServlet.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,31 @@
11
package org.tron.core.services.http;
22

3-
import com.alibaba.fastjson.JSONObject;
43
import javax.servlet.http.HttpServletRequest;
54
import javax.servlet.http.HttpServletResponse;
65
import lombok.extern.slf4j.Slf4j;
76
import org.springframework.beans.factory.annotation.Autowired;
87
import org.springframework.stereotype.Component;
8+
import org.tron.api.GrpcAPI.PricesResponseMessage;
99
import org.tron.core.Wallet;
1010

11-
1211
@Component
1312
@Slf4j(topic = "API")
1413
public class GetEnergyPricesServlet extends RateLimiterServlet {
1514

1615
@Autowired
1716
private Wallet wallet;
1817

18+
@Override
1919
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
2020
try {
21-
String reply = wallet.getEnergyPrices();
22-
if (reply != null) {
23-
JSONObject jsonObject = new JSONObject();
24-
jsonObject.put("prices", reply);
25-
response.getWriter().println(jsonObject);
26-
} else {
27-
response.getWriter().println("{}");
28-
}
21+
PricesResponseMessage reply = wallet.getEnergyPrices();
22+
response.getWriter().println(reply == null ? "{}" : JsonFormat.printToString(reply));
2923
} catch (Exception e) {
3024
Util.processError(e, response);
3125
}
3226
}
3327

28+
@Override
3429
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
3530
doGet(request, response);
3631
}

framework/src/main/java/org/tron/core/services/http/GetMemoFeePricesServlet.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,31 @@
11
package org.tron.core.services.http;
22

3-
import com.alibaba.fastjson.JSONObject;
43
import javax.servlet.http.HttpServletRequest;
54
import javax.servlet.http.HttpServletResponse;
65
import lombok.extern.slf4j.Slf4j;
76
import org.springframework.beans.factory.annotation.Autowired;
87
import org.springframework.stereotype.Component;
8+
import org.tron.api.GrpcAPI.PricesResponseMessage;
99
import org.tron.core.Wallet;
1010

11-
1211
@Component
1312
@Slf4j(topic = "API")
1413
public class GetMemoFeePricesServlet extends RateLimiterServlet {
1514

1615
@Autowired
1716
private Wallet wallet;
1817

18+
@Override
1919
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
2020
try {
21-
String reply = wallet.getMemoFeePrices();
22-
if (reply != null) {
23-
JSONObject jsonObject = new JSONObject();
24-
jsonObject.put("prices", reply);
25-
response.getWriter().println(jsonObject);
26-
} else {
27-
response.getWriter().println("{}");
28-
}
21+
PricesResponseMessage reply = wallet.getMemoFeePrices();
22+
response.getWriter().println(reply == null ? "{}" : JsonFormat.printToString(reply));
2923
} catch (Exception e) {
3024
Util.processError(e, response);
3125
}
3226
}
3327

28+
@Override
3429
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
3530
doGet(request, response);
3631
}

framework/src/main/java/org/tron/core/services/interfaceOnPBFT/RpcApiServiceOnPBFT.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.tron.api.GrpcAPI.NumberMessage;
3232
import org.tron.api.GrpcAPI.OvkDecryptTRC20Parameters;
3333
import org.tron.api.GrpcAPI.PaginatedMessage;
34+
import org.tron.api.GrpcAPI.PricesResponseMessage;
3435
import org.tron.api.GrpcAPI.SpendResult;
3536
import org.tron.api.GrpcAPI.TransactionExtention;
3637
import org.tron.api.GrpcAPI.WitnessList;
@@ -39,8 +40,6 @@
3940
import org.tron.common.crypto.ECKey;
4041
import org.tron.common.es.ExecutorServiceManager;
4142
import org.tron.common.parameter.CommonParameter;
42-
import org.tron.common.utils.StringUtil;
43-
import org.tron.common.utils.Utils;
4443
import org.tron.core.config.args.Args;
4544
import org.tron.core.services.RpcApiService;
4645
import org.tron.core.services.filter.LiteFnQueryGrpcInterceptor;
@@ -557,5 +556,19 @@ public void getBlock(GrpcAPI.BlockReq request,
557556
() -> rpcApiService.getWalletSolidityApi().getBlock(request, responseObserver));
558557
}
559558

559+
@Override
560+
public void getBandwidthPrices(EmptyMessage request,
561+
StreamObserver<PricesResponseMessage> responseObserver) {
562+
walletOnPBFT.futureGet(
563+
() -> rpcApiService.getWalletSolidityApi().getBandwidthPrices(request, responseObserver));
564+
}
565+
566+
@Override
567+
public void getEnergyPrices(EmptyMessage request,
568+
StreamObserver<PricesResponseMessage> responseObserver) {
569+
walletOnPBFT.futureGet(
570+
() -> rpcApiService.getWalletSolidityApi().getEnergyPrices(request, responseObserver));
571+
}
572+
560573
}
561574
}

framework/src/main/java/org/tron/core/services/interfaceOnSolidity/RpcApiServiceOnSolidity.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.tron.api.GrpcAPI.NoteParameters;
2828
import org.tron.api.GrpcAPI.NumberMessage;
2929
import org.tron.api.GrpcAPI.PaginatedMessage;
30+
import org.tron.api.GrpcAPI.PricesResponseMessage;
3031
import org.tron.api.GrpcAPI.Return;
3132
import org.tron.api.GrpcAPI.Return.response_code;
3233
import org.tron.api.GrpcAPI.SpendResult;
@@ -40,8 +41,6 @@
4041
import org.tron.common.es.ExecutorServiceManager;
4142
import org.tron.common.parameter.CommonParameter;
4243
import org.tron.common.utils.Sha256Hash;
43-
import org.tron.common.utils.StringUtil;
44-
import org.tron.common.utils.Utils;
4544
import org.tron.core.capsule.BlockCapsule;
4645
import org.tron.core.config.args.Args;
4746
import org.tron.core.services.RpcApiService;
@@ -540,5 +539,19 @@ public void getBlock(GrpcAPI.BlockReq request,
540539
() -> rpcApiService.getWalletSolidityApi().getBlock(request, responseObserver));
541540
}
542541

542+
@Override
543+
public void getBandwidthPrices(EmptyMessage request,
544+
StreamObserver<PricesResponseMessage> responseObserver) {
545+
walletOnSolidity.futureGet(
546+
() -> rpcApiService.getWalletSolidityApi().getBandwidthPrices(request, responseObserver));
547+
}
548+
549+
@Override
550+
public void getEnergyPrices(EmptyMessage request,
551+
StreamObserver<PricesResponseMessage> responseObserver) {
552+
walletOnSolidity.futureGet(
553+
() -> rpcApiService.getWalletSolidityApi().getEnergyPrices(request, responseObserver));
554+
}
555+
543556
}
544557
}

framework/src/test/java/org/tron/core/WalletTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.tron.api.GrpcAPI.BlockList;
4444
import org.tron.api.GrpcAPI.ExchangeList;
4545
import org.tron.api.GrpcAPI.NumberMessage;
46+
import org.tron.api.GrpcAPI.PricesResponseMessage;
4647
import org.tron.api.GrpcAPI.ProposalList;
4748
import org.tron.common.BaseTest;
4849
import org.tron.common.crypto.ECKey;
@@ -930,8 +931,8 @@ public void testGetCanWithdrawUnfreezeAmount() {
930931

931932
@Test
932933
public void testGetMemoFeePrices() {
933-
String memeFeeList = wallet.getMemoFeePrices();
934-
Assert.assertEquals("0:0", memeFeeList);
934+
PricesResponseMessage memeFeeList = wallet.getMemoFeePrices();
935+
Assert.assertEquals("0:0", memeFeeList.getPrices());
935936
}
936937

937938
@Test

0 commit comments

Comments
 (0)