使用Hyperlegder Fabric体验区块链智能合约的乐趣----编写一个简单的BookstoreApp(上)...
由于这个活儿前段时间自己过了一遍,当时发现网上资料很少,所以特地写一篇给大家分享一下,帮助大家踩一些坑。
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参考文档:
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(上)...相关推荐
- 【区块链】以太坊Solidity编写一个简单的Hello World合约
熟悉一门语言得从Hello World! 开始,因为这是最简单的一个输出形式. 我们先在contracts目录下建立一个helloworld.sol文件 进入编辑 // SPDX-License-Id ...
- 区块链智能合约solidity入门
想知道更多关于区块链技术知识,请百度[链客区块链技术问答社区] 链客,有问必答!! 使用ubuntu系统安装ethereum开发环境 安装 Nodejs sudo apt-get update sud ...
- 区块链智能合约solidity入门 1
使用ubuntu系统安装ethereum开发环境 安装 Nodejs sudo apt-get updatesudo apt install curlcurl -sL https://deb.node ...
- 【问链财经-区块链基础知识系列】 第三十七课 区块链智能合约重新认识:不再智能
> 编者按:不得不说在区块链世界里"智能合约"这个词被用滥了,就好像有了智能合约以后,社会一下进入智能时代,改变了整个社会的运行轨迹,但事实上它真有宣传的那么神吗,那么无所不 ...
- android区块链 钱包_区块链研究实验室|从Android调用区块链智能合约
本教程将展示如何直接从Android开发环境-Android Studio中调用智能合约. 环境要求 我们将使用Tezos区块链.为了使我们的Android java代码与现有的.部署的智能合约交互, ...
- 区块链智能合约入门:Hello world(2)
这次的基础合约Hello world 有所升级,增加了updateMessage,让你可以随时更新自己想说的话. 其实在区块链智能合约入门:Hello world(1)这篇文章里已经介绍过,Hello ...
- 区块链 智能合约 简介
根据谷歌趋势数据显示,目前,程序员对智能合约编程的兴趣已经处于历史最高水平,其中中国高居全球榜首,随着区块链技术的发展,相信日后智能合约将会与我们的生活密切相关,今天就为大家介绍一下什么是智能合约. ...
- 智能合约重构社会契约(11)天德区块链智能合约系统
智能合约是可以运行在区块链上的合约代码,是一种运行在区块链之上的电子协议,它允许在没有第三方的情况下进行可信执行. 1. 设计原则 智能合约数据来源于链上. 智能合约的输人是从区块链的数据库里出来的. ...
- 什么是智能合约 区块链_什么是区块链智能合约?
什么是智能合约 区块链 关于区块链智能合约的第一件事是它们不是智能合约,或者不是区块链上的合约. 实际上,它们的名字是奇异的. 1 ,让我们将按照相反的顺序这些问题,我们应该搞清楚一个聪明的合同实际上 ...
- 了区块链开放平台baas_区块链开放平台 BaaS 系统开发,区块链智能合约撰写服务...
区块链开放平台 BaaS 系统开发,区块链智能合约撰写服务 什么是区块链即服务? 区块链即服务是一种独特的经济模型,允许消费者使用基于云的服务来开发,使用和托管其区块链应用,功能和智能合约. 源中瑞 ...
最新文章
- xamarin.android蓝牙,在Android上连接Xamarin的配对蓝牙设备
- 如何用emacs打开许多文件
- php yii框架源码,yii 源码解读
- 分布式数据库的模式结构介绍​
- 当你不喜欢一个人(一段话、一篇文章)的时候
- python爬虫知乎图片_python爬虫(爬取知乎答案图片)
- opengl实现经纹理映射的旋转立方体_《图形编程技术学习》(五十三)环境映射...
- hibernate saveorupdate mysql_Mysql数据库 hibernate保存数据时,Mysql主键需设定自增,否则报错_MySQL...
- 如何重新定义云数据中心的资源利用率
- Java测试类的创建
- java jdk jre版本要一样吗a_JDK是什么?JRE是什么?JDK和JRE的区别?
- 腾讯程序员的职业晋升答辩之【完全解析】
- 利用螺纹钢期货对钢材采购成本做对冲_2020_10_24
- 公司内网openvpn部署,
- HKEY_LOCAL_MACHINE:hardware\DeviceMap\SerialComm里找不到串口的解决办法
- InnoDB---深入理解事务提交--02
- 探索式测试之隐喻(种植)
- shell脚本中使用sudo的前置条件
- 程序员一定要会的软件项目管理评估方案,不做只会敲代码的码农!(建议收藏)
- rtx2060什么水平_rtx2060性能(rtx2060显卡什么水平)
热门文章
- 浅析C#中的文件操作
- JDK11即将来临,新特性了解一下
- 安全提示:IIS不要开启“WebDAV”扩展
- 如何验证 nginx.conf 是否配置正确
- PHP 调用阿里云短信服务API操作短信模板(增删改查)
- Layer 引入自定义模块
- 2019年三峡大学计算机考研名单,三峡大学2019硕士研究生复试录取方案
- 错误: 程序包org.eclipse.swt.graphics不存在/swt.jar下载方法
- 据说每年有四分一的房地产项目烂尾,房子都是预售的钱哪里去了?
- 解决办法:开机后过很长时间键盘才能用