Ethers.js

如何使用醚 keccak256?

  • April 10, 2022

我嘗試像這樣使用 ethers 的keccak256函式:

import { keccak256 } from "@ethersproject/keccak256";

const signature = keccak256("balanceOf(address)");

但是腳本失敗並出現此錯誤:

錯誤:無效的數組化值(argument=“value”,value=“balanceOf(address)",code=INVALID_ARGUMENT,version=bytes/5.5.0)

我怎樣才能讓它工作?

讓我們看一下 的函式定義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)"));

訣竅是從 ethers stack( @ethersproject/strings) 中導入另一個包,該包導出一個名為 的函式toUtf8Bytes,該函式將您的字元串轉換為BytesLike.

引用自:https://ethereum.stackexchange.com/questions/123232