區(qū)塊鏈智能合約技術(shù)與應(yīng)用 課件 第7、8章 Hyperledger Composer業(yè)務(wù)網(wǎng)絡(luò)實戰(zhàn)-提高篇;Hyperledger Composer客戶端接入_第1頁
區(qū)塊鏈智能合約技術(shù)與應(yīng)用 課件 第7、8章 Hyperledger Composer業(yè)務(wù)網(wǎng)絡(luò)實戰(zhàn)-提高篇;Hyperledger Composer客戶端接入_第2頁
區(qū)塊鏈智能合約技術(shù)與應(yīng)用 課件 第7、8章 Hyperledger Composer業(yè)務(wù)網(wǎng)絡(luò)實戰(zhàn)-提高篇;Hyperledger Composer客戶端接入_第3頁
區(qū)塊鏈智能合約技術(shù)與應(yīng)用 課件 第7、8章 Hyperledger Composer業(yè)務(wù)網(wǎng)絡(luò)實戰(zhàn)-提高篇;Hyperledger Composer客戶端接入_第4頁
區(qū)塊鏈智能合約技術(shù)與應(yīng)用 課件 第7、8章 Hyperledger Composer業(yè)務(wù)網(wǎng)絡(luò)實戰(zhàn)-提高篇;Hyperledger Composer客戶端接入_第5頁
已閱讀5頁,還剩155頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第7章HyperledgerComposer業(yè)務(wù)

網(wǎng)絡(luò)實戰(zhàn)——提高篇7.1貨幣貿(mào)易網(wǎng)絡(luò)案例分析7.2能源購置網(wǎng)絡(luò)案例分析7.3產(chǎn)品拍賣網(wǎng)絡(luò)案例分析本章小結(jié)

7.1貨幣貿(mào)易網(wǎng)絡(luò)案例分析

7.1.1網(wǎng)絡(luò)建模該業(yè)務(wù)網(wǎng)絡(luò)涉及以下幾個方面的內(nèi)容:貨幣,交易者、警察,制造貨幣,交易貨幣,銷毀假幣。資產(chǎn)包含貨幣。在貨幣貿(mào)易網(wǎng)絡(luò)中,將模擬貨幣生產(chǎn)、交易以及假幣銷毀的過程,因此需要如下參與者:交易者,警察。

交易包含業(yè)務(wù)如下:

·交易者制造貨幣;

·交易者之間交易貨幣;

·警察銷毀假幣;

·批量銷毀貨幣。

確認(rèn)模型后,開始編寫代碼實現(xiàn)模型。

7.1.2代碼實現(xiàn)

首先用Yeoman生成工程目錄結(jié)構(gòu),并新建lib文件夾和logic.js,如圖7-1所示。圖7-1工程目錄結(jié)構(gòu)

1.CTO建模

1)利用枚舉設(shè)置狀態(tài)

使用貨幣狀態(tài)來標(biāo)識貨幣的真?zhèn)危媒灰渍郀顟B(tài)標(biāo)識其是否合法。

貨幣狀態(tài)如下:

交易者狀態(tài)如下:

2)設(shè)置相關(guān)資產(chǎn)

貨幣結(jié)構(gòu)如下(通過引用類型指向該貨幣目前的擁有者與貨幣制造者):

3)設(shè)置參與者

設(shè)置參與者的抽象類,結(jié)構(gòu)如下:

貨幣交易者結(jié)構(gòu)如下(通過引用類型數(shù)組指向該交易者現(xiàn)持有的貨幣):

警察的結(jié)構(gòu)如下:

4)編寫交易代碼

制造貨幣交易代碼如下:

交易貨幣交易代碼如下:

銷毀假幣交易代碼如下:

批量銷毀貨幣交易代碼如下:

2.業(yè)務(wù)邏輯

貨幣貿(mào)易網(wǎng)絡(luò)的業(yè)務(wù)邏輯代碼寫在lib目錄下的logic.js文件中。

(1)常量定義,代碼如下:

(2)制造貨幣,代碼如下:

上述代碼對應(yīng)的業(yè)務(wù)邏輯可被簡述為:獲取貨幣制造者的參與者信息并判斷操作是否合法→創(chuàng)建新的貨幣實例并賦值→將新的貨幣實例加入制造者的“現(xiàn)持有貨幣”數(shù)組→與注冊器交互更新相應(yīng)資源的狀態(tài)。

(3)交易貨幣,代碼如下:

上述代碼對應(yīng)的業(yè)務(wù)邏輯可被簡述為:獲取交易雙方的參與者信息并判斷購買者余額是否足夠→改變交易雙方的剩余額度→將交易中的貨幣實例加入買方的“現(xiàn)持有貨幣”數(shù)組,并從賣方的對應(yīng)數(shù)組中移除該貨幣→與注冊器交互更新相應(yīng)資源的狀態(tài)。

(4)銷毀貨幣,代碼如下:

上述代碼對應(yīng)的業(yè)務(wù)邏輯可被簡述為:檢查被操作貨幣的屬性→若滿足條件,則從“持有貨幣”數(shù)組中移除該貨幣實例并標(biāo)記貨幣制造者為‘非法’用戶→與注冊器交互,對貨幣實例進行銷毀操作→與注冊器交互更新相應(yīng)資源的狀態(tài)。

(5)批量銷毀貨幣,代碼如下:

業(yè)務(wù)邏輯所用到的輔助函數(shù)selectCoinsByStatus可用如下方式進行配置:

在項目根目錄(trade-network)下新建queries.qry文件,所有的自定義查詢都編寫在該文件中。

定義一個查詢。Hyperledger天生支持LevelDB和CouchDB兩種數(shù)據(jù)庫,因此可以使用類sql語句從數(shù)據(jù)庫中查詢數(shù)據(jù)。

批量銷毀貨幣交易時,需接收一個貨幣狀態(tài)參數(shù),因此要使用條件查詢(where)。查詢status等于傳入貨幣狀態(tài)的所有貨幣,代碼如下:

(6)編寫輔助函數(shù)。從貨幣數(shù)組中移除指定貨幣,可通過遍歷“貨幣持有”數(shù)組中的貨幣實例,根據(jù)貨幣ID判斷其是否為需要移除的對象。代碼如下:

7.1.3情景模擬

1.貨幣交易

小王和小明是兩位交易者。小王制作了一枚貨幣,小明想用金錢將其買下來。

(1)創(chuàng)建交易者小王和小明,代碼如下:

(2)執(zhí)行制造貨幣交易(MakeCoinTransaction),制造一枚貨幣,代碼如下:

新創(chuàng)建的貨幣信息如下所示(剛生產(chǎn)的貨幣的owner和maker相同):

根據(jù)業(yè)務(wù)邏輯,該貨幣將被自動放入制作者的錢包,代碼如下:

(3)購買貨幣,執(zhí)行貨幣交易(TradeCoinTransaction),代碼如下:

交易成功,該貨幣更換了主人,代碼如下:

賣方(貨幣制造者)金錢增加20,數(shù)據(jù)如下:

買方金錢減少20,將買到的貨幣放入錢包,數(shù)據(jù)如下:

2.假幣銷毀

上述情景中,小王實際上制作了一枚假幣!因此警察將會銷毀該假幣并禁止小王再次制作貨幣。

(1)創(chuàng)建警察,警察信息如下:

(2)發(fā)起銷毀假幣交易(DestoryIllegalCoinTransaction),交易信息如下:

假幣制造者被標(biāo)為“非法的”,代碼如下:

警察銷毀假幣數(shù)?+?1,代碼如下:

假幣已從貨幣擁有者的錢包移除,代碼如下:

3.假幣制造者再次制幣

執(zhí)行制造貨幣交易,代碼如下:

將看到錯誤提示,交易執(zhí)行失敗,賬本狀態(tài)將不會發(fā)生任何改變,如圖7-2所示。圖7-2錯誤提示

4.批量銷毀貨幣

