面向 Java 開發人員的區塊鏈鏈代碼__hyperledger

來源:互聯網
上載者:User

面向 Java 開發人員的鏈代碼簡介

點擊查看視頻示範查看抄本

您或許聽說過區塊鏈,但可能不確定它對 Java 開發人員有何用。本教程將協助大家解惑。我將分步展示如何使用 Hyperledger Fabric v0.6 來構建、運行和執行使用 Java 語言編寫的智能合約或鏈代碼。您將安裝一些工具,定義本地區塊鏈網路,構建並運行一個鏈代碼智能合約。

有關區塊鏈的概述,請參閱 developerWorks 部落格中的 “區塊鏈是什麼。分散式總帳技術入門”。

擷取最佳免費工具、培訓和社區資源的每月集萃,協助您開始使用區塊鏈。
最新一期 | 訂閱 前提條件

本教程假設您滿足以下前提條件: 聽說過區塊鏈或 Hyperledger Fabric 架構 擁有中等水平的 Java 編程知識,以及使用該語言和平台的經驗 熟悉或(最好)精通使用: Eclipse IDE Docker 和 Docker Compose Gradle Linux 命令列 SoapUI 或另一種 HTTP 用戶端軟體,比如 Postman

您還應該能夠在最少的指導下在電腦上安裝軟體。由於篇幅所限,我不會介紹所有必要軟體的詳細安裝說明;為您提供軟體的網站應該提供了安裝說明。

深入介紹本教程之前,我想簡單說說區塊鏈。 區塊鏈基礎

儘管關於區塊鏈存在大量炒作,但它確實物有所值。該技術不僅本身很有趣,而且它是顛覆性的,有潛力徹底變革互連網上的業務執行方式。

區塊鏈開發人員推薦閱讀內容

藉助 區塊鏈開發人員中心 內的 developerWorks 教程、課程、部落格和社區支援,提高您的技能。

如何變革。讓我們來想想一次成功的業務交易的基本屬性: 信任:我們達成了協議,但我能夠真的相信您會遵守它(或尊重我)嗎。 透明性:允許查看 “幕後情況”(這既能建立信任,又能減少對信任的需求)。 責任性:用來定義確定所有各方是否都認為該協議得以遵守的條件。

兩方或多方之間的任何業務關係的健康程度對應於上述 3 種屬性的不同層級(例如,更信任意味著需要的透明度更少,反之亦然),但其中一些屬性必須存在,否則就會出現問題。

“區塊鏈技術正被快速應用到您身邊的軟體開發項目中。您準備好了嗎。”

區塊鏈有何協助。首先,通過使用通用架構,業務夥伴可以提前建立一個信任網路。然後,通過使用對所有交易方可見的賬本,區塊鏈提供了透明性。最後,通過採用所有各方的一致意見(使用智能合約或鏈代碼的形式),建立了責任制

這對 Java 開發人員有何意義。

Hyperledger 社區和 Hyperledger Fabric 的快速發展,意味著區塊鏈技術正快速被應用到您身邊的軟體開發項目中。您準備好了嗎。 區塊鏈技術發展形勢

有時,開發技術可能會妨礙業務問題的解決。本教程的主要目的是展示如何編寫 Java 鏈代碼,所以我選擇了最簡單的開發技術組合來實現此目的。

也就是說,該組合中的組件還有其他選擇。在本教程中,我將使用 Docker 作為網路容器環境,而另一個選擇是帶 VirtualBox 的 Vagrant。如果從未使用過 Vagrant,您至少應該嘗試一下。

Docker 是一個容器環境,而 Vagrant 使用了虛擬化。在與 VirtualBox 結合使用時,虛擬化環境對計算環境進行了不同程度的控制,這一點備受一些開發人員的青睞(使其成為 fabric 開發人員的理想選擇)。

如果想進一步瞭解容器化與虛擬化孰優孰劣,請參閱 developerWorks 部落格上的 “Docker 是什麼。容器對應用程式有哪些好處的簡介”。

如果開發人員只想編寫代碼,而不必擔心容器、虛擬化或任何基礎架構,那麼可以選擇 IBM® Bluemix®。儘管 Bluemix 支援運行完整的 IBM 區塊鏈網路,但它目前還不支援使用 Java 語言開發鏈代碼。預計此情況很快就會發生變化,所以請時刻關注。

