Hyperledger Composer 十分鐘搭建區(qū)塊鏈


圖片發(fā)自簡(jiǎn)書App

Hyperledger Composer

Linux基金會(huì)托管的Hyperledger項(xiàng)目所提供的Hyperledger Composer致力于解決這樣的問題,借此區(qū)塊鏈開發(fā)者可以輕松地對(duì)業(yè)務(wù)資產(chǎn)、參與者以及事務(wù)建模,將這些模型變成可行的區(qū)塊鏈應(yīng)用。Hyperledger項(xiàng)目始于2015年12月,包含了一系列適用于企業(yè),先進(jìn)的跨行業(yè)開源區(qū)塊鏈技術(shù)。這是Linux基金會(huì)有史以來發(fā)展速度最快的項(xiàng)目,而Hyperledger “聯(lián)盟” 目前已包含多種技術(shù),如Hyperledger Fabric和Hyperledger Sawtooth等區(qū)塊鏈框架,以及提供監(jiān)視、身份、開發(fā)和部署等服務(wù)的工具。Hyperledger Composer正是其中的一種工具。

與所有Hyperledger產(chǎn)品類似,Hyperledger Composer完全開源,并使用了一種開放的治理模式,任何人都可以為其做貢獻(xiàn)或決定未來的發(fā)展方向。

Hyperledger Composer為資產(chǎn)、參與者,以及事務(wù)的建模提供了一種面向特定領(lǐng)域,非常簡(jiǎn)單的建模語(yǔ)言,開發(fā)者可以通過JavaScript編寫實(shí)現(xiàn)事務(wù)邏輯的方法。開發(fā)者可以在自己慣用的任何開發(fā)環(huán)境中編寫這些文件(針對(duì)大部分編輯器提供了必要的插件),并可在一種基于Web的“試驗(yàn)場(chǎng)(Playground)”幫助下開發(fā)、打包、部署并測(cè)試這些項(xiàng)目,同時(shí)還為腳本環(huán)境提供了所需的命令行工具。應(yīng)用程序可部署至Hyperledger Fabric實(shí)例,或在Web瀏覽器中進(jìn)行本地模擬。

Hyperledger Composer還可針對(duì)不同資產(chǎn)生成骨架(Skeleton)命令行或Angular2應(yīng)用,對(duì)Loopback的支持使得我們可以通過RESTful與應(yīng)用交互,這樣區(qū)塊鏈即可連接至現(xiàn)有記錄系統(tǒng),例如可使用集成中間件,如Node.RED或IBM Integration Bus進(jìn)行連接。

設(shè)計(jì)基于區(qū)塊鏈的汽車拍賣解決方案

為了展示Hyperledger Composer的運(yùn)用,我們將使用該技術(shù)創(chuàng)建一個(gè)基于區(qū)塊鏈的汽車拍賣解決方案。這是一種很棒的區(qū)塊鏈應(yīng)用,因?yàn)橐呀?jīng)具備妥善定義的業(yè)務(wù)網(wǎng)絡(luò),適用于高價(jià)值資產(chǎn),因此對(duì)信任的要求更高,必須明確知道(a)不同時(shí)間里車的所有者是誰,以及(b)不同參與者的現(xiàn)金收支情況。從中也可以清楚地知道這樣的應(yīng)用如何能輕松擴(kuò)展并運(yùn)用在其他高價(jià)值資產(chǎn)領(lǐng)域。

首先考慮組成這個(gè)業(yè)務(wù)網(wǎng)絡(luò)的資產(chǎn)、參與者,以及事務(wù):

資產(chǎn):需要考慮兩類資產(chǎn):機(jī)動(dòng)車,對(duì)實(shí)體車輛的數(shù)字化呈現(xiàn),可對(duì)其所有權(quán)進(jìn)行追蹤;以及機(jī)動(dòng)車清單,描述了某輛車正在(或已經(jīng))銷售,以及這一過程中的不同出價(jià)。

