區(qū)塊鏈中的RESTFUL鏈碼調(diào)用API原理詳解

本文適合于熟悉開(kāi)源區(qū)塊鏈技術(shù)Hyperledger Fabric,以及希望更高效地使用華為云區(qū)塊鏈服務(wù)的讀者。當(dāng)然,也歡迎任何對(duì)區(qū)塊鏈技術(shù)有興趣的讀者閱讀本文,相信讀者們都能從中受益。

成都創(chuàng)新互聯(lián) - 成都服務(wù)器托管,四川服務(wù)器租用,成都服務(wù)器租用,四川網(wǎng)通托管,綿陽(yáng)服務(wù)器托管,德陽(yáng)服務(wù)器托管,遂寧服務(wù)器托管,綿陽(yáng)服務(wù)器托管,四川云主機(jī),成都云主機(jī),西南云主機(jī),成都服務(wù)器托管,西南服務(wù)器托管,四川/成都大帶寬,服務(wù)器機(jī)柜,四川老牌IDC服務(wù)商

2018年2月1日 華為云發(fā)布企業(yè)級(jí)區(qū)塊鏈開(kāi)放平臺(tái)區(qū)塊鏈服務(wù)BCS(Blockchain Service),是基于開(kāi)源區(qū)塊鏈技術(shù)和華為在分布式并行計(jì)算、數(shù)據(jù)管理、安全加密等核心技術(shù)領(lǐng)域多年積累基礎(chǔ)上推出的企業(yè)級(jí)區(qū)塊鏈云服務(wù)產(chǎn)品,旨在幫助各行業(yè)、企業(yè)在華為云上快速、高效的搭建企業(yè)級(jí)區(qū)塊鏈行業(yè)方案和應(yīng)用。

如前所述,搭建區(qū)塊鏈不是目的,關(guān)鍵是要方便應(yīng)用更高效地使用區(qū)塊鏈。本文要介紹的RESTFUL鏈碼調(diào)用API即是華為云區(qū)塊鏈為此目的而開(kāi)發(fā)的,在詳細(xì)介紹API之前,先對(duì)鏈代碼做一下簡(jiǎn)單介紹,便于沒(méi)有Fabric知識(shí)背景的讀者理解。

我們知道區(qū)塊鏈?zhǔn)且环N由區(qū)塊串聯(lián)而成的鏈?zhǔn)浇Y(jié)構(gòu),每一個(gè)區(qū)塊上都記錄著賬戶(hù)數(shù)據(jù),這些數(shù)據(jù)一經(jīng)寫(xiě)入是不可篡改的。那么數(shù)據(jù)是如何寫(xiě)入的呢?如果讓擁有寫(xiě)入權(quán)限的用戶(hù)都能隨意寫(xiě)入數(shù)據(jù)的話,區(qū)塊鏈也就失去了存在的意義,因此鏈代碼概念的引入意義重大。鏈代碼又被稱(chēng)之為智能合約,顧名思義就是向區(qū)塊鏈寫(xiě)入數(shù)據(jù)的預(yù)先約定好的代碼。它是一段邏輯,這個(gè)邏輯可以是簡(jiǎn)單的限制和約束,也可以是非常復(fù)雜的業(yè)務(wù)相關(guān)的邏輯,根據(jù)用戶(hù)的輸入,進(jìn)行邏輯的運(yùn)算,最終得出向區(qū)塊鏈寫(xiě)入的數(shù)據(jù)集合,然后將數(shù)據(jù)寫(xiě)入到區(qū)塊鏈上去。如果這樣描述過(guò)于抽象的話,我們以一個(gè)賬戶(hù)轉(zhuǎn)賬的例子來(lái)進(jìn)行說(shuō)明。
區(qū)塊鏈中的RESTFUL鏈碼調(diào)用API原理詳解
如上圖所示,圖中右邊的區(qū)塊鏈記錄著原始賬戶(hù)的余額,a為100元,b為200元。圖中左邊客戶(hù)端應(yīng)用程序發(fā)起一筆轉(zhuǎn)賬交易:a向b轉(zhuǎn)x元。這筆交易不會(huì)直接寫(xiě)入?yún)^(qū)塊鏈,而是先經(jīng)過(guò)中間的鏈代碼進(jìn)行智能合約的運(yùn)算,檢查a的賬戶(hù)里是否有足夠的余額,然后才允許轉(zhuǎn)賬交易的進(jìn)行,將最終的a、b賬戶(hù)的余額寫(xiě)入到最新的區(qū)塊鏈中。
整個(gè)交易過(guò)程以及鏈代碼的作用其實(shí)非常淺顯易懂,但其實(shí)我們的應(yīng)用程序向鏈代碼發(fā)起調(diào)用的過(guò)程還是有些復(fù)雜的。因?yàn)閰^(qū)塊鏈的調(diào)用請(qǐng)求不同于普通的RPC遠(yuǎn)程調(diào)用,客戶(hù)端需要有如下的事情:

