Browse Source

Fixed compilation error and refactored the API of querying meta info of Ledger;

tags/1.1.0
huanghaiquan 5 years ago
parent
commit
9641c82e93
23 changed files with 834 additions and 921 deletions
  1. +6
    -0
      newfeatures-authorize.txt
  2. +13
    -12
      source/base/src/main/java/com/jd/blockchain/consts/DataCodes.java
  3. +0
    -50
      source/gateway/src/main/java/com/jd/blockchain/gateway/service/GatewayQueryService.java
  4. +0
    -144
      source/gateway/src/main/java/com/jd/blockchain/gateway/service/GatewayQueryServiceHandler.java
  5. +549
    -515
      source/gateway/src/main/java/com/jd/blockchain/gateway/web/BlockBrowserController.java
  6. +3
    -0
      source/gateway/src/main/java/com/jd/blockchain/gateway/web/GatewayWebServerConfigurer.java
  7. +5
    -4
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerAdminAccount.java
  8. +0
    -16
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerAdministration.java
  9. +2
    -1
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerRepository.java
  10. +1
    -1
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/LedgerManager.java
  11. +10
    -9
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/LedgerQueryService.java
  12. +7
    -8
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/LedgerRepositoryImpl.java
  13. +1
    -1
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/LedgerTransactionalEditor.java
  14. +5
    -0
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/handles/ContractLedgerContext.java
  15. +10
    -9
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerAdminAccountTest.java
  16. +7
    -4
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerMetaDataTest.java
  17. +23
    -0
      source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/LedgerAdminInfo.java
  18. +0
    -8
      source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/LedgerMetadata.java
  19. +135
    -132
      source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/BlockchainQueryService.java
  20. +10
    -3
      source/peer/src/main/java/com/jd/blockchain/peer/web/LedgerQueryController.java
  21. +6
    -3
      source/peer/src/main/java/com/jd/blockchain/peer/web/ManagementController.java
  22. +5
    -0
      source/sdk/sdk-base/src/main/java/com/jd/blockchain/sdk/proxy/BlockchainServiceProxy.java
  23. +36
    -1
      source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/MockerNodeContext.java

+ 6
- 0
newfeatures-authorize.txt View File

@@ -0,0 +1,6 @@


1、网关节点移除查询接口 HTTP GET ledgers/{ledgerHash}/settings (出于设计合理性原因)


2、网关节点增加查询接口 HTTP GET ledgers/{ledgerHash}/admininfo ,接口返回指定账本管理配置信息;

+ 13
- 12
source/base/src/main/java/com/jd/blockchain/consts/DataCodes.java View File

