1257  
BSN智能合约开发培训-Hyperledger Fabric(一)
作者: 市场部 于 2020年03月23日 发布在分类 / 区块链基础知识 / 底层框架资料 / HyperLedger Fabric 下,并于 2020年03月23日 编辑


原文标题:

Hyperledger Fabric开发实战-03编写智能合约

Hyperledger Fabric开发实战-04编写智能合约


本文是在阅读《区块链开发实战-Hyperledger Fabric关键技术与案例分析》一书的同时,在实践中记录的一些实践步骤与经验分享。

Hyperledger Fabric的智能合约叫做Chaincode,是业务的成载体,负责具体的业务逻辑


Chaincode代码

FabricChaincode运行在容器中,可以使用GoJavaNode.js语言开发,Golang是目前为主比较成熟稳定的。

Chaincode组成

Chaincode主要由下面几个组成:

必须在main包下

引用必要的依赖

定义一个结构体,并为结构体绑定InitInvoke方法

shim.ChaincodeStubInterfacepb.Response

main方法

 

下面以一个例子进行说明 

Chaincode部署

Chaincode的运行分为:installinstantiateinvoke三步

编写以上的代码后,我们将其放入一个文件夹,例如: /home/ssj234/fabricwksp/05-chaincode/下,在部署的时候,会去$GOPATHsrc下面寻找文件夹,因此,我们在如下路径编写Chaincode

安装

实例化

实例化的时候会调用init方法

instantiate实例化命令运行的时间较长,银行会启动一个docker容器来执行chaincode,我们可以通过docker ps命令观察,会看到下面的一个容器正在运行

使用docker logs bee440516894查看日志,会输出Init方法中打印的内容

调用

使用peer chaincode invoke可以调用chaincodeinvoke方法

执行完成,通过docker logs命令可以查看到Invoke方法的打印内容。

 

在上一节演示了一个简单的Chaincode示例,可以看到,Chaincode中主要是InitInvoke方法的实现。两个方法的原型如下:

可以看到,主要是对shim.ChaincodeStubInterface的使用。

shim接口

shim.ChaincodeStubInterface

pb.Response

shim提供了一组方法,用来包装返回的信息

返回成功

返回失败

Chaincode存取数据

通过上面的shim接口,我们可以看到如何将数据存放到账本中,如何从账本取出,下面编写一个例子来演示,对上一节的代码进行改动。

Init方法中,接收两个名字和金额,如["init","Alice","100","Bob","200"]

Invoke方法中,接受AB的转账,如["invoke","Alice","Bob","10"]

编写完成后,还需要编写main方法

之后,使用go build构建,再按照上一节的方法,安装,实例化,调用测试,使用docker logs查询日志

编写完成Chaincode后,可以执行go build查看是否编译成功,如果安装和实例化之后更改了Chaincode程序,需要重新build,然后使用peer chaincode upgrade命令,设置最新的版本号,更新chaincode

作者:史圣杰

链接:https://www.jianshu.com/p/2e389823f556

https://www.jianshu.com/p/6b7049b4bdba

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。







 推荐知识

 历史版本

修改日期 修改人 备注
2020-03-23 14:21:41[当前版本] 市场部 创建版本

 附件

附件类型

JPGJPG PDFPDF

  目录
    区块链服务网络发展联盟