风险提示:理性看待区块链,提高风险意识!
如何使用超级账本创建一条区块链
首页 > 币界资讯 > 区块链知识 2018-03-12 18:14:00

我们在这篇文章中将讲述如何使用超级账本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 [email protected] –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上,反之亦然。而这全都在区块链上。

上一篇: bip-0199:hash时间锁定合约交易
下一篇: [译]无脚本的脚本:比特币如何支持没有智能合约的智能合约
推荐专栏
web3首席知识博主
一位相信价值投资的币圈KOL。稳定盈利的缠论野生交易员 #BTC行情分析师 #价值投资 #链上数据分析
爱Web 3,爱生活,爱科技,爱炒币的老韭菜
热门币种
更多
币种
价格
24H涨跌幅
BTC比特币
¥264,358.04
37,039.98 USDT
-0.08%
ETH以太坊
¥14,381.54
2,015.04 USDT
-0.33%
USDT泰达币
¥7.20
1.01 USDT
+0.03%
BNB币安币
¥1,622.26
227.30 USDT
-0.04%
XRP瑞波币
¥4.34
0.60860 USDT
+1.11%
USDC
¥7.14
1.00 USDT
+0.04%
SOLSolana
¥397.24
55.66 USDT
+0.89%
OKBOK币
¥398.18
55.79 USDT
-1.98%
ADA艾达币
¥2.68
0.37490 USDT
-1.52%
DOGE狗狗币
¥0.55410
0.07765 USDT
-1.04%
热搜币种
更多
币种
价格
24H涨跌幅
Terra Classic
¥0.00
9.433E-5 USDT
-17.92%
Gala
¥0.18
0.025395 USDT
-4.47%
dYdX
¥22.45
3.1738 USDT
-1.74%
比特股
¥0.05
0.006817 USDT
+3.93%
PancakeSwap
¥15.45
2.1845 USDT
-3.6%
Conflux
¥1.07
0.1514 USDT
-3.57%
Filecoin
¥31.38
4.4363 USDT
-1.25%
FTX Token
¥30.21
4.2702 USDT
+16.02%
Shiba Inu
¥0.00
8.12E-6 USDT
-2.52%
Yield Guild Games
¥2.54
0.3591 USDT
-0.91%
比特币
¥262,018.97
37039.98 USDT
-0.08%
比原链
¥0.07
0.010012 USDT
-5.35%
最新快讯
更多
汇丰、恒生、渣打、富邦华一四家外资银行入围首批“数字人民币”业务试点名单
2023-11-28 19:06:57
摩根大通和Apollo计划建立代币化“企业主网”
2023-11-28 19:03:57
Nansen2公测版本上线,新增链上数据异动、智能搜索等功能
2023-11-28 18:59:52
西班牙公民需在明年3月底前申报其海外平台上加密货币持仓
2023-11-28 18:53:43
Nansen2已公开测试
2023-11-28 18:53:38
dYdX基金会:主网启动以来超过1645万DYDX被质押
2023-11-28 18:52:07
NicCarter等比特币倡导者发文:比特币挖矿是清洁能源和平衡电网的关键工具
2023-11-28 18:47:58
下载币界网APP