Wie wählen Sie beim Generieren von Zeugen für bip143 aus, WELCHEN Outpoint Sie verwenden möchten?

in BIP 143 zum Erstellen einer Witness-Signatur wird beschrieben, was serialisiert/signiert werden muss. Eine Sache, die dem Dokument zu fehlen scheint, ist, wie man bestimmt, WELCHER Outpoint verwendet werden soll. In diesen Transaktionen gibt es also in jedem Beispiel mehrere Txins, und sie scheinen immer nur eines davon auszuwählen?

Zum Beispiel vom Native P2WPKH in BIP 143

Das Folgende ist eine unsignierte Transaktion:
    0100000002fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f0000000000eeffffffef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a0100000000ffffffff02202cb206000000001976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac9093510d000000001976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac11000000
    
    nVersion: 01000000
    txin: 02 fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f 00000000 00 eeffffff
                  ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a 01000000 00 ffffffff
    txout: 02 202cb20600000000 1976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac
                  9093510d00000000 1976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac
    nSperrzeit: 11000000
  
  Die erste Eingabe kommt von einem gewöhnlichen P2PK:
    scriptPubKey : 2103c9f4836b9a4f77fc0d81f7bcb01b7f1b35916864b9476c241ce9fc198bd25432ac Wert: 6,25
    privater Schlüssel: bbc27228ddcb9209d7fd6f36b02f7dfa6252af40bb2f1cbc7a557da8027ff866
    
  Die zweite Eingabe stammt von einem P2WPKH-Witness-Programm:
    scriptPubKey: 00141d0f172a0ecb48aee1be1f2687d2963ae33f71a1, Wert: 6
    privater Schlüssel: 619c335025c7f4012e556c2a58b2506e30b8511b53ade95ea316fd8c3286feb9
    öffentlicher Schlüssel: 025476c2e83188368da1ff3e292e7acafcdb3566bb0ad253f62fc70f07aeee6357
    
  So signieren Sie es mit einem nHashType von 1 (SIGHASH_ALL):
  
  hashPrevouts:
    dSHA256(fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f00000000ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b90ec)
  = 96b827c8483d4e9b96712b6713a7b68d6e8003a781feba36c31143470b4efd37
  
  Hash-Sequenz:
    dSHA256(eeffffffffffffff)
  = 52b0a642eea2fb7ae638c36f6252b6750293dbe574a806984b8e4d8548339a3b
  
  Hash-Ausgaben:
    dSHA256(202cb206000000001976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac9093510d000000001976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa8)
  = 863ef3e1a92afbfdb97f31ad0fc7683ee943e9abcf2501590ff8f6551f47e5e5
  
  hash preimage: 0100000096b827c8483d4e9b96712b6713a7b68d6e8003a781feba36c31143470b4efd3752b0a642eea2fb7ae638c36f6252b6750293dbe574a806984b8e4d8548339a3bef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a010000001976a9141d0f172a0ecb48aee1be1f2687d2963ae33f71a188ac0046c32300000000ffffffff863ef3e1a92afbfdb97f31ad0fc7683ee943e9abcf2501590ff8f6551f47e5e51100000001000000
  
    nVersion: 01000000
    hashPrevouts: 96b827c8483d4e9b96712b6713a7b68d6e8003a781feba36c31143470b4efd37
    Hash-Sequenz: 52b0a642eea2fb7ae638c36f6252b6750293dbe574a806984b8e4d8548339a3b
    Endpunkt: ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a01000000
    scriptCode: 1976a9141d0f172a0ecb48aee1be1f2687d2963ae33f71a188ac
    Betrag: 0046c32300000000
    nSequenz: ffffffff
    Hash-Ausgaben: 863ef3e1a92afbfdb97f31ad0fc7683ee943e9abcf2501590ff8f6551f47e5e5
    nSperrzeit: 11000000
    nHashType: 01000000

Sie können sehen, dass in der Signatur 2 txins und nur ein Outpoint verwendet werden, und dies gilt so ziemlich für alle Beispiele. Es steht nirgendwo in bip143, WIE du dich entscheidest. Jeder Rat wird sehr geschätzt.

Antworten (1)

Wenn Sie Signaturen erstellen, signieren Sie für eine bestimmte Eingabe in der Transaktion. Diese spezifische Eingabe hat einen entsprechenden Outpoint, also verwenden Sie ihren Outpoint im Sighash.

In den angegebenen Beispielen sind die Seufzer für alle Eingaben angegeben. Für jede Eingabe macht es also einen Seufzer unter Verwendung des Endpunkts für diese Eingabe.

Wenn Sie in diesem Beispiel für Eingang 1 signieren, verwenden Sie den Endpunkt fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f00000000. Wenn Sie für Eingang 2 signieren, verwenden Sie den Endpunkt ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a01000000.

dann müssten Sie also 2 Zeugensignaturen haben, jede mit den HashPrevouts einschließlich ALLER Eingaben? Auch dieses Beispiel scheint keine 2 Seufzer zu haben, dieses Beispiel hat eindeutig nur einen? Ist dieses Beispiel falsch?
Ich denke, Andrew hat übersehen, dass die erste Eingabe keine Segwit-Ausgabe ist, also BIP143 nicht verwendet wird. In diesem Fall ist die Ausgabe, die Sie für die zweite Eingabe ersetzen, die Ausgabe, die in der zweiten Eingabe ausgegeben wird.
@noone392 Ja, wenn Ihre Transaktion zwei Eingaben hat, die Witness-Signaturen erfordern, dann gibt es 2 Witness-Signaturen. hashPrevouts enthält alle Outpoints, aber damit ein Seufzer auf eine bestimmte Eingabe angewendet wird, wird der Outpoint für diese bestimmte Eingabe explizit eingeschlossen. Dieses Beispiel hat nur 1 Zeugen-Seufzer, weil es nur 1 Zeugen-Eingabe gibt, die ich vorher nicht bemerkt habe.
Tausend Dank für die Hilfe. Ich bin mir nicht sicher, ob es möglich wäre, auf den neuesten Stand zu kommen, ohne einfach den Kern zurückzuentwickeln, wenn die Experten nicht ihre Zeit investieren würden.