Allow replacing pending transactions #846
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What I did
Add the
TransactionReceipt.replace
method for replacing pending transactions.Closes #726
How I did it
The logic flow for creating a
TransactionReceipt
had to be modified slightly. Creating the object is now optionally-blocking via theis_blocking
kwarg (this had to be done to avoid making a breaking change). When broadcasting, the object is initially created via a non-blocking call, then added tohistory
, then ifrequired_confs
is non-zero it callswait
to block until the necessary confirmations. By using this approach, each tx object is added to history immediately, so that users canCTRL-C
and still access the pending the tx.Replacement happens via
TransactionReceipt.replace
which accepts either anincrement
modifier orgas_price
absolute and returns a new tx object.As soon as any one transaction confirms, the other tx's are marked with status
-2
(dropped) and removed fromhistory
.How to verify it
This is difficult to write tests for. I've played with it a fair bit on the mainnet and everything seems to work, but unfortunately I think the only real test here is to release and solve bugs are they appear.