Hyperledger Fabric构建区块链PoC应用程序进行房屋交易

这篇文章是关于利用Hyperledger Fabric(HF)区块链平台在区块链上创建区块链PoC应用程序进行房屋交易记录的经验。对于那些刚刚开始使用HF或打算学习它的人来说,它可能会受益,对于那些已经体验过HF的人来说,它可能提供另一种同样可行的选择。

让我们首先设定目标,然后看看我们如何实现目标。

我们的目标是创建一个Web应用程序,用于在一个小的许可区块链上记录房屋交易(买卖房屋)并能够搜索它们。我们决定使用Hyperledger Fabric平台来完成这项工作。

在一天结束时,我们希望这个应用程序看起来像下面(除非自我解释,否则简洁解释)。

我们的第一个屏幕是Web应用程序的登录页面,其中包含Hyperledger Fabric api服务调试输出的背景:

以下屏幕是Web应用程序的登录Login页面(续)。登录使用双因素身份验证过程。

以下屏幕是应用程序的主屏幕,其中列出了添加交易add transaction和搜索它们search for them两个核心功能。

以下屏幕提供了将房屋交易记录到区块链的表格:

以下屏幕在表单上输入房屋交易:

以下屏幕将房屋交易记录到区块链上,并查询链条以检索它(以确认成功记录交易):

以下屏幕捕获单击下载(合约)链接时的状态:

以下屏幕输入房屋交易搜索查询(通过apn查询房屋):

以下屏幕返回交易查询结果:

我们可以看到,上面是一个功能齐全的PoC区块链应用程序。将其称为PoC,因为我们尚未将example.com和相关子域的域名替换为一个生产域名和其他一些生产内容。

现在,让我们讨论一下我们是如何做到的。

首先,我们需要概念清晰度和架构。

Hyperledger Fabric采用3层架构。具体来说,它的基础设施的区块链网络,业务规则和逻辑的链代码,以及最终用户执行业务功能的网络和/或移动应用程序。

将它们分成三层或组件将有助于我们在创建区块链应用程序时解决问题。

下图描绘了这样一种架构,并让它指导我们进行这种区块链应用程序开发工作:

Hyperledger Fabric网络基础设施

这部分涉及与利益相关者一起作为网络参与者或分布式节点/peers,一直到创建设置规则和策略。使用加密工具创建密钥,安全身份,角色等。使用称为orderer的特殊服务来促进对等体之间的通信和数据交易处理。以及更多…

对于这一层,需要广泛的计算机背景,包括Unix/Linux/Ubuntu,Docker(容器化)等技能。这很复杂,但需要的编程也不多。

能够使用此层的Fabric计数设置区块链网络。一个重要的部分是yaml文件,例如docker-compose.yaml文件,这样的配置文件或文件定义整个网络拓扑。你不必在短时间内以线性方式获得完整的能力,但将是一个良好的开端。

因为这是一个重要且复杂的过程,所以我创建了一个长达45页的独立文档,专门介绍了如何学习Hyperledger Fabric网络基础架构的基础知识,该文档还讨论了链代码并逐步简要介绍了Web应用程序,因此,请参考如果你对第一部分不熟悉,请参阅本文档的第一部分(有关详细信息,请与我们联系)。

Hyperledger Fabric Chaincode

术语“链码”相当于以太坊的“智能合约”。Chaincode可以用三种语言中的一种编写,即Node.js,Go(Golang)和Java(就我个人而言,我在Node.js阵营中)。其中一个的熟练程度是可以预期的。

对于这一部分,获得了解Fabric的方法的能力,如有效使用CLI和docker命令将是非常重要的。一些关键的docker命令包括:

  • docker ps以显示正在运行的进程(程序和/或容器)。
  • docker exec -it cli bash将调出CLI命令提示符。
  • docker run ...是启动/运行容器的服务……
  • docker rm -f $ (docker ps -qa)来杀死所有正在运行的进程/容器。

