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

网络
  • 链闻
  • 2018-07-05 01:00

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

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

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

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

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

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

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

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

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

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

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

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

$ yo hyperledger-composer

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

2b84450e-114f-5f2f-bdde-d5e7d787a1b5_FxFCOsX.png

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

8f2cec21-d232-541e-8aa1-73f8d0895428_Tw7WJ5e.png

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

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

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

namespace test asset Account identified by accountId { o String accountId --> Customer owner o Double balance } participant Customer identified by customerId { o String customerId o String firstName o String lastName } transaction AccountTransfer { --> Account from --> Account to o Double amount }

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 中添加交易逻辑。

/** *Sample transaction *@param {test.AccountTransfer} accountTransfer *@transaction */ function accountTransfer(accountTransfer) { if (accountTransfer.from.balance < accountTransfer.to.balance) { throw new Error ("Insufficient funds"); } accountTransfer.from.balance -= accountTransfer.amount; accountTransfer.to.balance += accountTransfer.amount; return getAssetRegistry('test.Account') .then (function (assetRegistry) { return assetRegistry.update(accountTransfer.from); }) .then (function () { return getAssetRegistry('test.Account'); }) .then(function (assetRegistry) { return assetRegistry.update(accountTransfer.to); }); }

@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 文件。

f11ed524-ea40-5fd0-a24b-daa2d17a83c5_AEuzZA7.png

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

步骤 4.1:安装 composer runtime

$ composer runtime install --card PeerAdmin@hlfv1 --businessNetworkName test-bank

步骤 4.2:部署业务网络

$ composer network start –card PeerAdmin@hlfv1 –networkAdmin admin –networkAdminEnrollSecret adminpw –archiveFile test-bank@0.0.1.bna –file networkadmin.card (确保你进入了 test-bank 文件夹)

1cd7b376-ba61-59fc-93ab-f49c1d242605_uWQZXBd.png

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

$ composer card import --file networkadmin.card

52ced040-44ca-5cb5-a32a-c435c2632faf_ATehB6x.png

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

781965e4-398d-521d-8f26-99f6cb670826_6mtU1IL.png

步骤 5:公开一个 RESTful API

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

$ composer-rest-server

这会产生很多问题。

3609f90a-faaa-529c-b41b-e97510e6b1fd_FR01RSD.png

现在使用浏览器打开 https://localhost:3000/explorer

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

e42f2b87-0dae-5051-86f0-153454c55913_feMVCc9.png

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

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

3f481acc-e1cb-59af-9d6a-12e9a66dddac_nulVrR8.png

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

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

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

d140e5dd-8d28-5579-99a9-0511669b209c_oVuV6zA.png

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

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

59cff2bb-25d8-587e-bf5f-70d058c6eae5_a49ybWa.png

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

d81d22a4-45f2-57dd-bb81-cfc5edaab2f0_2cufeXg.png

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

d8582241-f36e-51b0-96cd-ad22e48e9238.png

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

e087fe1f-2d9b-5b7a-86c4-f6bc1065510b_SMshWD2.png

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

步骤 6:Angular 前端

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

$ yo

这将涉及多个问题。

d1d0f0e1-f0fc-58d3-98c5-761791e01499.png

需要几分钟。

进入 bank-app。

$ npm start

Angular 服务器将启动。

54a2f3f0-2a69-57a9-a0c7-476afd7e5acb.png

Angular 文件结构如下所示:

dac7756a-9b38-51a1-bedb-49e739f18e58.png

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

6f787b14-9eae-5007-9a20-f3c760bbe401.png

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

6726ecb6-4948-5579-8c5a-f6064222a2bc.png

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

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

准备好你的前端和后端!

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


来源:链闻

作者:夕雨

编辑:jinpeng

图片来源:

本文链接: https://www.aiust.com/article/20180705/495.html

声明:除非注明,本站文章均为AIUST.Com原创或编译,转载时请注明文章作者和“来源:AIUST.Com”,AIUST.Com尊重行业规范,每篇文章都标有明确的作者和来源。文章为作者观点,不代表AIUST.Com立场。部份图片来自网络,如有侵权,请联系我们删除!

相关文章

资讯

原创

荐读

  • 智能手机竞争中失败,日本在联网汽车领域举步维艰 智能手机竞争中失败,日本在联网汽车领域举步维艰

    据外媒报道,在制造带有数字联网服务的汽车的竞争中,丰田汽车和日产汽车面临着被本土市场拖累的风险。与美国和欧洲的汽车消费者不同的是,日本消费者不愿意为这些联网功能和服务买单。结果就是:日本只有10%的汽车...

  • 2020年河南省将推广应用3万台工业机器人 2020年河南省将推广应用3万台工业机器人

    到2020年,推广应用3万台工业机器人,建设1000条智能生产线、300个智能车间、150个智能工厂……4月16日,在2018两岸智能装备制造郑州论坛上,河南省工信委发布了《2017年河南省智能制造白皮书》,河南智能制造的2020...

  • 全国首个获批建设国家技术标准(贵州大数据)创新基地 全国首个获批建设国家技术标准(贵州大数据)创新基地

    近日,国家标准委复函批准 , 同意贵州省建设国家技术标准 ( 贵州大数据 ) 创新基地,标志着贵州成为全国首个获批建设大数据国家技术标准创新基地的省份。按照国家标准委批复要求,国家技术标准 ( 贵州大数据 ) 创新...

热门标签