可能要学习下

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

2018-04-09  本文已影响558人  wulijie

转载自Android笔记系列文章

接入以太坊区块链的方式

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

Infura

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

image

web3j

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

2、web3j的提供的功能

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好,但是好在灵活自由。

上一篇下一篇

猜你喜欢

热点阅读