Skip to content

Commit 6ce27a3

Browse files
authored
Merge pull request #5112 from yanghang8612/feature/optimize_trigger_interface
chore(vm): replace `ResourceCode error` with `Unknown ResourceCode`
2 parents 3ed6a9f + 26360b9 commit 6ce27a3

8 files changed

Lines changed: 139 additions & 32 deletions

File tree

actuator/src/main/java/org/tron/core/vm/nativecontract/DelegateResourceProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public void validate(DelegateResourceParam param, Repository repo) throws Contra
9696
break;
9797
default:
9898
throw new ContractValidateException(
99-
"ResourceCode error, valid ResourceCode[BANDWIDTH、ENERGY]");
99+
"Unknown ResourceCode, valid ResourceCode[BANDWIDTH、ENERGY]");
100100
}
101101

102102
byte[] receiverAddress = param.getReceiverAddress();

actuator/src/main/java/org/tron/core/vm/nativecontract/FreezeBalanceProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public void validate(FreezeBalanceParam param, Repository repo) throws ContractV
4848
break;
4949
default:
5050
throw new ContractValidateException(
51-
"ResourceCode error,valid ResourceCode[BANDWIDTH、ENERGY]");
51+
"Unknown ResourceCode, valid ResourceCode[BANDWIDTH、ENERGY]");
5252
}
5353

5454
// validate for delegating resource

actuator/src/main/java/org/tron/core/vm/nativecontract/FreezeBalanceV2Processor.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
package org.tron.core.vm.nativecontract;
22

3+
import static org.tron.core.actuator.ActuatorConstant.ACCOUNT_EXCEPTION_STR;
4+
import static org.tron.core.actuator.ActuatorConstant.STORE_NOT_EXIST;
5+
import static org.tron.core.config.Parameter.ChainConstant.TRX_PRECISION;
6+
import static org.tron.protos.contract.Common.ResourceCode.BANDWIDTH;
7+
import static org.tron.protos.contract.Common.ResourceCode.ENERGY;
8+
39
import lombok.extern.slf4j.Slf4j;
410
import org.tron.common.utils.DecodeUtil;
511
import org.tron.common.utils.StringUtil;
@@ -9,12 +15,6 @@
915
import org.tron.core.vm.nativecontract.param.FreezeBalanceV2Param;
1016
import org.tron.core.vm.repository.Repository;
1117

12-
import static org.tron.core.actuator.ActuatorConstant.ACCOUNT_EXCEPTION_STR;
13-
import static org.tron.core.actuator.ActuatorConstant.STORE_NOT_EXIST;
14-
import static org.tron.core.config.Parameter.ChainConstant.TRX_PRECISION;
15-
import static org.tron.protos.contract.Common.ResourceCode.BANDWIDTH;
16-
import static org.tron.protos.contract.Common.ResourceCode.ENERGY;
17-
1818
@Slf4j(topic = "VMProcessor")
1919
public class FreezeBalanceV2Processor {
2020

@@ -50,16 +50,16 @@ public void validate(FreezeBalanceV2Param param, Repository repo) throws Contrac
5050
case TRON_POWER:
5151
if (!repo.getDynamicPropertiesStore().supportAllowNewResourceModel()) {
5252
throw new ContractValidateException(
53-
"ResourceCode error, valid ResourceCode[BANDWIDTH、ENERGY]");
53+
"Unknown ResourceCode, valid ResourceCode[BANDWIDTH、ENERGY]");
5454
}
5555
break;
5656
default:
5757
if (repo.getDynamicPropertiesStore().supportAllowNewResourceModel()) {
5858
throw new ContractValidateException(
59-
"ResourceCode error, valid ResourceCode[BANDWIDTH、ENERGY、TRON_POWER]");
59+
"Unknown ResourceCode, valid ResourceCode[BANDWIDTH、ENERGY、TRON_POWER]");
6060
} else {
6161
throw new ContractValidateException(
62-
"ResourceCode error, valid ResourceCode[BANDWIDTH、ENERGY]");
62+
"Unknown ResourceCode, valid ResourceCode[BANDWIDTH、ENERGY]");
6363
}
6464
}
6565
}