@@ -9,7 +9,7 @@ package com.jd.blockchain.consts;
public interface DataCodes { public interface DataCodes {


public static final int BYTES_VALUE = 0x080; public static final int BYTES_VALUE = 0x080;
public static final int BYTES_VALUE_LIST = 0x081; public static final int BYTES_VALUE_LIST = 0x081;


public static final int BLOCK_CHAIN_IDENTITY = 0x090; public static final int BLOCK_CHAIN_IDENTITY = 0x090;
@@ -21,6 +21,8 @@ public interface DataCodes {
public static final int BLOCK_GENESIS = 0x120; public static final int BLOCK_GENESIS = 0x120;


public static final int DATA_SNAPSHOT = 0x130; public static final int DATA_SNAPSHOT = 0x130;
public static final int LEDGER_ADMIN_INFO = 0x131;


public static final int TX = 0x200; public static final int TX = 0x200;


@@ -52,14 +54,14 @@ public interface DataCodes {
public static final int TX_RESPONSE = 0x350; public static final int TX_RESPONSE = 0x350;


public static final int TX_OP_RESULT = 0x360; public static final int TX_OP_RESULT = 0x360;
// enum types of permissions; // enum types of permissions;
public static final int ENUM_TX_PERMISSIONS = 0x401; public static final int ENUM_TX_PERMISSIONS = 0x401;
public static final int ENUM_LEDGER_PERMISSIONS = 0x402; public static final int ENUM_LEDGER_PERMISSIONS = 0x402;


// contract types of metadata; // contract types of metadata;
public static final int METADATA = 0x600; public static final int METADATA = 0x600;
public static final int METADATA_INIT_SETTING = 0x610; public static final int METADATA_INIT_SETTING = 0x610;


public static final int METADATA_INIT_PROPOSAL = 0x611; public static final int METADATA_INIT_PROPOSAL = 0x611;
@@ -70,14 +72,14 @@ public interface DataCodes {


public static final int METADATA_CONSENSUS_PARTICIPANT = 0x621; public static final int METADATA_CONSENSUS_PARTICIPANT = 0x621;


// public static final int METADATA_CONSENSUS_NODE = 0x630;
public static final int METADATA_CONSENSUS_SETTING = 0x631;
// public static final int METADATA_PARTICIPANT_INFO = 0x640;
// public static final int METADATA_CONSENSUS_NODE = 0x630;
//
// public static final int METADATA_CONSENSUS_SETTING = 0x631;
//
// public static final int METADATA_PARTICIPANT_INFO = 0x640;


public static final int METADATA_CRYPTO_SETTING = 0x642; public static final int METADATA_CRYPTO_SETTING = 0x642;
public static final int METADATA_CRYPTO_SETTING_PROVIDER = 0x643; public static final int METADATA_CRYPTO_SETTING_PROVIDER = 0x643;


// public static final int ACCOUNT = 0x700; // public static final int ACCOUNT = 0x700;
@@ -88,11 +90,10 @@ public interface DataCodes {


public static final int DATA = 0x900; public static final int DATA = 0x900;


//contract related;
// contract related;
public static final int CONTRACT = 0xA00; public static final int CONTRACT = 0xA00;



//...0xA19
// ...0xA19
public static final int HASH = 0xB00; public static final int HASH = 0xB00;


public static final int HASH_OBJECT = 0xB10; public static final int HASH_OBJECT = 0xB10;


+ 0
- 50
source/gateway/src/main/java/com/jd/blockchain/gateway/service/GatewayQueryService.java View File

@@ -1,50 +0,0 @@
package com.jd.blockchain.gateway.service;

import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.ParticipantNode;
import com.jd.blockchain.sdk.ContractSettings;
import com.jd.blockchain.sdk.LedgerInitSettings;
import com.jd.blockchain.utils.Bytes;

/**
* queryService only for gateway;
* @Author zhaogw
* @Date 2019/2/22 10:37
*/
public interface GatewayQueryService {
/**
* get all ledgers hashs;
* @param fromIndex
* @param count
*/
HashDigest[] getLedgersHash(int fromIndex, int count);

/**
* get the participants by range;
* @param ledgerHash
* @param fromIndex
* @param count
* @return
*/
ParticipantNode[] getConsensusParticipants(HashDigest ledgerHash, int fromIndex, int count);

/**
* 获取账本初始化配置信息
*
* @param ledgerHash
* 账本Hash
* @return
*/
LedgerInitSettings getLedgerInitSettings(HashDigest ledgerHash);

/**
* 获取账本指定合约信息
*
* @param ledgerHash
* 账本Hash
* @param address
* 合约地址
* @return
*/
ContractSettings getContractSettings(HashDigest ledgerHash, String address);
}

+ 0
- 144
source/gateway/src/main/java/com/jd/blockchain/gateway/service/GatewayQueryServiceHandler.java View File

@@ -1,144 +0,0 @@
package com.jd.blockchain.gateway.service;

import com.jd.blockchain.consensus.ConsensusProvider;
import com.jd.blockchain.consensus.ConsensusProviders;
import com.jd.blockchain.consensus.ConsensusSettings;
import com.jd.blockchain.consensus.bftsmart.BftsmartConsensusProvider;
import com.jd.blockchain.consensus.mq.MsgQueueConsensusProvider;
import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.gateway.PeerService;
import com.jd.blockchain.gateway.decompiler.utils.DecompilerUtils;
import com.jd.blockchain.ledger.ContractInfo;
import com.jd.blockchain.ledger.LedgerMetadata;
import com.jd.blockchain.ledger.ParticipantNode;
import com.jd.blockchain.sdk.ContractSettings;
import com.jd.blockchain.sdk.LedgerInitSettings;
import com.jd.blockchain.utils.QueryUtil;
import com.jd.blockchain.utils.codec.HexUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;


/**
* @Author zhaogw
* @Date 2019/2/22 10:39
*/
@Component
public class GatewayQueryServiceHandler implements GatewayQueryService {

@Autowired
private PeerService peerService;

@Override
public HashDigest[] getLedgersHash(int fromIndex, int count) {
HashDigest ledgersHash[] = peerService.getQueryService().getLedgerHashs();
int indexAndCount[] = QueryUtil.calFromIndexAndCount(fromIndex,count,ledgersHash.length);
HashDigest ledgersHashNew[] = Arrays.copyOfRange(ledgersHash,indexAndCount[0],indexAndCount[0]+indexAndCount[1]);
return ledgersHashNew;
}

@Override
public ParticipantNode[] getConsensusParticipants(HashDigest ledgerHash, int fromIndex, int count) {
ParticipantNode participantNode[] = peerService.getQueryService().getConsensusParticipants(ledgerHash);
int indexAndCount[] = QueryUtil.calFromIndexAndCount(fromIndex,count,participantNode.length);
ParticipantNode participantNodesNew[] = Arrays.copyOfRange(participantNode,indexAndCount[0],indexAndCount[0]+indexAndCount[1]);
return participantNodesNew;
}

@Override
public LedgerInitSettings getLedgerInitSettings(HashDigest ledgerHash) {

ParticipantNode[] participantNodes = peerService.getQueryService().getConsensusParticipants(ledgerHash);

LedgerMetadata ledgerMetadata = peerService.getQueryService().getLedgerMetadata(ledgerHash);

return initLedgerInitSettings(participantNodes, ledgerMetadata);
}

@Override
public ContractSettings getContractSettings(HashDigest ledgerHash, String address) {
ContractInfo contractInfo = peerService.getQueryService().getContract(ledgerHash, address);
return contractSettings(contractInfo);
}

private ContractSettings contractSettings(ContractInfo contractInfo) {
ContractSettings contractSettings = new ContractSettings(contractInfo.getAddress(), contractInfo.getPubKey(), contractInfo.getRootHash());
byte[] chainCodeBytes = contractInfo.getChainCode();
// 将反编译chainCode
String mainClassJava = DecompilerUtils.decompileMainClassFromBytes(chainCodeBytes);
contractSettings.setChainCode(mainClassJava);
return contractSettings;
}

/**
* 初始化账本配置
*
* @param participantNodes
* 参与方列表
* @param ledgerMetadata
* 账本元数据
* @return
*/
private LedgerInitSettings initLedgerInitSettings(ParticipantNode[] participantNodes, LedgerMetadata ledgerMetadata) {
LedgerInitSettings ledgerInitSettings = new LedgerInitSettings();

// 设置参与方
ledgerInitSettings.setParticipantNodes(participantNodes);

// 设置共识设置
ledgerInitSettings.setConsensusSettings(initConsensusSettings(ledgerMetadata));

// 设置参与方根Hash
ledgerInitSettings.setParticipantsHash(ledgerMetadata.getParticipantsHash());

// 设置算法配置
ledgerInitSettings.setCryptoSetting(ledgerMetadata.getSetting().getCryptoSetting());

// 设置种子
ledgerInitSettings.setSeed(initSeed(ledgerMetadata.getSeed()));

// 设置共识协议
ledgerInitSettings.setConsensusProtocol(ledgerMetadata.getSetting().getConsensusProvider());

return ledgerInitSettings;
}

/**
* 初始化账本种子信息
*
* @param seedBytes
* 种子的字节数组显示
* @return
* 种子以十六进制方式显示,为方便阅读,每隔八个字符中间以"-"分割
*/
private String initSeed(byte[] seedBytes) {
String seedString = HexUtils.encode(seedBytes);
// 每隔八个字符中加入一个一个横线
StringBuffer seed = new StringBuffer();

for( int i = 0; i < seedString.length(); i++) {
char c = seedString.charAt(i);
if (i != 0 && i % 8 == 0) {
seed.append("-");
}
seed.append(c);
}

return seed.toString();
}

/**
* 初始化共识配置
*
* @param ledgerMetadata
* 账本元数据
* @return
*/
private ConsensusSettings initConsensusSettings(LedgerMetadata ledgerMetadata) {
String consensusProvider = ledgerMetadata.getSetting().getConsensusProvider();
ConsensusProvider provider = ConsensusProviders.getProvider(consensusProvider);
byte[] consensusSettingsBytes = ledgerMetadata.getSetting().getConsensusSetting().toBytes();
return provider.getSettingsFactory().getConsensusSettingsEncoder().decode(consensusSettingsBytes);
}
}

+ 549
- 515
source/gateway/src/main/java/com/jd/blockchain/gateway/web/BlockBrowserController.java
File diff suppressed because it is too large
View File


+ 3
- 0
source/gateway/src/main/java/com/jd/blockchain/gateway/web/GatewayWebServerConfigurer.java View File

@@ -35,6 +35,9 @@ public class GatewayWebServerConfigurer implements WebMvcConfigurer {
JSONSerializeUtils.disableCircularReferenceDetect(); JSONSerializeUtils.disableCircularReferenceDetect();
JSONSerializeUtils.configStringSerializer(ByteArray.class); JSONSerializeUtils.configStringSerializer(ByteArray.class);
DataContractRegistry.register(BftsmartNodeSettings.class); DataContractRegistry.register(BftsmartNodeSettings.class);

DataContractRegistry.register(LedgerAdminInfo.class);
} }






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

@@ -10,6 +10,7 @@ import com.jd.blockchain.binaryproto.DataContractRegistry;
import com.jd.blockchain.crypto.Crypto; import com.jd.blockchain.crypto.Crypto;
import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.crypto.HashFunction; import com.jd.blockchain.crypto.HashFunction;
import com.jd.blockchain.ledger.LedgerAdminInfo;
import com.jd.blockchain.ledger.LedgerException; import com.jd.blockchain.ledger.LedgerException;
import com.jd.blockchain.ledger.LedgerInitSetting; import com.jd.blockchain.ledger.LedgerInitSetting;
import com.jd.blockchain.ledger.ParticipantNode; import com.jd.blockchain.ledger.ParticipantNode;
@@ -19,7 +20,7 @@ import com.jd.blockchain.storage.service.VersioningKVStorage;
import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Bytes;
import com.jd.blockchain.utils.Transactional; import com.jd.blockchain.utils.Transactional;
public class LedgerAdminAccount implements Transactional, LedgerAdministration {
public class LedgerAdminAccount implements Transactional, LedgerAdminInfo {
static { static {
DataContractRegistry.register(LedgerMetadata.class); DataContractRegistry.register(LedgerMetadata.class);
@@ -174,8 +175,8 @@ public class LedgerAdminAccount implements Transactional, LedgerAdministration {
} }
Bytes key = encodeSettingsKey(settingsHash); Bytes key = encodeSettingsKey(settingsHash);
byte[] bytes = storage.get(key); byte[] bytes = storage.get(key);
HashFunction hashFunc = Crypto.getHashFunction(adminAccountHash.getAlgorithm());
if (!hashFunc.verify(adminAccountHash, bytes)) {
HashFunction hashFunc = Crypto.getHashFunction(settingsHash.getAlgorithm());
if (!hashFunc.verify(settingsHash, bytes)) {
String errorMsg = "Verification of the hash for ledger setting failed! --[HASH=" + key + "]"; String errorMsg = "Verification of the hash for ledger setting failed! --[HASH=" + key + "]";
LOGGER.error(errorMsg); LOGGER.error(errorMsg);
throw new LedgerException(errorMsg); throw new LedgerException(errorMsg);
@@ -240,7 +241,7 @@ public class LedgerAdminAccount implements Transactional, LedgerAdministration {
* *
* @return * @return
*/ */
public LedgerSettings getSetting() {
public LedgerSettings getSettings() {
return settings; return settings;
} }


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

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

import com.jd.blockchain.ledger.LedgerMetadata;
import com.jd.blockchain.ledger.ParticipantNode;

public interface LedgerAdministration {

LedgerMetadata getMetadata();
long getParticipantCount();

// ParticipantNode getParticipant(int id);
ParticipantNode[] getParticipants();
}

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

@@ -3,6 +3,7 @@ package com.jd.blockchain.ledger.core;
import java.io.Closeable; import java.io.Closeable;


import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.LedgerAdminInfo;
import com.jd.blockchain.ledger.LedgerBlock; import com.jd.blockchain.ledger.LedgerBlock;


public interface LedgerRepository extends Closeable { public interface LedgerRepository extends Closeable {
@@ -51,7 +52,7 @@ public interface LedgerRepository extends Closeable {
*/ */
LedgerBlock getBlock(long height); LedgerBlock getBlock(long height);


LedgerAdministration getAdminInfo();
LedgerAdminInfo getAdminInfo();


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




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

@@ -69,7 +69,7 @@ public class LedgerManager implements LedgerManage {
ledgerVersioningStorage); ledgerVersioningStorage);


// 校验 crypto service provider ; // 校验 crypto service provider ;
CryptoSetting cryptoSetting = ledgerRepo.getAdminAccount().getSetting().getCryptoSetting();
CryptoSetting cryptoSetting = ledgerRepo.getAdminAccount().getSettings().getCryptoSetting();
checkCryptoSetting(cryptoSetting, ledgerHash); checkCryptoSetting(cryptoSetting, ledgerHash);


// 创建账本上下文; // 创建账本上下文;


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

@@ -9,7 +9,6 @@ import com.jd.blockchain.ledger.*;
import com.jd.blockchain.ledger.core.ContractAccountSet; import com.jd.blockchain.ledger.core.ContractAccountSet;
import com.jd.blockchain.ledger.core.DataAccount; import com.jd.blockchain.ledger.core.DataAccount;
import com.jd.blockchain.ledger.core.DataAccountSet; import com.jd.blockchain.ledger.core.DataAccountSet;
import com.jd.blockchain.ledger.core.LedgerAdministration;
import com.jd.blockchain.ledger.core.LedgerRepository; import com.jd.blockchain.ledger.core.LedgerRepository;
import com.jd.blockchain.ledger.core.LedgerService; import com.jd.blockchain.ledger.core.LedgerService;
import com.jd.blockchain.ledger.core.TransactionSet; import com.jd.blockchain.ledger.core.TransactionSet;
@@ -40,15 +39,23 @@ public class LedgerQueryService implements BlockchainQueryService {
ledgerInfo.setLatestBlockHeight(ledger.getLatestBlockHeight()); ledgerInfo.setLatestBlockHeight(ledger.getLatestBlockHeight());
return ledgerInfo; return ledgerInfo;
} }
@Override
public LedgerAdminInfo getLedgerAdminInfo(HashDigest ledgerHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock();
LedgerAdminInfo administration = ledger.getAdminAccount(block);
return administration;
}


@Override @Override
public ParticipantNode[] getConsensusParticipants(HashDigest ledgerHash) { public ParticipantNode[] getConsensusParticipants(HashDigest ledgerHash) {
return ledgerAdministration(ledgerHash).getParticipants();
return getLedgerAdminInfo(ledgerHash).getParticipants();
} }


@Override @Override
public LedgerMetadata getLedgerMetadata(HashDigest ledgerHash) { public LedgerMetadata getLedgerMetadata(HashDigest ledgerHash) {
return ledgerAdministration(ledgerHash).getMetadata();
return getLedgerAdminInfo(ledgerHash).getMetadata();
} }


@Override @Override
@@ -390,10 +397,4 @@ public class LedgerQueryService implements BlockchainQueryService {
return contractAccountSet.getAccounts(pages[0], pages[1]); return contractAccountSet.getAccounts(pages[0], pages[1]);
} }


private LedgerAdministration ledgerAdministration(HashDigest ledgerHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock();
LedgerAdministration administration = ledger.getAdminAccount(block);
return administration;
}
} }

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

@@ -9,7 +9,6 @@ import com.jd.blockchain.ledger.core.AccountAccessPolicy;
import com.jd.blockchain.ledger.core.ContractAccountSet; import com.jd.blockchain.ledger.core.ContractAccountSet;
import com.jd.blockchain.ledger.core.DataAccountSet; import com.jd.blockchain.ledger.core.DataAccountSet;
import com.jd.blockchain.ledger.core.LedgerAdminAccount; import com.jd.blockchain.ledger.core.LedgerAdminAccount;
import com.jd.blockchain.ledger.core.LedgerAdministration;
import com.jd.blockchain.ledger.core.LedgerConsts; import com.jd.blockchain.ledger.core.LedgerConsts;
import com.jd.blockchain.ledger.core.LedgerDataSet; import com.jd.blockchain.ledger.core.LedgerDataSet;
import com.jd.blockchain.ledger.core.LedgerEditor; import com.jd.blockchain.ledger.core.LedgerEditor;
@@ -244,7 +243,7 @@ public class LedgerRepositoryImpl implements LedgerRepository {
} }


@Override @Override
public LedgerAdministration getAdminInfo() {
public LedgerAdminInfo getAdminInfo() {
return getAdminAccount(getLatestBlock()); return getAdminAccount(getLatestBlock());
} }


@@ -263,7 +262,7 @@ public class LedgerRepositoryImpl implements LedgerRepository {
if (transactionSet == null) { if (transactionSet == null) {
LedgerAdminAccount adminAccount = getAdminAccount(block); LedgerAdminAccount adminAccount = getAdminAccount(block);
transactionSet = loadTransactionSet(block.getTransactionSetHash(), transactionSet = loadTransactionSet(block.getTransactionSetHash(),
adminAccount.getMetadata().getSetting().getCryptoSetting(), keyPrefix, exPolicyStorage,
adminAccount.getSettings().getCryptoSetting(), keyPrefix, exPolicyStorage,
versioningStorage, true); versioningStorage, true);
state.transactionSet = transactionSet; state.transactionSet = transactionSet;
} }
@@ -272,7 +271,7 @@ public class LedgerRepositoryImpl implements LedgerRepository {
LedgerAdminAccount adminAccount = getAdminAccount(block); LedgerAdminAccount adminAccount = getAdminAccount(block);
// All of existing block is readonly; // All of existing block is readonly;
return loadTransactionSet(block.getTransactionSetHash(), return loadTransactionSet(block.getTransactionSetHash(),
adminAccount.getMetadata().getSetting().getCryptoSetting(), keyPrefix, exPolicyStorage,
adminAccount.getSettings().getCryptoSetting(), keyPrefix, exPolicyStorage,
versioningStorage, true); versioningStorage, true);
} }


@@ -402,7 +401,7 @@ public class LedgerRepositoryImpl implements LedgerRepository {
} }
LedgerBlock previousBlock = getLatestBlock(); LedgerBlock previousBlock = getLatestBlock();
LedgerTransactionalEditor editor = LedgerTransactionalEditor.createEditor(previousBlock, LedgerTransactionalEditor editor = LedgerTransactionalEditor.createEditor(previousBlock,
getAdminInfo().getMetadata().getSetting(), keyPrefix, exPolicyStorage,
getAdminInfo().getSettings(), keyPrefix, exPolicyStorage,
versioningStorage); versioningStorage);
NewBlockCommittingMonitor committingMonitor = new NewBlockCommittingMonitor(editor, this); NewBlockCommittingMonitor committingMonitor = new NewBlockCommittingMonitor(editor, this);
this.nextBlockEditor = committingMonitor; this.nextBlockEditor = committingMonitor;
@@ -453,7 +452,7 @@ public class LedgerRepositoryImpl implements LedgerRepository {
// PrefixAppender.prefix(USER_SET_PREFIX, ledgerExStorage), // PrefixAppender.prefix(USER_SET_PREFIX, ledgerExStorage),
// PrefixAppender.prefix(USER_SET_PREFIX, ledgerVerStorage), // PrefixAppender.prefix(USER_SET_PREFIX, ledgerVerStorage),
// DEFAULT_ACCESS_POLICY); // DEFAULT_ACCESS_POLICY);
UserAccountSet userAccountSet = new UserAccountSet(adminAccount.getSetting().getCryptoSetting(),
UserAccountSet userAccountSet = new UserAccountSet(adminAccount.getSettings().getCryptoSetting(),
usersetKeyPrefix, ledgerExStorage, ledgerVerStorage, DEFAULT_ACCESS_POLICY); usersetKeyPrefix, ledgerExStorage, ledgerVerStorage, DEFAULT_ACCESS_POLICY);


// DataAccountSet dataAccountSet = new // DataAccountSet dataAccountSet = new
@@ -461,7 +460,7 @@ public class LedgerRepositoryImpl implements LedgerRepository {
// PrefixAppender.prefix(DATA_SET_PREFIX, ledgerExStorage), // PrefixAppender.prefix(DATA_SET_PREFIX, ledgerExStorage),
// PrefixAppender.prefix(DATA_SET_PREFIX, ledgerVerStorage), // PrefixAppender.prefix(DATA_SET_PREFIX, ledgerVerStorage),
// DEFAULT_ACCESS_POLICY); // DEFAULT_ACCESS_POLICY);
DataAccountSet dataAccountSet = new DataAccountSet(adminAccount.getSetting().getCryptoSetting(),
DataAccountSet dataAccountSet = new DataAccountSet(adminAccount.getSettings().getCryptoSetting(),
datasetKeyPrefix, ledgerExStorage, ledgerVerStorage, DEFAULT_ACCESS_POLICY); datasetKeyPrefix, ledgerExStorage, ledgerVerStorage, DEFAULT_ACCESS_POLICY);


// ContractAccountSet contractAccountSet = new // ContractAccountSet contractAccountSet = new
@@ -469,7 +468,7 @@ public class LedgerRepositoryImpl implements LedgerRepository {
// PrefixAppender.prefix(CONTRACT_SET_PREFIX, ledgerExStorage), // PrefixAppender.prefix(CONTRACT_SET_PREFIX, ledgerExStorage),
// PrefixAppender.prefix(CONTRACT_SET_PREFIX, ledgerVerStorage), // PrefixAppender.prefix(CONTRACT_SET_PREFIX, ledgerVerStorage),
// DEFAULT_ACCESS_POLICY); // DEFAULT_ACCESS_POLICY);
ContractAccountSet contractAccountSet = new ContractAccountSet(adminAccount.getSetting().getCryptoSetting(),
ContractAccountSet contractAccountSet = new ContractAccountSet(adminAccount.getSettings().getCryptoSetting(),
contractsetKeyPrefix, ledgerExStorage, ledgerVerStorage, DEFAULT_ACCESS_POLICY); contractsetKeyPrefix, ledgerExStorage, ledgerVerStorage, DEFAULT_ACCESS_POLICY);


LedgerDataSetImpl newDataSet = new LedgerDataSetImpl(adminAccount, userAccountSet, dataAccountSet, LedgerDataSetImpl newDataSet = new LedgerDataSetImpl(adminAccount, userAccountSet, dataAccountSet,


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

@@ -262,7 +262,7 @@ public class LedgerTransactionalEditor implements LedgerEditor {
GenesisSnapshot snpht = (GenesisSnapshot) startingPoint; GenesisSnapshot snpht = (GenesisSnapshot) startingPoint;
txDataset = LedgerRepositoryImpl.newDataSet(snpht.initSetting, ledgerKeyPrefix, txBufferedStorage, txDataset = LedgerRepositoryImpl.newDataSet(snpht.initSetting, ledgerKeyPrefix, txBufferedStorage,
txBufferedStorage); txBufferedStorage);
txset = LedgerRepositoryImpl.newTransactionSet(txDataset.getAdminAccount().getSetting(),
txset = LedgerRepositoryImpl.newTransactionSet(txDataset.getAdminAccount().getSettings(),
ledgerKeyPrefix, txBufferedStorage, txBufferedStorage); ledgerKeyPrefix, txBufferedStorage, txBufferedStorage);
} else if (startingPoint instanceof TxSnapshot) { } else if (startingPoint instanceof TxSnapshot) {
// 新的区块; // 新的区块;


+ 5
- 0
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/handles/ContractLedgerContext.java View File

@@ -38,6 +38,11 @@ public class ContractLedgerContext implements LedgerContext {
public LedgerInfo getLedger(HashDigest ledgerHash) { public LedgerInfo getLedger(HashDigest ledgerHash) {
return innerQueryService.getLedger(ledgerHash); return innerQueryService.getLedger(ledgerHash);
} }
@Override
public LedgerAdminInfo getLedgerAdminInfo(HashDigest ledgerHash) {
return innerQueryService.getLedgerAdminInfo(ledgerHash);
}


@Override @Override
public ParticipantNode[] getConsensusParticipants(HashDigest ledgerHash) { public ParticipantNode[] getConsensusParticipants(HashDigest ledgerHash) {


+ 10
- 9
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerAdminAccountTest.java View File

@@ -166,14 +166,15 @@ public class LedgerAdminAccountTest {


assertTrue(BytesUtils.equals(expMeta.getSeed(), rlmeta.getSeed())); assertTrue(BytesUtils.equals(expMeta.getSeed(), rlmeta.getSeed()));


assertNotNull(rlmeta.getSetting());
assertTrue(expMeta.getSetting().getConsensusSetting().equals(rlmeta.getSetting().getConsensusSetting()));
assertEquals(expMeta.getSetting().getConsensusProvider(), rlmeta.getSetting().getConsensusProvider());

assertEquals(expMeta.getSetting().getCryptoSetting().getAutoVerifyHash(),
rlmeta.getSetting().getCryptoSetting().getAutoVerifyHash());
assertEquals(expMeta.getSetting().getCryptoSetting().getHashAlgorithm(),
rlmeta.getSetting().getCryptoSetting().getHashAlgorithm());
assertNotNull(rlmeta.getSettingsHash());
assertEquals(expMeta.getSettingsHash(), rlmeta.getSettingsHash());
// assertTrue(expMeta.getSettings().getConsensusSetting().equals(rlmeta.getSettings().getConsensusSetting()));
// assertEquals(expMeta.getSettings().getConsensusProvider(), rlmeta.getSettings().getConsensusProvider());
//
// assertEquals(expMeta.getSettings().getCryptoSetting().getAutoVerifyHash(),
// rlmeta.getSettings().getCryptoSetting().getAutoVerifyHash());
// assertEquals(expMeta.getSettings().getCryptoSetting().getHashAlgorithm(),
// rlmeta.getSettings().getCryptoSetting().getHashAlgorithm());
} }


private void verifyReadlingParities(LedgerAdminAccount actualAccount, ParticipantNode[] expParties) { private void verifyReadlingParities(LedgerAdminAccount actualAccount, ParticipantNode[] expParties) {
@@ -210,7 +211,7 @@ public class LedgerAdminAccountTest {


ex = null; ex = null;
try { try {
LedgerConfiguration newLedgerSetting = new LedgerConfiguration(actualAccount.getSetting());
LedgerConfiguration newLedgerSetting = new LedgerConfiguration(actualAccount.getSettings());
actualAccount.setLedgerSetting(newLedgerSetting); actualAccount.setLedgerSetting(newLedgerSetting);
} catch (Exception e) { } catch (Exception e) {
ex = e; ex = e;


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

@@ -16,6 +16,7 @@ import com.jd.blockchain.binaryproto.BinaryProtocol;
import com.jd.blockchain.binaryproto.DataContractRegistry; import com.jd.blockchain.binaryproto.DataContractRegistry;
import com.jd.blockchain.crypto.AddressEncoding; import com.jd.blockchain.crypto.AddressEncoding;
import com.jd.blockchain.crypto.Crypto; import com.jd.blockchain.crypto.Crypto;
import com.jd.blockchain.crypto.CryptoAlgorithm;
import com.jd.blockchain.crypto.CryptoProvider; import com.jd.blockchain.crypto.CryptoProvider;
import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.crypto.PubKey; import com.jd.blockchain.crypto.PubKey;
@@ -74,12 +75,14 @@ public class LedgerMetaDataTest {
cryptoConfig.setAutoVerifyHash(true); cryptoConfig.setAutoVerifyHash(true);
cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256);


LedgerConfiguration ledgerConfiguration = new LedgerConfiguration(consensusProvider,
new Bytes(consensusSettingBytes), cryptoConfig);
// LedgerConfiguration ledgerConfiguration = new LedgerConfiguration(consensusProvider,
// new Bytes(consensusSettingBytes), cryptoConfig);
HashDigest settingsHash = Crypto.getHashFunction("SHA256").hash(consensusSettingBytes);
LedgerAdminAccount.LedgerMetadataImpl ledgerMetadata = new LedgerAdminAccount.LedgerMetadataImpl(); LedgerAdminAccount.LedgerMetadataImpl ledgerMetadata = new LedgerAdminAccount.LedgerMetadataImpl();


ledgerMetadata.setSeed(seed); ledgerMetadata.setSeed(seed);
ledgerMetadata.setSetting(ledgerConfiguration);
ledgerMetadata.setSettingsHash(settingsHash);


HashDigest hashDigest = new HashDigest(ClassicAlgorithm.SHA256, rawDigestBytes); HashDigest hashDigest = new HashDigest(ClassicAlgorithm.SHA256, rawDigestBytes);
ledgerMetadata.setParticipantsHash(hashDigest); ledgerMetadata.setParticipantsHash(hashDigest);
@@ -91,7 +94,7 @@ public class LedgerMetaDataTest {
// verify start // verify start
assertArrayEquals(ledgerMetadata.getSeed(), deLedgerMetaData.getSeed()); assertArrayEquals(ledgerMetadata.getSeed(), deLedgerMetaData.getSeed());
assertEquals(ledgerMetadata.getParticipantsHash(), deLedgerMetaData.getParticipantsHash()); assertEquals(ledgerMetadata.getParticipantsHash(), deLedgerMetaData.getParticipantsHash());
assertNotEquals(ledgerMetadata.getSetting(), deLedgerMetaData.getSetting());
assertEquals(ledgerMetadata.getSettingsHash(), deLedgerMetaData.getSettingsHash());


return; return;
} }


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

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

import com.jd.blockchain.binaryproto.DataContract;
import com.jd.blockchain.binaryproto.DataField;
import com.jd.blockchain.binaryproto.PrimitiveType;
import com.jd.blockchain.consts.DataCodes;

@DataContract(code = DataCodes.LEDGER_ADMIN_INFO, name = "LEDGER-ADMIN-INFO")
public interface LedgerAdminInfo {

@DataField(order = 1, refContract = true)
LedgerMetadata getMetadata();

@DataField(order = 2, refContract = true)
LedgerSettings getSettings();

@DataField(order = 3, primitiveType = PrimitiveType.INT64)
long getParticipantCount();

@DataField(order = 4, refContract = true, list = true)
ParticipantNode[] getParticipants();

}

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

@@ -31,14 +31,6 @@ public interface LedgerMetadata {
@DataField(order = 2, primitiveType = PrimitiveType.BYTES) @DataField(order = 2, primitiveType = PrimitiveType.BYTES)
HashDigest getParticipantsHash(); HashDigest getParticipantsHash();


// /**
// * 账本配置;
// *
// * @return
// */
// @DataField(order = 3, refContract = true)
// LedgerSetting getSetting();
/** /**
* 账本配置的哈希; * 账本配置的哈希;
* *


+ 135
- 132
source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/BlockchainQueryService.java View File

@@ -1,7 +1,21 @@
package com.jd.blockchain.transaction; package com.jd.blockchain.transaction;
import org.springframework.cglib.core.Block;
import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.*;
import com.jd.blockchain.ledger.AccountHeader;
import com.jd.blockchain.ledger.ContractInfo;
import com.jd.blockchain.ledger.KVDataEntry;
import com.jd.blockchain.ledger.KVInfoVO;
import com.jd.blockchain.ledger.LedgerAdminInfo;
import com.jd.blockchain.ledger.LedgerBlock;
import com.jd.blockchain.ledger.LedgerInfo;
import com.jd.blockchain.ledger.LedgerMetadata;
import com.jd.blockchain.ledger.LedgerTransaction;
import com.jd.blockchain.ledger.ParticipantNode;
import com.jd.blockchain.ledger.Transaction;
import com.jd.blockchain.ledger.TransactionState;
import com.jd.blockchain.ledger.UserInfo;
/** /**
* 区块链查询器; * 区块链查询器;
@@ -28,12 +42,20 @@ public interface BlockchainQueryService {
*/ */
LedgerInfo getLedger(HashDigest ledgerHash); LedgerInfo getLedger(HashDigest ledgerHash);
/**
* 返回当前账本的参与者信息列表
*
* @param ledgerHash
* @return
*/
/**
* 获取账本信息;
*
* @param ledgerHash
* @return 账本对象;如果不存在,则返回 null;
*/
LedgerAdminInfo getLedgerAdminInfo(HashDigest ledgerHash);
/**
* 返回当前账本的参与者信息列表
*
* @param ledgerHash
* @return
*/
ParticipantNode[] getConsensusParticipants(HashDigest ledgerHash); ParticipantNode[] getConsensusParticipants(HashDigest ledgerHash);
/** /**
@@ -47,10 +69,8 @@ public interface BlockchainQueryService {
/** /**
* 返回指定账本序号的区块; * 返回指定账本序号的区块;
* *
* @param ledgerHash
* 账本hash;
* @param height
* 高度;
* @param ledgerHash 账本hash;
* @param height 高度;
* @return * @return
*/ */
LedgerBlock getBlock(HashDigest ledgerHash, long height); LedgerBlock getBlock(HashDigest ledgerHash, long height);
@@ -58,10 +78,8 @@ public interface BlockchainQueryService {
/** /**
* 返回指定区块hash的区块; * 返回指定区块hash的区块;
* *
* @param ledgerHash
* 账本hash;
* @param blockHash
* 区块hash;
* @param ledgerHash 账本hash;
* @param blockHash 区块hash;
* @return * @return
*/ */
LedgerBlock getBlock(HashDigest ledgerHash, HashDigest blockHash); LedgerBlock getBlock(HashDigest ledgerHash, HashDigest blockHash);
@@ -84,125 +102,116 @@ public interface BlockchainQueryService {
*/ */
long getTransactionCount(HashDigest ledgerHash, HashDigest blockHash); long getTransactionCount(HashDigest ledgerHash, HashDigest blockHash);
/**
* 返回当前账本的交易总数
*
* @param ledgerHash
* @return
*/
/**
* 返回当前账本的交易总数
*
* @param ledgerHash
* @return
*/
long getTransactionTotalCount(HashDigest ledgerHash); long getTransactionTotalCount(HashDigest ledgerHash);
/**
* 返回指定高度的区块中记录的数据账户总数
*
* @param ledgerHash
* @param height
* @return
*/
/**
* 返回指定高度的区块中记录的数据账户总数
*
* @param ledgerHash
* @param height
* @return
*/
long getDataAccountCount(HashDigest ledgerHash, long height); long getDataAccountCount(HashDigest ledgerHash, long height);
/**
* 返回指定的区块中记录的数据账户总数
*
* @param ledgerHash
* @param blockHash
* @return
*/
/**
* 返回指定的区块中记录的数据账户总数
*
* @param ledgerHash
* @param blockHash
* @return
*/
long getDataAccountCount(HashDigest ledgerHash, HashDigest blockHash); long getDataAccountCount(HashDigest ledgerHash, HashDigest blockHash);
/**
* 返回当前账本的数据账户总数
*
* @param ledgerHash
* @return
*/
long getDataAccountTotalCount(HashDigest ledgerHash);
/**
* 返回指定高度区块中的用户总数
*
* @param ledgerHash
* @param height
* @return
*/
/**
* 返回当前账本的数据账户总数
*
* @param ledgerHash
* @return
*/
long getDataAccountTotalCount(HashDigest ledgerHash);
/**
* 返回指定高度区块中的用户总数
*
* @param ledgerHash
* @param height
* @return
*/
long getUserCount(HashDigest ledgerHash, long height); long getUserCount(HashDigest ledgerHash, long height);
/**
* 返回指定区块中的用户总数
*
* @param ledgerHash
* @param blockHash
* @return
*/
/**
* 返回指定区块中的用户总数
*
* @param ledgerHash
* @param blockHash
* @return
*/
long getUserCount(HashDigest ledgerHash, HashDigest blockHash); long getUserCount(HashDigest ledgerHash, HashDigest blockHash);
/**
* 返回当前账本的用户总数
*
* @param ledgerHash
* @return
*/
long getUserTotalCount(HashDigest ledgerHash);
/**
* 返回指定高度区块中的合约总数
*
* @param ledgerHash
* @param height
* @return
*/
long getContractCount(HashDigest ledgerHash, long height);
/**
* 返回指定区块中的合约总数
*
* @param ledgerHash
* @param blockHash
* @return
*/
long getContractCount(HashDigest ledgerHash, HashDigest blockHash);
/**
* 返回当前账本的合约总数
*
* @param ledgerHash
* @return
*/
long getContractTotalCount(HashDigest ledgerHash);
/**
* 返回当前账本的用户总数
*
* @param ledgerHash
* @return
*/
long getUserTotalCount(HashDigest ledgerHash);
/** /**
* 分页返回指定账本序号的区块中的交易列表;
* 返回指定高度区块中的合约总数
* *
* @param ledgerHash * @param ledgerHash
* 账本hash;
* @param height * @param height
* 账本高度;
* @param fromIndex
* 开始的记录数;
* @param count
* 本次返回的记录数;<br>
* 最小为1,最大值受到系统参数的限制;<br>
* 注:通过 {@link #getBlock(String, long)} 方法获得的区块信息中可以得到区块的总交易数
* {@link Block#getTxCount()};
* @return * @return
*/ */
LedgerTransaction[] getTransactions(HashDigest ledgerHash, long height, int fromIndex, int count);
long getContractCount(HashDigest ledgerHash, long height);
/** /**
* 分页返回指定账本序号的区块中的交易列表;
* 返回指定区块中的合约总数
* *
* @param ledgerHash * @param ledgerHash
* 账本hash;
* @param blockHash * @param blockHash
* 账本高度;
* @param fromIndex
* 开始的记录数;
* @param count
* 本次返回的记录数;<br>
* 如果参数值为 -1,则返回全部的记录;<br>
* 注:通过 {@link #getBlock(String, String)} 方法获得的区块信息中可以得到区块的总交易数
* {@link Block#getTxCount()};
* @return
*/
long getContractCount(HashDigest ledgerHash, HashDigest blockHash);
/**
* 返回当前账本的合约总数
*
* @param ledgerHash
* @return
*/
long getContractTotalCount(HashDigest ledgerHash);
/**
* 分页返回指定账本序号的区块中的交易列表;
*
* @param ledgerHash 账本hash;
* @param height 账本高度;
* @param fromIndex 开始的记录数;
* @param count 本次返回的记录数;<br>
* 最小为1,最大值受到系统参数的限制;<br>
* 注:通过 {@link #getBlock(String, long)} 方法获得的区块信息中可以得到区块的总交易数
* {@link Block#getTxCount()};
* @return
*/
LedgerTransaction[] getTransactions(HashDigest ledgerHash, long height, int fromIndex, int count);
/**
* 分页返回指定账本序号的区块中的交易列表;
*
* @param ledgerHash 账本hash;
* @param blockHash 账本高度;
* @param fromIndex 开始的记录数;
* @param count 本次返回的记录数;<br>
* 如果参数值为 -1,则返回全部的记录;<br>
* 注:通过 {@link #getBlock(String, String)}
* 方法获得的区块信息中可以得到区块的总交易数 {@link Block#getTxCount()};
* @return * @return
*/ */
LedgerTransaction[] getTransactions(HashDigest ledgerHash, HashDigest blockHash, int fromIndex, int count); LedgerTransaction[] getTransactions(HashDigest ledgerHash, HashDigest blockHash, int fromIndex, int count);
@@ -210,21 +219,17 @@ public interface BlockchainQueryService {
/** /**
* 根据交易内容的哈希获取对应的交易记录; * 根据交易内容的哈希获取对应的交易记录;
* *
* @param ledgerHash
* 账本hash;
* @param contentHash
* 交易内容的hash,即交易的 {@link Transaction#getContentHash()} 属性的值;
* @param ledgerHash 账本hash;
* @param contentHash 交易内容的hash,即交易的 {@link Transaction#getContentHash()} 属性的值;
* @return * @return
*/ */
LedgerTransaction getTransactionByContentHash(HashDigest ledgerHash, HashDigest contentHash); LedgerTransaction getTransactionByContentHash(HashDigest ledgerHash, HashDigest contentHash);
/** /**
* 根据交易内容的哈希获取对应的交易状态; * 根据交易内容的哈希获取对应的交易状态;
* *
* @param ledgerHash
* 账本hash;
* @param contentHash
* 交易内容的hash,即交易的 {@link Transaction#getContentHash()} 属性的值;
* @param ledgerHash 账本hash;
* @param contentHash 交易内容的hash,即交易的 {@link Transaction#getContentHash()} 属性的值;
* @return * @return
*/ */
TransactionState getTransactionStateByContentHash(HashDigest ledgerHash, HashDigest contentHash); TransactionState getTransactionStateByContentHash(HashDigest ledgerHash, HashDigest contentHash);
@@ -273,18 +278,13 @@ public interface BlockchainQueryService {
long getDataEntriesTotalCount(HashDigest ledgerHash, String address); long getDataEntriesTotalCount(HashDigest ledgerHash, String address);
/** /**
* 返回数据账户中指定序号的最新值;
* 返回结果的顺序与指定的序号的顺序是一致的;<br>
* 返回数据账户中指定序号的最新值; 返回结果的顺序与指定的序号的顺序是一致的;<br>
* *
* @param ledgerHash
* 账本hash;
* @param address
* 数据账户地址;
* @param fromIndex
* 开始的记录数;
* @param count
* 本次返回的记录数;<br>
* 如果参数值为 -1,则返回全部的记录;<br>
* @param ledgerHash 账本hash;
* @param address 数据账户地址;
* @param fromIndex 开始的记录数;
* @param count 本次返回的记录数;<br>
* 如果参数值为 -1,则返回全部的记录;<br>
* @return * @return
*/ */
KVDataEntry[] getDataEntries(HashDigest ledgerHash, String address, int fromIndex, int count); KVDataEntry[] getDataEntries(HashDigest ledgerHash, String address, int fromIndex, int count);
@@ -300,6 +300,7 @@ public interface BlockchainQueryService {
/** /**
* get users by ledgerHash and its range; * get users by ledgerHash and its range;
*
* @param ledgerHash * @param ledgerHash
* @param fromIndex * @param fromIndex
* @param count * @param count
@@ -309,6 +310,7 @@ public interface BlockchainQueryService {
/** /**
* get data accounts by ledgerHash and its range; * get data accounts by ledgerHash and its range;
*
* @param ledgerHash * @param ledgerHash
* @param fromIndex * @param fromIndex
* @param count * @param count
@@ -318,6 +320,7 @@ public interface BlockchainQueryService {
/** /**
* get contract accounts by ledgerHash and its range; * get contract accounts by ledgerHash and its range;
*
* @param ledgerHash * @param ledgerHash
* @param fromIndex * @param fromIndex
* @param count * @param count


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

@@ -17,7 +17,6 @@ import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.core.ContractAccountSet; import com.jd.blockchain.ledger.core.ContractAccountSet;
import com.jd.blockchain.ledger.core.DataAccount; import com.jd.blockchain.ledger.core.DataAccount;
import com.jd.blockchain.ledger.core.DataAccountSet; import com.jd.blockchain.ledger.core.DataAccountSet;
import com.jd.blockchain.ledger.core.LedgerAdministration;
import com.jd.blockchain.ledger.core.LedgerRepository; import com.jd.blockchain.ledger.core.LedgerRepository;
import com.jd.blockchain.ledger.core.LedgerService; import com.jd.blockchain.ledger.core.LedgerService;
import com.jd.blockchain.ledger.core.ParticipantCertData; import com.jd.blockchain.ledger.core.ParticipantCertData;
@@ -57,7 +56,7 @@ public class LedgerQueryController implements BlockchainQueryService {
@Override @Override
public ParticipantNode[] getConsensusParticipants(@PathVariable(name = "ledgerHash") HashDigest ledgerHash) { public ParticipantNode[] getConsensusParticipants(@PathVariable(name = "ledgerHash") HashDigest ledgerHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerAdministration ledgerAdministration = ledger.getAdminInfo();
LedgerAdminInfo ledgerAdministration = ledger.getAdminInfo();
long participantCount = ledgerAdministration.getParticipantCount(); long participantCount = ledgerAdministration.getParticipantCount();
if (participantCount <= 0) { if (participantCount <= 0) {
return null; return null;
@@ -73,12 +72,20 @@ public class LedgerQueryController implements BlockchainQueryService {
} }
return null; return null;
} }
@RequestMapping(method = RequestMethod.GET, path = "ledgers/{ledgerHash}/admininfo")
@Override
public LedgerAdminInfo getLedgerAdminInfo(@PathVariable(name = "ledgerHash") HashDigest ledgerHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerAdminInfo ledgerAdministration = ledger.getAdminInfo();
return ledgerAdministration;
}


@RequestMapping(method = RequestMethod.GET, path = "ledgers/{ledgerHash}/metadata") @RequestMapping(method = RequestMethod.GET, path = "ledgers/{ledgerHash}/metadata")
@Override @Override
public LedgerMetadata getLedgerMetadata(@PathVariable(name = "ledgerHash") HashDigest ledgerHash) { public LedgerMetadata getLedgerMetadata(@PathVariable(name = "ledgerHash") HashDigest ledgerHash) {
LedgerRepository ledger = ledgerService.getLedger(ledgerHash); LedgerRepository ledger = ledgerService.getLedger(ledgerHash);
LedgerAdministration ledgerAdministration = ledger.getAdminInfo();
LedgerAdminInfo ledgerAdministration = ledger.getAdminInfo();
LedgerMetadata ledgerMetadata = ledgerAdministration.getMetadata(); LedgerMetadata ledgerMetadata = ledgerAdministration.getMetadata();
return ledgerMetadata; return ledgerMetadata;
} }


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

@@ -37,6 +37,7 @@ import com.jd.blockchain.ledger.CryptoSetting;
import com.jd.blockchain.ledger.DataAccountKVSetOperation; import com.jd.blockchain.ledger.DataAccountKVSetOperation;
import com.jd.blockchain.ledger.DataAccountRegisterOperation; import com.jd.blockchain.ledger.DataAccountRegisterOperation;
import com.jd.blockchain.ledger.EndpointRequest; import com.jd.blockchain.ledger.EndpointRequest;
import com.jd.blockchain.ledger.LedgerAdminInfo;
import com.jd.blockchain.ledger.LedgerBlock; import com.jd.blockchain.ledger.LedgerBlock;
import com.jd.blockchain.ledger.LedgerInitOperation; import com.jd.blockchain.ledger.LedgerInitOperation;
import com.jd.blockchain.ledger.NodeRequest; import com.jd.blockchain.ledger.NodeRequest;
@@ -121,6 +122,8 @@ public class ManagementController implements LedgerBindingConfigAware, PeerManag
DataContractRegistry.register(BftsmartConsensusSettings.class); DataContractRegistry.register(BftsmartConsensusSettings.class);
DataContractRegistry.register(BftsmartNodeSettings.class); DataContractRegistry.register(BftsmartNodeSettings.class);
DataContractRegistry.register(LedgerAdminInfo.class);
} }
@@ -225,10 +228,10 @@ public class ManagementController implements LedgerBindingConfigAware, PeerManag
// load provider; // load provider;
LedgerAdminAccount ledgerAdminAccount = ledgerRepository.getAdminAccount(); LedgerAdminAccount ledgerAdminAccount = ledgerRepository.getAdminAccount();
String consensusProvider = ledgerAdminAccount.getSetting().getConsensusProvider();
String consensusProvider = ledgerAdminAccount.getSettings().getConsensusProvider();
ConsensusProvider provider = ConsensusProviders.getProvider(consensusProvider); ConsensusProvider provider = ConsensusProviders.getProvider(consensusProvider);
// find current node; // find current node;
Bytes csSettingBytes = ledgerAdminAccount.getSetting().getConsensusSetting();
Bytes csSettingBytes = ledgerAdminAccount.getSettings().getConsensusSetting();
ConsensusSettings csSettings = provider.getSettingsFactory().getConsensusSettingsEncoder() ConsensusSettings csSettings = provider.getSettingsFactory().getConsensusSettingsEncoder()
.decode(csSettingBytes.toBytes()); .decode(csSettingBytes.toBytes());
NodeSettings currentNode = null; NodeSettings currentNode = null;
@@ -247,7 +250,7 @@ public class ManagementController implements LedgerBindingConfigAware, PeerManag
NodeServer server = provider.getServerFactory().setupServer(serverSettings, consensusMessageHandler, NodeServer server = provider.getServerFactory().setupServer(serverSettings, consensusMessageHandler,
consensusStateManager); consensusStateManager);
ledgerPeers.put(ledgerHash, server); ledgerPeers.put(ledgerHash, server);
ledgerCryptoSettings.put(ledgerHash, ledgerAdminAccount.getSetting().getCryptoSetting());
ledgerCryptoSettings.put(ledgerHash, ledgerAdminAccount.getSettings().getCryptoSetting());
return server; return server;
} }


+ 5
- 0
source/sdk/sdk-base/src/main/java/com/jd/blockchain/sdk/proxy/BlockchainServiceProxy.java View File

@@ -32,6 +32,11 @@ public abstract class BlockchainServiceProxy implements BlockchainService {
public LedgerInfo getLedger(HashDigest ledgerHash) { public LedgerInfo getLedger(HashDigest ledgerHash) {
return getQueryService(ledgerHash).getLedger(ledgerHash); return getQueryService(ledgerHash).getLedger(ledgerHash);
} }
@Override
public LedgerAdminInfo getLedgerAdminInfo(HashDigest ledgerHash) {
return getQueryService(ledgerHash).getLedgerAdminInfo(ledgerHash);
}


@Override @Override
public ParticipantNode[] getConsensusParticipants(HashDigest ledgerHash) { public ParticipantNode[] getConsensusParticipants(HashDigest ledgerHash) {


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

@@ -21,7 +21,35 @@ import com.jd.blockchain.crypto.PubKey;
import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm;
import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; import com.jd.blockchain.crypto.service.classic.ClassicCryptoService;
import com.jd.blockchain.crypto.service.sm.SMCryptoService; import com.jd.blockchain.crypto.service.sm.SMCryptoService;
import com.jd.blockchain.ledger.*;
import com.jd.blockchain.ledger.AccountHeader;
import com.jd.blockchain.ledger.BlockchainIdentity;
import com.jd.blockchain.ledger.BlockchainKeyGenerator;
import com.jd.blockchain.ledger.BlockchainKeypair;
import com.jd.blockchain.ledger.ContractCodeDeployOperation;
import com.jd.blockchain.ledger.ContractEventSendOperation;
import com.jd.blockchain.ledger.ContractInfo;
import com.jd.blockchain.ledger.DataAccountKVSetOperation;
import com.jd.blockchain.ledger.DataAccountRegisterOperation;
import com.jd.blockchain.ledger.EndpointRequest;
import com.jd.blockchain.ledger.KVDataEntry;
import com.jd.blockchain.ledger.KVInfoVO;
import com.jd.blockchain.ledger.LedgerAdminInfo;
import com.jd.blockchain.ledger.LedgerBlock;
import com.jd.blockchain.ledger.LedgerInfo;
import com.jd.blockchain.ledger.LedgerMetadata;
import com.jd.blockchain.ledger.LedgerTransaction;
import com.jd.blockchain.ledger.NodeRequest;
import com.jd.blockchain.ledger.Operation;
import com.jd.blockchain.ledger.OperationResult;
import com.jd.blockchain.ledger.ParticipantNode;
import com.jd.blockchain.ledger.TransactionContent;
import com.jd.blockchain.ledger.TransactionContentBody;
import com.jd.blockchain.ledger.TransactionRequest;
import com.jd.blockchain.ledger.TransactionRequestBuilder;
import com.jd.blockchain.ledger.TransactionResponse;
import com.jd.blockchain.ledger.TransactionState;
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.CryptoConfig;
import com.jd.blockchain.ledger.core.LedgerDataSet; import com.jd.blockchain.ledger.core.LedgerDataSet;
import com.jd.blockchain.ledger.core.LedgerEditor; import com.jd.blockchain.ledger.core.LedgerEditor;
@@ -93,6 +121,8 @@ public class MockerNodeContext implements BlockchainQueryService {
DataContractRegistry.register(ActionResponse.class); DataContractRegistry.register(ActionResponse.class);
DataContractRegistry.register(ClientIdentifications.class); DataContractRegistry.register(ClientIdentifications.class);
DataContractRegistry.register(ClientIdentification.class); DataContractRegistry.register(ClientIdentification.class);
DataContractRegistry.register(LedgerAdminInfo.class);


ByteArrayObjectUtil.init(); ByteArrayObjectUtil.init();
} }
@@ -243,6 +273,11 @@ public class MockerNodeContext implements BlockchainQueryService {
public LedgerInfo getLedger(HashDigest ledgerHash) { public LedgerInfo getLedger(HashDigest ledgerHash) {
return queryService.getLedger(ledgerHash); return queryService.getLedger(ledgerHash);
} }
@Override
public LedgerAdminInfo getLedgerAdminInfo(HashDigest ledgerHash) {
return queryService.getLedgerAdminInfo(ledgerHash);
}


@Override @Override
public ParticipantNode[] getConsensusParticipants(HashDigest ledgerHash) { public ParticipantNode[] getConsensusParticipants(HashDigest ledgerHash) {


Loading…
Cancel
Save