¿Por qué Genesis bloquea los bits de inserción del script de entrada de coinbase y el valor 0x04 antes del famoso mensaje "Canciller"?

Según Wiki , el script de entrada del bloque Génesis consta de estos bytes:

04FFFF001D0104455468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73

Esto lo podemos desglosar de la siguiente manera:

  • 0x04: empuje 4 bytes
  • 0xffff001d: el mismo valor que el campo "bits" del encabezado del bloque Génesis
  • 0x01: empuje 1 byte
  • 0x04: empuje el valor 4
  • resto: codificación ASCII del famoso mensaje "The Times 03/ene/2009 Canciller al borde del segundo rescate de los bancos"

Hasta donde yo sé, los dos primeros valores colocados en la pila ( 0xffff001dy 0x04) son innecesarios. Por supuesto, también lo es el mensaje del canciller, pero al menos su significado es un poco más claro.

Sin embargo, el push bits/ 0x04patrón también aparece en otros bloques. Por ejemplo, el mismo patrón aparece en el siguiente bloque (0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098).

Encontré esta pregunta , con una respuesta que especula:

Entonces, 010445 son, de hecho, parte de 2 operaciones: 01 empuja 04 a la pila, 45 empuja el mensaje a la pila. En cuanto a por qué empujar 04, me gana, ¿tal vez solo estaba probando para asegurarse de que algo funciona? ¿Algún contador interno usado por Satoshi durante la creación del bloque Génesis? Dado que el guión de una transacción de generación de monedas no tiene sentido, es posible que nunca lo sepamos.

Mis preguntas:

  1. ¿Son necesarias estas operaciones iniciales de inserción de datos?
  2. Si no, ¿por qué estos elementos (bits y 0x04) aparecen en más de un bloque?
  3. ¿La adición de este prefijo al script de entrada de transacción de coinbase formaba parte del comportamiento predeterminado del cliente Bitcoin original?
  4. Si no, ¿no sería esto una firma para los bloques que extrajo Satoshi?

Respuestas (1)

Encontré más información en la Wiki:

Las generaciones tienen una sola entrada, y esta entrada tiene un parámetro "coinbase" en lugar de un scriptSig. Los datos en "coinbase" pueden ser cualquier cosa; no se usa Bitcoin coloca el objetivo de formato compacto actual y el número "extraNonce" de precisión arbitraria allí, que se incrementa cada vez que se desborda el campo Nonce en el encabezado del bloque. Las salidas pueden ser cualquier cosa, pero Bitcoin crea una exactamente como una transacción de dirección IP. La extranoncia contribuye a ampliar el dominio de la función de prueba de trabajo. Los mineros pueden modificar fácilmente nonce (4 bytes), marca de tiempo y extranonce (2 a 100 bytes).

https://en.bitcoin.it/wiki/Transacción

En otras palabras, el primer cliente de Bitcoin copió el campo "bits" (objetivo de formato compacto) del encabezado del bloque y lo usó en una operación de inserción de datos para el script de entrada de coinbase. Pero todavía no estoy seguro de por qué esto se consideró una buena idea.

A continuación, una segunda operación pushdata empujó el campo "extranonce". Este campo se incrementaba cada vez que el campo nonce se desbordaba. Las implicaciones de privacidad de este sistema se discuten aquí:

https://bitslog.wordpress.com/2013/04/17/la-bien-merecida-fortuna-de-satoshi-nakamoto/

Creo que ahora puedo responder mis propias preguntas:

  1. No.
  2. Bits está ahí porque eso es justo lo que hizo Bitcoin. 0x04es el campo extranonce.
  3. Sí.
  4. Sí, en parte.
Este comportamiento es parte del cliente original que puede ver aquí: github.com/bitcoin/bitcoin/blob/v0.1.5/main.cpp#L2242 . No hay ninguna razón particular para incluir el campo nBits y no es un requisito de consenso hacerlo.