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

夕雨 发布在 技术指南 2 19806

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

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

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

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

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

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

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

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

 

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

 

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

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

$ yo hyperledger-composer

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

3

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

4

删除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中从tofrom之间发生的交易。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文件。

5

 

步骤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文件夹)

6

 

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

 

$ composer card import --file networkadmin.card

YRqgNvRjG4sA

 

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

 

$ composer network ping --card admin@test-bank

8

步骤5:公开一个RESTful API

 

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

$ composer-rest-server

这会产生很多问题。

9

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

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

10

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

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

11

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

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

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

12

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

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

13

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

14

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

15

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

17

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

 

步骤6:Angular前端

 

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

$ yo

这将涉及多个问题。

18

需要几分钟。

进入 bank-app。

$ npm start

Angular服务器将启动。

19

Angular文件结构如下所示:

20

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

21

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

22

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

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

准备好你的前端和后端!

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

发文时比特币价格 ¥62559.52
原文:https://medium.freecodecamp.org/ultimate-end-to-end-tutorial-to-create-an-application-on-blockchain-using-hyperledger-3a83a80cbc71
作者:Niharika Singh
编译:夕雨
稿源(译):巴比特资讯(http://www.8btc.com/create-an-application-on-blockchain-using-hyperledger)
版权声明: by nc" sa 作者保留权利。文章为作者独立观点,不代表巴比特立场。

评论:2

您需要登录后才可以回复 登录|注册
    Author Image
    merry 65天前

    0xadab8c6d5b160a05136c317d15f071ffe3459fdcbeedf9a176b57ac12a071bf5
    赞助87.22 BTM

    +1
    +1
    我要点评
    链圈观察员
    链圈观察员 71天前

    如何使用超级账本创建一条区块链_巴比特_服务于区块链创新者http://t.cn/REFnYOf ​

    +1
    +1
    我要点评