`

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

分享到:
评论

相关推荐

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

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

    以太坊java版本demo

    然后,你可以通过示例代码来理解如何初始化Web3j客户端,如何连接到以太坊网络,如何与智能合约交互。在测试Demo时,可以使用测试网(如Rinkeby或Ropsten)进行,以避免在主网上花费真实的以太币。 总结起来,以太...

    安卓webview与js交互demo

    本项目“安卓webview与js交互demo”着重展示了如何在WebView中实现Android应用与JavaScript的交互,同时包含了区块链技术的应用,特别是以太坊智能合约的调用,以及一个类似微信的App首页底部导航框架。 1. Android...

    web3j开发详解-以太坊.zip

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

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

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

    web3j-4.4.0 (1).zip

    它旨在简化区块链开发过程,提供了完整的功能集,包括智能合约的编译、部署、事件监听以及与以太坊网络的交互。 在"web3j-4.4.0.zip"这个压缩包中,包含了Web3j库的4.4.0版本。这个版本可能包括了以下关键组件和...

    KEthereum:以太坊的Kotlin库

    1. 智能合约交互:KEthereum 提供了与以太坊智能合约交互的API,使得开发者可以轻松地调用合约函数、部署新的合约,并处理合约事件。 2. 钱包管理:库支持创建和管理以太坊钱包,包括生成私钥、地址和交易签名。 3. ...

    WEB3J-JAVA-ETH.zip

    【标题】"WEB3J-JAVA-ETH.zip"是一个与以太坊开发相关的压缩包,主要涉及使用Java语言和Web3j库进行智能合约交互。Web3j是一个高度模块化、反应式、类型安全的Java和Android库,用于构建、部署和管理基于以太坊的去...

    mileage-verification:通过以太坊区块链验证二手车的里程历史

    里程验证-通过以太坊区块链验证二手车的里程历史防篡改应用程序,用于在以太坊区块链上跟踪里程数据。 为了可视化跟踪的里程数据的有效性,... 该应用程序与部署在以太坊区块链上的智能合约进行交互。 miles_verificat

    web3j最新版本

    Web3j提供了全面的API,支持与以太坊节点进行通信,包括但不限于:发送交易、调用智能合约方法、获取区块信息、查询账户余额、监听事件等。这些API通过HTTP-RPC、WebSocket或IPC协议与以太坊节点接口进行交互。 3....

    web3j-4.2.0 GitHub下载

    综上所述,web3j-4.2.0作为一个强大的Java和Android以太坊开发库,它集成了众多功能,旨在简化区块链应用的开发过程,提高开发效率,并保证应用的稳定性和安全性。无论是新手还是经验丰富的开发者,都可以从中受益。

    Nethereum:以太坊.Net跨平台集成库

    Nethereum是用于Ethereum的.Net集成库,可简化与以太坊节点(如Geth, 或的访问和智能合约的交互。 Nethereum是针对netstandard 1.1,netstandard 2.0,netcore 2.1,netcore 3.1,net451以及作为便携式库开发的,...

    smart-degree-dapp-android

    android应用程序与智能学位合同进行交互 参见 先决条件 已安装Android SDK 运行Android测试应用程序 这个android应用程序调用以太坊智能合约来验证学位的哈希值 web3j truffle generate [LOCATION]/smart-degree/...

    ETHUtil.zip

    它提供了与以太坊节点交互的API,包括交易、智能合约部署等。`bitcoinj-core`则是一个用于比特币和兼容系统(如以太坊)的Java库,它提供了加密和钱包管理功能。 综上所述,"ETHUtil.zip"包含的工具类可以方便...

    react-native-geth:React Native的以太坊轻客户端实现

    与智能合约进行交互,进行付款,... 什么是区块链? 区块链最初是区块链,是不断增长的记录列表,称为记录,这些记录通过密码进行链接和保护。 每个块通常都包含一个哈希指针,作为到前一个块,时间戳和事务数据的...

    示例:示例代码支持文章

    在IT行业中,尤其是在区块链开发领域,`web3j`是一个重要的工具库,它为开发者提供了与以太坊(Ethereum)智能合约交互的Java和Android SDK。本篇文章将深入探讨`web3j`库的使用,以及如何通过示例代码来理解其核心...

    web3j-struct-args

    【标题】"web3j-struct-args" 是一个与智能合约交互相关的项目,主要针对以太坊(Ethereum)平台,利用Java语言实现。Web3j是一个高度模块化、反应式、类型安全的Java和Android库,用于构建、部署和管理基于以太坊的...

    web3jApps

    【web3jApps】是一个基于Java和Android的Web3库,它为开发人员提供了一整套工具,用于构建与以太坊区块链交互的应用程序。这个项目的核心是web3j库,一个高度模块化、反应式、类型安全的库,旨在简化智能合约的部署...

    web3j-javamag:支持Java Magazine文章的源代码-java source code

    Web3j是一个高度模块化、反应式、类型安全的Java和Android库,用于构建、部署和交互以太坊智能合约以及DApps(去中心化应用)。这个项目主要目标是为Java和Android开发人员提供一个方便的接口,让他们能够利用web3....

    计算机专业毕业设计题目

    4. **区块链技术与智能合约**: - 区块链基础知识:理解分布式账本、加密算法、共识机制(如PoW、PoS)。 - 智能合约:学习Solidity或其他区块链编程语言,编写和部署智能合约。 - 以太坊/Ethereum:探索以太坊...

Global site tag (gtag.js) - Google Analytics