參與者:包括代表機(jī)動(dòng)車所有者或購(gòu)買者,并且有足夠貨幣結(jié)余的人或組織成員。此外可能會(huì)有一個(gè)可以關(guān)閉任何商品競(jìng)拍的拍賣商。整個(gè)網(wǎng)絡(luò)還可進(jìn)一步擴(kuò)展,將保險(xiǎn)公司或監(jiān)管機(jī)構(gòu)包含在內(nèi)。

事務(wù):兩種最重要的事務(wù)類型:為機(jī)動(dòng)車出價(jià)的事務(wù),以及關(guān)閉競(jìng)拍的事務(wù)。

圖片發(fā)自簡(jiǎn)書App

圖1 – 汽車拍賣應(yīng)用中的資產(chǎn)、參與者和事務(wù)

上述內(nèi)容定義了組成該區(qū)塊鏈解決方案不同組件所需的類型(Type)。為了測(cè)試我們的區(qū)塊鏈解決方案,我們會(huì)創(chuàng)建這些類型的實(shí)例,并將其存儲(chǔ)在注冊(cè)機(jī)構(gòu)(Registry)內(nèi),注冊(cè)機(jī)構(gòu)是Hyperledger Composer中另一個(gè)重要概念。我們將向機(jī)動(dòng)車、機(jī)動(dòng)車清單、成員,以及拍賣商等注冊(cè)機(jī)構(gòu)中填入數(shù)據(jù),并可提交上文提到的兩類事務(wù)。所有實(shí)例和事務(wù)數(shù)據(jù)均將通過區(qū)塊鏈存儲(chǔ)和訪問,這樣便可被網(wǎng)絡(luò)中的參與者共享和信任。解決方案的開發(fā)者可以通過訪問控制列表決定哪些參與者可以看到哪些資產(chǎn)。

為區(qū)塊鏈汽車拍賣解決方案建模

Hyperledger Composer的所有組件均可下載并本地運(yùn)行,此外還有一個(gè)在線版本的“試驗(yàn)場(chǎng)”,無需安裝任何軟件即可使用。如果希望從本地副本著手嘗試,可參閱Hyperledger Composer文檔頁(yè)提供的快速上手指導(dǎo);如果希望使用在線試驗(yàn)場(chǎng),可直接訪問Hyperledger Composer Playground頁(yè)面。

首次啟動(dòng)試驗(yàn)場(chǎng)并關(guān)掉歡迎界面后,會(huì)看到類似下圖所示的界面(與其他正在活躍開發(fā)的項(xiàng)目一樣,這個(gè)界面后續(xù)可能有所改動(dòng))。

圖片發(fā)自簡(jiǎn)書App

頁(yè)面左側(cè)顯示了組成區(qū)塊鏈項(xiàng)目的所有文件:

一個(gè)About文件 – Markdown格式的說明文件,試驗(yàn)場(chǎng)默認(rèn)將顯示該文件的內(nèi)容。

一個(gè)Model文件 – 定義了項(xiàng)目中涉及的資產(chǎn)、參與者,以及事務(wù)。

一個(gè)Script文件 – 以JavaScript實(shí)現(xiàn)的事務(wù)邏輯。

一個(gè)Access Control List – 決定了哪些參與者可以看到哪些資產(chǎn)。

一個(gè)Add按鈕 – 必要時(shí)可向項(xiàng)目中添加額外的文件。

一個(gè)Deploy按鈕 – 可將對(duì)項(xiàng)目文件的改動(dòng)應(yīng)用給當(dāng)前已連接的區(qū)塊鏈實(shí)例或模擬器。

Import功能可將試驗(yàn)場(chǎng)的內(nèi)容替換為指定的其他內(nèi)容。

Export功能可將整個(gè)解決方案打包為一個(gè)文件,并轉(zhuǎn)移到其他環(huán)境中使用。

