Estructura ScriptSig (coinbase) del Bloque Génesis

Del código fuente original de bitcoin c ++:

// Genesis Block:
        // CBlock(hash=000000000019d6, ver=1, hashPrevBlock=00000000000000, hashMerkleRoot=4a5e1e, nTime=1231006505, nBits=1d00ffff, nNonce=2083236893, vtx=1)
        //   CTransaction(hash=4a5e1e, ver=1, vin.size=1, vout.size=1, nLockTime=0)
        //     CTxIn(COutPoint(000000, -1), coinbase 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73)
        //     CTxOut(nValue=50.00000000, scriptPubKey=0x5F1DF16B2B704C8A578D0B)
        //   vMerkleTree: 4a5e1e

...

txNew.vin[0].scriptSig = CScript() << 486604799 << CBigNum(4) << vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp));

We could see that scriptSig is: 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73

Veamos más de cerca:

04 - ?

ffff001d - 486604799 también conocido como 0x1d00ffff

010445 - ?

5468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73 - The Times 03/Jan/2009 Chancellor on brink of second bailout for banks

No entiendo qué son 04 y 010445. ¿Cómo puedo conseguirlos? En la página wiki de Genesis Block ( https://en.bitcoin.it/wiki/Genesis_block ) en la línea ScriptSig no hay nada sobre 010445.

Actualizar. Descubrí que coinbase tiene un prefijo con un byte que indica la longitud de nBits. En el Bloque Génesis, la longitud de Nbits es 4: 0x1d, 0x00, 0xff, 0xff. Entonces, sé qué es 04 pero todavía no sé sobre 010445 ((

Respuestas (2)

Aquí hay un desglose de todo el bloque de génesis:

01000000 - version
0000000000000000000000000000000000000000000000000000000000000000 - prev block
3BA3EDFD7A7B12B27AC72C3E67768F617FC81BC3888A51323A9FB8AA4B1E5E4A - merkle root
29AB5F49 - timestamp
FFFF001D - bits
1DAC2B7C - nonce
01 - number of transactions
01000000 - version
01 - input
0000000000000000000000000000000000000000000000000000000000000000FFFFFFFF - prev output
4D - script length
04FFFF001D0104455468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73 - scriptsig
FFFFFFFF - sequence
01 - outputs
00F2052A01000000 - 50 BTC
43 - pk_script length
4104678AFDB0FE5548271967F1A67130B7105CD6A828E03909A67962E0EA1F61DEB649F6BC3F4CEF38C4F35504E51EC112DE5C384DF7BA0B8D578A4C702B6BF11D5FAC - pk_script
00000000 - lock time

Decodificando el ScriptSig :

04 - push the next 4 bytes to stack
FFFF001D - 4 bytes pushed, they appear to be the same as bits
01 - push the next 1 byte to stack
04 - 1 byte pushed
45 - push the next 69 bytes to stack
5468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73 - pushed bytes, "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"

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.

Gracias por la respuesta, pero todavía no sé qué es 010445 porque no hay una explicación en el desglose sobre 010445. 010445 es simplemente parte de la secuencia en desglose.
@VitaliGrabovski Lo siento, desglosé un poco más las cosas. Expliqué 010445.

El significado de FFFF01D y 04 que se colocan en la pila antes de la famosa cadena se explica aquí:

https://en.bitcoin.it/wiki/Transaction#Generation

Como nota, FFFF01D repite el campo Bits que aparece en el encabezado. Y 04 es (cito) "el número" extraNonce "de precisión arbitraria que se incrementa cada vez que el campo Nonce en el encabezado del bloque se desborda" .

Si te preguntas qué es el nonce, significa "número que solo se usa una vez". El nonce son algunos datos en el encabezado del bloque que puede modificar hasta que el hash del encabezado se ajuste al objetivo.