一些必要的unix/linux/ubuntu技能是必须的,例如,

  • ls列出目录中的文件。
  • cp表示复制。
  • mv表示移动或重命名。

然后一些高级知识可以很方便同样,例如,chmod a + r myfile将使myfile的用户/组/所有人(全局)的所有三个角色的权限设置为r(可读)。

Chaincode管理方面,链码有两个主要类别,一个称为系统链码system chaincode,它与给定的区块链和另一个类别相互作用,另一个类别称为用户链码user chaincode,它们是我们开发人员/程序员创建的链码。

用户链码有四个生命周期:安装Install实例化Instantiate,调用Invoke,查询Query`。

  • Install实质上映射了链码的位置/路径,因此,当需要时,可以找到并利用它。
  • Instantiate将创建一个容器映像,以支持特定链代码的所有未来调用和查询需求,这就是实例化需要更长时间才能完成的原因。
  • Invoke,明确地放置,写入数据或将数据放到区块链上。
  • Query,简单地说,从区块链中获取数据或检索数据。

超出基础知识的安装和实例化

在我看来,在生产环境中,链代码安装和实例化通常是一次性过程,一旦安装并实例化特定链代码,它们将始终存在以供将来使用,例如调用和查询。了解如何安装和实例化至关重要。

至少有3种方法可以安装和实例化链码。

  • 1.通过CLI命令提示符下的peer命令,这是一个很好的方法。
  • 2.通过调用Fabric REST api服务器,根据我的经验,这种方法也很不错。
  • 3.通过Hyperledger Composer,这引入了一个全新的范例。虽然我对Hyperledger项目的工作人员给予了最高的尊重,但我对它如何适应整个Fabric架构存在问题,让Composer重新创建Fabric网络等……它似乎走向了许多方向/引入了不必要的额外流程,所以,我个人在避免这个选择。有关此选项未来前景的详细信息,请参阅以下注释和URL,“代表我在XYZ的团队发言,我们都非常自豪我们在过去几年中为Composer做出的贡献,我们都是感谢社区的所有反馈和贡献。然而我们XYZ认为,Composer的架构和设计存在一些基本问题,因此它们使我们重新考虑我们未来的方向和计划。https://lists.hyperledger.org/g/composer/message/125

关于方法1,尝试一下,你可以先打开first-network,然后转到CLI命令提示符docker exec -it cli bash,现在你可以安装并实例化链码,因为mycc已安装,你可以安装fabcar,当你启动Fabric网络时,从./byfn.sh up屏幕显示寻找安装mycc的路径。

安装完成后,你可以通过peer chaincode list - installed命令验证它是否真正安装,然后通过查看mycc链代码的实现情况来实例化fabcar链代码(并确保你在线,它需要一些npm参考)。可能需要几分钟,一旦完成,使用peer chaincode list -C mychannel — instantiated来验证它是否真正实例化。

因此,再次获得执行链码生命周期的能力是非常重要的,如上所述,安装,实例化,调用和查询。

Chaincode编码方式,一种很好的学习方法是阅读和理解样本链代码。Balance-Transfer示例应用程序和Fabcar示例应用程序都是很好的例子。重要的是愿意尝试或调整它们,因此,我们将获得新的理解甚至某种发现。例如,对于First-Network示例应用程序,Instantiate实际上将数据写入链,而Fabcar示例应用程序的Instantiate则不然。因此,我们知道Instantiate可以以更好地满足我们需求的方式编写,而必须这样做。

现在,让我们将关于链码的所有上述通用学习映射到House Transaction区块链应用程序中,在这种情况下,两个关键功能是addTransactionqueryTransaction,因为我使用Node.js作为链码,一个node.js源代码文件可以解决它们,一旦完成,我们使package.json配置文件反映这个node.js源代码文件。然后,我们准备好了如上所述的链码生命周期。

那么,现在,我们已经使用Hyperledger Fabric平台构建了一个区块链网络,并为这个House Transaction区块链应用程序创建了链码,但我们的最终用户需要通过网络或他们的手机访问它,下一步是什么?

当然,开发Web和移动界面到链中,因为这个应用程序是为了业务,我将首先从Web应用程序开始。所以,现在它将我们带到下一部分。

区块链上的Web和移动应用程序

现在的第一个问题是如何将链代码与链的状态数据库和分类帐连接,然后如何将链代码连接到Web应用程序,因此,链代码排在中间。api是一种为两端建立连接的方法。然后api-wise,我们有Fabric api和Composer api。如上所述,我是Occam’s Razor principle的粉丝,它有效地解决了问题(与任何复杂的方法无关),因此,我已经淘汰了Composer api,这意味着Fabric api是我的选择。

简而言之,Fabric API服务器的工作原理如下,在链代码方面,它利用低级api与链代码进行通信,这个低级api称为shim,也称为fabric-shim,然后,在网站上,一些服务器端脚本调用Fabric api进行链数据操作。

现在,让我们展开上面的内容,我们首先运行Fabric API服务器,然后,我们设置一个Web服务器,创建一些服务器端代码来调用API服务器以满足不同类型的链交易需求,例如安装,实例化,调用和查询。

现在,让我们将上一段的概念性亮点转换为这个House Transaction应用程序,对于服务器端代码,我们需要一些代码用于登录页面(FORM)和一些代码来嵌入安全/认证逻辑,然后创建html FORM接受房屋交易数据输入,一些代码接受该交易并将数据写入链,然后一些代码接受查询交易,一些代码处理这样的查询/搜索,从链中获取数据然后呈现有这种结果的用户,如果没有找到则没有。

到目前为止,我们有几个终端/窗口用于Fabric chaincode类型的业务,例如运行Fabric api服务器,用于验证正在运行的进程/已安装的容器/程序,用于运行Web服务器以及可能用于验证文件的另一个;然后,我们为Web应用程序业务部门打开了一个Firefox Web浏览器;以及用于文件/代码创建和编辑的文本编辑器……看看下面的截图,在我看来,有点乱,但NICE的一塌糊涂:

摘要

区块链技术很复杂。我们的背景和能力将影响我们的学习方式和学习速度。与此同时,我们将努力在开始之前寻求清晰,路线图的技术清晰度,我们需要获得的关键知识,每个组件/部件如何与另一个组件连接并组合在一起,首先是什么以及需要遵循什么,我们的首要任务是重要的。我们永远不应低估尝试理性的意愿的价值。

为了更好地理解上述内容,我们可以将它们总结为有能力的Hyperledger Fabric专业人员的三个核心技能组合。 - Fabric区块链网络或网络基础设施的知识和技能; - 能够将链码编写和部署到网络; - 能够通过Fabric API服务器将Web界面的服务器端脚本编写到链代码中。

作为一名从业者,我们需要记住奥卡姆的剃刀原则,效率胜过任何复杂的设计和/或架构。

同样重要的是,我们需要在我们的旅程中不断寻找优秀,称职和经验丰富的人,他们不仅可以丰富我们的知识,而且可以带给我们一种社区感。

与其他区块链平台一样,Hyperledger Fabric技术仍处于初期阶段,好消息似乎是不断发展。

附:目前这个PoC应用程序适用于一个拥有两个节点的组织,我打算将另外一个组织的更多节点/对等体添加到网络中(只需要编辑docker-compose.yaml配置文件并编辑一些链代码参数,重启网络并做一些测试……)。

希望尽快学习的请访问Fabric区块链开发详解,本课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、通道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、nodejs链码与应用开发的操作实践,是Nodejs工程师学习Fabric区块链开发的最佳选择。

======================================================================

分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:

  • EOS教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • tendermint区块链开发详解,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。

汇智网原创翻译,转载请标明出处。这里是原文Hyperledger Fabric构建区块链PoC应用程序进行房屋交易