国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于區(qū)塊鏈技術(shù)的超級賬本(Hyperledger) - 從理論到實戰(zhàn)

這篇具有很好參考價值的文章主要介紹了基于區(qū)塊鏈技術(shù)的超級賬本(Hyperledger) - 從理論到實戰(zhàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

什么是區(qū)塊鏈?簡單來說區(qū)塊鏈就是一個分布式的記賬本,或者分布式的數(shù)據(jù)庫。

區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)是一個鏈表,交易數(shù)據(jù)被存儲到鏈表的區(qū)塊中,區(qū)塊鏈的第一個區(qū)塊叫創(chuàng)世區(qū)塊,除了創(chuàng)世塊以外,每個區(qū)塊還包含前一個區(qū)塊的哈希指針,這個哈希指針的值是根據(jù)前一個區(qū)塊的實際數(shù)據(jù)計算出來的。哈希指針指向前一個區(qū)塊,后面的區(qū)塊可以查找前面所有區(qū)塊的信息。

賬本的數(shù)據(jù)結(jié)構(gòu)就是這樣的一個鏈表,那么分布式的含義是什么呢?

區(qū)塊鏈的眾多參與者組成了一個松散自治的 P2P 網(wǎng)絡(luò),我們把區(qū)塊鏈網(wǎng)絡(luò)的參與者叫做節(jié)點,每個節(jié)點都擁有一個賬本拷貝,所有賬本的信息都是一致的,在區(qū)塊鏈里沒有中心節(jié)點。每當(dāng)有新的交易進來,所有節(jié)點的賬本都會更新,并且最終保持一致。更新的方式不是去修改某個區(qū)塊的值,而是保存交易記錄。比如在比特幣系統(tǒng)中,它沒有用戶資產(chǎn)記錄這樣的概念,不像普通數(shù)據(jù)庫那樣用一條數(shù)據(jù)存儲資產(chǎn),比特幣用戶資產(chǎn)的值是通過把所有的交易記錄串聯(lián)聚合后得到的,賬戶里資產(chǎn)的來源可以一直向上追溯,直到創(chuàng)世塊為止。區(qū)塊鏈里的交易數(shù)據(jù)根據(jù)具體場景,可以是任何需要記錄的信息。

hyperledger,Cloud,區(qū)塊鏈

智能合約

為了支持信息的持續(xù)更新,以及對賬本進行管理(寫入交易,進行查詢等),區(qū)塊鏈網(wǎng)絡(luò)引入了智能合約來實現(xiàn)對賬本的訪問和控制。智能合約不僅僅可用于在區(qū)塊鏈網(wǎng)絡(luò)中打包信息,它們也可以被用于自動的執(zhí)行由參與者定義的特定交易操作。

比如智能合約可以規(guī)定物流中的運輸費用,根據(jù)物流的快慢收取不同的費用,根據(jù)貨物的到達時間進行自動轉(zhuǎn)賬等。上傳到區(qū)塊鏈網(wǎng)絡(luò)中的的智能合約會被打包到某一個區(qū)塊中,因此智能合約一旦寫入?yún)^(qū)塊鏈,也是不可更改的。

hyperledger,Cloud,區(qū)塊鏈

共識機制

區(qū)塊鏈網(wǎng)絡(luò)中交易信息同步的過程,確保交易只有獲得適當(dāng)參與者批準(zhǔn)后才更新,所有的參與者都會將同樣的信息按照同樣的順序更新,這樣的過程叫做共識。共識機制是區(qū)塊鏈的核心之一。

hyperledger,Cloud,區(qū)塊鏈

區(qū)塊鏈的第一個應(yīng)用比特幣,采用的是Proof of Work(工作量證明)的共識機制。簡單介紹一下比特幣的共識機制,算法的具體細節(jié)大家可以去查白皮書。節(jié)點收到一個交易后,會根據(jù)判斷標(biāo)準(zhǔn)對該交易進行有效性校驗,無效的交易會被廢棄。通過有效性驗證之后的交易將會被廣播給其他節(jié)點。其他節(jié)點會做同樣的獨立校驗,當(dāng)有效的交易達到整個網(wǎng)絡(luò)所有節(jié)點時,即全網(wǎng)達成了“該交易有效”的共識。每個節(jié)點都會收到很多有效但是還未被打包到區(qū)塊中的交易,這些交易被組裝成 Merkle Tree,Merkle Tree 的第一個交易比較特殊,叫做 coinbase,由節(jié)點自己創(chuàng)建,將挖礦獎勵支付到礦工自己的地址。挖礦獎勵包括新創(chuàng)建的比特幣和打包進該區(qū)塊所有交易的手續(xù)費總額。然后節(jié)點計算一個符合難度的哈希值,挖礦就是通過修改參數(shù)不斷計算區(qū)塊哈希值,直至達到難度要求,也就間接證明了該節(jié)點付出了對應(yīng)的工作量,這就是工作量證明。筆者的另一篇文章300行ABAP代碼實現(xiàn)一個最簡單的區(qū)塊鏈原型里用了一個 ABAP 方法CL_ABAP_MESSAGE_DIGEST=>CALCULATE_HASH_FOR_CHAR 來計算區(qū)塊的哈希值。