1,將鏈代碼的調(diào)用信息如通道ID、鏈碼ID、調(diào)用參數(shù)、調(diào)用者信息等進(jìn)行打包,
2,將打包好的二進(jìn)制內(nèi)容使用用戶(hù)私鑰進(jìn)行簽名
3,根據(jù)鏈碼的背書(shū)策略不同,可能需要向多個(gè)組織的節(jié)點(diǎn)上的鏈碼發(fā)起調(diào)用
區(qū)塊鏈中的RESTFUL鏈碼調(diào)用API原理詳解
由此可見(jiàn),這個(gè)調(diào)用過(guò)程如果讓客戶(hù)端自己來(lái)實(shí)現(xiàn)是不太現(xiàn)實(shí)的,因此需要借助SDK的幫助來(lái)實(shí)現(xiàn)。目前根據(jù)客戶(hù)端的語(yǔ)言不同,SDK也有各種不同的語(yǔ)言版本,例如golang語(yǔ)言就有fabric-sdk-go的實(shí)現(xiàn),javascript也有nodejs版本的SDK實(shí)現(xiàn)。我們先來(lái)看一下使用SDK需要的配置文件以及使用SDK進(jìn)行調(diào)用的示例代碼片段:
區(qū)塊鏈中的RESTFUL鏈碼調(diào)用API原理詳解
上圖是一個(gè)200行的SDK配置文件片段
區(qū)塊鏈中的RESTFUL鏈碼調(diào)用API原理詳解
這是一個(gè)nodejs版本的SDK使用示例。由此我們可以看出客戶(hù)端應(yīng)用直接使用SDK的弊端:
1,配置文件書(shū)寫(xiě)復(fù)雜 雖然華為云已經(jīng)提供了SDK配置文件下載功能,對(duì)于首次使用SDK的開(kāi)發(fā)人員來(lái)說(shuō)成本仍然很高。
2,SDK語(yǔ)言相關(guān),并且學(xué)習(xí)成本高 雖然很多語(yǔ)言都提供了Fabric SDK,但是學(xué)習(xí)起來(lái)仍然有一定學(xué)習(xí)成本,并且不同語(yǔ)言的類(lèi)庫(kù)名稱(chēng),方法名稱(chēng)調(diào)用方式都各不相同,切換不同語(yǔ)言時(shí)的學(xué)習(xí)成本成倍增加。
3,SDK過(guò)于厚重 應(yīng)用程序在使用SDK的時(shí)候需要將SDK類(lèi)庫(kù)引入,雖然不用開(kāi)發(fā)語(yǔ)言的SDK打包后大小各不相同,但對(duì)于一些薄客戶(hù)端(比如安卓或者IOS手機(jī)應(yīng)用)來(lái)說(shuō)仍然顯得十分厚重。
華為云為了方便開(kāi)發(fā)者使用區(qū)塊鏈服務(wù),在服務(wù)端提供了RESTFUL的API以克服上述直接使用SDK方式的不足:
區(qū)塊鏈中的RESTFUL鏈碼調(diào)用API原理詳解
如上面架構(gòu)圖所示,華為云區(qū)塊鏈服務(wù)直接暴露RESTFUL形式的API供開(kāi)發(fā)者使用,在服務(wù)端封裝了對(duì)SDK的調(diào)用。因?yàn)槿A為云替用戶(hù)管理著區(qū)塊鏈的組織結(jié)構(gòu)以及各種證書(shū),所以天然具備了所需要的SDK的配置文件,不需要用戶(hù)自己手動(dòng)生成。在此給出一個(gè)RESTFUL鏈碼調(diào)用請(qǐng)求的Header和Body的示例供讀者參考:
HEADER:
x-bcs-signature-sign: 1f8b08000000000000ff14cbb11503510c02b081d260c098bfff6279d74bb90a5ca7384e3cae9b5825af7cb076b65e039be41da8e8b1e38700d599fa4aee37d6c159a94355ada783dbb4d66e17e967db39cef36bcd0b5adc8be3e178698ef9070000ffff
BODY:
{
“channelId”: “testchannel”,
“chaincodeId”: “zmmcode”,
“chaincodeVersion”: “1.0”,
“userId”: “User1”,
“orgId”: “7258adda1803f4137eff4813e7aba323018200c5”,
“opmethod”: “invoke”,
“args”: “[“invoke”,“a”,“b”,“1”]”,
“timestamp”: “2018-10-31T17:28:16+08:00”,
“cert”: “-----BEGIN CERTIFICATE-----\nMIIDBzCCAq2gAwIBAgIQEXPZlMsReamxVtVNnKwCCzAKBggqhkjOPQQDAjCCAQQx\nDjAMBgNVBAYTBUNISU5BMRAwDgYDVQQIEwdCRUlKSU5HMRAwMwUQYD14eH+jTTBLMA4GA1Ud\nDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIFBXQ5TC4acFeTlT\nJuDZg62XkXcdnOfvbejSeKI2TXoIMAoGCCqGSM49BAMCA0gAMEUCIQCadHIKl0Mk\nYn0WZizyDZYR4rT2q0nzjFaiW+YfV5FBjAIgNalKUe3rIwXJvXORV4ZXurEua2Ag\nQmhcjRnVwPTjpTE=\n-----END CERTIFICATE-----\n”
}
看到這里,讀者可能會(huì)對(duì)上面Header中的簽名以及Body中的cert證書(shū)信息有所疑惑。請(qǐng)不要著急,在此先介紹一下華為云區(qū)塊鏈RESTFUL接口的實(shí)現(xiàn)原理,讀者自然就能解除心中疑慮。
區(qū)塊鏈中的RESTFUL鏈碼調(diào)用API原理詳解
根據(jù)前文我們已經(jīng)了解區(qū)塊鏈的調(diào)用和普通RPC的遠(yuǎn)程調(diào)用最主要的區(qū)別在于需要有用戶(hù)簽名用于證明交易是指定用戶(hù)所發(fā)起的,那么RESTFUL調(diào)用也不可避免這個(gè)問(wèn)題。因此我們?cè)谑褂萌A為云區(qū)塊鏈RESTFUL接口時(shí)仍然需要使用用戶(hù)私鑰對(duì)整個(gè)請(qǐng)求消息體進(jìn)行簽名如圖中?所示,簽名的結(jié)果放到HEADER中指定名稱(chēng)下。這個(gè)簽名在服務(wù)端會(huì)使用用戶(hù)的公鑰進(jìn)行驗(yàn)證,驗(yàn)證通過(guò)交易才能繼續(xù)。

