Was ist die billigste Hash-Funktion, die in Solidity verfügbar ist?

AFAIK gibt es 3 Hash-Funktionen zur Auswahl in solidity ( sha3, sha256, und ripemd). sha3 ist nativ, während die anderen vorkompilierte Verträge verwenden.

Welche davon ist am billigsten (in Bezug auf Gas)?

Ihre Fragen sind etwas zweideutig. Sie könnten Ihre Frage verbessern, indem Sie angeben, was Sie mit "billig" meinen. Ich nehme an, Sie meinen "Welcher Hash-Algorithmus hat die niedrigsten Gaskosten?" (Billig kann auch in Bezug auf die Rechenleistung bedeuten).
@JeffreyW. erledigt

Antworten (1)

keccak256(neuer Alias ​​für sha3) ist am billigsten.

Quelle: Gelbes Papier

Anhang G erwähnt die Gaskosten von sha3:

  • 30 Gas + 6 Gas für jedes Wort (aufgerundet) für Eingabedaten in eine SHA3-Keccak-256-Operation.

Anhang E enthält die Kosten für die anderen.

sha256(SHA2-256) kostet:

  • 60 gas + 12 gas für jedes Wort (aufgerundet) für Eingabedaten zu einer SHA2-256-Operation.

ripemdist noch teurer:

  • 600 gas + 120 gas für jedes Wort (aufgerundet) für Eingabedaten in eine RIPEMD-160-Operation.
Es ist erwähnenswert, dass Aufrufe der sha3integrierten Funktion (im Gegensatz zur Assembler-Direktive) derzeit anscheinend einen Vertragsaufruf in Solidity erstellen, der viel teurer ist, als er sein müsste.
@NickJohnson Klingt nach einer guten Frage, wenn es sich um einen Vertrag handelt. (Ich habe meine Antwort auf das Gelbe Papier beibehalten, da sich Werte in einer empirischen, implementierungsabhängigen Antwort im Laufe der Zeit ändern können.)
@NickJohnson woher wissen wir, wie wir es nennen? ist es der unterschied zwischen blah = sha3(blah blah)und assembly { blah = sha3(blahblahblah) }?
@bekah Das ist richtig; aber wie es funktioniert, hat sich möglicherweise geändert, seit ich diesen Kommentar geschrieben habe.
Kann jemand bestätigen, ob das immer noch so ist?
sha3ist nicht genau keccak256. Der Quellcode von Ethereum keccak256bestätigt dies.
@TharinduMadushanka Meinst du ethereum.stackexchange.com/questions/550/… ?
Ja. Nur um anzumerken, dass es nicht dasselbe ist wie sha3. „Die Ethereum-Hashing-Funktion, keccak256, manchmal (fälschlicherweise) sha3github.com/ethereum/eth-hash “ genannt
@NickJohnson Dies scheint nicht mehr der Fall zu sein. Ich habe versucht, etwas via keccak256(abi.encodePacked(...))und via zu hashen assembly {c := keccak256(add(encoded, 0x20), 40)}. Die Montageversion kostete tatsächlich 11 Gas mehr.