我试图像这样使用醚的keccak256函数:
import { keccak256 } from "@ethersproject/keccak256";
const signature = keccak256("balanceOf(address)");但是脚本失败了,出现了以下错误:
错误:无效的arrayify值(argument=" value ",value="balanceOf(address)",code=INVALID_ARGUMENT,version=字节/5.5.0)
我怎么才能让它起作用?
发布于 2022-03-06 19:23:23
让我们看看函数定义keccak256:
export function keccak256(data: BytesLike): string {
return '0x' + sha3.keccak_256(arrayify(data));
}输入不是字符串,而是BytesLike类型。
考虑到这一点,下面是如何重写脚本以使其工作:
import { keccak256 } from "@ethersproject/keccak256";
import { toUtf8Bytes } from "@ethersproject/strings";
const signature = keccak256(toUtf8Bytes("balanceOf(address)"));诀窍是从醚堆栈(@ethersproject/strings)导入另一个包,该包导出一个名为toUtf8Bytes的函数,该函数将字符串转换为BytesLike。
发布于 2022-04-10 15:48:12
对于ethers.js v5,您可以使用:
const { ethers, utils } = require("ethers");
const labelhash = utils.keccak256(utils.toUtf8Bytes("example"))这是记录在案的这里。
https://ethereum.stackexchange.com/questions/123232
复制相似问题