Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

wallet/wallet: remove invalid transactions when broadcast fails #597

Merged
merged 3 commits into from Mar 9, 2019

Conversation

@wpaulino
Copy link
Contributor

@wpaulino wpaulino commented Feb 20, 2019

In this commit, we rework how publishTransaction works in order to correctly handle removing invalid transactions from the wallet's unconfirmed transaction store. This is crucial as otherwise, invalid transactions can remain within the wallet and be used for further transactions, causing a chain of inaccurate transactions.

publishTransaction will now only return an error if the transaction fails to be broadcast and it has not been previously seen in the mempool/chain. This is intended in order to provide an easier API to callers. Any other errors when broadcasting the transaction will cause it to be removed from the wallet's unconfirmed transaction store to ensure it maintains an accurate view of the chain.

wpaulino added 3 commits Feb 20, 2019
We do this in order to be able to reuse the new publishTransaction
method within other parts of the wallet in order to consolidate all
error string-matching within one place.
In this commit, we rework how publishTransaction works in order to
correctly handle removing invalid transactions from the wallet's
unconfirmed transaction store. This is crucial as otherwise, invalid
transactions can remain within the wallet and be used for further
transactions, causing a chain of inaccurate transactions.

publishTransaction will now only return an error if the transaction
fails to be broadcast and it has not been previously seen in the
mempool/chain. This is intended in order to provide an easier API to
callers. Any other errors when broadcasting the transaction will cause
it to be removed from the wallet's unconfirmed transaction store to
ensure it maintains an accurate view of the chain.
By doing this, we defer all error string-matching to happen within
publishTransaction, which allows us to simplify some of the existing
logic and maintain consistency.
Copy link
Member

@Roasbeef Roasbeef left a comment

Nice work tracking this down! My only gripe is that I'd like to be able to test this more extensively, but doing so would require a more integrated testing harness for the wallet. However, we might be able to create something minimal using the existing lnwallet itests.

if err != nil {
// If the transaction has already been accepted into the

This comment has been minimized.

@Roasbeef

Roasbeef Mar 9, 2019
Member

Yay code deletion!

@Roasbeef Roasbeef merged commit 25804bf into btcsuite:master Mar 9, 2019
1 check passed
1 check passed
continuous-integration/travis-ci/pr The Travis CI build passed
Details
@wpaulino wpaulino deleted the wpaulino:tx-broadcast-err-handling branch Mar 9, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

2 participants