【问题标题】:Is it possible to develop chrome extensions with web3.js or Ethers.js?是否可以使用 web3.js 或 Ethers.js 开发 chrome 扩展?
【发布时间】:2021-06-10 01:25:15
【问题描述】:

我想开发一个以太坊钱包 chrome 扩展。

在开发一个简单的原型时,我注意到 node.js 模块不能直接从 chrome 扩展中运行。

但我必须使用 web3.js 或 ethers.js。

总结

有没有办法使用 web3.js 或 ethers.js 开发 Chrome 扩展?

【问题讨论】:

  • 不幸的是,web3.js 的一部分是用 C++ 编写的,并被编译成二进制代码(x86、ARM 等,具体取决于您的机器),这意味着它不能在浏览器中使用,除非您将其重写为 NaCl兼容但 NaCl 已从现代 Chrome 中删除,因此您只能使用旧版本的 Chrome。您应该查看 Metamask 而不是 web3 - 代码是开源的,就像 web3.js
  • @slebetman 谢谢你的回答 :) 在 Metamask 的 package.json 中,web3 和 ethers 都存在。 Metamask 是否构建 Node.js 服务器并使用 socket.io 与前端通信?我想做一个类似的钱包扩展。
  • web3.js 和 ethers.js 无需任何 node.js 模块即可在客户端运行,因此您的假设完全不正确。
  • @lee 你知道如何处理 ethers.js 吗?

标签: node.js ethereum web3


【解决方案1】:

当然,当我们检查 the packages of the MetaMask 时,我们会同时看到 web3ethjs 库,这也是一个扩展:

// ...
    "web3": "^..."
// ...
    "ethjs": "^...",
    "ethjs-contract": "^...",
    "ethjs-ens": "^...",
    "ethjs-query": "^...",
// ...

我们可以做什么,我们可以通过browserify 之类的工具编译它,或者像这样导入缩小的浏览器版本(我测试它与metamask-extension-provider 包* 一起使用):

import Web3 from 'web3/dist/web3.min.js';

// or

const Web3 = require('web3/dist/web3.min.js');

*特定版本的扩展提供程序,请查看其docs

【讨论】: