Skip to content

Commit adee49c

Browse files
committed
fix(api): deprecate events field in shielded TRC20 scan APIs
1 parent 208807d commit adee49c

8 files changed

Lines changed: 140 additions & 84 deletions

File tree

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

Lines changed: 19 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -780,7 +780,7 @@ public WitnessList getPaginatedNowWitnessList(long offset, long limit) throws
780780
if (limit > WITNESS_COUNT_LIMIT_MAX) {
781781
limit = WITNESS_COUNT_LIMIT_MAX;
782782
}
783-
783+
784784
/*
785785
In the maintenance period, the VoteStores will be cleared.
786786
To avoid the race condition of VoteStores deleted but Witness vote counts not updated,
@@ -1502,8 +1502,8 @@ public Protocol.ChainParameters getChainParameters() {
15021502
builder.addChainParameter(Protocol.ChainParameters.ChainParameter.newBuilder()
15031503
.setKey("getAllowTvmSelfdestructRestriction")
15041504
.setValue(dbManager.getDynamicPropertiesStore().getAllowTvmSelfdestructRestriction())
1505-
.build());
1506-
1505+
.build());
1506+
15071507
builder.addChainParameter(Protocol.ChainParameters.ChainParameter.newBuilder()
15081508
.setKey("getProposalExpireTime")
15091509
.setValue(dbManager.getDynamicPropertiesStore().getProposalExpireTime())
@@ -3852,8 +3852,8 @@ public ShieldedTRC20Parameters createShieldedContractParametersWithoutAsk(
38523852
return builder.build(false);
38533853
}
38543854

3855-
private int getShieldedTRC20LogType(TransactionInfo.Log log, byte[] contractAddress,
3856-
ProtocolStringList topicsList) throws ZksnarkException {
3855+
private int getShieldedTRC20LogType(TransactionInfo.Log log, byte[] contractAddress)
3856+
throws ZksnarkException {
38573857
byte[] logAddress = log.getAddress().toByteArray();
38583858
byte[] addressWithoutPrefix = new byte[20];
38593859
if (ArrayUtils.isEmpty(contractAddress) || contractAddress.length != 21) {
@@ -3866,33 +3866,14 @@ private int getShieldedTRC20LogType(TransactionInfo.Log log, byte[] contractAddr
38663866
for (ByteString bs : logTopicsList) {
38673867
topicsBytes = ByteUtil.merge(topicsBytes, bs.toByteArray());
38683868
}
3869-
if (Objects.isNull(topicsList) || topicsList.isEmpty()) {
3870-
if (Arrays.equals(topicsBytes, SHIELDED_TRC20_LOG_TOPICS_MINT)) {
3871-
return 1;
3872-
} else if (Arrays.equals(topicsBytes, SHIELDED_TRC20_LOG_TOPICS_TRANSFER)) {
3873-
return 2;
3874-
} else if (Arrays.equals(topicsBytes, SHIELDED_TRC20_LOG_TOPICS_BURN_LEAF)) {
3875-
return 3;
3876-
} else if (Arrays.equals(topicsBytes, SHIELDED_TRC20_LOG_TOPICS_BURN_TOKEN)) {
3877-
return 4;
3878-
}
3879-
} else {
3880-
for (String topic : topicsList) {
3881-
byte[] topicHash = Hash.sha3(ByteArray.fromString(topic));
3882-
if (Arrays.equals(topicsBytes, topicHash)) {
3883-
if (topic.toLowerCase().contains("mint")) {
3884-
return 1;
3885-
} else if (topic.toLowerCase().contains("transfer")) {
3886-
return 2;
3887-
} else if (topic.toLowerCase().contains("burn")) {
3888-
if (topic.toLowerCase().contains("leaf")) {
3889-
return 3;
3890-
} else if (topic.toLowerCase().contains("token")) {
3891-
return 4;
3892-
}
3893-
}
3894-
}
3895-
}
3869+
if (Arrays.equals(topicsBytes, SHIELDED_TRC20_LOG_TOPICS_MINT)) {
3870+
return 1;
3871+
} else if (Arrays.equals(topicsBytes, SHIELDED_TRC20_LOG_TOPICS_TRANSFER)) {
3872+
return 2;
3873+
} else if (Arrays.equals(topicsBytes, SHIELDED_TRC20_LOG_TOPICS_BURN_LEAF)) {
3874+
return 3;
3875+
} else if (Arrays.equals(topicsBytes, SHIELDED_TRC20_LOG_TOPICS_BURN_TOKEN)) {
3876+
return 4;
38963877
}
38973878
}
38983879
return 0;
@@ -3942,8 +3923,7 @@ private Optional<DecryptNotesTRC20.NoteTx> getNoteTxFromLogListByIvk(
39423923
}
39433924

39443925
private DecryptNotesTRC20 queryTRC20NoteByIvk(long startNum, long endNum,
3945-
byte[] shieldedTRC20ContractAddress, byte[] ivk, byte[] ak, byte[] nk,
3946-
ProtocolStringList topicsList)
3926+
byte[] shieldedTRC20ContractAddress, byte[] ivk, byte[] ak, byte[] nk)
39473927
throws BadItemException, ZksnarkException, ContractExeException {
39483928
if (!(startNum >= 0 && endNum > startNum && endNum - startNum <= 1000)) {
39493929
throw new BadItemException(
@@ -3964,7 +3944,7 @@ private DecryptNotesTRC20 queryTRC20NoteByIvk(long startNum, long endNum,
39643944
Optional<DecryptNotesTRC20.NoteTx> noteTx;
39653945
int index = 0;
39663946
for (TransactionInfo.Log log : logList) {
3967-
int logType = getShieldedTRC20LogType(log, shieldedTRC20ContractAddress, topicsList);
3947+
int logType = getShieldedTRC20LogType(log, shieldedTRC20ContractAddress);
39683948
if (logType > 0) {
39693949
noteBuilder = DecryptNotesTRC20.NoteTx.newBuilder();
39703950
noteBuilder.setTxid(ByteString.copyFrom(txId));
@@ -4048,12 +4028,11 @@ private boolean isShieldedTRC20NoteSpent(GrpcAPI.Note note, long pos, byte[] ak,
40484028

40494029
public DecryptNotesTRC20 scanShieldedTRC20NotesByIvk(
40504030
long startNum, long endNum, byte[] shieldedTRC20ContractAddress,
4051-
byte[] ivk, byte[] ak, byte[] nk, ProtocolStringList topicsList)
4031+
byte[] ivk, byte[] ak, byte[] nk)
40524032
throws BadItemException, ZksnarkException, ContractExeException {
40534033
checkAllowShieldedTransactionApi();
40544034

4055-
return queryTRC20NoteByIvk(startNum, endNum,
4056-
shieldedTRC20ContractAddress, ivk, ak, nk, topicsList);
4035+
return queryTRC20NoteByIvk(startNum, endNum, shieldedTRC20ContractAddress, ivk, ak, nk);
40574036
}
40584037

40594038
private Optional<DecryptNotesTRC20.NoteTx> getNoteTxFromLogListByOvk(
@@ -4127,7 +4106,7 @@ private Optional<DecryptNotesTRC20.NoteTx> getNoteTxFromLogListByOvk(
41274106
}
41284107

41294108
public DecryptNotesTRC20 scanShieldedTRC20NotesByOvk(long startNum, long endNum,
4130-
byte[] ovk, byte[] shieldedTRC20ContractAddress, ProtocolStringList topicsList)
4109+
byte[] ovk, byte[] shieldedTRC20ContractAddress)
41314110
throws ZksnarkException, BadItemException {
41324111
checkAllowShieldedTransactionApi();
41334112

@@ -4149,7 +4128,7 @@ public DecryptNotesTRC20 scanShieldedTRC20NotesByOvk(long startNum, long endNum,
41494128
Optional<DecryptNotesTRC20.NoteTx> noteTx;
41504129
int index = 0;
41514130
for (TransactionInfo.Log log : logList) {
4152-
int logType = getShieldedTRC20LogType(log, shieldedTRC20ContractAddress, topicsList);
4131+
int logType = getShieldedTRC20LogType(log, shieldedTRC20ContractAddress);
41534132
if (logType > 0) {
41544133
noteBuilder = DecryptNotesTRC20.NoteTx.newBuilder();
41554134
noteBuilder.setTxid(ByteString.copyFrom(txid));

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

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.google.protobuf.ByteString;
55
import com.google.protobuf.InvalidProtocolBufferException;
66
import com.google.protobuf.Message;
7-
import com.google.protobuf.ProtocolStringList;
87
import io.grpc.Status;
98
import io.grpc.StatusRuntimeException;
109
import io.grpc.netty.NettyServerBuilder;
@@ -722,18 +721,22 @@ public void isSpend(NoteParameters request, StreamObserver<SpendResult> response
722721
@Override
723722
public void scanShieldedTRC20NotesByIvk(IvkDecryptTRC20Parameters request,
724723
StreamObserver<DecryptNotesTRC20> responseObserver) {
724+
if (!request.getEventsList().isEmpty()) {
725+
responseObserver.onError(Status.INVALID_ARGUMENT
726+
.withDescription("'events' field is deprecated and no longer supported")
727+
.asRuntimeException());
728+
return;
729+
}
725730
long startNum = request.getStartBlockIndex();
726731
long endNum = request.getEndBlockIndex();
727732
byte[] contractAddress = request.getShieldedTRC20ContractAddress().toByteArray();
728733
byte[] ivk = request.getIvk().toByteArray();
729734
byte[] ak = request.getAk().toByteArray();
730735
byte[] nk = request.getNk().toByteArray();
731-
ProtocolStringList topicsList = request.getEventsList();
732736

733737
try {
734738
responseObserver.onNext(
735-
wallet.scanShieldedTRC20NotesByIvk(startNum, endNum, contractAddress, ivk, ak, nk,
736-
topicsList));
739+
wallet.scanShieldedTRC20NotesByIvk(startNum, endNum, contractAddress, ivk, ak, nk));
737740

738741
} catch (Exception e) {
739742
responseObserver.onError(getRunTimeException(e));
@@ -744,15 +747,19 @@ public void scanShieldedTRC20NotesByIvk(IvkDecryptTRC20Parameters request,
744747
@Override
745748
public void scanShieldedTRC20NotesByOvk(OvkDecryptTRC20Parameters request,
746749
StreamObserver<DecryptNotesTRC20> responseObserver) {
750+
if (!request.getEventsList().isEmpty()) {
751+
responseObserver.onError(Status.INVALID_ARGUMENT
752+
.withDescription("'events' field is deprecated and no longer supported")
753+
.asRuntimeException());
754+
return;
755+
}
747756
long startNum = request.getStartBlockIndex();
748757
long endNum = request.getEndBlockIndex();
749758
byte[] contractAddress = request.getShieldedTRC20ContractAddress().toByteArray();
750759
byte[] ovk = request.getOvk().toByteArray();
751-
ProtocolStringList topicList = request.getEventsList();
752760
try {
753761
responseObserver
754-
.onNext(wallet
755-
.scanShieldedTRC20NotesByOvk(startNum, endNum, ovk, contractAddress, topicList));
762+
.onNext(wallet.scanShieldedTRC20NotesByOvk(startNum, endNum, ovk, contractAddress));
756763
} catch (Exception e) {
757764
responseObserver.onError(getRunTimeException(e));
758765
}
@@ -2412,15 +2419,20 @@ public void createShieldedContractParametersWithoutAsk(
24122419
public void scanShieldedTRC20NotesByIvk(
24132420
IvkDecryptTRC20Parameters request,
24142421
StreamObserver<org.tron.api.GrpcAPI.DecryptNotesTRC20> responseObserver) {
2422+
if (!request.getEventsList().isEmpty()) {
2423+
responseObserver.onError(Status.INVALID_ARGUMENT
2424+
.withDescription("'events' field is deprecated and no longer supported")
2425+
.asRuntimeException());
2426+
return;
2427+
}
24152428
long startNum = request.getStartBlockIndex();
24162429
long endNum = request.getEndBlockIndex();
24172430
try {
24182431
DecryptNotesTRC20 decryptNotes = wallet.scanShieldedTRC20NotesByIvk(startNum, endNum,
24192432
request.getShieldedTRC20ContractAddress().toByteArray(),
24202433
request.getIvk().toByteArray(),
24212434
request.getAk().toByteArray(),
2422-
request.getNk().toByteArray(),
2423-
request.getEventsList());
2435+
request.getNk().toByteArray());
24242436
responseObserver.onNext(decryptNotes);
24252437
} catch (BadItemException | ZksnarkException e) {
24262438
responseObserver.onError(getRunTimeException(e));
@@ -2438,13 +2450,18 @@ public void scanShieldedTRC20NotesByIvk(
24382450
public void scanShieldedTRC20NotesByOvk(
24392451
OvkDecryptTRC20Parameters request,
24402452
StreamObserver<org.tron.api.GrpcAPI.DecryptNotesTRC20> responseObserver) {
2453+
if (!request.getEventsList().isEmpty()) {
2454+
responseObserver.onError(Status.INVALID_ARGUMENT
2455+
.withDescription("'events' field is deprecated and no longer supported")
2456+
.asRuntimeException());
2457+
return;
2458+
}
24412459
long startNum = request.getStartBlockIndex();
24422460
long endNum = request.getEndBlockIndex();
24432461
try {
24442462
DecryptNotesTRC20 decryptNotes = wallet.scanShieldedTRC20NotesByOvk(startNum, endNum,
24452463
request.getOvk().toByteArray(),
2446-
request.getShieldedTRC20ContractAddress().toByteArray(),
2447-
request.getEventsList());
2464+
request.getShieldedTRC20ContractAddress().toByteArray());
24482465
responseObserver.onNext(decryptNotes);
24492466
} catch (Exception e) {
24502467
responseObserver.onError(getRunTimeException(e));

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

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.alibaba.fastjson.JSONArray;
44
import com.alibaba.fastjson.JSONObject;
5-
import java.util.stream.Collectors;
65
import javax.servlet.http.HttpServletRequest;
76
import javax.servlet.http.HttpServletResponse;
87
import lombok.extern.slf4j.Slf4j;
@@ -41,23 +40,33 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
4140
IvkDecryptTRC20Parameters.Builder ivkDecryptTRC20Parameters = IvkDecryptTRC20Parameters
4241
.newBuilder();
4342
JsonFormat.merge(params.getParams(), ivkDecryptTRC20Parameters, params.isVisible());
43+
if (!ivkDecryptTRC20Parameters.getEventsList().isEmpty()) {
44+
throw new IllegalArgumentException(
45+
"'events' field is deprecated and no longer supported");
46+
}
4447

4548
GrpcAPI.DecryptNotesTRC20 notes = wallet
4649
.scanShieldedTRC20NotesByIvk(ivkDecryptTRC20Parameters.getStartBlockIndex(),
4750
ivkDecryptTRC20Parameters.getEndBlockIndex(),
4851
ivkDecryptTRC20Parameters.getShieldedTRC20ContractAddress().toByteArray(),
4952
ivkDecryptTRC20Parameters.getIvk().toByteArray(),
5053
ivkDecryptTRC20Parameters.getAk().toByteArray(),
51-
ivkDecryptTRC20Parameters.getNk().toByteArray(),
52-
ivkDecryptTRC20Parameters.getEventsList());
54+
ivkDecryptTRC20Parameters.getNk().toByteArray());
5355
response.getWriter().println(convertOutput(notes, params.isVisible()));
56+
} catch (IllegalArgumentException e) {
57+
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
58+
Util.processError(e, response);
5459
} catch (Exception e) {
5560
Util.processError(e, response);
5661
}
5762
}
5863

5964
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
6065
try {
66+
if (request.getParameter("events") != null) {
67+
throw new IllegalArgumentException(
68+
"'events' field is deprecated and no longer supported");
69+
}
6170
boolean visible = Util.getVisible(request);
6271
long startNum = Long.parseLong(request.getParameter("start_block_index"));
6372
long endNum = Long.parseLong(request.getParameter("end_block_index"));
@@ -74,8 +83,11 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) {
7483
GrpcAPI.DecryptNotesTRC20 notes = wallet
7584
.scanShieldedTRC20NotesByIvk(startNum, endNum,
7685
ByteArray.fromHexString(contractAddress), ByteArray.fromHexString(ivk),
77-
ByteArray.fromHexString(ak), ByteArray.fromHexString(nk), null);
86+
ByteArray.fromHexString(ak), ByteArray.fromHexString(nk));
7887
response.getWriter().println(convertOutput(notes, visible));
88+
} catch (IllegalArgumentException e) {
89+
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
90+
Util.processError(e, response);
7991
} catch (Exception e) {
8092
Util.processError(e, response);
8193
}

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

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

3-
import java.util.stream.Collectors;
43
import javax.servlet.http.HttpServletRequest;
54
import javax.servlet.http.HttpServletResponse;
65
import lombok.extern.slf4j.Slf4j;
@@ -24,23 +23,32 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
2423
OvkDecryptTRC20Parameters.Builder ovkDecryptTRC20Parameters = OvkDecryptTRC20Parameters
2524
.newBuilder();
2625
JsonFormat.merge(params.getParams(), ovkDecryptTRC20Parameters, params.isVisible());
26+
if (!ovkDecryptTRC20Parameters.getEventsList().isEmpty()) {
27+
throw new IllegalArgumentException(
28+
"'events' field is deprecated and no longer supported");
29+
}
2730

2831
GrpcAPI.DecryptNotesTRC20 notes = wallet
2932
.scanShieldedTRC20NotesByOvk(ovkDecryptTRC20Parameters.getStartBlockIndex(),
3033
ovkDecryptTRC20Parameters.getEndBlockIndex(),
3134
ovkDecryptTRC20Parameters.getOvk().toByteArray(),
32-
ovkDecryptTRC20Parameters.getShieldedTRC20ContractAddress().toByteArray(),
33-
ovkDecryptTRC20Parameters.getEventsList()
34-
);
35+
ovkDecryptTRC20Parameters.getShieldedTRC20ContractAddress().toByteArray());
3536
response.getWriter()
3637
.println(ScanShieldedTRC20NotesByIvkServlet.convertOutput(notes, params.isVisible()));
38+
} catch (IllegalArgumentException e) {
39+
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
40+
Util.processError(e, response);
3741
} catch (Exception e) {
3842
Util.processError(e, response);
3943
}
4044
}
4145

4246
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
4347
try {
48+
if (request.getParameter("events") != null) {
49+
throw new IllegalArgumentException(
50+
"'events' field is deprecated and no longer supported");
51+
}
4452
boolean visible = Util.getVisible(request);
4553
long startBlockIndex = Long.parseLong(request.getParameter("start_block_index"));
4654
long endBlockIndex = Long.parseLong(request.getParameter("end_block_index"));
@@ -51,10 +59,13 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) {
5159
}
5260
GrpcAPI.DecryptNotesTRC20 notes = wallet
5361
.scanShieldedTRC20NotesByOvk(startBlockIndex, endBlockIndex,
54-
ByteArray.fromHexString(ovk), ByteArray.fromHexString(contractAddress), null);
62+
ByteArray.fromHexString(ovk), ByteArray.fromHexString(contractAddress));
5563

5664
response.getWriter()
5765
.println(ScanShieldedTRC20NotesByIvkServlet.convertOutput(notes, visible));
66+
} catch (IllegalArgumentException e) {
67+
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
68+
Util.processError(e, response);
5869
} catch (Exception e) {
5970
Util.processError(e, response);
6071
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2243,7 +2243,7 @@ public void testScanShieldedTRC20NotesByIvk() throws Exception {
22432243
byte[] ivk = fvk.inViewingKey().value;
22442244

22452245
GrpcAPI.DecryptNotesTRC20 scannedNotes = wallet.scanShieldedTRC20NotesByIvk(
2246-
statNum, endNum, SHIELDED_CONTRACT_ADDRESS, ivk, fvk.getAk(), fvk.getNk(), null);
2246+
statNum, endNum, SHIELDED_CONTRACT_ADDRESS, ivk, fvk.getAk(), fvk.getNk());
22472247

22482248
for (GrpcAPI.DecryptNotesTRC20.NoteTx noteTx : scannedNotes.getNoteTxsList()) {
22492249
logger.info(noteTx.toString());
@@ -2258,7 +2258,7 @@ public void testscanShieldedTRC20NotesByOvk() throws Exception {
22582258
FullViewingKey fvk = sk.fullViewingKey();
22592259

22602260
GrpcAPI.DecryptNotesTRC20 scannedNotes = wallet.scanShieldedTRC20NotesByOvk(
2261-
statNum, endNum, fvk.getOvk(), SHIELDED_CONTRACT_ADDRESS, null);
2261+
statNum, endNum, fvk.getOvk(), SHIELDED_CONTRACT_ADDRESS);
22622262

22632263
for (GrpcAPI.DecryptNotesTRC20.NoteTx noteTx : scannedNotes.getNoteTxsList()) {
22642264
logger.info(noteTx.toString());
@@ -2274,7 +2274,7 @@ public void isShieldedTRC20ContractNoteSpent() throws Exception {
22742274
byte[] ivk = fvk.inViewingKey().value;
22752275

22762276
GrpcAPI.DecryptNotesTRC20 scannedNotes = wallet.scanShieldedTRC20NotesByIvk(
2277-
statNum, endNum, SHIELDED_CONTRACT_ADDRESS, ivk, fvk.getAk(), fvk.getNk(), null);
2277+
statNum, endNum, SHIELDED_CONTRACT_ADDRESS, ivk, fvk.getAk(), fvk.getNk());
22782278

22792279
for (GrpcAPI.DecryptNotesTRC20.NoteTx noteTx : scannedNotes.getNoteTxsList()) {
22802280
logger.info(noteTx.toString());

0 commit comments

Comments
 (0)