¿Cuánto sabes sobre la estructura de las transacciones de Bitcoin?
Tipo de transacción
Transacción de producción (Generación)
Cada Bloque corresponde a una transacción de producción (Generación TX). No existe ninguna transacción de entrada para este tipo de transacción. Las nuevas monedas extraídas son la fuente de todas las monedas.
Transacción de dirección sintética (Script Hash)
La dirección de recepción de este tipo de transacciones no es una dirección en el sentido habitual, sino una dirección sintética, que comienza con 3, lo que requiere varios pares de claves públicas y privadas que se generarán juntas. La dirección sintética se puede especificar durante el proceso de generación. Después de varias firmas de varios pares de claves públicas y privadas, se pueden consumir los Bitcoins de esta dirección.
Transacción de dirección universal (Pubkey Hash)
Este tipo es el tipo de transacción más común y consta de N entradas y M salidas.
La entrada y salida pueden entenderse simplemente como la dirección que envía las monedas es la entrada y la dirección que recibe las monedas es la salida.
Estructura de datos
Campo
Tipo de datos
Tamaño del campo
Descripción del campo
versionuint32_t
4El número de versión de la estructura de datos de la transacción tx_in countvar_int1 El número de transacciones de entrada tx_intx_in[]41 La matriz de transacciones de entrada, cada entrada = 41 bytes
tx_out countvar_int1 La salida número de dirección tx_outtx_out[]9 Matriz de direcciones de entrada, cada entrada = 9 bytes lock_timeuint32_t4
lock_time es un campo ambiguo, que indica que la transacción está bloqueada antes de una determinada altura del bloque o antes de un determinado estado de punto de tiempo y no pueden ser incluidos en el Bloque.
Valor
Significado
0 entra en vigor inmediatamente 500000000 significa la altura del bloque Antes del bloque, está bloqueado (no tiene efecto) = 500000000 significa Unix. marca de tiempo. Está bloqueado antes de este tiempo (no efectivo)
Si los campos de secuencia de todas las transacciones de entrada de esta transacción son el valor INT32 máximo (0xffffffff), el campo lock_time se ignora. De lo contrario, la transacción no se incluirá en el Bloque hasta que alcance la altura del Bloque o alcance un tiempo determinado.
Ejemplo
Para facilitar la demostración, leemos los datos del bloque anterior y tomamos el bloque de altura 116219 como ejemplo.
# ~ bitcoind getblock 0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611
{
hash: 0000000000007c639f2cbb23e4606a 22fa4206353b9d92e99f5144bd74611,
confirmaciones: 144667,
tamaño: 1536,
altura: 116219,
versión: 1,
merkleroot: 587fefd748f899f84d0fa1d8a3876fdb406a4bb8f54a31445cb72564701daea6,
tx: [
>be8f08d7F519EB863A68CF292CA51DBAB7C9B49F50A96D13F2DB32E432DB363E,
A387039ECA662DA3DCC745BCB511E20ED95 05cc6762BE037bb,
3A06B6615756DC3363A8567FA8fe978ee06EB33FD844886A01149ad62
],
] /p>
tiempo: 1301705313,
nonce: 1826107553,
bits: 1b00f339,
dificultad: 68977.78463021 ,
blockhash anterior: 00000000000010d549135eb39bd3bbb1047df8e1512357216e8a85c57a1efbfb,
siguienteblockhash: 000000000000e9fcc59a6850f64a94476a3 0f5fe35 d6d8c4b4ce0b1b04103a77
}
Hay 5 transacciones en este bloque. La primera es. Generación TX Analícelo y vea el contenido específico:
# ~ bitcoind getrawtransaction be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e 1
{
hex: 0100000001000000000000. 00000 000000000000000000000000000000000000000000ffffffff070439f3001b 0134ffffffff014034152a010000004341045b3aaa284d169c5ae2d20d0b0673 46 8ed3506aa8fea5976eacaf1ff304456
f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac00000000,
txid: be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a9 6 d13f2db32e432db363e,
versión: 1,
tiempo de bloqueo: 0,
vin: [
{
coinbase: 0439f3001b0134,
secuencia: 4294967295
}
],
vout : [
{
valor: 50.01000000,
n: 0,
scriptPubKey: {
asm : 045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dce OP _ CHECKSIG,
hexadecimal: 41045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c 39 4bf96e2a4ad01dceac,
reqSigs: 1,
tipo: pubkey,
direcciones: [
<p> 5144bd74611, p>confirmaciones: 145029,
tiempo: 1301705313,
tiempo de bloqueo: 1301705313
}12345678910111213141516171819202122 2324252627282930313 233343536373839404142434445464748495051525354555657
Entrada de Generación TX No es una transacción, sino una estructura con un campo coinbase. El valor de este campo lo completa la persona que extrajo el bloque. Esto es un "privilegio": la información se puede escribir en el sistema monetario (a la gente le gusta usar los nombres de los campos de estructura de datos en el sistema para nombrar sitios, como por ejemplo). (como blockchain, coinbase, etc., se han agotado varios nombres de dominio con sufijos de estas palabras).
El valor de coinbase escrito por Satoshi Nakamoto en la primera transacción de Bitcoin es:
coinbase: 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e2062726 6b206f66207365636f6e64206261696c6f757420666f722062616e6b731
Convierte el segmento hexadecimal a caracteres ASCII, eso es todo. Un famoso mensaje de bloque génesis:
The Times 03/Ene/2009 Canciller al borde de un segundo rescate para bancos1
Lo que sigue es una transacción ordinaria de tres entradas y dos salidas:
# ~ bitcoind getrawtransaction 028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743 1
{
hexadecimal:
83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf 5 54dbe8a829f3a8fe2ffffffffff0200bd0105000000001976a914634228c26cf40a02a05db93f2f98b768a8e0e61b88acc096c7a6030000001976a9147514080ab 2fcac 0764de3a77d10cb790c71c74c288ac00000000,
txid: 028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743,
versión:
tiempo de bloqueo: 0,
vin: [
{
txid: b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9,
vout: 0,
scriptSig: {
asm: 3044022055bac1 bc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01 efd78bba 80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe ,
hexadecimal: 473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba 2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef 8d1005eaafd4b3fbe
},
secuencia: 4294967295
},
{
txid: b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9,
vout: 1,
scriptSig: {
asm: 304402206b993231adec55e 085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fe
c37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d01 042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a 51 330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a,
hex: 47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c 3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac2108196 98440f35 d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a
},
secuencia: 4294967295
},
{
txid: da30b272fb73d78108ff80ddd1ac2f76419533af79ad06a5b3c70fc4a62086c9,
vout: 1,
scriptSig: {
asm: 3045022040a5d957e 7ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d01 04a 7e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c67 9d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f,
hexadecimal: 483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99b ff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606d b15bf554dbe8a829f3a8fe2f
},
secuencia: 4294967295
}
],
vout: [
{
valor: 0,84000000,
n: 0,
scriptPubKey: {
asm: OP_DUP OP_HASH160 6
34228c26cf40a02a05db93f2f98b768a8e0e61b OP_EQUALVERIFY OP_CHECKSIG,
hex: 76a914634228c26cf40a02a05db93f2f98b768a8e0e61b88ac,
reqSig : 1,
tipo: pubkeyhash,
direcciones: [ p >
1A3q9pDtR4h8wpvyb8SVpiNPpT8ZNbHY8h
]
}
},
{
valor: 156.83000000,
n: 1,
scriptPubKey: {
asm: OP_DUP OP_HASH160 7514080ab2fcac0764de3a77d10cb790c71c74c2 OP_EQUALVERIFY OP_CHECKSIG,
hex: 76a9147514080ab 0764de3a77d10cb790c71c74c288ac, p>
reqSigs: 1,
tipo: pubkeyhash,
direcciones: [
1Bg44FZsoTeYteRykC1XHz8facWYKhGvQ8
]
}
}
],
blockhash: 0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611,
confirmaciones: 147751,
hora: 1301705313,
hora del bloque: 1301705313
}123456789101112131415161718192021222324252627282930313233343536373839404142434445 46 47484950515253545556575859606162636465666768
El campo hexadecimal registra toda la información relevante y lo que se muestra más tarde es la información de campo analizada. por hexadecimal. Analicemos el contenido hexadecimal uno por uno (el hexadecimal se puede ver directamente desde arriba):
01000000 // Número de versión, UINT32
03 // Cantidad de entrada Tx, longitud variable INT . 3 entradas.
/*** El primer grupo de Input Tx ***/
// Tx Hash, fijo 32 bytes
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7
00000000 // El Tx consumido se encuentra en la salida de la transacción directa 0, UINT32, 4 bytes fijos
8a // La longitud de la firma, 0x8A = 138 bytes
/ / Una firma de 138 bytes de longitud, que contiene dos partes: firma de clave pública
47 // Longitud de la firma, 0x47 = 71 bytes
3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d524902205552 3 130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01
41 / / Longitud de la clave pública, 0x41 = 65 bytes
048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8 d 1005eaafd4b3fbe
ffffffff // secuencia, 0xffffffff = 4294967295, UINT32, fijo 4 bytes
/* ** El segundo grupo de Entrada Tx.
Igual que arriba, omitiendo la descomposición***/
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6 c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3 926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffff
/*** El tercer grupo de Input Tx ***/
c9862 0fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000 008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d 6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d 0e fc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e5 47bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15 bf554dbe8a829f3a8fe2ffffffffff
02 // Cantidad de salida Tx, longitud variable INT. Dos salidas.
/*** El primer conjunto de salida ***/
00bd010500000000 // Valor de moneda de salida, UINT64, 8 bytes. El orden de los bytes debe invertirse, ~= 0x000000000501bd00 = 84000000 satoshi
19 // Destino de salida