界面右側(cè)的主區(qū)域顯示了所選文件的編輯器或查看器。此外頁(yè)面頂部的Define/Test選項(xiàng)卡可供我們?cè)陂_發(fā)或測(cè)試模式之間切換。最后,頁(yè)面右上角可供我們(在本地版本中)模擬另一個(gè)區(qū)塊鏈用戶的身份,連接至自己的線上區(qū)塊鏈實(shí)例,或開始在Web瀏覽器中模擬。在線版試驗(yàn)場(chǎng)目前僅支持模擬器模式。

首先我們需要將試驗(yàn)場(chǎng)窗口中的文件替換為汽車拍賣應(yīng)用所需的文件。此處打算使用預(yù)創(chuàng)建的范例。如果要開發(fā)自己的網(wǎng)絡(luò),通常最好導(dǎo)入范例模板,以此為基礎(chǔ)著手進(jìn)行。

點(diǎn)擊“Import/Replace”按鈕。首先需要通過GitHub進(jìn)行身份驗(yàn)證,隨后將直接通過在線代碼庫(kù)下載可用的范例。如果愿意,也歡迎大家貢獻(xiàn)自己設(shè)計(jì)的網(wǎng)絡(luò)。隨后選擇“carauction-network”并點(diǎn)擊Deploy,這樣即可用Car Auction項(xiàng)目的文件替換試驗(yàn)場(chǎng)中的默認(rèn)文件。

選中Model文件(model/org.acme.vehicle.auction.cto)可查看有關(guān)資產(chǎn)、參與者,以及事務(wù)的定義。同理,Script文件(lib/logic.js)包含了兩個(gè)事務(wù)類型的JavaScript實(shí)現(xiàn)。

重要的是,只需要50行簡(jiǎn)單的特定領(lǐng)域語(yǔ)言代碼以及100行JavaScript,我們就可以定義實(shí)現(xiàn)區(qū)塊鏈解決方案所需的全部元素。

測(cè)試區(qū)塊鏈汽車拍賣解決方案

單擊試驗(yàn)場(chǎng)頂部的“Test”選項(xiàng)卡,即可與參與者和資產(chǎn)注冊(cè)機(jī)構(gòu)交互,并能將事務(wù)提交至區(qū)塊鏈。該選項(xiàng)卡下顯示的一切內(nèi)容都是從Model文件動(dòng)態(tài)推導(dǎo)的。

首先在Member注冊(cè)機(jī)構(gòu)創(chuàng)建幾個(gè)參與者:為他們分配一定的初始金額(這里是通過最簡(jiǎn)單的整數(shù)實(shí)現(xiàn)的),以及用于進(jìn)行唯一性區(qū)分的郵件地址,當(dāng)然還有姓名。

隨后在Vehicle注冊(cè)機(jī)構(gòu)創(chuàng)建一輛機(jī)動(dòng)車:VIN(機(jī)動(dòng)車識(shí)別號(hào))是一種具備唯一性的標(biāo)識(shí)字符串,初始所有者可以是已創(chuàng)建完成的某個(gè)所有者的郵件地址(因?yàn)槟P鸵褜⑧]件地址定義為唯一標(biāo)識(shí)符)。

最后創(chuàng)建一個(gè)Vehicle Listing:為其分配一個(gè)唯一的清單ID,填入底價(jià)和描述信息。此時(shí)的狀態(tài)應(yīng)該是“FOR_SALE”,建議清空?qǐng)?bào)價(jià)數(shù)組("offers" : [])。Vehicle字段應(yīng)包含所創(chuàng)建機(jī)動(dòng)車的VIN字符串,因?yàn)槟P鸵褜IN字段定義為唯一標(biāo)識(shí)符。

注冊(cè)機(jī)構(gòu)設(shè)置完畢后,即可通過提交事務(wù)的方式為該機(jī)動(dòng)車添加報(bào)價(jià)。單擊“Submit Transaction”,選擇事務(wù)類型為“Offer”并填寫競(jìng)標(biāo)價(jià)格、列表(上文輸入的唯一列表ID)以及成員(出價(jià)的參與者對(duì)應(yīng)的郵件地址)。這會(huì)導(dǎo)致Offer事務(wù)相關(guān)聯(lián)的JavaScript開始運(yùn)行,將新的報(bào)價(jià)添加到相關(guān)清單的報(bào)價(jià)數(shù)組中。

