由于这个活儿前段时间自己过了一遍,当时发现网上资料很少,所以特地写一篇给大家分享一下,帮助大家踩一些坑。

Hyperledger Fabric是由IBM公司主导开发的一个面向企业级客户的开源项目。与比特币和以太坊这类公有链不同,Hyperledger Fabric网络中的节点必须经过授权认证后才能加入,从而避免了POW资源开销,大幅提高了交易处理效率,满足企业级应用对处理性能的诉求。同时,为了满足灵活多变的应用场景,Hyperledger Fabric采用了高度模块化的系统设计理念,将权限认证模块(MSP)、共识服务模块(Ordering Service)、背书模块(Endorsing peers)、区块提交模块(committing peers)等进行分离部署,使开发者可以根据具体的业务场景替换模块,实现了模块的插件式管理(plug-in/plug-out)。所以,Hyperledger Fabric是一个私有链/联盟链的开发框架,而且系统的运行不需要token支持。

本文主要是根据Hyperledger Fabric Sample中的Commercial paper tutorial改编,来实现一个简单的Blockchain Bookstore App。

Commercial paper tutorial参考文档:

https://hyperledger-fabric.readthedocs.io/en/release-1.4/tutorial/commercial_paper.html

0x01_需求

我们需要实现一个简单的区块链书店,这里面首先必须得有智能合约,然后还需要包含一些书店交易环节的基本的功能,比如购买,退货等。同时也要保证退货的时候,款项退款正确。实现这些简单的需求,可以参考Commercial paper tutorial代码。

0x02_读教程

既然可以参考Commercial paper tutorial的代码,那么我们就先去:

https://hyperledger-fabric.readthedocs.io/en/release-1.4/tutorial/commercial_paper.html复制代码

去看一下这个教程都有些什么内容。

这个教程比较长,而且都是英文,所以皮爷在这里就给大家简单总结一下:

  • 首先在这个框架里面,有三个组织,分别是MagnetoCrop, Digibank和PaperNet。
  • MagnetoCorp负责发行债券和赎回债券。
  • DigitBank负责购买债券,然后再赎回债券。
  • PaperNet则是负责记录一切的区块链区间。
  • 首先需要安装我们的智能合约PaperContract,然后再将合约扩散到PaperNet上面。
  • MagnetoCrop首先会通过issue()来发放债券。
  • 然后DigitBank则会购买那些已经发放出来的债券。
  • 最后DigitBank通过redeem()来赎回自己的本金。

那么长的英文其实就讲的是这些东西而已,整个流程其实和书店的环节很像:

  • 书店其实就是MagnetoCrop,负责发布书籍,然后买书,退书。
  • DigitBank则是有点像消费者,他们可以买书,退货。

0x03_环境准备

这里其实有点坑,之前我一直尝试着在Mac上面做,但是做到一半,发现有个“mkdir xxxxxx permission deny”始终过不去,网上找了好多好多好多好多方法,都不行,这个问题整整困扰了我两天!实实在在的两天,一个周末。天哪,一个美好的周末,两天,就在搜索怎样解决这个问题。最后还是解决不了,所以我就干脆直接在我的

腾讯云服务器

上面开始搞了。不得不说,关键时刻有个云服务器还是很棒的。下面给大家一些优惠小福利:

因为文章都是涉及到服务器的,所以福利就要写在最前面
皮爷这里就有上千元的阿里云和腾讯云的优惠券给你使用(每一款优惠只要点击优惠链接,进入即可领取):

阿里云部分
【阿里云新人1888元云产品通用代金券】:
promotion.aliyun.com/ntms/yunpar…

【阿里云爆款云主机,2折优惠券】:
promotion.aliyun.com/ntms/act/qw…

【阿里云企业级服务器2折优惠券】:
promotion.aliyun.com/ntms/act/en…

腾讯云

【新客户无门槛领取总价值高达2775元代金券,每种代金券限量500张,先到先得】:
cloud.tencent.com/redirect.ph…

【腾讯云服务器、云数据库特惠,3折优惠券】:
cloud.tencent.com/redirect.ph…

