Browse Source

Refactored LedgerDataset: extract readonly interface LedgerDataQuery;

tags/1.1.0
huanghaiquan 5 years ago
parent
commit
ae3af3ea72
61 changed files with 447 additions and 255 deletions
  1. +1
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/AccountSet.java
  2. +1
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/BaseAccount.java
  3. +1
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/ContractAccount.java
  4. +29
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/ContractAccountQuery.java
  5. +7
    -1
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/ContractAccountSet.java
  6. +1
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/DataAccount.java
  7. +32
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/DataAccountQuery.java
  8. +6
    -1
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/DataAccountSet.java
  9. +12
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerAdminDataQuery.java
  10. +8
    -2
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerAdminDataset.java
  11. +19
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerDataQuery.java
  12. +0
    -98
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerDataSetImpl.java
  13. +90
    -14
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerDataset.java
  14. +2
    -1
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerInitializer.java
  15. +19
    -19
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerQueryService.java
  16. +8
    -8
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerRepository.java
  17. +11
    -11
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerRepositoryImpl.java
  18. +5
    -5
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerTransactionalEditor.java
  19. +1
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/MerkleDataEntry.java
  20. +2
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/MerkleDataSet.java
  21. +1
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/MerkleProvable.java
  22. +3
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/MerkleTree.java
  23. +1
    -1
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/OperationHandle.java
  24. +7
    -1
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/ParticipantDataset.java
  25. +1
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/RolePrivilegeDataset.java
  26. +2
    -2
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/TransactionBatchProcessor.java
  27. +7
    -7
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/TransactionEngineImpl.java
  28. +1
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/TransactionSet.java
  29. +31
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/UserAccountQuery.java
  30. +8
    -1
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/UserAccountSet.java
  31. +1
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/UserRoleDataset.java
  32. +3
    -2
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/AbstractLedgerOperationHandle.java
  33. +5
    -4
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/AbtractContractEventSendOperationHandle.java
  34. +2
    -1
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/ContractCodeDeployOperationHandle.java
  35. +3
    -2
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/DataAccountKVSetOperationHandle.java
  36. +2
    -1
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/DataAccountRegisterOperationHandle.java
  37. +2
    -1
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/RolesConfigureOperationHandle.java
  38. +2
    -1
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/UserAuthorizeOperationHandle.java
  39. +2
    -1
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/UserRegisterOperationHandle.java
  40. +6
    -5
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/ContractInvokingTest.java
  41. +6
    -6
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/LedgerManagerTest.java
  42. +1
    -1
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/MerkleDataSetTest.java
  43. +3
    -3
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/MerkleTreeTest.java
  44. +7
    -6
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/TransactionBatchProcessorTest.java
  45. +1
    -1
      source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/MerkleDataNode.java
  46. +1
    -1
      source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/MerkleNode.java
  47. +1
    -1
      source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/MerkleProof.java
  48. +29
    -0
      source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/ParticipantDataQuery.java
  49. +22
    -22
      source/peer/src/main/java/com/jd/blockchain/peer/web/LedgerQueryController.java
  50. +2
    -1
      source/peer/src/main/java/com/jd/blockchain/peer/web/ManagementController.java
  51. +2
    -2
      source/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/IntegrationTest.java
  52. +2
    -2
      source/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/perf/LedgerInitializeTest.java
  53. +2
    -2
      source/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/perf/LedgerInitializeWebTest.java
  54. +3
    -3
      source/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/perf/LedgerPerformanceTest.java
  55. +2
    -2
      source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTestAll4Redis.java
  56. +2
    -2
      source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTestDataAccount.java
  57. +2
    -2
      source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitializeTest.java
  58. +1
    -1
      source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitializeWeb4Nodes.java
  59. +2
    -2
      source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/ledger/LedgerBlockGeneratingTest.java
  60. +2
    -3
      source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/MockerNodeContext.java
  61. +9
    -2
      source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java

+ 1
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/AccountSet.java View File

@@ -12,6 +12,7 @@ import com.jd.blockchain.ledger.AccountHeader;
import com.jd.blockchain.ledger.BytesValue; import com.jd.blockchain.ledger.BytesValue;
import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.CryptoSetting;
import com.jd.blockchain.ledger.LedgerException; import com.jd.blockchain.ledger.LedgerException;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.storage.service.ExPolicyKVStorage; import com.jd.blockchain.storage.service.ExPolicyKVStorage;
import com.jd.blockchain.storage.service.VersioningKVStorage; import com.jd.blockchain.storage.service.VersioningKVStorage;
import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;


+ 1
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/BaseAccount.java View File

@@ -8,6 +8,7 @@ import com.jd.blockchain.ledger.BlockchainIdentity;
import com.jd.blockchain.ledger.BlockchainIdentityData; import com.jd.blockchain.ledger.BlockchainIdentityData;
import com.jd.blockchain.ledger.BytesValue; import com.jd.blockchain.ledger.BytesValue;
import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.CryptoSetting;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.storage.service.ExPolicyKVStorage; import com.jd.blockchain.storage.service.ExPolicyKVStorage;
import com.jd.blockchain.storage.service.VersioningKVStorage; import com.jd.blockchain.storage.service.VersioningKVStorage;
import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;


+ 1
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/ContractAccount.java View File

