Android使用Infura、Web3j接入以太坊区块链
2018-04-09 本文已影响558人
wulijie
接入以太坊区块链的方式
1、自己搭建节点,终端去访问搭建好的节点获取数据
2、使用免费的Infura,省去创建节点的烦恼
Infura
Infura 提供免费公开的Ethereum(以太坊)主网和测试网络节点;申请只要输入一点基本资料和Email就可以在你输入的Email邮箱里收到Infura发给你的邮件,邮件内容主要是你可以使用的主网节点及测试网络节点的地址。
ps:Infura 需要翻墙才能注册过去,有个验证码需要你翻墙才能显示出来,可以用免费的蓝灯翻墙。
邮件内容截图如下
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好,但是好在灵活自由。