手動創(chuàng)建兩個合法和兩個非法的貨幣,如圖7-3所示。圖7-3創(chuàng)建貨幣

執(zhí)行兩次批量銷毀貨幣交易,分別銷毀所有合法和非法的貨幣(status分別為LEGAL和ILLEGAL),代碼如下:

7.1.4網(wǎng)絡(luò)擴展

(1)進行合理性擴展,包含內(nèi)容如下:

·貨幣制作后立即檢驗,防止假幣流通;

·防止自買自賣。

(2)進行安全性擴展,包含內(nèi)容如下:

·只有警察可以訪問假幣。

(3)進行模型擴展,包含內(nèi)容如下:

·添加資產(chǎn)——新幣種;

·添加參與者——法庭,對假幣制造者進行裁決;

·添加參與者——黃牛,大量收獲貨幣并高價賣出。

(4)進行功能擴展,包含內(nèi)容如下:

·支持貨幣和貨幣間的交換;

·批量制作貨幣或批量購買貨幣優(yōu)惠;

·對假幣制造者進行金錢懲罰。

7.2能源購置網(wǎng)絡(luò)案例分析

7.2.1網(wǎng)絡(luò)定義該業(yè)務(wù)網(wǎng)絡(luò)涉及如下內(nèi)容:

·貨幣、能源

·居民、銀行、能源公司

·金錢、貨幣和能源之間的交易

(1)資產(chǎn)包含如下內(nèi)容:貨幣,能源。

(2)參與者包含如下內(nèi)容:居民,銀行,能源公司。

在能源購置網(wǎng)絡(luò)中,將模擬居民用銀行發(fā)行的貨幣來購買能源的過程。

(3)交易包含如下內(nèi)容:居民用金錢購買貨幣;居民用貨幣購買能源;居民退還貨幣,獲得金錢。

確認(rèn)網(wǎng)絡(luò)中的模型后,即可編寫代碼實現(xiàn)模型和交易。

7.2.2代碼實現(xiàn)

首先用Yeoman生成工程目錄結(jié)構(gòu),并新建lib文件夾和logic.js。

1.CTO建模

1)利用枚舉設(shè)置貨幣持有者

貨幣持有者類型結(jié)構(gòu)如下:

2)設(shè)置相關(guān)資產(chǎn)類

設(shè)置抽象類,結(jié)構(gòu)如下:

設(shè)置貨幣類,代碼如下:

3)設(shè)置參與者相關(guān)類

設(shè)置參與者抽象類,結(jié)構(gòu)如下:

4)編寫交易代碼

居民用金錢從銀行購買貨幣,代碼如下:

居民用貨幣從能源公司購買能源,代碼如下:

居民從銀行將貨幣兌換成金錢,代碼如下:

2.業(yè)務(wù)邏輯

能源購置網(wǎng)絡(luò)的業(yè)務(wù)邏輯代碼寫在lib目錄下的logic.js文件中。

(1)常量定義,代碼如下:

(2)用金錢購買貨幣,代碼如下:

上述代碼對應(yīng)的業(yè)務(wù)邏輯可被簡述為:獲取交易雙方的參與者信息并檢查購買者的余額是否足夠→將貨幣實例從賣方轉(zhuǎn)移至購買方→調(diào)整交易雙方的余額→與注冊器交互并更新相關(guān)資源的狀態(tài)。

(3)用貨幣購買能源,代碼如下:

上述代碼對應(yīng)的業(yè)務(wù)邏輯可被簡述為:獲取交易雙方的參與者信息→將貨幣實例從居民轉(zhuǎn)移至能源公司→將能源實例從能源公司轉(zhuǎn)移至居民→與注冊器交互并更新相關(guān)資源的狀態(tài)。

(4)將貨幣兌換成金錢,代碼如下:

(5)編寫輔助函數(shù)。從數(shù)組中移除指定元素,代碼如下:

7.2.3情景模擬

1.購買能源

某居民區(qū)附近有銀行和能源公司,銀行發(fā)行了一批貨幣,居民先從銀行購買貨幣,再使用貨幣從能源公司購買能源。

(1)創(chuàng)建居民,數(shù)據(jù)如下:

(2)創(chuàng)建銀行,數(shù)據(jù)如下:

(3)創(chuàng)建能源公司,數(shù)據(jù)如下:

(4)創(chuàng)建兩個貨幣,數(shù)據(jù)如下:

(5)創(chuàng)建能源實例,擁有者是id為1的公司,數(shù)據(jù)如下:

(6)居民從銀行購買貨幣,執(zhí)行購買貨幣交易(MoneyToCoinTransaction),數(shù)據(jù)如下:

貨幣的擁有者發(fā)生改變,數(shù)據(jù)如下:

銀行獲得20金錢,且支出了一枚貨幣,數(shù)據(jù)如下:

居民支出20金錢,且獲得了一枚貨幣,數(shù)據(jù)如下:

(7)居民用貨幣購買能源,執(zhí)行貨幣換能源交易(CoinToEnergyTransaction),數(shù)據(jù)如下:

能源的擁有者發(fā)生改變,數(shù)據(jù)如下:

貨幣的擁有者發(fā)生改變,數(shù)據(jù)如下:

公司支出能源,獲得貨幣,數(shù)據(jù)如下:

居民支出貨幣,獲得能源,數(shù)據(jù)如下:

2.退還貨幣

該居民又買了一枚貨幣,但發(fā)現(xiàn)目前不需要它,于是決定退還貨幣給銀行。

1)再次購買貨幣

執(zhí)行購買貨幣交易(MoneyToCoinTransaction),數(shù)據(jù)如下:

銀行獲得20金錢,支出貨幣,數(shù)據(jù)如下:

居民支出20金錢,獲得貨幣,數(shù)據(jù)如下:

2)執(zhí)行退還貨幣操作

執(zhí)行貨幣換金錢交易(CoinToMoneyTransaction),數(shù)據(jù)如下:

銀行獲得貨幣,退給居民10金錢,數(shù)據(jù)如下:

居民退還貨幣給銀行,獲得10金錢,數(shù)據(jù)如下:

7.2.4網(wǎng)絡(luò)擴展

(1)進行合理性擴展,內(nèi)容如下:

·用戶購買能源時必須確保能源公司仍有此能源;

·用戶購買貨幣時必須確保銀行仍有此貨幣;

·銀行在受理退幣時必須確保該用戶仍有此貨幣;

·在購買貨幣和退還貨幣返現(xiàn)交易中檢查金額是否合法。

(2)進行安全性擴展,內(nèi)容如下:

·用戶只能使用自己的貨幣。

(3)模型擴展,內(nèi)容如下:

·添加資產(chǎn)——新幣種;

·添加參與者——能源回收者,從居民回收能源;

·添加事件——銀行發(fā)行貨幣。

(4)進行功能擴展,內(nèi)容如下:

·能源公司也可以用貨幣從銀行兌換金錢;

·能源可能會過期,需要添加一個時間戳;

·不同的幣種兌換不同的能源數(shù)。

(5)進行其他網(wǎng)絡(luò)擴展。

實際上,可以將貨幣和能源進行通用處理,每次居民購買銀行發(fā)行的貨幣,銀行就從貨幣數(shù)組中彈出最后一個貨幣給居民。同理,居民用貨幣購買能源時,無需指定具體的貨幣id,取出最后一個貨幣即可。這樣不僅可以減少參數(shù)的傳遞,還提供了一種判斷能否交易的簡便方法——數(shù)組是否為空。

此外,還可以把price(價格)屬性從交易移至貨幣,這樣每次發(fā)起交易時,price是一個固定的值,而無需刻意傳參。當(dāng)銀行想要貨幣貶值時,可以使用updateAll函數(shù)對所有貨幣的價值進行更新,調(diào)整幣價將變得相當(dāng)簡單靈活。

