Android以太坊智能合约交互

栏目: IOS · Android · 发布时间: 6年前

内容简介:如果要下载整个以太坊区块链并保持本地节点同步。当区块链占用了我计算机上超过100GB的空间。这在台式计算机上可能有意义,但在移动设备上则不太合理。解决此限制的一种方法是使用像Infura这样的服务。Infura允许你连接到远程以太坊节点并执行交易,而无需担心维护和同步本地节点。为了能够使用本机Java代码与智能合约进行交易,我们使用一个名为Web3j的库。Web3j为你提供生成智能合约java封装包的实用程序,以及通过HTTP和IPC完整实现以太坊的JSON-RPC客户端API。它提供了更多功能,但刚说的

如果要下载整个以太坊区块链并保持本地节点同步。当区块链占用了我计算机上超过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();

完整的例子看 github这里

如果希望快速进行web3j、java、以太坊开发,那请看我们精心打造的教程:java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。

其他以太坊教程如下:

  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、 mongodb 、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • python以太坊,主要是针对 python 工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用 php 进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和事件等。

汇智网原创翻译,转载请标明出处。这里是 原文


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

中标

中标

阁策 / 四川人民出版社 / 2019-3-1 / 58.00元

一部IT销售的血泪史 一幅招投标人物群像图一起来看看 《中标》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具