Ethereum WebSocket接口实践

2024-04-17 15:52

本文主要是介绍Ethereum WebSocket接口实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前在学习Ethereum的infura API时候看到有WebSocket,但是翻了很久都没找到很完整的接口文档和实践文档。当时比较迷,没太在意,以为是区块链接口的性能还用不上WebSocket,HTTP完全支持没问题。

后面在更深入学习了jsonrpc协议之后,我突然悟道了可能不需要WebSocket的接口文档也能发起请求。

经过一些失败的尝试,基本摸清楚了这里面的弯弯道道。其实就是把Web3j源码翻看一下,基本也能猜个八九不离十。下面举个最简单的例子。

Web3j源码

我们找了获取网络版本的API:net_version 。下面是尝试找到的Web3j的源码内容:

public Request<?, NetVersion> netVersion() {return new Request("net_version", Collections.emptyList(), this.web3jService, NetVersion.class);
}

这里我们看到 org.web3j.protocol.core.Request 构造方法,下面是内容:

public Request(String method, List<S> params, Web3jService web3jService, Class<T> type) {  this.method = method;  this.params = params;  this.id = nextId.getAndIncrement();  this.web3jService = web3jService;  this.responseType = type;  
}

到这里,我们就基本了解了如何构造请求的初步逻辑,下面我们看一下WebSocket的如何发送请求信息的:

client.send("{\"jsonrpc\":\"2.0\",\"method\":\"net_version\",\"params\":[],\"id\":1333333}")

是不是有点熟悉,刚好跟 org.web3j.protocol.core.Request 属性对应。到这里相比大家是不是都差不多明白了。

再补充一个信息,就是 org.web3j.protocol.core.Request 的属性定义部分代码。

private static AtomicLong nextId = new AtomicLong(0L);  
private String jsonrpc = "2.0";  
private String method;  
private List<S> params;  
private long id;  
private Web3jService web3jService;  
private Class<T> responseType;

这里用到了之前分享过的 java.util.concurrent.atomic.AtomicLong ,用来作为全局的唯一ID非常合适。

WebSocket API实践

这里我用到了我自己封装的WebSocket的客户端 com.funtester.socket.WebSocketFunClient ,用的是 goerli 测试网络的WebSocket地址。话不多说,上代码:

static final String host = "wss://goerli.infura.io/ws/v3/apikey"  static void main(String[] args) {  def client = new WebSocketFunClient(host, "infura ethereum")  client.connect()  client.send("{\"jsonrpc\":\"2.0\",\"method\":\"eth_accounts\",\"params\":[],\"id\":1}")  client.send("{\"jsonrpc\":\"2.0\",\"method\":\"net_version\",\"params\":[],\"id\":1333333}")  }

控制台输出:

22:03:41.023 main infura ethereum 开始连接...
22:03:42.447 WebSocketConnectReadThread-20 infura ethereum 正在建立socket连接...
22:03:42.447 WebSocketConnectReadThread-20 握手信息key: Connection ,value: upgrade
22:03:42.447 WebSocketConnectReadThread-20 握手信息key: Date ,value: Tue, 07 Nov 2023 14:03:42 GMT
22:03:42.447 WebSocketConnectReadThread-20 握手信息key: Sec-WebSocket-Accept ,value: dia6CeCsPpnqTtBXZsLc58pxWmk=
22:03:42.448 WebSocketConnectReadThread-20 握手信息key: Upgrade ,value: websocket
22:03:44.028 main infura ethereum 连接成功!
22:03:44.299 WebSocketConnectReadThread-20 infura ethereum收到: {"jsonrpc":"2.0","id":1,"result":[]}
22:03:44.544 WebSocketConnectReadThread-20 infura ethereum收到: {"jsonrpc":"2.0","id":1333333,"result":"5"}

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 455787643,里面有各种测试开发资料和技术可以一起交流哦。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

这篇关于Ethereum WebSocket接口实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/912231

相关文章

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

springboot依靠security实现digest认证的实践

《springboot依靠security实现digest认证的实践》HTTP摘要认证通过加密参数(如nonce、response)验证身份,避免明文传输,但存在密码存储风险,相比基本认证更安全,却因... 目录概述参数Demopom.XML依赖Digest1Application.JavaMyPasswo

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

Java 结构化并发Structured Concurrency实践举例

《Java结构化并发StructuredConcurrency实践举例》Java21结构化并发通过作用域和任务句柄统一管理并发生命周期,解决线程泄漏与任务追踪问题,提升代码安全性和可观测性,其核心... 目录一、结构化并发的核心概念与设计目标二、结构化并发的核心组件(一)作用域(Scopes)(二)任务句柄

Java中的Schema校验技术与实践示例详解

《Java中的Schema校验技术与实践示例详解》本主题详细介绍了在Java环境下进行XMLSchema和JSONSchema校验的方法,包括使用JAXP、JAXB以及专门的JSON校验库等技术,本文... 目录1. XML和jsON的Schema校验概念1.1 XML和JSON校验的必要性1.2 Sche

SpringBoot集成WebService(wsdl)实践

《SpringBoot集成WebService(wsdl)实践》文章介绍了SpringBoot项目中通过缓存IWebService接口实现类的泛型入参类型,减少反射调用提升性能的实现方案,包含依赖配置... 目录pom.XML创建入口ApplicationContextUtils.JavaJacksonUt

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

Java 中的 equals 和 hashCode 方法关系与正确重写实践案例

《Java中的equals和hashCode方法关系与正确重写实践案例》在Java中,equals和hashCode方法是Object类的核心方法,广泛用于对象比较和哈希集合(如HashMa... 目录一、背景与需求分析1.1 equals 和 hashCode 的背景1.2 需求分析1.3 技术挑战1.4