@metamask/eth-sig-util”缓冲区未定义?

问题描述 投票:0回答:2

我正在尝试使用 MetaMask 的公钥进行加密(https://docs.metamask.io/guide/rpc-api.html#unrestricted-methods)。 但是,在页面加载时我收到错误

Buffer is not defined

image

这似乎只发生在我导入

 '@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 上进行了测试,但错误仍然存在。我应该检查什么?

javascript ethereum web3js metamask
2个回答
0
投票

您正在尝试在前端运行

eth-sig-util
eth-sig-util
依赖于名为
Buffer
的 Nodejs 结构。尝试使用 Metamask 的
ethereum
API https://docs.metamask.io/guide/signing-data.html


0
投票

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');

我使用上面的代码来加密和解密数据。 我的也很好用。

© www.soinside.com 2019 - 2024. All rights reserved.