有了云服务器,下一步就是准备环境了:

  • 腾讯云服务器一台
  • node v10.15.3
  • Docker version 18.09.6, build 481bc77156
  • go

0x05_启动网络

首先我们得启动整个网络,启动网络则是 /fabric-samples/basic-network/ 里面,直接运行 . start.sh

然后我们可以从 docker ps 里面看到,成功启动了四个image

接着,我们需要启动 cliBookStore 的image,则需要cd /fabric-samples/commercial-paper/organization/bookstore/configuration/cli/ ,然后通过命令:docker-compose -f docker-compose.yml up -d cliBookStore 启动。

接下来我们还需要去启动消费者的cliDigiBank。目录/fabric-samples/commercial-paper/organization/digibank/configuration/cli/,命令:docker-compose -f docker-compose.yml up -d cliDigiBank则能启动起来:

为了更好的观察网络中的数据变化,我们可以启动一个监控image来检测全部网络。目录是/fabric-samples/commercial-paper/organization/bookstore/configuration/cli/,通过命令./monitordocker.sh net_basic to start a new docker image to monionter basic_net启动。

0x06_安装智能合约

既然我们是BookstoreApp,那么我们的只能合约就叫做bookcontract。合约在/fabric-samples/commercial-paper/organization/bookstore/contract/目录下,安装合约,则通过命令:docker exec cliBookStore peer chaincode install -n bookcontract -v 0 -p /opt/gopath/src/github.com/contract -l node

之后我们需要将合约发布出去,通过命令:docker exec cliBookStore peer chaincode instantiate -n bookcontract -v 0 -l node -c '{"Args":["org.papernet.digitbook:instantiate"]}' -C mychannel -P "AND ('Org1MSP.member')"

0x07_书店的使用场景

每一个组织的应用程序,都在他对应的/application/目录地下。所以,书店的应用程序也在这个目录下。

首先,需要把书店的钱包添加到网络里:

然后,我们可以调用 issue 程序,将《LEARNING JAPANESE》这本书,按照编号00001发布出去:

此时,可以调用一个query程序,来看一下书籍的信息:

因为这本书已经发售了,所以书店的人是有权利来读取这本书的内容的。

目前,图书的状态指示issued,如果书店想要卖这本书,那么他还需要把这本书publish出来,所以调用publish程序:

因为此时图书状态是处在待卖的状态,归属Digibank的两个人是没有权限来读取书中内容的:

今天的文章我们就先说到这里,还剩下

买家的使用场景

和一些其他的功能,我们下一篇幅文章再详细讲解。

代码我已经在公众号里面分享了,想要获取源码的同学,可以关注公号『皮爷撸码』,回复『代码』即可找到,记住对应的代码编号是『HF001』,代码编号是『HF001』,代码编号是『HF001』。

最后给小程序打个广告,摇一摇,来不来?

转载于:https://juejin.im/post/5d0750216fb9a07eef6a0cfe

使用Hyperlegder Fabric体验区块链智能合约的乐趣----编写一个简单的BookstoreApp(上)...相关推荐

  1. 【区块链】以太坊Solidity编写一个简单的Hello World合约

    熟悉一门语言得从Hello World! 开始,因为这是最简单的一个输出形式. 我们先在contracts目录下建立一个helloworld.sol文件 进入编辑 // SPDX-License-Id ...

  2. 区块链智能合约solidity入门

    想知道更多关于区块链技术知识,请百度[链客区块链技术问答社区] 链客,有问必答!! 使用ubuntu系统安装ethereum开发环境 安装 Nodejs sudo apt-get update sud ...

  3. 区块链智能合约solidity入门 1

    使用ubuntu系统安装ethereum开发环境 安装 Nodejs sudo apt-get updatesudo apt install curlcurl -sL https://deb.node ...

  4. 【问链财经-区块链基础知识系列】 第三十七课 区块链智能合约重新认识:不再智能

    > 编者按:不得不说在区块链世界里"智能合约"这个词被用滥了,就好像有了智能合约以后,社会一下进入智能时代,改变了整个社会的运行轨迹,但事实上它真有宣传的那么神吗,那么无所不 ...

  5. android区块链 钱包_区块链研究实验室|从Android调用区块链智能合约

    本教程将展示如何直接从Android开发环境-Android Studio中调用智能合约. 环境要求 我们将使用Tezos区块链.为了使我们的Android java代码与现有的.部署的智能合约交互, ...

  6. 区块链智能合约入门:Hello world(2)

    这次的基础合约Hello world 有所升级,增加了updateMessage,让你可以随时更新自己想说的话. 其实在区块链智能合约入门:Hello world(1)这篇文章里已经介绍过,Hello ...

  7. 区块链 智能合约 简介

    根据谷歌趋势数据显示,目前,程序员对智能合约编程的兴趣已经处于历史最高水平,其中中国高居全球榜首,随着区块链技术的发展,相信日后智能合约将会与我们的生活密切相关,今天就为大家介绍一下什么是智能合约. ...

  8. 智能合约重构社会契约(11)天德区块链智能合约系统

    智能合约是可以运行在区块链上的合约代码,是一种运行在区块链之上的电子协议,它允许在没有第三方的情况下进行可信执行. 1. 设计原则 智能合约数据来源于链上. 智能合约的输人是从区块链的数据库里出来的. ...

  9. 什么是智能合约 区块链_什么是区块链智能合约?

    什么是智能合约 区块链 关于区块链智能合约的第一件事是它们不是智能合约,或者不是区块链上的合约. 实际上,它们的名字是奇异的. 1 ,让我们将按照相反的顺序这些问题,我们应该搞清楚一个聪明的合同实际上 ...

  10. 了区块链开放平台baas_区块链开放平台 BaaS 系统开发,区块链智能合约撰写服务...

    区块链开放平台 BaaS 系统开发,区块链智能合约撰写服务 什么是区块链即服务? 区块链即服务是一种独特的经济模型,允许消费者使用基于云的服务来开发,使用和托管其区块链应用,功能和智能合约.  源中瑞 ...

最新文章

  1. xamarin.android蓝牙,在Android上连接Xamarin的配对蓝牙设备
  2. 如何用emacs打开许多文件
  3. php yii框架源码,yii 源码解读
  4. 分布式数据库的模式结构介绍​
  5. 当你不喜欢一个人(一段话、一篇文章)的时候
  6. python爬虫知乎图片_python爬虫(爬取知乎答案图片)
  7. opengl实现经纹理映射的旋转立方体_《图形编程技术学习》(五十三)环境映射...
  8. hibernate saveorupdate mysql_Mysql数据库 hibernate保存数据时,Mysql主键需设定自增,否则报错_MySQL...
  9. 如何重新定义云数据中心的资源利用率
  10. Java测试类的创建
  11. java jdk jre版本要一样吗a_JDK是什么?JRE是什么?JDK和JRE的区别?
  12. 腾讯程序员的职业晋升答辩之【完全解析】
  13. 利用螺纹钢期货对钢材采购成本做对冲_2020_10_24
  14. 公司内网openvpn部署,
  15. HKEY_LOCAL_MACHINE:hardware\DeviceMap\SerialComm里找不到串口的解决办法
  16. InnoDB---深入理解事务提交--02
  17. 探索式测试之隐喻(种植)
  18. shell脚本中使用sudo的前置条件
  19. 程序员一定要会的软件项目管理评估方案,不做只会敲代码的码农!(建议收藏)
  20. rtx2060什么水平_rtx2060性能(rtx2060显卡什么水平)

热门文章

  1. 浅析C#中的文件操作
  2. JDK11即将来临,新特性了解一下
  3. 安全提示:IIS不要开启“WebDAV”扩展
  4. 如何验证 nginx.conf 是否配置正确
  5. PHP 调用阿里云短信服务API操作短信模板(增删改查)
  6. Layer 引入自定义模块
  7. 2019年三峡大学计算机考研名单,三峡大学2019硕士研究生复试录取方案
  8. 错误: 程序包org.eclipse.swt.graphics不存在/swt.jar下载方法
  9. 据说每年有四分一的房地产项目烂尾,房子都是预售的钱哪里去了?
  10. 解决办法:开机后过很长时间键盘才能用