Как я могу создать необработанную транзакцию в шестнадцатеричном формате с помощью Bitcoinj?

Как я могу создать необработанную транзакцию, когда мне предоставлены входные сценарии, входные индексы, входные txids, выходной сценарий, выходной адрес и выходная сумма? Приведенный ниже метод работает, но требует, чтобы метод Transaction setHash был общедоступным, а это не так. Могу ли я получить то, что хочу, не внося никаких изменений в Bitcoinj?

    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());
Что такое inputScript и txid?

Ответы (1)

Не создавайте всю родительскую транзакцию, просто создавайте конечную точку, и это все, что нужно для кодирования транзакции в шестнадцатеричный формат. В частности, используйте этот конструктор

РЕДАКТИРОВАТЬ: В частности, невозможно воссоздать родительскую транзакцию, если у вас нет ВСЕЙ соответствующей информации для этой транзакции (входы, время блокировки, выходы и т. д.). Чтобы использовать конструктор, который я связал ниже, вам также нужно будет указать выходной индекс вывода, который вы тратите на свою родительскую транзакцию.