添加了幾個(gè)報(bào)價(jià)后,可以試著關(guān)閉競(jìng)標(biāo)。再次提交一個(gè)事務(wù),這次選擇事務(wù)類型為“CloseBidding”,此時(shí)只需要指定唯一的清單ID。提交該事務(wù)會(huì)運(yùn)行CloseBidding事務(wù)所關(guān)聯(lián)的JavaScript。這些代碼會(huì)查找超出底價(jià)最高的競(jìng)拍價(jià)格,為賣家的余額增加這一金額,并從買家的余額中減去同樣金額,隨后轉(zhuǎn)移機(jī)動(dòng)車的所有權(quán)。隨后如果重新切換回相應(yīng)的Vehicle和Member注冊(cè)機(jī)構(gòu)就可以看到,這些操作會(huì)顯示為均已完成。

下一步

通過上述操作可以看到,只需花費(fèi)少量時(shí)間以及幾行代碼,就可以開發(fā)出一個(gè)完備的區(qū)塊鏈原型。如果想要將本文討論的概念應(yīng)用在自己的區(qū)塊鏈項(xiàng)目中,也可以通過類似的方式著手。首先確定區(qū)塊鏈可以解決的現(xiàn)實(shí)業(yè)務(wù)挑戰(zhàn):業(yè)務(wù)網(wǎng)絡(luò)是必備的,當(dāng)然還需要參與者之間有很強(qiáng)的信任關(guān)系。隨后可以考慮問題所涉及的資產(chǎn)、參與者以及事務(wù)??梢栽囍ㄟ^Hyperledger Composer建模,隨后進(jìn)行測(cè)試并迭代完善。

當(dāng)然,這種方法真正的價(jià)值在于,最終用戶的應(yīng)用程序可以提交并查詢真實(shí)的業(yè)務(wù)事務(wù)。在著手編寫這樣的事務(wù)之前,建議閱讀Hyperledger Composer的應(yīng)用程序生成器上手指南。借此可通過業(yè)務(wù)網(wǎng)絡(luò)存檔生成Angular2或命令行應(yīng)用程序范例。這種方式無法實(shí)現(xiàn)任何完備的應(yīng)用程序,但可以幫助你更專注于開發(fā)最終用戶應(yīng)用程序邏輯,而非與區(qū)塊鏈的交互。

Hyperledger Composer的優(yōu)勢(shì)不僅在于可以快速開發(fā)區(qū)塊鏈解決方案,而且在于可以幫助我們通過快速迭代滿足額外的需求,并能提供必要的技術(shù),幫助我們盡可能簡(jiǎn)單地向他人描述所發(fā)生的事情。

Hyperledger Composer是一個(gè)社區(qū)項(xiàng)目,該項(xiàng)目的成功離不開開發(fā)者社區(qū)的活躍貢獻(xiàn)。如果對(duì)于該項(xiàng)目你有喜歡的或不喜歡的地方,歡迎反饋給開發(fā)團(tuán)隊(duì)。如果愿意,你也可以參與進(jìn)來,Hyperledger網(wǎng)站介紹了參與方法。

總結(jié):區(qū)塊鏈的潛力

區(qū)塊鏈有著無窮的潛力。IBM認(rèn)為區(qū)塊鏈對(duì)交易和事務(wù)的促進(jìn),完全比得上互聯(lián)網(wǎng)對(duì)交流和信息流動(dòng)的促進(jìn),因此我們也期待著這個(gè)技術(shù)能為商業(yè)帶來巨大的積極影響。作為區(qū)塊鏈技術(shù)的踐行者,我們完全可以讓這一切變?yōu)楝F(xiàn)實(shí)!

本文首發(fā)于微信公眾號(hào):wfx_tech 歡迎關(guān)注交流 ^.^

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容