@@ -5,6 +5,7 @@ import com.jd.blockchain.crypto.PubKey;
import com.jd.blockchain.ledger.BytesData; import com.jd.blockchain.ledger.BytesData;
import com.jd.blockchain.ledger.BytesValue; import com.jd.blockchain.ledger.BytesValue;
import com.jd.blockchain.ledger.ContractInfo; import com.jd.blockchain.ledger.ContractInfo;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;
public class ContractAccount implements ContractInfo { public class ContractAccount implements ContractInfo {


+ 29
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/ContractAccountQuery.java View File

@@ -0,0 +1,29 @@
package com.jd.blockchain.ledger.core;

import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.AccountHeader;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.utils.Bytes;

public interface ContractAccountQuery {

AccountHeader[] getAccounts(int fromIndex, int count);

HashDigest getRootHash();

/**
* 返回合约总数;
*
* @return
*/
long getTotalCount();

MerkleProof getProof(Bytes address);

boolean contains(Bytes address);

ContractAccount getContract(Bytes address);

ContractAccount getContract(Bytes address, long version);

}

+ 7
- 1
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/ContractAccountSet.java View File

@@ -5,12 +5,13 @@ import com.jd.blockchain.crypto.PubKey;
import com.jd.blockchain.ledger.AccountHeader; import com.jd.blockchain.ledger.AccountHeader;
import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.CryptoSetting;
import com.jd.blockchain.ledger.DigitalSignature; import com.jd.blockchain.ledger.DigitalSignature;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.storage.service.ExPolicyKVStorage; import com.jd.blockchain.storage.service.ExPolicyKVStorage;
import com.jd.blockchain.storage.service.VersioningKVStorage; import com.jd.blockchain.storage.service.VersioningKVStorage;
import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;
import com.jd.blockchain.utils.Transactional; import com.jd.blockchain.utils.Transactional;
public class ContractAccountSet implements MerkleProvable, Transactional {
public class ContractAccountSet implements MerkleProvable, Transactional, ContractAccountQuery {
private AccountSet accountSet; private AccountSet accountSet;
@@ -25,6 +26,7 @@ public class ContractAccountSet implements MerkleProvable, Transactional {
accountSet = new AccountSet(dataRootHash, cryptoSetting, prefix, exStorage, verStorage, readonly, accessPolicy); accountSet = new AccountSet(dataRootHash, cryptoSetting, prefix, exStorage, verStorage, readonly, accessPolicy);
} }
@Override
public AccountHeader[] getAccounts(int fromIndex, int count) { public AccountHeader[] getAccounts(int fromIndex, int count) {
return accountSet.getAccounts(fromIndex,count); return accountSet.getAccounts(fromIndex,count);
} }
@@ -47,6 +49,7 @@ public class ContractAccountSet implements MerkleProvable, Transactional {
* *
* @return * @return
*/ */
@Override
public long getTotalCount() { public long getTotalCount() {
return accountSet.getTotalCount(); return accountSet.getTotalCount();
} }
@@ -56,15 +59,18 @@ public class ContractAccountSet implements MerkleProvable, Transactional {
return accountSet.getProof(address); return accountSet.getProof(address);
} }
@Override
public boolean contains(Bytes address) { public boolean contains(Bytes address) {
return accountSet.contains(address); return accountSet.contains(address);
} }
@Override
public ContractAccount getContract(Bytes address) { public ContractAccount getContract(Bytes address) {
BaseAccount accBase = accountSet.getAccount(address); BaseAccount accBase = accountSet.getAccount(address);
return new ContractAccount(accBase); return new ContractAccount(accBase);
} }
@Override
public ContractAccount getContract(Bytes address, long version) { public ContractAccount getContract(Bytes address, long version) {
BaseAccount accBase = accountSet.getAccount(address, version); BaseAccount accBase = accountSet.getAccount(address, version);
return new ContractAccount(accBase); return new ContractAccount(accBase);


+ 1
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/DataAccount.java View File

@@ -8,6 +8,7 @@ import com.jd.blockchain.ledger.BytesData;
import com.jd.blockchain.ledger.BytesValue; import com.jd.blockchain.ledger.BytesValue;
import com.jd.blockchain.ledger.KVDataEntry; import com.jd.blockchain.ledger.KVDataEntry;
import com.jd.blockchain.ledger.KVDataObject; import com.jd.blockchain.ledger.KVDataObject;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;
public class DataAccount implements AccountHeader, MerkleProvable { public class DataAccount implements AccountHeader, MerkleProvable {


+ 32
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/DataAccountQuery.java View File

@@ -0,0 +1,32 @@
package com.jd.blockchain.ledger.core;

import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.AccountHeader;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.utils.Bytes;

public interface DataAccountQuery {

AccountHeader[] getAccounts(int fromIndex, int count);

HashDigest getRootHash();

long getTotalCount();

/**
* 返回账户的存在性证明;
*/
MerkleProof getProof(Bytes address);

/**
* 返回数据账户; <br>
* 如果不存在,则返回 null;
*
* @param address
* @return
*/
DataAccount getDataAccount(Bytes address);

DataAccount getDataAccount(Bytes address, long version);

}

+ 6
- 1
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/DataAccountSet.java View File

@@ -5,12 +5,13 @@ import com.jd.blockchain.crypto.PubKey;
import com.jd.blockchain.ledger.AccountHeader; import com.jd.blockchain.ledger.AccountHeader;
import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.CryptoSetting;
import com.jd.blockchain.ledger.DigitalSignature; import com.jd.blockchain.ledger.DigitalSignature;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.storage.service.ExPolicyKVStorage; import com.jd.blockchain.storage.service.ExPolicyKVStorage;
import com.jd.blockchain.storage.service.VersioningKVStorage; import com.jd.blockchain.storage.service.VersioningKVStorage;
import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;
import com.jd.blockchain.utils.Transactional; import com.jd.blockchain.utils.Transactional;
public class DataAccountSet implements MerkleProvable, Transactional {
public class DataAccountSet implements MerkleProvable, Transactional, DataAccountQuery {
private AccountSet accountSet; private AccountSet accountSet;
@@ -25,6 +26,7 @@ public class DataAccountSet implements MerkleProvable, Transactional {
accountSet = new AccountSet(dataRootHash, cryptoSetting, prefix, exStorage, verStorage, readonly, accessPolicy); accountSet = new AccountSet(dataRootHash, cryptoSetting, prefix, exStorage, verStorage, readonly, accessPolicy);
} }
@Override
public AccountHeader[] getAccounts(int fromIndex, int count) { public AccountHeader[] getAccounts(int fromIndex, int count) {
return accountSet.getAccounts(fromIndex, count); return accountSet.getAccounts(fromIndex, count);
} }
@@ -42,6 +44,7 @@ public class DataAccountSet implements MerkleProvable, Transactional {
return accountSet.getRootHash(); return accountSet.getRootHash();
} }
@Override
public long getTotalCount() { public long getTotalCount() {
return accountSet.getTotalCount(); return accountSet.getTotalCount();
} }
@@ -67,6 +70,7 @@ public class DataAccountSet implements MerkleProvable, Transactional {
* @param address * @param address
* @return * @return
*/ */
@Override
public DataAccount getDataAccount(Bytes address) { public DataAccount getDataAccount(Bytes address) {
BaseAccount accBase = accountSet.getAccount(address); BaseAccount accBase = accountSet.getAccount(address);
if (accBase == null) { if (accBase == null) {
@@ -75,6 +79,7 @@ public class DataAccountSet implements MerkleProvable, Transactional {
return new DataAccount(accBase); return new DataAccount(accBase);
} }
@Override
public DataAccount getDataAccount(Bytes address, long version) { public DataAccount getDataAccount(Bytes address, long version) {
BaseAccount accBase = accountSet.getAccount(address, version); BaseAccount accBase = accountSet.getAccount(address, version);
return new DataAccount(accBase); return new DataAccount(accBase);


+ 12
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerAdminDataQuery.java View File

@@ -0,0 +1,12 @@
package com.jd.blockchain.ledger.core;

import com.jd.blockchain.ledger.LedgerAdminInfo;
import com.jd.blockchain.ledger.ParticipantDataQuery;

public interface LedgerAdminDataQuery {
LedgerAdminInfo getAdminInfo();

ParticipantDataQuery getParticipantDataset();

}

+ 8
- 2
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerAdminDataset.java View File

@@ -23,7 +23,7 @@ import com.jd.blockchain.storage.service.VersioningKVStorage;
import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;
import com.jd.blockchain.utils.Transactional; import com.jd.blockchain.utils.Transactional;
public class LedgerAdminDataset implements Transactional, LedgerAdminInfo {
public class LedgerAdminDataset implements Transactional, LedgerAdminDataQuery, LedgerAdminInfo {
static { static {
DataContractRegistry.register(LedgerMetadata.class); DataContractRegistry.register(LedgerMetadata.class);
@@ -108,6 +108,11 @@ public class LedgerAdminDataset implements Transactional, LedgerAdminInfo {
public UserRolesSettings getUserRoles() { public UserRolesSettings getUserRoles() {
return userRoles; return userRoles;
} }
@Override
public LedgerAdminInfo getAdminInfo() {
return this;
}
/** /**
* 初始化账本的管理账户; * 初始化账本的管理账户;
@@ -290,7 +295,8 @@ public class LedgerAdminDataset implements Transactional, LedgerAdminInfo {
return participants.getParticipants(); return participants.getParticipants();
} }
ParticipantDataset getParticipantDataset() {
@Override
public ParticipantDataset getParticipantDataset() {
return participants; return participants;
} }


+ 19
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerDataQuery.java View File

@@ -0,0 +1,19 @@
package com.jd.blockchain.ledger.core;

/**
* {@link LedgerDataset} 表示账本在某一个区块上的数据集合;
*
* @author huanghaiquan
*
*/
public interface LedgerDataQuery{
LedgerAdminDataQuery getAdminDataset();

UserAccountQuery getUserAccountSet();

DataAccountQuery getDataAccountSet();

ContractAccountQuery getContractAccountset();

}

+ 0
- 98
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerDataSetImpl.java View File

@@ -1,98 +0,0 @@
package com.jd.blockchain.ledger.core;

import com.jd.blockchain.utils.Transactional;

public class LedgerDataSetImpl implements LedgerDataset, Transactional {

private LedgerAdminDataset adminDataset;

private UserAccountSet userAccountSet;

private DataAccountSet dataAccountSet;

private ContractAccountSet contractAccountSet;

private boolean readonly;

/**
* Create new block;
*
* @param adminAccount
* @param userAccountSet
* @param dataAccountSet
* @param contractAccountSet
* @param readonly
*/
public LedgerDataSetImpl(LedgerAdminDataset adminAccount, UserAccountSet userAccountSet,
DataAccountSet dataAccountSet, ContractAccountSet contractAccountSet, boolean readonly) {
this.adminDataset = adminAccount;
this.userAccountSet = userAccountSet;
this.dataAccountSet = dataAccountSet;
this.contractAccountSet = contractAccountSet;

this.readonly = readonly;
}

@Override
public LedgerAdminDataset getAdminDataset() {
return adminDataset;
}

@Override
public UserAccountSet getUserAccountSet() {
return userAccountSet;
}

@Override
public DataAccountSet getDataAccountSet() {
return dataAccountSet;
}

@Override
public ContractAccountSet getContractAccountset() {
return contractAccountSet;
}

@Override
public boolean isUpdated() {
return adminDataset.isUpdated() || userAccountSet.isUpdated() || dataAccountSet.isUpdated()
|| contractAccountSet.isUpdated();
}

@Override
public void commit() {
if (readonly) {
throw new IllegalStateException("Readonly ledger dataset which cann't been committed!");
}
if (!isUpdated()) {
return;
}

adminDataset.commit();
userAccountSet.commit();
dataAccountSet.commit();
contractAccountSet.commit();
}

@Override
public void cancel() {
adminDataset.cancel();
userAccountSet.cancel();
dataAccountSet.cancel();
contractAccountSet.cancel();
}

@Override
public boolean isReadonly() {
return readonly;
}

void setReadonly() {
this.readonly = true;
this.adminDataset.setReadonly();
this.userAccountSet.setReadonly();
this.dataAccountSet.setReadonly();
this.contractAccountSet.setReadonly();
}

}

+ 90
- 14
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerDataset.java View File

@@ -1,21 +1,97 @@
package com.jd.blockchain.ledger.core; package com.jd.blockchain.ledger.core;


/**
* {@link LedgerDataset} 表示账本在某一个区块上的数据集合;
*
* @author huanghaiquan
*
*/
public interface LedgerDataset{
boolean isReadonly();
import com.jd.blockchain.utils.Transactional;


LedgerAdminDataset getAdminDataset();
public class LedgerDataset implements LedgerDataQuery, Transactional {


UserAccountSet getUserAccountSet();
private LedgerAdminDataset adminDataset;


DataAccountSet getDataAccountSet();
private UserAccountSet userAccountSet;


ContractAccountSet getContractAccountset();
private DataAccountSet dataAccountSet;


}
private ContractAccountSet contractAccountSet;

private boolean readonly;

/**
* Create new block;
*
* @param adminAccount
* @param userAccountSet
* @param dataAccountSet
* @param contractAccountSet
* @param readonly
*/
public LedgerDataset(LedgerAdminDataset adminAccount, UserAccountSet userAccountSet,
DataAccountSet dataAccountSet, ContractAccountSet contractAccountSet, boolean readonly) {
this.adminDataset = adminAccount;
this.userAccountSet = userAccountSet;
this.dataAccountSet = dataAccountSet;
this.contractAccountSet = contractAccountSet;

this.readonly = readonly;
}

@Override
public LedgerAdminDataset getAdminDataset() {
return adminDataset;
}

@Override
public UserAccountSet getUserAccountSet() {
return userAccountSet;
}

@Override
public DataAccountSet getDataAccountSet() {
return dataAccountSet;
}

@Override
public ContractAccountSet getContractAccountset() {
return contractAccountSet;
}

@Override
public boolean isUpdated() {
return adminDataset.isUpdated() || userAccountSet.isUpdated() || dataAccountSet.isUpdated()
|| contractAccountSet.isUpdated();
}

@Override
public void commit() {
if (readonly) {
throw new IllegalStateException("Readonly ledger dataset which cann't been committed!");
}
if (!isUpdated()) {
return;
}

adminDataset.commit();
userAccountSet.commit();
dataAccountSet.commit();
contractAccountSet.commit();
}

@Override
public void cancel() {
adminDataset.cancel();
userAccountSet.cancel();
dataAccountSet.cancel();
contractAccountSet.cancel();
}

public boolean isReadonly() {
return readonly;
}

void setReadonly() {
this.readonly = true;
this.adminDataset.setReadonly();
this.userAccountSet.setReadonly();
this.dataAccountSet.setReadonly();
this.contractAccountSet.setReadonly();
}

}

+ 2
- 1
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerInitializer.java View File

@@ -62,7 +62,8 @@ public class LedgerInitializer {
} }


private static SecurityInitSettings createDefaultSecurityInitSettings() { private static SecurityInitSettings createDefaultSecurityInitSettings() {
throw new IllegalStateException("Not implemented!");
// TODO throw new IllegalStateException("Not implemented!");
return null;
} }


public static LedgerInitializer create(LedgerInitSetting initSetting) { public static LedgerInitializer create(LedgerInitSetting initSetting) {


+ 19
- 19
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerQueryService.java View File

@@ -107,7 +107,7 @@ public class LedgerQueryService implements BlockchainQueryService {
public long getDataAccountCount(HashDigest ledgerHash, long height) { public long getDataAccountCount(HashDigest ledgerHash, long height) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getBlock(height); LedgerBlock block = ledger.getBlock(height);
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
return dataAccountSet.getTotalCount(); return dataAccountSet.getTotalCount();
} }


@@ -115,7 +115,7 @@ public class LedgerQueryService implements BlockchainQueryService {
public long getDataAccountCount(HashDigest ledgerHash, HashDigest blockHash) { public long getDataAccountCount(HashDigest ledgerHash, HashDigest blockHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getBlock(blockHash); LedgerBlock block = ledger.getBlock(blockHash);
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
return dataAccountSet.getTotalCount(); return dataAccountSet.getTotalCount();
} }


@@ -123,7 +123,7 @@ public class LedgerQueryService implements BlockchainQueryService {
public long getDataAccountTotalCount(HashDigest ledgerHash) { public long getDataAccountTotalCount(HashDigest ledgerHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
return dataAccountSet.getTotalCount(); return dataAccountSet.getTotalCount();
} }


@@ -131,7 +131,7 @@ public class LedgerQueryService implements BlockchainQueryService {
public long getUserCount(HashDigest ledgerHash, long height) { public long getUserCount(HashDigest ledgerHash, long height) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getBlock(height); LedgerBlock block = ledger.getBlock(height);
UserAccountSet userAccountSet = ledger.getUserAccountSet(block);
UserAccountQuery userAccountSet = ledger.getUserAccountSet(block);
return userAccountSet.getTotalCount(); return userAccountSet.getTotalCount();
} }


@@ -139,7 +139,7 @@ public class LedgerQueryService implements BlockchainQueryService {
public long getUserCount(HashDigest ledgerHash, HashDigest blockHash) { public long getUserCount(HashDigest ledgerHash, HashDigest blockHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getBlock(blockHash); LedgerBlock block = ledger.getBlock(blockHash);
UserAccountSet userAccountSet = ledger.getUserAccountSet(block);
UserAccountQuery userAccountSet = ledger.getUserAccountSet(block);
return userAccountSet.getTotalCount(); return userAccountSet.getTotalCount();
} }


@@ -147,7 +147,7 @@ public class LedgerQueryService implements BlockchainQueryService {
public long getUserTotalCount(HashDigest ledgerHash) { public long getUserTotalCount(HashDigest ledgerHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
UserAccountSet userAccountSet = ledger.getUserAccountSet(block);
UserAccountQuery userAccountSet = ledger.getUserAccountSet(block);
return userAccountSet.getTotalCount(); return userAccountSet.getTotalCount();
} }


@@ -155,7 +155,7 @@ public class LedgerQueryService implements BlockchainQueryService {
public long getContractCount(HashDigest ledgerHash, long height) { public long getContractCount(HashDigest ledgerHash, long height) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getBlock(height); LedgerBlock block = ledger.getBlock(height);
ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block);
ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block);
return contractAccountSet.getTotalCount(); return contractAccountSet.getTotalCount();
} }


@@ -163,7 +163,7 @@ public class LedgerQueryService implements BlockchainQueryService {
public long getContractCount(HashDigest ledgerHash, HashDigest blockHash) { public long getContractCount(HashDigest ledgerHash, HashDigest blockHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getBlock(blockHash); LedgerBlock block = ledger.getBlock(blockHash);
ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block);
ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block);
return contractAccountSet.getTotalCount(); return contractAccountSet.getTotalCount();
} }


@@ -171,7 +171,7 @@ public class LedgerQueryService implements BlockchainQueryService {
public long getContractTotalCount(HashDigest ledgerHash) { public long getContractTotalCount(HashDigest ledgerHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block);
ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block);
return contractAccountSet.getTotalCount(); return contractAccountSet.getTotalCount();
} }


@@ -254,7 +254,7 @@ public class LedgerQueryService implements BlockchainQueryService {
public UserInfo getUser(HashDigest ledgerHash, String address) { public UserInfo getUser(HashDigest ledgerHash, String address) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
UserAccountSet userAccountSet = ledger.getUserAccountSet(block);
UserAccountQuery userAccountSet = ledger.getUserAccountSet(block);
return userAccountSet.getUser(address); return userAccountSet.getUser(address);


} }
@@ -263,7 +263,7 @@ public class LedgerQueryService implements BlockchainQueryService {
public AccountHeader getDataAccount(HashDigest ledgerHash, String address) { public AccountHeader getDataAccount(HashDigest ledgerHash, String address) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
return dataAccountSet.getDataAccount(Bytes.fromBase58(address)); return dataAccountSet.getDataAccount(Bytes.fromBase58(address));
} }


@@ -274,7 +274,7 @@ public class LedgerQueryService implements BlockchainQueryService {
} }
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address));


KVDataEntry[] entries = new KVDataEntry[keys.length]; KVDataEntry[] entries = new KVDataEntry[keys.length];
@@ -322,7 +322,7 @@ public class LedgerQueryService implements BlockchainQueryService {


LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address));


KVDataEntry[] entries = new KVDataEntry[keys.length]; KVDataEntry[] entries = new KVDataEntry[keys.length];
@@ -353,7 +353,7 @@ public class LedgerQueryService implements BlockchainQueryService {


LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address));


int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) dataAccount.getDataEntriesTotalCount()); int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) dataAccount.getDataEntriesTotalCount());
@@ -365,7 +365,7 @@ public class LedgerQueryService implements BlockchainQueryService {


LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address));


return dataAccount.getDataEntriesTotalCount(); return dataAccount.getDataEntriesTotalCount();
@@ -375,7 +375,7 @@ public class LedgerQueryService implements BlockchainQueryService {
public ContractInfo getContract(HashDigest ledgerHash, String address) { public ContractInfo getContract(HashDigest ledgerHash, String address) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block);
ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block);
return contractAccountSet.getContract(Bytes.fromBase58(address)); return contractAccountSet.getContract(Bytes.fromBase58(address));
} }


@@ -383,7 +383,7 @@ public class LedgerQueryService implements BlockchainQueryService {
public AccountHeader[] getUsers(HashDigest ledgerHash, int fromIndex, int count) { public AccountHeader[] getUsers(HashDigest ledgerHash, int fromIndex, int count) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
UserAccountSet userAccountSet = ledger.getUserAccountSet(block);
UserAccountQuery userAccountSet = ledger.getUserAccountSet(block);
int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) userAccountSet.getTotalCount()); int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) userAccountSet.getTotalCount());
return userAccountSet.getAccounts(pages[0], pages[1]); return userAccountSet.getAccounts(pages[0], pages[1]);
} }
@@ -392,7 +392,7 @@ public class LedgerQueryService implements BlockchainQueryService {
public AccountHeader[] getDataAccounts(HashDigest ledgerHash, int fromIndex, int count) { public AccountHeader[] getDataAccounts(HashDigest ledgerHash, int fromIndex, int count) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) dataAccountSet.getTotalCount()); int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) dataAccountSet.getTotalCount());
return dataAccountSet.getAccounts(pages[0], pages[1]); return dataAccountSet.getAccounts(pages[0], pages[1]);
} }
@@ -401,7 +401,7 @@ public class LedgerQueryService implements BlockchainQueryService {
public AccountHeader[] getContractAccounts(HashDigest ledgerHash, int fromIndex, int count) { public AccountHeader[] getContractAccounts(HashDigest ledgerHash, int fromIndex, int count) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block);
ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block);
int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) contractAccountSet.getTotalCount()); int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) contractAccountSet.getTotalCount());
return contractAccountSet.getAccounts(pages[0], pages[1]); return contractAccountSet.getAccounts(pages[0], pages[1]);
} }


+ 8
- 8
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerRepository.java View File

@@ -58,17 +58,17 @@ public interface LedgerRepository extends Closeable {


LedgerBlock getBlock(HashDigest hash); LedgerBlock getBlock(HashDigest hash);


LedgerDataset getDataSet(LedgerBlock block);
LedgerDataQuery getDataSet(LedgerBlock block);


TransactionSet getTransactionSet(LedgerBlock block); TransactionSet getTransactionSet(LedgerBlock block);


UserAccountSet getUserAccountSet(LedgerBlock block);
UserAccountQuery getUserAccountSet(LedgerBlock block);


DataAccountSet getDataAccountSet(LedgerBlock block);
DataAccountQuery getDataAccountSet(LedgerBlock block);


ContractAccountSet getContractAccountSet(LedgerBlock block);
ContractAccountQuery getContractAccountSet(LedgerBlock block);


default LedgerDataset getDataSet() {
default LedgerDataQuery getDataSet() {
return getDataSet(getLatestBlock()); return getDataSet(getLatestBlock());
} }


@@ -76,15 +76,15 @@ public interface LedgerRepository extends Closeable {
return getTransactionSet(getLatestBlock()); return getTransactionSet(getLatestBlock());
} }


default UserAccountSet getUserAccountSet() {
default UserAccountQuery getUserAccountSet() {
return getUserAccountSet(getLatestBlock()); return getUserAccountSet(getLatestBlock());
} }


default DataAccountSet getDataAccountSet() {
default DataAccountQuery getDataAccountSet() {
return getDataAccountSet(getLatestBlock()); return getDataAccountSet(getLatestBlock());
} }


default ContractAccountSet getContractAccountSet() {
default ContractAccountQuery getContractAccountSet() {
return getContractAccountSet(getLatestBlock()); return getContractAccountSet(getLatestBlock());
} }




+ 11
- 11
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerRepositoryImpl.java View File

@@ -313,7 +313,7 @@ class LedgerRepositoryImpl implements LedgerRepository {
} }