actuator/src/main/java/org/tron/core/vm/nativecontract/UnDelegateResourceProcessor.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
package org.tron.core.vm.nativecontract;
22

3+
import static org.tron.core.actuator.ActuatorConstant.ACCOUNT_EXCEPTION_STR;
4+
import static org.tron.core.actuator.ActuatorConstant.STORE_NOT_EXIST;
5+
import static org.tron.core.config.Parameter.ChainConstant.TRX_PRECISION;
6+
import static org.tron.protos.contract.Common.ResourceCode.BANDWIDTH;
7+
import static org.tron.protos.contract.Common.ResourceCode.ENERGY;
8+
39
import com.google.common.primitives.Bytes;
10+
import java.util.Arrays;
11+
import java.util.Objects;
412
import lombok.extern.slf4j.Slf4j;
513
import org.apache.commons.lang3.ArrayUtils;
614
import org.tron.common.utils.DecodeUtil;
@@ -17,15 +25,6 @@
1725
import org.tron.core.vm.nativecontract.param.UnDelegateResourceParam;
1826
import org.tron.core.vm.repository.Repository;
1927

20-
import java.util.Arrays;
21-
import java.util.Objects;
22-
23-
import static org.tron.core.actuator.ActuatorConstant.ACCOUNT_EXCEPTION_STR;
24-
import static org.tron.core.actuator.ActuatorConstant.STORE_NOT_EXIST;
25-
import static org.tron.core.config.Parameter.ChainConstant.TRX_PRECISION;
26-
import static org.tron.protos.contract.Common.ResourceCode.BANDWIDTH;
27-
import static org.tron.protos.contract.Common.ResourceCode.ENERGY;
28-
2928
@Slf4j(topic = "VMProcessor")
3029
public class UnDelegateResourceProcessor {
3130

@@ -84,7 +83,7 @@ public void validate(UnDelegateResourceParam param, Repository repo) throws Cont
8483
break;
8584
default:
8685
throw new ContractValidateException(
87-
"ResourceCode error.valid ResourceCode[BANDWIDTH、ENERGY]");
86+
"Unknown ResourceCode, valid ResourceCode[BANDWIDTH、ENERGY]");
8887
}
8988
}
9089

actuator/src/main/java/org/tron/core/vm/nativecontract/UnfreezeBalanceProcessor.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ public void validate(UnfreezeBalanceParam param, Repository repo)
6565
}
6666
break;
6767
default:
68-
throw new ContractValidateException("ResourceCode error."
69-
+ "valid ResourceCode[BANDWIDTH、Energy]");
68+
throw new ContractValidateException("Unknown ResourceCode, "
69+
+ "valid ResourceCode[BANDWIDTH、ENERGY]");
7070
}
7171
} else {
7272
switch (param.getResourceType()) {
@@ -95,8 +95,8 @@ public void validate(UnfreezeBalanceParam param, Repository repo)
9595
}
9696
break;
9797
default:
98-
throw new ContractValidateException("ResourceCode error."
99-
+ "valid ResourceCode[BANDWIDTH、Energy]");
98+
throw new ContractValidateException("Unknown ResourceCode, "
99+
+ "valid ResourceCode[BANDWIDTH、ENERGY]");
100100
}
101101
}
102102
}

