Ich habe versucht, die keccak256 -Funktion von Ether wie folgt zu verwenden :
import { keccak256 } from "@ethersproject/keccak256";
const signature = keccak256("balanceOf(address)");
Aber das Skript ist mit diesem Fehler fehlgeschlagen:
Fehler: ungültiger Arrayify-Wert (argument="value", value="balanceOf(address)", code=INVALID_ARGUMENT, version=bytes/5.5.0)
Wie kann ich es zum Laufen bringen?
Schauen wir uns die Funktionsdefinition fürkeccak256
an :
export function keccak256(data: BytesLike): string {
return '0x' + sha3.keccak_256(arrayify(data));
}
Die Eingabe ist kein String, sondern ein BytesLike
Typ.
In Anbetracht dessen können Sie das Skript so umschreiben, dass es funktioniert:
import { keccak256 } from "@ethersproject/keccak256";
import { toUtf8Bytes } from "@ethersproject/strings";
const signature = keccak256(toUtf8Bytes("balanceOf(address)"));
Der Trick besteht darin, ein anderes Paket aus dem Ether-Stack ( @ethersproject/strings
) zu importieren, das eine Funktion namens exportiert toUtf8Bytes
, die Ihren String in konvertiert BytesLike
.
Mit ethers.js v5 können Sie Folgendes verwenden:
const { ethers, utils } = require("ethers");
const labelhash = utils.keccak256(utils.toUtf8Bytes("example"))
Dies ist hier dokumentiert .
Paul Razvan Berg
@ethersproject/keccak256
Pakets ist besser, wenn Sie nur die Funktion verwenden müssenkeccak256
. Sie vermeiden es, alle Pakete zu installieren, die mit dem Umbrella-ethers
Paket geliefert werden.