diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/DataAccount.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/DataAccount.java index aa51901a..0655cb24 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/DataAccount.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/DataAccount.java @@ -157,6 +157,9 @@ public class DataAccount implements AccountHeader, MerkleProvable { * @return return total count; */ public long getDataEntriesTotalCount() { + if(baseAccount == null){ + return 0; + } return baseAccount.dataset.getDataCount(); } diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/LedgerQueryService.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/LedgerQueryService.java index c053b8b3..fba47095 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/LedgerQueryService.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/LedgerQueryService.java @@ -322,9 +322,15 @@ public class LedgerQueryService implements BlockchainQueryService { if (ver < 0) { entries[i] = new KVDataObject(keys[i], -1, PrimitiveType.NIL, null); }else { - byte[] value = dataAccount.getBytes(Bytes.fromString(keys[i]), ver); - BytesValue decodeData = BinaryProtocol.decode(value); - entries[i] = new KVDataObject(keys[i], ver, PrimitiveType.valueOf(decodeData.getType().CODE), decodeData.getValue().toBytes()); + if(dataAccount.getDataEntriesTotalCount()==0 || + dataAccount.getBytes(Bytes.fromString(keys[i]), ver) == null){ + //is the address is not exist; the result is null; + entries[i] = new KVDataObject(keys[i], -1, PrimitiveType.NIL, null); + } else { + byte[] value = dataAccount.getBytes(Bytes.fromString(keys[i]), ver); + BytesValue decodeData = BinaryProtocol.decode(value); + entries[i] = new KVDataObject(keys[i], ver, PrimitiveType.valueOf(decodeData.getType().CODE), decodeData.getValue().toBytes()); + } } } diff --git a/source/peer/src/main/java/com/jd/blockchain/peer/web/LedgerQueryController.java b/source/peer/src/main/java/com/jd/blockchain/peer/web/LedgerQueryController.java index 637c9216..222d7bf6 100644 --- a/source/peer/src/main/java/com/jd/blockchain/peer/web/LedgerQueryController.java +++ b/source/peer/src/main/java/com/jd/blockchain/peer/web/LedgerQueryController.java @@ -393,9 +393,15 @@ public class LedgerQueryController implements BlockchainQueryService { if (ver < 0) { entries[i] = new KVDataObject(keys[i], -1, PrimitiveType.NIL, null); }else { - byte[] value = dataAccount.getBytes(Bytes.fromString(keys[i]), ver); - BytesValue decodeData = BinaryProtocol.decode(value); - entries[i] = new KVDataObject(keys[i], ver, PrimitiveType.valueOf(decodeData.getType().CODE), decodeData.getValue().toBytes()); + if(dataAccount.getDataEntriesTotalCount()==0 || + dataAccount.getBytes(Bytes.fromString(keys[i]), ver) == null){ + //is the address is not exist; the result is null; + entries[i] = new KVDataObject(keys[i], -1, PrimitiveType.NIL, null); + } else { + byte[] value = dataAccount.getBytes(Bytes.fromString(keys[i]), ver); + BytesValue decodeData = BinaryProtocol.decode(value); + entries[i] = new KVDataObject(keys[i], ver, PrimitiveType.valueOf(decodeData.getType().CODE), decodeData.getValue().toBytes()); + } } }