hyperledger,Cloud,區(qū)塊鏈

當(dāng)節(jié)點計算出一個符合難度的區(qū)塊哈希時,即說明該礦工挖礦成功了,該節(jié)點將該區(qū)塊組裝到本地的區(qū)塊鏈,同時也將此區(qū)塊廣播給其他節(jié)點。其他節(jié)點接收到該區(qū)塊后會驗證該區(qū)塊是否有效,有可能有兩個節(jié)點同時挖出了新的區(qū)塊 B1 和 B2,它們的上一個區(qū)塊都是同一個區(qū)塊 P。有的節(jié)點可能會先收到 B1,有的會先收到 B2,這時區(qū)塊鏈出現(xiàn)了暫時性的兩個分叉。要打破這種局面,要看下一個區(qū)塊是基于 B1 生成還是基于 B2 生成。如果基于 B1,B1 這條鏈就變成了最長鏈,其他包含 B2 的節(jié)點會重新選擇最長鏈,而 B2 作為孤塊被丟棄掉。

hyperledger,Cloud,區(qū)塊鏈

到目前為止,我們可以將區(qū)塊鏈看做是一個共享的,去中心化的多備份系統(tǒng),通過智能合約更新交易數(shù)據(jù),同時借助共識的協(xié)作流程使網(wǎng)絡(luò)中所有的節(jié)點保持一致。

這里的交易可以指代任何數(shù)據(jù),例如:數(shù)字貨幣,合同,記錄或者其它任何信息。

區(qū)塊鏈的類型

  • 公有鏈:網(wǎng)絡(luò)中的節(jié)點可以任意接入,網(wǎng)絡(luò)中數(shù)據(jù)讀寫權(quán)限不受限制,所有節(jié)點都參與共識過程。比特幣,以太坊等數(shù)字貨幣都屬于公有鏈。

  • 私有鏈:網(wǎng)絡(luò)中的節(jié)點被一個組織控制,由其獨享該區(qū)塊鏈的寫入權(quán)限,私有鏈和其他的分布式存儲沒有太大區(qū)別。

  • 聯(lián)盟鏈:多個公司或組織通過授權(quán)接入,由某些節(jié)點參與共識過程。Hyperledger Fabric屬于聯(lián)盟鏈。

什么是 Hyperledger Fabric?

Hyperledger Fabric 是 Linux 基金會發(fā)起的 Hyperledger 項目之一。Hyperledger Fabric 專為在企業(yè)環(huán)境中使用而設(shè)計的開源的基于區(qū)塊鏈的分布式賬本。Hyperledger Fabric 可用于全球供應(yīng)鏈管理、金融交易、資產(chǎn)記賬、人力資源、保險、健康和數(shù)字音樂等領(lǐng)域。

Hyperledger Fabric 中的賬本子系統(tǒng)(ledger)包括兩個組件:世界觀(world state)和事務(wù)日志(transaction log)。世界觀記錄了賬本在特定時間點的現(xiàn)狀,是一個鍵值數(shù)據(jù)庫。交易日志記錄產(chǎn)生世界狀態(tài)當(dāng)前值的所有交易,是世界觀的更新歷史。賬本的世界觀的底層數(shù)據(jù)庫可以更換,可以選擇使用 levelDB 或 couchDB。

Hyperledger Fabric 是第一個支持以通用語言編寫智能合約的區(qū)塊鏈平臺,可以使用java,nodejs 和 go 語言來編寫智能合約。Hyperledger Fabric 中的智能合約也叫鏈碼(chain code)。

hyperledger,Cloud,區(qū)塊鏈

和其他公有區(qū)塊鏈平臺最大的不同,Hyperledger Fabric 是私有的并且需要授權(quán)才能接入,它擁有一個 MSP(Membership Service Provider) 模塊專門提供成員管理服務(wù)。

CA(Certificate Authority) 負責(zé)權(quán)限管理,成員身份相關(guān)證書管理 (Enrollment CertificateAuthority) 和維護交易相關(guān)證書管理 (Transaction Certificate Authority) 等等。

