前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Web3j 4.x手机钱包开发教程【含Java源码】

Web3j 4.x手机钱包开发教程【含Java源码】

作者头像
用户1408045
发布2019-09-12 14:41:56
1.2K0
发布2019-09-12 14:41:56
举报

本教程讲解如何使用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
}

原文链接:Web3j 4.x Android以太坊钱包实现教程 — 汇智网

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、项目配置
  • 2、决定要使用的节点类型
  • 3、创建钱包
  • 4、获取地址并载入钱包
  • 5、发送交易
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档