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 :
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.