在某些情況下,用戶(hù)的公私鑰對(duì)并不是華為云區(qū)塊鏈服務(wù)管理的,而是用戶(hù)使用組織私鑰自行簽發(fā)的,這個(gè)時(shí)候服務(wù)端就缺少這個(gè)用戶(hù)的公私鑰,此時(shí)就需要在請(qǐng)求消息體中使用cert字段上傳用戶(hù)公鑰,服務(wù)端使用用戶(hù)上傳的公鑰驗(yàn)證HEADER中的簽名是否是私鑰對(duì)消息體的合法簽名。這時(shí)問(wèn)題就來(lái)了,任何一個(gè)偽造者都可以自己制作一個(gè)非對(duì)稱(chēng)的公私鑰對(duì),然后對(duì)一個(gè)非法的消息體進(jìn)行私鑰簽名,并把公鑰放到消息體中以通過(guò)服務(wù)端的驗(yàn)簽。為了避免這個(gè)漏洞,服務(wù)端在驗(yàn)簽之前會(huì)對(duì)用戶(hù)上傳的公鑰進(jìn)行合法性驗(yàn)證,如上圖?。因?yàn)橛脩?hù)上傳的公鑰實(shí)際上是一個(gè)證書(shū),該證書(shū)包含了用戶(hù)公鑰以及組織私鑰對(duì)該證書(shū)的簽名,而偽造者缺少組織私鑰無(wú)法偽造簽名,這樣服務(wù)端就能判定用戶(hù)上傳證書(shū)的合法性。

當(dāng)服務(wù)端使用合法的用戶(hù)證書(shū)驗(yàn)證請(qǐng)求HEADER中的簽名是用戶(hù)私鑰的簽名后,服務(wù)端就可以真正發(fā)起區(qū)塊鏈鏈碼的調(diào)用了,這里服務(wù)端使用SDK的方式與客戶(hù)端直接使用SDK的方式并無(wú)不同,只不過(guò)如果客戶(hù)端證書(shū)是自行簽發(fā)的,那么服務(wù)端是沒(méi)有用戶(hù)私鑰的,這個(gè)時(shí)候就會(huì)使用組織的admin證書(shū)發(fā)起區(qū)塊鏈鏈碼的調(diào)用。
至此,RESTFUL的調(diào)用機(jī)制讀者也清楚了,那么RESTFUL調(diào)用的優(yōu)點(diǎn)也就很容易理解:

1.使用簡(jiǎn)單方便,由華為云區(qū)塊鏈服務(wù)封裝SDK的復(fù)雜性。

  1. 由于絕大多數(shù)語(yǔ)言都已經(jīng)擁有很成熟的RESTFUL調(diào)用類(lèi)庫(kù),調(diào)用RESTFUL基本沒(méi)有學(xué)習(xí)成本。
  2. 不用引入SDK類(lèi)庫(kù),適合更輕量的客戶(hù)端。
    以上就是對(duì)華為云區(qū)塊鏈RESTFUL鏈代碼調(diào)用API的原理的詳細(xì)講述,目前RESTFUL接口還處于公測(cè)階段,歡迎讀者到華為云進(jìn)行免費(fèi)體驗(yàn)并提出寶貴意見(jiàn)。

參考資料:API參考


來(lái)源:CSDN
原文:https://blog.csdn.net/weixin_43682574/article/details/85077234
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!

分享題目:區(qū)塊鏈中的RESTFUL鏈碼調(diào)用API原理詳解
文章起源:http://bm7419.com/article20/phdoco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、定制開(kāi)發(fā)、網(wǎng)站制作、靜態(tài)網(wǎng)站、、域名注冊(cè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)