Marbles 演示
關(guān)于 Marbles
這個(gè)應(yīng)用程序的基礎(chǔ)網(wǎng)絡(luò)是 Hyperledger Fabric,后者是一個(gè) Linux Foundation 項(xiàng)目。您可能想查閱以下操作說(shuō)明來(lái)稍微了解一下 Hyperledger Fabric。
本演示旨在幫助開(kāi)發(fā)人員了解鏈代碼的基礎(chǔ)知識(shí)以及如何使用 Fabric 網(wǎng)絡(luò)開(kāi)發(fā)應(yīng)用程序。
這是一個(gè)非常簡(jiǎn)單的資產(chǎn)轉(zhuǎn)移演示。多個(gè)用戶可以創(chuàng)建并相互轉(zhuǎn)移彈珠。

-
Marbles - 分支 v4.0.2 (Latest)(您將看到這個(gè)分支?。?/p>
兼容 Hyperledger Fabric v1.0.1、v1.0.0 和 v1.0.0-rc1
兼容 IBM Blockchain Bluemix 服務(wù) - IBM Blockchain Platform - Enterprise 計(jì)劃
應(yīng)用程序背景
請(qǐng)大家集中注意力,這個(gè)應(yīng)用程序?qū)⒀菔救绾卫?Hyperledger Fabric 在許多彈珠所有者之間轉(zhuǎn)移彈珠。
我們將在 Node.js 中使用一些 GoLang 代碼完成此任務(wù)。
該應(yīng)用程序的后端將是在我們的區(qū)塊鏈網(wǎng)絡(luò)中運(yùn)行的 GoLang 代碼。
從現(xiàn)在開(kāi)始,這些 GoLang 代碼將稱為 ‘鏈代碼’ 或 ‘cc’。
該鏈代碼本身會(huì)創(chuàng)建一顆彈珠,將它存儲(chǔ)到鏈代碼狀態(tài)中。
該鏈代碼本身可以將數(shù)據(jù)作為字符串存儲(chǔ)在鍵/值對(duì)設(shè)置中。
因此,我們將字符串化 JSON 對(duì)象,以便存儲(chǔ)更復(fù)雜的結(jié)構(gòu)。
彈珠的屬性包括:
- ID(唯一字符串,將用作鍵)
- 顏色(字符串,CSS 顏色名稱)
- 尺寸(int,以毫米為單位)
- 所有者(字符串)
我們將創(chuàng)建一個(gè)基于 Web 的用戶界面,它可以設(shè)置這些值并將它們存儲(chǔ)在區(qū)塊鏈中。
這顆彈珠是在區(qū)塊鏈存儲(chǔ)(也稱為賬本)中以鍵值對(duì)的形式創(chuàng)建的。
鍵為彈珠 ID,值為一個(gè)包含(上面列出的)彈珠屬性的 JSON 字符串。
與 cc 的交互是通過(guò)對(duì)網(wǎng)絡(luò)上的一個(gè)節(jié)點(diǎn)使用 gRPC 協(xié)議來(lái)完成的。
gRPC 協(xié)議的細(xì)節(jié)由一個(gè)名為 Hyperledger Fabric Client SDK 的 SDK 處理。
請(qǐng)查看下圖了解拓?fù)浣Y(jié)構(gòu)細(xì)節(jié)。
應(yīng)用程序通信流

- 管理員將在他們的瀏覽器中與我們的 Node.js 應(yīng)用程序 Marbles 進(jìn)行交互。
- 此客戶端 JS 代碼將打開(kāi)一個(gè)與后端 Node.js 應(yīng)用程序的 Websocket 連接。管理員與該站點(diǎn)交互時(shí),客戶端 JS 將消息發(fā)送到后端。
- 讀取或?qū)懭胭~本稱為提案。這個(gè)提案由 Marbles(通過(guò) SDK)構(gòu)建,然后發(fā)送到一個(gè)區(qū)塊鏈節(jié)點(diǎn)。
- 該節(jié)點(diǎn)將與它的 Marbles 鏈代碼容器進(jìn)行通信。鏈代碼將運(yùn)行/模擬該交易。如果沒(méi)有問(wèn)題,它會(huì)對(duì)該交易進(jìn)行背書(shū),并將其發(fā)回我們的 Marbles 程序。
- 然后,Marbles(通過(guò) SDK)將背書(shū)后的提案發(fā)送到訂購(gòu)服務(wù)。訂購(gòu)方將來(lái)自整個(gè)網(wǎng)絡(luò)的許多提案打包到一個(gè)區(qū)塊中。然后,它將新的區(qū)塊廣播到網(wǎng)絡(luò)中的節(jié)點(diǎn)。
- 最后,節(jié)點(diǎn)會(huì)驗(yàn)證該區(qū)塊并將它寫(xiě)入自己的賬本中。該交易現(xiàn)在已經(jīng)生效,所有后續(xù)讀取都會(huì)反映此更改。
鏈代碼部分 - 這是在區(qū)塊鏈網(wǎng)絡(luò)上運(yùn)行的/包含節(jié)點(diǎn)的 GoLang 代碼。也稱為 cc。所有彈珠/區(qū)塊鏈交互最終都會(huì)在這里進(jìn)行。這些文件位于 /chaincode 中。
客戶端 JS 部分 - 這是在用戶瀏覽器中運(yùn)行的 JavaScript 代碼。用戶界面交互在這里執(zhí)行。這些文件位于 /public/js 中。
服務(wù)器端 JS 部分 - 這是運(yùn)行應(yīng)用程序的后端的 JavaScript 代碼,即為 Marbles 的核心的 Node.js 代碼!有時(shí)該代碼也稱為我們的節(jié)點(diǎn)或服務(wù)器代碼。它充當(dāng) Marbles 管理員與我們的區(qū)塊鏈之間的連接器。這些文件位于 /utils 和 /routes 中。
Marbles 設(shè)置
0.設(shè)置本地環(huán)境
安裝Fabric環(huán)境要求配置
1.下載 Marbles
git clone https://github.com/IBM-Blockchain/marbles.git
cd marbles
git checkout v4.0.2
2.啟動(dòng)Fabric網(wǎng)絡(luò)
版本: Hyperledger Fabric v1.0.0
fabric-samples
cd fabric-samples/fabcar
./startFabric.sh
node enrollAdmin.js
node registerUser.js
node query.js




3.安裝并實(shí)例化Marbles的鏈代碼
npm install
cd ./scripts
./build_marbles_image.sh
node install_chaincode.js
node instantiate_chaincode.js



4.啟動(dòng) Marbles
npm install gulp -g
npm install
gulp marbles_local

使用 Marbles
啟動(dòng)后訪問(wèn)http://ip:3001
