更新时间:2024-01-11 GMT+08:00

Java SDK Demo

以上章节是对链代码的开发、调测及其应用配置的介绍,本章节通过提供一个基于Java SDK的Demo(支持国密加密算法),以Java SDK Demo为例,让您了解区块链的相关知识以及体验应用开发的流程,助您快速上手并使用区块链服务。

只用于场景体验,不用于实际应用。

准备工作

操作指导

说明

安装开发工具(IDE)

本地需提前安装JDK、maven和eclipse(可以使用您习惯的IDE)。

JDK需要安装1.8版本64位,如果本地已安装JDK,可以通过cmd命令java -version来查看JDK版本。

购买区块链实例

  1. 登录区块链服务管理控制台。
  2. 进入“实例管理”页面,单击Hyperledger Fabric增强版的“购买”按钮。
  3. 根据界面提示,配置区块链基本信息,参数如表1所示。

    为了保证示例Demo成功运行,请在参数配置时按照表格中的参数值填写。

    表1 基本信息配置

    参数

    参数值

    计费模式

    按需计费

    企业项目

    选择已创建的企业项目,例如:default。

    如果您没有开通企业管理服务,将无法看到企业项目选项。

    区块链实例名称

    java-sdk-demo

    版本类型

    基础版

    区块链类型

    私有链

    Hyperledger Fabric增强版内核

    v2.2

    共识策略

    Raft(CFT)

    资源初始密码

    请自行设置

    资源初始密码确认

    -

  4. 单击“下一步:资源配置”,进行资源配置,参数如表2所示。

    表2 资源配置

    参数

    示例

    环境资源

    选择“自定义环境”。

    集群

    创建新的CCE集群

    可用区

    请自行选择

    多可用区

    云主机规格

    4核/8GB

    云主机个数

    1

    高可用

    虚拟私有云

    系统自动创建VPC

    所在子网

    系统自动创建子网

    云主机登录方式

    密码

    root密码

    如果填写该项,则以填写值为准,如果不填写,则以资源初始密码为准。

    确认密码

    -

    是否使用CCE集群节点弹性IP

    弹性IP计费方式

    使用默认规格

    弹性IP带宽

    5 Mbit/s

  5. 单击“下一步:区块链配置”,进行区块链配置,参数如表3所示。

    表3 区块链配置

    参数

    示例

    区块链配置

    选择“自定义配置”。

    区块链管理初始密码

    如果填写该项,则以填写值为准,如果不填写,则以资源初始密码为准。

    区块链管理确认密码

    -

    存储卷类型

    极速文件存储卷,也可以根据界面提示配置。

    节点组织存储容量 (GB)

    使用默认规格。

    账本数据存储方式

    选择“文件数据库(GoLevelDB)”

    peer节点组织

    系统已默认创建1个节点组织,名称为organization,将节点数量修改为1。

    通道配置

    organization节点组织已默认添加进至通道中,保持默认即可。

    共识节点数量

    使用默认。

    安全机制

    ECDSA

    须知:

    安全机制支持选择国密算法。若选择了国密算法,则Demo的部署需要做其他修改,请注意下文中的相关描述。

    区块生成配置

    添加RESTful API支持

  6. 单击“下一步:确认规格”。
  7. 确认配置信息无误后,根据界面提示购买区块链实例。

    请等待数分钟,安装页面提示安装成功,查看实例状态变为“正常”后,表示区块链实例部署完成。

