Skip to content

Commit f0a46ff

Browse files
authored
fix(api): fix the bug of determine if triggerConstantContract succeeds (#5688)
* fix(api):fix the bug of determine if get scale factor succeed * fix(api):fix bug of isShieldedTRC20NoteSpent
1 parent 245ddfb commit f0a46ff

File tree

2 files changed

+51
-6
lines changed

2 files changed

+51
-6
lines changed

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3862,11 +3862,12 @@ private boolean isShieldedTRC20NoteSpent(GrpcAPI.Note note, long pos, byte[] ak,
38623862
TransactionExtention.Builder trxExtBuilder = TransactionExtention.newBuilder();
38633863
Return.Builder retBuilder = Return.newBuilder();
38643864
TransactionExtention trxExt;
3865+
Transaction trx;
38653866

38663867
try {
38673868
TransactionCapsule trxCap = createTransactionCapsule(trigger,
38683869
ContractType.TriggerSmartContract);
3869-
Transaction trx = triggerConstantContract(trigger, trxCap, trxExtBuilder, retBuilder);
3870+
trx = triggerConstantContract(trigger, trxCap, trxExtBuilder, retBuilder);
38703871

38713872
retBuilder.setResult(true).setCode(response_code.SUCCESS);
38723873
trxExtBuilder.setTransaction(trx);
@@ -3889,10 +3890,10 @@ private boolean isShieldedTRC20NoteSpent(GrpcAPI.Note note, long pos, byte[] ak,
38893890
logger.warn("unknown exception caught: " + e.getMessage(), e);
38903891
} finally {
38913892
trxExt = trxExtBuilder.build();
3893+
trx = trxExt.getTransaction();
38923894
}
38933895

3894-
String code = trxExt.getResult().getCode().toString();
3895-
if ("SUCCESS".equals(code)) {
3896+
if (code.SUCESS == trx.getRet(0).getRet()) {
38963897
List<ByteString> list = trxExt.getConstantResultList();
38973898
byte[] listBytes = new byte[0];
38983899
for (ByteString bs : list) {
@@ -4126,11 +4127,12 @@ public byte[] getShieldedContractScalingFactor(byte[] contractAddress)
41264127
TransactionExtention.Builder trxExtBuilder = TransactionExtention.newBuilder();
41274128
Return.Builder retBuilder = Return.newBuilder();
41284129
TransactionExtention trxExt;
4130+
Transaction trx;
41294131

41304132
try {
41314133
TransactionCapsule trxCap = createTransactionCapsule(trigger,
41324134
ContractType.TriggerSmartContract);
4133-
Transaction trx = triggerConstantContract(trigger, trxCap, trxExtBuilder, retBuilder);
4135+
trx = triggerConstantContract(trigger, trxCap, trxExtBuilder, retBuilder);
41344136

41354137
retBuilder.setResult(true).setCode(response_code.SUCCESS);
41364138
trxExtBuilder.setTransaction(trx);
@@ -4153,10 +4155,10 @@ public byte[] getShieldedContractScalingFactor(byte[] contractAddress)
41534155
logger.warn("Unknown exception caught: " + e.getMessage(), e);
41544156
} finally {
41554157
trxExt = trxExtBuilder.build();
4158+
trx = trxExt.getTransaction();
41564159
}
41574160

4158-
String code = trxExt.getResult().getCode().toString();
4159-
if ("SUCCESS".equals(code)) {
4161+
if (code.SUCESS == trx.getRet(0).getRet()) {
41604162
List<ByteString> list = trxExt.getConstantResultList();
41614163
byte[] listBytes = new byte[0];
41624164
for (ByteString bs : list) {

framework/src/test/java/org/tron/core/capsule/utils/RLPListTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22

33
import java.lang.reflect.InvocationTargetException;
44
import java.lang.reflect.Method;
5+
import java.math.BigInteger;
6+
import java.util.Random;
7+
import org.bouncycastle.util.BigIntegers;
58
import org.junit.Assert;
69
import org.junit.Test;
10+
import org.tron.common.utils.Value;
711

812
public class RLPListTest {
913

@@ -34,5 +38,44 @@ public void testToBytes()
3438
byte[] aBytes = new byte[10];
3539
byte[] bBytes = (byte[]) method.invoke(RLP.class, aBytes);
3640
Assert.assertArrayEquals(aBytes, bBytes);
41+
42+
int i = new Random().nextInt();
43+
byte[] cBytes = BigIntegers.asUnsignedByteArray(BigInteger.valueOf(i));
44+
byte[] dBytes = (byte[]) method.invoke(RLP.class, i);
45+
Assert.assertArrayEquals(cBytes, dBytes);
46+
47+
long j = new Random().nextInt();
48+
byte[] eBytes = BigIntegers.asUnsignedByteArray(BigInteger.valueOf(j));
49+
byte[] fBytes = (byte[]) method.invoke(RLP.class, j);
50+
Assert.assertArrayEquals(eBytes, fBytes);
51+
52+
String test = "testA";
53+
byte[] gBytes = test.getBytes();
54+
byte[] hBytes = (byte[]) method.invoke(RLP.class, test);
55+
Assert.assertArrayEquals(gBytes, hBytes);
56+
57+
BigInteger bigInteger = BigInteger.valueOf(100);
58+
byte[] iBytes = BigIntegers.asUnsignedByteArray(bigInteger);
59+
byte[] jBytes = (byte[]) method.invoke(RLP.class, bigInteger);
60+
Assert.assertArrayEquals(iBytes, jBytes);
61+
62+
Value v = new Value(new byte[0]);
63+
byte[] kBytes = v.asBytes();
64+
byte[] lBytes = (byte[]) method.invoke(RLP.class, v);
65+
Assert.assertArrayEquals(kBytes, lBytes);
66+
67+
char c = 'a';
68+
try {
69+
method.invoke(RLP.class, c);
70+
Assert.fail();
71+
} catch (Exception e) {
72+
Assert.assertTrue(true);
73+
}
74+
}
75+
76+
@Test
77+
public void testEncode() {
78+
byte[] aBytes = RLP.encode(new byte[1]);
79+
Assert.assertEquals(1, aBytes.length);
3780
}
3881
}

0 commit comments

Comments
 (0)