javascript - 如何将web3实例从nodejs返回到ui
问题描述
我想返回一个包含提供者对象的 web3 实例。我想将该对象返回给 UI,以便我可以在 UI 中使用该 web3 实例。这有可能实现吗?我尝试将 web3 转换为 JSON.stringify(web3) 但抛出错误无法将圆形对象转换为字符串。
这是我的nodejs代码
const provider = new HDWalletProvider(
'dress steel phrase album average asd dd room exile web eree cause',
'https://rinkeby.infura.io/I7P2ErGiQjuq4jNp41OE',
);
web3 = new Web3(provider);
我想像这样将 web3 实例从节点返回到 UI
app.get('/getWeb3', async (req, res) => {
console.log('web3 instance', web3);
res.json( JSON.stringify(web3)); // this is throwing error.
})
我曾尝试使用第三方库将对象转换为 json,如 warp 库,但仍然面临问题。任何建议都会对我有所帮助。谢谢
解决方案
您不能发送web3
实例,这没有多大意义,因为您可以web3
直接在客户端获取实例。
通常在客户端,您使用Metamask,这将允许您在不运行完整节点的情况下与以太坊网络进行交互。
客户端
if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
} else {
// set the provider you want from Web3.providers
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}
// Interact with your contract
const Contract = web3.eth.contract(ABI);
const contract = Contract.at('address');
contract.someMethod((err, res) => console.log(res));
现在用户将与以太坊网络进行交互,使用它自己的地址和密钥,而不是使用你的私钥,这是你试图做的。
服务器上的web3
实例必须保持私有,并且不暴露给客户端。
与其尝试将实例发送给客户端,不如告诉我们您要对该实例做什么,这是需要解决的实际问题。
推荐阅读
- qt - QTcpSocket如何返回QString
- python - 行到列 Python Pandas 数据框 (pd.melt)
- docker - Pip install 实际上是在一个 docker 容器中(气流)
- javascript - Javascript 中使用对象引用的“闭包”:“私有变量”存储在哪里?
- mysql - 在 MySQL 中计算一个复杂的累积值
- postgresql - 带有“DISTINCT ON”的“CAST”函数不会改变字段的类型
- matplotlib - matplotlib 中的乳胶字体
- ruby - 无法从 nil 确定时区(ArgumentError)
- database - 复制源文件时管理 Excel 源工作簿中的链接
- java - 关于重新排序:尽管使用了 volatile,为什么这段代码会抛出 RuntimeException?