¿Por qué no hay ceros a la izquierda en el hash de bloque de ethereum?

El hash del bloque tiene que estar por debajo de cierta dificultad, ¿no? En bitcoin, esto significa que hay muchos ceros iniciales en el valor hash, p. para el bloque bitcoin #402329 el hash es 000000000000000006efd706f4467e2d7ed6f0fed757ca7d59e2cc8c81a2d9e3.

Pero para la cadena de bloques ethereum, el hash del bloque #1138224 es 0xa4f80a26aecb5fc975e12a9d3d0f6a7907c60b1d7e6b5205dfb4c984dad7f1ba.

¿Por qué no hay ceros a la izquierda?

Respuestas (2)

En la cadena de bloques de Ethereum, la dificultad se usa para calcular un objetivo.

Aquí están los registros de ethminer para el número de bloque 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.

Aquí hay un fragmento de Java para calcular la dificultad del objetivo:

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());
    }
}

Y la dificultad se calcula como 24091770185844corresponde a la dificultad en la pantalla del explorador de blockchain.

Podemos usar ethminer --check-pow <headerHash> <seedHash> <difficulty> <nonce>para verificar la validez de la prueba de trabajo de la siguiente manera:

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

La GPU del minero iteraría a través de un rango de Nonces aleatorios. Este Nonce, combinado con Seedhash y Header-hash usando una función hash, necesita calcular un número debajo del objetivo. Si este número calculado está por debajo del objetivo, el minero ha extraído con éxito un bloque y los detalles del bloque se enviarán a los nodos de la red Ethereum.

En el ejemplo anterior, el hash Ethash calculado es más grande que el objetivo y, por lo tanto, es un bloque extraído incorrectamente (que se menciona en el informe de error).

En Bitcoin, el objetivo es el hash de bloque. A medida que aumenta la dificultad, verá aumentar el número de ceros a la izquierda.

El bloque 405390 tiene 17 ceros a la izquierda. El bloque 40539 tiene 8 ceros a la izquierda (extraído en 2010).

El objetivo de Ethereum es una especie de equivalente al hash de bloque de Bitcoin.

muy chulo, no lo sabia!
Gracias. Entonces, ¿dónde se puede ver el resultado final, Ethash, para cada bloque? Por ejemplo, este etherchain.org/block/1268022 no informa el Ethash del bloque.
Desafortunadamente, el Ethash no se publica en los exploradores de blockchain. Este número se puede calcular a partir del hash de la transacción, el hash principal anterior, la semilla, los datos del bloque y el nonce. Intentaré resolver el algoritmo en algún momento.
Hay una descripción general aquí: github.com/ethereum/wiki/wiki/Ethash . Esencialmente, no hay ninguna razón para publicar el resultado del cálculo, ya que, de todos modos, todos deberán volver a calcularlo para verificarlo.
¿Cuál es la razón detrás de esta decisión de diseño? ¿Por qué no usar hashes de bloque como objetivos, de forma similar a Bitcoin?
Bitcoins: hash(block header, nonce)< TARGET. Etéreo: Ethash(hash(block header), nonce)< TARGET. ¿Derecha?
parece que ethminer ya no tiene --check-pow
¿Cómo targetpodría calcularse a partir de ethashy mix_hash?
todavía no entiendo

Lo que ve en los exploradores de bloques es el sha3del encabezado del bloque, no el ethash.

Ethash(hash(block header), nonce)¿Está mal este comentario ? ethereum.stackexchange.com/questions/2072/…