Wie verwendet man Ether keccak256?

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?

Antworten (2)

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 BytesLikeTyp.

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 .

Die Installation des maßgeschneiderten @ethersproject/keccak256Pakets ist besser, wenn Sie nur die Funktion verwenden müssen keccak256. Sie vermeiden es, alle Pakete zu installieren, die mit dem Umbrella- ethersPaket geliefert werden.