一座由雪崩形成的冰雕。

Hyperledger Fabric 非常流暢(委婉地講)。您可能時常注意到項目中的某些部分停止工作。不要恐慌 — 這是技術發展初期會出現的一種自然特徵。

例如,如果您注意到本教程中的某個文檔連結失效了,但內容仍然還在 — 它可能只是被轉移到了不同的地方。

使用不斷演變的技術可能會遇到類似的問題。成為早期採用者意味著您有時必須適應這種情況,所以請順其自然。

如果在您的印象中,區塊鏈技術當時的發展情況非常不穩定,您是對的。但是,這意味著您在恰當的時機(從一開始)就開始接觸區塊鏈和鏈代碼。隨著該技術發展成熟,您早期階段學習該技術的投資將會不斷得到豐厚的回報。

區塊鏈是能夠徹底改變每個人的業務執行方式的顛覆式技術之一。這類技術不僅包括 B2B,還包括 B2C,甚至還有 C2C。這的確是一個非常激動人心的時刻。

讓我們開始吧。 設定開發環境

要運行鏈代碼,首先需要設定開發環境。

完成本節後,您就可以運行一個 Hyperledger Java 鏈程式碼範例了,在該樣本中,您將在真實鏈代碼上部署和調用交易。然後,我將展示如何(幾乎)從頭編寫一個新鏈代碼程式。

設定開發環境

點擊查看視頻示範查看抄本

在本節中,您將: 設定網路環境 — 用於運行您的本地區塊鏈網路。 安裝構建軟體 — 用於構建您的鏈代碼。 安裝一個 HTTP 用戶端 — 用於在您的鏈代碼上調用交易。 啟動區塊鏈網路。 構建 Java shim 用戶端 JAR。

實話說,要編寫鏈代碼,有許多設定工作要做。但是,如果您按照這些說明進行操作並稍微勤奮一點,您的付出將是值得的。 1 設定網路環境

本教程將使用 Docker 以及來自 Docker Hub 的預構建區塊鏈網路組件鏡像來運行本地區塊鏈網路。如果願意的話,可以從頭構建 fabric(畢竟它是開源的),但在此階段,使用 Docker Hub 中提供的預構建的 Hyperledger Fabric 鏡像更容易一些。

我在介紹中已經提到過,另一個選擇(您可能在 Hyperledger 文檔中看到過)是使用 Vagrant 和 VirtualBox。Vagrant 是 fabric 開發人員的一個不錯選擇,但作為鏈代碼開發人員,與處理 fabric 本身相比,我們更關心鏈代碼的構建、運行和測試。

如果已經安裝 Docker 1.12 版或更高版本,可以跳到下一節(“安裝構建軟體”)。在下面的操作說明中,假設您尚未安裝 Docker(也就是說,您不是從以前的 Docker 版本進行升級)。安裝 Docker 的過程中也會安裝 Docker Compose,該工具用於定義和運行需要多個容器的應用程式,比如本教程中將啟動並執行本地 Hyperledger 區塊鏈網路。 安裝 Docker

可在這裡找到針對 Mac、Windows 和 Linux 的安裝說明:

將 Docker 安裝在 Mac、Windows 和 Linux 上 驗證 Docker 安裝

要測試 Docker 安裝,可開啟一個終端視窗(或 Windows 上的命令提示字元)並鍵入以下命令:

docker -v docker-compose -v

您會獲得以下輸出:

$ docker -v Docker version 1.13.1, build 092cba3 $ docker-compose -v docker-compose version 1.11.1, build 7c5d5e4

如果想查看 Docker 的實際運行效果,您可運行 hello-world 鏡像,如下所示:

$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 78445dd45222: Pull complete Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7 Status: Downloaded newer image for hello-world:latest   Hello from Docker! This message shows that your installation appears to be working correctly.   To generate this message, Docker took the following steps:   1. The Docker client contacted the Docker daemon.   2. The Docker daemon pulled the "hello-world" image from the Docker Hub.   3. The Docker daemon created a new container from that image which runs the      executable that produces the output you are currently reading.   4. The Docker daemon streamed that output to the Docker client, which sent it      to your terminal.   To try something more ambitious, you can run an Ubuntu container with:   $ docker run -it ubuntu bash   Share images, automate workflows, and more with a free Docker ID:   https://cloud.docker.com/   For more examples and ideas, visit:   https://docs.docker.com/engine/userguide/
2 安裝構建軟體

