我正在尝试使用 MetaMask 的公钥进行加密(https://docs.metamask.io/guide/rpc-api.html#unrestricted-methods)。 但是,在页面加载时我收到错误
Buffer is not defined
:
这似乎只发生在我导入
'@metamask/eth-sig-util'
脚本并尝试加密数据时:
import ethUtil from 'ethereumjs-util'
import sigUtil from '@metamask/eth-sig-util'
const encryptedData = ethUtil.bufferToHex(
Buffer.from(
JSON.stringify(
sigUtil.encrypt({
publicKey: publicKey,
data: 'hello world data',
version: 'x25519-xsalsa20-poly1305',
})
),
'utf8'
)
)
我尝试添加
import { Buffer } from 'buffer/'
,但这似乎没有帮助。
如果我省略
import sigUtil from '@metamask/eth-sig-util'
或
const encryptedData = ethUtil.bufferToHex(
Buffer.from(
JSON.stringify(
sigUtil.encrypt({
publicKey: publicKey,
data: 'hello world data',
version: 'x25519-xsalsa20-poly1305',
})
),
'utf8'
)
)
错误消失。我也尝试切换到使用
[email protected]
而不是较新的 @metamask/eth-sig-util
,但错误仍然存在。
由于我已经尝试了上述所有方法,包括使用不同的软件包版本,我开始怀疑这是否不是
@metamask/eth-sig-util
库中的错误。是什么导致了这个问题?我正在使用 Vite 构建我的项目,并且在 Chrome 和 FireFox 上进行了测试,但错误仍然存在。我应该检查什么?
您正在尝试在前端运行
eth-sig-util
。 eth-sig-util
依赖于名为 Buffer
的 Nodejs 结构。尝试使用 Metamask 的 ethereum
API https://docs.metamask.io/guide/signing-data.html
eth-sig-util 是一个支持 Nodejs 的包。
从“@metamask/eth-sig-util”导入 sigUtil; const 加密数据 = sigUtil. 加密({ 公钥:加密的公钥, 数据:“测试”, 版本:'x25519-xsalsa20-poly1305', });
const buf = Buffer.from(JSON.stringify(encryptedData), 'utf8');
const hexData = '0x' + buf.toString('hex');
我使用上面的代码来加密和解密数据。 我的也很好用。