android如何与以太坊区块链进行交互

若是要下载整个以太坊区块链并保持本地节点同步。当区块链占用了我计算机上超过100GB的空间。这在台式计算机上可能有意义,但在移动设备上则不太合理。java

解决此限制的一种方法是使用像Infura这样的服务。Infura容许你链接到远程以太坊节点并执行交易,而无需担忧维护和同步本地节点。git

为了可以使用本机Java代码与智能合约进行交易,咱们使用一个名为Web3j的库。Web3j为你提供生成智能合约java封装包的实用程序,以及经过HTTP和IPC完整实现以太坊的JSON-RPC客户端API。它提供了更多功能,但刚说的这些对这个“Android Ethereum hello world”示例来讲最重要的功能。github

我想要与之互动的示例智能合约是一个Greeter。它在区块链上存储能够读取或更新的问候消息。它看起来像这样:web

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>/

要生成运行的封装包:ui

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实例。它看起来像这样:this

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

如今咱们能够读取合约几乎是即时的。url

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

但交易不是即时的,可能须要几分钟才能获得验证。code

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

完整的例子看github这里ip

相关文章
相关标签/搜索