Почему в хеше блока эфириума нет начальных нулей?

Хэш блока должен быть ниже определенной сложности, верно? В биткойне это означает, что в хеш-значении много ведущих нулей, например. для биткойн-блока № 402329 хэш равен 000000000000000006efd706f4467e2d7ed6f0fed757ca7d59e2cc8c81a2d9e3.

Но для блокчейна Эфириума хэш блока #1138224 равен 0xa4f80a26aecb5fc975e12a9d3d0f6a7907c60b1d7e6b5205dfb4c984dad7f1ba.

Почему нет лидирующих нулей?

Ответы (2)

В блокчейне Ethereum сложность используется для расчета цели.

Вот логи ethminer для блока номер 1257006 :

ℹ  35:02:42.89 ethminer  Solution found; Submitting to http://192.168.4.120:8545 ...
ℹ  35:02:42.89 ethminer    Nonce: ff4136b6b6a244ec
ℹ  35:02:42.89 ethminer    Mixhash: 47da5e47804594550791c24331163c1f1fde5bc622170e83515843b2b13dbe14
ℹ  35:02:42.89 ethminer    Header-hash: f5afa3074287b2b33e975468ae613e023e478112530bc19d4187693c13943445
ℹ  35:02:42.89 ethminer    Seedhash: 1730dd810f27fdefcac730fcab75814b7286002ecf541af5cdf7875440203215
ℹ  35:02:42.89 ethminer    Target: 00000000000baef6895d630131521d65d984555906990f43f352be4350291f92
ℹ  35:02:42.89 ethminer    Ethash: 0000000000095d18875acd4a2c2a5ff476c9acf283b4975d7af8d6c33d119c74
ℹ  35:02:42.89 ethminer  B-) Submitted and accepted.

Вот фрагмент Java для вычисления сложности от цели:

import java.math.BigInteger;

public class DifficultyDemo {
    public static void main(String[] args) {
        BigInteger numTwoPow256 = new BigInteger("2").pow(256);
        BigInteger target = new BigInteger("00000000000baef6895d630131521d65d984555906990f43f352be4350291f92", 16);
        BigInteger difficulty = numTwoPow256.divide(target);
        System.out.println(difficulty.toString());
    }
}

И сложность рассчитывается как 24091770185844соответствующая сложности на экране обозревателя блокчейна.

Мы можем использовать ethminer --check-pow <headerHash> <seedHash> <difficulty> <nonce>для проверки доказательства работы на достоверность следующим образом:

beefee@Rasterbator:~$ ethminer --check-pow f5afa3074287b2b33e975468ae613e023e478112530bc19d4187693c13943445 1730dd810f27fdefcac730fcab75814b7286002ecf541af5cdf7875440203215 24091770185844 ff4136b6b6a244ec
VALID :-)
0000000000095d18875acd4a2c2a5ff476c9acf283b4975d7af8d6c33d119c74 < 00000000000baef6895d630131521d65d984555906990f43f352be4350291f93
  where 00000000000baef6895d630131521d65d984555906990f43f352be4350291f93 = 2^256 / 24091770185844
  and 0000000000095d18875acd4a2c2a5ff476c9acf283b4975d7af8d6c33d119c74 = ethash(f5afa3074287b2b33e975468ae613e023e478112530bc19d4187693c13943445, ff4136b6b6a244ec)
  with seed as 1730dd810f27fdefcac730fcab75814b7286002ecf541af5cdf7875440203215
(mixHash = 47da5e47804594550791c24331163c1f1fde5bc622170e83515843b2b13dbe14)
SHA3( light(seed) ) = 35ded12eecf2ce2e8da2e15c06d463aae9b84cb2530a00b932e4bbc484cde353

Графический процессор майнера будет перебирать диапазон случайных одноразовых номеров. Этот Nonce в сочетании с Seedhash и Header-hash с использованием хэш-функции должен вычислить число ниже Target. Если это рассчитанное число ниже целевого, майнер успешно добыл блок, и детали блока будут отправлены на узлы сети Ethereum.

В приведенном выше примере вычисленный хэш Ethash больше, чем Target, и, следовательно, является неправильно добытым блоком (что упоминается в отчете об ошибке).

В Биткойне целью является хэш блока. По мере увеличения сложности вы увидите, что количество ведущих нулей увеличивается.

Блок 405390 имеет 17 лидирующих нулей. Блок 40539 имеет 8 лидирующих нулей (добыт в 2010 году).

Цель Ethereum в некотором роде эквивалентна хешу блока биткойнов.

очень круто, не знал!
Спасибо. Итак, где можно увидеть окончательный результат, Ethash, для каждого блока? Например, этот etherchain.org/block/1268022 не сообщает Ethash блока?
К сожалению, Ethash не публикуется в обозревателях блокчейнов. Это число может быть получено из хэша транзакции, предыдущего родительского хэша, начального числа, данных блока и одноразового номера — я попытаюсь когда-нибудь разработать алгоритм.
Здесь есть обзор: github.com/ethereum/wiki/wiki/Ethash . По сути, нет причин публиковать результат вычислений, так как в любом случае всем придется пересчитывать его для проверки.
Чем обосновано такое дизайнерское решение? Почему бы не использовать хэши блоков в качестве целей, как в биткойнах?
Биткойн: hash(block header, nonce)< TARGET. Эфириум: Ethash(hash(block header), nonce)< TARGET. Верно?
кажется, что у ethminer больше нет --check-pow
Как targetможно вычислить из ethashи mix_hash?
все еще не понимаю

То, что вы видите в обозревателе блоков, — sha3это заголовок блока, а не файл ethash.

Этот комментарий Ethash(hash(block header), nonce)неправильный? эфириум.stackexchange.com/questions/2072/…