actuator/src/main/java/org/tron/core/vm/nativecontract/UnfreezeBalanceV2Processor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,14 @@ public void validate(UnfreezeBalanceV2Param param, Repository repo)
7171
throw new ContractValidateException("no frozenBalance(TRON_POWER)");
7272
}
7373
} else {
74-
throw new ContractValidateException("ResourceCode error.valid ResourceCode[BANDWIDTH、ENERGY]");
74+
throw new ContractValidateException("Unknown ResourceCode, valid ResourceCode[BANDWIDTH、ENERGY]");
7575
}
7676
break;
7777
default:
7878
if (dynamicStore.supportAllowNewResourceModel()) {
79-
throw new ContractValidateException("ResourceCode error.valid ResourceCode[BANDWIDTH、ENERGY、TRON_POWER]");
79+
throw new ContractValidateException("Unknown ResourceCode, valid ResourceCode[BANDWIDTH、ENERGY、TRON_POWER]");
8080
} else {
81-
throw new ContractValidateException("ResourceCode error.valid ResourceCode[BANDWIDTH、ENERGY]");
81+
throw new ContractValidateException("Unknown ResourceCode, valid ResourceCode[BANDWIDTH、ENERGY]");
8282
}
8383
}
8484

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package org.tron.core.services.http;
2+
3+
import com.google.gson.JsonObject;
4+
import java.io.File;
5+
import lombok.extern.slf4j.Slf4j;
6+
import org.apache.http.HttpResponse;
7+
import org.bouncycastle.util.encoders.Hex;
8+
import org.junit.AfterClass;
9+
import org.junit.BeforeClass;
10+
import org.junit.Test;
11+
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
12+
import org.tron.common.application.Application;
13+
import org.tron.common.application.ApplicationFactory;
14+
import org.tron.common.application.TronApplicationContext;
15+
import org.tron.common.utils.ByteArray;
16+
import org.tron.common.utils.FileUtil;
17+
import org.tron.core.Constant;
18+
import org.tron.core.capsule.ContractCapsule;
19+
import org.tron.core.config.DefaultConfig;
20+
import org.tron.core.config.args.Args;
21+
import org.tron.core.store.StoreFactory;
22+
import org.tron.core.vm.repository.Repository;
23+
import org.tron.core.vm.repository.RepositoryImpl;
24+
import org.tron.protos.Protocol;
25+
import org.tron.protos.contract.SmartContractOuterClass;
26+
import stest.tron.wallet.common.client.utils.HttpMethed;
27+
28+
@Slf4j
29+
public class TriggerSmartContractServletTest {
30+
31+
private static String dbPath;
32+
private static byte[] ownerAddr = Hex.decode("410000000000000000000000000000000000000000");
33+
private static byte[] contractAddr = Hex.decode("41000000000000000000000000000000000000dEaD");
34+
private static TronApplicationContext context;
35+
36+
@BeforeClass
37+
public static void init() throws Exception {
38+
dbPath = "output_" + TriggerSmartContractServletTest.class.getName();
39+
Args.setParam(
40+
new String[]{"--output-directory", dbPath, "--debug", "--witness"}, Constant.TEST_CONF);
41+
Args.getInstance().needSyncCheck = false;
42+
43+
// build app context
44+
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
45+
beanFactory.setAllowCircularReferences(false);
46+
context = new TronApplicationContext(beanFactory);
47+
context.register(DefaultConfig.class);
48+
context.refresh();
49+
Application appT = ApplicationFactory.create(context);
50+
51+
// register http service
52+
FullNodeHttpApiService httpApiService = context.getBean(FullNodeHttpApiService.class);
53+
appT.addService(httpApiService);
54+
55+
// start services
56+
appT.initServices(Args.getInstance());
57+
appT.startServices();
58+
appT.startup();
59+
60+
// create contract for testing
61+
Repository rootRepository = RepositoryImpl.createRoot(StoreFactory.getInstance());
62+
rootRepository.createAccount(contractAddr, Protocol.AccountType.Contract);
63+
rootRepository.createContract(contractAddr, new ContractCapsule(
64+
SmartContractOuterClass.SmartContract.newBuilder().build()));
65+
rootRepository.saveCode(contractAddr, Hex.decode(
66+
"608060405260043610601c5760003560e01c8063f8a8fd6d146021575b600080fd5b60276029565b00"
67+
+ "5b3373ffffffffffffffffffffffffffffffffffffffff166108fc34908115029060405160006040518"
68+
+ "0830381858888f19350505050158015606e573d6000803e3d6000fd5b5056fea2646970667358221220"
69+
+ "45fe2c565cf16b27bb8cbafbe251a850a0bb5cd8806a186dbda12d57685ced6f64736f6c63430008120"
70+
+ "033"));
71+
rootRepository.commit();
72+
}
73+
74+
@AfterClass
75+
public static void destroy() {
76+
if (FileUtil.deleteDir(new File(dbPath))) {
77+
logger.info("Release resources successful.");
78+
} else {
79+
logger.error("Release resources failure.");
80+
}
81+
}
82+
83+
@Test
84+
public void testNormalCall() throws Exception {
85+
HttpMethed.waitToProduceOneBlock("127.0.0.1:8090");
86+
JsonObject parameter = new JsonObject();
87+
parameter.addProperty("owner_address", ByteArray.toHexString(ownerAddr));
88+
parameter.addProperty("contract_address", ByteArray.toHexString(contractAddr));
89+
parameter.addProperty("function_selector", "test()");
90+
invokeToLocal("triggersmartcontract", parameter);
91+
invokeToLocal("triggerconstantcontract", parameter);
92+
invokeToLocal("estimateenergy", parameter);
93+
}
94+
95+
public static HttpResponse invokeToLocal(
96+
String method, JsonObject parameter) {
97+
try {
98+
final String requestUrl = "http://127.0.0.1:8090/wallet/" + method;
99+
return HttpMethed.createConnect(requestUrl, parameter);
100+
} catch (Exception e) {
101+
e.printStackTrace();
102+
return null;
103+
}
104+
}
105+
}

