Wie kann ich mit Bitcoinj eine Rohtransaktion im Hex-Format erstellen?

Wie kann ich eine Rohtransaktion erstellen, wenn ich die Eingabeskripte, Eingabeindizes, Eingabe-TXIDs, Ausgabeskript, Ausgabeadresse und Ausgabemenge erhalten habe? Die folgende Methode funktioniert, erfordert jedoch, dass die Methode Transaction setHash öffentlich ist, was nicht der Fall ist. Kann ich bekommen, was ich will, ohne Änderungen an Bitcoinj vornehmen zu müssen?

    NetworkParameters params = MainNetParams.get();
    Transaction tx = new Transaction(params);
    tx.addOutput(Coin.ZERO, new Script(HEX.decode(outputScript)));
    try {
        Address addr = new Address(params, toAddress);
        tx.addOutput(Coin.valueOf(toAmount), addr);
    } catch (AddressFormatException name) {
        return null;
    }

    Script script = new Script(HEX.decode(inputScript));
    Address addr = new Address(params, script.getPubKeyHash());

    Transaction parentTx = new Transaction(params);
    for (int j = 0; j < inputIndex; j++) {
        parentTx.addOutput(new TransactionOutput(params, parentTx, Coin.ZERO, addr));
    }
    parentTx.addOutput(new TransactionOutput(params, parentTx, Coin.ZERO, addr));
    parentTx.setHash(Sha256Hash.wrap(txid)); // requires setHash method to be public
    try {
        ECKey key = new DumpedPrivateKey(params, privateKey).getKey();
        tx.addSignedInput(parentTx.getOutput(inputIndex), key);
    } catch (AddressFormatException name) {
        return null;
    }
    return HEX.encode(tx.bitcoinSerialize());
Was ist inputScript und txid?

Antworten (1)

Erstellen Sie nicht die gesamte übergeordnete Transaktion, sondern nur den Endpunkt, der alles ist, was für die Kodierung einer Transaktion in Hex relevant ist. Verwenden Sie speziell diesen Konstruktor

BEARBEITEN: Genauer gesagt, kann die übergeordnete Transaktion nicht neu erstellt werden, es sei denn, Sie haben ALLE relevanten Informationen für diese Transaktion (Eingänge, Sperrzeit, Ausgänge usw.). Um den unten verlinkten Konstruktor zu verwenden, müssen Sie auch den Ausgabeindex der Ausgabe angeben, die Sie für Ihre übergeordnete Transaktion ausgeben.