Какая самая дешевая хэш-функция доступна в Solidity?

Насколько я знаю, есть 3 хеш-функции на выбор в солидности ( sha3, sha256и ripemd). sha3 является родным, в то время как другие используют предварительно скомпилированные контракты.

Какой из них самый дешевый (с точки зрения газа)?

Ваши вопросы немного двусмысленны. Вы можете улучшить свой вопрос, указав, что вы имеете в виду под «дешевым». Я предполагаю, что вы имеете в виду «какой алгоритм хеширования имеет самую низкую стоимость газа?» (Дешевый также может означать с точки зрения вычислительной мощности).
@ДжеффриВ. Выполнено

Ответы (1)

keccak256(новый псевдоним для sha3) самый дешевый.

Источник: Желтая бумага

В Приложении G указана стоимость газа sha3:

  • 30 газа + 6 газа для каждого слова (с округлением) для входных данных для операции SHA3 Keccak-256.

В Приложении E указана стоимость остальных.

sha256(SHA2-256) стоит:

  • 60 газа + 12 газа для каждого слова (с округлением вверх) для входных данных для операции SHA2-256.

ripemdеще дороже:

  • 600 газа + 120 газа за каждое слово (с округлением вверх) для входных данных в операцию RIPEMD-160.
Стоит отметить, что вызовы sha3встроенной функции (в отличие от директивы сборки) в настоящее время создают вызов контракта в Solidity, что намного дороже, чем должно быть.
@NickJohnson Звучит как хороший вопрос, чтобы задать, ссылается ли он на контракт. (Я сохранил свой ответ на Желтую книгу, поскольку значения в эмпирическом ответе, зависящем от реализации, могут меняться со временем.)
@NickJohnson, откуда мы знаем, как мы это называем? это разница между blah = sha3(blah blah)и assembly { blah = sha3(blahblahblah) }?
@bekah Верно; но то, как это работает, вполне могло измениться с тех пор, как я написал этот комментарий.
Может ли кто-нибудь подтвердить, так ли это до сих пор?
sha3это не точно keccak256. Исходный код Ethereum keccak256подтверждает это.
@ TharinduMadushanka Вы имеете в виду ethereum.stackexchange.com/questions/550/… ?
Да. Просто чтобы отметить, что это не то же самое, что sha3. "Функция хеширования Ethereum, keccak256, иногда (ошибочно) называемая sha3" github.com/ethereum/eth-hash
@NickJohnson Похоже, это больше не так. Я пробовал хешировать что-то через keccak256(abi.encodePacked(...))и через assembly {c := keccak256(add(encoded, 0x20), 40)}. Сборочная версия на самом деле стоила на 11 бензинов дороже.