Bloquear datos hash

Chicos, tengo algunos puntos que no me quedan claros. 1) En el enlace de abajo dice que hay algunos campos que tenemos que combinar y hash. Sin embargo, cuando obtengo un trabajo digo getwork from a pool. Lo que obtengo está en el siguiente cualquiera. El problema es que no puedo encontrar los campos enumerados en el primer enlace, Versión, hashPrevBlock, etc.

https://en.bitcoin.it/wiki/Block_hashing_algorithm

Resultado del trabajo.

{   'data':'0000000271112b7a1cf8e97b8367102f7e155499bf5c7303cbcdd4360000000000000000427719b35a84bc7732edd34ff3a6278dc4ac0ec2a9544e6088bc0bd719e17a8e52db3b211902666600000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000',
'hash1':'00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000',
'target':'0000000000000000000000000000000000000000000000000000ffff00000000',
'midstate':'45aebb01c0fdb704ee7d2bbf02665943f50f299ff8bb252e614100065bc5c20c'
}

2) Dice en el primer enlace "Cada vez que se desborda Nonce (lo que ocurre con frecuencia), se incrementa la parte extraNonce de la transacción de generación, lo que cambia la raíz de Merkle". ¿Debo poner 32 bits extra para extranonce?

3) ¿Cuál es la razón por la que se invierte el encabezado?

Respuestas (1)

  1. el enlace que publicaste se refiere al proceso completo de minería, ya que lo necesitarías si estuvieras usando un ASIC o alguna otra solución de hardware capaz de generar 4 gigahashes o más por segundo. si está usando getwork, la mayor parte de esa información es irrelevante y confusa.

  2. ver (1) arriba. no te preocupes por extraNonce cuando usas getwork; puede solicitar getworknuevamente y obtener una nueva datacadena del servidor.

  3. la razón para invertir el encabezado (en realidad, invertir cada palabra de 32 bits en el encabezado) es que ya se ha invertido (convertido a little-endian) antes de enviárselo y necesita deshacer esa inversión, poniéndolo de nuevo en grande -forma endiana.

todo lo que necesita hacer cuando usa getwork es:

  • convertir el dataa big-endian
  • obtener el hash sha256 del hash sha256 del encabezado de 80 bytes
  • si ese hash está por debajo del umbral, envíe su encabezado con el nonce actual al servidor usando la getworkllamada RPC apropiada con datos
  • sigue intentándolo de nuevo con diferentes nonces cada vez (los últimos 4 bytes de los 80 bytes son el nonce)
quieres decir que lo único que me importa serán los últimos 4 bytes de los datos, ¿verdad? Pero, ¿de quién son los últimos bytes, el little-endian uno o el otro? :)
realmente no importa por lo general, al menos en las computadoras x86, las personas incrementan el número little-endian y luego convierten el bloque a big-endian para el hash. Solo uso números aleatorios, por lo que no podría importarme menos el endianismo; solo tiene que asegurarse de ponerlo en el orden correcto para enviarlo al servidor.
recuerda, son los mismos 4 bytes en cada caso; no está invirtiendo los 80 bytes, está invirtiendo cada 4 bytes dentro de los 80 bytes, por lo que 0x12345678 se convierte en 0x78563412.
En el ejemplo de 0x12345678, está invirtiendo cada fragmento de 1 byte dentro de un valor de 4 bytes, ¿verdad? 0x12345678 = 00010010-00110100-01010110-01111000. 0x78563412 = 01111000-01010110-00110100-00010010
si, esa es la idea.