diff --git a/framework/src/main/java/org/tron/core/Wallet.java b/framework/src/main/java/org/tron/core/Wallet.java index 53994e6d8ba..b66e85e76fb 100755 --- a/framework/src/main/java/org/tron/core/Wallet.java +++ b/framework/src/main/java/org/tron/core/Wallet.java @@ -2246,7 +2246,10 @@ public TransactionInfoList getTransactionInfoByBlockNum(long blockNum) { TransactionInfoCapsule transactionInfoCapsule = dbManager.getTransactionHistoryStore() .get(Sha256Hash.hash(DBConfig.isECKeyCryptoEngine(), transaction.getRawData().toByteArray())); - transactionInfoList.addTransactionInfo(transactionInfoCapsule.getInstance()); + + if (transactionInfoCapsule != null) { + transactionInfoList.addTransactionInfo(transactionInfoCapsule.getInstance()); + } } } } diff --git a/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServlet.java b/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServlet.java index 4f8f90393b4..dcacbb60290 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServlet.java @@ -29,24 +29,7 @@ public class GetTransactionInfoByBlockNumServlet extends RateLimiterServlet { private JSONObject convertLogAddressToTronAddress(TransactionInfo transactionInfo, boolean visible) { if (visible) { - List newLogList = new ArrayList<>(); - for (Log log : transactionInfo.getLogList()) { - Log.Builder logBuilder = Log.newBuilder(); - logBuilder.setData(log.getData()); - logBuilder.addAllTopics(log.getTopicsList()); - - byte[] oldAddress = log.getAddress().toByteArray(); - - if (oldAddress.length == 0 || oldAddress.length > 20) { - logBuilder.setAddress(log.getAddress()); - } else { - byte[] newAddress = new byte[20]; - int start = 20 - oldAddress.length; - System.arraycopy(oldAddress, 0, newAddress, start, oldAddress.length); - logBuilder.setAddress(ByteString.copyFrom(MUtil.convertToTronAddress(newAddress))); - } - newLogList.add(logBuilder.build()); - } + List newLogList = Util.convertLogAddressToTronAddress(transactionInfo); transactionInfo = transactionInfo.toBuilder().clearLog().addAllLog(newLogList).build(); } diff --git a/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByIdServlet.java b/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByIdServlet.java index a6eaf40e6e7..9a8e2f50806 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByIdServlet.java @@ -27,24 +27,7 @@ public class GetTransactionInfoByIdServlet extends RateLimiterServlet { private static String convertLogAddressToTronAddress(TransactionInfo transactionInfo, boolean visible) { if (visible) { - List newLogList = new ArrayList<>(); - for (Log log : transactionInfo.getLogList()) { - Log.Builder logBuilder = Log.newBuilder(); - logBuilder.setData(log.getData()); - logBuilder.addAllTopics(log.getTopicsList()); - - byte[] oldAddress = log.getAddress().toByteArray(); - if (oldAddress.length == 0 || oldAddress.length > 20) { - logBuilder.setAddress(log.getAddress()); - } else { - byte[] newAddress = new byte[20]; - - int start = 20 - oldAddress.length; - System.arraycopy(oldAddress, 0, newAddress, start, oldAddress.length); - logBuilder.setAddress(ByteString.copyFrom(MUtil.convertToTronAddress(newAddress))); - } - newLogList.add(logBuilder.build()); - } + List newLogList = Util.convertLogAddressToTronAddress(transactionInfo); transactionInfo = transactionInfo.toBuilder().clearLog().addAllLog(newLogList).build(); } return JsonFormat.printToString(transactionInfo, visible); diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/Util.java index 67c2bd7ceeb..f7a7e1f4550 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/Util.java @@ -2,6 +2,7 @@ import static org.tron.common.utils.Commons.decodeFromBase58Check; +import java.util.ArrayList; import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson.JSON; @@ -35,15 +36,17 @@ import org.tron.common.utils.DBConfig; import org.tron.common.utils.Hash; import org.tron.common.utils.Sha256Hash; -import org.tron.core.Wallet; import org.tron.core.actuator.TransactionFactory; import org.tron.core.capsule.BlockCapsule; import org.tron.core.capsule.TransactionCapsule; import org.tron.core.config.args.Args; import org.tron.core.services.http.JsonFormat.ParseException; +import org.tron.core.vm.utils.MUtil; import org.tron.protos.Protocol.Block; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; +import org.tron.protos.Protocol.TransactionInfo; +import org.tron.protos.Protocol.TransactionInfo.Log; import org.tron.protos.contract.SmartContractOuterClass.CreateSmartContract; @Slf4j(topic = "API") @@ -413,5 +416,28 @@ public static void processError(Exception e, HttpServletResponse response) { } } + public static List convertLogAddressToTronAddress(TransactionInfo transactionInfo) { + List newLogList = new ArrayList<>(); + + for (Log log : transactionInfo.getLogList()) { + Log.Builder logBuilder = Log.newBuilder(); + logBuilder.setData(log.getData()); + logBuilder.addAllTopics(log.getTopicsList()); + + byte[] oldAddress = log.getAddress().toByteArray(); + if (oldAddress.length == 0 || oldAddress.length > 20) { + logBuilder.setAddress(log.getAddress()); + } else { + byte[] newAddress = new byte[20]; + int start = 20 - oldAddress.length; + System.arraycopy(oldAddress, 0, newAddress, start, oldAddress.length); + logBuilder.setAddress(ByteString.copyFrom(MUtil.convertToTronAddress(newAddress))); + } + + newLogList.add(logBuilder.build()); + } + + return newLogList; + } }