7.3產(chǎn)品拍賣網(wǎng)絡(luò)案例分析7.3.1網(wǎng)絡(luò)定義根據(jù)需求對網(wǎng)絡(luò)進行建模,該業(yè)務(wù)網(wǎng)絡(luò)涉及如下內(nèi)容:拍賣品,出價者,加價,落錘(拍賣結(jié)束)。

(1)資產(chǎn)包含內(nèi)容:拍賣品。

(2)參與者。在產(chǎn)品拍賣網(wǎng)絡(luò)中,要模擬對產(chǎn)品的競價拍賣的流程,需要的參與者是:出價者。

(3)交易包含內(nèi)容:出價者加價,落錘(拍賣結(jié)束)。

(4)事件包含內(nèi)容:拍賣品拍賣結(jié)束時進行通知。確認(rèn)網(wǎng)絡(luò)中的模型后,即可編寫代碼實現(xiàn)模型和交易。

7.3.2代碼實現(xiàn)

首先用Yeoman生成工程目錄結(jié)構(gòu),并新建lib文件夾和logic.js。

1.CTO建模

1)利用枚舉設(shè)置狀態(tài)

設(shè)置拍賣品狀態(tài),代碼如下:

2)設(shè)置相關(guān)資產(chǎn)

使用數(shù)組來記錄拍賣品的價格增長,結(jié)構(gòu)如下:

3)設(shè)置相關(guān)參與者

出價者結(jié)構(gòu)如下:

4)編寫交易代碼

出價者加價,代碼如下:

5)編寫事件代碼

拍賣品拍賣結(jié)束,使用message屬性來傳遞事件通知,代碼如下:

2.編寫業(yè)務(wù)邏輯

產(chǎn)品拍賣網(wǎng)絡(luò)的業(yè)務(wù)邏輯代碼寫在lib目錄下的logic.js文件中。

(1)常量定義,代碼如下:

(2)出價者加價,代碼如下:

首次叫價時,procedure數(shù)組為空。因此只要首次叫價價格大于起始價格,即為叫價成功,之后的叫價必須大于當(dāng)前最高出價。

代碼對應(yīng)的業(yè)務(wù)邏輯可被描述為:獲取拍賣者與拍賣品的狀態(tài)信息,檢查拍賣品狀態(tài)是否滿足要求→判斷拍賣者的金額是否足夠→根據(jù)拍賣進展判斷拍賣者叫價是否有效→若叫價有效則轉(zhuǎn)移拍賣品的暫時所有權(quán)至相應(yīng)拍賣者并更新叫價記錄數(shù)組→與注冊器交互,更新相關(guān)資源的狀態(tài)。

(3)拍賣結(jié)束,代碼如下:

7.3.3情景模擬

1.產(chǎn)品拍賣成功

一場大型拍賣會正在進行,很多企業(yè)家們都在爭搶一件絕世珍寶。拍賣規(guī)則很簡單,價高者得。

1)創(chuàng)建叫價者

創(chuàng)建三位叫價者,具有的資產(chǎn)分別為1000、2000、3000,代碼如下:

2)創(chuàng)建拍賣品

拍賣品初始狀態(tài)為“拍賣中”,代碼如下:

3)競拍叫價

執(zhí)行一次叫價交易,第一位叫價者叫價,代碼如下:

拍賣品記錄了最新叫價,且得主更換,代碼如下:

再執(zhí)行一次叫價交易,由第二位叫價者進行叫價,代碼如下:

拍賣品再次記錄了最新叫價,且得主更換,代碼如下:

再執(zhí)行一次叫價交易,由第三位叫價者叫價,代碼如下:

再次記錄叫價并改變拍賣品得主,代碼如下:

執(zhí)行叫價交易,第一位叫價者再次叫價,代碼如下:

金錢不足以叫價,錯誤提示如圖7-4所示。圖7-4叫價失敗錯誤提示

4)拍賣結(jié)束,一錘定音

執(zhí)行拍賣結(jié)束(落錘)交易,代碼如下:

產(chǎn)品拍賣成功,狀態(tài)更改,代碼如下:

