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.
mainClass
为org.hyperledger.fabric.contract.ContractRouter
新版本所有合约的
mainClass
都为org.hyperledger.fabric.contract.ContractRouter
使用
@DataType
注解标识,定义三个字段userId
、name
、money
使用@Property
注解标识:与
@Default
注解标识,并实现ContractInterface
接口合约方法使用 @Transaction
注解标识Transaction.TYPE.SUBMIT 为 「写入交易」
Transaction.TYPE.EVALUATE 为 「查询」包含3个交易方法: init
、addUser
、transfer
包含2个查询方法: getUser
、queryAll
把合约源代码打包成压缩文件,用于后续安装:
在指定 peer 节点上安装链码,下面分别为两个机构安装。
与Label
:当合约安装后,需经过机构的审批达成一致后才允许使用。
环境:环境:
执行以下命令,向通道提交合约:
交易数据使用 peer chaincode invoke [flags]
命令,该命令将尝试向网络提交背书过的交易。查询数据使用 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.sh3.测试
运行结束后,进行测试。我们使用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版本 排序服务 共识机制采用什么