¿Qué es la versión testigo y cómo se utiliza?
Una transacción segwit se compone de: [nVersion][marker][flag][txins][txouts][witness][nLockTime]
Del BIP: "Un campo testigo comienza con var_int para indicar el número de elementos de pila para la txin".
¿Dónde entra la versión testigo y en qué escenarios se puede utilizar?
En segundo lugar, ¿por qué dice que el campo testigo comienza con var_int para indicar la cantidad de elementos de pila para el txin? ¿No son los datos testigo solo una firma? ¿O simplemente se refiere a transacciones que tienen más entradas, y el var_init principal solo cuenta la cantidad de entradas, por lo tanto, se esperan firmas?
La parte 1 de la pregunta ha sido respondida por Tony.
los datos de testigo son más que una firma, puede tener una clave de pub "detrás" de la firma, o un script de canje u otros contratos inteligentes. Eche un vistazo a los scripts V_IN a partir de tx que no sean de Segwit.
en la segunda parte de su pregunta: el número al principio (la bandera) identifica la cantidad de entradas que tienen datos testigo. Puede crear un tx, que tiene 5 entradas, por ejemplo, 2 no segwit y 3 segwit. Entonces esta bandera tiene un valor de "3".
Vea este ejemplo con dos V_IN y el valor del indicador es "1", porque solo una parte del tx tiene datos de Segwit/testigo. También vea al final el número de elementos segwit para V_IN referenciado (TX_IN[1]). Los primeros dos elementos son la firma (con OP_SIGHASHSINGLE - ¡hex 03 al final!), el tercer elemento es una clave de publicación.
01000000000102FE3DC9208094F3FFD12645477B3DC56F60EC4FA8E6F5D67C565D1C6B9216B36E000000004847304402200AF4E47C9B9629DBECC21F73AF989BDAA911F7E6F6C2E9394588A3AA68F81E9902204F3FCF6ADE7E5ABB1295B6774C8E0ABD94AE62217367096BC02EE5E435B67DA201FFFFFFFF0815CF020F013ED6CF91D29F4202E8A58726B1AC6C79DA47C23D1BEE0A6925F80000000000FFFFFFFF0100F2052A010000001976A914A30741F8145E5ACADF23F751864167F32E0963F788AC000347304402200DE66ACF4527789BFDA55FC5459E214FA6083F936B430A762C629656216805AC0220396F550692CD347171CBC1EF1F51E15282E837BB2B30860DC77C8F78BC8501E503473044022027DC95AD6B740FE5129E7E62A75DD00F291A2AEB1200B84B09D9E3789406B6C002201A9ECD315DD6A0E632AB20BBB98948BC0C6FB204F2C286963BB48517A7058E27034721026DCCC749ADC2A9D0D89497AC511F760F45C47DC5ED9CF352A58AC706453880AEADAB210255A9626AEBF5E29C0E6538428BA0D1DCF6CA98FFDF086AA8CED5E0D0215EA465AC00000000
VERSION
01000000
SEGWIT (BIP141): this is a segwit tx, marker=00
(BIP141): flag=01
TX_IN COUNT [var_int]: hex=02, decimal=2
TX_IN[0]: 6EB316926B1C5D567CD6F5E6A84FEC606FC53D7B474526D1FFF3948020C93DFE
TX_IN[0] hex=00000000, reversed=00000000, decimal=0
TX_IN[0] Script Length hex=48, decimal=72
TX_IN[0] Script Sig (uchar[]) 47304402200AF4E47C9B9629DBECC21F73AF989BDAA911F7E6F6C2E9394588A3AA68F81E9902204F3FCF6ADE7E5ABB1295B6774C8E0ABD94AE62217367096BC02EE5E435B67DA201
TX_IN[0] Sequence (uint32_t)
FFFFFFFF
TX_IN[1] F825690AEE1B3DC247DA796CACB12687A5E802429FD291CFD63E010F02CF1508
TX_IN[1] hex=00000000, reversed=00000000, decimal=0
TX_IN[1] Script Length hex=00, decimal=0
TX_IN[1] Sequence (uint32_t) FFFFFFFF
TX_OUT COUNT, hex=01, decimal=1
TX_OUT[0] Value: hex=00F2052A01000000, dec=5000000000
TX_OUT[0] PK_Script Length hex=19, dec=25
TX_OUT[0] pk_script 76A914A30741F8145E5ACADF23F751864167F32E0963F788AC
This is a P2PKH script, and translates base58 encoded into this bitcoin address: mvNy8bVyGDyuCiS1zMzm61eDtCBbUVfHPD
WITNESS TXIN[0] stack elements: hex=00, decimal=0
WITNESS TXIN[1] stack elements: hex=03, decimal=3
WITNESS[0] data length (var_int), hex=47, decimal=71, data(uchar[]):
304402200DE66ACF4527789BFDA55FC5459E214FA6083F936B430A762C629656216805AC0220396F550692CD347171CBC1EF1F51E15282E837BB2B30860DC77C8F78BC8501E503
WITNESS[1] data length (var_int), hex=47, decimal=71, data(uchar[]):
3044022027DC95AD6B740FE5129E7E62A75DD00F291A2AEB1200B84B09D9E3789406B6C002201A9ECD315DD6A0E632AB20BBB98948BC0C6FB204F2C286963BB48517A7058E2703
WITNESS[2] data length (var_int), hex=47, decimal=71, data(uchar[]):
21026DCCC749ADC2A9D0D89497AC511F760F45C47DC5ED9CF352A58AC706453880AEADAB210255A9626AEBF5E29C0E6538428BA0D1DCF6CA98FFDF086AA8CED5E0D0215EA465AC
LOCK_TIME
00000000
Si por versión testigo se refiere a la versión del script que se agregó con la actualización de SegWit, esta publicación de blog de Bitcoin Core explica las implicaciones de este número de versión:
Segwit resuelve esto al incluir un número de versión para las secuencias de comandos, de modo que los códigos de operación adicionales que habrían requerido una bifurcación dura para usarse en transacciones que no sean de segwit puedan admitirse simplemente aumentando la versión de la secuencia de comandos.
Para su segunda pregunta, su intuición es correcta. El número corresponde al número de entradas.
skydanc3r
tony rizko
skydanc3r
tony rizko