1. 程式人生 > >Android如何與以太坊智慧合約互動?

Android如何與以太坊智慧合約互動?

如果要下載整個以太坊區塊鏈並保持本地節點同步。當區塊鏈佔用了我計算機上超過100GB的空間。這在臺式計算機上可能有意義,但在移動裝置上則不太合理。

解決此限制的一種方法是使用像Infura這樣的服務。Infura允許你連線到遠端以太坊節點並執行交易,而無需擔心維護和同步本地節點。

為了能夠使用本機Java程式碼與智慧合約進行交易,我們使用一個名為Web3j的庫。Web3j為你提供生成智慧合約java封裝包的實用程式,以及通過HTTP和IPC完整實現以太坊的JSON-RPC客戶端API。它提供了更多功能,但剛說的這些對這個“Android Ethereum hello world”示例來說最重要的功能。

我想要與之互動的示例智慧合約是一個Greeter。它在區塊鏈上儲存可以讀取或更新的問候訊息。它看起來像這樣:

contract greeter is mortal {
    /* define variable greeting of the type string */
    string greeting;

    /* this runs when the contract is executed */
    function greeter(string _greeting) public {
        greeting = _greeting;
    }

    /* change greeting */
function changeGreeting(string _greeting) public { greeting = _greeting; } /* main function */ function greet() constant returns (string) { return greeting; } }

為了能夠建立封裝包,我們首先要編譯這個智慧合約:

solc greeter.sol --bin --abi --optimize -o <output-dir>/

要生成執行的封裝包:

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

Java部分

首先,我們需要獲得以太坊區塊鏈互動的Web3例項。它看起來像這樣:

InfuraHttpService infuraHttpService = new InfuraHttpService(url);
Web3j web3j = Web3jFactory.build("https://ropsten.infura.io/YOUR_API_KEY");

現在我們可以讀取合約幾乎是即時的。

Greeter greeter = Greeter.load(greeterContractAddress, web3j, credentials, gasPrice, gasLimit);
Future<Utf8String> greeting = greeter.greet();
Utf8String greetingUtf8 = greeting.get();
String result = greetingUtf8.getValue();

但交易不是即時的,可能需要幾分鐘才能得到驗證。

Greeter greeter = Greeter.load(greeterContractAddress, web3j, credentials, gasPrice, gasLimit);
TransactionReceipt transactionReceipt = greeter.changeGreeting(new Utf8String(greetingToWrite)).get(timeout);
String result = "Successful transaction. Gas used: " + transactionReceipt.getGasUsed();

如果希望快速進行web3j、java、以太坊開發,那請看我們精心打造的教程:
java以太坊開發教程,主要是針對java和android程式設計師進行區塊鏈以太坊開發的web3j詳解。

其他以太坊教程如下:

  • 以太坊入門教程,主要介紹智慧合約與dapp應用開發,適合入門。
  • 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
  • python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
  • php以太坊,主要是介紹使用php進行智慧合約開發互動,進行賬號建立、交易、轉賬、代幣開發以及過濾器和事件等內容。
  • C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括賬戶管理、狀態與交易、智慧合約開發與互動、過濾器和事件等。

匯智網原創翻譯,轉載請標明出處。這裡是原文