Al generar un testigo para bip143, ¿cómo elige QUÉ punto de salida usar?

en bip 143 para crear una firma de testigo, describe lo que debe serializarse/firmarse. Una cosa que parece faltar en el documento es cómo determinar QUÉ punto de salida usar. Entonces, en estas transacciones hay múltiples txins en cada ejemplo, ¿y siempre parecen elegir solo uno de ellos?

Por ejemplo del Native P2WPKH en bip 143

La siguiente es una transacción sin firmar:
    0100000002fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f0000000000eeffffffef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a0100000000ffffffff02202cb206000000001976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac9093510d000000001976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac11000000
    
    nVersión: 01000000
    txin: 02 fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f 00000000 00 eeffffff
                  ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a 01000000 00 ffffffff
    txout: 02 202cb20600000000 1976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac
                  9093510d00000000 1976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac
    nTiempo de bloqueo: 11000000
  
  La primera entrada proviene de un P2PK ordinario:
    scriptPubKey: 2103c9f4836b9a4f77fc0d81f7bcb01b7f1b35916864b9476c241ce9fc198bd25432ac valor: 6,25
    clave privada: bbc27228ddcb9209d7fd6f36b02f7dfa6252af40bb2f1cbc7a557da8027ff866
    
  La segunda entrada proviene de un programa testigo P2WPKH:
    scriptPubKey: 00141d0f172a0ecb48aee1be1f2687d2963ae33f71a1, valor: 6
    clave privada: 619c335025c7f4012e556c2a58b2506e30b8511b53ade95ea316fd8c3286feb9
    clave pública: 025476c2e83188368da1ff3e292e7acafcdb3566bb0ad253f62fc70f07aeee6357
    
  Para firmarlo con un nHashType de 1 (SIGHASH_ALL):
  
  hashPrevouts:
    dSHA256(fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f00000000ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b5a06d57b000)
  = 96b827c8483d4e9b96712b6713a7b68d6e8003a781feba36c31143470b4efd37
  
  secuencia hash:
    dSHA256(eeffffffffffffff)
  = 52b0a642eea2fb7ae638c36f6252b6750293dbe574a806984b8e4d8548339a3b
  
  Salidas hash:
    dSHA256(202cb206000000001976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac9093510d000000001976a9143bde42dbee7e4dbe6a21b2d50ce8aac015)
  = 863ef3e1a92afbfdb97f31ad0fc7683ee943e9abcf2501590ff8f6551f47e5e5
  
  hash preimage: 0100000096b827c8483d4e9b96712b6713a7b68d6e8003a781feba36c31143470b4efd3752b0a642eea2fb7ae638c36f6252b6750293dbe574a806984b8e4d8548339a3bef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a010000001976a9141d0f172a0ecb48aee1be1f2687d2963ae33f71a188ac0046c32300000000ffffffff863ef3e1a92afbfdb97f31ad0fc7683ee943e9abcf2501590ff8f6551f47e5e51100000001000000
  
    nVersión: 01000000
    hashPrevouts: 96b827c8483d4e9b96712b6713a7b68d6e8003a781feba36c31143470b4efd37
    secuencia hash: 52b0a642eea2fb7ae638c36f6252b6750293dbe574a806984b8e4d8548339a3b
    punto de salida: ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a01000000
    Código de script: 1976a9141d0f172a0ecb48aee1be1f2687d2963ae33f71a188ac
    cantidad: 0046c32300000000
    nSecuencia: ffffffff
    hashSalidas: 863ef3e1a92afbfdb97f31ad0fc7683ee943e9abcf2501590ff8f6551f47e5e5
    nTiempo de bloqueo: 11000000
    nHashTipo: 01000000

puede ver que hay 2 txins y solo un punto de salida utilizado en la firma, y ​​esto es bastante cierto para todos los ejemplos. No dice en ninguna parte de bip143 CÓMO eliges. Cualquier consejo es muy apreciado.

Respuestas (1)

Cuando está creando firmas, está firmando para una entrada específica en la transacción. Esa entrada específica tiene un punto de salida correspondiente, por lo que usa su punto de salida en el sighash.

En los ejemplos dados, se dan los sighashes para todas las entradas. Entonces, para cada entrada, hace un suspiro usando el punto de salida para esa entrada.

En este ejemplo, si está firmando para la entrada 1, entonces usa el punto de salida fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f00000000. Si está firmando para la entrada 2, use el punto de salida ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a01000000.

Entonces, ¿debería tener 2 firmas de testigos, cada una con los hashPrevouts que incluyen TODAS las entradas? Además, ese ejemplo no parece tener 2 sighashes, ¿ese ejemplo claramente solo tiene uno? ¿Este ejemplo es incorrecto?
Creo que Andrew se perdió que la primera entrada no es una salida de segwit, por lo que no usa BIP143. En este caso, para la segunda entrada, la salida que sustituye es la salida que se gasta en la segunda entrada.
@noone392 Sí, si su transacción tiene dos entradas que requieren firmas de testigos, habrá 2 firmas de testigos. hashPrevouts incluirá todos los puntos de salida, pero para que un sighash se aplique a una entrada específica, el punto de salida para esa entrada en particular se incluye explícitamente. Este ejemplo solo tiene 1 testigo sighash porque solo hay 1 entrada de testigo que no noté antes.
Muchas gracias chicos por la ayuda. No estoy seguro de que sería posible alcanzar la velocidad sin simplemente aplicar ingeniería inversa al núcleo si no fuera por los expertos que dedican su tiempo.