溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java如何調(diào)用以太坊智能合約

發(fā)布時間:2021-12-23 17:04:03 來源:億速云 閱讀:592 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容介紹了“Java如何調(diào)用以太坊智能合約”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

1、什么是web3j

Web3j是一個開發(fā)包,你可以利用這個開發(fā)包快速實現(xiàn)對以太坊/Quorum節(jié)點的訪問,同時也可以用它為某個智能合約文件生成對應的java封裝類,以便在Java應用中調(diào)用。

系統(tǒng)學習web3j開發(fā),推薦匯智網(wǎng)的在線互動教程:《Web3j以太坊開發(fā)詳解》

2、節(jié)點安裝與智能合約部署

首先我們需要搭建一個以太坊網(wǎng)絡并部署智能合約,你可以參考這個repo,按照README說明搭建并部署智能合約。

要調(diào)用以太坊鏈上的合約,我們需要兩個東西:

  • 錢包私鑰

  • 合約地址

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

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環(huán)境變量,以便可以在任何目錄調(diào)用。

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代碼中調(diào)用合約

現(xiàn)在我們可以調(diào)用合約了:

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();
       }
   }
}

上面的代碼首先用節(jié)點URL來初始化Web3j實例,然后使用錢包地址私鑰創(chuàng)建一個賬戶身份憑證對象,并使用合約地址初始化合約,最后調(diào)用合約的方法。

“Java如何調(diào)用以太坊智能合約”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI