新浪新闻客户端

BSN智能合约开发培训-Hyperledger Fabric

BSN智能合约开发培训-Hyperledger Fabric
2020年03月20日 14:29 新浪网 作者 链得得App

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

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

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

  Chaincode代码

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

  Chaincode组成

  Chaincode主要由下面几个组成:

  必须在main包下

  引用必要的依赖

  定义一个结构体,并为结构体绑定Init和Invoke方法

  shim.ChaincodeStubInterface和pb.Response

  main方法

  下面以一个例子进行说明

BSN智能合约开发培训-Hyperledger Fabric

  Chaincode部署

  Chaincode的运行分为:install,instantiate和invoke三步

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

BSN智能合约开发培训-Hyperledger Fabric

  安装

BSN智能合约开发培训-Hyperledger Fabric

  实例化

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

BSN智能合约开发培训-Hyperledger Fabric

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

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

  调用

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

BSN智能合约开发培训-Hyperledger Fabric

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

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

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

  shim接口

  shim.ChaincodeStubInterface

BSN智能合约开发培训-Hyperledger Fabric

  pb.Response

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

  返回成功

  返回失败

  Chaincode存取数据

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

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

BSN智能合约开发培训-Hyperledger Fabric

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

BSN智能合约开发培训-Hyperledger Fabric

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

BSN智能合约开发培训-Hyperledger Fabric

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

BSN智能合约开发培训-Hyperledger Fabric

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

  作者:史圣杰

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

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

  来源:简书

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

  (1、 内容来自链得得内容开放平台“得得号”,稿件内容仅代表作者观点,不代表链得得官方立场。2、 凡“得得号”文章,原创性和内容的真实性由投稿人保证,如果稿件因抄袭、作假等行为导致的法律后果,由投稿人本人负责。3、 得得号平台发布文章,如有侵权、违规及其他不当言论内容,请广大读者监督,一经证实,平台会立即下线。如遇文章内容问题,请发送至邮箱:chengyiniu@chaindd.com)

特别声明:以上文章内容仅代表作者本人观点,不代表新浪网观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与新浪网联系。
权利保护声明页/Notice to Right Holders

举报邮箱:jubao@vip.sina.com

Copyright © 1996-2024 SINA Corporation

All Rights Reserved 新浪公司 版权所有