對於構建系統,Hyperledger Fabric 使用了 Gradle,本教程也將使用它。Gradle 是一個構建自動化系統,它結合使用了指定構建組件的簡單文法與 Apache Ant 和 Apache Maven 的最佳特性,建立了一個容易使用的強大構建系統。如此多開發人員正將他們的項目切換到 Gradle,這不足為奇。請注意,本文使用的是 Gradle 3.3 版本。使用其他版本的 Gradle 可能會導致項目搭建失敗。

可以在 Gradle 首頁 上進一步瞭解 Gradle(和它的一些知名度高的使用者)。 安裝 Gradle

要安裝 Gradle,請按照下面的說明進行操作:

將 Gradle 安裝在 Mac、Windows 和 Linux 上 驗證 Gradle 安裝

要驗證 Gradle 安裝,可開啟一個終端視窗並執行此命令:

gradle -v

您會看到以下輸出:

$ gradle -v   ------------------------------------------------------------ Gradle 3.3 ------------------------------------------------------------   Build time:   2017-01-03 15:31:04 UTC Revision:     075893a3d0798c0c1f322899b41ceca82e4e134b   Groovy:       2.4.7 Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015 JVM:          1.8.0_102 (Oracle Corporation 25.102-b14) OS:           Mac OS X 10.12.3 x86_64
3 安裝 HTTP 用戶端

接下來安裝 HTTP 用戶端軟體,它允許鏈代碼與 Hyperledger 區塊鏈結構的 REST 介面進行通訊。您的瀏覽器可以發出 HTTP GET,但要與 fabric 進行互動,您需要能夠通過 POST 發出訊息。這意味著您需要一個 HTTP 用戶端。

我為本教程選擇的 HTTP 用戶端是 SoapUI,它提供了一個強大的、容易使用的、包含許多功能的免費社區版本。 安裝 SoapUI

要安裝 SoapUI,請按照下面的說明進行操作:

為 Mac OS、Windows 和 Linux 安裝 SoapUI 驗證 SoapUI 安裝

要確認 SoapUI 已安裝,可在電腦上啟動該應用程式。在 Mac OS 上,開啟 SoapUI 後會顯示 SoapUI Starter Page,如圖 1 所示。 圖 1. Mac OS X 上的 SoapUI 4 啟動區塊鏈網路

GOPATH

Hyperledger Fabric 是用 Go 編寫的,而且您經常會在 Hyperledger 文檔中看到 GOPATH 這個術語,所以如果計劃使用 Hyperledger 執行許多鏈代碼開發工作,您應該熟悉它。

GOPATH 是 Go 環境的 root 目錄。原始碼、二進位檔案和其他 Golang 包都是通過與此路徑的相對路徑來引用的。

現在您已安裝開發與測試鏈代碼所需的軟體,是時候啟動本地區塊鏈網路了。第一步是定義網路的配置。

首先,建立一個目錄,用它作為鏈代碼開發過程中使用的所有原始碼的 root 目錄。在本教程中,我將使用 ~/home/mychaincode(或 Windows 上的 C:\home\chaincode)。

接下來,將 GOPATH 環境變數設定為此路徑。我們不會編譯任何 Go 代碼,也不會構建 Golang 包或其他二進位檔案,但 Golang 術語已融合到 Hyperledger 中,所以熟悉按 Go 語言和 GOPATH 的方式進行思考是一個不錯的主意。

在 Linux 上,執行以下命令:

export GOPATH=~/home/mychaincode

或者在 Windows 上,可以使用以下命令:

SET GOPATH=C:\home\mychaincode

接下來,必須告訴 Docker Compose 如何建立和運行區塊鏈對等網路。該網路是使用 YAML 定義的,應該將它命名為 docker-compose.yml。可以將檔案命名為其他名稱,但在啟動 Docker Compose 時,必須指定 -f 標誌。建議堅持使用預設名稱,也就是 docker-compose.yml。

在 GOPATH 的 root 目錄中建立 docker-compose.yml 檔案。粘貼以下內容:

membersrvc:    image: hyperledger/fabric-membersrvc    ports:      - "7054:7054"    command: membersrvc vp0:    image: hyperledger/fabric-peer:x86_64-0.6.0-preview    ports:      - "7050:7050"      - "7051:7051"      - "7053:7053"    environment:      - CORE_PEER_ADDRESSAUTODETECT=true      - CORE_VM_ENDPOINT=unix:///var/run/docker.sock      - CORE_LOGGING_LEVEL=DEBUG      - CORE_PEER_ID=vp0      - CORE_PEER_PKI_ECA_PADDR=membersrvc:7054      - CORE_PEER_PKI_TCA_PADDR=membersrvc:7054      - CORE_PEER_PKI_TLSCA_PADDR=membersrvc:7054      - CORE_SECURITY_ENABLED=false      - CORE_SECURITY_ENROLLID=test_vp0      - CORE_SECURITY_ENROLLSECRET=MwYpmSRjupbT    links:      - membersrvc    command: sh -c "sleep 5; peer node start --peer-chaincodedev"

這裡涉及許多內容,其中大部分內容都不屬於本教程的討論範圍,但我想稍微解釋一下。 此檔案告訴 Docker Compose 定義兩個服務: membersrvc:提供成員服務的成員服務節點,具體來講,它是一個認證簽發機構 (CA),負責處理所有加密解密工作(比如頒發和撤銷認證)。將用於此目的的預構建 Docker 鏡像命名為 hyperledger/fabric-membersrvc。 vp0:網路中的單獨驗證對等節點。對於開發目的,我們不需要奢侈地執行對等網路驗證,只需要一個對等節點即可。將用於此目的的預構建 Docker 鏡像命名為 hyperledger/fabric-peer: x86_64-0.6.0-preview。請注意,由於 Fabric 版本升級,如果省略掉冒號及之後的字元,會導致構建錯誤。此處指定使用 Fabric 0.6 版本。hyperledger/fabric-peer 等同於 hyperledger/fabric-peer:latest。 一些環境變數由 vp0 對等節點設定。請注意,CORE_LOGGING_LEVEL 變數被設定為 DEBUG。這會產生大量輸出,這些輸出有時很方便。但是,如果想要更少的輸出,可將該層級更改為 INFO。請參閱 Hyperledger 設定文檔中的 “日誌控制” 瞭解記錄層級的更多資訊。

可以在 Docker 網站 上找到有關 Docker Compose YML 檔案定義的更多資訊。

接下來請注意,CORE_SECURITY_ENABLED 的值為 false。這意味著 fabric 不需要您發送任何類型的終端使用者憑證。安全性不屬於本教程的討論範圍,但是如果您有興趣瞭解更多資訊,可以根據您的鏈代碼請求來查閱 這篇安全功能說明。

最後提醒一句:對任何這些值的預設設定(尤其是連接埠值)的任何改動都有可能導致本教程中的樣本無法運行。區塊鏈網路是一組分布式軟體組件,它們需要經過精確協調的通訊。強烈建議在理解 fabric 的所有組件如何相互作用之前,不要更改連接埠值的預設值。

完成區塊鏈的定義後,就可以啟動本地區塊鏈網路了。為此,請運行 Docker Compose。導航到您的 $GOPATH 並執行此命令:

docker-compose up

您會在終端視窗中獲得以下輸出:

$ docker-compose up . . Pulling membersrvc (hyperledger/fabric-membersrvc:latest)... latest: Pulling from hyperledger/fabric-membersrvc . . Status: Downloaded newer image for hyperledger/fabric-membersrvc:latest Pulling vp0 (hyperledger/fabric-peer:latest)... latest: Pulling from hyperledger/fabric-peer . . Status: Downloaded newer image for hyperledger/fabric-peer:latest Creating mychaincode_membersrvc_1 Creating mychaincode_vp0_1 Attaching to mychaincode_membersrvc_1, mychaincode_vp0_1 vp0_1         | 19:30:03.773 [logging] LoggingInit -> DEBU 001 Setting default logging level to DEBUG for command 'node' vp0_1         | 19:30:03.773 [nodeCmd] serve -> INFO 002 Running in chaincode development mode . . . vp0_1         | 19:30:04.146 [peer] chatWithSomePeers -> DEBU 07c Starting up the first peer of a new network vp0_1         | 19:30:04.146 [consensus/statetransfer] verifyAndRecoverBlockchain -> DEBU 07d Validating existing blockchain, highest validated block is 0, valid through 0 vp0_1         | 19:30:04.146 [consensus/statetransfer] blockThread -> INFO 0

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.