拍賣品得主扣除金錢,獲得拍賣品,代碼如下:

查看交易歷史記錄,拍賣成功時,將收到事件通知,如圖7-5所示。圖7-5在歷史記錄中查看事件通知

2.產(chǎn)品拍賣失敗

接下來,開始拍賣另一件寶貝,不過好像大家都對這件拍賣品不感興趣,最終也無人叫價。

(1)創(chuàng)建拍賣品,數(shù)據(jù)如下:

(2)拍賣結(jié)束,執(zhí)行落錘操作。

執(zhí)行拍賣結(jié)束(落錘)交易,代碼如下:

無人購買,交易失敗,如圖7-6所示。圖7-6錯誤提示

7.3.4網(wǎng)絡(luò)擴展

(1)進行合理性擴展,包含內(nèi)容如下:

·拍賣成功時,當(dāng)前拍賣品必須處于拍賣中;

·拍賣成功時,要再次校驗得主的金錢是否足夠。

(2)進行安全性擴展,包含內(nèi)容如下:

·禁止任何人隨意修改拍賣品屬性,只能公開叫價。

(3)進行模型擴展,包含內(nèi)容如下:

·添加參與者——拍賣家,負(fù)責(zé)產(chǎn)品的拍賣;

·添加參與者——拍賣品原主人;

·添加事件——有新的叫價。

(4)進行功能擴展,包含內(nèi)容如下:

·自定義拍賣規(guī)則,未必價高者得;

·拍賣品原主人可在首次叫價前修改起價;

·產(chǎn)品拍賣成功,拍賣家收到一定酬勞。

結(jié)

通過本章的學(xué)習(xí),讀者應(yīng)對HyperledgerComposer的一個高級功能——自定義查詢——有了基本的了解。并且通過三方交易類型和拍賣業(yè)務(wù)網(wǎng)絡(luò)的實戰(zhàn),熟悉了框架,開拓了思路。至此,HyperledgerComposer項目實戰(zhàn)系列就結(jié)束了。HyperledgerComposer的主要功能均已探索,還有一些功能,如資源注解、訪問控制、動態(tài)綁卡、查看歷史記錄、OAuth等,在此不再贅述。讀者可自行閱讀官方文檔進行學(xué)習(xí)。

本系列教程僅僅演示了超級賬本項目的冰山一角。實際上,通過Fabric區(qū)塊鏈網(wǎng)絡(luò)和HyperledgerComposer框架,幾乎可以滿足任何業(yè)務(wù)需求,開發(fā)任何不同場景的應(yīng)用。Hyperledger項目還提供了Explorer作為區(qū)塊鏈的監(jiān)控界面。想要成為超級賬本的開發(fā)高手,就要不斷地積累項目經(jīng)驗,探索更多的技術(shù),激發(fā)區(qū)塊鏈技術(shù)的無限可能性。第8章HyperledgerComposer

客戶端接入8.1項目簡介8.2傳統(tǒng)項目的開發(fā)方式8.3區(qū)塊鏈項目的開發(fā)方式8.4多語言RestServer客戶端接入本章小結(jié)

8.1項

區(qū)塊鏈?zhǔn)且粋€分布式數(shù)據(jù)庫,基于其加密、防篡改、可溯源等特點,現(xiàn)在很多項目都會利用區(qū)塊鏈來存儲重要、敏感的數(shù)據(jù)。和傳統(tǒng)的關(guān)系型數(shù)據(jù)庫、NoSQL數(shù)據(jù)庫不同,對基于HyperledgerFabric的區(qū)塊鏈進行操作不需要使用SDK。HyperledgerComposer提供了RestServer和一套RestfulApi,只要使用Http請求遠(yuǎn)程調(diào)用即可使用。

現(xiàn)在的主流項目開發(fā)語言,如Java、Php、Golang、Node.js、Python等,都支持Http客戶端調(diào)用。因此HyperledgerComposer的客戶端接入十分簡單,甚至讓開發(fā)者完全感受不到區(qū)塊鏈的存在,可以專注于業(yè)務(wù)。

