| @@ -12,6 +12,7 @@ import com.jd.blockchain.ledger.AccountHeader; | |||
| import com.jd.blockchain.ledger.BytesValue; | |||
| import com.jd.blockchain.ledger.CryptoSetting; | |||
| 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.VersioningKVStorage; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| @@ -8,6 +8,7 @@ import com.jd.blockchain.ledger.BlockchainIdentity; | |||
| import com.jd.blockchain.ledger.BlockchainIdentityData; | |||
| import com.jd.blockchain.ledger.BytesValue; | |||
| 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.VersioningKVStorage; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| @@ -5,6 +5,7 @@ import com.jd.blockchain.crypto.PubKey; | |||
| import com.jd.blockchain.ledger.BytesData; | |||
| import com.jd.blockchain.ledger.BytesValue; | |||
| import com.jd.blockchain.ledger.ContractInfo; | |||
| import com.jd.blockchain.ledger.MerkleProof; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| public class ContractAccount implements ContractInfo { | |||
| @@ -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); | |||
| } | |||
| @@ -5,12 +5,13 @@ import com.jd.blockchain.crypto.PubKey; | |||
| import com.jd.blockchain.ledger.AccountHeader; | |||
| import com.jd.blockchain.ledger.CryptoSetting; | |||
| 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.VersioningKVStorage; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| import com.jd.blockchain.utils.Transactional; | |||
| public class ContractAccountSet implements MerkleProvable, Transactional { | |||
| public class ContractAccountSet implements MerkleProvable, Transactional, ContractAccountQuery { | |||
| private AccountSet accountSet; | |||
| @@ -25,6 +26,7 @@ public class ContractAccountSet implements MerkleProvable, Transactional { | |||
| accountSet = new AccountSet(dataRootHash, cryptoSetting, prefix, exStorage, verStorage, readonly, accessPolicy); | |||
| } | |||
| @Override | |||
| public AccountHeader[] getAccounts(int fromIndex, int count) { | |||
| return accountSet.getAccounts(fromIndex,count); | |||
| } | |||
| @@ -47,6 +49,7 @@ public class ContractAccountSet implements MerkleProvable, Transactional { | |||
| * | |||
| * @return | |||
| */ | |||
| @Override | |||
| public long getTotalCount() { | |||
| return accountSet.getTotalCount(); | |||
| } | |||
| @@ -56,15 +59,18 @@ public class ContractAccountSet implements MerkleProvable, Transactional { | |||
| return accountSet.getProof(address); | |||
| } | |||
| @Override | |||
| public boolean contains(Bytes address) { | |||
| return accountSet.contains(address); | |||
| } | |||
| @Override | |||
| public ContractAccount getContract(Bytes address) { | |||
| BaseAccount accBase = accountSet.getAccount(address); | |||
| return new ContractAccount(accBase); | |||
| } | |||
| @Override | |||
| public ContractAccount getContract(Bytes address, long version) { | |||
| BaseAccount accBase = accountSet.getAccount(address, version); | |||
| return new ContractAccount(accBase); | |||
| @@ -8,6 +8,7 @@ import com.jd.blockchain.ledger.BytesData; | |||
| import com.jd.blockchain.ledger.BytesValue; | |||
| import com.jd.blockchain.ledger.KVDataEntry; | |||
| import com.jd.blockchain.ledger.KVDataObject; | |||
| import com.jd.blockchain.ledger.MerkleProof; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| public class DataAccount implements AccountHeader, MerkleProvable { | |||
| @@ -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); | |||
| } | |||
| @@ -5,12 +5,13 @@ import com.jd.blockchain.crypto.PubKey; | |||
| import com.jd.blockchain.ledger.AccountHeader; | |||
| import com.jd.blockchain.ledger.CryptoSetting; | |||
| 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.VersioningKVStorage; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| import com.jd.blockchain.utils.Transactional; | |||
| public class DataAccountSet implements MerkleProvable, Transactional { | |||
| public class DataAccountSet implements MerkleProvable, Transactional, DataAccountQuery { | |||
| private AccountSet accountSet; | |||
| @@ -25,6 +26,7 @@ public class DataAccountSet implements MerkleProvable, Transactional { | |||
| accountSet = new AccountSet(dataRootHash, cryptoSetting, prefix, exStorage, verStorage, readonly, accessPolicy); | |||
| } | |||
| @Override | |||
| public AccountHeader[] getAccounts(int fromIndex, int count) { | |||
| return accountSet.getAccounts(fromIndex, count); | |||
| } | |||
| @@ -42,6 +44,7 @@ public class DataAccountSet implements MerkleProvable, Transactional { | |||
| return accountSet.getRootHash(); | |||
| } | |||
| @Override | |||
| public long getTotalCount() { | |||
| return accountSet.getTotalCount(); | |||
| } | |||
| @@ -67,6 +70,7 @@ public class DataAccountSet implements MerkleProvable, Transactional { | |||
| * @param address | |||
| * @return | |||
| */ | |||
| @Override | |||
| public DataAccount getDataAccount(Bytes address) { | |||
| BaseAccount accBase = accountSet.getAccount(address); | |||
| if (accBase == null) { | |||
| @@ -75,6 +79,7 @@ public class DataAccountSet implements MerkleProvable, Transactional { | |||
| return new DataAccount(accBase); | |||
| } | |||
| @Override | |||
| public DataAccount getDataAccount(Bytes address, long version) { | |||
| BaseAccount accBase = accountSet.getAccount(address, version); | |||
| return new DataAccount(accBase); | |||
| @@ -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(); | |||
| } | |||
| @@ -23,7 +23,7 @@ import com.jd.blockchain.storage.service.VersioningKVStorage; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| import com.jd.blockchain.utils.Transactional; | |||
| public class LedgerAdminDataset implements Transactional, LedgerAdminInfo { | |||
| public class LedgerAdminDataset implements Transactional, LedgerAdminDataQuery, LedgerAdminInfo { | |||
| static { | |||
| DataContractRegistry.register(LedgerMetadata.class); | |||
| @@ -108,6 +108,11 @@ public class LedgerAdminDataset implements Transactional, LedgerAdminInfo { | |||
| public UserRolesSettings getUserRoles() { | |||
| return userRoles; | |||
| } | |||
| @Override | |||
| public LedgerAdminInfo getAdminInfo() { | |||
| return this; | |||
| } | |||
| /** | |||
| * 初始化账本的管理账户; | |||
| @@ -290,7 +295,8 @@ public class LedgerAdminDataset implements Transactional, LedgerAdminInfo { | |||
| return participants.getParticipants(); | |||
| } | |||
| ParticipantDataset getParticipantDataset() { | |||
| @Override | |||
| public ParticipantDataset getParticipantDataset() { | |||
| return participants; | |||
| } | |||
| @@ -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(); | |||
| } | |||
| @@ -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(); | |||
| } | |||
| } | |||
| @@ -1,21 +1,97 @@ | |||
| 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(); | |||
| } | |||
| } | |||
| @@ -62,7 +62,8 @@ public class LedgerInitializer { | |||
| } | |||
| private static SecurityInitSettings createDefaultSecurityInitSettings() { | |||
| throw new IllegalStateException("Not implemented!"); | |||
| // TODO throw new IllegalStateException("Not implemented!"); | |||
| return null; | |||
| } | |||
| public static LedgerInitializer create(LedgerInitSetting initSetting) { | |||
| @@ -107,7 +107,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| public long getDataAccountCount(HashDigest ledgerHash, long height) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getBlock(height); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| return dataAccountSet.getTotalCount(); | |||
| } | |||
| @@ -115,7 +115,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| public long getDataAccountCount(HashDigest ledgerHash, HashDigest blockHash) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getBlock(blockHash); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| return dataAccountSet.getTotalCount(); | |||
| } | |||
| @@ -123,7 +123,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| public long getDataAccountTotalCount(HashDigest ledgerHash) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| return dataAccountSet.getTotalCount(); | |||
| } | |||
| @@ -131,7 +131,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| public long getUserCount(HashDigest ledgerHash, long height) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getBlock(height); | |||
| UserAccountSet userAccountSet = ledger.getUserAccountSet(block); | |||
| UserAccountQuery userAccountSet = ledger.getUserAccountSet(block); | |||
| return userAccountSet.getTotalCount(); | |||
| } | |||
| @@ -139,7 +139,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| public long getUserCount(HashDigest ledgerHash, HashDigest blockHash) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getBlock(blockHash); | |||
| UserAccountSet userAccountSet = ledger.getUserAccountSet(block); | |||
| UserAccountQuery userAccountSet = ledger.getUserAccountSet(block); | |||
| return userAccountSet.getTotalCount(); | |||
| } | |||
| @@ -147,7 +147,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| public long getUserTotalCount(HashDigest ledgerHash) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| UserAccountSet userAccountSet = ledger.getUserAccountSet(block); | |||
| UserAccountQuery userAccountSet = ledger.getUserAccountSet(block); | |||
| return userAccountSet.getTotalCount(); | |||
| } | |||
| @@ -155,7 +155,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| public long getContractCount(HashDigest ledgerHash, long height) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getBlock(height); | |||
| ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block); | |||
| ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block); | |||
| return contractAccountSet.getTotalCount(); | |||
| } | |||
| @@ -163,7 +163,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| public long getContractCount(HashDigest ledgerHash, HashDigest blockHash) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getBlock(blockHash); | |||
| ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block); | |||
| ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block); | |||
| return contractAccountSet.getTotalCount(); | |||
| } | |||
| @@ -171,7 +171,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| public long getContractTotalCount(HashDigest ledgerHash) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block); | |||
| ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block); | |||
| return contractAccountSet.getTotalCount(); | |||
| } | |||
| @@ -254,7 +254,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| public UserInfo getUser(HashDigest ledgerHash, String address) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| UserAccountSet userAccountSet = ledger.getUserAccountSet(block); | |||
| UserAccountQuery userAccountSet = ledger.getUserAccountSet(block); | |||
| return userAccountSet.getUser(address); | |||
| } | |||
| @@ -263,7 +263,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| public AccountHeader getDataAccount(HashDigest ledgerHash, String address) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| return dataAccountSet.getDataAccount(Bytes.fromBase58(address)); | |||
| } | |||
| @@ -274,7 +274,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| } | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); | |||
| KVDataEntry[] entries = new KVDataEntry[keys.length]; | |||
| @@ -322,7 +322,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); | |||
| KVDataEntry[] entries = new KVDataEntry[keys.length]; | |||
| @@ -353,7 +353,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); | |||
| int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) dataAccount.getDataEntriesTotalCount()); | |||
| @@ -365,7 +365,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); | |||
| return dataAccount.getDataEntriesTotalCount(); | |||
| @@ -375,7 +375,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| public ContractInfo getContract(HashDigest ledgerHash, String address) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block); | |||
| ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block); | |||
| return contractAccountSet.getContract(Bytes.fromBase58(address)); | |||
| } | |||
| @@ -383,7 +383,7 @@ public class LedgerQueryService implements BlockchainQueryService { | |||
| public AccountHeader[] getUsers(HashDigest ledgerHash, int fromIndex, int count) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| UserAccountSet userAccountSet = ledger.getUserAccountSet(block); | |||
| UserAccountQuery userAccountSet = ledger.getUserAccountSet(block); | |||
| int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) userAccountSet.getTotalCount()); | |||
| 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) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) dataAccountSet.getTotalCount()); | |||
| 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) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block); | |||
| ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block); | |||
| int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) contractAccountSet.getTotalCount()); | |||
| return contractAccountSet.getAccounts(pages[0], pages[1]); | |||
| } | |||
| @@ -58,17 +58,17 @@ public interface LedgerRepository extends Closeable { | |||
| LedgerBlock getBlock(HashDigest hash); | |||
| LedgerDataset getDataSet(LedgerBlock block); | |||
| LedgerDataQuery getDataSet(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()); | |||
| } | |||
| @@ -76,15 +76,15 @@ public interface LedgerRepository extends Closeable { | |||
| return getTransactionSet(getLatestBlock()); | |||
| } | |||
| default UserAccountSet getUserAccountSet() { | |||
| default UserAccountQuery getUserAccountSet() { | |||
| return getUserAccountSet(getLatestBlock()); | |||
| } | |||
| default DataAccountSet getDataAccountSet() { | |||
| default DataAccountQuery getDataAccountSet() { | |||
| return getDataAccountSet(getLatestBlock()); | |||
| } | |||
| default ContractAccountSet getContractAccountSet() { | |||
| default ContractAccountQuery getContractAccountSet() { | |||
| return getContractAccountSet(getLatestBlock()); | |||
| } | |||
| @@ -313,7 +313,7 @@ class LedgerRepositoryImpl implements LedgerRepository { | |||
| } | |||
| @Override | |||
| public UserAccountSet getUserAccountSet(LedgerBlock block) { | |||
| public UserAccountQuery getUserAccountSet(LedgerBlock block) { | |||
| long height = getLatestBlockHeight(); | |||
| // UserAccountSet userAccountSet = null; | |||
| if (height == block.getHeight()) { | |||
| @@ -341,7 +341,7 @@ class LedgerRepositoryImpl implements LedgerRepository { | |||
| } | |||
| @Override | |||
| public DataAccountSet getDataAccountSet(LedgerBlock block) { | |||
| public DataAccountQuery getDataAccountSet(LedgerBlock block) { | |||
| long height = getLatestBlockHeight(); | |||
| // DataAccountSet dataAccountSet = null; | |||
| if (height == block.getHeight()) { | |||
| @@ -370,7 +370,7 @@ class LedgerRepositoryImpl implements LedgerRepository { | |||
| } | |||
| @Override | |||
| public ContractAccountSet getContractAccountSet(LedgerBlock block) { | |||
| public ContractAccountQuery getContractAccountSet(LedgerBlock block) { | |||
| long height = getLatestBlockHeight(); | |||
| // ContractAccountSet contractAccountSet = null; | |||
| if (height == block.getHeight()) { | |||
| @@ -426,7 +426,7 @@ class LedgerRepositoryImpl implements LedgerRepository { | |||
| UserAccountSet userAccountSet = createUserAccountSet(block, cryptoSetting); | |||
| DataAccountSet dataAccountSet = createDataAccountSet(block, cryptoSetting); | |||
| ContractAccountSet contractAccountSet = createContractAccountSet(block, cryptoSetting); | |||
| return new LedgerDataSetImpl(adminDataset, userAccountSet, dataAccountSet, contractAccountSet, true); | |||
| return new LedgerDataset(adminDataset, userAccountSet, dataAccountSet, contractAccountSet, true); | |||
| } | |||
| @Override | |||
| @@ -475,7 +475,7 @@ class LedgerRepositoryImpl implements LedgerRepository { | |||
| return BLOCK_PREFIX.concat(blockHash); | |||
| } | |||
| static LedgerDataSetImpl newDataSet(LedgerInitSetting initSetting, String keyPrefix, | |||
| static LedgerDataset newDataSet(LedgerInitSetting initSetting, String keyPrefix, | |||
| ExPolicyKVStorage ledgerExStorage, VersioningKVStorage ledgerVerStorage) { | |||
| LedgerAdminDataset adminAccount = new LedgerAdminDataset(initSetting, keyPrefix, ledgerExStorage, | |||
| ledgerVerStorage); | |||
| @@ -509,7 +509,7 @@ class LedgerRepositoryImpl implements LedgerRepository { | |||
| ContractAccountSet contractAccountSet = new ContractAccountSet(adminAccount.getSettings().getCryptoSetting(), | |||
| contractsetKeyPrefix, ledgerExStorage, ledgerVerStorage, DEFAULT_ACCESS_POLICY); | |||
| LedgerDataSetImpl newDataSet = new LedgerDataSetImpl(adminAccount, userAccountSet, dataAccountSet, | |||
| LedgerDataset newDataSet = new LedgerDataset(adminAccount, userAccountSet, dataAccountSet, | |||
| contractAccountSet, false); | |||
| return newDataSet; | |||
| @@ -529,7 +529,7 @@ class LedgerRepositoryImpl implements LedgerRepository { | |||
| 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) { | |||
| LedgerAdminDataset adminAccount = new LedgerAdminDataset(dataSnapshot.getAdminAccountHash(), keyPrefix, | |||
| ledgerExStorage, ledgerVerStorage, readonly); | |||
| @@ -545,7 +545,7 @@ class LedgerRepositoryImpl implements LedgerRepository { | |||
| ContractAccountSet contractAccountSet = loadContractAccountSet(dataSnapshot.getContractAccountSetHash(), | |||
| cryptoSetting, keyPrefix, ledgerExStorage, ledgerVerStorage, readonly); | |||
| LedgerDataSetImpl dataset = new LedgerDataSetImpl(adminAccount, userAccountSet, dataAccountSet, | |||
| LedgerDataset dataset = new LedgerDataset(adminAccount, userAccountSet, dataAccountSet, | |||
| contractAccountSet, readonly); | |||
| return dataset; | |||
| @@ -695,15 +695,15 @@ class LedgerRepositoryImpl implements LedgerRepository { | |||
| return ledgerDataset; | |||
| } | |||
| public ContractAccountSet getContractAccountSet() { | |||
| public ContractAccountQuery getContractAccountSet() { | |||
| return ledgerDataset.getContractAccountset(); | |||
| } | |||
| public DataAccountSet getDataAccountSet() { | |||
| public DataAccountQuery getDataAccountSet() { | |||
| return ledgerDataset.getDataAccountSet(); | |||
| } | |||
| public UserAccountSet getUserAccountSet() { | |||
| public UserAccountQuery getUserAccountSet() { | |||
| return ledgerDataset.getUserAccountSet(); | |||
| } | |||
| @@ -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; | |||
| BufferedKVStorage txBufferedStorage = new BufferedKVStorage(baseStorage, baseStorage, false); | |||
| LedgerDataSetImpl txDataset = null; | |||
| LedgerDataset txDataset = null; | |||
| TransactionSet txset = null; | |||
| if (previousTxSnapshot == null) { | |||
| // load the starting point of the new transaction; | |||
| @@ -470,7 +470,7 @@ public class LedgerTransactionalEditor implements LedgerEditor { | |||
| private TransactionRequest txRequest; | |||
| private LedgerDataSetImpl dataset; | |||
| private LedgerDataset dataset; | |||
| private TransactionSet txset; | |||
| @@ -484,7 +484,7 @@ public class LedgerTransactionalEditor implements LedgerEditor { | |||
| private HashDigest txRootHash; | |||
| private LedgerTransactionContextImpl(TransactionRequest txRequest, LedgerDataSetImpl dataset, | |||
| private LedgerTransactionContextImpl(TransactionRequest txRequest, LedgerDataset dataset, | |||
| TransactionSet txset, BufferedKVStorage storage, LedgerTransactionalEditor editor) { | |||
| this.txRequest = txRequest; | |||
| this.dataset = dataset; | |||
| @@ -494,7 +494,7 @@ public class LedgerTransactionalEditor implements LedgerEditor { | |||
| } | |||
| @Override | |||
| public LedgerDataSetImpl getDataset() { | |||
| public LedgerDataset getDataset() { | |||
| return dataset; | |||
| } | |||
| @@ -1,5 +1,6 @@ | |||
| package com.jd.blockchain.ledger.core; | |||
| import com.jd.blockchain.ledger.MerkleProof; | |||
| import com.jd.blockchain.storage.service.VersioningKVEntry; | |||
| public interface MerkleDataEntry { | |||
| @@ -3,6 +3,8 @@ package com.jd.blockchain.ledger.core; | |||
| import com.jd.blockchain.crypto.HashDigest; | |||
| import com.jd.blockchain.ledger.CryptoSetting; | |||
| 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.ExPolicy; | |||
| import com.jd.blockchain.storage.service.VersioningKVEntry; | |||
| @@ -1,6 +1,7 @@ | |||
| package com.jd.blockchain.ledger.core; | |||
| import com.jd.blockchain.crypto.HashDigest; | |||
| import com.jd.blockchain.ledger.MerkleProof; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| public interface MerkleProvable { | |||
| @@ -20,6 +20,9 @@ import com.jd.blockchain.crypto.HashDigest; | |||
| import com.jd.blockchain.crypto.HashFunction; | |||
| import com.jd.blockchain.ledger.CryptoSetting; | |||
| 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.ExPolicy; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| @@ -27,6 +27,6 @@ public interface OperationHandle { | |||
| * @return | |||
| */ | |||
| BytesValue process(Operation op, LedgerDataset newBlockDataset, TransactionRequestExtension requestContext, | |||
| LedgerDataset previousBlockDataset, OperationHandleContext handleContext, LedgerService ledgerService); | |||
| LedgerDataQuery previousBlockDataset, OperationHandleContext handleContext, LedgerService ledgerService); | |||
| } | |||
| @@ -4,14 +4,16 @@ import com.jd.blockchain.binaryproto.BinaryProtocol; | |||
| import com.jd.blockchain.binaryproto.DataContractRegistry; | |||
| import com.jd.blockchain.crypto.HashDigest; | |||
| import com.jd.blockchain.ledger.ParticipantNode; | |||
| import com.jd.blockchain.ledger.ParticipantDataQuery; | |||
| import com.jd.blockchain.ledger.CryptoSetting; | |||
| 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.VersioningKVStorage; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| import com.jd.blockchain.utils.Transactional; | |||
| public class ParticipantDataset implements Transactional, MerkleProvable { | |||
| public class ParticipantDataset implements Transactional, MerkleProvable, ParticipantDataQuery { | |||
| static { | |||
| DataContractRegistry.register(ParticipantNode.class); | |||
| @@ -54,6 +56,7 @@ public class ParticipantDataset implements Transactional, MerkleProvable { | |||
| dataset.cancel(); | |||
| } | |||
| @Override | |||
| public long getParticipantCount() { | |||
| return dataset.getDataCount(); | |||
| } | |||
| @@ -77,6 +80,7 @@ public class ParticipantDataset implements Transactional, MerkleProvable { | |||
| return address; | |||
| } | |||
| @Override | |||
| public boolean contains(Bytes address) { | |||
| Bytes key = encodeKey(address); | |||
| long latestVersion = dataset.getVersion(key); | |||
| @@ -92,6 +96,7 @@ public class ParticipantDataset implements Transactional, MerkleProvable { | |||
| * @param address | |||
| * @return | |||
| */ | |||
| @Override | |||
| public ParticipantNode getParticipant(Bytes address) { | |||
| Bytes key = encodeKey(address); | |||
| byte[] bytes = dataset.getValue(key); | |||
| @@ -101,6 +106,7 @@ public class ParticipantDataset implements Transactional, MerkleProvable { | |||
| return BinaryProtocol.decode(bytes); | |||
| } | |||
| @Override | |||
| public ParticipantNode[] getParticipants() { | |||
| byte[][] bytes = dataset.getLatestValues(0, (int) dataset.getDataCount()); | |||
| ParticipantNode[] pns = new ParticipantNode[bytes.length]; | |||
| @@ -6,6 +6,7 @@ import com.jd.blockchain.ledger.CryptoSetting; | |||
| import com.jd.blockchain.ledger.LedgerException; | |||
| import com.jd.blockchain.ledger.LedgerPermission; | |||
| import com.jd.blockchain.ledger.LedgerPrivilege; | |||
| import com.jd.blockchain.ledger.MerkleProof; | |||
| import com.jd.blockchain.ledger.PrivilegeSet; | |||
| import com.jd.blockchain.ledger.Privileges; | |||
| import com.jd.blockchain.ledger.RolePrivilegeSettings; | |||
| @@ -46,7 +46,7 @@ public class TransactionBatchProcessor implements TransactionBatchProcess { | |||
| private LedgerEditor newBlockEditor; | |||
| private LedgerDataset previousBlockDataset; | |||
| private LedgerDataQuery previousBlockDataset; | |||
| private OperationHandleRegisteration opHandles; | |||
| @@ -65,7 +65,7 @@ public class TransactionBatchProcessor implements TransactionBatchProcess { | |||
| * @param opHandles 操作处理对象注册表; | |||
| */ | |||
| public TransactionBatchProcessor(LedgerSecurityManager securityManager, LedgerEditor newBlockEditor, | |||
| LedgerDataset previousBlockDataset, OperationHandleRegisteration opHandles, LedgerService ledgerService) { | |||
| LedgerDataQuery previousBlockDataset, OperationHandleRegisteration opHandles, LedgerService ledgerService) { | |||
| this.securityManager = securityManager; | |||
| this.newBlockEditor = newBlockEditor; | |||
| this.previousBlockDataset = previousBlockDataset; | |||
| @@ -3,10 +3,10 @@ package com.jd.blockchain.ledger.core; | |||
| import java.util.Map; | |||
| 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 com.jd.blockchain.crypto.HashDigest; | |||
| import com.jd.blockchain.ledger.LedgerBlock; | |||
| import com.jd.blockchain.service.TransactionBatchProcess; | |||
| import com.jd.blockchain.service.TransactionEngine; | |||
| @@ -40,11 +40,11 @@ public class TransactionEngineImpl implements TransactionEngine { | |||
| LedgerBlock ledgerBlock = ledgerRepo.getLatestBlock(); | |||
| 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, | |||
| opHdlRegs, ledgerService, ledgerBlock.getHeight()); | |||
| batchs.put(ledgerHash, batch); | |||
| @@ -75,7 +75,7 @@ public class TransactionEngineImpl implements TransactionEngine { | |||
| * @param opHandles 操作处理对象注册表; | |||
| */ | |||
| public InnerTransactionBatchProcessor(HashDigest ledgerHash, LedgerSecurityManager securityManager, | |||
| LedgerEditor newBlockEditor, LedgerDataset previousBlockDataset, OperationHandleRegisteration opHandles, | |||
| LedgerEditor newBlockEditor, LedgerDataQuery previousBlockDataset, OperationHandleRegisteration opHandles, | |||
| LedgerService ledgerService, long blockHeight) { | |||
| super(securityManager, newBlockEditor, previousBlockDataset, opHandles, ledgerService); | |||
| this.ledgerHash = ledgerHash; | |||
| @@ -6,6 +6,7 @@ import com.jd.blockchain.crypto.HashDigest; | |||
| import com.jd.blockchain.ledger.CryptoSetting; | |||
| import com.jd.blockchain.ledger.LedgerException; | |||
| import com.jd.blockchain.ledger.LedgerTransaction; | |||
| import com.jd.blockchain.ledger.MerkleProof; | |||
| import com.jd.blockchain.ledger.TransactionState; | |||
| import com.jd.blockchain.storage.service.ExPolicyKVStorage; | |||
| import com.jd.blockchain.storage.service.VersioningKVStorage; | |||
| @@ -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); | |||
| } | |||
| @@ -5,6 +5,7 @@ import com.jd.blockchain.crypto.PubKey; | |||
| import com.jd.blockchain.ledger.AccountHeader; | |||
| import com.jd.blockchain.ledger.CryptoSetting; | |||
| 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.VersioningKVStorage; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| @@ -14,7 +15,7 @@ import com.jd.blockchain.utils.Transactional; | |||
| * @author huanghaiquan | |||
| * | |||
| */ | |||
| public class UserAccountSet implements Transactional, MerkleProvable { | |||
| public class UserAccountSet implements Transactional, MerkleProvable, UserAccountQuery { | |||
| private AccountSet accountSet; | |||
| @@ -30,6 +31,7 @@ public class UserAccountSet implements Transactional, MerkleProvable { | |||
| accessPolicy); | |||
| } | |||
| @Override | |||
| public AccountHeader[] getAccounts(int fromIndex, int count) { | |||
| return accountSet.getAccounts(fromIndex,count); | |||
| } | |||
| @@ -39,6 +41,7 @@ public class UserAccountSet implements Transactional, MerkleProvable { | |||
| * | |||
| * @return | |||
| */ | |||
| @Override | |||
| public long getTotalCount() { | |||
| return accountSet.getTotalCount(); | |||
| } | |||
| @@ -61,19 +64,23 @@ public class UserAccountSet implements Transactional, MerkleProvable { | |||
| return accountSet.getProof(key); | |||
| } | |||
| @Override | |||
| public UserAccount getUser(String address) { | |||
| return getUser(Bytes.fromBase58(address)); | |||
| } | |||
| @Override | |||
| public UserAccount getUser(Bytes address) { | |||
| BaseAccount baseAccount = accountSet.getAccount(address); | |||
| return new UserAccount(baseAccount); | |||
| } | |||
| @Override | |||
| public boolean contains(Bytes address) { | |||
| return accountSet.contains(address); | |||
| } | |||
| @Override | |||
| public UserAccount getUser(Bytes address, long version) { | |||
| BaseAccount baseAccount = accountSet.getAccount(address, version); | |||
| return new UserAccount(baseAccount); | |||
| @@ -7,6 +7,7 @@ import com.jd.blockchain.crypto.HashDigest; | |||
| import com.jd.blockchain.ledger.AuthorizationException; | |||
| import com.jd.blockchain.ledger.CryptoSetting; | |||
| import com.jd.blockchain.ledger.LedgerException; | |||
| import com.jd.blockchain.ledger.MerkleProof; | |||
| import com.jd.blockchain.ledger.RoleSet; | |||
| import com.jd.blockchain.ledger.RolesPolicy; | |||
| import com.jd.blockchain.ledger.UserRoles; | |||
| @@ -4,6 +4,7 @@ import com.jd.blockchain.binaryproto.DataContractRegistry; | |||
| import com.jd.blockchain.ledger.BytesValue; | |||
| import com.jd.blockchain.ledger.Operation; | |||
| 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.LedgerService; | |||
| import com.jd.blockchain.ledger.core.MultiIdsPolicy; | |||
| @@ -44,7 +45,7 @@ public abstract class AbstractLedgerOperationHandle<T extends Operation> impleme | |||
| @Override | |||
| public final BytesValue process(Operation op, LedgerDataset newBlockDataset, | |||
| TransactionRequestExtension requestContext, LedgerDataset previousBlockDataset, | |||
| TransactionRequestExtension requestContext, LedgerDataQuery previousBlockDataset, | |||
| OperationHandleContext handleContext, LedgerService ledgerService) { | |||
| // 权限校验; | |||
| SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); | |||
| @@ -68,5 +69,5 @@ public abstract class AbstractLedgerOperationHandle<T extends Operation> impleme | |||
| * @param ledgerService | |||
| */ | |||
| protected abstract void doProcess(T op, LedgerDataset newBlockDataset, TransactionRequestExtension requestContext, | |||
| LedgerDataset previousBlockDataset, OperationHandleContext handleContext, LedgerService ledgerService); | |||
| LedgerDataQuery previousBlockDataset, OperationHandleContext handleContext, LedgerService ledgerService); | |||
| } | |||
| @@ -10,7 +10,8 @@ import com.jd.blockchain.ledger.LedgerException; | |||
| import com.jd.blockchain.ledger.Operation; | |||
| import com.jd.blockchain.ledger.TransactionPermission; | |||
| 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.LedgerQueryService; | |||
| import com.jd.blockchain.ledger.core.LedgerService; | |||
| @@ -31,7 +32,7 @@ public abstract class AbtractContractEventSendOperationHandle implements Operati | |||
| @Override | |||
| 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.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, | |||
| LedgerDataset newBlockDataset, LedgerDataset previousBlockDataset, OperationHandleContext opHandleContext, | |||
| LedgerDataset newBlockDataset, LedgerDataQuery previousBlockDataset, OperationHandleContext opHandleContext, | |||
| LedgerService ledgerService) { | |||
| // 先从账本校验合约的有效性; | |||
| // 注意:必须在前一个区块的数据集中进行校验,因为那是经过共识的数据;从当前新区块链数据集校验则会带来攻击风险:未经共识的合约得到执行; | |||
| ContractAccountSet contractSet = previousBlockDataset.getContractAccountset(); | |||
| ContractAccountQuery contractSet = previousBlockDataset.getContractAccountset(); | |||
| if (!contractSet.contains(contractOP.getContractAddress())) { | |||
| throw new LedgerException(String.format("Contract was not registered! --[ContractAddress=%s]", | |||
| contractOP.getContractAddress())); | |||
| @@ -2,6 +2,7 @@ package com.jd.blockchain.ledger.core.handles; | |||
| import com.jd.blockchain.ledger.ContractCodeDeployOperation; | |||
| 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.LedgerService; | |||
| import com.jd.blockchain.ledger.core.MultiIdsPolicy; | |||
| @@ -17,7 +18,7 @@ public class ContractCodeDeployOperationHandle extends AbstractLedgerOperationHa | |||
| @Override | |||
| protected void doProcess(ContractCodeDeployOperation op, LedgerDataset newBlockDataset, | |||
| TransactionRequestExtension requestContext, LedgerDataset previousBlockDataset, | |||
| TransactionRequestExtension requestContext, LedgerDataQuery previousBlockDataset, | |||
| OperationHandleContext handleContext, LedgerService ledgerService) { | |||
| // TODO: 校验合约代码的正确性; | |||
| @@ -2,10 +2,11 @@ package com.jd.blockchain.ledger.core.handles; | |||
| import com.jd.blockchain.ledger.DataAccountDoesNotExistException; | |||
| import com.jd.blockchain.ledger.DataAccountKVSetOperation; | |||
| import com.jd.blockchain.ledger.DataVersionConflictException; | |||
| import com.jd.blockchain.ledger.DataAccountKVSetOperation.KVWriteEntry; | |||
| import com.jd.blockchain.ledger.DataVersionConflictException; | |||
| import com.jd.blockchain.ledger.LedgerPermission; | |||
| 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.LedgerService; | |||
| import com.jd.blockchain.ledger.core.MultiIdsPolicy; | |||
| @@ -22,7 +23,7 @@ public class DataAccountKVSetOperationHandle extends AbstractLedgerOperationHand | |||
| @Override | |||
| protected void doProcess(DataAccountKVSetOperation kvWriteOp, LedgerDataset newBlockDataset, | |||
| TransactionRequestExtension requestContext, LedgerDataset previousBlockDataset, | |||
| TransactionRequestExtension requestContext, LedgerDataQuery previousBlockDataset, | |||
| OperationHandleContext handleContext, LedgerService ledgerService) { | |||
| // 权限校验; | |||
| SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); | |||
| @@ -3,6 +3,7 @@ package com.jd.blockchain.ledger.core.handles; | |||
| import com.jd.blockchain.ledger.BlockchainIdentity; | |||
| import com.jd.blockchain.ledger.DataAccountRegisterOperation; | |||
| 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.LedgerService; | |||
| import com.jd.blockchain.ledger.core.MultiIdsPolicy; | |||
| @@ -18,7 +19,7 @@ public class DataAccountRegisterOperationHandle extends AbstractLedgerOperationH | |||
| @Override | |||
| protected void doProcess(DataAccountRegisterOperation op, LedgerDataset newBlockDataset, | |||
| TransactionRequestExtension requestContext, LedgerDataset previousBlockDataset, | |||
| TransactionRequestExtension requestContext, LedgerDataQuery previousBlockDataset, | |||
| OperationHandleContext handleContext, LedgerService ledgerService) { | |||
| // TODO: 请求者应该提供数据账户的公钥签名,以更好地确保注册人对该地址和公钥具有合法使用权; | |||
| @@ -5,6 +5,7 @@ import com.jd.blockchain.ledger.RolePrivilegeSettings; | |||
| import com.jd.blockchain.ledger.RolePrivileges; | |||
| import com.jd.blockchain.ledger.RolesConfigureOperation; | |||
| 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.LedgerService; | |||
| import com.jd.blockchain.ledger.core.MultiIdsPolicy; | |||
| @@ -20,7 +21,7 @@ public class RolesConfigureOperationHandle extends AbstractLedgerOperationHandle | |||
| @Override | |||
| protected void doProcess(RolesConfigureOperation operation, LedgerDataset newBlockDataset, | |||
| TransactionRequestExtension request, LedgerDataset previousBlockDataset, | |||
| TransactionRequestExtension request, LedgerDataQuery previousBlockDataset, | |||
| OperationHandleContext handleContext, LedgerService ledgerService) { | |||
| // 权限校验; | |||
| SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); | |||
| @@ -10,6 +10,7 @@ import com.jd.blockchain.ledger.UserAuthorizeOperation; | |||
| import com.jd.blockchain.ledger.UserAuthorizeOperation.UserRolesEntry; | |||
| import com.jd.blockchain.ledger.UserRoles; | |||
| 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.LedgerService; | |||
| import com.jd.blockchain.ledger.core.MultiIdsPolicy; | |||
| @@ -25,7 +26,7 @@ public class UserAuthorizeOperationHandle extends AbstractLedgerOperationHandle< | |||
| @Override | |||
| protected void doProcess(UserAuthorizeOperation operation, LedgerDataset newBlockDataset, | |||
| TransactionRequestExtension request, LedgerDataset previousBlockDataset, | |||
| TransactionRequestExtension request, LedgerDataQuery previousBlockDataset, | |||
| OperationHandleContext handleContext, LedgerService ledgerService) { | |||
| // 权限校验; | |||
| SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); | |||
| @@ -3,6 +3,7 @@ package com.jd.blockchain.ledger.core.handles; | |||
| import com.jd.blockchain.ledger.BlockchainIdentity; | |||
| import com.jd.blockchain.ledger.LedgerPermission; | |||
| 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.LedgerService; | |||
| import com.jd.blockchain.ledger.core.MultiIdsPolicy; | |||
| @@ -19,7 +20,7 @@ public class UserRegisterOperationHandle extends AbstractLedgerOperationHandle<U | |||
| @Override | |||
| protected void doProcess(UserRegisterOperation op, LedgerDataset newBlockDataset, | |||
| TransactionRequestExtension requestContext, LedgerDataset previousBlockDataset, | |||
| TransactionRequestExtension requestContext, LedgerDataQuery previousBlockDataset, | |||
| OperationHandleContext handleContext, LedgerService ledgerService) { | |||
| // 权限校验; | |||
| SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); | |||
| @@ -43,6 +43,7 @@ import com.jd.blockchain.ledger.TransactionResponse; | |||
| import com.jd.blockchain.ledger.TransactionState; | |||
| import com.jd.blockchain.ledger.UserRegisterOperation; | |||
| 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.LedgerEditor; | |||
| import com.jd.blockchain.ledger.core.LedgerManager; | |||
| @@ -112,7 +113,7 @@ public class ContractInvokingTest { | |||
| deploy(ledgerRepo, ledgerManager, opReg, ledgerHash, contractKey); | |||
| // 创建新区块的交易处理器; | |||
| LedgerBlock preBlock = ledgerRepo.getLatestBlock(); | |||
| LedgerDataset previousBlockDataset = ledgerRepo.getDataSet(preBlock); | |||
| LedgerDataQuery previousBlockDataset = ledgerRepo.getDataSet(preBlock); | |||
| // 加载合约 | |||
| LedgerEditor newBlockEditor = ledgerRepo.createNextBlock(); | |||
| @@ -190,7 +191,7 @@ public class ContractInvokingTest { | |||
| // 创建新区块的交易处理器; | |||
| LedgerBlock preBlock = ledgerRepo.getLatestBlock(); | |||
| LedgerDataset previousBlockDataset = ledgerRepo.getDataSet(preBlock); | |||
| LedgerDataQuery previousBlockDataset = ledgerRepo.getDataSet(preBlock); | |||
| // 加载合约 | |||
| LedgerEditor newBlockEditor = ledgerRepo.createNextBlock(); | |||
| @@ -339,7 +340,7 @@ public class ContractInvokingTest { | |||
| private LedgerBlock buildBlock(LedgerRepository ledgerRepo, LedgerService ledgerService, | |||
| OperationHandleRegisteration opReg, TxDefinitor txDefinitor) { | |||
| LedgerBlock preBlock = ledgerRepo.getLatestBlock(); | |||
| LedgerDataset previousBlockDataset = ledgerRepo.getDataSet(preBlock); | |||
| LedgerDataQuery previousBlockDataset = ledgerRepo.getDataSet(preBlock); | |||
| LedgerEditor newBlockEditor = ledgerRepo.createNextBlock(); | |||
| TransactionBatchProcessor txbatchProcessor = new TransactionBatchProcessor(getSecurityManager(), newBlockEditor, | |||
| previousBlockDataset, opReg, ledgerService); | |||
| @@ -372,7 +373,7 @@ public class ContractInvokingTest { | |||
| private void registerDataAccount(LedgerRepository ledgerRepo, LedgerManager ledgerManager, | |||
| DefaultOperationHandleRegisteration opReg, HashDigest ledgerHash, BlockchainKeypair kpDataAccount) { | |||
| LedgerBlock preBlock = ledgerRepo.getLatestBlock(); | |||
| LedgerDataset previousBlockDataset = ledgerRepo.getDataSet(preBlock); | |||
| LedgerDataQuery previousBlockDataset = ledgerRepo.getDataSet(preBlock); | |||
| // 加载合约 | |||
| LedgerEditor newBlockEditor = ledgerRepo.createNextBlock(); | |||
| @@ -402,7 +403,7 @@ public class ContractInvokingTest { | |||
| DefaultOperationHandleRegisteration opReg, HashDigest ledgerHash, BlockchainKeypair contractKey) { | |||
| // 创建新区块的交易处理器; | |||
| LedgerBlock preBlock = ledgerRepo.getLatestBlock(); | |||
| LedgerDataset previousBlockDataset = ledgerRepo.getDataSet(preBlock); | |||
| LedgerDataQuery previousBlockDataset = ledgerRepo.getDataSet(preBlock); | |||
| // 加载合约 | |||
| LedgerEditor newBlockEditor = ledgerRepo.createNextBlock(); | |||
| @@ -32,9 +32,9 @@ import com.jd.blockchain.ledger.TransactionRequest; | |||
| import com.jd.blockchain.ledger.TransactionRequestBuilder; | |||
| import com.jd.blockchain.ledger.TransactionState; | |||
| 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.DataAccountSet; | |||
| import com.jd.blockchain.ledger.core.DataAccountQuery; | |||
| import com.jd.blockchain.ledger.core.LedgerDataset; | |||
| import com.jd.blockchain.ledger.core.LedgerEditor; | |||
| 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.LedgerTransactionContext; | |||
| 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.transaction.ConsensusParticipantData; | |||
| import com.jd.blockchain.transaction.LedgerInitData; | |||
| @@ -170,9 +170,9 @@ public class LedgerManagerTest { | |||
| assertEquals(1, latestBlock.getHeight()); | |||
| 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); | |||
| } | |||
| @@ -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.ClassicCryptoService; | |||
| 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.MerkleDataSet; | |||
| import com.jd.blockchain.ledger.core.MerkleProof; | |||
| import com.jd.blockchain.storage.service.VersioningKVEntry; | |||
| import com.jd.blockchain.storage.service.utils.MemoryKVStorage; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| @@ -17,9 +17,9 @@ import org.mockito.Mockito; | |||
| import com.jd.blockchain.crypto.HashDigest; | |||
| import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; | |||
| 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.storage.service.utils.ExistancePolicyKVStorageMap; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| @@ -33,6 +33,7 @@ import com.jd.blockchain.ledger.TransactionState; | |||
| import com.jd.blockchain.ledger.UserRegisterOperation; | |||
| import com.jd.blockchain.ledger.core.DataAccount; | |||
| 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.LedgerEditor; | |||
| import com.jd.blockchain.ledger.core.LedgerManager; | |||
| @@ -83,7 +84,7 @@ public class TransactionBatchProcessorTest { | |||
| 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()); | |||
| assertNotNull(user0); | |||
| boolean partiRegistered = previousBlockDataset.getUserAccountSet().contains(parti0.getAddress()); | |||
| @@ -143,7 +144,7 @@ public class TransactionBatchProcessorTest { | |||
| 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()); | |||
| assertNotNull(user0); | |||
| boolean partiRegistered = previousBlockDataset.getUserAccountSet().contains(parti0.getAddress()); | |||
| @@ -182,7 +183,7 @@ public class TransactionBatchProcessorTest { | |||
| assertEquals(newBlock.getHash(), latestBlock.getHash()); | |||
| assertEquals(1, newBlock.getHeight()); | |||
| LedgerDataset ledgerDS = ledgerRepo.getDataSet(latestBlock); | |||
| LedgerDataQuery ledgerDS = ledgerRepo.getDataSet(latestBlock); | |||
| boolean existUser1 = ledgerDS.getUserAccountSet().contains(userKeypair1.getAddress()); | |||
| boolean existUser2 = ledgerDS.getUserAccountSet().contains(userKeypair2.getAddress()); | |||
| assertTrue(existUser1); | |||
| @@ -201,7 +202,7 @@ public class TransactionBatchProcessorTest { | |||
| 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()); | |||
| assertNotNull(user0); | |||
| boolean partiRegistered = previousBlockDataset.getUserAccountSet().contains(parti0.getAddress()); | |||
| @@ -260,7 +261,7 @@ public class TransactionBatchProcessorTest { | |||
| assertNotNull(tx3); | |||
| assertEquals(TransactionState.SUCCESS, tx3.getExecutionState()); | |||
| LedgerDataset ledgerDS = ledgerRepo.getDataSet(latestBlock); | |||
| LedgerDataQuery ledgerDS = ledgerRepo.getDataSet(latestBlock); | |||
| boolean existUser1 = ledgerDS.getUserAccountSet().contains(userKeypair1.getAddress()); | |||
| boolean existUser2 = ledgerDS.getUserAccountSet().contains(userKeypair2.getAddress()); | |||
| boolean existUser3 = ledgerDS.getUserAccountSet().contains(userKeypair3.getAddress()); | |||
| @@ -281,7 +282,7 @@ public class TransactionBatchProcessorTest { | |||
| 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()); | |||
| assertNotNull(user0); | |||
| boolean partiRegistered = previousBlockDataset.getUserAccountSet().contains(parti0.getAddress()); | |||
| @@ -1,4 +1,4 @@ | |||
| package com.jd.blockchain.ledger.core; | |||
| package com.jd.blockchain.ledger; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| @@ -1,4 +1,4 @@ | |||
| package com.jd.blockchain.ledger.core; | |||
| package com.jd.blockchain.ledger; | |||
| import com.jd.blockchain.crypto.HashDigest; | |||
| @@ -1,4 +1,4 @@ | |||
| package com.jd.blockchain.ledger.core; | |||
| package com.jd.blockchain.ledger; | |||
| import com.jd.blockchain.crypto.HashDigest; | |||
| @@ -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(); | |||
| } | |||
| @@ -14,14 +14,14 @@ import org.springframework.web.bind.annotation.RestController; | |||
| import com.jd.blockchain.contract.ContractException; | |||
| 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.DataAccountSet; | |||
| import com.jd.blockchain.ledger.core.DataAccountQuery; | |||
| import com.jd.blockchain.ledger.core.LedgerRepository; | |||
| import com.jd.blockchain.ledger.core.LedgerService; | |||
| import com.jd.blockchain.ledger.core.ParticipantCertData; | |||
| 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.utils.Bytes; | |||
| import com.jd.blockchain.utils.QueryUtil; | |||
| @@ -145,7 +145,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| @PathVariable(name = "blockHeight") long height) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getBlock(height); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| return dataAccountSet.getTotalCount(); | |||
| } | |||
| @@ -155,7 +155,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| @PathVariable(name = "blockHash") HashDigest blockHash) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getBlock(blockHash); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| return dataAccountSet.getTotalCount(); | |||
| } | |||
| @@ -164,7 +164,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| public long getDataAccountTotalCount(@PathVariable(name = "ledgerHash") HashDigest ledgerHash) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| return dataAccountSet.getTotalCount(); | |||
| } | |||
| @@ -174,7 +174,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| @PathVariable(name = "blockHeight") long height) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getBlock(height); | |||
| UserAccountSet userAccountSet = ledger.getUserAccountSet(block); | |||
| UserAccountQuery userAccountSet = ledger.getUserAccountSet(block); | |||
| return userAccountSet.getTotalCount(); | |||
| } | |||
| @@ -184,7 +184,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| @PathVariable(name = "blockHash") HashDigest blockHash) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getBlock(blockHash); | |||
| UserAccountSet userAccountSet = ledger.getUserAccountSet(block); | |||
| UserAccountQuery userAccountSet = ledger.getUserAccountSet(block); | |||
| return userAccountSet.getTotalCount(); | |||
| } | |||
| @@ -193,7 +193,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| public long getUserTotalCount(@PathVariable(name = "ledgerHash") HashDigest ledgerHash) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| UserAccountSet userAccountSet = ledger.getUserAccountSet(block); | |||
| UserAccountQuery userAccountSet = ledger.getUserAccountSet(block); | |||
| return userAccountSet.getTotalCount(); | |||
| } | |||
| @@ -203,7 +203,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| @PathVariable(name = "blockHeight") long height) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getBlock(height); | |||
| ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block); | |||
| ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block); | |||
| return contractAccountSet.getTotalCount(); | |||
| } | |||
| @@ -213,7 +213,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| @PathVariable(name = "blockHash") HashDigest blockHash) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getBlock(blockHash); | |||
| ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block); | |||
| ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block); | |||
| return contractAccountSet.getTotalCount(); | |||
| } | |||
| @@ -222,7 +222,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| public long getContractTotalCount(@PathVariable(name = "ledgerHash") HashDigest ledgerHash) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block); | |||
| ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block); | |||
| return contractAccountSet.getTotalCount(); | |||
| } | |||
| @@ -320,7 +320,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| @PathVariable(name = "address") String address) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| UserAccountSet userAccountSet = ledger.getUserAccountSet(block); | |||
| UserAccountQuery userAccountSet = ledger.getUserAccountSet(block); | |||
| return userAccountSet.getUser(address); | |||
| } | |||
| @@ -330,7 +330,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| @PathVariable(name = "address") String address) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| return dataAccountSet.getDataAccount(Bytes.fromBase58(address)); | |||
| } | |||
| @@ -344,7 +344,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| } | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); | |||
| KVDataEntry[] entries = new KVDataEntry[keys.length]; | |||
| @@ -393,7 +393,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); | |||
| KVDataEntry[] entries = new KVDataEntry[keys.length]; | |||
| @@ -428,7 +428,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); | |||
| int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) dataAccount.getDataEntriesTotalCount()); | |||
| @@ -442,7 +442,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccount dataAccount = dataAccountSet.getDataAccount(Bytes.fromBase58(address)); | |||
| return dataAccount.getDataEntriesTotalCount(); | |||
| @@ -454,7 +454,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| @PathVariable(name = "address") String address) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block); | |||
| ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block); | |||
| return contractAccountSet.getContract(Bytes.fromBase58(address)); | |||
| } | |||
| @@ -473,7 +473,7 @@ public class LedgerQueryController implements BlockchainQueryService { | |||
| @RequestParam(name = "count", required = false, defaultValue = "-1") int count) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| UserAccountSet userAccountSet = ledger.getUserAccountSet(block); | |||
| UserAccountQuery userAccountSet = ledger.getUserAccountSet(block); | |||
| int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) userAccountSet.getTotalCount()); | |||
| 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) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| DataAccountSet dataAccountSet = ledger.getDataAccountSet(block); | |||
| DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block); | |||
| int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) dataAccountSet.getTotalCount()); | |||
| 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) { | |||
| LedgerRepository ledger = ledgerService.getLedger(ledgerHash); | |||
| LedgerBlock block = ledger.getLatestBlock(); | |||
| ContractAccountSet contractAccountSet = ledger.getContractAccountSet(block); | |||
| ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block); | |||
| int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) contractAccountSet.getTotalCount()); | |||
| return contractAccountSet.getAccounts(pages[0], pages[1]); | |||
| } | |||
| @@ -47,6 +47,7 @@ import com.jd.blockchain.ledger.TransactionContentBody; | |||
| import com.jd.blockchain.ledger.TransactionRequest; | |||
| import com.jd.blockchain.ledger.TransactionResponse; | |||
| 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.LedgerRepository; | |||
| import com.jd.blockchain.peer.ConsensusRealm; | |||
| @@ -122,7 +123,7 @@ public class ManagementController implements LedgerBindingConfigAware, PeerManag | |||
| DataContractRegistry.register(BftsmartConsensusSettings.class); | |||
| DataContractRegistry.register(BftsmartNodeSettings.class); | |||
| DataContractRegistry.register(LedgerAdminInfo.class); | |||
| DataContractRegistry.register(LedgerAdminDataQuery.class); | |||
| } | |||
| @@ -35,7 +35,7 @@ import com.jd.blockchain.ledger.PreparedTransaction; | |||
| import com.jd.blockchain.ledger.TransactionResponse; | |||
| import com.jd.blockchain.ledger.TransactionTemplate; | |||
| 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.LedgerManager; | |||
| import com.jd.blockchain.ledger.core.LedgerRepository; | |||
| @@ -619,7 +619,7 @@ public class IntegrationTest { | |||
| LedgerBlock backgroundLedgerBlock = ledgerOfNode0.retrieveLatestBlock(); | |||
| // 验证合约中的赋值,外部可以获得; | |||
| DataAccountSet dataAccountSet = ledgerOfNode0.getDataAccountSet(backgroundLedgerBlock); | |||
| DataAccountQuery dataAccountSet = ledgerOfNode0.getDataAccountSet(backgroundLedgerBlock); | |||
| AsymmetricKeypair key = Crypto.getSignatureFunction("ED25519").generateKeypair(); | |||
| PubKey pubKey = key.getPubKey(); | |||
| Bytes dataAddress = AddressEncoding.generateAddress(pubKey); | |||
| @@ -27,7 +27,7 @@ import com.jd.blockchain.ledger.core.LedgerInitProposal; | |||
| import com.jd.blockchain.ledger.core.LedgerManager; | |||
| import com.jd.blockchain.ledger.core.LedgerRepository; | |||
| 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.MemoryBasedDb; | |||
| import com.jd.blockchain.tools.initializer.DBConnectionConfig; | |||
| @@ -113,7 +113,7 @@ public class LedgerInitializeTest { | |||
| LedgerBlock genesisBlock = ledger0.getLatestBlock(); | |||
| UserAccountSet userset0 = ledger0.getUserAccountSet(genesisBlock); | |||
| UserAccountQuery userset0 = ledger0.getUserAccountSet(genesisBlock); | |||
| PubKey pubKey0 = KeyGenUtils.decodePubKey(PUB_KEYS[0]); | |||
| Bytes address0 = AddressEncoding.generateAddress(pubKey0); | |||
| @@ -32,7 +32,7 @@ import com.jd.blockchain.ledger.core.LedgerInitProposal; | |||
| import com.jd.blockchain.ledger.core.LedgerManager; | |||
| import com.jd.blockchain.ledger.core.LedgerRepository; | |||
| 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.impl.composite.CompositeConnectionFactory; | |||
| //import com.jd.blockchain.storage.service.utils.MemoryBasedDb; | |||
| @@ -298,7 +298,7 @@ public class LedgerInitializeWebTest { | |||
| LedgerBlock genesisBlock = ledger0.getLatestBlock(); | |||
| UserAccountSet userset0 = ledger0.getUserAccountSet(genesisBlock); | |||
| UserAccountQuery userset0 = ledger0.getUserAccountSet(genesisBlock); | |||
| PubKey pubKey0 = KeyGenUtils.decodePubKey(PUB_KEYS[0]); | |||
| Bytes address0 = AddressEncoding.generateAddress(pubKey0); | |||
| @@ -40,7 +40,7 @@ import com.jd.blockchain.ledger.TransactionRequestBuilder; | |||
| import com.jd.blockchain.ledger.TransactionResponse; | |||
| import com.jd.blockchain.ledger.UserRegisterOperation; | |||
| 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.LedgerManager; | |||
| import com.jd.blockchain.ledger.core.LedgerRepository; | |||
| @@ -291,7 +291,7 @@ public class LedgerPerformanceTest { | |||
| ConsoleUtils.info("\r\n\r\n================= 准备测试交易 [执行合约] ================="); | |||
| LedgerBlock latestBlock = ledger.getLatestBlock(); | |||
| LedgerDataset previousDataSet = ledger.getDataSet(latestBlock); | |||
| LedgerDataQuery previousDataSet = ledger.getDataSet(latestBlock); | |||
| LedgerEditor newEditor = ledger.createNextBlock(); | |||
| TransactionBatchProcessor txProc = new TransactionBatchProcessor(DEFAULT_SECURITY_MANAGER, newEditor, | |||
| previousDataSet, opHandler, ledgerManager); | |||
| @@ -324,7 +324,7 @@ public class LedgerPerformanceTest { | |||
| long batchStartTs = System.currentTimeMillis(); | |||
| for (int i = 0; i < batchCount; i++) { | |||
| LedgerBlock latestBlock = ledger.getLatestBlock(); | |||
| LedgerDataset previousDataSet = ledger.getDataSet(latestBlock); | |||
| LedgerDataQuery previousDataSet = ledger.getDataSet(latestBlock); | |||
| if (statistic) { | |||
| ConsoleUtils.info("------ 开始执行交易, 即将生成区块[高度:%s] ------", (latestBlock.getHeight() + 1)); | |||
| } | |||
| @@ -4,7 +4,7 @@ import com.jd.blockchain.crypto.*; | |||
| import com.jd.blockchain.gateway.GatewayConfigProperties.KeyPairConfig; | |||
| import com.jd.blockchain.ledger.*; | |||
| 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.LedgerManager; | |||
| import com.jd.blockchain.ledger.core.LedgerRepository; | |||
| @@ -445,7 +445,7 @@ public class IntegrationTestAll4Redis { | |||
| assertEquals(txResp.getBlockHeight(), backgroundLedgerBlock.getHeight()); | |||
| // 验证合约中的赋值,外部可以获得; | |||
| DataAccountSet dataAccountSet = ledgerRepository.getDataAccountSet(backgroundLedgerBlock); | |||
| DataAccountQuery dataAccountSet = ledgerRepository.getDataAccountSet(backgroundLedgerBlock); | |||
| AsymmetricKeypair key = Crypto.getSignatureFunction("ED25519").generateKeypair(); | |||
| PubKey pubKey = key.getPubKey(); | |||
| Bytes dataAddress = AddressEncoding.generateAddress(pubKey); | |||
| @@ -29,7 +29,7 @@ import com.jd.blockchain.ledger.LedgerInitProperties; | |||
| import com.jd.blockchain.ledger.PreparedTransaction; | |||
| import com.jd.blockchain.ledger.TransactionResponse; | |||
| 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.LedgerRepository; | |||
| import com.jd.blockchain.sdk.BlockchainService; | |||
| @@ -187,7 +187,7 @@ public class IntegrationTestDataAccount { | |||
| 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]); | |||
| @@ -34,7 +34,7 @@ import com.jd.blockchain.ledger.core.LedgerInitProposal; | |||
| import com.jd.blockchain.ledger.core.LedgerManager; | |||
| import com.jd.blockchain.ledger.core.LedgerRepository; | |||
| 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.tools.initializer.DBConnectionConfig; | |||
| import com.jd.blockchain.tools.initializer.LedgerInitProcess; | |||
| @@ -143,7 +143,7 @@ public class LedgerInitializeTest { | |||
| assertEquals(0, genesisBlock.getHeight()); | |||
| assertEquals(ledgerHash0, genesisBlock.getHash()); | |||
| UserAccountSet userset0 = ledger0.getUserAccountSet(genesisBlock); | |||
| UserAccountQuery userset0 = ledger0.getUserAccountSet(genesisBlock); | |||
| PubKey pubKey0 = KeyGenUtils.decodePubKey(PUB_KEYS[0]); | |||
| Bytes address0 = AddressEncoding.generateAddress(pubKey0); | |||
| @@ -138,7 +138,7 @@ public class LedgerInitializeWeb4Nodes { | |||
| assertEquals(0, genesisBlock.getHeight()); | |||
| assertEquals(ledgerHash0, genesisBlock.getHash()); | |||
| UserAccountSet userset0 = ledger0.getUserAccountSet(genesisBlock); | |||
| UserAccountQuery userset0 = ledger0.getUserAccountSet(genesisBlock); | |||
| PubKey pubKey0 = KeyGenUtils.decodePubKey(PUB_KEYS[0]); | |||
| Bytes address0 = AddressEncoding.generateAddress(pubKey0); | |||
| @@ -27,7 +27,7 @@ import com.jd.blockchain.ledger.LedgerInitProperties; | |||
| import com.jd.blockchain.ledger.TransactionRequest; | |||
| import com.jd.blockchain.ledger.TransactionRequestBuilder; | |||
| 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.LedgerManager; | |||
| import com.jd.blockchain.ledger.core.LedgerRepository; | |||
| @@ -77,7 +77,7 @@ public class LedgerBlockGeneratingTest { | |||
| LedgerBlock latestBlock = ledger.getLatestBlock(); | |||
| assertEquals(height + i, latestBlock.getHeight()); | |||
| LedgerDataset previousDataSet = ledger.getDataSet(latestBlock); | |||
| LedgerDataQuery previousDataSet = ledger.getDataSet(latestBlock); | |||
| ConsoleUtils.info("------ 开始执行交易, 即将生成区块[%s] ------", (latestBlock.getHeight() + 1)); | |||
| long startTs = System.currentTimeMillis(); | |||
| @@ -60,13 +60,12 @@ import com.jd.blockchain.ledger.UserInfo; | |||
| import com.jd.blockchain.ledger.UserRegisterOperation; | |||
| import com.jd.blockchain.ledger.core.CryptoConfig; | |||
| 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.LedgerManager; | |||
| import com.jd.blockchain.ledger.core.LedgerQueryService; | |||
| import com.jd.blockchain.ledger.core.LedgerRepository; | |||
| 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.TransactionBatchProcessor; | |||
| import com.jd.blockchain.mocker.config.MockerConstant; | |||
| @@ -465,7 +464,7 @@ public class MockerNodeContext implements BlockchainQueryService { | |||
| public OperationResult[] txProcess(TransactionRequest txRequest) { | |||
| LedgerEditor newEditor = ledgerRepository.createNextBlock(); | |||
| LedgerBlock latestBlock = ledgerRepository.getLatestBlock(); | |||
| LedgerDataset previousDataSet = ledgerRepository.getDataSet(latestBlock); | |||
| LedgerDataQuery previousDataSet = ledgerRepository.getDataSet(latestBlock); | |||
| TransactionBatchProcessor txProc = new TransactionBatchProcessor(getSecurityManager(), newEditor, | |||
| previousDataSet, opHandler, ledgerManager); | |||
| TransactionResponse txResp = txProc.schedule(txRequest); | |||
| @@ -9,7 +9,14 @@ import com.jd.blockchain.contract.ContractException; | |||
| import com.jd.blockchain.contract.EventProcessingAware; | |||
| import com.jd.blockchain.contract.LedgerContext; | |||
| 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.LedgerManager; | |||
| import com.jd.blockchain.ledger.core.LedgerQueryService; | |||
| @@ -30,7 +37,7 @@ public class MockerContractExeHandle implements OperationHandle { | |||
| @Override | |||
| 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; | |||
| HashDigest txHash = request.getTransactionContent().getHash(); | |||