Py学习  »  区块链

如何使用超级账本创建一条区块链

Unitimes • 5 年前 • 306 次点击  

unitimes.media

全球视角,独到见解


“我在这篇文章中将讲述如何使用超级账本Composer创建一个数字银行。这个数字银行会有用户和账户,并且在最后,你还将能够在区块链上转移资金和记录所有交易。我们同时还将公开一个RESTful API,从而即使一个不知道什么是区块链的人,也可以在它周围建立一个漂亮的用户界面(UI)。我们还将在Angular中创建这个应用的UI。”



我非常兴奋能和你分享这个一步步的指南。所以我们马上开始吧!


当我第一次编写这个代码时,我遇到了错误,很多很多。但我认为那很好,因为这让我学到了很多东西。错误是必不可少的。我认为错误和曲折会使事情变得更好。这几乎使我失去理智,但这对一个黑客的生涯来说是不可或缺的一部分。


在开始之前,您需要确保所使用的机器配备了所需的配置。您可能需要下载某些必备软件并设置一个基本的开发环境。下面的链接可以告诉你怎么做。在开始开发应用程序之前,请遵循这些步骤,否则您肯定会遇到愚蠢的错误。


首先安装超级账本Composer。然后安装开发环境。

安装开发环境时不需要启动Playground。


当你运行./startFabric.sh 时,确保docker也正在运行。这个过程需要几分钟完成,请耐心等待。


设备现在已经安装好了,我们就可以开始编码了!


步骤1:概述您的业务网络。


我们的业务网络定义(BND)包括数据模型、交易逻辑和访问控制规则。数据模型和访问控制规则是用特定领域的语言编写的(很简单就能跟上)。交易逻辑将用javascript编码。


要想创建一个BND,我们需要在磁盘上创建一个合适的项目结构。我们将使用Yeoman创建一个基本的业务网络。若要创建项目结构,请打开终端并运行以下命令:$ yo hyperledger-composer


这将遇到一系列问题,如下所示。你需要使用你的方向键来在答案中进行导航。



使用你最擅长的文本编辑器中打开这个项目。本文中我使用的是Visual Code。下图便是这个文件结构的样式:



删除test/logic.js中的内容。我们现在用不到它。


  步骤2.1:编写业务网络代码(models/test.cto)


首先,我们将定义models/test.cto。它包含业务网络中所有资产、参与者和交易的类定义。这个文件是以超级账本Composer建模语言编写的。



Account(账户)是一种与accountId独一无二地相对应的资产。每一个Account都与Customer(客户)相连,Customer是账户的owner(所有者)。Account具有balance(余额)属性,可以随时显示这个Account所持有的资金多少。


Customer是一个与accountId独一无二地相对应的参与者。每一个Customer都有firstName(名)和lastName(姓)。


AccountTransfer是在Account中从to和from之间发生的交易。Amount则存储的是转移的资金多少。


  步骤2.2:编写业务网络代码(lib/logic.js)


在这个文件中,我们将在javascript中添加交易逻辑。



@param {test.AccountTransfer} accountTransfer是我们放在这个文件顶端来将这笔交易与我们的JavaScript函数连接在一起的装饰模式。然后我们验证资金所在的账户是否有足够的资金。否则,程序将抛出错误。然后,我们对帐户的余额进行基本的加减。


此时,最重要的一步是更新区块链上的内容。


对此,我们将调用我们资产(也就是Account)的getAssetRegistry API 。然后我们为收取资金的账户和发出资金的账户update(更新)被检索到的assetRegistry。


步骤3:生成业务网络存档 (BNA)


业务网络被定义过后必须打包到一个可部署的业务网络存档(.bna)文件。


  步骤3.1:导航到终端中的test-bank App中。


  步骤3.2:运行以下命令:


$ composer archive create -t dir -n .


这将在test-bank文件夹中创建一个.bna文件。



步骤4:在Fabric上部署业务网络存档文件。


  步骤4.1:安装composer runtime



步骤4.2:部署业务网络



(确保你进入了test-bank文件夹)


 

步骤4.3:导入网络管理员身份作为可用的业务网络卡片



步骤4.4:检查业务网络是否已成功部署,请运行以下命令行ping这个网络:



步骤5:公开一个RESTful API


要从命令行创建RESTful API,请运行以下命令:


$ composer-rest-server


这会产生很多问题。



现在使用浏览器打开

http://localhost:3000/explorer


您将看到您漂亮的区块链API。



现在让我们添加两个客户(Customer)。


首先,让我们添加一个叫Niharika Singh的客户:



我们得到了200个响应代码。


现在我们将以类似的方法添加一位叫Tvesha Singh的客户。


若要检查是否正确添加了它们,请获取(GET)它们。



你会在响应体中看到两个客户。


现在,让我们添加两个与这两个客户相关的帐户(account)。



以这种方式添加账户。现在,通过获取账户来检查你是否添加成功。



现在让我们从Niharika向Tvesha转账75。



让我们通过获取帐户信息看看余额是否更新了。



太棒了,成功了。Niharika现有有了25,而Tvesha有125。


步骤6:Angular前端


要自动创建Angular脚手架,请在test-bank文件夹中运行以下命令:


$ yo


这将涉及多个问题。



需要几分钟。


进入 bank-app。


$ npm start


Angular服务器将启动。



Angular文件结构如下所示:



使用浏览器打开http://localhost:4200。魔法就在这里发生!你会在屏幕上看到以下内容:



现在通过界面右上部进入Assets并点击Account。



这些便是我们创建的账户。


现在你自己动手可以尝试一下了。


准备好你的前端和后端!


所有发生在localhost:3000上的交易都将反应在localhost:4200上,反之亦然。而这全都在区块链上。


作者:Niharika Singh


编译:夕雨


原文链接:

https://medium.freecodecamp.org/ultimate-end-to-end-tutorial-to-create-an-application-on-blockchain-using-hyperledger-3a83a80cbc71

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


【文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表Unitimes赞同其观点或证实其描述。】

国际金融科技新媒体和社区平台

UNITIMES

网址 : unitimes.media

新浪微博:@Unitimes



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/JRor8odCLz
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/11822
 
306 次点击