`

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详解。

分享到:
评论

相关推荐

    以太坊智能合约开发环境及总结.pdf

    以太坊智能合约开发环境及总结 今年上半年开始接触基于区块链的以太坊智能合约编程。由于⽹络现有资料⼤多使⽤truffle2.0框架,⽽更新的truffle3.0在使⽤习惯上有 较⼤改动,很多教程已经不太适合新⼿使⽤。这⾥在...

    flutter-ethereum-smartcontracts:与以太坊智能合约交互的Flutter应用示例

    通过web3dart软件包与以太坊智能合约进行交互的Flutter应用程序示例。 入门 该项目假定您的Flutter安装至少已升级到2.0版,以便能够在移动平台(Android和iOS),Web(Chrome)和台式机(在我们的示例中为Linux)上...

    ethereum-nodejs-api-skeleton:以太坊智能合约的NodeJS API框架

    以太坊智能合约NodeJS API ================================================== ==== NodeJS REST API与以太坊平台进行交互特征通用API :用于以太坊网络上的常规交易。 通用api在以下位置实现: apis/ethereum.js ...

    以太坊智能合约的技术与组件

    Web3.js,与以太坊区块链节点进行交互的JavaScript API。 常见的以太坊通证标准有两种: ERC20标准,可互换通证。 ERC721标准,不可互换通证。 2014 年 12 月 31 日,维塔利克曾画了一张名为“Silos”的图,展示了...

    drizzle-utils:一个基于RxJS流与以太坊智能合约进行交互的库

    一个基于流与以太坊智能合约进行交互的库。 您可以轻松地订阅事件,合同状态和只读方法。 该库支持浏览器,节点(即服务器端)和React Native环境。 用法 请注意,变量名末尾的$表示流。 您可以在其上调用....

    Go-karma.link是一个跨平台的RPC服务器允许“经典”IT系统通过JSON与以太坊区块链网络上的智能合约进行交互

    karma.link是一个跨平台的RPC服务器,允许“经典”IT系统通过JSON与以太坊区块链网络上的智能合约进行交互

    C#以太坊开发详解.doc

    本课程详细讲解如何使用C#开发基于.Net的以太坊应用,课程内容即涉及以太坊中的核心概念,例如账户管理、状态与交易、智能合约开发与交互、过滤器和事件等,同时也详细说明如何使用C#与以太坊进行交互,是C#工程师...

    Java 如何操作智能合约

    Java 如何操作智能合约, 如何获取测试链的数据,如何将solidity智能合约部署到链上,如何免费获得Rinkeby测试链的ETH,如何用web3j将智能合约转换为Java对象以及如果用Java调用智能合约的方法等等。

    以太坊 JavaScript API

    web3-eth 新项目管理 许可证:LGPL v3 文档 与以太坊区块链和智能合约交互的模块 web3-eth-abi 新项目管理 许可证:LGPL v3 文档 用于编码和解码 EVM 输入/输出的函数 web3-eth-帐户 新项目管理 许可证:LGPL v3 ...

    web3j开发详解-以太坊.zip

    详细讲解如何使用web3j为Java应用或Android App增加以太坊区块链支持,课程内容即涉及以太坊中的核心概念,例如账户管理、状态与交易、智能合约开发与交互、过滤器和事件等,同时也详细说明如何使用web3j提供的开发...

    android和java以太坊开发区块链应用使用web3j类库

    如何使用web3j为Java应用或Android App增加以太坊区块链支持,教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤器和事件等,同时也详细...

    详解Android客户端与服务器交互方式

    最近的Android项目开发过程中一个问题困扰自己很长时间,Android客户端与服务器交互有几种方式,最常见的就是webservices和json。要在Android手机客户端与pc服务器交互,需要满足下面几种条件:跨平台、传输数据格式...

    RN与Android Android 与RN交互

    RN与与原生Android Android 与RN交互 RN与与原生Android Android 与RN交互 RN与与原生Android Android 与RN交互 RN版本0.52.2

    区块链 基于以太坊数字版权用户交互系统的设计与实现+详细文档+全部资料(优秀项目).zip

    区块链 基于以太坊数字版权用户交互系统的设计与实现+详细文档+全部资料(优秀项目).zip区块链 基于以太坊数字版权用户交互系统的设计与实现+详细文档+全部资料(优秀项目).zip区块链 基于以太坊数字版权用户交互...

    【JavaScript源代码】使用ethers.js部署Solidity智能合约的方法.docx

    Web3的设计场景是DApp应该连接到一个本地节点,由这个节点负责保存密钥、签名交易并与以太坊区块链交互。现实并不是这样的,绝大多数用户不会在本地运行一个geth节点。Metamask在浏览器应用中有效地模拟了这种节点...

    Android与Vue的交互的方法示例

    做过 Android 混合开发的,应该都知道 Android 中 Java 代码和 Javascript 代码之间的交互怎么做。 首先回顾一下 Java 和 Javascript 之间的交互。 JavaScript 调用 Java Android 中 WebView 添加供 Html 页面调用的...

    HyperLedger Fabric 2.以太坊公有链合约部署

    HyperLedger Fabric 以太坊公有链合约部署,如需视频讲解可留言联系博主

    基于android的智能语音交互

    语音唤醒后,即可进行自由对话,但每次必须重新唤醒。注册科大讯飞账户后,下载语音唤醒,语义等服务,按txt文档所说导入必要文件并且修改appid,即可实现上述效果。

    web3.php:用于与以太坊区块链和生态系统进行交互的php接口。 本机ABI解析和智能合约交互

    web3.php 一个与以太坊区块链和生态系统进行交互的php接口。安装为开发人员设置最低稳定性"minimum-stability": "dev"然后composer require sc0vu/web3.php dev-master或者您可以在composer.json中添加此行"sc0vu/...

Global site tag (gtag.js) - Google Analytics