区块链世界

标题: 如何使用超级账本创建一条区块链 [打印本页]

作者: 英子    时间: 2018-4-24 18:10
标题: 如何使用超级账本创建一条区块链
我们在这篇文章中将讲述如何使用超级账本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建模语言编写的。
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文件。


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


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

$ composer card import --file networkadmin.card


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

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



步骤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上,反之亦然。而这全都在区块链上。
                                                                                                                                                                                                                                            发文时比特币价格                                                                                        ¥62559.52




欢迎光临 区块链世界 (http://1868888.com/) Powered by Discuz! X3.2