Android如何與以太坊智慧合約互動?
阿新 • • 發佈:2019-01-23
如果要下載整個以太坊區塊鏈並保持本地節點同步。當區塊鏈佔用了我計算機上超過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詳解。
其他以太坊教程如下:
匯智網原創翻譯,轉載請標明出處。這裡是原文