Ethers.js
如何使用醚 keccak256?
我嘗試像這樣使用 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
.