Hyperledger Fabric 提供了建立 channel 的功能,這允許參與者為交易新建一個單獨的賬本。當(dāng)網(wǎng)絡(luò)中的一些參與者是競爭對手時,這個功能變得尤為重要。因為這些參與者并不希望所有的交易信息——比如提供給部分客戶的特定價格信息——都對網(wǎng)絡(luò)中所有參與者公開。只有在同一個 channel 中的參與者,才會擁有該 channel 中的賬本,而其他不在此 channel 中的參與者則看不到這個賬本。

Hyperledger Fabric 使用獨立的排序節(jié)點(order)來提供共識服務(wù),負責(zé)排序交易,提供全局確認(rèn)的交易順序。

應(yīng)用程序通過 SDK 訪問 Hyperledger Fabric。

最新版 Hyperledger Fabric 的設(shè)計中,根據(jù)功能將節(jié)點角色解耦開,讓不同節(jié)點處理不同類型的工作負載。從業(yè)務(wù)邏輯上又將節(jié)點分為背書節(jié)點(Endorser)和提交節(jié)點(Committer)。

  • Endorser peer:負責(zé)對來自客戶端的交易進行合法性和權(quán)限檢查(模擬交易),通 過檢查則簽名并返回結(jié)果給客戶端。

  • Committer peer:負責(zé)維護賬本,將達成一致順序的批量交易結(jié)果進行狀態(tài)檢查,生成區(qū)塊,執(zhí)行合法的交易,并寫入賬本,同一個物理節(jié)點可以同時擔(dān)任 endorser 和committer 兩個角色。

Hyperledger Fabric 交易流程:共識

共識流程主要分 Proposal,Packaging 和 Validation 三個階段。

Proposal

應(yīng)用提交一個交易 proposal,然后將其提交給所有的背書節(jié)點,后者接到后,將其作為輸入執(zhí)行鏈碼生成相應(yīng)的交易 proposal 響應(yīng)。此時并不會更新 Ledger,而是對交易proposal 響應(yīng)簽名,并將其返回給應(yīng)用。應(yīng)用收到簽名后的響應(yīng),共識流程的第一階段就完成了。

hyperledger,Cloud,區(qū)塊鏈

Packaging

這個階段是 order 節(jié)點對交易進行排序打包。Order 節(jié)點從各個應(yīng)用接收交易 proposal響應(yīng),然后對這些交易進行排序,排序之后打包成區(qū)塊。

hyperledger,Cloud,區(qū)塊鏈

Validation

共識流程的最后一個階段,由 order 節(jié)點將區(qū)塊分發(fā)給所有和它連接的節(jié)點,這些節(jié)點將確認(rèn)區(qū)塊中的交易都經(jīng)過背書節(jié)點簽名,然后將確認(rèn)后的區(qū)塊更新到 ledger 中。

hyperledger,Cloud,區(qū)塊鏈

整個流程稱為共識,所有節(jié)點都已對交易內(nèi)容和順序達成一致,這一過程由 order 節(jié)點控制。 共識是一個多步驟的過程,只有在整個流程完成時才會更新賬本 ,可能每個節(jié)點的更新時間稍有不同。

構(gòu)建一個 Hyperledger Fabric 平臺絕非易事,既需要硬件基礎(chǔ)設(shè)施的投入,也需要全方位的開發(fā)和運營管理(DevOps)。除了平臺本身,一套完整的解決方案,還包括設(shè)備接入,訪問控制,服務(wù)監(jiān)控等管理功能。

SAP Cloud Platform(下文簡稱 SCP )提供了開箱即用的 Hyperledger Fabric Service,為開發(fā)者提供了強大的服務(wù)支持:

  • 直觀友好的可視化監(jiān)控與操作界面,幫助開發(fā)者按需申請區(qū)塊鏈網(wǎng)絡(luò),創(chuàng)建管理節(jié)點、渠道,而無需考慮底層硬件資源。

  • 簡單易用的智能合約開發(fā)與測試環(huán)境,方便開發(fā)者對應(yīng)用代碼進行管理。

  • 安全,隱私性方面的保障,并對相關(guān)資源進行了性能優(yōu)化。

hyperledger,Cloud,區(qū)塊鏈

下面是具體的實戰(zhàn)步驟,該步驟使用 go 語言開發(fā)一組微服務(wù),這組微服務(wù)包含讀和寫兩個API,能夠?qū)?shù)據(jù)寫入架設(shè)于 SAP 云平臺上的超級賬本服務(wù)。

