简介
web3-shh 是 web3.js 的子模块,主要用于以太坊 Whisper 协议的实现,提供了以太坊网络上的点对点加密通讯功能。本文将详细介绍如何在前端项目中使用 web3-shh 包。
安装
在项目根目录下使用以下命令安装 web3-shh 包:
npm install web3-shh
使用
在项目中引入 web3 和 web3-shh 库:
const Web3 = require("web3"); const Web3Shh = require("web3-shh");
首先需要创建一个 Web3 实例:
const web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
然后创建一个 Web3Shh 实例:
const shh = new Web3Shh(web3.currentProvider);
现在可以开始使用 shh 实例提供的方法了。
1. 生成密钥对
使用以下方法生成密钥对:
const keyPair = await shh.newKeyPair(); console.log("公钥:", keyPair.publicKey); console.log("私钥:", keyPair.privateKey);
2. 发送消息
使用以下方法发送消息:
const msg = { ttl: 10, payload: web3.utils.asciiToHex("hello"), powTarget: 2.01, powTime: 2, }; const receipt = await shh.post(msg); console.log("消息 hash:", receipt);
其中,msg 对象包含的属性有:
ttl
:消息存活时间,单位为秒。payload
:消息数据,需要用 web3.utils.asciiToHex 转换为十六进制编码。powTarget
:工作量证明目标值,数值越大,难度越大,范围为 0 ~ 2 的小数。powTime
:工作量证明时间,单位为秒。
post 方法返回一个 Promise,resolve 时返回消息的 hash 值。
3. 订阅消息
使用以下方法订阅消息:
const filter = { topics: [web3.utils.asciiToHex("hello")], }; shh.subscribe("messages", filter, function(error, result) { if (!error) { console.log("收到消息:", web3.utils.hexToAscii(result.payload)); } });
其中,filter 对象包含的属性有:
topics
:消息主题,需要用 web3.utils.asciiToHex 转换为十六进制编码。
subscribe 方法返回一个 Subscription 对象,可以通过 unsubscribe 方法取消订阅。
总结
本文介绍了如何在前端项目中使用 web3-shh 包实现以太坊 Whisper 协议的点对点加密通讯功能。我们了解了如何生成密钥对、发送消息、订阅消息,并提供了示例代码。希望本文能够为开发者提供一些帮助和指导。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/57626