Ich habe es geschafft, mit Bitcoinj einen Roh-TX zu erstellen, konnte aber nicht herausfinden, wie ich seine Signaturen verifizieren kann. Angenommen, ich kenne die Adressen, die den (angeblich) nicht verbrauchten Ausgängen entsprechen, die als Eingänge für den Tx verwendet werden, was ist der einfachste Weg, den Tx zu überprüfen?
Sie interessieren sich für die folgenden API-Aufrufe:
public List<TransactionInput> Transaction.getInputs()
public Script TransactionInput.getScriptSig() throws ScriptException
public void Script.correctlySpends(Transaction txContainingThis, long scriptSigIndex, Script scriptPubKey)
Verwenden Sie sie wie folgt:
Transaction tx = ...
List<TransactionInput> inputs = tx.getInputs();
for(int i = 0; i < inputs.size(); i++) {
TransactionInput input = inputs.get(i);
Script scriptSig = input.getScriptSig();
Script scriptPubKey = ...
scriptSig.correctlySpends(tx, i, scriptPubKey);
}
Das Knifflige ist, scriptPubKey zu bekommen. Wenn Sie die Transaktionen, die Sie ausgeben, im Speicher haben, ist es so einfach wieinput.getConnectedOutput().getScriptPubKey();
Wenn dies nicht der Fall ist, können Sie eine fundierte Vermutung anstellen, indem Sie die Adresse in einen P2PKH -SkriptPubKey konvertieren.
public static Script ScriptBuilder.createOutputScript(Address to)
Dies schafft einen Grenzfall, in dem jemand versucht, eine P2PK-Ausgabe auszugeben , die scheinbar falsch mit Ihrem Programm signiert ist. (Beide werden durch Adressen repräsentiert.)
correctlySpends
erfordert einen vierten booleschen Parameter ( enforceP2SH
). Was ist das?I tried to upgrade but it breaks my code (requires some refactoring)
Ah, fair genug. Are there any serious issues in using 0.11?
Nun, die Leute im Internet werden davon ausgehen, dass Sie die neueste Version verwenden. :) Aber mir fällt nichts Konkretes ein.
Amaclin