簡單地說,應(yīng)用程序通過智能合約接口同超級賬本進行讀寫操作。我們將開發(fā)一個 Hello World 的智能合約,部署到 SAP 云平臺上。出于簡單起見,我們沒有開發(fā)應(yīng)用,而是簡單地在 SAP 云平臺的 API 控制臺上直接消費這個 Hello World 的智能合約,對云平臺上的超級賬本進行讀和寫。

hyperledger,Cloud,區(qū)塊鏈

打開超級賬本項目 Fabric 的 github 倉庫地址:

https://github.com/hyperledger/fabric

發(fā)現(xiàn) Fabric 項目是 Google 的編程語言 GoLang 開發(fā)的,因此咱們這個練習(xí)也使用 Go 語言來進行智能合約的開發(fā)。

  1. 從 Google 網(wǎng)站上將 Go 語言 1.11 版的二進制包下載到本地,解壓到 /usr/local 目錄下:

sudo tar -C /usr/local -xzf /home/vagrant/Downloads/go1.11.linux-amd64.tar.gz

將該目錄配置到環(huán)境變量 PATH 中去:

hyperledger,Cloud,區(qū)塊鏈

hyperledger,Cloud,區(qū)塊鏈

  1. Fabric 項目已經(jīng)將智能合約同超級賬本的通信封裝到一個名叫 shim 的接口中,我們只需要在我們編寫的智能合約代碼中直接調(diào)用該 shim 接口即可。

我們使用 import 將這個 shim 接口的依賴引入進來,在第14行定義一個結(jié)構(gòu)體,包含 ID 和 Value 兩個字段。這個結(jié)構(gòu)體即是待寫入超級賬本的數(shù)據(jù)結(jié)構(gòu),ABAP 顧問可以將其視為 ABAP 數(shù)據(jù)字典里定義的結(jié)構(gòu)體。

hyperledger,Cloud,區(qū)塊鏈

第46行定義的方法 Invoke 是這個最簡單的智能合約的核心代碼,cc *MessageStore 這個語法和 C 語言很像,定義了一個類型為 MessageStore 的指針變量 cc。這個指針變量同 C++ 的 this 指針和 ABAP 的 me 引用作用類似,在方法被調(diào)用時,指向了方法的調(diào)用者。

Invoke 后面括號里的 stub shim.ChaincodeStubInterface 定義了該方法的輸入?yún)?shù)(形參)stub, 類型為 shim.ChaincodeStubInterface。

hyperledger,Cloud,區(qū)塊鏈

這個 Invoke 方法不會通過應(yīng)用程序顯式調(diào)用,而是通過超級賬本程序回調(diào):當(dāng)方法被調(diào)用時,指針 cc 和輸入?yún)?shù) stub 已經(jīng)自動被 Fabric 框架賦上了對應(yīng)值。在 Invoke 方法運行的上下文里,通過輸入?yún)?shù) stub 判斷出當(dāng)前回調(diào)的場景是讀還是寫,然后進入對應(yīng)的分支。分支內(nèi)部調(diào)用我們自己開發(fā)的 write 和 read 方法同超級賬本進行交互。

這種通過同一個回調(diào)函數(shù)內(nèi)部的 switch case 來處理多個場景的做法,ABAP 和 Java 開發(fā)者應(yīng)該都不陌生。比如下圖是通過 InvocationHandler 實現(xiàn) Java 動態(tài)代理的例子,其中 invoke 方法的邏輯結(jié)構(gòu)和本文智能合約代碼的結(jié)構(gòu)非常相似。

hyperledger,Cloud,區(qū)塊鏈

關(guān)于 ABAP 和 Java 里各種靜態(tài)代理和動態(tài)代理的寫法,請參考我的博客:

Various Proxy Design Pattern implementation variants in Java, ABAP and JavaScript

  1. 將開發(fā)好的智能合約源文件構(gòu)建成可執(zhí)行文件。這一步確保在部署智能合約到 SAP 云平臺之前,先在本地開發(fā)環(huán)境將所有潛在錯誤全部檢測出并修復(fù)。

hyperledger,Cloud,區(qū)塊鏈

  1. 登錄 SAP 云平臺,在 Service Marketplace 里點擊 Hyperledger Fabric 的超鏈接:

hyperledger,Cloud,區(qū)塊鏈

創(chuàng)建一個新的 Service 實例:

hyperledger,Cloud,區(qū)塊鏈

創(chuàng)建過程中需要填寫 channel 的 ID 和密匙。

hyperledger,Cloud,區(qū)塊鏈

