使用web3.js连接区块链节点,设置http/websocket的provider

使用web3.js连接区块链节点,设置http/websocket的provider

Tags
开发记录
web3
BUILD
Published
April 20, 2023
Author
liaokun
前端可以借助web3.js或者ether.js来快速进入web3开发。web3 BUILD 系列以web3.js作为工具库来进行web3开发中的各种功能代码示例。
开发的第一步一般是使用工具库提供的方法连接到链上的节点,完成web3实例的创建。进而调用实例提供的各种方法完成对链上数据的查询以及提交交易。
api文档可以参考 https://web3js.readthedocs.io/ ,本文给出具体的应用代码。
1.首先引入工具库
import Web3 from 'web3';
2.关于provider
在web3中有个很重要的概念:provider。provider可以理解成链上的数据读取、交易等服务的提供者,是连接到区块链的节点。之前metamask会往浏览器中注入一个provider对象,但这不是推荐的用法,可以使用专业的节点服务商提供的服务,比如 https://www.ankr.com/rpc/ 提供的RPC节点,常用的区块链都有支持。
3.HttpProvider和WebsocketProvider对比
在web3.js的源码里为provider可以接收
HttpProvider | IpcProvider | WebsocketProvider | AbstractProvider | string | null
五种类型,比较常用的就 HttpProvider 和 WebsocketProvider。两者区别显而易见:连接到节点使用的协议不同,进而带来的性能和功能支持也有差别。最明显的便是WebsocketProvider能支持订阅功能,有时候我们想监听链上的一些事件,HttpProvider只能客户端做轮询,而WebsocketProvider可以接受节点的事件推送,在性能和延迟上都有明显的优势。
4.创建HttpProvider
const httpProvider = new Web3.providers.HttpProvider('RPC地址'); // 当然也可以直接不使用构造方法直接填个RPC地址 const httpProvider = 'RPC地址';
5.创建WebsocketProvider
// websocket的一些配置项,按需填写 const websocketOptions = { timeout: 200, // ms // Useful for credentialed urls, e.g: ws://username:password@localhost:8546 headers: { // authorization: 'Basic username:password', }, // Enable auto reconnection reconnect: { auto: true, delay: 5000, // ms maxAttempts: 20, onTimeout: false, }, }; const websocketProvider = new Web3.providers.WebsocketProvider('websocket RPC地址', websocketOptions));
6.有了provider就可以创建Web3实例了,通过实例提供的各种api就可以完成链上数据查询、交易发起等操作:
const web3Instance = new Web3('上文中创建的provider实例');
现在我们完成了Web3实例的构造,下一篇文章介绍创建智能合约实例并调用智能合约的方法。