鏈聞 ChainNews:

這篇文章將講述如何使用超級賬本 Composer 創建一個數字銀行。這個數字銀行會有用戶和賬戶,並且在最後還將能夠在區塊鏈上轉移資金和記錄所有交易。同時文章還將公開一個 RESTful API,從而即使一個不知道什麼是區塊鏈的人,也可以在它周圍建立一個漂亮的用戶界面。

作者 | Niharika Singh

編譯 | 夕雨

我們在這篇文章中將講述如何使用超級賬本 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 中從 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 文件。

步驟 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 文件夾)

步驟 4.3:導入網絡管理員身份作爲可用的業務網絡卡片

$ composer card import –file networkadmin.card

步驟 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 上,反之亦然。而這全都在區塊鏈上。

更多精彩內容,關注鏈聞 ChainNews 公衆號(id:chainnewscom),或者來微博@ 鏈聞 ChainNews 與我們互動!轉載請註明版權和原文鏈接!

來源鏈接:medium.freecodecamp.org