After some debugging, I can now see that the maybeCommit function doesn't work as I thought it would.
The behaviour I was observing seems to be done on purpose: it is possible to commit two conflicted transactions. Since it is kind of counter-intuitive, maybe adding a note to the javadoc would help? Andreas, would you be willing to consider a PR adding a failOnConflict boolean to the maybeCommit function? Something like that: /** * Calls {@link Wallet#commitTx} if tx is not already in the pending pool * * @param tx The transaction which is being committed to the wallet * @param failOnConflict If true, an attempt at committing a transaction that double spends an existing pending * tx will fail. Otherwise the tx will be added to the wallet and to the pending pool, * and conflicting txes will have their status updated to {@link ConfidenceType#IN_CONFLICT} * @return true if the tx was added to the wallet, or false otherwise if it was already in the pending pool * @throws VerificationException */ public boolean maybeCommitTx(Transaction tx, Boolean failOnConflict) throws VerificationException { Or can you recommend some other way of achieving the same goal? Cheers, Pierre Le mardi 29 août 2017 23:11:39 UTC+2, Pierre a écrit : > > > This is a follow up to https://github.com/bitcoinj/bitcoinj/issues/1442. > > > A while ago we added a new confidence type, IN_CONFLICT. That means two > (or more?) pending transactions are in conflict and not all of them will be > confirmed (but all of them *could*). I assume this is what you're seeing. > To be sure, have a look at the transaciton confidence of tx1 and tx2 after > your program run. And also maybe test this on master and on release-0.14? > > Yes the confidence of both transactions is indeed IN_CONFLICT, but this is > actually what I wanted to avoid. My question was really: why doesn't the > second wallet.maybeCommitTx(tx2) return false? Isn't that the whole purpose > of this function? > > Context: we use this in the Eclair implementation of the Lightning > network. When creating a channel, one party needs to first build a "funding > tx", then exchange some information with the other party (mainly: build a > cross signed tx that spends the not-yet-published funding tx), which takes > time and opens a window for concurrency issues when several channels are > created at the same time. What I was hoping is that I would know, before > publishing the second tx, that its input was already spent, so I could > cleanly handle this instead of just waiting for one of the txes to > eliminate the other one. > > Thanks, > > Pierre > -- You received this message because you are subscribed to the Google Groups "bitcoinj" group. To unsubscribe from this group and stop receiving emails from it, send an email to bitcoinj+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.