作者:小甜蜜陈诗蓉_614 | 来源:互联网 | 2023-01-02 10:33
我在web3版本上1.0.0-beta.27
运行私有以太坊区块链用于测试目的.区块链是挖掘并且有两个用户,现在我想要subscribe
区块链中的事件并执行一些操作.代码如下:
var Web3 = require("web3");
var ether_port = 'http://localhost:8545'
var web3 = new Web3(new Web3.providers.HttpProvider(ether_port));
web3.eth.subscribe("pendingTransactions"
, function(err, result){
if (err){ console.log(err) }
else { console.log("result: ", result) }
});
我有类似的东西:
Error: The current provider doesn't support subscriptions: HttpProvider
at Subscription.subscribe
从某种意义上说,当我web3.eth.subscribe
在node.js
控制台上进行操作时,我得到:
{ [Function] call: undefined }
即使web3-1.0.0
可以使用函数状态的文档:https://web3js.readthedocs.io/en/1.0/web3-eth-subscribe.html.
那么这只是文档与实际实现不同步的问题吗?我用错了吗?
如果没有实现,那么收听链中变化的最佳方式是什么?例如,如果我想要实时更新用户的帐户余额?这是除了一个函数的天真实现,该函数每隔n
几分之一就会对链进行一次调整.
Adam Kipnis..
6
正如错误所示,pub/sub不能通过HTTP获得.但是,您可以通过WS使用它.因此,您引用的文档不是100%错误,它只是省略了代码的提供程序部分.
尝试使用Web套接字连接启动节点(geth --ws --wsport 8545 ...
假设您正在使用geth
),并更改为a WebsocketProvider
.
var Web3 = require("web3");
var ether_port = 'ws://localhost:8545'
var web3 = new Web3(new Web3.providers.WebsocketProvider(ether_port));
web3.eth.subscribe("pendingTransactions"
, function(err, result){
if (err){ console.log(err) }
else { console.log("result: ", result) }
});
请参阅此讨论票的第4条评论.
1> Adam Kipnis..:
正如错误所示,pub/sub不能通过HTTP获得.但是,您可以通过WS使用它.因此,您引用的文档不是100%错误,它只是省略了代码的提供程序部分.
尝试使用Web套接字连接启动节点(geth --ws --wsport 8545 ...
假设您正在使用geth
),并更改为a WebsocketProvider
.
var Web3 = require("web3");
var ether_port = 'ws://localhost:8545'
var web3 = new Web3(new Web3.providers.WebsocketProvider(ether_port));
web3.eth.subscribe("pendingTransactions"
, function(err, result){
if (err){ console.log(err) }
else { console.log("result: ", result) }
});
请参阅此讨论票的第4条评论.