zoukankan      html  css  js  c++  java
  • 接入以太坊

    以太坊块链

    1、自己搭建节点,终端去访问搭建好的节点获取数据

    2、使用免费的Infura,省去创建节点的烦恼

    Infura

    Infura 提供免费公开的Ethereum(以太坊)主网和测试网络节点;

    ps:Infura 需要翻才能注册过去。

    接入方式

    1、web3j 

    2、JSON-RPC

    Web3j接入方式

     web3.js是以太坊提供的一个Javascript库,它封装了以太坊的JSON RPC API,提供了一系列与区块链交互的Javascript对象和函数,包括查看网络状态,查看本地账户、查看交易和区块、发送交易、编译/部署智能合约、调用智能合约等,其中最重要的就是与智能合约交互的API。

    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的说明文档

    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();//返回当前节点持有的账户列表

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

    https://web3j.readthedocs.io/en/latest/infura.html

    JSON-RPC API 的接入方式

    因为Ethereum(以太坊)提供了JSON-RPC API 可以访问。

    Http是以太坊各种客户端都支持的方式之一,也是终端开发最熟悉的。

    1、Http

    //查阅API 发现需要POST的形式 参数以json的形式 请求
    //这里我测试使用的是xutils3 以请求版本号为例
    String json = "{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}";
    RequestParams params = new RequestParams("https://mainnet.infura.io/your api-key");
    params.setAsJsonContent(true);
    params.setBodyContent(json);
    x.http().post(params, new Callback.CommonCallback<String>() {
                @Override
                public void onSuccess(String result) {
                    Log.e("wlj", "result" + result);
                }
    ​
                @Override
                public void onError(Throwable ex, boolean isOnCallback) {
                    Log.e("wlj", ex.toString());
                }
    ​
                @Override
                public void onCancelled(CancelledException cex) {
    ​
                }
    ​
                @Override
                public void onFinished() {
    ​
                }
            });

    2、JSONRPC 2.0的方式

    json-rpc是基于json的跨语言远程调用协议。比xml-rpc、webservice等基于文本的协议数据传输格小;相对hessian、java-rpc等二进制协议便于调试、实现、扩展,是很优秀的一种远程调用协议。

    JSON-RPC协议描写叙述

    json-rpc协议很easy,发起远程调用时向服务端数据传输格式例如以下:

    {

    "jsonrpc": "2.0", "method": "方法名", "params": [“参数数组”], "id":  方法ID}

    參数说明:

    method: 调用的方法名

    params: 方法传入的參数。若无參数则传入 []

    id : 调用标识符。用于标示一次远程调用过程

    server其收到调用请求,处理方法调用,将方法效用结果效应给调用方;

    返回数据格式:

     {  
    "jsonrpc""2.0", 
        "result":          "Hello JSON-RPC",         
        "error":                null,       
          "id":                     方法ID
     }                        

    參数说明:

    result: 方法返回值。若无返回值。则返回null。

    若调用错误,返回null。

    error :调用时错误,无错误返回null。

    id : 调用标识符,与调用方传入的标识符一致。

    以上就是json-rpc协议规范,很easy,小巧。便于各种语言实现。

  • 相关阅读:
    H3BPM子表的复制
    vue规格新增一对多的例子
    vue自制switch滑块
    table垂直居中
    css清楚浮动的class
    网页之间的参数传递
    调用get_str_time(时间), 就能把毫秒的时间转换成格式化的 ,转化时间戳的方法
    css实现照片上传的加号框
    递归函数获得n个不重复的随机数
    随机生成n个不重复的数,范围是2-32,并让其在新页面打开
  • 原文地址:https://www.cnblogs.com/DaBing0806/p/9479839.html
Copyright © 2011-2022 走看看