这是Hyperledger Fabric Java Chaincode的教程。还有Go和NodeJS Chaincodes,我们将来可能会讨论它们。此外,我采用基于帐户的钱包模型作为示例,我们将使用Hyperledger Fabric构建你的第一个网络(BYFN,build your first network),作为我们的测试环境(v1.4网络)。
如果你不知道如何启动BYFN
网络,我也会提供步骤,不用担心。但是如果你想了解BYFN
是如何工作的,你可以参考:
基于帐户的钱包模型
基于帐户的钱包模型是交易系统的实现之一,一般而言系统中存在一些钱包,并且每个钱包包含可用于转账的一些值或代币。当然,实现的细节有很多变化,例如代币交换和多代币功能。
特征
在Java Chaincode中,我们将实现:
- 1.用户钱包创建。
- 2.用户钱包查询。
- 3.钱包代币转账(即从一个钱包发送钱或代币到另一个钱包)。
- [可选] Hyperledger Fabric中有两个数据库选项用于保存超级账本的
world state
:LevelDB和CouchDB,在本教程中,为了简单起见,我将使用LevelDB。 - [可选]在上面,
world state
(或全局状态)不是超级账本本身,而是与超级账本分开,虽然它是派生的,可以随时从超级账本中恢复。此外,世界状态存储在数据库中以表示超级账本,使得这些节点不需要总是搜索超级账本以进行数据检索,并且可以更快地从数据库中检索数据(状态)。 - [可选]在我的负载测试和一些关于Hyperledger Fabric性能的论文中,LevelDB的性能优于CouchDB。但与LevelDB中的简单键值查询相比,CouchDB可以支持可用于构建更复杂查询的丰富查询。
IDE——Java Chaincode开发工具
我们使用IntelliJ IDEA。此外,你需要JDK。请安装它们。
当然,如果你有自己的Java IDE,也可以使用它。但在本教程中,我们使用IntelliJ。
第1步,准备开发
让我们打开IntelliJ。
在IntelliJ中创建新项目Create New Project
:
选择左边的Gradle
,然后:
输入你的GroupId
和ArtifactId
。就我而言,我使用java_account_model_cc
。接下来:
然后现在,你应该配置自己的项目位置。就我而言,我使用/Desktop/java_account_model_cc
。单击完成Finish
。
1.1 settings.gradle
在左侧的项目文件中,你应该看到settings.gradle
。让我们双击打开它:
输入以下内容:
rootProject.name = 'fabric-chaincode-gradle'
1.2 build.gradle
在左侧的项目文件面板中,可以看到build.gradle
。让我们双击打开它:
然后,输入以下内容:
plugins {
id 'com.github.johnrengelman.shadow' version '2.0.3'
id 'java'
}
group 'org.hyperledger.fabric-chaincode-java'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '1.+'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.6'
testCompile group: 'junit', name: 'junit', version: '4.12'
}
shadowJar {
baseName = 'chaincode'
version = null
classifier = null
manifest {
attributes 'Main-Class': 'org.hyperledger.fabric.chaincode.AccountBasedChaincode'
}
}
如果IntelliJ右下角有一个需要导入的Gradle项目Gradle project needs to be imported
的弹出窗口,请选择导入更改Import Changes
。
1.3 Chaincode文件
在左侧的项目文件面板中,在src>main>java
下,右键单击它并选择New>Java Class
:
在Name字段