web3j 4.x以太坊手机钱包开发教程及源码
本教程讲解如何使用Web3j 4.x和Infura提供的以太坊节点开发安卓手机以太坊钱包应用,教程包括项目依赖配置、以太坊节点选择、以太坊钱包地址创建、测试以太币的获取、执行以太币转账交易等内容,并提供完整的参考实现源码下载。
1、项目配置
使用Web3j的第一步是在Android项目中添加Web3j依赖。由于Web3j有一个maven插件,这就很简单了:只需要在你项目的build.gradle文件中添加mavencentral,然后将web3j作为一个依赖项加入build.gradle文件(确保你使用的是android版本)。
repositories { mavenCentral() google() jcenter() } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' implementation 'org.web3j:core:4.1.0-android' }
要系统高效地学习web3j,推荐汇智网的在线互动教程 《web3j以太坊开发详解》, 教程内容涵盖以太坊中的核心概念,例如账户管理、状态与交易、智能合约开发与交互、过滤器 和事件等,同时也详细说明如何使用web3j与以太坊区块链进行交互,是java工程师学习 以太坊应用开发的不二选择。
2、决定要使用的节点类型
钱包应用必须通过一个以太坊节点才能与以太坊区块链通信,我们可以部署自己的节点,也可以使用第三方提供的云端节点,例如Infura的开放节点。我决定使用Infura的原因在于不需要自己同步区块链数据,因为这个同步过程要花不少时间而且很繁琐,因此我希望尽量避免搭建自己的节点。
你可以在Infura注册然后得到一个API Key,就可以像下面这样创建一个Web3j对象接入Rinkeby测试网络了:
// FIXME: Add your own API key here web3 = Web3j.build(new HttpService("https://rinkeby.infura.io/v3/YOURKEY")); try { Web3ClientVersion clientVersion = web3.web3ClientVersion().sendAsync().get(); if(!clientVersion.hasError()){ //Connected } else { //Show Error } } catch (Exception e) { //Show Error }
注意上面代码中的URL ——https://rinkeby.infura.io/v3/YOURKEY
,YOURKEY需要用你的API KEY替换掉,这个url中的rinkeby表示可以使用这个url接入以太坊的rinkeby测试链,容易理解,把rinkeby换成mainnet,就可以接入以太坊的主网了,例如:
https://mainnet.infura.io/v3/YOURKEY
一切正常的话,上面的代码就可以接入以太坊的Rinkeby测试链了!
3、创建钱包
现在让我们创建一个钱包来发送或接收一些测试链的以太币。为此我们需要首先在用户的设备中创建一个钱包文件:
//FIXME: Use your own password here private final String password = "medium"; private String walletPath = getFilesDir().getAbsolutePath(); private File walletDir = new File(walletPath); try{ WalletUtils.generateNewWalletFile(password, walletDir); } catch (Exception e){ //Display an Error }
4、获取地址并载入钱包
很好,现在我们有了一个钱包,现在来获取钱包地址,然后从Rinkeby Faucet为该地址获取一些测试用的以太币:
try { Credentials credentials = WalletUtils.loadCredentials(password, walletDir); Toast.makeText(this, "Your address is " + credentials.getAddress(), Toast.LENGTH_LONG).show(); } catch (Exception e){ //Show Error }
5、发送交易
钱包里现在已经有了一些以太币,让我们再把这些测试币转回去:
try{ Credentials credentials = WalletUtils.loadCredentials(password, walletDir); TransactionReceipt receipt = Transfer.sendFunds(web3,credentials,"0x31B98D14007bDEe637298086988A0bBd31184523",new BigDecimal(1),Convert.Unit.ETHER).sendAsync().get(); Toast.makeText(this, "Transaction complete: " +receipt.getTransactionHash(), Toast.LENGTH_LONG).show(); } catch (Exception e){ //Show Error }
6、结论
在这个教程中,我们创建了一个简单的Android手机应用来收发以太币,你可以在这里下载完整实现代码。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
从事iOS开发4年,我干倒三家公司,4年开发笔记(总结)送给正在迷茫的你!
前言: 本文主要与大家分享我业余时间如何学习多门技术以及开发业余项目的一些心得,分为 初衷、硬技能、软技能、第一生产力、环境、时间几个部分, 业余开发项目的初衷 总体来说,在我的感觉里,国内的环境对于业余开发者来说其实是非常不友好的,不过作为一个开发者,一味抱怨并不会有大的改观,能做的就是不忘初心,多做尝试多做积累。 包括我之前也和一些朋友深入聊过类似的话题,例如“在行”上约我聊相关话题的同学,我其实是鼓励大家勇敢的去做自由职业者或者业余开发者,虽然环境的确不是很友好,但是年轻时多尝试总是没错的,毕竟我们还有资本去寻找更多可能性,而且我相信每个开发者其实内心都是向往利用自己的力量改变人们的生活方式的, 作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:638302184,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。 以下资料需要的可以加群领取。 而我们通常做的事情却总是一个大工程中的螺丝钉,时间长了失却了创新的初衷意味,这时候离一个创造者越来越远,自会觉得内心恐慌,我最初的热...
- 下一篇
谈一谈 iOS 的锁
收录:原文地址 翻看目前关于 iOS 开发锁的文章,大部分都起源于 ibireme 的《不再安全的 OSSpinLock》,我在看文章的时候有一些疑惑。这次主要想解决这些疑问: 锁是什么? 为什么要有锁? 锁的分类问题 为什么 OSSpinLock 不安全? 解决自旋锁不安全问题有几种方式 为什么换用其它的锁,可以解决 OSSpinLock 的问题? 自旋锁和互斥锁的关系是平行对立的吗? 信号量和互斥量的关系 信号量和条件变量的区别 锁是什么 锁 -- 是保证线程安全常见的同步工具。锁是一种非强制的机制,每一个线程在访问数据或者资源前,要先获取(Acquire) 锁,并在访问结束之后释放(Release)锁。如果锁已经被占用,其它试图获取锁的线程会等待,直到锁重新可用。 为什么要有锁? 前面说到了,锁是用来保护线程安全的工具。 可以试想一下,多线程编程时,没有锁的情况 -- 也就是线程不安全。 当多个线程同时对一块内存发生读和写的操作,可能出现意料之外的结果: 程序执行的顺序会被打乱,可能造成提前释放一个变量,计算结果错误等情况。 所以我们需要将线程不安全的代码 “锁” 起来。保证一段...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Hadoop3单机部署,实现最简伪集群
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7安装Docker,走上虚拟化容器引擎之路