@@ -3,23 +3,23 @@ | |||
<dependency> | |||
<groupId>com.jd.blockchain</groupId> | |||
<artifactId>sdk-client</artifactId> | |||
<version>1.3.0.RELEASE</version> | |||
<version>1.4.0.RELEASE</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.jd.blockchain</groupId> | |||
<artifactId>contract-starter</artifactId> | |||
<version>1.3.0.RELEASE</version> | |||
<version>1.4.0.RELEASE</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.jd.blockchain</groupId> | |||
<artifactId>crypto-classic</artifactId> | |||
<version>1.3.0.RELEASE</version> | |||
<version>1.4.0.RELEASE</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.jd.blockchain</groupId> | |||
<artifactId>crypto-sm</artifactId> | |||
<version>1.3.0.RELEASE</version> | |||
<version>1.4.0.RELEASE</version> | |||
</dependency> | |||
``` | |||
# 2. 数据快速上链 | |||
@@ -1,6 +1,6 @@ | |||
# JDChain安装部署指南 | |||
本部署指南基于JDChain1.3.0.RELEASE版本来构建。 | |||
本部署指南基于JDChain1.4.0.RELEASE版本来构建。 | |||
## 1. 部署环境 | |||
### 1.1 系统部署结构 | |||
![部署结构](imgs/structure.png) | |||
@@ -6,7 +6,7 @@ | |||
<parent> | |||
<groupId>com.jd.blockchain</groupId> | |||
<artifactId>jdchain-samples</artifactId> | |||
<version>1.2.1.RELEASE</version> | |||
<version>1.4.0.RELEASE</version> | |||
</parent> | |||
<artifactId>contract-samples</artifactId> | |||
@@ -11,11 +11,11 @@ | |||
<groupId>com.jd.blockchain</groupId> | |||
<artifactId>jdchain-samples</artifactId> | |||
<version>1.2.1.RELEASE</version> | |||
<version>1.4.0.RELEASE</version> | |||
<packaging>pom</packaging> | |||
<properties> | |||
<framework.version>1.3.0.RELEASE</framework.version> | |||
<framework.version>1.4.0.RELEASE</framework.version> | |||
</properties> | |||
<modules> | |||
@@ -42,6 +42,21 @@ | |||
<artifactId>crypto-framework</artifactId> | |||
<version>${framework.version}</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.jd.blockchain</groupId> | |||
<artifactId>crypto-classic</artifactId> | |||
<version>${framework.version}</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.jd.blockchain</groupId> | |||
<artifactId>crypto-sm</artifactId> | |||
<version>${framework.version}</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.jd.blockchain</groupId> | |||
<artifactId>crypto-base</artifactId> | |||
<version>${framework.version}</version> | |||
</dependency> | |||
</dependencies> | |||
</dependencyManagement> | |||
@@ -5,7 +5,7 @@ | |||
<parent> | |||
<groupId>com.jd.blockchain</groupId> | |||
<artifactId>jdchain-samples</artifactId> | |||
<version>1.2.1.RELEASE</version> | |||
<version>1.4.0.RELEASE</version> | |||
</parent> | |||
<artifactId>sdk-samples</artifactId> | |||
@@ -23,6 +23,31 @@ | |||
<artifactId>contract-samples</artifactId> | |||
<version>${project.version}</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.jd.blockchain</groupId> | |||
<artifactId>crypto-base</artifactId> | |||
<version>1.4.0.RELEASE</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.jd.blockchain</groupId> | |||
<artifactId>crypto-framework</artifactId> | |||
<version>${framework.version}</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.jd.blockchain</groupId> | |||
<artifactId>crypto-classic</artifactId> | |||
<version>${framework.version}</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.jd.blockchain</groupId> | |||
<artifactId>crypto-sm</artifactId> | |||
<version>${framework.version}</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.jd.blockchain</groupId> | |||
<artifactId>crypto-utils-classic</artifactId> | |||
<version>${framework.version}</version> | |||
</dependency> | |||
</dependencies> | |||
<build> | |||
@@ -38,10 +38,7 @@ public class SDKDemo_ConfigureSecurity { | |||
// 注册相关class | |||
DataContractRegistry.register(TransactionContent.class); | |||
DataContractRegistry.register(TransactionContentBody.class); | |||
DataContractRegistry.register(TransactionRequest.class); | |||
DataContractRegistry.register(NodeRequest.class); | |||
DataContractRegistry.register(EndpointRequest.class); | |||
DataContractRegistry.register(TransactionResponse.class); | |||
PrivKey privKey = SDKDemo_Params.privkey1; | |||
@@ -64,7 +64,7 @@ public class SDKDemo_InsertData { | |||
// TX 准备就绪; | |||
PreparedTransaction prepTx = txTemp.prepare(); | |||
String txHash = ByteArray.toBase64(prepTx.getHash().toBytes()); | |||
String txHash = ByteArray.toBase64(prepTx.getTransactionHash().toBytes()); | |||
// 使用私钥进行签名; | |||
AsymmetricKeypair keyPair = getSponsorKey(); | |||
@@ -7,7 +7,6 @@ import com.jd.blockchain.ledger.BlockchainKeypair; | |||
import com.jd.blockchain.ledger.TypedKVEntry; | |||
import com.jd.blockchain.ledger.LedgerBlock; | |||
import com.jd.blockchain.ledger.LedgerTransaction; | |||
import com.jd.blockchain.ledger.Transaction; | |||
import com.jd.blockchain.sdk.BlockchainService; | |||
import com.jd.blockchain.sdk.client.GatewayServiceFactory; | |||
import com.jd.blockchain.utils.net.NetworkAddress; | |||
@@ -61,8 +60,8 @@ public class SDKDemo_Query { | |||
LedgerTransaction[] txList = service.getTransactions(LEDGER_HASH, ledgerNumber, 0, 100); | |||
// 根据交易的 hash 获得交易;注:客户端生成 PrepareTransaction 时得到交易hash; | |||
HashDigest txHash = txList[0].getTransactionContent().getHash(); | |||
Transaction tx = service.getTransactionByContentHash(LEDGER_HASH, txHash); | |||
HashDigest txHash = txList[0].getRequest().getTransactionHash(); | |||
LedgerTransaction tx = service.getTransactionByContentHash(LEDGER_HASH, txHash); | |||
// 获取数据; | |||
String commerceAccount = "GGhhreGeasdfasfUUfehf9932lkae99ds66jf=="; | |||
@@ -44,10 +44,7 @@ public class SDKDemo_RegistParticipant { | |||
service = serviceFactory.getBlockchainService(); | |||
DataContractRegistry.register(TransactionContent.class); | |||
DataContractRegistry.register(TransactionContentBody.class); | |||
DataContractRegistry.register(TransactionRequest.class); | |||
DataContractRegistry.register(NodeRequest.class); | |||
DataContractRegistry.register(EndpointRequest.class); | |||
DataContractRegistry.register(TransactionResponse.class); | |||
DataContractRegistry.register(ParticipantRegisterOperation.class); | |||
DataContractRegistry.register(ParticipantStateUpdateOperation.class); | |||
@@ -20,10 +20,7 @@ public class SDKDemo_RegisterAccount { | |||
} | |||
DataContractRegistry.register(TransactionContent.class); | |||
DataContractRegistry.register(TransactionContentBody.class); | |||
DataContractRegistry.register(TransactionRequest.class); | |||
DataContractRegistry.register(NodeRequest.class); | |||
DataContractRegistry.register(EndpointRequest.class); | |||
DataContractRegistry.register(TransactionResponse.class); | |||
BlockchainKeypair CLIENT_CERT = new BlockchainKeypair(SDKDemo_Params.pubKey0, SDKDemo_Params.privkey0); | |||
@@ -38,10 +38,7 @@ public class SDKDemo_RegisterUser { | |||
// 注册相关class | |||
DataContractRegistry.register(TransactionContent.class); | |||
DataContractRegistry.register(TransactionContentBody.class); | |||
DataContractRegistry.register(TransactionRequest.class); | |||
DataContractRegistry.register(NodeRequest.class); | |||
DataContractRegistry.register(EndpointRequest.class); | |||
DataContractRegistry.register(TransactionResponse.class); | |||
PrivKey privKey = SDKDemo_Params.privkey1; | |||
@@ -40,10 +40,7 @@ public class SDKDemo_Tx_Persistance { | |||
// 注册相关class | |||
DataContractRegistry.register(TransactionContent.class); | |||
DataContractRegistry.register(TransactionContentBody.class); | |||
DataContractRegistry.register(TransactionRequest.class); | |||
DataContractRegistry.register(NodeRequest.class); | |||
DataContractRegistry.register(EndpointRequest.class); | |||
DataContractRegistry.register(TransactionResponse.class); | |||
PrivKey privKey1 = SDKDemo_Params.privkey0; | |||
@@ -87,7 +84,7 @@ public class SDKDemo_Tx_Persistance { | |||
TransactionContent txContent = BinaryProtocol.decode(txContentBytes, TransactionContent.class); | |||
// 对交易内容签名; | |||
DigitalSignature signature1 = SignatureUtils.sign(txContent, keyPair1); | |||
DigitalSignature signature1 = SignatureUtils.sign(keyPair1.getAlgorithm(), txContent, keyPair1); | |||
// 根据交易内容重新准备交易; | |||
PreparedTransaction decodedPrepTx = blockchainService.prepareTransaction(txContent); | |||
@@ -0,0 +1,42 @@ | |||
package com.jd.blockchain.sdk.samples; | |||
import com.jd.blockchain.ledger.PreparedTransaction; | |||
import com.jd.blockchain.ledger.TransactionResponse; | |||
import com.jd.blockchain.ledger.TransactionTemplate; | |||
import com.jd.blockchain.utils.Property; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
public class SDK_ConsensusSettings_Update_Demo extends SDK_Base_Demo { | |||
public static void main(String[] args) { | |||
new SDK_ConsensusSettings_Update_Demo().updateSettings(); | |||
} | |||
public void updateSettings() { | |||
List<Property> properties = new ArrayList<Property>(); | |||
// 修改bftsmart.conf配置文件中的选项; | |||
properties.add(new Property("system.communication.useSenderThread", "false")); | |||
Property[] propertiesArray = properties.toArray(new Property[properties.size()]); | |||
TransactionTemplate txTpl = blockchainService.newTransaction(ledgerHash); | |||
txTpl.settings().update(propertiesArray); | |||
// TX 准备就绪; | |||
PreparedTransaction prepTx = txTpl.prepare(); | |||
// 使用私钥进行签名; | |||
prepTx.sign(adminKey); | |||
// 提交交易; | |||
TransactionResponse transactionResponse = prepTx.commit(); | |||
System.out.println(transactionResponse.isSuccess()); | |||
} | |||
} |
@@ -48,7 +48,7 @@ public class SDK_InsertData_Demo extends SDK_Base_Demo { | |||
LedgerTransaction[] txList = blockchainService.getTransactions(ledgerHash, ledgerNumber, 0, 100); | |||
// 遍历交易列表 | |||
for (LedgerTransaction ledgerTransaction : txList) { | |||
TransactionContent txContent = ledgerTransaction.getTransactionContent(); | |||
TransactionContent txContent = ledgerTransaction.getRequest().getTransactionContent(); | |||
Operation[] operations = txContent.getOperations(); | |||
if (operations != null && operations.length > 0) { | |||
for (Operation operation : operations) { | |||
@@ -101,7 +101,7 @@ public class SDK_InsertData_Demo extends SDK_Base_Demo { | |||
} | |||
//根据交易的 hash 获得交易;注:客户端生成 PrepareTransaction 时得到交易hash; | |||
HashDigest txHash = txList[0].getTransactionContent().getHash(); | |||
HashDigest txHash = txList[0].getRequest().getTransactionHash(); | |||
// Transaction tx = blockchainService.getTransactionByContentHash(ledgerHash, txHash); | |||
// String[] objKeys = new String[] { "x001", "x002" }; | |||
// KVDataEntry[] kvData = blockchainService.getDataEntries(ledgerHash, commerceAccount, objKeys); | |||
@@ -6,6 +6,8 @@ import java.io.File; | |||
import java.io.FileInputStream; | |||
import java.io.IOException; | |||
import com.jd.blockchain.crypto.base.DefaultCryptoEncoding; | |||
import com.jd.blockchain.crypto.base.HashDigestBytes; | |||
import org.junit.Before; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
@@ -286,7 +288,7 @@ public class SDK_Contract_Test { | |||
// TX 准备就绪; | |||
PreparedTransaction prepTx = txTemp.prepare(); | |||
String txHash = ByteArray.toBase64(prepTx.getHash().toBytes()); | |||
String txHash = ByteArray.toBase64(prepTx.getTransactionHash().toBytes()); | |||
// 使用私钥进行签名; | |||
AsymmetricKeypair keyPair = getSponsorKey(); | |||
@@ -297,7 +299,7 @@ public class SDK_Contract_Test { | |||
} | |||
private static HashDigest getLedgerHash() { | |||
return new HashDigest(Base58Utils.decode(ledgerAddress)); | |||
return new HashDigestBytes(DefaultCryptoEncoding.decodeAlgorithm(Base58Utils.decode(ledgerAddress)), Base58Utils.decode(ledgerAddress)); | |||
} | |||
/** | |||
@@ -10,6 +10,8 @@ package test.com.jd.blockchain.sdk.test; | |||
import static org.junit.Assert.assertEquals; | |||
import com.jd.blockchain.crypto.base.DefaultCryptoEncoding; | |||
import com.jd.blockchain.crypto.base.HashDigestBytes; | |||
import org.junit.Before; | |||
import org.junit.Test; | |||
@@ -21,11 +23,8 @@ import com.jd.blockchain.crypto.HashFunction; | |||
import com.jd.blockchain.crypto.SignatureFunction; | |||
import com.jd.blockchain.ledger.BlockchainKeyGenerator; | |||
import com.jd.blockchain.ledger.BlockchainKeypair; | |||
import com.jd.blockchain.ledger.EndpointRequest; | |||
import com.jd.blockchain.ledger.NodeRequest; | |||
import com.jd.blockchain.ledger.PreparedTransaction; | |||
import com.jd.blockchain.ledger.TransactionContent; | |||
import com.jd.blockchain.ledger.TransactionContentBody; | |||
import com.jd.blockchain.ledger.TransactionRequest; | |||
import com.jd.blockchain.ledger.TransactionResponse; | |||
import com.jd.blockchain.ledger.TransactionState; | |||
@@ -68,10 +67,7 @@ public class SDK_GateWay_BatchInsertData_Test_ { | |||
service = serviceFactory.getBlockchainService(); | |||
DataContractRegistry.register(TransactionContent.class); | |||
DataContractRegistry.register(TransactionContentBody.class); | |||
DataContractRegistry.register(TransactionRequest.class); | |||
DataContractRegistry.register(NodeRequest.class); | |||
DataContractRegistry.register(EndpointRequest.class); | |||
DataContractRegistry.register(TransactionResponse.class); | |||
} | |||
@@ -118,8 +114,7 @@ public class SDK_GateWay_BatchInsertData_Test_ { | |||
} | |||
private HashDigest getLedgerHash() { | |||
byte[] hashBytes = Base58Utils.decode(ledgerHash); | |||
return new HashDigest(hashBytes); | |||
return new HashDigestBytes(DefaultCryptoEncoding.decodeAlgorithm(Base58Utils.decode(ledgerHash)), Base58Utils.decode(ledgerHash)); | |||
} | |||
@@ -19,11 +19,8 @@ import com.jd.blockchain.crypto.HashFunction; | |||
import com.jd.blockchain.crypto.SignatureFunction; | |||
import com.jd.blockchain.ledger.BlockchainKeyGenerator; | |||
import com.jd.blockchain.ledger.BlockchainKeypair; | |||
import com.jd.blockchain.ledger.EndpointRequest; | |||
import com.jd.blockchain.ledger.NodeRequest; | |||
import com.jd.blockchain.ledger.PreparedTransaction; | |||
import com.jd.blockchain.ledger.TransactionContent; | |||
import com.jd.blockchain.ledger.TransactionContentBody; | |||
import com.jd.blockchain.ledger.TransactionRequest; | |||
import com.jd.blockchain.ledger.TransactionResponse; | |||
import com.jd.blockchain.ledger.TransactionState; | |||
@@ -62,10 +59,7 @@ public class SDK_GateWay_DataAccount_Test_ { | |||
service = serviceFactory.getBlockchainService(); | |||
DataContractRegistry.register(TransactionContent.class); | |||
DataContractRegistry.register(TransactionContentBody.class); | |||
DataContractRegistry.register(TransactionRequest.class); | |||
DataContractRegistry.register(NodeRequest.class); | |||
DataContractRegistry.register(EndpointRequest.class); | |||
DataContractRegistry.register(TransactionResponse.class); | |||
} | |||
@@ -21,11 +21,8 @@ import com.jd.blockchain.crypto.HashFunction; | |||
import com.jd.blockchain.crypto.SignatureFunction; | |||
import com.jd.blockchain.ledger.BlockchainKeyGenerator; | |||
import com.jd.blockchain.ledger.BlockchainKeypair; | |||
import com.jd.blockchain.ledger.EndpointRequest; | |||
import com.jd.blockchain.ledger.NodeRequest; | |||
import com.jd.blockchain.ledger.PreparedTransaction; | |||
import com.jd.blockchain.ledger.TransactionContent; | |||
import com.jd.blockchain.ledger.TransactionContentBody; | |||
import com.jd.blockchain.ledger.TransactionRequest; | |||
import com.jd.blockchain.ledger.TransactionResponse; | |||
import com.jd.blockchain.ledger.TransactionState; | |||
@@ -65,10 +62,7 @@ public class SDK_GateWay_InsertData_Test_ { | |||
service = serviceFactory.getBlockchainService(); | |||
DataContractRegistry.register(TransactionContent.class); | |||
DataContractRegistry.register(TransactionContentBody.class); | |||
DataContractRegistry.register(TransactionRequest.class); | |||
DataContractRegistry.register(NodeRequest.class); | |||
DataContractRegistry.register(EndpointRequest.class); | |||
DataContractRegistry.register(TransactionResponse.class); | |||
} | |||
@@ -59,10 +59,7 @@ public class SDK_GateWay_Participant_Regist_Test_ { | |||
service = serviceFactory.getBlockchainService(); | |||
DataContractRegistry.register(TransactionContent.class); | |||
DataContractRegistry.register(TransactionContentBody.class); | |||
DataContractRegistry.register(TransactionRequest.class); | |||
DataContractRegistry.register(NodeRequest.class); | |||
DataContractRegistry.register(EndpointRequest.class); | |||
DataContractRegistry.register(TransactionResponse.class); | |||
DataContractRegistry.register(ParticipantRegisterOperation.class); | |||
DataContractRegistry.register(ParticipantStateUpdateOperation.class); | |||
@@ -23,16 +23,12 @@ import com.jd.blockchain.ledger.BlockchainIdentity; | |||
import com.jd.blockchain.ledger.BlockchainKeyGenerator; | |||
import com.jd.blockchain.ledger.BlockchainKeypair; | |||
import com.jd.blockchain.ledger.DigitalSignature; | |||
import com.jd.blockchain.ledger.EndpointRequest; | |||
import com.jd.blockchain.ledger.TypedKVEntry; | |||
import com.jd.blockchain.ledger.LedgerBlock; | |||
import com.jd.blockchain.ledger.LedgerInfo; | |||
import com.jd.blockchain.ledger.LedgerTransaction; | |||
import com.jd.blockchain.ledger.NodeRequest; | |||
import com.jd.blockchain.ledger.ParticipantNode; | |||
import com.jd.blockchain.ledger.Transaction; | |||
import com.jd.blockchain.ledger.TransactionContent; | |||
import com.jd.blockchain.ledger.TransactionContentBody; | |||
import com.jd.blockchain.ledger.TransactionRequest; | |||
import com.jd.blockchain.ledger.TransactionResponse; | |||
import com.jd.blockchain.ledger.TransactionState; | |||
@@ -72,10 +68,7 @@ public class SDK_GateWay_Query_Test_ { | |||
service = serviceFactory.getBlockchainService(); | |||
DataContractRegistry.register(TransactionContent.class); | |||
DataContractRegistry.register(TransactionContentBody.class); | |||
DataContractRegistry.register(TransactionRequest.class); | |||
DataContractRegistry.register(NodeRequest.class); | |||
DataContractRegistry.register(EndpointRequest.class); | |||
DataContractRegistry.register(TransactionResponse.class); | |||
} | |||
@@ -119,16 +112,16 @@ public class SDK_GateWay_Query_Test_ { | |||
LedgerTransaction[] txList = service.getTransactions(ledgerHash, ledgerNumber, 0, 100); | |||
for (LedgerTransaction ledgerTransaction : txList) { | |||
System.out.println("ledgerTransaction.Hash=" + ledgerTransaction.getHash()); | |||
System.out.println("ledgerTransaction.Hash=" + ledgerTransaction.getTransactionHash()); | |||
} | |||
txList = service.getTransactions(ledgerHash, hashDigest, 0, 100); | |||
for (LedgerTransaction ledgerTransaction : txList) { | |||
System.out.println("ledgerTransaction.Hash=" + ledgerTransaction.getHash()); | |||
System.out.println("ledgerTransaction.Hash=" + ledgerTransaction.getTransactionHash()); | |||
} | |||
Transaction tx = service.getTransactionByContentHash(ledgerHash, hashDigest); | |||
DigitalSignature[] signatures = tx.getEndpointSignatures(); | |||
LedgerTransaction tx = service.getTransactionByContentHash(ledgerHash, hashDigest); | |||
DigitalSignature[] signatures = tx.getRequest().getEndpointSignatures(); | |||
for (DigitalSignature signature : signatures) { | |||
System.out.println(signature.getDigest().getAlgorithm()); | |||
} | |||
@@ -23,11 +23,8 @@ import com.jd.blockchain.crypto.PubKey; | |||
import com.jd.blockchain.crypto.SignatureFunction; | |||
import com.jd.blockchain.ledger.BlockchainKeyGenerator; | |||
import com.jd.blockchain.ledger.BlockchainKeypair; | |||
import com.jd.blockchain.ledger.EndpointRequest; | |||
import com.jd.blockchain.ledger.NodeRequest; | |||
import com.jd.blockchain.ledger.PreparedTransaction; | |||
import com.jd.blockchain.ledger.TransactionContent; | |||
import com.jd.blockchain.ledger.TransactionContentBody; | |||
import com.jd.blockchain.ledger.TransactionRequest; | |||
import com.jd.blockchain.ledger.TransactionResponse; | |||
import com.jd.blockchain.ledger.TransactionState; | |||
@@ -89,10 +86,7 @@ public class SDK_GateWay_User_Test_ { | |||
service = serviceFactory.getBlockchainService(); | |||
DataContractRegistry.register(TransactionContent.class); | |||
DataContractRegistry.register(TransactionContentBody.class); | |||
DataContractRegistry.register(TransactionRequest.class); | |||
DataContractRegistry.register(NodeRequest.class); | |||
DataContractRegistry.register(EndpointRequest.class); | |||
DataContractRegistry.register(TransactionResponse.class); | |||
} | |||