Android与以太坊智能合约交互
如果要下载整个以太坊区块链并保持本地节点同步。当区块链占用了我计算机上超过100GB的空间。这在台式计算机上可能有意义,但在移动设备上则不太合理。
解决此限制的一种方法是使用像Infura这样的服务。Infura允许你连接到远程以太坊节点并执行交易,而无需担心维护和同步本地节点。
为了能够使用本机Java代码与智能合约进行交易,我们使用一个名为Web3j的库。Web3j为你提供生成智能合约java封装包的实用程序,以及通过HTTP和IPC完整实现以太坊的JSON-RPC客户端API。它提供了更多功能,但刚说的这些对这个“Android Ethereum hello world”示例来说最重要的功能。
我想要与之互动的示例智能合约是一个Greeter。它在区块链上存储可以读取或更新的问候消息。它看起来像这样:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
为了能够创建封装包,我们首先要编译这个智能合约:
solc greeter.sol --bin --abi --optimize -o <output-dir>/
- 1
要生成运行的封装包:
web3j solidity generate /path/to/<smart-contract>.bin /path/to/<smart-contract>.abi -o /path/to/src/main/java -p com.your.organisation.name
- 1
Java部分
首先,我们需要获得以太坊区块链交互的Web3实例。它看起来像这样:
InfuraHttpService infuraHttpService = new InfuraHttpService(url); Web3j web3j = Web3jFactory.build("https://ropsten.infura.io/YOUR_API_KEY");
- 1
- 2
现在我们可以读取合约几乎是即时的。
Greeter greeter = Greeter.load(greeterContractAddress, web3j, credentials, gasPrice, gasLimit); Future<Utf8String> greeting = greeter.greet(); Utf8String greetingUtf8 = greeting.get(); String result = greetingUtf8.getValue();
- 1
- 2
- 3
- 4
但交易不是即时的,可能需要几分钟才能得到验证。
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();
- 1
- 2
- 3
完整的例子看github这里。
如果希望快速进行web3j、java、以太坊开发,那请看我们精心打造的教程:
java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
相关推荐
88256433 2020-10-29
withjeffrey 2020-10-23
tosway 2020-10-07
lookat 2020-09-18
何砝 2020-09-16
lookat 2020-08-19
zuiyingong 2020-08-19
pxy 2020-08-15
ViMan0 2020-08-14
bjwendy 2020-07-27
lookat 2020-07-26
wishchinYang 2020-07-16
zuiyingong 2020-07-09
zuiyingong 2020-07-03
布衣 2020-06-11
hackeey 2020-06-11