本章首先從傳統(tǒng)項目開發(fā)方式講起,逐步揭秘傳統(tǒng)項目和區(qū)塊鏈項目開發(fā)過程的異同;再演示如何使用不同語言的客戶端接入ComposerRestServer。

8.2傳統(tǒng)項目的開發(fā)方式

在智能手機還未普及的時候,人們看到的網(wǎng)站大多是靜態(tài)網(wǎng)站,那時“前端”的概念并不流行。后來動態(tài)網(wǎng)站的出現(xiàn)掀起了一場網(wǎng)絡(luò)風(fēng)暴,人們可以使用網(wǎng)站來收發(fā)郵件、填表、聽音樂、玩游戲、購物等。如今已經(jīng)是“大前端時代”,H5、iOS、Android、微信小程序、支付寶小程序等成為移動端App的主流開發(fā)技術(shù)。

傳統(tǒng)項目開發(fā)方式如圖8-1所示。圖8-1傳統(tǒng)項目開發(fā)方式

8.3區(qū)塊鏈項目的開發(fā)方式

8.3.1完全去中心化開發(fā)完全去中心化是指應(yīng)用部署在區(qū)塊鏈平臺上,而不是具體某一臺服務(wù)器,因此不會出現(xiàn)單機故障,此類應(yīng)用即DAPP。用戶一般需要下載特定的客戶端,如區(qū)塊鏈瀏覽器或電子錢包才能使用DAPP。目前,以太坊(Solidity和Truffle)和EOS是DAPP開發(fā)的主流技術(shù),開發(fā)難度較大。開發(fā)過程如圖8-2所示。圖8-2

DAPP開發(fā)過程

8.3.2數(shù)據(jù)存儲分布式開發(fā)

數(shù)據(jù)存儲分布式開發(fā)方式僅僅是將區(qū)塊鏈作為分布式數(shù)據(jù)庫去使用,實際應(yīng)用還是部署在中心服務(wù)器上的。因此該方式和傳統(tǒng)開發(fā)區(qū)別不大,十分簡單,在提升數(shù)據(jù)的安全性方面卻有顯著效果,開發(fā)過程如圖8-3所示。圖8-3數(shù)據(jù)存儲分布式開發(fā)過程

HyperledgerComposer適用于該開發(fā)方式,后端通過請求調(diào)用ComposerRestServer提供的RestfulApi對區(qū)塊鏈上的數(shù)據(jù)進行增刪查改等操作。

在了解兩種區(qū)塊鏈項目的開發(fā)方式后,下面進入對HyperledgerComposer客戶端接入過程的講解。HyperledgerComposer客戶端的語言包括Java、Php、Golang、Node.js和Python,讀者可以用自己熟悉的語言有選擇地閱讀。

8.4多語言RestServer客戶端接入

8.4.1

Java

Java作為TIOBE編程語言排行榜的榜首,在企業(yè)項目開發(fā)、大數(shù)據(jù)、分布式、微服務(wù)等領(lǐng)域均被廣泛使用。它是一種面向?qū)ο蟮恼Z言,具有跨平臺、健壯性、多線程等特性,且完美支持RMI、RPC、Http等多種遠(yuǎn)程調(diào)用方式。因此,使用Java語言開發(fā)的項目接入RestServer極其簡單。

目前流行的Java項目開發(fā)框架有Spring(面向切面編程)、SpringMVC(Web項目)、Mybatis(數(shù)據(jù)訪問)、SpringBoot(快速搭建Spring項目)、Dubbo(RPC遠(yuǎn)程調(diào)用)、SpringCloud(微服務(wù))、Netty(高性能NIO)等。

HttpClient是Java最常用的http調(diào)用庫,并且在Java11的新特性中提供了HttpClientApi。由于Java8是目前企業(yè)項目的主流版本,此處使用Apache下的HttpClient來調(diào)用RestfulApi,方法如下:

(1)引入Maven依賴(或者下載jar包),配置代碼如下:

(2)初始化HttpClientBuilder,此處使用連接池管理Http連接,代碼如下:

(3)創(chuàng)建HttpClient,根據(jù)接口地址和請求類型創(chuàng)建請求對象。

Get請求方式代碼如下:

Post請求方式代碼如下:

Delete請求方式代碼如下:

Put請求方式代碼如下:

(4)發(fā)送請求,接受響應(yīng),代碼如下:

這里封裝了兩個常用函數(shù):checkResponse用于判斷請求是否返回了指定的狀態(tài)碼,否則拋出異常;responseToJsonString則用于接收RestServer返回的Json格式的字符串。

8.4.2

PHP

PHP有超過20年的歷史和巨大的生態(tài)圈,該語言因為語法簡單靈活而著稱,但是其性能相對其他語言較低,因此適用于開發(fā)中小型網(wǎng)站項目以及業(yè)務(wù)層面的應(yīng)用。

PHP的主流開發(fā)框架有ThinkPHP、Yii和Laravel等。其中,Laravel是目前PHP開發(fā)最主流的框架,它功能強大,設(shè)計思想先進,集合了PHP的優(yōu)點和特性,但是上手較難。

PHP常用的http調(diào)用方法有file_get_contents函數(shù)和curl擴展庫。此處使用PHP原生支持的file_get_contents,方法如下:

(1)封裝請求參數(shù),代碼如下:

(2)封裝請求對象,代碼如下:

(3)發(fā)送請求,接收響應(yīng),代碼如下:

(4)將上述過程封裝為完整的函數(shù),代碼如下:

(5)調(diào)用封裝的請求函數(shù),代碼如下:

8.4.3

Go語言

Go語言是谷歌為了降低開發(fā)軟件的復(fù)雜度而推出的編程語言,它具有簡潔、高效、快速、安全等特點,且天然支持高并發(fā)。Go的編譯速度極快,編譯后Go代碼的運行速度能夠媲美C語言。

Go語言還支持面向?qū)ο螅哂虚]包、反射等高級功能,學(xué)習(xí)過Java語言的開發(fā)者能夠快速上手并投入開發(fā)。

Go語言的主流Web開發(fā)框架有Beego、Gin、Revel等,這些框架都充分發(fā)揮了Go語言天然高性能的優(yōu)點,能從容地面對高并發(fā)的場景。

使用Go語言提供的net/http模塊下的http.NewRequest可以很輕松地進行Http調(diào)用,在數(shù)據(jù)抓取場景下也經(jīng)常被使用。方法如下:

(3)發(fā)送請求,接收響應(yīng)狀態(tài)碼和字符串,代碼如下:

8.4.4

Node.js

嚴(yán)格來說,Node.js不是一門編程語言,而是類似.Net的讓JavaScript能夠運行在服務(wù)端的開發(fā)平臺。JavaScript是前端開發(fā)必不可少的腳本語言,運行速度很快。Node.js采用封裝的V8引擎,它的出現(xiàn)讓JavaScript等腳本語言的運行速度得到極大的提升,同時讓JavaScript具備了服務(wù)器端開發(fā)的能力。

Node.js使用事件驅(qū)動、非阻塞的I/O模型。即使不新增額外的線程(即單線程),仍能夠通過事件循環(huán)對任務(wù)進行并發(fā)處理。因此Node.js輕量且高效,適合實時應(yīng)用的開發(fā)。

Node.js最著名的框架是Express。Express框架為Node.js原生的Api進行了良好的封裝,定義了大量的語法糖,且支持插件的開發(fā)和擴展。

JS原本就是前端腳本語言,Ajax(異步JavaScript和XML)的出現(xiàn)開創(chuàng)了動態(tài)網(wǎng)站的時代。因此,使用原生JS模擬Http請求本就十分簡單,且Node.js的Http模塊對原本的Ajax請求進行了封裝,提供了一套更易使用的異步http調(diào)用。下面介紹其使用方法:

(3)定義對響應(yīng)結(jié)果的處理和錯誤處理,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論