Hyperledger Fabric 2.x 自定义智能合约

Posted 陶陶技术笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hyperledger Fabric 2.x 自定义智能合约相关的知识,希望对你有一定的参考价值。

为了持续地进行信息的更新,以及对账本进行管理(写入交易,进行查询等),区块链网络引入了智能合约来实现对账本的访问和控制;智能合约在 Fabric 中称之为 链码,是区块链应用的业务逻辑。

本文分享如何使用 Java 语言开发智能合约,以及合约的安装与使用。

 

1、部署好 Fabric 的测试网络,按照上一篇文章《Hyperledger Fabric 2.x 环境搭建》的内容执行第1至5步

- 启动好两个 peer 节点和一个 orderer 节点
- 创建好 mychannel 通道

2、在环境变量中配置好执行命令(bin)、配置(config)与MSP文件夹的路径:执行 vim /etc/profile 添加以下内容:

gitee:

Fabric 2.x 版本后的合约编写方式与旧版本略有不同,需要实现 ContractInterface 接口,下面是官方的一段说明:

All chaincode implementations must extend the abstract class ChaincodeBase. It is possible to implement chaincode by extending ChaincodeBase directly however new projects should implement org.hyperledger.fabric.contract.ContractInterface and use the contract programming model instead.

指定 mainClassorg.hyperledger.fabric.contract.ContractRouter

新版本所有合约的 mainClass 都为 org.hyperledger.fabric.contract.ContractRouter

使用 @DataType 注解标识,定义三个字段 userIdnamemoney 使用 @Property 注解标识:

@Default 注解标识,并实现 ContractInterface 接口
  • 合约方法使用 @Transaction 注解标识

    Transaction.TYPE.SUBMIT 为 「写入交易」
    Transaction.TYPE.EVALUATE 为 「查询」

  • 包含3个交易方法:initaddUsertransfer
  • 包含2个查询方法:getUserqueryAll
  • 把合约源代码打包成压缩文件,用于后续安装:

    在指定 peer 节点上安装链码,下面分别为两个机构安装。

    Label

    当合约安装后,需经过机构的审批达成一致后才允许使用。 

    环境:

    环境:

    执行以下命令,向通道提交合约:

    1. 交易数据使用 peer chaincode invoke [flags] 命令,该命令将尝试向网络提交背书过的交易。
    2. 查询数据使用 peer chaincode query [flags],该命令不会生成交易。

    由于 invoke 命令所需要的参数较多,所以我们先创建一个脚本命令。执行 vim invoke.sh 添加以下内容:

    方法初始化3条账本记录:

    环境:

    方法,查询所有数据:

    方法传入 1 参数,查询单个数据:

    方法,新增一条id为4的记录:

    方法,进行转账操作:

    sh invoke.sh \'"function":"transfer","Args":["4","1","400"]\'

    转账成功后,使用查询命令进行查看:

    peer chaincode query -C mychannel -n mycc -c \'"Args":["queryAll"]\'

    文章推荐

    Dubbo想要个网关怎么办?试试整合Spring Cloud Gateway

    Spring Security基于Oauth2的SSO单点登录怎样做?一个注解搞定

    微服务业务监控和行为分析怎么做?试试日志埋点

    Spring Cloud异步场景分布式事务怎样做?试试RocketMQ

    Spring Cloud同步场景分布式事务怎样做?试试Seata

    HyperLedger Fabric中fabric-samples 安装

    官网文档:https://hyperledger-fabric.readthedocs.io/en/release-1.0/samples.html

    版本:v1.0

    1.下载fabric-samples

    选择文件位置,下载fabric-samples

    git clone https://github.com/hyperledger/fabric-samples.git
    cd fabric-samples

    2.下载Platform-specific Binaries

    官方文档指导方式为:

    curl -sSL https://goo.gl/kFFqh5 | bash -s 1.0.6

    但是第二步操作起来,我这边会出现如下错误:

    [email protected]:~/go/src/github.com/hyperledger/fabric-samples$ curl -sSL https://goo.gl/kFFqh5 | bash -s 1.0.6
    curl: (7) Failed to connect to goo.gl port 443: Connection timed out

    所以,我采取了其他方式下载必需的二进制代码:

    进入fabric-samples文件夹下的scripts文件夹,运行其中的bootstrap.sh脚本

    (参考来源:https://github.com/hyperledger/fabric-samples)

    cd scripts
    ./bootstrap.sh 

    3.测试

    运行结束后,进行测试。我们使用first-network 例子。

    cd first-network
    #创建genesis block .
    /byfn.sh -m generate
    #启动网络 .
    /byfn.sh -m up

    运行结果:

    Starting with channel ‘mychannel‘ and CLI timeout of ‘10000‘
    Continue (y/n)?y
    proceeding ...
    Creating network "net_byfn" with the default driver
    Creating peer0.org1.example.com
    Creating peer1.org1.example.com
    Creating peer0.org2.example.com
    Creating orderer.example.com
    Creating peer1.org2.example.com
    Creating cli
    
    
     ____    _____      _      ____    _____
    / ___|  |_   _|    /     |  _   |_   _|
    \___     | |     / _    | |_) |   | |
     ___) |   | |    / ___   |  _ <    | |
    |____/    |_|   /_/   \_ |_| \_   |_|
    
    Channel name : mychannel
    Creating channel...
    
    ................
    2017-05-16 17:08:01.366 UTC [msp] GetLocalMSP -> DEBU 004 Returning existing local MSP
    2017-05-16 17:08:01.366 UTC [msp] GetDefaultSigningIdentity -> DEBU 005 Obtaining default signing identity
    2017-05-16 17:08:01.366 UTC [msp/identity] Sign -> DEBU 006 Sign: plaintext: 0AB1070A6708031A0C08F1E3ECC80510...6D7963631A0A0A0571756572790A0161
    2017-05-16 17:08:01.367 UTC [msp/identity] Sign -> DEBU 007 Sign: digest: E61DB37F4E8B0D32C9FE10E3936BA9B8CD278FAA1F3320B08712164248285C54
    Query Result: 90
    2017-05-16 17:08:15.158 UTC [main] main -> INFO 008 Exiting.....
    ===================== Query on PEER3 on channel ‘mychannel‘ is successful =====================
    
    ===================== All GOOD, BYFN execution completed =====================
    
    
     _____   _   _   ____
    | ____| |  | | |  _ |  _|   |  | | | | | |
    | |___  | |  | | |_| |
    |_____| |_| _| |____/

     

    4.结束网络运行

    ./byfn.sh -m down

     





    以上是关于Hyperledger Fabric 2.x 自定义智能合约的主要内容,如果未能解决你的问题,请参考以下文章

    Hyperledger Fabric 2.x 自定义智能合约

    Hyperledger Fabric 2.x 自定义智能合约

    区块链 hyperledger fabric 2.x版本 排序服务 共识机制采用什么

    Hyperledger Fabric 2.x 动态更新智能合约

    Hyperledger Fabric 2.x 环境搭建

    Hyperledger Fabric 2.x 生产环境的分布式部署性能测试与应用

    (c)2006-2024 SYSTEM All Rights Reserved IT常识