安装及实例化链代码

  1. 登录区块链服务管理控制台。
  2. 单击左侧导航栏中的“实例管理”。
  3. 在新创建的实例卡片中,单击“区块链管理”,登录链代码管理页面。

  4. 在登录页面输入用户名、密码,单击“登录”。

    用户名为admin,密码为您在创建区块链实例时设置的区块链管理初始密码,如果没有设置区块链管理初始密码,则以资源初始密码为准。

  5. 在链代码管理页面,单击页面左上角的

    安装参数如下:
    表4 安装参数

    参数

    链代码名称

    chaincode

    链代码版本

    2.0

    账本数据存储方式

    文件数据库(goleveldb)

    选择全部Peer节点

    勾选

    组织&Peer节点

    peer-0

    链代码语言

    Golang

    链代码文件

    Chaincode_Go_Demo,获取方法:登录区块链服务管理控制台,进入“应用案例”,单击“Java示例Demo-Java SDK Demo”中Go语言示例链代码的“下载”按钮。

    链代码描述

    根据需要填写相关描述。

    代码安全检查

    链代码语言选择Golang,该功能才会显示。选择是否开启链代码安全检查。

  6. 单击“安装”完成链代码安装。
  7. 链代码安装完成后,在链代码列表的“操作”列,单击“实例化”。

    实例化参数如下:
    表5 实例化参数

    参数

    链代码名称

    chaincode

    实例化通道

    channel

    链代码版本

    2.0

    初始化函数

    init

    链代码参数

    a,200,b,250

    背书策略

    下列任意组织背书

    背书组织列表

    organization

    隐私保护配置

  8. 单击“实例化”,完成链代码在当前通道上的实例化。

    稍等2-3分钟后刷新界面,单击“实例化”列的“查看更多”,查看链代码实例化进度。

配置应用

  1. 导入项目工程

    获取项目代码并解压,获取方法:登录区块链服务管理控制台,进入“应用案例”,单击“Java示例Demo-Java SDK Demo”中Java项目源码的“下载”按钮。

    在eclipse界面中右键选择import,将项目代码导入eclipse中(javasdkdemo为Maven工程)。

  2. 下载SDK配置文件和证书。

    1. 在“实例管理”界面,在实例卡片中,单击“获取客户端配置”。
    2. 勾选“SDK文件”,SDK配置参数如下:
      表6 SDK配置参数

      参数名称

      说明

      链代码名称

      chaincode

      须知:

      链代码名称需要和链代码安装&实例化时的一致。

      证书存放路径

      此处配置为下载的javasdkdemo工程的config文件夹路径。

      须知:

      将windows的反斜杠“\” 换为 “/”。例如,正确的写法为D:/javasdkdemo/config

      通道名称

      channel

      组织&Peer节点

      选择通道中所有节点组织

      勾选“共识节点证书”。

      勾选“Peer节点证书”,指定节点组织选择organization,勾选“管理员证书”。

    3. 单击“下载”,下载SDK配置文件、java-sdk-demo-orderer组织的管理员证书、organization组织的管理员证书,下载至demo工程的config路径中。

  3. 复制并解压。
  4. 将下载的demo-config.zip文件解压,将java-sdk-demo-orderer-admin-cert、organization-admin-cert和sdk-config文件夹中的内容复制至demo工程的config路径下。

部署应用

  1. 在Maven工程中找到/javasdkdemo/src/main/java/handler/Main.java,将Main类中如下代码中的文件路径,修改为java-sdk-demo-sdk-config.yaml文件的绝对路径,路径请参见2.c。需将windows的反斜杠“\” 改为 “/”。

    helper.setConfigCtx("E:/yourdir/huawei.yaml");
    例如修改为:helper.setConfigCtx("D:/javasdkdemo/config/java-sdk-demo-channel-sdk-config.yaml");
    若您在订购区块链实例时安全机制选择“国密算法”,还需要做如下修改:国密算法需要引用华为自己的fabric-sdk依赖包,故需要在pom.xml中添加对工程lib文件夹“fabric-sdk-java-1.4.1-jar-with-dependencies.jar”中的依赖,如下图所示去掉该依赖的注释即可,否则可能会导致运行错误。
    图1 文件详情

  2. 运行main函数。

    每成功执行一次,表示向区块链存入一对键值对,<testuser,100>;在区块链上查询键值为testuser的value值为100。也可以通过区块链浏览器可以查看交易记录。

    图2 交易记录信息

通过内存传入私钥

如果用户需要对私钥文件进行加密,并在demo中解密后传入FabricSDK。

对于MSP私钥:在FabricHelper文件的genFabricUser函数中,按如下方式调用函数:

//从配置文件指定路径下读取加密过的MSP私钥
String adminPrivateKeyString = extractPemString(msp, "keystore");  
//对adminPrivateKeyString 进行解密得到decryptedKey字符串
//将解密后的MSP私钥重新赋值给变量adminPrivateKeyString 
String adminPrivateKeyString = decryptedKey;

当前不支持通过内存传入TLS私钥。