@Override @Override
public UserAccountSet getUserAccountSet(LedgerBlock block) {
public UserAccountQuery getUserAccountSet(LedgerBlock block) {
long height = getLatestBlockHeight(); long height = getLatestBlockHeight();
// UserAccountSet userAccountSet = null; // UserAccountSet userAccountSet = null;
if (height == block.getHeight()) { if (height == block.getHeight()) {
@@ -341,7 +341,7 @@ class LedgerRepositoryImpl implements LedgerRepository {
} }


@Override @Override
public DataAccountSet getDataAccountSet(LedgerBlock block) {
public DataAccountQuery getDataAccountSet(LedgerBlock block) {
long height = getLatestBlockHeight(); long height = getLatestBlockHeight();
// DataAccountSet dataAccountSet = null; // DataAccountSet dataAccountSet = null;
if (height == block.getHeight()) { if (height == block.getHeight()) {
@@ -370,7 +370,7 @@ class LedgerRepositoryImpl implements LedgerRepository {
} }


@Override @Override
public ContractAccountSet getContractAccountSet(LedgerBlock block) {
public ContractAccountQuery getContractAccountSet(LedgerBlock block) {
long height = getLatestBlockHeight(); long height = getLatestBlockHeight();
// ContractAccountSet contractAccountSet = null; // ContractAccountSet contractAccountSet = null;
if (height == block.getHeight()) { if (height == block.getHeight()) {
@@ -426,7 +426,7 @@ class LedgerRepositoryImpl implements LedgerRepository {
UserAccountSet userAccountSet = createUserAccountSet(block, cryptoSetting); UserAccountSet userAccountSet = createUserAccountSet(block, cryptoSetting);
DataAccountSet dataAccountSet = createDataAccountSet(block, cryptoSetting); DataAccountSet dataAccountSet = createDataAccountSet(block, cryptoSetting);
ContractAccountSet contractAccountSet = createContractAccountSet(block, cryptoSetting); ContractAccountSet contractAccountSet = createContractAccountSet(block, cryptoSetting);
return new LedgerDataSetImpl(adminDataset, userAccountSet, dataAccountSet, contractAccountSet, true);
return new LedgerDataset(adminDataset, userAccountSet, dataAccountSet, contractAccountSet, true);
} }


@Override @Override
@@ -475,7 +475,7 @@ class LedgerRepositoryImpl implements LedgerRepository {
return BLOCK_PREFIX.concat(blockHash); return BLOCK_PREFIX.concat(blockHash);
} }


static LedgerDataSetImpl newDataSet(LedgerInitSetting initSetting, String keyPrefix,
static LedgerDataset newDataSet(LedgerInitSetting initSetting, String keyPrefix,
ExPolicyKVStorage ledgerExStorage, VersioningKVStorage ledgerVerStorage) { ExPolicyKVStorage ledgerExStorage, VersioningKVStorage ledgerVerStorage) {
LedgerAdminDataset adminAccount = new LedgerAdminDataset(initSetting, keyPrefix, ledgerExStorage, LedgerAdminDataset adminAccount = new LedgerAdminDataset(initSetting, keyPrefix, ledgerExStorage,
ledgerVerStorage); ledgerVerStorage);
@@ -509,7 +509,7 @@ class LedgerRepositoryImpl implements LedgerRepository {
ContractAccountSet contractAccountSet = new ContractAccountSet(adminAccount.getSettings().getCryptoSetting(), ContractAccountSet contractAccountSet = new ContractAccountSet(adminAccount.getSettings().getCryptoSetting(),
contractsetKeyPrefix, ledgerExStorage, ledgerVerStorage, DEFAULT_ACCESS_POLICY); contractsetKeyPrefix, ledgerExStorage, ledgerVerStorage, DEFAULT_ACCESS_POLICY);


LedgerDataSetImpl newDataSet = new LedgerDataSetImpl(adminAccount, userAccountSet, dataAccountSet,
LedgerDataset newDataSet = new LedgerDataset(adminAccount, userAccountSet, dataAccountSet,
contractAccountSet, false); contractAccountSet, false);


return newDataSet; return newDataSet;
@@ -529,7 +529,7 @@ class LedgerRepositoryImpl implements LedgerRepository {
return transactionSet; return transactionSet;
} }


static LedgerDataSetImpl loadDataSet(LedgerDataSnapshot dataSnapshot, CryptoSetting cryptoSetting, String keyPrefix,
static LedgerDataset loadDataSet(LedgerDataSnapshot dataSnapshot, CryptoSetting cryptoSetting, String keyPrefix,
ExPolicyKVStorage ledgerExStorage, VersioningKVStorage ledgerVerStorage, boolean readonly) { ExPolicyKVStorage ledgerExStorage, VersioningKVStorage ledgerVerStorage, boolean readonly) {
LedgerAdminDataset adminAccount = new LedgerAdminDataset(dataSnapshot.getAdminAccountHash(), keyPrefix, LedgerAdminDataset adminAccount = new LedgerAdminDataset(dataSnapshot.getAdminAccountHash(), keyPrefix,
ledgerExStorage, ledgerVerStorage, readonly); ledgerExStorage, ledgerVerStorage, readonly);
@@ -545,7 +545,7 @@ class LedgerRepositoryImpl implements LedgerRepository {
ContractAccountSet contractAccountSet = loadContractAccountSet(dataSnapshot.getContractAccountSetHash(), ContractAccountSet contractAccountSet = loadContractAccountSet(dataSnapshot.getContractAccountSetHash(),
cryptoSetting, keyPrefix, ledgerExStorage, ledgerVerStorage, readonly); cryptoSetting, keyPrefix, ledgerExStorage, ledgerVerStorage, readonly);


LedgerDataSetImpl dataset = new LedgerDataSetImpl(adminAccount, userAccountSet, dataAccountSet,
LedgerDataset dataset = new LedgerDataset(adminAccount, userAccountSet, dataAccountSet,
contractAccountSet, readonly); contractAccountSet, readonly);


return dataset; return dataset;
@@ -695,15 +695,15 @@ class LedgerRepositoryImpl implements LedgerRepository {
return ledgerDataset; return ledgerDataset;
} }


public ContractAccountSet getContractAccountSet() {
public ContractAccountQuery getContractAccountSet() {
return ledgerDataset.getContractAccountset(); return ledgerDataset.getContractAccountset();
} }


public DataAccountSet getDataAccountSet() {
public DataAccountQuery getDataAccountSet() {
return ledgerDataset.getDataAccountSet(); return ledgerDataset.getDataAccountSet();
} }


public UserAccountSet getUserAccountSet() {
public UserAccountQuery getUserAccountSet() {
return ledgerDataset.getUserAccountSet(); return ledgerDataset.getUserAccountSet();
} }




+ 5
- 5
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerTransactionalEditor.java View File

@@ -72,7 +72,7 @@ public class LedgerTransactionalEditor implements LedgerEditor {
/** /**
* 最后提交的账本数据集; * 最后提交的账本数据集;
*/ */
private volatile LedgerDataSetImpl latestLedgerDataset;
private volatile LedgerDataset latestLedgerDataset;


/** /**
* 最后提交的交易集合; * 最后提交的交易集合;
@@ -235,7 +235,7 @@ public class LedgerTransactionalEditor implements LedgerEditor {
// init storage of new transaction; // init storage of new transaction;
BufferedKVStorage txBufferedStorage = new BufferedKVStorage(baseStorage, baseStorage, false); BufferedKVStorage txBufferedStorage = new BufferedKVStorage(baseStorage, baseStorage, false);


LedgerDataSetImpl txDataset = null;
LedgerDataset txDataset = null;
TransactionSet txset = null; TransactionSet txset = null;
if (previousTxSnapshot == null) { if (previousTxSnapshot == null) {
// load the starting point of the new transaction; // load the starting point of the new transaction;
@@ -470,7 +470,7 @@ public class LedgerTransactionalEditor implements LedgerEditor {


private TransactionRequest txRequest; private TransactionRequest txRequest;


private LedgerDataSetImpl dataset;
private LedgerDataset dataset;


private TransactionSet txset; private TransactionSet txset;


@@ -484,7 +484,7 @@ public class LedgerTransactionalEditor implements LedgerEditor {


private HashDigest txRootHash; private HashDigest txRootHash;


private LedgerTransactionContextImpl(TransactionRequest txRequest, LedgerDataSetImpl dataset,
private LedgerTransactionContextImpl(TransactionRequest txRequest, LedgerDataset dataset,
TransactionSet txset, BufferedKVStorage storage, LedgerTransactionalEditor editor) { TransactionSet txset, BufferedKVStorage storage, LedgerTransactionalEditor editor) {
this.txRequest = txRequest; this.txRequest = txRequest;
this.dataset = dataset; this.dataset = dataset;
@@ -494,7 +494,7 @@ public class LedgerTransactionalEditor implements LedgerEditor {
} }


@Override @Override
public LedgerDataSetImpl getDataset() {
public LedgerDataset getDataset() {
return dataset; return dataset;
} }




+ 1
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/MerkleDataEntry.java View File

@@ -1,5 +1,6 @@
package com.jd.blockchain.ledger.core; package com.jd.blockchain.ledger.core;


import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.storage.service.VersioningKVEntry; import com.jd.blockchain.storage.service.VersioningKVEntry;


public interface MerkleDataEntry { public interface MerkleDataEntry {


+ 2
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/MerkleDataSet.java View File

@@ -3,6 +3,8 @@ package com.jd.blockchain.ledger.core;
import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.CryptoSetting;
import com.jd.blockchain.ledger.LedgerException; import com.jd.blockchain.ledger.LedgerException;
import com.jd.blockchain.ledger.MerkleDataNode;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.storage.service.ExPolicyKVStorage; import com.jd.blockchain.storage.service.ExPolicyKVStorage;
import com.jd.blockchain.storage.service.ExPolicyKVStorage.ExPolicy; import com.jd.blockchain.storage.service.ExPolicyKVStorage.ExPolicy;
import com.jd.blockchain.storage.service.VersioningKVEntry; import com.jd.blockchain.storage.service.VersioningKVEntry;


+ 1
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/MerkleProvable.java View File

@@ -1,6 +1,7 @@
package com.jd.blockchain.ledger.core; package com.jd.blockchain.ledger.core;


import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;


public interface MerkleProvable { public interface MerkleProvable {


+ 3
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/MerkleTree.java View File

@@ -20,6 +20,9 @@ import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.crypto.HashFunction; import com.jd.blockchain.crypto.HashFunction;
import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.CryptoSetting;
import com.jd.blockchain.ledger.LedgerException; import com.jd.blockchain.ledger.LedgerException;
import com.jd.blockchain.ledger.MerkleDataNode;
import com.jd.blockchain.ledger.MerkleNode;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.storage.service.ExPolicyKVStorage; import com.jd.blockchain.storage.service.ExPolicyKVStorage;
import com.jd.blockchain.storage.service.ExPolicyKVStorage.ExPolicy; import com.jd.blockchain.storage.service.ExPolicyKVStorage.ExPolicy;
import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;


+ 1
- 1
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/OperationHandle.java View File

@@ -27,6 +27,6 @@ public interface OperationHandle {
* @return * @return
*/ */
BytesValue process(Operation op, LedgerDataset newBlockDataset, TransactionRequestExtension requestContext, BytesValue process(Operation op, LedgerDataset newBlockDataset, TransactionRequestExtension requestContext,
LedgerDataset previousBlockDataset, OperationHandleContext handleContext, LedgerService ledgerService);
LedgerDataQuery previousBlockDataset, OperationHandleContext handleContext, LedgerService ledgerService);


} }

+ 7
- 1
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/ParticipantDataset.java View File

@@ -4,14 +4,16 @@ import com.jd.blockchain.binaryproto.BinaryProtocol;
import com.jd.blockchain.binaryproto.DataContractRegistry; import com.jd.blockchain.binaryproto.DataContractRegistry;
import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.ParticipantNode; import com.jd.blockchain.ledger.ParticipantNode;
import com.jd.blockchain.ledger.ParticipantDataQuery;
import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.CryptoSetting;
import com.jd.blockchain.ledger.LedgerException; import com.jd.blockchain.ledger.LedgerException;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.storage.service.ExPolicyKVStorage; import com.jd.blockchain.storage.service.ExPolicyKVStorage;
import com.jd.blockchain.storage.service.VersioningKVStorage; import com.jd.blockchain.storage.service.VersioningKVStorage;
import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;
import com.jd.blockchain.utils.Transactional; import com.jd.blockchain.utils.Transactional;


public class ParticipantDataset implements Transactional, MerkleProvable {
public class ParticipantDataset implements Transactional, MerkleProvable, ParticipantDataQuery {


static { static {
DataContractRegistry.register(ParticipantNode.class); DataContractRegistry.register(ParticipantNode.class);
@@ -54,6 +56,7 @@ public class ParticipantDataset implements Transactional, MerkleProvable {
dataset.cancel(); dataset.cancel();
} }


@Override
public long getParticipantCount() { public long getParticipantCount() {
return dataset.getDataCount(); return dataset.getDataCount();
} }
@@ -77,6 +80,7 @@ public class ParticipantDataset implements Transactional, MerkleProvable {
return address; return address;
} }


@Override
public boolean contains(Bytes address) { public boolean contains(Bytes address) {
Bytes key = encodeKey(address); Bytes key = encodeKey(address);
long latestVersion = dataset.getVersion(key); long latestVersion = dataset.getVersion(key);
@@ -92,6 +96,7 @@ public class ParticipantDataset implements Transactional, MerkleProvable {
* @param address * @param address
* @return * @return
*/ */
@Override
public ParticipantNode getParticipant(Bytes address) { public ParticipantNode getParticipant(Bytes address) {
Bytes key = encodeKey(address); Bytes key = encodeKey(address);
byte[] bytes = dataset.getValue(key); byte[] bytes = dataset.getValue(key);
@@ -101,6 +106,7 @@ public class ParticipantDataset implements Transactional, MerkleProvable {
return BinaryProtocol.decode(bytes); return BinaryProtocol.decode(bytes);
} }


@Override
public ParticipantNode[] getParticipants() { public ParticipantNode[] getParticipants() {
byte[][] bytes = dataset.getLatestValues(0, (int) dataset.getDataCount()); byte[][] bytes = dataset.getLatestValues(0, (int) dataset.getDataCount());
ParticipantNode[] pns = new ParticipantNode[bytes.length]; ParticipantNode[] pns = new ParticipantNode[bytes.length];


+ 1
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/RolePrivilegeDataset.java View File

@@ -6,6 +6,7 @@ import com.jd.blockchain.ledger.CryptoSetting;
import com.jd.blockchain.ledger.LedgerException; import com.jd.blockchain.ledger.LedgerException;
import com.jd.blockchain.ledger.LedgerPermission; import com.jd.blockchain.ledger.LedgerPermission;
import com.jd.blockchain.ledger.LedgerPrivilege; import com.jd.blockchain.ledger.LedgerPrivilege;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.ledger.PrivilegeSet; import com.jd.blockchain.ledger.PrivilegeSet;
import com.jd.blockchain.ledger.Privileges; import com.jd.blockchain.ledger.Privileges;
import com.jd.blockchain.ledger.RolePrivilegeSettings; import com.jd.blockchain.ledger.RolePrivilegeSettings;


+ 2
- 2
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/TransactionBatchProcessor.java View File

@@ -46,7 +46,7 @@ public class TransactionBatchProcessor implements TransactionBatchProcess {


private LedgerEditor newBlockEditor; private LedgerEditor newBlockEditor;


private LedgerDataset previousBlockDataset;
private LedgerDataQuery previousBlockDataset;


private OperationHandleRegisteration opHandles; private OperationHandleRegisteration opHandles;


@@ -65,7 +65,7 @@ public class TransactionBatchProcessor implements TransactionBatchProcess {
* @param opHandles 操作处理对象注册表; * @param opHandles 操作处理对象注册表;
*/ */
public TransactionBatchProcessor(LedgerSecurityManager securityManager, LedgerEditor newBlockEditor, public TransactionBatchProcessor(LedgerSecurityManager securityManager, LedgerEditor newBlockEditor,
LedgerDataset previousBlockDataset, OperationHandleRegisteration opHandles, LedgerService ledgerService) {
LedgerDataQuery previousBlockDataset, OperationHandleRegisteration opHandles, LedgerService ledgerService) {
this.securityManager = securityManager; this.securityManager = securityManager;
this.newBlockEditor = newBlockEditor; this.newBlockEditor = newBlockEditor;
this.previousBlockDataset = previousBlockDataset; this.previousBlockDataset = previousBlockDataset;


+ 7
- 7
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/TransactionEngineImpl.java View File

@@ -3,10 +3,10 @@ package com.jd.blockchain.ledger.core;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;


import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.LedgerBlock;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;


import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.LedgerBlock;
import com.jd.blockchain.service.TransactionBatchProcess; import com.jd.blockchain.service.TransactionBatchProcess;
import com.jd.blockchain.service.TransactionEngine; import com.jd.blockchain.service.TransactionEngine;


@@ -40,11 +40,11 @@ public class TransactionEngineImpl implements TransactionEngine {


LedgerBlock ledgerBlock = ledgerRepo.getLatestBlock(); LedgerBlock ledgerBlock = ledgerRepo.getLatestBlock();
LedgerEditor newBlockEditor = ledgerRepo.createNextBlock(); LedgerEditor newBlockEditor = ledgerRepo.createNextBlock();
LedgerDataset previousBlockDataset = ledgerRepo.getDataSet(ledgerBlock);
LedgerDataQuery previousBlockDataset = ledgerRepo.getDataSet(ledgerBlock);


LedgerAdminDataset previousAdminDataset = previousBlockDataset.getAdminDataset();
LedgerSecurityManager securityManager = new LedgerSecurityManagerImpl(previousAdminDataset.getRolePrivileges(),
previousAdminDataset.getUserRoles());
LedgerAdminDataQuery previousAdminDataset = previousBlockDataset.getAdminDataset();
LedgerSecurityManager securityManager = new LedgerSecurityManagerImpl(previousAdminDataset.getAdminInfo().getRolePrivileges(),
previousAdminDataset.getAdminInfo().getUserRoles());
batch = new InnerTransactionBatchProcessor(ledgerHash, securityManager, newBlockEditor, previousBlockDataset, batch = new InnerTransactionBatchProcessor(ledgerHash, securityManager, newBlockEditor, previousBlockDataset,
opHdlRegs, ledgerService, ledgerBlock.getHeight()); opHdlRegs, ledgerService, ledgerBlock.getHeight());
batchs.put(ledgerHash, batch); batchs.put(ledgerHash, batch);
@@ -75,7 +75,7 @@ public class TransactionEngineImpl implements TransactionEngine {
* @param opHandles 操作处理对象注册表; * @param opHandles 操作处理对象注册表;
*/ */
public InnerTransactionBatchProcessor(HashDigest ledgerHash, LedgerSecurityManager securityManager, public InnerTransactionBatchProcessor(HashDigest ledgerHash, LedgerSecurityManager securityManager,
LedgerEditor newBlockEditor, LedgerDataset previousBlockDataset, OperationHandleRegisteration opHandles,
LedgerEditor newBlockEditor, LedgerDataQuery previousBlockDataset, OperationHandleRegisteration opHandles,
LedgerService ledgerService, long blockHeight) { LedgerService ledgerService, long blockHeight) {
super(securityManager, newBlockEditor, previousBlockDataset, opHandles, ledgerService); super(securityManager, newBlockEditor, previousBlockDataset, opHandles, ledgerService);
this.ledgerHash = ledgerHash; this.ledgerHash = ledgerHash;


+ 1
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/TransactionSet.java View File

@@ -6,6 +6,7 @@ import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.CryptoSetting;
import com.jd.blockchain.ledger.LedgerException; import com.jd.blockchain.ledger.LedgerException;
import com.jd.blockchain.ledger.LedgerTransaction; import com.jd.blockchain.ledger.LedgerTransaction;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.ledger.TransactionState; import com.jd.blockchain.ledger.TransactionState;
import com.jd.blockchain.storage.service.ExPolicyKVStorage; import com.jd.blockchain.storage.service.ExPolicyKVStorage;
import com.jd.blockchain.storage.service.VersioningKVStorage; import com.jd.blockchain.storage.service.VersioningKVStorage;


+ 31
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/UserAccountQuery.java View File

@@ -0,0 +1,31 @@
package com.jd.blockchain.ledger.core;

import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.AccountHeader;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.utils.Bytes;

public interface UserAccountQuery {

AccountHeader[] getAccounts(int fromIndex, int count);

/**
* 返回用户总数;
*
* @return
*/
long getTotalCount();

HashDigest getRootHash();

MerkleProof getProof(Bytes key);

UserAccount getUser(String address);

UserAccount getUser(Bytes address);

boolean contains(Bytes address);

UserAccount getUser(Bytes address, long version);

}

+ 8
- 1
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/UserAccountSet.java View File

@@ -5,6 +5,7 @@ import com.jd.blockchain.crypto.PubKey;
import com.jd.blockchain.ledger.AccountHeader; import com.jd.blockchain.ledger.AccountHeader;
import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.CryptoSetting;
import com.jd.blockchain.ledger.LedgerException; import com.jd.blockchain.ledger.LedgerException;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.storage.service.ExPolicyKVStorage; import com.jd.blockchain.storage.service.ExPolicyKVStorage;
import com.jd.blockchain.storage.service.VersioningKVStorage; import com.jd.blockchain.storage.service.VersioningKVStorage;
import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;
@@ -14,7 +15,7 @@ import com.jd.blockchain.utils.Transactional;
* @author huanghaiquan * @author huanghaiquan
* *
*/ */
public class UserAccountSet implements Transactional, MerkleProvable {
public class UserAccountSet implements Transactional, MerkleProvable, UserAccountQuery {
private AccountSet accountSet; private AccountSet accountSet;
@@ -30,6 +31,7 @@ public class UserAccountSet implements Transactional, MerkleProvable {
accessPolicy); accessPolicy);
} }
@Override
public AccountHeader[] getAccounts(int fromIndex, int count) { public AccountHeader[] getAccounts(int fromIndex, int count) {
return accountSet.getAccounts(fromIndex,count); return accountSet.getAccounts(fromIndex,count);
} }
@@ -39,6 +41,7 @@ public class UserAccountSet implements Transactional, MerkleProvable {
* *
* @return * @return
*/ */
@Override
public long getTotalCount() { public long getTotalCount() {
return accountSet.getTotalCount(); return accountSet.getTotalCount();
} }
@@ -61,19 +64,23 @@ public class UserAccountSet implements Transactional, MerkleProvable {
return accountSet.getProof(key); return accountSet.getProof(key);
} }
@Override
public UserAccount getUser(String address) { public UserAccount getUser(String address) {
return getUser(Bytes.fromBase58(address)); return getUser(Bytes.fromBase58(address));
} }
@Override
public UserAccount getUser(Bytes address) { public UserAccount getUser(Bytes address) {
BaseAccount baseAccount = accountSet.getAccount(address); BaseAccount baseAccount = accountSet.getAccount(address);
return new UserAccount(baseAccount); return new UserAccount(baseAccount);
} }
@Override
public boolean contains(Bytes address) { public boolean contains(Bytes address) {
return accountSet.contains(address); return accountSet.contains(address);
} }
@Override
public UserAccount getUser(Bytes address, long version) { public UserAccount getUser(Bytes address, long version) {
BaseAccount baseAccount = accountSet.getAccount(address, version); BaseAccount baseAccount = accountSet.getAccount(address, version);
return new UserAccount(baseAccount); return new UserAccount(baseAccount);


+ 1
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/UserRoleDataset.java View File

@@ -7,6 +7,7 @@ import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.AuthorizationException; import com.jd.blockchain.ledger.AuthorizationException;
import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.CryptoSetting;
import com.jd.blockchain.ledger.LedgerException; import com.jd.blockchain.ledger.LedgerException;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.ledger.RoleSet; import com.jd.blockchain.ledger.RoleSet;
import com.jd.blockchain.ledger.RolesPolicy; import com.jd.blockchain.ledger.RolesPolicy;
import com.jd.blockchain.ledger.UserRoles; import com.jd.blockchain.ledger.UserRoles;


+ 3
- 2
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/AbstractLedgerOperationHandle.java View File

@@ -4,6 +4,7 @@ import com.jd.blockchain.binaryproto.DataContractRegistry;
import com.jd.blockchain.ledger.BytesValue; import com.jd.blockchain.ledger.BytesValue;
import com.jd.blockchain.ledger.Operation; import com.jd.blockchain.ledger.Operation;
import com.jd.blockchain.ledger.TransactionPermission; import com.jd.blockchain.ledger.TransactionPermission;
import com.jd.blockchain.ledger.core.LedgerDataQuery;
import com.jd.blockchain.ledger.core.LedgerDataset; import com.jd.blockchain.ledger.core.LedgerDataset;
import com.jd.blockchain.ledger.core.LedgerService; import com.jd.blockchain.ledger.core.LedgerService;
import com.jd.blockchain.ledger.core.MultiIdsPolicy; import com.jd.blockchain.ledger.core.MultiIdsPolicy;
@@ -44,7 +45,7 @@ public abstract class AbstractLedgerOperationHandle<T extends Operation> impleme


@Override @Override
public final BytesValue process(Operation op, LedgerDataset newBlockDataset, public final BytesValue process(Operation op, LedgerDataset newBlockDataset,
TransactionRequestExtension requestContext, LedgerDataset previousBlockDataset,
TransactionRequestExtension requestContext, LedgerDataQuery previousBlockDataset,
OperationHandleContext handleContext, LedgerService ledgerService) { OperationHandleContext handleContext, LedgerService ledgerService) {
// 权限校验; // 权限校验;
SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy();
@@ -68,5 +69,5 @@ public abstract class AbstractLedgerOperationHandle<T extends Operation> impleme
* @param ledgerService * @param ledgerService
*/ */
protected abstract void doProcess(T op, LedgerDataset newBlockDataset, TransactionRequestExtension requestContext, protected abstract void doProcess(T op, LedgerDataset newBlockDataset, TransactionRequestExtension requestContext,
LedgerDataset previousBlockDataset, OperationHandleContext handleContext, LedgerService ledgerService);
LedgerDataQuery previousBlockDataset, OperationHandleContext handleContext, LedgerService ledgerService);
} }

+ 5
- 4
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/AbtractContractEventSendOperationHandle.java View File

@@ -10,7 +10,8 @@ import com.jd.blockchain.ledger.LedgerException;
import com.jd.blockchain.ledger.Operation; import com.jd.blockchain.ledger.Operation;
import com.jd.blockchain.ledger.TransactionPermission; import com.jd.blockchain.ledger.TransactionPermission;
import com.jd.blockchain.ledger.core.ContractAccount; import com.jd.blockchain.ledger.core.ContractAccount;
import com.jd.blockchain.ledger.core.ContractAccountSet;
import com.jd.blockchain.ledger.core.ContractAccountQuery;
import com.jd.blockchain.ledger.core.LedgerDataQuery;
import com.jd.blockchain.ledger.core.LedgerDataset; import com.jd.blockchain.ledger.core.LedgerDataset;
import com.jd.blockchain.ledger.core.LedgerQueryService; import com.jd.blockchain.ledger.core.LedgerQueryService;
import com.jd.blockchain.ledger.core.LedgerService; import com.jd.blockchain.ledger.core.LedgerService;
@@ -31,7 +32,7 @@ public abstract class AbtractContractEventSendOperationHandle implements Operati


@Override @Override
public BytesValue process(Operation op, LedgerDataset newBlockDataset, TransactionRequestExtension requestContext, public BytesValue process(Operation op, LedgerDataset newBlockDataset, TransactionRequestExtension requestContext,
LedgerDataset previousBlockDataset, OperationHandleContext opHandleContext, LedgerService ledgerService) {
LedgerDataQuery previousBlockDataset, OperationHandleContext opHandleContext, LedgerService ledgerService) {
// 权限校验; // 权限校验;
SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy();
securityPolicy.checkEndpoints(TransactionPermission.CONTRACT_OPERATION, MultiIdsPolicy.AT_LEAST_ONE); securityPolicy.checkEndpoints(TransactionPermission.CONTRACT_OPERATION, MultiIdsPolicy.AT_LEAST_ONE);
@@ -44,11 +45,11 @@ public abstract class AbtractContractEventSendOperationHandle implements Operati
} }


private BytesValue doProcess(TransactionRequestExtension request, ContractEventSendOperation contractOP, private BytesValue doProcess(TransactionRequestExtension request, ContractEventSendOperation contractOP,
LedgerDataset newBlockDataset, LedgerDataset previousBlockDataset, OperationHandleContext opHandleContext,
LedgerDataset newBlockDataset, LedgerDataQuery previousBlockDataset, OperationHandleContext opHandleContext,
LedgerService ledgerService) { LedgerService ledgerService) {
// 先从账本校验合约的有效性; // 先从账本校验合约的有效性;
// 注意:必须在前一个区块的数据集中进行校验,因为那是经过共识的数据;从当前新区块链数据集校验则会带来攻击风险:未经共识的合约得到执行; // 注意:必须在前一个区块的数据集中进行校验,因为那是经过共识的数据;从当前新区块链数据集校验则会带来攻击风险:未经共识的合约得到执行;
ContractAccountSet contractSet = previousBlockDataset.getContractAccountset();
ContractAccountQuery contractSet = previousBlockDataset.getContractAccountset();
if (!contractSet.contains(contractOP.getContractAddress())) { if (!contractSet.contains(contractOP.getContractAddress())) {
throw new LedgerException(String.format("Contract was not registered! --[ContractAddress=%s]", throw new LedgerException(String.format("Contract was not registered! --[ContractAddress=%s]",
contractOP.getContractAddress())); contractOP.getContractAddress()));


+ 2
- 1
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/ContractCodeDeployOperationHandle.java View File

@@ -2,6 +2,7 @@ package com.jd.blockchain.ledger.core.handles;


import com.jd.blockchain.ledger.ContractCodeDeployOperation; import com.jd.blockchain.ledger.ContractCodeDeployOperation;
import com.jd.blockchain.ledger.LedgerPermission; import com.jd.blockchain.ledger.LedgerPermission;
import com.jd.blockchain.ledger.core.LedgerDataQuery;
import com.jd.blockchain.ledger.core.LedgerDataset; import com.jd.blockchain.ledger.core.LedgerDataset;
import com.jd.blockchain.ledger.core.LedgerService; import com.jd.blockchain.ledger.core.LedgerService;
import com.jd.blockchain.ledger.core.MultiIdsPolicy; import com.jd.blockchain.ledger.core.MultiIdsPolicy;
@@ -17,7 +18,7 @@ public class ContractCodeDeployOperationHandle extends AbstractLedgerOperationHa


@Override @Override
protected void doProcess(ContractCodeDeployOperation op, LedgerDataset newBlockDataset, protected void doProcess(ContractCodeDeployOperation op, LedgerDataset newBlockDataset,
TransactionRequestExtension requestContext, LedgerDataset previousBlockDataset,
TransactionRequestExtension requestContext, LedgerDataQuery previousBlockDataset,
OperationHandleContext handleContext, LedgerService ledgerService) { OperationHandleContext handleContext, LedgerService ledgerService) {
// TODO: 校验合约代码的正确性; // TODO: 校验合约代码的正确性;




+ 3
- 2
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/DataAccountKVSetOperationHandle.java View File

@@ -2,10 +2,11 @@ package com.jd.blockchain.ledger.core.handles;


import com.jd.blockchain.ledger.DataAccountDoesNotExistException; import com.jd.blockchain.ledger.DataAccountDoesNotExistException;
import com.jd.blockchain.ledger.DataAccountKVSetOperation; import com.jd.blockchain.ledger.DataAccountKVSetOperation;
import com.jd.blockchain.ledger.DataVersionConflictException;
import com.jd.blockchain.ledger.DataAccountKVSetOperation.KVWriteEntry; import com.jd.blockchain.ledger.DataAccountKVSetOperation.KVWriteEntry;
import com.jd.blockchain.ledger.DataVersionConflictException;
import com.jd.blockchain.ledger.LedgerPermission; import com.jd.blockchain.ledger.LedgerPermission;
import com.jd.blockchain.ledger.core.DataAccount; import com.jd.blockchain.ledger.core.DataAccount;
import com.jd.blockchain.ledger.core.LedgerDataQuery;
import com.jd.blockchain.ledger.core.LedgerDataset; import com.jd.blockchain.ledger.core.LedgerDataset;
import com.jd.blockchain.ledger.core.LedgerService; import com.jd.blockchain.ledger.core.LedgerService;
import com.jd.blockchain.ledger.core.MultiIdsPolicy; import com.jd.blockchain.ledger.core.MultiIdsPolicy;
@@ -22,7 +23,7 @@ public class DataAccountKVSetOperationHandle extends AbstractLedgerOperationHand


@Override @Override
protected void doProcess(DataAccountKVSetOperation kvWriteOp, LedgerDataset newBlockDataset, protected void doProcess(DataAccountKVSetOperation kvWriteOp, LedgerDataset newBlockDataset,
TransactionRequestExtension requestContext, LedgerDataset previousBlockDataset,
TransactionRequestExtension requestContext, LedgerDataQuery previousBlockDataset,
OperationHandleContext handleContext, LedgerService ledgerService) { OperationHandleContext handleContext, LedgerService ledgerService) {
// 权限校验; // 权限校验;
SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy();


+ 2
- 1
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/DataAccountRegisterOperationHandle.java View File

@@ -3,6 +3,7 @@ package com.jd.blockchain.ledger.core.handles;
import com.jd.blockchain.ledger.BlockchainIdentity; import com.jd.blockchain.ledger.BlockchainIdentity;
import com.jd.blockchain.ledger.DataAccountRegisterOperation; import com.jd.blockchain.ledger.DataAccountRegisterOperation;
import com.jd.blockchain.ledger.LedgerPermission; import com.jd.blockchain.ledger.LedgerPermission;
import com.jd.blockchain.ledger.core.LedgerDataQuery;
import com.jd.blockchain.ledger.core.LedgerDataset; import com.jd.blockchain.ledger.core.LedgerDataset;
import com.jd.blockchain.ledger.core.LedgerService; import com.jd.blockchain.ledger.core.LedgerService;
import com.jd.blockchain.ledger.core.MultiIdsPolicy; import com.jd.blockchain.ledger.core.MultiIdsPolicy;
@@ -18,7 +19,7 @@ public class DataAccountRegisterOperationHandle extends AbstractLedgerOperationH
@Override @Override
protected void doProcess(DataAccountRegisterOperation op, LedgerDataset newBlockDataset, protected void doProcess(DataAccountRegisterOperation op, LedgerDataset newBlockDataset,
TransactionRequestExtension requestContext, LedgerDataset previousBlockDataset,
TransactionRequestExtension requestContext, LedgerDataQuery previousBlockDataset,
OperationHandleContext handleContext, LedgerService ledgerService) { OperationHandleContext handleContext, LedgerService ledgerService) {
// TODO: 请求者应该提供数据账户的公钥签名,以更好地确保注册人对该地址和公钥具有合法使用权; // TODO: 请求者应该提供数据账户的公钥签名,以更好地确保注册人对该地址和公钥具有合法使用权;




+ 2
- 1
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/RolesConfigureOperationHandle.java View File

@@ -5,6 +5,7 @@ import com.jd.blockchain.ledger.RolePrivilegeSettings;
import com.jd.blockchain.ledger.RolePrivileges; import com.jd.blockchain.ledger.RolePrivileges;
import com.jd.blockchain.ledger.RolesConfigureOperation; import com.jd.blockchain.ledger.RolesConfigureOperation;
import com.jd.blockchain.ledger.RolesConfigureOperation.RolePrivilegeEntry; import com.jd.blockchain.ledger.RolesConfigureOperation.RolePrivilegeEntry;
import com.jd.blockchain.ledger.core.LedgerDataQuery;
import com.jd.blockchain.ledger.core.LedgerDataset; import com.jd.blockchain.ledger.core.LedgerDataset;
import com.jd.blockchain.ledger.core.LedgerService; import com.jd.blockchain.ledger.core.LedgerService;
import com.jd.blockchain.ledger.core.MultiIdsPolicy; import com.jd.blockchain.ledger.core.MultiIdsPolicy;
@@ -20,7 +21,7 @@ public class RolesConfigureOperationHandle extends AbstractLedgerOperationHandle


@Override @Override
protected void doProcess(RolesConfigureOperation operation, LedgerDataset newBlockDataset, protected void doProcess(RolesConfigureOperation operation, LedgerDataset newBlockDataset,
TransactionRequestExtension request, LedgerDataset previousBlockDataset,
TransactionRequestExtension request, LedgerDataQuery previousBlockDataset,
OperationHandleContext handleContext, LedgerService ledgerService) { OperationHandleContext handleContext, LedgerService ledgerService) {
// 权限校验; // 权限校验;
SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy();


+ 2
- 1
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/UserAuthorizeOperationHandle.java View File

@@ -10,6 +10,7 @@ import com.jd.blockchain.ledger.UserAuthorizeOperation;
import com.jd.blockchain.ledger.UserAuthorizeOperation.UserRolesEntry; import com.jd.blockchain.ledger.UserAuthorizeOperation.UserRolesEntry;
import com.jd.blockchain.ledger.UserRoles; import com.jd.blockchain.ledger.UserRoles;
import com.jd.blockchain.ledger.UserRolesSettings; import com.jd.blockchain.ledger.UserRolesSettings;
import com.jd.blockchain.ledger.core.LedgerDataQuery;
import com.jd.blockchain.ledger.core.LedgerDataset; import com.jd.blockchain.ledger.core.LedgerDataset;
import com.jd.blockchain.ledger.core.LedgerService; import com.jd.blockchain.ledger.core.LedgerService;
import com.jd.blockchain.ledger.core.MultiIdsPolicy; import com.jd.blockchain.ledger.core.MultiIdsPolicy;
@@ -25,7 +26,7 @@ public class UserAuthorizeOperationHandle extends AbstractLedgerOperationHandle<


@Override @Override
protected void doProcess(UserAuthorizeOperation operation, LedgerDataset newBlockDataset, protected void doProcess(UserAuthorizeOperation operation, LedgerDataset newBlockDataset,
TransactionRequestExtension request, LedgerDataset previousBlockDataset,
TransactionRequestExtension request, LedgerDataQuery previousBlockDataset,
OperationHandleContext handleContext, LedgerService ledgerService) { OperationHandleContext handleContext, LedgerService ledgerService) {
// 权限校验; // 权限校验;
SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy();


+ 2
- 1
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/UserRegisterOperationHandle.java View File

@@ -3,6 +3,7 @@ package com.jd.blockchain.ledger.core.handles;
import com.jd.blockchain.ledger.BlockchainIdentity; import com.jd.blockchain.ledger.BlockchainIdentity;
import com.jd.blockchain.ledger.LedgerPermission; import com.jd.blockchain.ledger.LedgerPermission;
import com.jd.blockchain.ledger.UserRegisterOperation; import com.jd.blockchain.ledger.UserRegisterOperation;
import com.jd.blockchain.ledger.core.LedgerDataQuery;
import com.jd.blockchain.ledger.core.LedgerDataset; import com.jd.blockchain.ledger.core.LedgerDataset;
import com.jd.blockchain.ledger.core.LedgerService; import com.jd.blockchain.ledger.core.LedgerService;
import com.jd.blockchain.ledger.core.MultiIdsPolicy; import com.jd.blockchain.ledger.core.MultiIdsPolicy;
@@ -19,7 +20,7 @@ public class UserRegisterOperationHandle extends AbstractLedgerOperationHandle<U


@Override @Override
protected void doProcess(UserRegisterOperation op, LedgerDataset newBlockDataset, protected void doProcess(UserRegisterOperation op, LedgerDataset newBlockDataset,
TransactionRequestExtension requestContext, LedgerDataset previousBlockDataset,
TransactionRequestExtension requestContext, LedgerDataQuery previousBlockDataset,
OperationHandleContext handleContext, LedgerService ledgerService) { OperationHandleContext handleContext, LedgerService ledgerService) {
// 权限校验; // 权限校验;
SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy();


+ 6
- 5
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/ContractInvokingTest.java View File

@@ -43,6 +43,7 @@ import com.jd.blockchain.ledger.TransactionResponse;
import com.jd.blockchain.ledger.TransactionState; import com.jd.blockchain.ledger.TransactionState;
import com.jd.blockchain.ledger.UserRegisterOperation; import com.jd.blockchain.ledger.UserRegisterOperation;
import com.jd.blockchain.ledger.core.DefaultOperationHandleRegisteration; import com.jd.blockchain.ledger.core.DefaultOperationHandleRegisteration;
import com.jd.blockchain.ledger.core.LedgerDataQuery;
import com.jd.blockchain.ledger.core.LedgerDataset; import com.jd.blockchain.ledger.core.LedgerDataset;
import com.jd.blockchain.ledger.core.LedgerEditor; import com.jd.blockchain.ledger.core.LedgerEditor;
import com.jd.blockchain.ledger.core.LedgerManager; import com.jd.blockchain.ledger.core.LedgerManager;
@@ -112,7 +113,7 @@ public class ContractInvokingTest {
deploy(ledgerRepo, ledgerManager, opReg, ledgerHash, contractKey); deploy(ledgerRepo, ledgerManager, opReg, ledgerHash, contractKey);
// 创建新区块的交易处理器; // 创建新区块的交易处理器;
LedgerBlock preBlock = ledgerRepo.getLatestBlock(); LedgerBlock preBlock = ledgerRepo.getLatestBlock();
LedgerDataset previousBlockDataset = ledgerRepo.getDataSet(preBlock);
LedgerDataQuery previousBlockDataset = ledgerRepo.getDataSet(preBlock);


// 加载合约 // 加载合约
LedgerEditor newBlockEditor = ledgerRepo.createNextBlock(); LedgerEditor newBlockEditor = ledgerRepo.createNextBlock();
@@ -190,7 +191,7 @@ public class ContractInvokingTest {


// 创建新区块的交易处理器; // 创建新区块的交易处理器;
LedgerBlock preBlock = ledgerRepo.getLatestBlock(); LedgerBlock preBlock = ledgerRepo.getLatestBlock();
LedgerDataset previousBlockDataset = ledgerRepo.getDataSet(preBlock);
LedgerDataQuery previousBlockDataset = ledgerRepo.getDataSet(preBlock);


// 加载合约 // 加载合约
LedgerEditor newBlockEditor = ledgerRepo.createNextBlock(); LedgerEditor newBlockEditor = ledgerRepo.createNextBlock();
@@ -339,7 +340,7 @@ public class ContractInvokingTest {
private LedgerBlock buildBlock(LedgerRepository ledgerRepo, LedgerService ledgerService, private LedgerBlock buildBlock(LedgerRepository ledgerRepo, LedgerService ledgerService,
OperationHandleRegisteration opReg, TxDefinitor txDefinitor) { OperationHandleRegisteration opReg, TxDefinitor txDefinitor) {
LedgerBlock preBlock = ledgerRepo.getLatestBlock(); LedgerBlock preBlock = ledgerRepo.getLatestBlock();
LedgerDataset previousBlockDataset = ledgerRepo.getDataSet(preBlock);
LedgerDataQuery previousBlockDataset = ledgerRepo.getDataSet(preBlock);
LedgerEditor newBlockEditor = ledgerRepo.createNextBlock(); LedgerEditor newBlockEditor = ledgerRepo.createNextBlock();
TransactionBatchProcessor txbatchProcessor = new TransactionBatchProcessor(getSecurityManager(), newBlockEditor, TransactionBatchProcessor txbatchProcessor = new TransactionBatchProcessor(getSecurityManager(), newBlockEditor,
previousBlockDataset, opReg, ledgerService); previousBlockDataset, opReg, ledgerService);
@@ -372,7 +373,7 @@ public class ContractInvokingTest {
private void registerDataAccount(LedgerRepository ledgerRepo, LedgerManager ledgerManager, private void registerDataAccount(LedgerRepository ledgerRepo, LedgerManager ledgerManager,
DefaultOperationHandleRegisteration opReg, HashDigest ledgerHash, BlockchainKeypair kpDataAccount) { DefaultOperationHandleRegisteration opReg, HashDigest ledgerHash, BlockchainKeypair kpDataAccount) {
LedgerBlock preBlock = ledgerRepo.getLatestBlock(); LedgerBlock preBlock = ledgerRepo.getLatestBlock();
LedgerDataset previousBlockDataset = ledgerRepo.getDataSet(preBlock);
LedgerDataQuery previousBlockDataset = ledgerRepo.getDataSet(preBlock);


// 加载合约 // 加载合约
LedgerEditor newBlockEditor = ledgerRepo.createNextBlock(); LedgerEditor newBlockEditor = ledgerRepo.createNextBlock();
@@ -402,7 +403,7 @@ public class ContractInvokingTest {
DefaultOperationHandleRegisteration opReg, HashDigest ledgerHash, BlockchainKeypair contractKey) { DefaultOperationHandleRegisteration opReg, HashDigest ledgerHash, BlockchainKeypair contractKey) {
// 创建新区块的交易处理器; // 创建新区块的交易处理器;
LedgerBlock preBlock = ledgerRepo.getLatestBlock(); LedgerBlock preBlock = ledgerRepo.getLatestBlock();
LedgerDataset previousBlockDataset = ledgerRepo.getDataSet(preBlock);
LedgerDataQuery previousBlockDataset = ledgerRepo.getDataSet(preBlock);


// 加载合约 // 加载合约
LedgerEditor newBlockEditor = ledgerRepo.createNextBlock(); LedgerEditor newBlockEditor = ledgerRepo.createNextBlock();


+ 6
- 6
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/LedgerManagerTest.java View File

@@ -32,9 +32,9 @@ import com.jd.blockchain.ledger.TransactionRequest;
import com.jd.blockchain.ledger.TransactionRequestBuilder; import com.jd.blockchain.ledger.TransactionRequestBuilder;
import com.jd.blockchain.ledger.TransactionState; import com.jd.blockchain.ledger.TransactionState;
import com.jd.blockchain.ledger.UserRegisterOperation; import com.jd.blockchain.ledger.UserRegisterOperation;
import com.jd.blockchain.ledger.core.ContractAccountSet;
import com.jd.blockchain.ledger.core.ContractAccountQuery;
import com.jd.blockchain.ledger.core.CryptoConfig; import com.jd.blockchain.ledger.core.CryptoConfig;
import com.jd.blockchain.ledger.core.DataAccountSet;
import com.jd.blockchain.ledger.core.DataAccountQuery;
import com.jd.blockchain.ledger.core.LedgerDataset; import com.jd.blockchain.ledger.core.LedgerDataset;
import com.jd.blockchain.ledger.core.LedgerEditor; import com.jd.blockchain.ledger.core.LedgerEditor;
import com.jd.blockchain.ledger.core.LedgerInitializer; import com.jd.blockchain.ledger.core.LedgerInitializer;
@@ -42,7 +42,7 @@ import com.jd.blockchain.ledger.core.LedgerManager;
import com.jd.blockchain.ledger.core.LedgerRepository; import com.jd.blockchain.ledger.core.LedgerRepository;
import com.jd.blockchain.ledger.core.LedgerTransactionContext; import com.jd.blockchain.ledger.core.LedgerTransactionContext;
import com.jd.blockchain.ledger.core.UserAccount; import com.jd.blockchain.ledger.core.UserAccount;
import com.jd.blockchain.ledger.core.UserAccountSet;
import com.jd.blockchain.ledger.core.UserAccountQuery;
import com.jd.blockchain.storage.service.utils.MemoryKVStorage; import com.jd.blockchain.storage.service.utils.MemoryKVStorage;
import com.jd.blockchain.transaction.ConsensusParticipantData; import com.jd.blockchain.transaction.ConsensusParticipantData;
import com.jd.blockchain.transaction.LedgerInitData; import com.jd.blockchain.transaction.LedgerInitData;
@@ -170,9 +170,9 @@ public class LedgerManagerTest {
assertEquals(1, latestBlock.getHeight()); assertEquals(1, latestBlock.getHeight());
assertEquals(block1.getHash(), latestBlock.getHash()); assertEquals(block1.getHash(), latestBlock.getHash());


DataAccountSet dataAccountSet = reloadLedgerRepo.getDataAccountSet(latestBlock);
UserAccountSet userAccountSet = reloadLedgerRepo.getUserAccountSet(latestBlock);
ContractAccountSet contractAccountSet = reloadLedgerRepo.getContractAccountSet(latestBlock);
DataAccountQuery dataAccountSet = reloadLedgerRepo.getDataAccountSet(latestBlock);
UserAccountQuery userAccountSet = reloadLedgerRepo.getUserAccountSet(latestBlock);
ContractAccountQuery contractAccountSet = reloadLedgerRepo.getContractAccountSet(latestBlock);


} }




+ 1
- 1
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/MerkleDataSetTest.java View File

@@ -20,9 +20,9 @@ import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm;
import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; import com.jd.blockchain.crypto.service.classic.ClassicCryptoService;
import com.jd.blockchain.crypto.service.sm.SMCryptoService; import com.jd.blockchain.crypto.service.sm.SMCryptoService;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.ledger.core.CryptoConfig; import com.jd.blockchain.ledger.core.CryptoConfig;
import com.jd.blockchain.ledger.core.MerkleDataSet; import com.jd.blockchain.ledger.core.MerkleDataSet;
import com.jd.blockchain.ledger.core.MerkleProof;
import com.jd.blockchain.storage.service.VersioningKVEntry; import com.jd.blockchain.storage.service.VersioningKVEntry;
import com.jd.blockchain.storage.service.utils.MemoryKVStorage; import com.jd.blockchain.storage.service.utils.MemoryKVStorage;
import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;


+ 3
- 3
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/MerkleTreeTest.java View File

@@ -17,9 +17,9 @@ import org.mockito.Mockito;
import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm;
import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.CryptoSetting;
import com.jd.blockchain.ledger.core.MerkleDataNode;
import com.jd.blockchain.ledger.core.MerkleNode;
import com.jd.blockchain.ledger.core.MerkleProof;
import com.jd.blockchain.ledger.MerkleDataNode;
import com.jd.blockchain.ledger.MerkleNode;
import com.jd.blockchain.ledger.MerkleProof;
import com.jd.blockchain.ledger.core.MerkleTree; import com.jd.blockchain.ledger.core.MerkleTree;
import com.jd.blockchain.storage.service.utils.ExistancePolicyKVStorageMap; import com.jd.blockchain.storage.service.utils.ExistancePolicyKVStorageMap;
import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;


+ 7
- 6
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/TransactionBatchProcessorTest.java View File

@@ -33,6 +33,7 @@ import com.jd.blockchain.ledger.TransactionState;
import com.jd.blockchain.ledger.UserRegisterOperation; import com.jd.blockchain.ledger.UserRegisterOperation;
import com.jd.blockchain.ledger.core.DataAccount; import com.jd.blockchain.ledger.core.DataAccount;
import com.jd.blockchain.ledger.core.DefaultOperationHandleRegisteration; import com.jd.blockchain.ledger.core.DefaultOperationHandleRegisteration;
import com.jd.blockchain.ledger.core.LedgerDataQuery;
import com.jd.blockchain.ledger.core.LedgerDataset; import com.jd.blockchain.ledger.core.LedgerDataset;
import com.jd.blockchain.ledger.core.LedgerEditor; import com.jd.blockchain.ledger.core.LedgerEditor;
import com.jd.blockchain.ledger.core.LedgerManager; import com.jd.blockchain.ledger.core.LedgerManager;
@@ -83,7 +84,7 @@ public class TransactionBatchProcessorTest {
LedgerRepository ledgerRepo = ledgerManager.register(ledgerHash, STORAGE); LedgerRepository ledgerRepo = ledgerManager.register(ledgerHash, STORAGE);


// 验证参与方账户的存在; // 验证参与方账户的存在;
LedgerDataset previousBlockDataset = ledgerRepo.getDataSet(ledgerRepo.getLatestBlock());
LedgerDataQuery previousBlockDataset = ledgerRepo.getDataSet(ledgerRepo.getLatestBlock());
UserAccount user0 = previousBlockDataset.getUserAccountSet().getUser(parti0.getAddress()); UserAccount user0 = previousBlockDataset.getUserAccountSet().getUser(parti0.getAddress());
assertNotNull(user0); assertNotNull(user0);
boolean partiRegistered = previousBlockDataset.getUserAccountSet().contains(parti0.getAddress()); boolean partiRegistered = previousBlockDataset.getUserAccountSet().contains(parti0.getAddress());
@@ -143,7 +144,7 @@ public class TransactionBatchProcessorTest {
LedgerRepository ledgerRepo = ledgerManager.register(ledgerHash, STORAGE); LedgerRepository ledgerRepo = ledgerManager.register(ledgerHash, STORAGE);


// 验证参与方账户的存在; // 验证参与方账户的存在;
LedgerDataset previousBlockDataset = ledgerRepo.getDataSet(ledgerRepo.getLatestBlock());
LedgerDataQuery previousBlockDataset = ledgerRepo.getDataSet(ledgerRepo.getLatestBlock());
UserAccount user0 = previousBlockDataset.getUserAccountSet().getUser(parti0.getAddress()); UserAccount user0 = previousBlockDataset.getUserAccountSet().getUser(parti0.getAddress());
assertNotNull(user0); assertNotNull(user0);
boolean partiRegistered = previousBlockDataset.getUserAccountSet().contains(parti0.getAddress()); boolean partiRegistered = previousBlockDataset.getUserAccountSet().contains(parti0.getAddress());
@@ -182,7 +183,7 @@ public class TransactionBatchProcessorTest {
assertEquals(newBlock.getHash(), latestBlock.getHash()); assertEquals(newBlock.getHash(), latestBlock.getHash());
assertEquals(1, newBlock.getHeight()); assertEquals(1, newBlock.getHeight());


LedgerDataset ledgerDS = ledgerRepo.getDataSet(latestBlock);
LedgerDataQuery ledgerDS = ledgerRepo.getDataSet(latestBlock);
boolean existUser1 = ledgerDS.getUserAccountSet().contains(userKeypair1.getAddress()); boolean existUser1 = ledgerDS.getUserAccountSet().contains(userKeypair1.getAddress());
boolean existUser2 = ledgerDS.getUserAccountSet().contains(userKeypair2.getAddress()); boolean existUser2 = ledgerDS.getUserAccountSet().contains(userKeypair2.getAddress());
assertTrue(existUser1); assertTrue(existUser1);
@@ -201,7 +202,7 @@ public class TransactionBatchProcessorTest {
LedgerRepository ledgerRepo = ledgerManager.register(ledgerHash, STORAGE); LedgerRepository ledgerRepo = ledgerManager.register(ledgerHash, STORAGE);


// 验证参与方账户的存在; // 验证参与方账户的存在;
LedgerDataset previousBlockDataset = ledgerRepo.getDataSet(ledgerRepo.getLatestBlock());
LedgerDataQuery previousBlockDataset = ledgerRepo.getDataSet(ledgerRepo.getLatestBlock());
UserAccount user0 = previousBlockDataset.getUserAccountSet().getUser(parti0.getAddress()); UserAccount user0 = previousBlockDataset.getUserAccountSet().getUser(parti0.getAddress());
assertNotNull(user0); assertNotNull(user0);
boolean partiRegistered = previousBlockDataset.getUserAccountSet().contains(parti0.getAddress()); boolean partiRegistered = previousBlockDataset.getUserAccountSet().contains(parti0.getAddress());
@@ -260,7 +261,7 @@ public class TransactionBatchProcessorTest {
assertNotNull(tx3); assertNotNull(tx3);
assertEquals(TransactionState.SUCCESS, tx3.getExecutionState()); assertEquals(TransactionState.SUCCESS, tx3.getExecutionState());


LedgerDataset ledgerDS = ledgerRepo.getDataSet(latestBlock);
LedgerDataQuery ledgerDS = ledgerRepo.getDataSet(latestBlock);
boolean existUser1 = ledgerDS.getUserAccountSet().contains(userKeypair1.getAddress()); boolean existUser1 = ledgerDS.getUserAccountSet().contains(userKeypair1.getAddress());
boolean existUser2 = ledgerDS.getUserAccountSet().contains(userKeypair2.getAddress()); boolean existUser2 = ledgerDS.getUserAccountSet().contains(userKeypair2.getAddress());
boolean existUser3 = ledgerDS.getUserAccountSet().contains(userKeypair3.getAddress()); boolean existUser3 = ledgerDS.getUserAccountSet().contains(userKeypair3.getAddress());
@@ -281,7 +282,7 @@ public class TransactionBatchProcessorTest {
LedgerRepository ledgerRepo = ledgerManager.register(ledgerHash, STORAGE); LedgerRepository ledgerRepo = ledgerManager.register(ledgerHash, STORAGE);


// 验证参与方账户的存在; // 验证参与方账户的存在;
LedgerDataset previousBlockDataset = ledgerRepo.getDataSet(ledgerRepo.getLatestBlock());
LedgerDataQuery previousBlockDataset = ledgerRepo.getDataSet(ledgerRepo.getLatestBlock());
UserAccount user0 = previousBlockDataset.getUserAccountSet().getUser(parti0.getAddress()); UserAccount user0 = previousBlockDataset.getUserAccountSet().getUser(parti0.getAddress());
assertNotNull(user0); assertNotNull(user0);
boolean partiRegistered = previousBlockDataset.getUserAccountSet().contains(parti0.getAddress()); boolean partiRegistered = previousBlockDataset.getUserAccountSet().contains(parti0.getAddress());


source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/MerkleDataNode.java → source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/MerkleDataNode.java View File

@@ -1,4 +1,4 @@
package com.jd.blockchain.ledger.core;
package com.jd.blockchain.ledger;


import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;



source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/MerkleNode.java → source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/MerkleNode.java View File

@@ -1,4 +1,4 @@
package com.jd.blockchain.ledger.core;
package com.jd.blockchain.ledger;


import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;



source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/MerkleProof.java → source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/MerkleProof.java View File

@@ -1,4 +1,4 @@
package com.jd.blockchain.ledger.core;
package com.jd.blockchain.ledger;


import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;



+ 29
- 0
source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/ParticipantDataQuery.java View File

@@ -0,0 +1,29 @@
package com.jd.blockchain.ledger;

import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.utils.Bytes;

public interface ParticipantDataQuery {

HashDigest getRootHash();

MerkleProof getProof(Bytes key);

long getParticipantCount();

boolean contains(Bytes address);

/**
* 返回指定地址的参与方凭证;
*
* <br>
* 如果不存在,则返回 null;
*
* @param address
* @return
*/
ParticipantNode getParticipant(Bytes address);

ParticipantNode[] getParticipants();

}

+ 22
- 22
source/peer/src/main/java/com/jd/blockchain/peer/web/LedgerQueryController.java View File

@@ -14,14 +14,14 @@ import org.springframework.web.bind.annotation.RestController;


import com.jd.blockchain.contract.ContractException; import com.jd.blockchain.contract.ContractException;
import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.core.ContractAccountSet;
import com.jd.blockchain.ledger.core.ContractAccountQuery;
import com.jd.blockchain.ledger.core.DataAccount; import com.jd.blockchain.ledger.core.DataAccount;
import com.jd.blockchain.ledger.core.DataAccountSet;
import com.jd.blockchain.ledger.core.DataAccountQuery;
import com.jd.blockchain.ledger.core.LedgerRepository; import com.jd.blockchain.ledger.core.LedgerRepository;
import com.jd.blockchain.ledger.core.LedgerService; import com.jd.blockchain.ledger.core.LedgerService;
import com.jd.blockchain.ledger.core.ParticipantCertData; import com.jd.blockchain.ledger.core.ParticipantCertData;
import com.jd.blockchain.ledger.core.TransactionSet; import com.jd.blockchain.ledger.core.TransactionSet;
import com.jd.blockchain.ledger.core.UserAccountSet;
import com.jd.blockchain.ledger.core.UserAccountQuery;
import com.jd.blockchain.transaction.BlockchainQueryService; import com.jd.blockchain.transaction.BlockchainQueryService;
import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;
import com.jd.blockchain.utils.QueryUtil; import com.jd.blockchain.utils.QueryUtil;
@@ -145,7 +145,7 @@ public class LedgerQueryController implements BlockchainQueryService {
@PathVariable(name = "blockHeight") long height) { @PathVariable(name = "blockHeight") long height) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getBlock(height); LedgerBlock block = ledger.getBlock(height);
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
return dataAccountSet.getTotalCount(); return dataAccountSet.getTotalCount();
} }


@@ -155,7 +155,7 @@ public class LedgerQueryController implements BlockchainQueryService {
@PathVariable(name = "blockHash") HashDigest blockHash) { @PathVariable(name = "blockHash") HashDigest blockHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getBlock(blockHash); LedgerBlock block = ledger.getBlock(blockHash);
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
return dataAccountSet.getTotalCount(); return dataAccountSet.getTotalCount();
} }


@@ -164,7 +164,7 @@ public class LedgerQueryController implements BlockchainQueryService {
public long getDataAccountTotalCount(@PathVariable(name = "ledgerHash") HashDigest ledgerHash) { public long getDataAccountTotalCount(@PathVariable(name = "ledgerHash") HashDigest ledgerHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
return dataAccountSet.getTotalCount(); return dataAccountSet.getTotalCount();
} }


@@ -174,7 +174,7 @@ public class LedgerQueryController implements BlockchainQueryService {
@PathVariable(name = "blockHeight") long height) { @PathVariable(name = "blockHeight") long height) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getBlock(height); LedgerBlock block = ledger.getBlock(height);
UserAccountSet userAccountSet = ledger.getUserAccountSet(block);
UserAccountQuery userAccountSet = ledger.getUserAccountSet(block);
return userAccountSet.getTotalCount(); return userAccountSet.getTotalCount();
} }


@@ -184,7 +184,7 @@ public class LedgerQueryController implements BlockchainQueryService {
@PathVariable(name = "blockHash") HashDigest blockHash) { @PathVariable(name = "blockHash") HashDigest blockHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getBlock(blockHash); LedgerBlock block = ledger.getBlock(blockHash);
UserAccountSet userAccountSet = ledger.getUserAccountSet(block);
UserAccountQuery userAccountSet = ledger.getUserAccountSet(block);
return userAccountSet.getTotalCount(); return userAccountSet.getTotalCount();
} }


@@ -193,7 +193,7 @@ public class LedgerQueryController implements BlockchainQueryService {
public long getUserTotalCount(@PathVariable(name = "ledgerHash") HashDigest ledgerHash) { public long getUserTotalCount(@PathVariable(name = "ledgerHash") HashDigest ledgerHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
UserAccountSet userAccountSet = ledger.getUserAccountSet(block);
UserAccountQuery userAccountSet = ledger.getUserAccountSet(block);
return userAccountSet.getTotalCount(); return userAccountSet.getTotalCount();
} }


@@ -203,7 +203,7 @@ public class LedgerQueryController implements BlockchainQueryService {
@PathVariable(name = "blockHeight") long height) { @PathVariable(name = "blockHeight") long height) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getBlock(height); LedgerBlock block = ledger.getBlock(height);
ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block);
ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block);
return contractAccountSet.getTotalCount(); return contractAccountSet.getTotalCount();
} }


@@ -213,7 +213,7 @@ public class LedgerQueryController implements BlockchainQueryService {
@PathVariable(name = "blockHash") HashDigest blockHash) { @PathVariable(name = "blockHash") HashDigest blockHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getBlock(blockHash); LedgerBlock block = ledger.getBlock(blockHash);
ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block);
ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block);
return contractAccountSet.getTotalCount(); return contractAccountSet.getTotalCount();
} }


@@ -222,7 +222,7 @@ public class LedgerQueryController implements BlockchainQueryService {
public long getContractTotalCount(@PathVariable(name = "ledgerHash") HashDigest ledgerHash) { public long getContractTotalCount(@PathVariable(name = "ledgerHash") HashDigest ledgerHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block);
ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block);
return contractAccountSet.getTotalCount(); return contractAccountSet.getTotalCount();
} }


@@ -320,7 +320,7 @@ public class LedgerQueryController implements BlockchainQueryService {
@PathVariable(name = "address") String address) { @PathVariable(name = "address") String address) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
UserAccountSet userAccountSet = ledger.getUserAccountSet(block);
UserAccountQuery userAccountSet = ledger.getUserAccountSet(block);
return userAccountSet.getUser(address); return userAccountSet.getUser(address);
} }


@@ -330,7 +330,7 @@ public class LedgerQueryController implements BlockchainQueryService {
@PathVariable(name = "address") String address) { @PathVariable(name = "address") String address) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
return dataAccountSet.getDataAccount(Bytes.fromBase58(address)); return dataAccountSet.getDataAccount(Bytes.fromBase58(address));
} }


@@ -344,7 +344,7 @@ public class LedgerQueryController implements BlockchainQueryService {
} }
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address));


KVDataEntry[] entries = new KVDataEntry[keys.length]; KVDataEntry[] entries = new KVDataEntry[keys.length];
@@ -393,7 +393,7 @@ public class LedgerQueryController implements BlockchainQueryService {


LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address));


KVDataEntry[] entries = new KVDataEntry[keys.length]; KVDataEntry[] entries = new KVDataEntry[keys.length];
@@ -428,7 +428,7 @@ public class LedgerQueryController implements BlockchainQueryService {


LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address));


int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) dataAccount.getDataEntriesTotalCount()); int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) dataAccount.getDataEntriesTotalCount());
@@ -442,7 +442,7 @@ public class LedgerQueryController implements BlockchainQueryService {


LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address));


return dataAccount.getDataEntriesTotalCount(); return dataAccount.getDataEntriesTotalCount();
@@ -454,7 +454,7 @@ public class LedgerQueryController implements BlockchainQueryService {
@PathVariable(name = "address") String address) { @PathVariable(name = "address") String address) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block);
ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block);
return contractAccountSet.getContract(Bytes.fromBase58(address)); return contractAccountSet.getContract(Bytes.fromBase58(address));
} }


@@ -473,7 +473,7 @@ public class LedgerQueryController implements BlockchainQueryService {
@RequestParam(name = "count", required = false, defaultValue = "-1") int count) { @RequestParam(name = "count", required = false, defaultValue = "-1") int count) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
UserAccountSet userAccountSet = ledger.getUserAccountSet(block);
UserAccountQuery userAccountSet = ledger.getUserAccountSet(block);
int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) userAccountSet.getTotalCount()); int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) userAccountSet.getTotalCount());
return userAccountSet.getAccounts(pages[0], pages[1]); return userAccountSet.getAccounts(pages[0], pages[1]);
} }
@@ -493,7 +493,7 @@ public class LedgerQueryController implements BlockchainQueryService {
@RequestParam(name = "count", required = false, defaultValue = "-1") int count) { @RequestParam(name = "count", required = false, defaultValue = "-1") int count) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
DataAccountSet dataAccountSet = ledger.getDataAccountSet(block);
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) dataAccountSet.getTotalCount()); int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) dataAccountSet.getTotalCount());
return dataAccountSet.getAccounts(pages[0], pages[1]); return dataAccountSet.getAccounts(pages[0], pages[1]);
} }
@@ -505,7 +505,7 @@ public class LedgerQueryController implements BlockchainQueryService {
@RequestParam(name = "count", required = false, defaultValue = "-1") int count) { @RequestParam(name = "count", required = false, defaultValue = "-1") int count) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock(); LedgerBlock block = ledger.getLatestBlock();
ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block);
ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block);
int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) contractAccountSet.getTotalCount()); int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) contractAccountSet.getTotalCount());
return contractAccountSet.getAccounts(pages[0], pages[1]); return contractAccountSet.getAccounts(pages[0], pages[1]);
} }


+ 2
- 1
source/peer/src/main/java/com/jd/blockchain/peer/web/ManagementController.java View File

@@ -47,6 +47,7 @@ import com.jd.blockchain.ledger.TransactionContentBody;
import com.jd.blockchain.ledger.TransactionRequest; import com.jd.blockchain.ledger.TransactionRequest;
import com.jd.blockchain.ledger.TransactionResponse; import com.jd.blockchain.ledger.TransactionResponse;
import com.jd.blockchain.ledger.UserRegisterOperation; import com.jd.blockchain.ledger.UserRegisterOperation;
import com.jd.blockchain.ledger.core.LedgerAdminDataQuery;
import com.jd.blockchain.ledger.core.LedgerManage; import com.jd.blockchain.ledger.core.LedgerManage;
import com.jd.blockchain.ledger.core.LedgerRepository; import com.jd.blockchain.ledger.core.LedgerRepository;
import com.jd.blockchain.peer.ConsensusRealm; import com.jd.blockchain.peer.ConsensusRealm;
@@ -122,7 +123,7 @@ public class ManagementController implements LedgerBindingConfigAware, PeerManag
DataContractRegistry.register(BftsmartConsensusSettings.class); DataContractRegistry.register(BftsmartConsensusSettings.class);
DataContractRegistry.register(BftsmartNodeSettings.class); DataContractRegistry.register(BftsmartNodeSettings.class);
DataContractRegistry.register(LedgerAdminInfo.class);
DataContractRegistry.register(LedgerAdminDataQuery.class);
} }


+ 2
- 2
source/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/IntegrationTest.java View File

@@ -35,7 +35,7 @@ import com.jd.blockchain.ledger.PreparedTransaction;
import com.jd.blockchain.ledger.TransactionResponse; import com.jd.blockchain.ledger.TransactionResponse;
import com.jd.blockchain.ledger.TransactionTemplate; import com.jd.blockchain.ledger.TransactionTemplate;
import com.jd.blockchain.ledger.UserInfo; import com.jd.blockchain.ledger.UserInfo;
import com.jd.blockchain.ledger.core.DataAccountSet;
import com.jd.blockchain.ledger.core.DataAccountQuery;
import com.jd.blockchain.ledger.core.LedgerManage; import com.jd.blockchain.ledger.core.LedgerManage;
import com.jd.blockchain.ledger.core.LedgerManager; import com.jd.blockchain.ledger.core.LedgerManager;
import com.jd.blockchain.ledger.core.LedgerRepository; import com.jd.blockchain.ledger.core.LedgerRepository;
@@ -619,7 +619,7 @@ public class IntegrationTest {
LedgerBlock backgroundLedgerBlock = ledgerOfNode0.retrieveLatestBlock(); LedgerBlock backgroundLedgerBlock = ledgerOfNode0.retrieveLatestBlock();


// 验证合约中的赋值,外部可以获得; // 验证合约中的赋值,外部可以获得;
DataAccountSet dataAccountSet = ledgerOfNode0.getDataAccountSet(backgroundLedgerBlock);
DataAccountQuery dataAccountSet = ledgerOfNode0.getDataAccountSet(backgroundLedgerBlock);
AsymmetricKeypair key = Crypto.getSignatureFunction("ED25519").generateKeypair(); AsymmetricKeypair key = Crypto.getSignatureFunction("ED25519").generateKeypair();
PubKey pubKey = key.getPubKey(); PubKey pubKey = key.getPubKey();
Bytes dataAddress = AddressEncoding.generateAddress(pubKey); Bytes dataAddress = AddressEncoding.generateAddress(pubKey);


+ 2
- 2
source/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/perf/LedgerInitializeTest.java View File

@@ -27,7 +27,7 @@ import com.jd.blockchain.ledger.core.LedgerInitProposal;
import com.jd.blockchain.ledger.core.LedgerManager; import com.jd.blockchain.ledger.core.LedgerManager;
import com.jd.blockchain.ledger.core.LedgerRepository; import com.jd.blockchain.ledger.core.LedgerRepository;
import com.jd.blockchain.ledger.core.UserAccount; import com.jd.blockchain.ledger.core.UserAccount;
import com.jd.blockchain.ledger.core.UserAccountSet;
import com.jd.blockchain.ledger.core.UserAccountQuery;
import com.jd.blockchain.storage.service.utils.MemoryDBConnFactory; import com.jd.blockchain.storage.service.utils.MemoryDBConnFactory;
//import com.jd.blockchain.storage.service.utils.MemoryBasedDb; //import com.jd.blockchain.storage.service.utils.MemoryBasedDb;
import com.jd.blockchain.tools.initializer.DBConnectionConfig; import com.jd.blockchain.tools.initializer.DBConnectionConfig;
@@ -113,7 +113,7 @@ public class LedgerInitializeTest {


LedgerBlock genesisBlock = ledger0.getLatestBlock(); LedgerBlock genesisBlock = ledger0.getLatestBlock();


UserAccountSet userset0 = ledger0.getUserAccountSet(genesisBlock);
UserAccountQuery userset0 = ledger0.getUserAccountSet(genesisBlock);


PubKey pubKey0 = KeyGenUtils.decodePubKey(PUB_KEYS[0]); PubKey pubKey0 = KeyGenUtils.decodePubKey(PUB_KEYS[0]);
Bytes address0 = AddressEncoding.generateAddress(pubKey0); Bytes address0 = AddressEncoding.generateAddress(pubKey0);


+ 2
- 2
source/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/perf/LedgerInitializeWebTest.java View File

@@ -32,7 +32,7 @@ import com.jd.blockchain.ledger.core.LedgerInitProposal;
import com.jd.blockchain.ledger.core.LedgerManager; import com.jd.blockchain.ledger.core.LedgerManager;
import com.jd.blockchain.ledger.core.LedgerRepository; import com.jd.blockchain.ledger.core.LedgerRepository;
import com.jd.blockchain.ledger.core.UserAccount; import com.jd.blockchain.ledger.core.UserAccount;
import com.jd.blockchain.ledger.core.UserAccountSet;
import com.jd.blockchain.ledger.core.UserAccountQuery;
import com.jd.blockchain.storage.service.DbConnection; import com.jd.blockchain.storage.service.DbConnection;
import com.jd.blockchain.storage.service.impl.composite.CompositeConnectionFactory; import com.jd.blockchain.storage.service.impl.composite.CompositeConnectionFactory;
//import com.jd.blockchain.storage.service.utils.MemoryBasedDb; //import com.jd.blockchain.storage.service.utils.MemoryBasedDb;
@@ -298,7 +298,7 @@ public class LedgerInitializeWebTest {


LedgerBlock genesisBlock = ledger0.getLatestBlock(); LedgerBlock genesisBlock = ledger0.getLatestBlock();


UserAccountSet userset0 = ledger0.getUserAccountSet(genesisBlock);
UserAccountQuery userset0 = ledger0.getUserAccountSet(genesisBlock);


PubKey pubKey0 = KeyGenUtils.decodePubKey(PUB_KEYS[0]); PubKey pubKey0 = KeyGenUtils.decodePubKey(PUB_KEYS[0]);
Bytes address0 = AddressEncoding.generateAddress(pubKey0); Bytes address0 = AddressEncoding.generateAddress(pubKey0);


+ 3
- 3
source/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/perf/LedgerPerformanceTest.java View File

@@ -40,7 +40,7 @@ import com.jd.blockchain.ledger.TransactionRequestBuilder;
import com.jd.blockchain.ledger.TransactionResponse; import com.jd.blockchain.ledger.TransactionResponse;
import com.jd.blockchain.ledger.UserRegisterOperation; import com.jd.blockchain.ledger.UserRegisterOperation;
import com.jd.blockchain.ledger.core.DefaultOperationHandleRegisteration; import com.jd.blockchain.ledger.core.DefaultOperationHandleRegisteration;
import com.jd.blockchain.ledger.core.LedgerDataset;
import com.jd.blockchain.ledger.core.LedgerDataQuery;
import com.jd.blockchain.ledger.core.LedgerEditor; import com.jd.blockchain.ledger.core.LedgerEditor;
import com.jd.blockchain.ledger.core.LedgerManager; import com.jd.blockchain.ledger.core.LedgerManager;
import com.jd.blockchain.ledger.core.LedgerRepository; import com.jd.blockchain.ledger.core.LedgerRepository;
@@ -291,7 +291,7 @@ public class LedgerPerformanceTest {
ConsoleUtils.info("\r\n\r\n================= 准备测试交易 [执行合约] ================="); ConsoleUtils.info("\r\n\r\n================= 准备测试交易 [执行合约] =================");


LedgerBlock latestBlock = ledger.getLatestBlock(); LedgerBlock latestBlock = ledger.getLatestBlock();
LedgerDataset previousDataSet = ledger.getDataSet(latestBlock);
LedgerDataQuery previousDataSet = ledger.getDataSet(latestBlock);
LedgerEditor newEditor = ledger.createNextBlock(); LedgerEditor newEditor = ledger.createNextBlock();
TransactionBatchProcessor txProc = new TransactionBatchProcessor(DEFAULT_SECURITY_MANAGER, newEditor, TransactionBatchProcessor txProc = new TransactionBatchProcessor(DEFAULT_SECURITY_MANAGER, newEditor,
previousDataSet, opHandler, ledgerManager); previousDataSet, opHandler, ledgerManager);
@@ -324,7 +324,7 @@ public class LedgerPerformanceTest {
long batchStartTs = System.currentTimeMillis(); long batchStartTs = System.currentTimeMillis();
for (int i = 0; i < batchCount; i++) { for (int i = 0; i < batchCount; i++) {
LedgerBlock latestBlock = ledger.getLatestBlock(); LedgerBlock latestBlock = ledger.getLatestBlock();
LedgerDataset previousDataSet = ledger.getDataSet(latestBlock);
LedgerDataQuery previousDataSet = ledger.getDataSet(latestBlock);
if (statistic) { if (statistic) {
ConsoleUtils.info("------ 开始执行交易, 即将生成区块[高度:%s] ------", (latestBlock.getHeight() + 1)); ConsoleUtils.info("------ 开始执行交易, 即将生成区块[高度:%s] ------", (latestBlock.getHeight() + 1));
} }


+ 2
- 2
source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTestAll4Redis.java View File

@@ -4,7 +4,7 @@ import com.jd.blockchain.crypto.*;
import com.jd.blockchain.gateway.GatewayConfigProperties.KeyPairConfig; import com.jd.blockchain.gateway.GatewayConfigProperties.KeyPairConfig;
import com.jd.blockchain.ledger.*; import com.jd.blockchain.ledger.*;
import com.jd.blockchain.ledger.core.DataAccount; import com.jd.blockchain.ledger.core.DataAccount;
import com.jd.blockchain.ledger.core.DataAccountSet;
import com.jd.blockchain.ledger.core.DataAccountQuery;
import com.jd.blockchain.ledger.core.LedgerManage; import com.jd.blockchain.ledger.core.LedgerManage;
import com.jd.blockchain.ledger.core.LedgerManager; import com.jd.blockchain.ledger.core.LedgerManager;
import com.jd.blockchain.ledger.core.LedgerRepository; import com.jd.blockchain.ledger.core.LedgerRepository;
@@ -445,7 +445,7 @@ public class IntegrationTestAll4Redis {
assertEquals(txResp.getBlockHeight(), backgroundLedgerBlock.getHeight()); assertEquals(txResp.getBlockHeight(), backgroundLedgerBlock.getHeight());


// 验证合约中的赋值,外部可以获得; // 验证合约中的赋值,外部可以获得;
DataAccountSet dataAccountSet = ledgerRepository.getDataAccountSet(backgroundLedgerBlock);
DataAccountQuery dataAccountSet = ledgerRepository.getDataAccountSet(backgroundLedgerBlock);
AsymmetricKeypair key = Crypto.getSignatureFunction("ED25519").generateKeypair(); AsymmetricKeypair key = Crypto.getSignatureFunction("ED25519").generateKeypair();
PubKey pubKey = key.getPubKey(); PubKey pubKey = key.getPubKey();
Bytes dataAddress = AddressEncoding.generateAddress(pubKey); Bytes dataAddress = AddressEncoding.generateAddress(pubKey);


+ 2
- 2
source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTestDataAccount.java View File

@@ -29,7 +29,7 @@ import com.jd.blockchain.ledger.LedgerInitProperties;
import com.jd.blockchain.ledger.PreparedTransaction; import com.jd.blockchain.ledger.PreparedTransaction;
import com.jd.blockchain.ledger.TransactionResponse; import com.jd.blockchain.ledger.TransactionResponse;
import com.jd.blockchain.ledger.TransactionTemplate; import com.jd.blockchain.ledger.TransactionTemplate;
import com.jd.blockchain.ledger.core.DataAccountSet;
import com.jd.blockchain.ledger.core.DataAccountQuery;
import com.jd.blockchain.ledger.core.LedgerManager; import com.jd.blockchain.ledger.core.LedgerManager;
import com.jd.blockchain.ledger.core.LedgerRepository; import com.jd.blockchain.ledger.core.LedgerRepository;
import com.jd.blockchain.sdk.BlockchainService; import com.jd.blockchain.sdk.BlockchainService;
@@ -187,7 +187,7 @@ public class IntegrationTestDataAccount {


LedgerRepository ledgerRepository = ledgerManager.register(ledgerHashs[0], memoryBasedDb.getStorageService()); LedgerRepository ledgerRepository = ledgerManager.register(ledgerHashs[0], memoryBasedDb.getStorageService());


DataAccountSet dataAccountSet = ledgerRepository.getDataAccountSet(ledgerRepository.retrieveLatestBlock());
DataAccountQuery dataAccountSet = ledgerRepository.getDataAccountSet(ledgerRepository.retrieveLatestBlock());


TransactionTemplate txTpl = blockchainService.newTransaction(ledgerHashs[0]); TransactionTemplate txTpl = blockchainService.newTransaction(ledgerHashs[0]);




+ 2
- 2
source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitializeTest.java View File

@@ -34,7 +34,7 @@ import com.jd.blockchain.ledger.core.LedgerInitProposal;
import com.jd.blockchain.ledger.core.LedgerManager; import com.jd.blockchain.ledger.core.LedgerManager;
import com.jd.blockchain.ledger.core.LedgerRepository; import com.jd.blockchain.ledger.core.LedgerRepository;
import com.jd.blockchain.ledger.core.UserAccount; import com.jd.blockchain.ledger.core.UserAccount;
import com.jd.blockchain.ledger.core.UserAccountSet;
import com.jd.blockchain.ledger.core.UserAccountQuery;
import com.jd.blockchain.storage.service.utils.MemoryDBConnFactory; import com.jd.blockchain.storage.service.utils.MemoryDBConnFactory;
import com.jd.blockchain.tools.initializer.DBConnectionConfig; import com.jd.blockchain.tools.initializer.DBConnectionConfig;
import com.jd.blockchain.tools.initializer.LedgerInitProcess; import com.jd.blockchain.tools.initializer.LedgerInitProcess;
@@ -143,7 +143,7 @@ public class LedgerInitializeTest {
assertEquals(0, genesisBlock.getHeight()); assertEquals(0, genesisBlock.getHeight());
assertEquals(ledgerHash0, genesisBlock.getHash()); assertEquals(ledgerHash0, genesisBlock.getHash());


UserAccountSet userset0 = ledger0.getUserAccountSet(genesisBlock);
UserAccountQuery userset0 = ledger0.getUserAccountSet(genesisBlock);


PubKey pubKey0 = KeyGenUtils.decodePubKey(PUB_KEYS[0]); PubKey pubKey0 = KeyGenUtils.decodePubKey(PUB_KEYS[0]);
Bytes address0 = AddressEncoding.generateAddress(pubKey0); Bytes address0 = AddressEncoding.generateAddress(pubKey0);


+ 1
- 1
source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitializeWeb4Nodes.java View File

@@ -138,7 +138,7 @@ public class LedgerInitializeWeb4Nodes {
assertEquals(0, genesisBlock.getHeight()); assertEquals(0, genesisBlock.getHeight());
assertEquals(ledgerHash0, genesisBlock.getHash()); assertEquals(ledgerHash0, genesisBlock.getHash());


UserAccountSet userset0 = ledger0.getUserAccountSet(genesisBlock);
UserAccountQuery userset0 = ledger0.getUserAccountSet(genesisBlock);


PubKey pubKey0 = KeyGenUtils.decodePubKey(PUB_KEYS[0]); PubKey pubKey0 = KeyGenUtils.decodePubKey(PUB_KEYS[0]);
Bytes address0 = AddressEncoding.generateAddress(pubKey0); Bytes address0 = AddressEncoding.generateAddress(pubKey0);


+ 2
- 2
source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/ledger/LedgerBlockGeneratingTest.java View File

@@ -27,7 +27,7 @@ import com.jd.blockchain.ledger.LedgerInitProperties;
import com.jd.blockchain.ledger.TransactionRequest; import com.jd.blockchain.ledger.TransactionRequest;
import com.jd.blockchain.ledger.TransactionRequestBuilder; import com.jd.blockchain.ledger.TransactionRequestBuilder;
import com.jd.blockchain.ledger.core.DefaultOperationHandleRegisteration; import com.jd.blockchain.ledger.core.DefaultOperationHandleRegisteration;
import com.jd.blockchain.ledger.core.LedgerDataset;
import com.jd.blockchain.ledger.core.LedgerDataQuery;
import com.jd.blockchain.ledger.core.LedgerEditor; import com.jd.blockchain.ledger.core.LedgerEditor;
import com.jd.blockchain.ledger.core.LedgerManager; import com.jd.blockchain.ledger.core.LedgerManager;
import com.jd.blockchain.ledger.core.LedgerRepository; import com.jd.blockchain.ledger.core.LedgerRepository;
@@ -77,7 +77,7 @@ public class LedgerBlockGeneratingTest {
LedgerBlock latestBlock = ledger.getLatestBlock(); LedgerBlock latestBlock = ledger.getLatestBlock();
assertEquals(height + i, latestBlock.getHeight()); assertEquals(height + i, latestBlock.getHeight());


LedgerDataset previousDataSet = ledger.getDataSet(latestBlock);
LedgerDataQuery previousDataSet = ledger.getDataSet(latestBlock);
ConsoleUtils.info("------ 开始执行交易, 即将生成区块[%s] ------", (latestBlock.getHeight() + 1)); ConsoleUtils.info("------ 开始执行交易, 即将生成区块[%s] ------", (latestBlock.getHeight() + 1));
long startTs = System.currentTimeMillis(); long startTs = System.currentTimeMillis();




+ 2
- 3
source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/MockerNodeContext.java View File

@@ -60,13 +60,12 @@ import com.jd.blockchain.ledger.UserInfo;
import com.jd.blockchain.ledger.UserRegisterOperation; import com.jd.blockchain.ledger.UserRegisterOperation;
import com.jd.blockchain.ledger.core.CryptoConfig; import com.jd.blockchain.ledger.core.CryptoConfig;
import com.jd.blockchain.ledger.core.DefaultOperationHandleRegisteration; import com.jd.blockchain.ledger.core.DefaultOperationHandleRegisteration;
import com.jd.blockchain.ledger.core.LedgerDataset;
import com.jd.blockchain.ledger.core.LedgerDataQuery;
import com.jd.blockchain.ledger.core.LedgerEditor; import com.jd.blockchain.ledger.core.LedgerEditor;
import com.jd.blockchain.ledger.core.LedgerManager; import com.jd.blockchain.ledger.core.LedgerManager;
import com.jd.blockchain.ledger.core.LedgerQueryService; import com.jd.blockchain.ledger.core.LedgerQueryService;
import com.jd.blockchain.ledger.core.LedgerRepository; import com.jd.blockchain.ledger.core.LedgerRepository;
import com.jd.blockchain.ledger.core.LedgerSecurityManager; import com.jd.blockchain.ledger.core.LedgerSecurityManager;
import com.jd.blockchain.ledger.core.OperationHandleRegisteration;
import com.jd.blockchain.ledger.core.SecurityPolicy; import com.jd.blockchain.ledger.core.SecurityPolicy;
import com.jd.blockchain.ledger.core.TransactionBatchProcessor; import com.jd.blockchain.ledger.core.TransactionBatchProcessor;
import com.jd.blockchain.mocker.config.MockerConstant; import com.jd.blockchain.mocker.config.MockerConstant;
@@ -465,7 +464,7 @@ public class MockerNodeContext implements BlockchainQueryService {
public OperationResult[] txProcess(TransactionRequest txRequest) { public OperationResult[] txProcess(TransactionRequest txRequest) {
LedgerEditor newEditor = ledgerRepository.createNextBlock(); LedgerEditor newEditor = ledgerRepository.createNextBlock();
LedgerBlock latestBlock = ledgerRepository.getLatestBlock(); LedgerBlock latestBlock = ledgerRepository.getLatestBlock();
LedgerDataset previousDataSet = ledgerRepository.getDataSet(latestBlock);
LedgerDataQuery previousDataSet = ledgerRepository.getDataSet(latestBlock);
TransactionBatchProcessor txProc = new TransactionBatchProcessor(getSecurityManager(), newEditor, TransactionBatchProcessor txProc = new TransactionBatchProcessor(getSecurityManager(), newEditor,
previousDataSet, opHandler, ledgerManager); previousDataSet, opHandler, ledgerManager);
TransactionResponse txResp = txProc.schedule(txRequest); TransactionResponse txResp = txProc.schedule(txRequest);


+ 9
- 2
source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java View File

@@ -9,7 +9,14 @@ import com.jd.blockchain.contract.ContractException;
import com.jd.blockchain.contract.EventProcessingAware; import com.jd.blockchain.contract.EventProcessingAware;
import com.jd.blockchain.contract.LedgerContext; import com.jd.blockchain.contract.LedgerContext;
import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.*;
import com.jd.blockchain.ledger.BlockchainIdentity;
import com.jd.blockchain.ledger.BytesValue;
import com.jd.blockchain.ledger.BytesValueEncoding;
import com.jd.blockchain.ledger.BytesValueList;
import com.jd.blockchain.ledger.ContractEventSendOperation;
import com.jd.blockchain.ledger.Operation;
import com.jd.blockchain.ledger.TransactionRequest;
import com.jd.blockchain.ledger.core.LedgerDataQuery;
import com.jd.blockchain.ledger.core.LedgerDataset; import com.jd.blockchain.ledger.core.LedgerDataset;
import com.jd.blockchain.ledger.core.LedgerManager; import com.jd.blockchain.ledger.core.LedgerManager;
import com.jd.blockchain.ledger.core.LedgerQueryService; import com.jd.blockchain.ledger.core.LedgerQueryService;
@@ -30,7 +37,7 @@ public class MockerContractExeHandle implements OperationHandle {


@Override @Override
public BytesValue process(Operation op, LedgerDataset dataset, TransactionRequestExtension request, public BytesValue process(Operation op, LedgerDataset dataset, TransactionRequestExtension request,
LedgerDataset previousBlockDataset, OperationHandleContext opHandleContext, LedgerService ledgerService) {
LedgerDataQuery previousBlockDataset, OperationHandleContext opHandleContext, LedgerService ledgerService) {
ContractEventSendOperation contractOP = (ContractEventSendOperation) op; ContractEventSendOperation contractOP = (ContractEventSendOperation) op;


HashDigest txHash = request.getTransactionContent().getHash(); HashDigest txHash = request.getTransactionContent().getHash();


Loading…
Cancel
Save