美文网首页可能要学习下
Android使用Infura、Web3j接入以太坊区块链

Android使用Infura、Web3j接入以太坊区块链

作者: wulijie | 来源:发表于2018-04-09 17:52 被阅读558次

转载自Android笔记系列文章

接入以太坊区块链的方式

1、自己搭建节点,终端去访问搭建好的节点获取数据
2、使用免费的Infura,省去创建节点的烦恼

Infura

Infura 提供免费公开的Ethereum(以太坊)主网和测试网络节点;申请只要输入一点基本资料和Email就可以在你输入的Email邮箱里收到Infura发给你的邮件,邮件内容主要是你可以使用的主网节点及测试网络节点的地址。
ps:Infura 需要翻墙才能注册过去,有个验证码需要你翻墙才能显示出来,可以用免费的蓝灯翻墙。
邮件内容截图如下

image

web3j

1、web3j介绍
web3j是一个轻量级,Reactive(响应式),类型安全的Java库,用于与Ethereum网络上的客户端(节点)集 成,这允许您使用Ethereum块链,而不需要为平台编写自己的集成代码的额外开销。

2、web3j的提供的功能

  • 通过HTTP和IPC 完成Ethereum的JSON-RPC客户端API的实现
  • Ethereum钱包支持
  • 使用过滤器的函数式编程功能的API
  • 自动生成Java智能合约包装器,以创建、部署、处理和调用来自本地Java代码的智能合约
  • 支持Parity的 个人和Geth的 个人客户端API
  • 支持Infura,所以您不必自己运行一个Ethereum客户端
  • 一套综合化、一体的测试示范和可运行的脚步
  • 支持命令行工具
  • 兼容Android
  • 支持JP Morgan’s Quorum via web3j-quorum

3、web3j的集成
最新的集成方式可以参考web3j的说明文档

implementation 'org.web3j:core:3.3.1'//切记需要java8 
implementation 'org.web3j:core:3.3.1-android'

4、web3j的使用
web3j的api说明文档挺简陋的,看着头晕,建议配合web3的文档对照着看,应该会提高效率;
另外我还找到了他人翻译的web3的中文文档,当做参考。

//获取节点运行geth客户端的版本号
String url = "https://mainnet.infura.io/your api-key";
Web3j web3 = Web3j.build(new HttpService(url));
Web3ClientVersion web3ClientVersion = web3.web3ClientVersion().sendAsync().get();
String clientVersion = web3ClientVersion.getWeb3ClientVersion();

//只读属性,返回当前节点持有的帐户列表 这个方法说明就是我从web3的中文文档里找到的
String url = "https://mainnet.infura.io/your api-key";
Web3j web3 = Web3j.build(new HttpService(url));
//点进ethAccounts()方法的源码就可以知道返回的是什么对象了
EthAccounts ethAccounts = web3.ethAccounts().sendAsync().get();
List<String> accountList = ethAccounts.getAccounts();//返回当前节点持有的账户列表

这样简单的接入就完成了。

JSON-RPC API 的接入方式

因为Ethereum(以太坊)提供了JSON-RPC API 可以使用,这样Android还可以使用JSONRPCHttpClient调用API 完成接入。
下载 jar包 ,导入AndroidStudio的libs下,引入依赖。

// 获取节点运行geth客户端的版本号 
final String url = "https://mainnet.infura.io/your api-key";
//对着 JSON-RPC API 的参数说明拼接参数
final Map<String, Object> map = new HashMap();
List paramsList = new ArrayList();
map.put("json-rpc", "2.0");
map.put("method", "web3_clientVersion");
map.put("params", paramsList);
map.put("id", "67");
//需要异步处理 当然你可以配合handler来更新页面
new Thread(new Runnable() {
            @Override
            public void run() {
             JSONRPCHttpClient client = new JSONRPCHttpClient(url);
            String clientVersion = client.callString("web3_clientVersion", map);
            }
}).start();

这种方式繁琐复杂,没有web3j好,但是好在灵活自由。

相关文章

网友评论

  • 肖义熙:在调用这段代码的时候OOM了,请问是怎么回事呢?
    Wallet.createStandard(password, ecKeyPair);
    这个是生成钱包地址的吧 ?以太坊生成地址的时候必须有一个密码么?求解答~
    肖义熙:@wulijie 这个可以理解为生成这个钱包地址的时候公认的协议中要求密码吧 ?
    wulijie:@肖义熙 密码肯定是要有的,但是OOM的问题 可能是库的问题,需要你断点深入到库中去查看问题所在,geth命令目前没有发现创建账户有什么问题。
  • 编程狂魔:推荐一个适合区块链开发新手入门DApp实战开发以太坊教程http://xc.hubwiz.com/course/5a952991adb3847553d205d1?affid=612jianshu
  • IT人故事会:经常看别人的分享.感谢别人的分享,感谢!关注了
    wulijie:@IT人故事会 :v:

本文标题:Android使用Infura、Web3j接入以太坊区块链

本文链接:https://www.haomeiwen.com/subject/ahoihftx.html