1. 程式人生 > >Java呼叫以太坊智慧合約

Java呼叫以太坊智慧合約

Web3j讓Java開發者可以輕鬆地訪問以太坊區塊鏈並呼叫區塊鏈上的智慧合約的方法,在本教程中,我們將學習如何建立一個簡單的命令列應用來訪問區塊鏈上的合約。

1、什麼是web3j

Web3j是一個開發包,你可以利用這個開發包快速實現對以太坊/Quorum節點的訪問,同時也可以用它為某個智慧合約檔案生成對應的java封裝類,以便在Java應用中呼叫。

系統學習web3j開發,推薦匯智網的線上互動教程:《Web3j以太坊開發詳解》

2、節點安裝與智慧合約部署

首先我們需要搭建一個以太坊網路並部署智慧合約,你可以參考這個repo,按照README說明搭建並部署智慧合約。

要呼叫以太坊鏈上的合約,我們需要兩個東西:

  • 錢包私鑰
  • 合約地址

在區塊鏈領域,賬號通常稱為錢包,不過這是一個比較混亂的詞語,有時錢包指的是單一地址,有時又指的是包含多個地址的容器。在本文中,一個錢包指的是單一的以太坊地址,

ganache在啟動時會列出10個錢包地址以及其對應的私鑰。例如:

(0) 11af9e9f87c53beedfe7eb3f1e9b6e2592b382ab3ecd83a92a6c20cb0c885f63
(1) 7cb8f9f70eac9aca70b514a9a8ebd36a3c2c4a9d28dc9534d6042914ed814161
(…)

在這個教程中,我們將使用0#地址,即:

11af9e9f87c53beedfe7eb3f1e9b6e2592b382ab3ecd83a92a6c20cb0c885f63

部署好的合約也類似:

2_deploy_contracts.js
=====================

Deploying ‘SimpleStorage’
————————-

> transaction hash:   0x18f4dffba426a2cd63bddf5b8741f0708729515d178d59df0b2a43c5aa85e646
> Blocks: 0           Seconds: 0
> contract address:   0x3C4c39bd5a928bc19A981c85A00543EEB9f7C795
> account:             0x169C8C361e1CC394C3FFefa52FcaB91704cde2b2
> balance:             99.99147618
(…)

在上面的輸出中,注意contract address部分,表示合約的部署地址,即:

contract-address: 0x3C4c39bd5a928bc19A981c85A00543EEB9f7C795

3、智慧合約相關工具安裝

我們首先需要安裝solidity智慧合約編譯器:

$ npm install -g solc

然後從這裡下載web3j命令列工具,解壓並設定PATH環境變數,以便可以在任何目錄呼叫。

4、合約的java封裝類

首先編譯合約並生成java封裝類:

$ solc <smart-contract>.sol –bin –abi –optimize -o <output-dir>/

$ web3j solidity generate -b /path/to/<smart-contract>.bin \
        -a /path/to/<smart-contract>.abi \
        -o /path/to/src/main/java \
        -p com.your.organisation.name

5、在Java程式碼中呼叫合約

現在我們可以呼叫合約了:

public class App
{
   // change contract-address
   private static String contractAddress = contract-address;
   // main method
   public static void main(String[] args) {
       // instantiate web3j
       Web3j web3 = Web3j.build(new
          HttpService("http://localhost:9545/"));
       Credentials credentials = Credentials.create(wallet-address);
       // instantiate the contract
       SimpleStorage contract = SimpleStorage.load(
           contractAddress, web3, credentials, new DefaultGasProvider()
       );
       // say hello
       System.out.println("Welcome " + credentials.getAddress());
       // interact with the contract
       try {
           BigInteger currentValue;
           // get value
           currentValue = contract.get().send();
           System.out.println(currentValue.toString());
           // change value
           contract.set(new BigInteger("1")).send();
           // get value
           currentValue = contract.get().send();
           System.out.println(currentValue.toString());
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}

上面的程式碼首先用節點URL來初始化Web3j例項,然後使用錢包地址私鑰建立一個賬戶身份憑證物件,並使用合約地址初始化合約,最後呼叫合約的方法。


如果你想學習區塊鏈並在Blockchain Technologies建立職業生涯,那麼請檢視我們分享的一些以太坊、比特幣、EOS、Fabric等區塊鏈相關的互動式線上程式設計實戰教程:

  • java以太坊,主要是針對java和android程式設計師進行區塊鏈以太坊開發的web3j詳解。
  • python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
  • php以太坊,主要是介紹使用php進行智慧合約開發互動,進行賬號建立、交易、轉賬、代幣開發以及過濾器和交易等內容。
  • 以太坊開發入門,主要介紹智慧合約與dapp應用開發,適合入門。
  • 以太坊電商,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
  • ERC721實戰,課程以一個數字藝術品創作與分享DApp的實戰開發為主線,深入講解以太坊非同質化通證的概念、標準與開發方案。內容包含ERC-721標準的自主實現,講解OpenZeppelin合約程式碼庫二次開發,實戰專案採用Truffle,IPFS,實現了通證以及去中心化的通證交易所。
  • C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括賬戶管理、狀態與交易、智慧合約開發與互動、過濾器和交易等。
  • java比特幣,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Java程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
  • php比特幣,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Php程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
  • c#比特幣,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在C#程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是C#工程師不可多得的比特幣開發學習課程。
  • EOS開發入門,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智慧合約開發與部署、使用程式碼與智慧合約互動等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
  • EOS錢包開發,本課程以手機EOS錢包的完整開發過程為主線,深入學習EOS區塊鏈應用開發,課程內容即涵蓋賬戶、計算資源、智慧合約、動作與交易等EOS區塊鏈的核心概念,同時也講解如何使用eosjs和eosjs-ecc開發包訪問EOS區塊鏈,以及如何在React前端應用中整合對EOS區塊鏈的支援。課程內容深入淺出,非常適合前端工程師深入學習EOS區塊鏈應用開發。
  • Hyperledger Fabric NodeJS SDK,本課程面向初學者,內容即包含Hyperledger Fabric的身份證書與MSP服務、許可權策略、通道配置與啟動、鏈碼通訊介面等核心概念,也包含Fabric網路設計、nodejs鏈碼與應用開發的操作實踐,是Nodejs工程師學習Fabric區塊鏈開發的最佳選擇。
  • Hyperledger Fabric java SDK,課程面向初學者,內容即包含Hyperledger Fabric的身份證書與MSP服務、許可權策略、通道配置與啟動、鏈碼通訊介面等核心概念,也包含Fabric網路設計、java鏈碼與應用開發的操作實踐,是java工程師學習Fabric區塊鏈開發的最佳選擇。
  • tendermint,本課程適合希望使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI介面、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操程式碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。
  • Flutter以太坊,主要是針對Flutter/Dart程式設計師進行區塊鏈以太坊開發的web3Dart詳解。

原文連結:Web3j新手教