使用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参考文档:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值