Me gustaría aprender cómo funciona el testigo segregado , y pensé que los datos de transacción sin procesar serían un buen lugar para comenzar .
Si esta es la estructura de las transacciones corrientes:
version | [inputcount] {[txid] [vin] [signature] [sequence]} | [outputcount] {value} {varint} {lockingscript} | [locktime]
¿Cómo es una transacción de testigo segregado?
Del primitivo/transaction.h de Bitcoin Core :
/**
* Basic transaction serialization format:
* - int32_t nVersion
* - std::vector<CTxIn> vin
* - std::vector<CTxOut> vout
* - uint32_t nLockTime
*
* Extended transaction serialization format:
* - int32_t nVersion
* - unsigned char dummy = 0x00
* - unsigned char flags (!= 0)
* - std::vector<CTxIn> vin
* - std::vector<CTxOut> vout
* - if (flags & 1):
* - CTxWitness wit;
* - uint32_t nLockTime
*/
En otras palabras, antes del conteo de txin, hay una 0x00 0x01
secuencia (que de otro modo se interpretaría como una transacción con 0 entradas y 1 salida, que no puede ser válida), y antes del tiempo de bloqueo hay un registro testigo para cada entrada (el txin el conteo no se repite, implícitamente se asume que es igual al conteo de txin dado anteriormente).
inersha
pieter wuille
cabeza de alfiler
tx
, pero se eliminan antes de serializar para un nodo que no sea SW? ¿ Es necesario eliminar los bytesdummy
y también para los nodos que no son SW?flags
pieter wuille
cabeza de alfiler
pieter wuille