Как я могу создать необработанную транзакцию, когда мне предоставлены входные сценарии, входные индексы, входные 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());
Не создавайте всю родительскую транзакцию, просто создавайте конечную точку, и это все, что нужно для кодирования транзакции в шестнадцатеричный формат. В частности, используйте этот конструктор
РЕДАКТИРОВАТЬ: В частности, невозможно воссоздать родительскую транзакцию, если у вас нет ВСЕЙ соответствующей информации для этой транзакции (входы, время блокировки, выходы и т. д.). Чтобы использовать конструктор, который я связал ниже, вам также нужно будет указать выходной индекс вывода, который вы тратите на свою родительскую транзакцию.
Паван Маурья