Décoder un bloc au-delà de la transaction Coinbase


org/en/developer-reference#serialized-blocks

org/en/developer-reference#raw-transaction-format

com/bitcoin/bips/blob/master/bip-0144.mediawiki

Votre décodage est un peu faux :

Décoder un bloc au-delà de la transaction Coinbase

00000020 – Version de transaction

C'est la version bloc, pas la version transaction.

01000000 – Version de transaction

01 – Coinbase a 1 transaction

Vous avez en fait manqué deux champs ici. Les 7 premiers octets de la transaction sont 01000000000101. Ils sont les suivants  :

01000000 – Version de transaction 00 – Octet de marqueur Segwit 01 – Octet de drapeau Segwit 01 – Nombre d'entrées

Notez que le marqueur segwit et les octets d'indicateur ne se trouvent que dans les transactions segwit et indiquent qu'une transaction donnée est une transaction segwit.

===== Coinbase Début =====

La version de la transaction et le décompte après tout font partie de la transaction coinbase. Le décompte ne concerne pas le nombre de transactions mais plutôt le nombre d'entrées. Une transaction est composée d'entrées et de sorties, pas d'autres transactions.

> – txin

Non, cela fait toujours partie du scriptSig. Ce n’est pas en soi une entrée de transaction. Il ne s'agit que de données arbitraires dans le scriptSig de la transaction coinbase que les mineurs y ont placées.

00000000 – Heure de verrouillage

===== Fin Coinbase =====

point de sortie ?

– ?

Non, il y a trois sorties mais vous n’en avez décodé qu’une.

Le décodage correct est le suivant  :

OP_PUSHDATA1 29Poussez 36 octets vers pilecom/bitcoin/bips/blob/master/bip-0141

Il y a en fait une partie suivante de la transaction que vous n'avez pas dans votre répartition. Ce sont les données des témoins et le temps de verrouillage.

01 – Un élément de pile témoin 20 – L'élément de pile a une longueur de 32 octets – Élément de pile 00000000 – temps de verrouillage

Ensuite, la transaction suivante commence par.. et est décodée comme la transaction coinbase ci-dessus.