Хэш блока должен быть ниже определенной сложности, верно? В биткойне это означает, что в хеш-значении много ведущих нулей, например. для биткойн-блока № 402329 хэш равен 000000000000000006efd706f4467e2d7ed6f0fed757ca7d59e2cc8c81a2d9e3
.
Но для блокчейна Эфириума хэш блока #1138224 равен 0xa4f80a26aecb5fc975e12a9d3d0f6a7907c60b1d7e6b5205dfb4c984dad7f1ba
.
Почему нет лидирующих нулей?
В блокчейне 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 в некотором роде эквивалентна хешу блока биткойнов.
То, что вы видите в обозревателе блоков, — sha3
это заголовок блока, а не файл ethash
.
Ethash(hash(block header), nonce)
неправильный? эфириум.stackexchange.com/questions/2072/…
q9f
Матиас
конфиденциальностьisahumanright.eth
Тьяден Хесс
Сергей Тихомиров
Константин Ван
hash(block header, nonce)
<TARGET
. Эфириум:Ethash(hash(block header), nonce)
<TARGET
. Верно?Корявин Иван
к06а
target
можно вычислить изethash
иmix_hash
?Gqqnbig