From 59650162a29596ffab8e30098e69210e71ceaf05 Mon Sep 17 00:00:00 2001 From: ashu Date: Mon, 3 Jun 2019 17:50:30 +0800 Subject: [PATCH 1/3] print exception msg --- .../tron/common/runtime/vm/program/Program.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/tron/common/runtime/vm/program/Program.java b/src/main/java/org/tron/common/runtime/vm/program/Program.java index e075592fcc4..51e6b844b26 100644 --- a/src/main/java/org/tron/common/runtime/vm/program/Program.java +++ b/src/main/java/org/tron/common/runtime/vm/program/Program.java @@ -516,7 +516,7 @@ private void createContractImpl(DataWord value, byte[] programCode, byte[] newAd TransferActuator.validateForSmartContract(deposit, senderAddress, newAddress, endowment); } catch (ContractValidateException e) { // TODO: unreachable exception - throw new BytecodeExecutionException(VALIDATE_FOR_SMART_CONTRACT_FAILURE); + throw new BytecodeExecutionException(VALIDATE_FOR_SMART_CONTRACT_FAILURE, e.getMessage()); } deposit.addBalance(senderAddress, -endowment); newBalance = deposit.addBalance(newAddress, endowment); @@ -710,7 +710,7 @@ public void callToAddress(MessageCall msg) { refundEnergy(msg.getEnergy().longValue(), "refund energy from message call"); throw new TransferException("transfer trx failed: %s", e.getMessage()); } - throw new BytecodeExecutionException(VALIDATE_FOR_SMART_CONTRACT_FAILURE); + throw new BytecodeExecutionException(VALIDATE_FOR_SMART_CONTRACT_FAILURE, e.getMessage()); } deposit.addBalance(senderAddress, -endowment); contextBalance = deposit.addBalance(contextAddress, endowment); @@ -723,7 +723,7 @@ public void callToAddress(MessageCall msg) { refundEnergy(msg.getEnergy().longValue(), "refund energy from message call"); throw new TransferException("transfer trc10 failed: %s", e.getMessage()); } - throw new BytecodeExecutionException(VALIDATE_FOR_SMART_CONTRACT_FAILURE); + throw new BytecodeExecutionException(VALIDATE_FOR_SMART_CONTRACT_FAILURE, e.getMessage()); } deposit.addTokenBalance(senderAddress, tokenId, -endowment); deposit.addTokenBalance(contextAddress, tokenId, endowment); @@ -1414,7 +1414,7 @@ public void callToPrecompiledAddress(MessageCall msg, && senderAddress != contextAddress && msg.getEndowment().value().longValueExact() > 0) { if (!isTokenTransfer) { try { - transfer(deposit, senderAddress, contextAddress, + tranzsfer(deposit, senderAddress, contextAddress, msg.getEndowment().value().longValueExact()); } catch (ContractValidateException e) { throw new BytecodeExecutionException("transfer failure"); @@ -1424,7 +1424,7 @@ public void callToPrecompiledAddress(MessageCall msg, TransferAssetActuator .validateForSmartContract(deposit, senderAddress, contextAddress, tokenId, endowment); } catch (ContractValidateException e) { - throw new BytecodeExecutionException(VALIDATE_FOR_SMART_CONTRACT_FAILURE); + throw new BytecodeExecutionException(VALIDATE_FOR_SMART_CONTRACT_FAILURE, e.getMessage()); } deposit.addTokenBalance(senderAddress, tokenId, -endowment); deposit.addTokenBalance(contextAddress, tokenId, endowment); @@ -1558,6 +1558,10 @@ public static class BytecodeExecutionException extends RuntimeException { public BytecodeExecutionException(String message) { super(message); } + + public BytecodeExecutionException(String message, Object... args) { + super(format(message, args)); + } } public static class TransferException extends BytecodeExecutionException { From 039891243cc804108fcf60c0b39ce9e9aae6794c Mon Sep 17 00:00:00 2001 From: llwslc Date: Mon, 3 Jun 2019 18:08:51 +0800 Subject: [PATCH 2/3] event parse event abi --- build.gradle | 1 + .../logsfilter/ContractEventParserJson.java | 70 +++++++++++-------- .../runtime/vm/LogInfoTriggerParser.java | 13 +++- .../common/runtime/vm/program/Program.java | 2 +- 4 files changed, 52 insertions(+), 34 deletions(-) diff --git a/build.gradle b/build.gradle index 6464ec87001..4947903401a 100755 --- a/build.gradle +++ b/build.gradle @@ -117,6 +117,7 @@ dependencies { compile group: 'com.google.guava', name: 'guava', version: '24.1-jre' compile group: 'com.google.protobuf', name: 'protobuf-java', version: '3.4.0' + compile group: 'com.google.protobuf', name: 'protobuf-java-util', version: '3.4.0' compile "org.iq80.leveldb:leveldb:0.7" diff --git a/src/main/java/org/tron/common/logsfilter/ContractEventParserJson.java b/src/main/java/org/tron/common/logsfilter/ContractEventParserJson.java index c74b2f882d4..32aafa63790 100644 --- a/src/main/java/org/tron/common/logsfilter/ContractEventParserJson.java +++ b/src/main/java/org/tron/common/logsfilter/ContractEventParserJson.java @@ -32,20 +32,24 @@ public static Map parseTopics(List topicList, JSONObject // in case indexed topics doesn't match if (topicsMatched(topicList, entry)) { - for (int i = 0; i < inputs.size(); ++i) { - JSONObject param = inputs.getJSONObject(i); - Boolean indexed = param.getBoolean(INDEXED); - if (indexed == null || !indexed) { - continue; - } - if (index >= topicList.size()) { - break; - } - String str = parseTopic(topicList.get(index++), param.getString("type")); - if (StringUtils.isNotNullOrEmpty(param.getString("name"))) { - map.put(param.getString("name"), str); + if (inputs != null) { + for (int i = 0; i < inputs.size(); ++i) { + JSONObject param = inputs.getJSONObject(i); + if (param != null) { + Boolean indexed = param.getBoolean(INDEXED); + if (indexed == null || !indexed) { + continue; + } + if (index >= topicList.size()) { + break; + } + String str = parseTopic(topicList.get(index++), param.getString("type")); + if (StringUtils.isNotNullOrEmpty(param.getString("name"))) { + map.put(param.getString("name"), str); + } + map.put("" + i, str); + } } - map.put("" + i, str); } } else { for (int i = 1; i < topicList.size(); ++i) { @@ -82,21 +86,22 @@ public static Map parseEventData(byte[] data, if (inputs != null) { for (Integer i = 0; i < inputs.size(); ++i) { JSONObject param = inputs.getJSONObject(i); - Boolean indexed = param.getBoolean(INDEXED); - if (indexed != null && indexed) { - continue; - } + if (param != null) { + Boolean indexed = param.getBoolean(INDEXED); + if (indexed != null && indexed) { + continue; + } - if (startIndex == 0) { - startIndex = i; - } + if (startIndex == 0) { + startIndex = i; + } - String str = parseDataBytes(data, param.getString("type"), index++); - if (StringUtils.isNotNullOrEmpty(param.getString("name"))) { - map.put(param.getString("name"), str); + String str = parseDataBytes(data, param.getString("type"), index++); + if (StringUtils.isNotNullOrEmpty(param.getString("name"))) { + map.put(param.getString("name"), str); + } + map.put("" + i, str); } - map.put("" + i, str); - } } else { map.put("0", Hex.toHexString(data)); @@ -115,14 +120,17 @@ private static boolean topicsMatched(List topicList, JSONObject entry) { } int inputSize = 1; JSONArray inputs = entry.getJSONArray(INPUTS); - for (int i = 0; i < inputs.size(); i++) { - JSONObject param = inputs.getJSONObject(i); - Boolean indexed = param.getBoolean(INDEXED); - if (indexed != null && indexed) { - inputSize++; + if (inputs != null) { + for (int i = 0; i < inputs.size(); i++) { + JSONObject param = inputs.getJSONObject(i); + if (param != null) { + Boolean indexed = param.getBoolean(INDEXED); + if (indexed != null && indexed) { + inputSize++; + } + } } } return inputSize == topicList.size(); } - } diff --git a/src/main/java/org/tron/common/runtime/vm/LogInfoTriggerParser.java b/src/main/java/org/tron/common/runtime/vm/LogInfoTriggerParser.java index 3a8448d5f16..bfbce112e10 100644 --- a/src/main/java/org/tron/common/runtime/vm/LogInfoTriggerParser.java +++ b/src/main/java/org/tron/common/runtime/vm/LogInfoTriggerParser.java @@ -1,9 +1,12 @@ package org.tron.common.runtime.vm; +import com.google.protobuf.InvalidProtocolBufferException; +import com.google.protobuf.util.JsonFormat; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.spongycastle.util.encoders.Hex; @@ -12,9 +15,9 @@ import org.tron.common.storage.Deposit; import org.tron.core.Wallet; import org.tron.core.capsule.ContractCapsule; -import org.tron.core.services.http.JsonFormat; import org.tron.protos.Protocol.SmartContract.ABI; +@Slf4j public class LogInfoTriggerParser { private Long blockNum; @@ -64,7 +67,13 @@ public List parseLogInfos(List logInfos, Deposit depos signMap.put(strContractAddr, creatorAddr); // mark as found. if (abi != null && abi.getEntrysCount() > 0) { - abiMap.put(strContractAddr, JsonFormat.printToString(abi, false)); + try { + abiMap + .put(strContractAddr, JsonFormat.printer().includingDefaultValueFields().print(abi)); + } catch (InvalidProtocolBufferException e) { + abiMap.put(strContractAddr, ""); + logger.info("abi to json empty:" + txId, e); + } } else { abiMap.put(strContractAddr, ""); } diff --git a/src/main/java/org/tron/common/runtime/vm/program/Program.java b/src/main/java/org/tron/common/runtime/vm/program/Program.java index 51e6b844b26..470aff6a72a 100644 --- a/src/main/java/org/tron/common/runtime/vm/program/Program.java +++ b/src/main/java/org/tron/common/runtime/vm/program/Program.java @@ -1414,7 +1414,7 @@ public void callToPrecompiledAddress(MessageCall msg, && senderAddress != contextAddress && msg.getEndowment().value().longValueExact() > 0) { if (!isTokenTransfer) { try { - tranzsfer(deposit, senderAddress, contextAddress, + transfer(deposit, senderAddress, contextAddress, msg.getEndowment().value().longValueExact()); } catch (ContractValidateException e) { throw new BytecodeExecutionException("transfer failure"); From 85d1464000f29b316e2fb52dda93b858a03e2e0e Mon Sep 17 00:00:00 2001 From: ashu Date: Mon, 3 Jun 2019 20:27:46 +0800 Subject: [PATCH 3/3] support mac sed --- ver.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ver.sh b/ver.sh index e692ff28a13..dbcb73b852b 100755 --- a/ver.sh +++ b/ver.sh @@ -25,7 +25,7 @@ fi versionPath="src/main/java/org/tron/program/Version.java" -sed -i "s/versionName.*$/versionName = \"$versionName\";/g;s/versionCode.*$/versionCode = \"$versionCode\";/g" $versionPath +sed -i -e "s/versionName.*$/versionName = \"$versionName\";/g;s/versionCode.*$/versionCode = \"$versionCode\";/g" $versionPath git add $versionPath git commit -m "update a new version. version name:$versionName,version code:$versionCode" git push origin $versionBranch