如何使用web3j為Java應(yīng)用或Android App增加以太坊區(qū)塊鏈支持,本教程內(nèi)容即涉及以太坊中的核心概念,例如賬戶管理包括賬戶的創(chuàng)建、錢包創(chuàng)建、交易轉(zhuǎn)賬,交易與狀態(tài)、智能合約開發(fā)與交互、過濾器和事件等,同時也詳細說明如何使用web3j提供的API開發(fā)接口與以太坊進行交互,是java和android(安卓)工程師學(xué)習(xí)以太坊應(yīng)用開發(fā)(DApp)的不二選擇。
以太坊概述
以太坊是備受關(guān)注的區(qū)塊鏈,它基于密碼學(xué)技術(shù)和P2P通信技術(shù) 構(gòu)建了一個去中心化的平臺,所有的交易同步保存在每個節(jié)點中, 通過將區(qū)塊單向級聯(lián)成鏈,以太坊有效的保證了交易的不可篡改:

智能合約平臺
以太坊是第一個實現(xiàn)了虛擬機的區(qū)塊鏈,因此為智能合約 - Smart Contract - 的運行提供了良好的支持環(huán)境。也正因為這個原因,以太坊被稱為區(qū)塊鏈 2.0,以區(qū)別于比特幣代表的以數(shù)字加密貨幣為核心特征的區(qū)塊鏈1.0。
可以將智能合約理解為機器之間的合同約定,在滿足一定條件時自動 執(zhí)行約定好的邏輯,例如在保險理賠流程中,如果理賠條件滿足就自動 將賠償金釋放給出險人,這個流程就可以使用智能合約來實現(xiàn)。
有多種語言可以開發(fā)以太坊智能合約,但目前最常用的是類似于JavaScript的 Solidity語言。本課程中將采用Solidity講解智能合約的開發(fā)。
JSON RPC與web3j
如果我們希望構(gòu)造一個去中心化應(yīng)用(DApp),除了智能合約的開發(fā), 通常還需要使用其他開發(fā)語言為用戶提供操作智能合約的用戶接口,例如 開發(fā)一個網(wǎng)頁、一個手機App或者一個桌面應(yīng)用。這些代碼都需要與以太坊進行交互。
以太坊規(guī)定了每個節(jié)點需要實現(xiàn)的JSON RPC API 應(yīng)用開發(fā)接口,該接口是傳輸無關(guān)的,應(yīng)用程序可以通過HTTP、websocket或IPC等多種 通信機制來使用該接口協(xié)議操作以太坊節(jié)點:

理論上你可以使用任何語言基于JSON RPC接口開發(fā)出以太坊之上的 去中心化應(yīng)用,不過為了提高開發(fā)效率,更好的辦法是 使用特定語言的JSON RPC封裝庫,這些庫封裝了JSON RPC的協(xié)議細節(jié), 有助于開發(fā)人員聚焦在業(yè)務(wù)邏輯的實現(xiàn)上。
web3j是一個輕量級的用于集成以太坊功能的Java開發(fā)庫,它是Java版本的以太坊JSON RPC 接口協(xié)議封裝實現(xiàn),如果需要將你的Java應(yīng)用或Android應(yīng)用接入以太坊,用web3j就對了。
web3j體系概述
web3j的功能組織在不同的包中,下圖展示了org.web3j主要包之間的依賴關(guān)系:

core:JSON RPC協(xié)議的封裝主要由包org.web3j.core實現(xiàn),它依賴于org.web3j.crypto包提供的密鑰與簽名相關(guān)的功能,以及org.web3j.abi包提供的java/solidity類型映射支持。
console:org.web3j.console包實現(xiàn)了一個可以單獨運行的命令行程序web3j,我們將使用它來 生成solidity合約的Java封裝類,其中,org.web3j.codegen包實現(xiàn)了從abi到j(luò)ava封裝類的代碼生成。
節(jié)點相關(guān):org.web3j.infura包封裝了對Infura公共節(jié)點旳http訪問服務(wù)接口,?org.web3j.geth和org.web3j.parity則分別封裝了這兩種常用以太坊節(jié)點軟件旳管理接口。
本課程的目的是幫助java工程師快速掌握使用web3j開發(fā)以太坊應(yīng)用的技能,因此 主要以web3j的開發(fā)接口為主線來展開課程內(nèi)容,同時穿插講解以太坊的一些基本 概念,例如:賬戶、交易和智能合約的開發(fā)等。
課程內(nèi)容概述
1.hello,web3j
將通過一個簡單的java應(yīng)用的開發(fā)來講解使用web3j進行以太坊應(yīng)用開發(fā)的最簡流程,通過這一部分的學(xué)習(xí),你就可以在自己的java應(yīng)用中引入以太坊支持了。
2.賬戶管理
將詳細介紹web3j提供的賬戶管理接口。如果你對開發(fā)錢包應(yīng)用(中心化/去中心化)感興趣,這部分內(nèi)容會有很大的幫助。web3j創(chuàng)建賬戶,創(chuàng)建錢包,轉(zhuǎn)賬特別是代幣轉(zhuǎn)賬等豐富的進行交易的功能。
3.狀態(tài)與交易
主要講解web3j提供的交易操作接口,同時也介紹一些重要的概念,例如狀態(tài)、裸交易、gas等。這部分內(nèi)容將幫助你理清java應(yīng)用與以太坊交互的大多數(shù)問題。
4.智能合約
將通過一個投票合約的開發(fā)、編譯、代碼生成、部署與交互的完整流程,講解使用web3j操作solitiy智能合約的方法。
5.過濾器與事件
主要講解以太坊的通知機制和web3j的響應(yīng)式封裝接口。
該教程為每個知識點都提供了相應(yīng)的預(yù)置代碼,你可以在在線實驗環(huán)境的~/repo目錄下查看。更詳細的內(nèi)容點擊這里開始學(xué)習(xí):?Web3j教程,主要介紹java和android app通過web3j進行區(qū)塊鏈以太坊開發(fā),非常適合java和android(安卓)程序員。