framework/src/test/java/stest/tron/wallet/common/client/utils/HttpMethed.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,12 @@
88
import com.google.gson.JsonParser;
99
import com.google.protobuf.ByteString;
1010
import io.netty.util.internal.StringUtil;
11-
1211
import java.nio.charset.Charset;
1312
import java.util.ArrayList;
1413
import java.util.HashMap;
1514
import java.util.List;
1615
import java.util.Map;
1716
import java.util.Optional;
18-
1917
import lombok.extern.slf4j.Slf4j;
2018
import org.apache.http.HttpResponse;
2119
import org.apache.http.client.HttpClient;
@@ -2227,7 +2225,10 @@ public static void waitToProduceOneBlock(String httpNode) {
22272225
responseContent = HttpMethed.parseResponseContent(response);
22282226
responseContent = HttpMethed.parseStringContent(responseContent.get("block_header").toString());
22292227
responseContent = HttpMethed.parseStringContent(responseContent.get("raw_data").toString());
2230-
Integer currentBlockNum = Integer.parseInt(responseContent.get("number").toString());
2228+
Integer currentBlockNum = 0;
2229+
if (responseContent.containsKey("number")) {
2230+
currentBlockNum = Integer.parseInt(responseContent.get("number").toString());
2231+
}
22312232
Integer nextBlockNum = 0;
22322233
Integer times = 0;
22332234
while (nextBlockNum <= currentBlockNum + 1 && times++ <= 10) {
@@ -2236,7 +2237,9 @@ public static void waitToProduceOneBlock(String httpNode) {
22362237
responseContent =
22372238
HttpMethed.parseStringContent(responseContent.get("block_header").toString());
22382239
responseContent = HttpMethed.parseStringContent(responseContent.get("raw_data").toString());
2239-
nextBlockNum = Integer.parseInt(responseContent.get("number").toString());
2240+
if (responseContent.containsKey("number")) {
2241+
nextBlockNum = Integer.parseInt(responseContent.get("number").toString());
2242+
}
22402243
try {
22412244
Thread.sleep(1200);
22422245
} catch (InterruptedException e) {

0 commit comments

Comments
 (0)