diff --git a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/Crypto.java b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/Crypto.java index 654e86b4..2bca057a 100644 --- a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/Crypto.java +++ b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/Crypto.java @@ -139,7 +139,7 @@ public final class Crypto { public static CryptoProvider getProvider(String providerFullName) { Provider pd = pm.getProvider(CryptoService.class, providerFullName); if (pd == null) { - return null; + throw new CryptoException("Crypto service provider named [" + providerFullName + "] does not exist!"); } return getProviderInfo(pd); } diff --git a/source/deployment/deployment-peer/src/main/resources/config/init/ledger-init.conf b/source/deployment/deployment-peer/src/main/resources/config/init/ledger-init.conf deleted file mode 100644 index e6af54f4..00000000 --- a/source/deployment/deployment-peer/src/main/resources/config/init/ledger-init.conf +++ /dev/null @@ -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 - - diff --git a/source/deployment/deployment-peer/src/main/resources/config/init/ledger.init b/source/deployment/deployment-peer/src/main/resources/config/init/ledger.init new file mode 100644 index 00000000..9df38d79 --- /dev/null +++ b/source/deployment/deployment-peer/src/main/resources/config/init/ledger.init @@ -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 diff --git a/source/deployment/deployment-peer/src/main/resources/config/init/local.conf b/source/deployment/deployment-peer/src/main/resources/config/init/local.conf index b182823e..27652184 100644 --- a/source/deployment/deployment-peer/src/main/resources/config/init/local.conf +++ b/source/deployment/deployment-peer/src/main/resources/config/init/local.conf @@ -22,11 +22,3 @@ ledger.db.uri= #账本数据库的连接口令 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 diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerManagerTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerManagerTest.java index 9819c9b3..cdbece82 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerManagerTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerManagerTest.java @@ -59,7 +59,6 @@ public class LedgerManagerTest { DataContractRegistry.register(BlockBody.class); DataContractRegistry.register(CryptoProvider.class); } - public static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), SMCryptoService.class.getName() }; @@ -185,9 +184,9 @@ public class LedgerManagerTest { } CryptoConfig defCryptoSetting = new CryptoConfig(); - + defCryptoSetting.setSupportedProviders(supportedProviders); - + defCryptoSetting.setAutoVerifyHash(true); defCryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256); diff --git a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitSettingTest.java b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitPropertiesTest.java similarity index 72% rename from source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitSettingTest.java rename to source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitPropertiesTest.java index 02e4ca0a..3f926073 100644 --- a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitSettingTest.java +++ b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitPropertiesTest.java @@ -16,38 +16,42 @@ import com.jd.blockchain.tools.keygen.KeyGenCommand; import com.jd.blockchain.utils.codec.HexUtils; import test.com.jd.blockchain.intgr.IntegrationBase; -public class LedgerInitSettingTest { +public class LedgerInitPropertiesTest { @Test public void test() throws IOException { ClassPathResource ledgerInitSettingResource = new ClassPathResource("ledger.init"); InputStream in = ledgerInitSettingResource.getInputStream(); 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" .replace("-", ""); - String actualLedgerSeed = HexUtils.encode(setting.getLedgerSeed()); + String actualLedgerSeed = HexUtils.encode(initProps.getLedgerSeed()); 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("keys/jd-com.pub", part0.getPubKeyPath()); PubKey pubKey0 = KeyGenCommand.decodePubKey("3snPdw7i7PjVKiTH2VnXZu5H8QmNaSXpnk4ei533jFpuifyjS5zzH9"); 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(8800, part0.getInitializerAddress().getPort()); assertEquals(true, part0.getInitializerAddress().isSecure()); - ConsensusParticipantConfig part1 = setting.getConsensusParticipant(1); + ConsensusParticipantConfig part1 = initProps.getConsensusParticipant(1); assertEquals(false, part1.getInitializerAddress().isSecure()); PubKey pubKey1 = KeyGenCommand.decodePubKey("3snPdw7i7PajLB35tEau1kmixc6ZrjLXgxwKbkv5bHhP7nT5dhD9eX"); assertEquals(pubKey1, part1.getPubKey()); - ConsensusParticipantConfig part2 = setting.getConsensusParticipant(2); + ConsensusParticipantConfig part2 = initProps.getConsensusParticipant(2); assertEquals("7VeRAr3dSbi1xatq11ZcF7sEPkaMmtZhV9shonGJWk9T4pLe", part2.getPubKey().toBase58()); } finally { diff --git a/source/test/test-integration/src/test/resources/ledger.init b/source/test/test-integration/src/test/resources/ledger.init index 74dd2585..9df38d79 100644 --- a/source/test/test-integration/src/test/resources/ledger.init +++ b/source/test/test-integration/src/test/resources/ledger.init @@ -12,6 +12,11 @@ consensus.service-provider=com.jd.blockchain.consensus.bftsmart.BftsmartConsensu #共识服务的参数配置;必须; 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 diff --git a/source/test/test-integration/src/test/resources/ledger_init_test.init b/source/test/test-integration/src/test/resources/ledger_init_test.init index 2f4427ba..518d88c1 100644 --- a/source/test/test-integration/src/test/resources/ledger_init_test.init +++ b/source/test/test-integration/src/test/resources/ledger_init_test.init @@ -11,6 +11,10 @@ consensus.service-provider=com.jd.blockchain.consensus.bftsmart.BftsmartConsensu #共识服务的参数配置;必须; 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 diff --git a/source/test/test-integration/src/test/resources/ledger_init_test_web2.init b/source/test/test-integration/src/test/resources/ledger_init_test_web2.init index f661bd0e..73626947 100644 --- a/source/test/test-integration/src/test/resources/ledger_init_test_web2.init +++ b/source/test/test-integration/src/test/resources/ledger_init_test_web2.init @@ -11,6 +11,11 @@ consensus.service-provider=com.jd.blockchain.consensus.bftsmart.BftsmartConsensu #共识服务的参数配置;必须; 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 diff --git a/source/tools/tools-initializer/src/main/java/com/jd/blockchain/tools/initializer/LedgerInitProperties.java b/source/tools/tools-initializer/src/main/java/com/jd/blockchain/tools/initializer/LedgerInitProperties.java index 98dc5523..2ee028b2 100644 --- a/source/tools/tools-initializer/src/main/java/com/jd/blockchain/tools/initializer/LedgerInitProperties.java +++ b/source/tools/tools-initializer/src/main/java/com/jd/blockchain/tools/initializer/LedgerInitProperties.java @@ -45,9 +45,11 @@ public class LedgerInitProperties { // 共识服务提供者;必须; 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; @@ -57,8 +59,10 @@ public class LedgerInitProperties { private Properties consensusConfig; + private String[] cryptoProviders; + public byte[] getLedgerSeed() { - return ledgerSeed; + return ledgerSeed.clone(); } public Properties getConsensusConfig() { @@ -76,6 +80,14 @@ public class LedgerInitProperties { public List getConsensusParticipants() { 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 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)); if (partCount < 0) { diff --git a/source/tools/tools-initializer/src/main/resources/local.conf b/source/tools/tools-initializer/src/main/resources/local.conf index 9df0303c..dc7c7347 100644 --- a/source/tools/tools-initializer/src/main/resources/local.conf +++ b/source/tools/tools-initializer/src/main/resources/local.conf @@ -16,10 +16,3 @@ ledger.db.uri=redis://127.0.0.1/0 #账本数据库的连接口令; ledger.db.pwd= - -#共识协议的参数配置;必须参数; -consensus.conf=mq.config - -#共识协议的实现类型;必须参数; -consensus.service-provider=com.jd.blockchain.consensus.mq.MsgQueueConsensusProvider -