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)?
keccak256
(neuer Alias für sha3
) ist am billigsten.
Quelle: Gelbes Papier
Anhang G erwähnt die Gaskosten von sha3
:
Anhang E enthält die Kosten für die anderen.
sha256
(SHA2-256) kostet:
ripemd
ist noch teurer:
sha3
integrierten Funktion (im Gegensatz zur Assembler-Direktive) derzeit anscheinend einen Vertragsaufruf in Solidity erstellen, der viel teurer ist, als er sein müsste.blah = sha3(blah blah)
und assembly { blah = sha3(blahblahblah) }
?sha3
ist nicht genau keccak256
. Der Quellcode von Ethereum keccak256
bestätigt dies.sha3
. „Die Ethereum-Hashing-Funktion, keccak256, manchmal (fälschlicherweise) sha3
„ github.com/ethereum/eth-hash “ genanntkeccak256(abi.encodePacked(...))
und via zu hashen assembly {c := keccak256(add(encoded, 0x20), 40)}
. Die Montageversion kostete tatsächlich 11 Gas mehr.
Jeffrey W.
AF