如何使用 BitcoinJ 创建 Replace-By-Fee TX

How to create Replace-By-Fee TX with BitcoinJ

首先在 BitcoinJ FrameWork 中面临无穷无尽的待处理交易

主文档说可以用Replace-By-Fee来制作。因此,您需要使用旧交易并创建一个新交易,但要基于之前的交易。

听起来不错,但使用 Bitcoinj 框架再创建一个有多正确?

NetworkParameters params = MainNetParams.get();

WalletAppKit wallet = new WalletAppKit(params, new File("."), "_mywallet");
walletKit.startAsync();
walletKit.awaitRunning();

Wallet wallet = walletKit.wallet();

... 有一个待处理

ArrayList<Transaction> pendingList = new ArrayList<>(wallet.getPendingTransactions());
Transaction nextTx = new Transaction(pendingList.get(0));
// → throws Exeption

好的,所以我解决了。

当您有无限待处理的交易时,您首先需要做的是确保它被标记为“按费用替换”,您可以通过调用来完成此操作:

ArrayList<Transaction> pendingList = new ArrayList<>(wallet.getPendingTransactions());

pendingList.get(0).verify(); // Read console to see transaction info

之后需要使用下面的代码来实现费用替换算法:

Transaction transaction = pendingList.get(0);
SendRequest request = SendRequest.forTx(transaction);
request.feePerKb = Transaction.REFERENCE_DEFAULT_MIN_TX_FEE; // Or you can make other highter fee to spped it up

wallet.completeTx(request);
wallet.commitTx(request);

在输出中,你会看到更多的TransactionOutputs in this Transaction details。

就是这样