Hyperledger Fabric構建區塊鏈PoC應用程式進行房屋交易
這篇文章是關於利用Hyperledger Fabric(HF)區塊鏈平臺在區塊鏈上建立區塊鏈PoC應用程式進行房屋交易記錄的經驗。對於那些剛剛開始使用HF或打算學習它的人來說,它可能會受益,對於那些已經體驗過HF的人來說,它可能提供另一種同樣可行的選擇。
讓我們首先設定目標,然後看看我們如何實現目標。
我們的目標是建立一個Web應用程式,用於在一個小的許可區塊鏈上記錄房屋交易(買賣房屋)並能夠搜尋它們。我們決定使用Hyperledger Fabric平臺來完成這項工作。
在一天結束時,我們希望這個應用程式看起來像下面(除非自我解釋,否則簡潔解釋)。
我們的第一個螢幕是Web應用程式的登入頁面,其中包含Hyperledger Fabric api服務除錯輸出的背景:
以下螢幕是Web應用程式的登入 Login
頁面(續)。登入使用雙因素身份驗證過程。
以下螢幕是應用程式的主螢幕,其中列出了新增交易 add transaction
和搜尋它們 search for them
兩個核心功能。
以下螢幕提供了將房屋交易記錄到區塊鏈的表格:
以下螢幕在表單上輸入房屋交易:
以下螢幕將房屋交易記錄到區塊鏈上,並查詢鏈條以檢索它(以確認成功記錄交易):
以下螢幕捕獲單擊下載(合約)連結時的狀態:
以下螢幕輸入房屋交易搜尋查詢(通過apn查詢房屋):
以下螢幕返回交易查詢結果:
我們可以看到,上面是一個功能齊全的PoC區塊鏈應用程式。將其稱為PoC,因為我們尚未將 example.com
和相關子域的域名替換為一個生產域名和其他一些生產內容。
現在,讓我們討論一下我們是如何做到的。
首先,我們需要概念清晰度和架構。
Hyperledger Fabric採用3層架構。具體來說,它的基礎設施的區塊鏈網路,業務規則和邏輯的鏈程式碼,以及終端使用者執行業務功能的網路和/或移動應用程式。
將它們分成三層或元件將有助於我們在建立區塊鏈應用程式時解決問題。
下圖描繪了這樣一種架構,並讓它指導我們進行這種區塊鏈應用程式開發工作:
Hyperledger Fabric網路基礎設施
這部分涉及與利益相關者一起作為網路參與者或分散式節點/peers,一直到建立設定規則和策略。使用加密工具建立金鑰,安全身份,角色等。使用稱為 orderer
的特殊服務來促進對等體之間的通訊和資料交易處理。以及更多…
對於這一層,需要廣泛的計算機背景,包括Unix/Linux/Ubuntu,Docker(容器化)等技能。這很複雜,但需要的程式設計也不多。
能夠使用此層的Fabric計數設定區塊鏈網路。一個重要的部分是 yaml
檔案,例如 docker-compose.yaml
檔案,這樣的配置檔案或檔案定義整個網路拓撲。你不必在短時間內以線性方式獲得完整的能力,但將是一個良好的開端。
因為這是一個重要且複雜的過程,所以我建立了一個長達45頁的獨立文件,專門介紹瞭如何學習Hyperledger Fabric網路基礎架構的基礎知識,該文件還討論了鏈程式碼並逐步簡要介紹了Web應用程式,因此,請參考如果你對第一部分不熟悉,請參閱本文件的第一部分(有關詳細資訊,請與我們聯絡)。
Hyperledger Fabric Chaincode
術語“鏈碼”相當於以太坊的“智慧合約”。Chaincode可以用三種語言中的一種編寫,即Node.js,Go(Golang)和Java(就我個人而言,我在Node.js陣營中)。其中一個的熟練程度是可以預期的。
對於這一部分,獲得瞭解Fabric的方法的能力,如有效使用CLI和docker命令將是非常重要的。一些關鍵的docker命令包括:
docker ps docker exec -it cli bash docker run ... docker rm -f $ (docker ps -qa)
一些必要的unix/linux/ubuntu技能是必須的,例如,
ls cp mv
然後一些高階知識可以很方便同樣,例如, chmod a + r myfile
將使 myfile
的使用者/組/所有人(全域性)的所有三個角色的許可權設定為r(可讀)。
Chaincode管理方面,鏈碼有兩個主要類別,一個稱為系統鏈碼 system chaincode
,它與給定的區塊鏈和另一個類別相互作用,另一個類別稱為使用者鏈碼 user chaincode
,它們是我們開發人員/程式設計師建立的鏈碼。
使用者鏈碼有四個生命週期:安裝 Install
, 例項化
Instantiate ,呼叫
Invoke ,查詢
Query`。
Install Instantiate Invoke Query
超出基礎知識的安裝和例項化
在我看來,在生產環境中,鏈程式碼安裝和例項化通常是一次性過程,一旦安裝並例項化特定鏈程式碼,它們將始終存在以供將來使用,例如呼叫和查詢。瞭解如何安裝和例項化至關重要。
至少有3種方法可以安裝和例項化鏈碼。
- 1.通過CLI命令提示符下的
peer
命令,這是一個很好的方法。 - 2.通過呼叫Fabric REST api伺服器,根據我的經驗,這種方法也很不錯。
- 3.通過Hyperledger Composer,這引入了一個全新的範例。雖然我對Hyperledger專案的工作人員給予了最高的尊重,但我對它如何適應整個Fabric架構存在問題,讓Composer重新建立Fabric網路等……它似乎走向了許多方向/引入了不必要的額外流程,所以,我個人在避免這個選擇。有關此選項未來前景的詳細資訊,請參閱以下注釋和URL,“代表我在XYZ的團隊發言,我們都非常自豪我們在過去幾年中為Composer做出的貢獻,我們都是感謝社群的所有反饋和貢獻。然而我們XYZ認為,Composer的架構和設計存在一些基本問題,因此它們使我們重新考慮我們未來的方向和計劃。 https://lists.hyperledger.org/g/composer/message/125
關於方法1,嘗試一下,你可以先開啟 first-network
,然後轉到CLI命令提示符 docker exec -it cli bash
,現在你可以安裝並例項化鏈碼,因為 mycc
已安裝,你可以安裝 fabcar
,當你啟動Fabric網路時,從 ./byfn.sh up
螢幕顯示尋找安裝 mycc
的路徑。
安裝完成後,你可以通過 peer chaincode list - installed
命令驗證它是否真正安裝,然後通過檢視 mycc
鏈程式碼的實現情況來例項化 fabcar
鏈程式碼(並確保你線上,它需要一些npm參考)。可能需要幾分鐘,一旦完成,使用 peer chaincode list -C mychannel — instantiated
來驗證它是否真正例項化。
因此,再次獲得執行鏈碼生命週期的能力是非常重要的,如上所述,安裝,例項化,呼叫和查詢。
Chaincode編碼方式,一種很好的學習方法是閱讀和理解樣本鏈程式碼。 Balance-Transfer
示例應用程式和 Fabcar
示例應用程式都是很好的例子。重要的是願意嘗試或調整它們,因此,我們將獲得新的理解甚至某種發現。例如,對於 First-Network
示例應用程式, Instantiate
實際上將資料寫入鏈,而 Fabcar
示例應用程式的 Instantiate
則不然。因此,我們知道 Instantiate
可以以更好地滿足我們需求的方式編寫,而必須這樣做。
現在,讓我們將關於鏈碼的所有上述通用學習對映到House Transaction區塊鏈應用程式中,在這種情況下,兩個關鍵功能是 addTransaction
和 queryTransaction
,因為我使用Node.js作為鏈碼,一個node.js原始碼檔案可以解決它們,一旦完成,我們使 package.json
配置檔案反映這個node.js原始碼檔案。然後,我們準備好了如上所述的鏈碼生命週期。
那麼,現在,我們已經使用Hyperledger Fabric平臺構建了一個區塊鏈網路,併為這個House Transaction區塊鏈應用程式建立了鏈碼,但我們的終端使用者需要通過網路或他們的手機訪問它,下一步是什麼?
當然,開發Web和移動介面到鏈中,因為這個應用程式是為了業務,我將首先從Web應用程式開始。所以,現在它將我們帶到下一部分。
區塊鏈上的Web和移動應用程式
現在的第一個問題是如何將鏈程式碼與鏈的狀態資料庫和分類帳連線,然後如何將鏈程式碼連線到Web應用程式,因此,鏈程式碼排在中間。 api
是一種為兩端建立連線的方法。然後 api-wise
,我們有Fabric api和Composer api。如上所述,我是 Occam’s Razor principle
的粉絲,它有效地解決了問題(與任何複雜的方法無關),因此,我已經淘汰了 Composer api
,這意味著 Fabric api
是我的選擇。
簡而言之,Fabric API伺服器的工作原理如下,在鏈程式碼方面,它利用低階api與鏈程式碼進行通訊,這個低階api稱為 shim
,也稱為 fabric-shim
,然後,在網站上,一些伺服器端指令碼呼叫 Fabric api
進行鏈資料操作。
現在,讓我們展開上面的內容,我們首先執行Fabric API伺服器,然後,我們設定一個Web伺服器,建立一些伺服器端程式碼來呼叫API伺服器以滿足不同型別的鏈交易需求,例如安裝,例項化,呼叫和查詢。
現在,讓我們將上一段的概念性亮點轉換為這個House Transaction應用程式,對於伺服器端程式碼,我們需要一些程式碼用於登入頁面(FORM)和一些程式碼來嵌入安全/認證邏輯,然後建立html FORM接受房屋交易資料輸入,一些程式碼接受該交易並將資料寫入鏈,然後一些程式碼接受查詢交易,一些程式碼處理這樣的查詢/搜尋,從鏈中獲取資料然後呈現有這種結果的使用者,如果沒有找到則沒有。
到目前為止,我們有幾個終端/視窗用於Fabric chaincode型別的業務,例如執行Fabric api伺服器,用於驗證正在執行的程序/已安裝的容器/程式,用於執行Web伺服器以及可能用於驗證檔案的另一個;然後,我們為Web應用程式業務部門打開了一個Firefox Web瀏覽器;以及用於檔案/程式碼建立和編輯的文字編輯器……看看下面的截圖,在我看來,有點亂,但NICE的一塌糊塗:
摘要
區塊鏈技術很複雜。我們的背景和能力將影響我們的學習方式和學習速度。與此同時,我們將努力在開始之前尋求清晰,路線圖的技術清晰度,我們需要獲得的關鍵知識,每個元件/部件如何與另一個元件連線並組合在一起,首先是什麼以及需要遵循什麼,我們的首要任務是重要的。我們永遠不應低估嘗試理性的意願的價值。
為了更好地理解上述內容,我們可以將它們總結為有能力的Hyperledger Fabric專業人員的三個核心技能組合。 - Fabric區塊鏈網路或網路基礎設施的知識和技能; - 能夠將鏈碼編寫和部署到網路; - 能夠通過Fabric API伺服器將Web介面的伺服器端指令碼編寫到鏈程式碼中。
作為一名從業者,我們需要記住奧卡姆的剃刀原則,效率勝過任何複雜的設計和/或架構。
同樣重要的是,我們需要在我們的旅程中不斷尋找優秀,稱職和經驗豐富的人,他們不僅可以豐富我們的知識,而且可以帶給我們一種社群感。
與其他區塊鏈平臺一樣,Hyperledger Fabric技術仍處於初期階段,好訊息似乎是不斷髮展。
附:目前這個PoC應用程式適用於一個擁有兩個節點的組織,我打算將另外一個組織的更多節點/對等體新增到網路中(只需要編輯docker-compose.yaml配置檔案並編輯一些鏈程式碼引數,重啟網路並做一些測試……)。
======================================================================
分享一些以太坊、EOS、比特幣等區塊鏈相關的互動式線上程式設計實戰教程:
- EOS教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智慧合約開發與部署、使用程式碼與智慧合約互動等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
- java以太坊開發教程,主要是針對java和android程式設計師進行區塊鏈以太坊開發的web3j詳解。
- python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
- php以太坊,主要是介紹使用php進行智慧合約開發互動,進行賬號建立、交易、轉賬、代幣開發以及過濾器和交易等內容。
- 以太坊入門教程,主要介紹智慧合約與dapp應用開發,適合入門。
- 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
- C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括賬戶管理、狀態與交易、智慧合約開發與互動、過濾器和交易等。
- java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Java程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
- php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Php程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
- tendermint區塊鏈開發詳解 ,本課程適合希望使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI介面、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操程式碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。
匯智網原創翻譯,轉載請標明出處。這裡是原文 Hyperledger Fabric構建區塊鏈PoC應用程式進行房屋交易