Ich konnte eine Anwendung in Python programmieren, die gültige Transaktionen sendet, die 1 Eingabe ausgeben, aber ich kann es wirklich nicht mit 2 oder mehr Eingaben zum Laufen bringen.
Meine Frage ist also, wie genau wird der Hash berechnet, der für jede Eingabe signiert werden muss?
Was ich bisher gemacht habe, ist zum Beispiel, wenn wir 2 Eingaben haben, generieren wir eine Transaktion, die nur diese erste Eingabe ausgibt, und das ist der Hash, der für die erste Eingabe signiert werden muss. Und das gleiche gilt für die zweite Eingabe, wir generieren eine Transaktion, die nur diese zweite Eingabe ausgibt. Beide Transaktionen müssen dieselben Ausgaben haben.
Ist das korrekt? Zum Beispiel möchten wir Eingabe aaaa:0 und Eingabe bbbb:1 ausgeben und wir möchten sie an eine Adresse senden:
Um den Hash zu berechnen, den die erste Eingabe signieren muss, müssen wir diese Transaktion generieren:
'version': 1,
'inputs': (1)
'output_tx_hash': 'aaaa',
'output_position': 0,
'script': the original script, like: '76a914' + hash + '88ac',
'sequence': ffffffff,
'outputs': (1)
'value' : 100000
'script' : '76a914' + hash of btc pub key + '88ac'
'locktime': 0
Und um den Hash zu berechnen, den die zweite Eingabe signieren muss:
'version': 1,
'inputs': (1)
'output_tx_hash': 'bbbb', # this changes
'output_position': 1, # this changes
'script': the original script, like: '76a914' + hash + '88ac',
'sequence': ffffffff,
'outputs': (1)
'value' : 100000
'script' : '76a914' + hash of btc pub key + '88ac'
'locktime': 0
Wir serialisieren sie, fügen sie 01000000 (SIGHASH_ALL) hinzu, verdoppeln sha256 das, signieren es und fügen 01 hinzu. Auf diese Weise erhalten wir die beiden Signaturen, die wir jeweils für jede Eingabe verwenden werden. Meine Anwendung tut genau das und funktioniert nicht. Was vermisse ich?
Ich habe den Weg gefunden, also, falls es jemanden interessiert, hier ist, wie es geht:
Wenn Sie mehr als eine Eingabe haben, müssen Sie die Eingaben, die Sie nicht signieren möchten, nicht entfernen, Sie müssen nur ihre Skripts entfernen . Wenn Sie also die in der Frage gepostete Transaktion signieren möchten, würde der erste Hash wie folgt berechnet:
'version': 1,
'inputs': (2)
{
'output_tx_hash': 'aaaa',
'output_position': 0,
'script': the original script, like: '76a914' + hash + '88ac',
'sequence': ffffffff,
}, {
'output_tx_hash': 'bbbb',
'output_position': 1,
'script': '', # Nothing
'sequence': ffffffff,
}
'outputs': (1)
'value' : 100000
'script' : '76a914' + hash of btc pub key + '88ac'
'locktime': 0
Und der zweite Hash:
'version': 1,
'inputs': (2)
{
'output_tx_hash': 'aaaa',
'output_position': 0,
'script': '', # Nothing
'sequence': ffffffff,
}, {
'output_tx_hash': 'bbbb',
'output_position': 1,
'script': the original script, like: '76a914' + hash + '88ac',
'sequence': ffffffff,
}
'outputs': (1)
'value' : 100000
'script' : '76a914' + hash of btc pub key + '88ac'
'locktime': 0
Hoffe, es hilft jemandem.
Bei mir hat es auch funktioniert.
Du musst nur
1) Verfassen Sie signierbar für die erste Eingabe, mit einer Zeichenfolge der Länge Null als Skript für alle Eingaben außer der signierten
2) Signieren Sie die erste Eingabe mit der Kodierung von signed signable from 1.
3) Führen Sie die gleiche Operation an jedem Eingang durch
Ja, das funktioniert, aber pass auf, wenn es sagt
'script': '' # Nothing
Sie sollten dort eigentlich ein 0x00 platzieren. Sobald ich das getan hatte, gelang es mir erfolgreich, meine Transaktion mit mehreren Eingaben zu übertragen. Anfangs hatte ich buchstäblich nichts dort (kein einziges Byte), was nicht funktionieren wird.
Klaris
Jimmy Lied
Nathan Parker