Browse Source

Completed configuring crypto service provider in ledger.init file;

tags/1.0.0
huanghaiquan 5 years ago
parent
commit
e3b9d97f5e
11 changed files with 152 additions and 100 deletions
  1. +1
    -1
      source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/Crypto.java
  2. +0
    -67
      source/deployment/deployment-peer/src/main/resources/config/init/ledger-init.conf
  3. +97
    -0
      source/deployment/deployment-peer/src/main/resources/config/init/ledger.init
  4. +0
    -8
      source/deployment/deployment-peer/src/main/resources/config/init/local.conf
  5. +2
    -3
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerManagerTest.java
  6. +15
    -11
      source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitPropertiesTest.java
  7. +5
    -0
      source/test/test-integration/src/test/resources/ledger.init
  8. +4
    -0
      source/test/test-integration/src/test/resources/ledger_init_test.init
  9. +5
    -0
      source/test/test-integration/src/test/resources/ledger_init_test_web2.init
  10. +23
    -3
      source/tools/tools-initializer/src/main/java/com/jd/blockchain/tools/initializer/LedgerInitProperties.java
  11. +0
    -7
      source/tools/tools-initializer/src/main/resources/local.conf

+ 1
- 1
source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/Crypto.java View File

@@ -139,7 +139,7 @@ public final class Crypto {
public static CryptoProvider getProvider(String providerFullName) { public static CryptoProvider getProvider(String providerFullName) {
Provider<CryptoService> pd = pm.getProvider(CryptoService.class, providerFullName); Provider<CryptoService> pd = pm.getProvider(CryptoService.class, providerFullName);
if (pd == null) { if (pd == null) {
return null;
throw new CryptoException("Crypto service provider named [" + providerFullName + "] does not exist!");
} }
return getProviderInfo(pd); return getProviderInfo(pd);
} }


+ 0
- 67
source/deployment/deployment-peer/src/main/resources/config/init/ledger-init.conf View File

@@ -1,67 +0,0 @@
#账本的种子;一段16进制字符,最长可以包含64个字符;可以用字符“-”分隔,以便更容易读取;
#不同的账本,种子不能相同
ledger.seed=932dfe23-fe23232f-283f32fa-dd32aa76-8322ca2f-56236cda-7136b322-cb323ffe

#账本的描述名称;此属性不参与共识,仅仅在当前参与方的本地节点用于描述用途;
#ledger.name=

#参与方的个数,后续以cons_parti.id分别标识每一个参与方的配置;
cons_parti.count=4


#第0个参与方的名称(不同参与方名称不能相同)
cons_parti.0.name=
#第0个参与方的公钥文件路径
cons_parti.0.pubkey-path=
#第0个参与方的公钥内容(由keygen工具生成),此参数优先于 pubkey-path 参数
cons_parti.0.pubkey=
#第0个参与方的账本初始服务的主机
cons_parti.0.initializer.host=127.0.0.1
#第0个参与方的账本初始服务的端口
cons_parti.0.initializer.port=17000
#第0个参与方的账本初始服务是否开启安全连接
cons_parti.0.initializer.secure=false


#第1个参与方的名称
cons_parti.1.name=
#第1个参与方的公钥文件路径
cons_parti.1.pubkey-path=
#第1个参与方的公钥内容(由keygen工具生成),此参数优先于 pubkey-path 参数
cons_parti.1.pubkey=
#第1个参与方的账本初始服务的主机
cons_parti.1.initializer.host=127.0.0.1
#第1个参与方的账本初始服务的端口
cons_parti.1.initializer.port=17010
#第1个参与方的账本初始服务是否开启安全连接
cons_parti.1.initializer.secure=false


#第2个参与方的名称
cons_parti.2.name=
#第2个参与方的公钥文件路径
cons_parti.2.pubkey-path=
#第2个参与方的公钥内容(由keygen工具生成),此参数优先于 pubkey-path 参数
cons_parti.2.pubkey=
#第2个参与方的账本初始服务的主机
cons_parti.2.initializer.host=127.0.0.1
#第2个参与方的账本初始服务的端口
cons_parti.2.initializer.port=17020
#第2个参与方的账本初始服务是否开启安全连接
cons_parti.2.initializer.secure=false


#第3个参与方的名称
cons_parti.3.name=
#第3个参与方的公钥文件路径
cons_parti.3.pubkey-path=
#第3个参与方的公钥内容(由keygen工具生成),此参数优先于 pubkey-path 参数
cons_parti.3.pubkey=
#第3个参与方的账本初始服务的主机
cons_parti.3.initializer.host=127.0.0.1
#第3个参与方的账本初始服务的端口
cons_parti.3.initializer.port=17030
#第3个参与方的账本初始服务是否开启安全连接
cons_parti.3.initializer.secure=false



+ 97
- 0
source/deployment/deployment-peer/src/main/resources/config/init/ledger.init View File

@@ -0,0 +1,97 @@

#账本的种子;一段16进制字符,最长可以包含64个字符;可以用字符“-”分隔,以便更容易读取;
ledger.seed=932dfe23-fe23232f-283f32fa-dd32aa76-8322ca2f-56236cda-7136b322-cb323ffe

#账本的描述名称;此属性不参与共识,仅仅在当前参与方的本地节点用于描述用途;
ledger.name=


#共识服务提供者;必须;
consensus.service-provider=com.jd.blockchain.consensus.bftsmart.BftsmartConsensusProvider

#共识服务的参数配置;必须;
consensus.conf=classpath:bftsmart.config

#密码服务提供者列表,以英文逗点“,”分隔;必须;
crypto.service-providers=com.jd.blockchain.crypto.service.classic.ClassicCryptoService, \
com.jd.blockchain.crypto.service.sm.SMCryptoService


#参与方的个数,后续以 cons_parti.id 分别标识每一个参与方的配置;
cons_parti.count=4

#第0个参与方的名称;
cons_parti.0.name=jd.com
#第0个参与方的公钥文件路径;
cons_parti.0.pubkey-path=keys/jd-com.pub
#第0个参与方的公钥内容(由keygen工具生成);此参数优先于 pubkey-path 参数;
cons_parti.0.pubkey=3snPdw7i7PjVKiTH2VnXZu5H8QmNaSXpnk4ei533jFpuifyjS5zzH9
#第0个参与方的共识服务的主机地址;
cons_parti.0.consensus.host=127.0.0.1
#第0个参与方的共识服务的端口;
cons_parti.0.consensus.port=8900
#第0个参与方的共识服务是否开启安全连接;
cons_parti.0.consensus.secure=true
#第0个参与方的账本初始服务的主机;
cons_parti.0.initializer.host=127.0.0.1
#第0个参与方的账本初始服务的端口;
cons_parti.0.initializer.port=8800
#第0个参与方的账本初始服务是否开启安全连接;
cons_parti.0.initializer.secure=true

#第1个参与方的名称;
cons_parti.1.name=at.com
#第1个参与方的公钥文件路径;
cons_parti.1.pubkey-path=keys/at-com.pub
#第1个参与方的公钥内容(由keygen工具生成);此参数优先于 pubkey-path 参数;
cons_parti.1.pubkey=3snPdw7i7PajLB35tEau1kmixc6ZrjLXgxwKbkv5bHhP7nT5dhD9eX
#第1个参与方的共识服务的主机地址;
cons_parti.1.consensus.host=127.0.0.1
#第1个参与方的共识服务的端口;
cons_parti.1.consensus.port=8910
#第1个参与方的共识服务是否开启安全连接;
cons_parti.1.consensus.secure=false
#第1个参与方的账本初始服务的主机;
cons_parti.1.initializer.host=127.0.0.1
#第1个参与方的账本初始服务的端口;
cons_parti.1.initializer.port=8810
#第1个参与方的账本初始服务是否开启安全连接;
cons_parti.1.initializer.secure=false

#第2个参与方的名称;
cons_parti.2.name=bt.com
#第2个参与方的公钥文件路径;
cons_parti.2.pubkey-path=classpath:keys/parti2.pub
#第2个参与方的公钥内容(由keygen工具生成);此参数优先于 pubkey-path 参数;
cons_parti.2.pubkey=
#第2个参与方的共识服务的主机地址;
cons_parti.2.consensus.host=127.0.0.1
#第2个参与方的共识服务的端口;
cons_parti.2.consensus.port=8920
#第2个参与方的共识服务是否开启安全连接;
cons_parti.2.consensus.secure=false
#第2个参与方的账本初始服务的主机;
cons_parti.2.initializer.host=127.0.0.1
#第2个参与方的账本初始服务的端口;
cons_parti.2.initializer.port=8820
#第2个参与方的账本初始服务是否开启安全连接;
cons_parti.2.initializer.secure=true

#第3个参与方的名称;
cons_parti.3.name=xt.com
#第3个参与方的公钥文件路径;
cons_parti.3.pubkey-path=keys/xt-com.pub
#第3个参与方的公钥内容(由keygen工具生成);此参数优先于 pubkey-path 参数;
cons_parti.3.pubkey=3snPdw7i7PifPuRX7fu3jBjsb3rJRfDe9GtbDfvFJaJ4V4hHXQfhwk
#第3个参与方的共识服务的主机地址;
cons_parti.3.consensus.host=127.0.0.1
#第3个参与方的共识服务的端口;
cons_parti.3.consensus.port=8930
#第3个参与方的共识服务是否开启安全连接;
cons_parti.3.consensus.secure=false
#第3个参与方的账本初始服务的主机;
cons_parti.3.initializer.host=127.0.0.1
#第3个参与方的账本初始服务的端口;
cons_parti.3.initializer.port=8830
#第3个参与方的账本初始服务是否开启安全连接;
cons_parti.3.initializer.secure=false

+ 0
- 8
source/deployment/deployment-peer/src/main/resources/config/init/local.conf View File

@@ -22,11 +22,3 @@ ledger.db.uri=
#账本数据库的连接口令 #账本数据库的连接口令
ledger.db.pwd= ledger.db.pwd=


#共识配置文件路径
#推荐使用绝对路径,相对路径以当前文件(local.conf)所在目录为基准
consensus.conf=bftsmart.config

#共识Providers配置
#BftSmart共识Provider:com.jd.blockchain.consensus.bftsmart.BftsmartConsensusProvider
#简单消息共识Provider:com.jd.blockchain.consensus.mq.MsgQueueConsensusProvider
consensus.service-provider=com.jd.blockchain.consensus.bftsmart.BftsmartConsensusProvider

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

@@ -59,7 +59,6 @@ public class LedgerManagerTest {
DataContractRegistry.register(BlockBody.class); DataContractRegistry.register(BlockBody.class);
DataContractRegistry.register(CryptoProvider.class); DataContractRegistry.register(CryptoProvider.class);
} }