區(qū)塊鏈分為公有鏈,私有鏈和聯(lián)盟鏈,而超級賬本屬于聯(lián)盟鏈。在聯(lián)盟鏈里,有一個專門的稱為 MSP(Membership Service Provider)的模塊,提供成員管理服務(wù),只有授權(quán)用戶才能接入?yún)^(qū)塊鏈網(wǎng)絡(luò)。這里我事先在 SAP 云平臺上創(chuàng)建了一個渠道并進行認(rèn)證,因此此處直接輸入一個合法的渠道 ID 和密匙。關(guān)于 SAP 云平臺上超級賬本渠道的創(chuàng)建和成員授權(quán)接入的步驟,請參考這篇 SAP 幫助文檔。

Service 實例創(chuàng)建完畢后,點擊 Create Service Key 按鈕創(chuàng)建 key,目的是生成用于OAuth 認(rèn)證的 clientId 和 clientSecret,方便接下來的 API 調(diào)用。

hyperledger,Cloud,區(qū)塊鏈

點擊 Service 實例的 Referencing Apps 面板,點擊按鈕 Open Dashboard:
hyperledger,Cloud,區(qū)塊鏈

點擊 Deploy Chaincode,選擇本地構(gòu)建好的 zip 包,進行上傳并部署。這個按鈕同 SAP 云平臺 CloudFoundry 環(huán)境部署本地應(yīng)用的邏輯相同。

hyperledger,Cloud,區(qū)塊鏈

部署成功后,點擊 Test Chaincode 超鏈接進入 API 控制臺。

hyperledger,Cloud,區(qū)塊鏈

該控制臺集成了 Swagger 框架,在調(diào)用 post 請求進行超級賬本的寫操作和 get 請求進行讀操作之前,先要點擊 Authorize 按鈕進行身份認(rèn)證:

hyperledger,Cloud,區(qū)塊鏈

輸入第四步創(chuàng)建 Service Key 后生成的 clientID 和 clientSecret 進行認(rèn)證:

hyperledger,Cloud,區(qū)塊鏈

認(rèn)證成功后,可以在 Swagger 的控制臺里調(diào)用 post 和 get 請求了。

hyperledger,Cloud,區(qū)塊鏈

首先發(fā)送 post 請求,請求負載就是一個簡單的 json 對象,id 為 i042416,value 為Hello World:

post 請求在 SAP 云平臺上的超級賬本執(zhí)行成功,返回 200 響應(yīng)碼:

hyperledger,Cloud,區(qū)塊鏈

緊接著執(zhí)行 get 請求,輸入剛才寫入的數(shù)據(jù) id: i042416:

hyperledger,Cloud,區(qū)塊鏈

get 請求能夠?qū)⒅巴ㄟ^ post 請求寫入賬本的數(shù)據(jù)成功讀出來:

hyperledger,Cloud,區(qū)塊鏈

登錄 SAP 云平臺超級賬本控制臺,能看到之前通過 post 寫入的數(shù)據(jù)已經(jīng)加入到區(qū)塊鏈尾部的區(qū)塊了。點擊區(qū)塊可以查看數(shù)據(jù)明細:

hyperledger,Cloud,區(qū)塊鏈

在超級賬本控制臺的 API Calls 和 Logs 面板里也能看到每次超級賬本讀寫的詳細信息。

hyperledger,Cloud,區(qū)塊鏈
hyperledger,Cloud,區(qū)塊鏈

總結(jié)

SAP 云平臺的超級賬本服務(wù),成功地幫助了希望使用這項區(qū)塊鏈技術(shù)的企業(yè)避免了硬件基礎(chǔ)設(shè)施的投入,同時屏蔽了大部分超級賬本平臺管理的底層細節(jié)。通過 SAP 云平臺提供的控制臺,即可實現(xiàn)對超級賬本進行設(shè)備接入,訪問控制,服務(wù)監(jiān)控等管理功能。同時,通過 Go 語言編寫的智能合約一旦部署到 SAP 云平臺,生成的 Restful API 能夠被其他編程語言方便地消費。調(diào)用這些 API 寫入超級賬本區(qū)塊鏈中的數(shù)據(jù)將無法再被篡改。使用 SAP 云平臺的超級賬本服務(wù),應(yīng)用開發(fā)人員可以無需將過多精力花費在超級賬本體系架構(gòu)本身,從而能夠?qū)W⒂趹?yīng)用邏輯的編寫上去。文章來源地址http://www.zghlxwxcb.cn/news/detail-800285.html

到了這里,關(guān)于基于區(qū)塊鏈技術(shù)的超級賬本(Hyperledger) - 從理論到實戰(zhàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包