web3.eth.subscribe web3 版本 1.0.0-beta.27 未实现
web3.eth.subscribe not implemented for web3 version 1.0.0-beta.27
我使用的是 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
从某种意义上说,这并不奇怪,因为当我在 node.js
控制台上执行 web3.eth.subscribe
时,我得到:
{ [Function] call: undefined }
尽管 web3-1.0.0
的文档声明可以使用该函数:https://web3js.readthedocs.io/en/1.0/web3-eth-subscribe.html.
那么这只是文档与实际实施不同步的问题吗?我是不是用错了?
如果没有实现,那么监听链上变化的最佳方式是什么?例如,如果我想要实时更新用户的账户余额?除了每 n
秒的一小部分 ping 链的函数的天真实现之外。
如错误所示,pub/sub 无法通过 HTTP 使用。但是,您可以在 WS 上使用它。因此,您引用的文档并非 100% 错误,它只是省略了代码的提供程序部分。
尝试使用网络套接字连接启动您的节点(geth --ws --wsport 8545 ...
,假设您使用的是 geth
),然后更改为 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 条评论discussion ticket。
使用附加的 JS 控制台打开它的更好方法
您可以使用 > geth attach 'ipc path' 附加(即在我的例子中是 /home/dev/.ethereum/geth.ipc)
之后您将连接到 运行 geth 节点并使用管理 API.. 现在您可以使用
admin.startWS("localhost", 'port number')
当你想关闭连接时,你可以使用下面的命令
admin.stopWS()
问候
开发
我使用的是 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
从某种意义上说,这并不奇怪,因为当我在 node.js
控制台上执行 web3.eth.subscribe
时,我得到:
{ [Function] call: undefined }
尽管 web3-1.0.0
的文档声明可以使用该函数:https://web3js.readthedocs.io/en/1.0/web3-eth-subscribe.html.
那么这只是文档与实际实施不同步的问题吗?我是不是用错了?
如果没有实现,那么监听链上变化的最佳方式是什么?例如,如果我想要实时更新用户的账户余额?除了每
n
秒的一小部分 ping 链的函数的天真实现之外。
如错误所示,pub/sub 无法通过 HTTP 使用。但是,您可以在 WS 上使用它。因此,您引用的文档并非 100% 错误,它只是省略了代码的提供程序部分。
尝试使用网络套接字连接启动您的节点(geth --ws --wsport 8545 ...
,假设您使用的是 geth
),然后更改为 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 条评论discussion ticket。
使用附加的 JS 控制台打开它的更好方法
您可以使用 > geth attach 'ipc path' 附加(即在我的例子中是 /home/dev/.ethereum/geth.ipc)
之后您将连接到 运行 geth 节点并使用管理 API.. 现在您可以使用
admin.startWS("localhost", 'port number')
当你想关闭连接时,你可以使用下面的命令
admin.stopWS()
问候 开发