public static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), public static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(),
SMCryptoService.class.getName() }; SMCryptoService.class.getName() };
@@ -185,9 +184,9 @@ public class LedgerManagerTest {
} }


CryptoConfig defCryptoSetting = new CryptoConfig(); CryptoConfig defCryptoSetting = new CryptoConfig();
defCryptoSetting.setSupportedProviders(supportedProviders); defCryptoSetting.setSupportedProviders(supportedProviders);
defCryptoSetting.setAutoVerifyHash(true); defCryptoSetting.setAutoVerifyHash(true);
defCryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256); defCryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256);




source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitSettingTest.java → source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitPropertiesTest.java View File

@@ -16,38 +16,42 @@ import com.jd.blockchain.tools.keygen.KeyGenCommand;
import com.jd.blockchain.utils.codec.HexUtils; import com.jd.blockchain.utils.codec.HexUtils;
import test.com.jd.blockchain.intgr.IntegrationBase; import test.com.jd.blockchain.intgr.IntegrationBase;


public class LedgerInitSettingTest {
public class LedgerInitPropertiesTest {


@Test @Test
public void test() throws IOException { public void test() throws IOException {
ClassPathResource ledgerInitSettingResource = new ClassPathResource("ledger.init"); ClassPathResource ledgerInitSettingResource = new ClassPathResource("ledger.init");
InputStream in = ledgerInitSettingResource.getInputStream(); InputStream in = ledgerInitSettingResource.getInputStream();
try { try {
LedgerInitProperties setting = LedgerInitProperties.resolve(in);
assertEquals(4, setting.getConsensusParticipantCount());
LedgerInitProperties initProps = LedgerInitProperties.resolve(in);
assertEquals(4, initProps.getConsensusParticipantCount());
String expectedLedgerSeed = "932dfe23-fe23232f-283f32fa-dd32aa76-8322ca2f-56236cda-7136b322-cb323ffe" String expectedLedgerSeed = "932dfe23-fe23232f-283f32fa-dd32aa76-8322ca2f-56236cda-7136b322-cb323ffe"
.replace("-", ""); .replace("-", "");
String actualLedgerSeed = HexUtils.encode(setting.getLedgerSeed());
String actualLedgerSeed = HexUtils.encode(initProps.getLedgerSeed());
assertEquals(expectedLedgerSeed, actualLedgerSeed); assertEquals(expectedLedgerSeed, actualLedgerSeed);


ConsensusParticipantConfig part0 = setting.getConsensusParticipant(0);
assertEquals("com.jd.blockchain.consensus.bftsmart.BftsmartConsensusProvider",
initProps.getConsensusProvider());

String[] cryptoProviders = initProps.getCryptoProviders();
assertEquals(2, cryptoProviders.length);
assertEquals("com.jd.blockchain.crypto.service.classic.ClassicCryptoService", cryptoProviders[0]);
assertEquals("com.jd.blockchain.crypto.service.sm.SMCryptoService", cryptoProviders[1]);

ConsensusParticipantConfig part0 = initProps.getConsensusParticipant(0);
assertEquals("jd.com", part0.getName()); assertEquals("jd.com", part0.getName());
// assertEquals("keys/jd-com.pub", part0.getPubKeyPath());
PubKey pubKey0 = KeyGenCommand.decodePubKey("3snPdw7i7PjVKiTH2VnXZu5H8QmNaSXpnk4ei533jFpuifyjS5zzH9"); PubKey pubKey0 = KeyGenCommand.decodePubKey("3snPdw7i7PjVKiTH2VnXZu5H8QmNaSXpnk4ei533jFpuifyjS5zzH9");
assertEquals(pubKey0, part0.getPubKey()); assertEquals(pubKey0, part0.getPubKey());
// assertEquals("127.0.0.1", part0.getConsensusAddress().getHost());
// assertEquals(8900, part0.getConsensusAddress().getPort());
// assertEquals(true, part0.getConsensusAddress().isSecure());
assertEquals("127.0.0.1", part0.getInitializerAddress().getHost()); assertEquals("127.0.0.1", part0.getInitializerAddress().getHost());
assertEquals(8800, part0.getInitializerAddress().getPort()); assertEquals(8800, part0.getInitializerAddress().getPort());
assertEquals(true, part0.getInitializerAddress().isSecure()); assertEquals(true, part0.getInitializerAddress().isSecure());


ConsensusParticipantConfig part1 = setting.getConsensusParticipant(1);
ConsensusParticipantConfig part1 = initProps.getConsensusParticipant(1);
assertEquals(false, part1.getInitializerAddress().isSecure()); assertEquals(false, part1.getInitializerAddress().isSecure());
PubKey pubKey1 = KeyGenCommand.decodePubKey("3snPdw7i7PajLB35tEau1kmixc6ZrjLXgxwKbkv5bHhP7nT5dhD9eX"); PubKey pubKey1 = KeyGenCommand.decodePubKey("3snPdw7i7PajLB35tEau1kmixc6ZrjLXgxwKbkv5bHhP7nT5dhD9eX");
assertEquals(pubKey1, part1.getPubKey()); assertEquals(pubKey1, part1.getPubKey());


ConsensusParticipantConfig part2 = setting.getConsensusParticipant(2);
ConsensusParticipantConfig part2 = initProps.getConsensusParticipant(2);
assertEquals("7VeRAr3dSbi1xatq11ZcF7sEPkaMmtZhV9shonGJWk9T4pLe", part2.getPubKey().toBase58()); assertEquals("7VeRAr3dSbi1xatq11ZcF7sEPkaMmtZhV9shonGJWk9T4pLe", part2.getPubKey().toBase58());


} finally { } finally {

+ 5
- 0
source/test/test-integration/src/test/resources/ledger.init View File

@@ -12,6 +12,11 @@ consensus.service-provider=com.jd.blockchain.consensus.bftsmart.BftsmartConsensu
#共识服务的参数配置;必须; #共识服务的参数配置;必须;
consensus.conf=classpath:bftsmart.config consensus.conf=classpath:bftsmart.config


#密码服务提供者列表,以英文逗点“,”分隔;必须;
crypto.service-providers=com.jd.blockchain.crypto.service.classic.ClassicCryptoService, \
com.jd.blockchain.crypto.service.sm.SMCryptoService


#参与方的个数,后续以 cons_parti.id 分别标识每一个参与方的配置; #参与方的个数,后续以 cons_parti.id 分别标识每一个参与方的配置;
cons_parti.count=4 cons_parti.count=4




+ 4
- 0
source/test/test-integration/src/test/resources/ledger_init_test.init View File

@@ -11,6 +11,10 @@ consensus.service-provider=com.jd.blockchain.consensus.bftsmart.BftsmartConsensu
#共识服务的参数配置;必须; #共识服务的参数配置;必须;
consensus.conf=classpath:bftsmart.config consensus.conf=classpath:bftsmart.config


#密码服务提供者列表,以英文逗点“,”分隔;必须;
crypto.service-providers=com.jd.blockchain.crypto.service.classic.ClassicCryptoService, \
com.jd.blockchain.crypto.service.sm.SMCryptoService

#参与方的个数,后续以 cons_parti.id 分别标识每一个参与方的配置; #参与方的个数,后续以 cons_parti.id 分别标识每一个参与方的配置;
cons_parti.count=4 cons_parti.count=4




+ 5
- 0
source/test/test-integration/src/test/resources/ledger_init_test_web2.init View File

@@ -11,6 +11,11 @@ consensus.service-provider=com.jd.blockchain.consensus.bftsmart.BftsmartConsensu
#共识服务的参数配置;必须; #共识服务的参数配置;必须;
consensus.conf=classpath:bftsmart.config consensus.conf=classpath:bftsmart.config


#密码服务提供者列表,以英文逗点“,”分隔;必须;
crypto.service-providers=com.jd.blockchain.crypto.service.classic.ClassicCryptoService, \
com.jd.blockchain.crypto.service.sm.SMCryptoService


#参与方的个数,后续以 cons_parti.id 分别标识每一个参与方的配置; #参与方的个数,后续以 cons_parti.id 分别标识每一个参与方的配置;
cons_parti.count=4 cons_parti.count=4




+ 23
- 3
source/tools/tools-initializer/src/main/java/com/jd/blockchain/tools/initializer/LedgerInitProperties.java View File

@@ -45,9 +45,11 @@ public class LedgerInitProperties {


// 共识服务提供者;必须; // 共识服务提供者;必须;
public static final String CONSENSUS_SERVICE_PROVIDER = "consensus.service-provider"; public static final String CONSENSUS_SERVICE_PROVIDER = "consensus.service-provider";
// 密码服务提供者列表,以英文逗点“,”分隔;必须; // 密码服务提供者列表,以英文逗点“,”分隔;必须;
public static final String CRYPTO_SERVICE_PROVIDER = "crypto.service-providers";
public static final String CRYPTO_SERVICE_PROVIDERS = "crypto.service-providers";

public static final String CRYPTO_SERVICE_PROVIDERS_SPLITTER = ",";


private byte[] ledgerSeed; private byte[] ledgerSeed;


@@ -57,8 +59,10 @@ public class LedgerInitProperties {


private Properties consensusConfig; private Properties consensusConfig;


private String[] cryptoProviders;

public byte[] getLedgerSeed() { public byte[] getLedgerSeed() {
return ledgerSeed;
return ledgerSeed.clone();
} }


public Properties getConsensusConfig() { public Properties getConsensusConfig() {
@@ -76,6 +80,14 @@ public class LedgerInitProperties {
public List<ConsensusParticipantConfig> getConsensusParticipants() { public List<ConsensusParticipantConfig> getConsensusParticipants() {
return consensusParticipants; return consensusParticipants;
} }
public String[] getCryptoProviders() {
return cryptoProviders.clone();
}
public void setCryptoProviders(String[] cryptoProviders) {
this.cryptoProviders = cryptoProviders;
}


/** /**
* 返回参与者; * 返回参与者;
@@ -131,6 +143,14 @@ public class LedgerInitProperties {
String.format("Consensus config file[%s] doesn't exist! ", consensusConfigFilePath), e); String.format("Consensus config file[%s] doesn't exist! ", consensusConfigFilePath), e);
} }


// 解析密码提供者列表;
String cryptoProviderNames = PropertiesUtils.getProperty(props, CRYPTO_SERVICE_PROVIDERS, true);
String[] cryptoProviders = cryptoProviderNames.split(CRYPTO_SERVICE_PROVIDERS_SPLITTER);
for (int i = 0; i < cryptoProviders.length; i++) {
cryptoProviders[i] = cryptoProviders[i].trim();
}
initProps.cryptoProviders = cryptoProviders;

// 解析参与方节点列表; // 解析参与方节点列表;
int partCount = getInt(PropertiesUtils.getRequiredProperty(props, PART_COUNT)); int partCount = getInt(PropertiesUtils.getRequiredProperty(props, PART_COUNT));
if (partCount < 0) { if (partCount < 0) {


+ 0
- 7
source/tools/tools-initializer/src/main/resources/local.conf View File

@@ -16,10 +16,3 @@ ledger.db.uri=redis://127.0.0.1/0


#账本数据库的连接口令; #账本数据库的连接口令;
ledger.db.pwd= ledger.db.pwd=

#共识协议的参数配置;必须参数;
consensus.conf=mq.config

#共识协议的实现类型;必须参数;
consensus.service-provider=com.jd.blockchain.consensus.mq.MsgQueueConsensusProvider


Loading…
Cancel
Save