Commit graph

2857 commits

Author SHA1 Message Date
Andrew Poelstra
c8459659ed Merge 3657aee2d2 into merged_master (Bitcoin PR #18982) 2020-11-26 01:08:56 +00:00
Andrew Poelstra
ab6a586b75 Merge 5879bfa9a5 into merged_master (Bitcoin PR #18792) 2020-11-26 01:08:56 +00:00
Andrew Poelstra
b196763cb6 Merge 082a417abc into merged_master (Bitcoin PR #18635) 2020-11-26 01:08:51 +00:00
Andrew Poelstra
5b9754580e Merge 55b4c65bd1 into merged_master (Bitcoin PR #16127) 2020-11-26 01:08:51 +00:00
Andrew Poelstra
d38085da61 Merge 520e435b5e into merged_master (Bitcoin PR #18918) 2020-11-26 01:08:51 +00:00
Andrew Poelstra
c4f517db76 Merge dcacea096e into merged_master (Bitcoin PR #19032)
This finally retires the old serialization framework, so I had to implement
the new serialization for all the Elements types. So there's a fair bit of
new code here but it's all straightforward rearrangements of the old code.
Was able to remove some const casts which was nice.
2020-11-26 01:08:50 +00:00
Andrew Poelstra
29b17c1221 Merge 793e0ff22c into merged_master (Bitcoin PR #18698) 2020-11-26 01:08:49 +00:00
Andrew Poelstra
5dcf991eba Merge df303ceb65 into merged_master (Bitcoin PR #18787) 2020-11-26 01:08:49 +00:00
Andrew Poelstra
5800ec9196 Merge ccd85b57af into merged_master (Bitcoin PR #17681) 2020-11-26 01:08:48 +00:00
Andrew Poelstra
d0b2badc94 Merge ad3a61c5f5 into merged_master (Bitcoin PR #18895) 2020-11-26 01:08:48 +00:00
Andrew Poelstra
e1392efa4f Merge 9abed46871 into merged_master (Bitcoin PR #16946) 2020-11-26 01:08:48 +00:00
Andrew Poelstra
51965ad1e6 Merge 25ad2c623a into merged_master (Bitcoin PR #18740) 2020-11-26 01:08:47 +00:00
Andrew Poelstra
e3ffc21621 Merge 4dd2e5255a into merged_master (Bitcoin PR #18946) 2020-11-26 01:08:44 +00:00
Andrew Poelstra
947570a389 Merge 51825aea7f into merged_master (Bitcoin PR #18922) 2020-11-26 01:08:43 +00:00
Andrew Poelstra
c0617d43b4 Merge a33901cb6d into merged_master (Bitcoin PR #18814) 2020-11-26 01:08:42 +00:00
Andrew Poelstra
530a413055 Merge 219c55da75 into merged_master (Bitcoin PR #16710) 2020-11-26 01:08:42 +00:00
Andrew Poelstra
f32fd217a5 Merge ec4d27fa8b into merged_master (Bitcoin PR #18216) 2020-11-26 01:08:40 +00:00
Andrew Poelstra
1d1a32e637 Merge 5b24f6084e into merged_master (Bitcoin PR #16224) 2020-11-26 01:08:40 +00:00
Andrew Poelstra
b7d3244d47 Merge 88b2652fad into merged_master (Bitcoin PR #18853) 2020-11-26 01:08:39 +00:00
Andrew Poelstra
e5faae4af6 Merge 60091d20f9 into merged_master (Bitcoin PR #9381) 2020-11-26 01:08:38 +00:00
Andrew Poelstra
5a58efd0a5 Merge ec79b5f86b into merged_master (Bitcoin PR #18782) 2020-11-26 01:08:37 +00:00
Andrew Poelstra
d4711bdf91 Merge 23c926d859 into merged_master (Bitcoin PR #18699) 2020-11-26 01:08:37 +00:00
Andrew Poelstra
c0fda0cc05 Merge ddc0a600b3 into merged_master (Bitcoin PR #18617)
For reasons I do not really grok, this PR changes the timing behavior of the
functional tests to reliably expose a deadlock in the claimpegin RPC that has
existed since the 0.17 rebase.

The mechanism is: in `claimpegin` in src/wallet/rpcwallet.cpp:5873, we call
`AcceptToMemoryPoolWorker`. This requires cs_main to be locked, which it is
not (contrast Core's `testmempoolaccept` RPC, which similarly calls
`AcceptToMemoryPoolWorker` from the RPC thread, and locks cs_main immediately
before).

We do *say* that it is locked, in the `LockAssertion` one the line above, but
this was added in ad3d496d78 during the 0.17
rebase (PR #620), apparently to shut up some linter on OSX, and as near as I
can tell it was never true.

Anyway, `AcceptToMemoryPoolWorker` calls through a couple layers which assume
cs_main is locked, to `AcceptSingleTransaction`, which locks m_pool.cs on line
src/validation.cpp:1101. It then calls `PreChecks`, which on line 784 calls
::ChainActive(), which _actually_ locks cs_main, though only briefly. This
line is the deadlock, because we locked m_pool.cs followed by cs_main...

...meanwhile, in src/net_processing.cpp, we lock cs_main at the top of the
`PeerLogicValidation::SendMessages` loop (src/net_processing.cpp:3628). In the
same loop, in the `feefilter` message processing, we call CTxMemPool::GetMinFee
(src/net_processing.cpp:4137), which locks m_pool.cs. Deadlock.

Anyway, that explains the change to locking behavior that I added to an
otherwise test-only PR.
2020-11-26 01:08:36 +00:00
Andrew Poelstra
4414990576 Merge 608359b071 into merged_master (Bitcoin PR #16426) 2020-11-26 01:08:35 +00:00
Andrew Poelstra
5ae752cb8f Merge 0f204dd3f2 into merged_master (Bitcoin PR #18727) 2020-11-26 01:08:34 +00:00
Andrew Poelstra
e5f1b2cdaa Merge 0ef0d33f75 into merged_master (Bitcoin PR #18038) 2020-11-26 01:08:33 +00:00
Andrew Poelstra
91aca85a2a Merge 8bdb2134fc into merged_master (Bitcoin PR #18777) 2020-11-26 01:08:31 +00:00
Andrew Poelstra
1c12ae1719 Merge eef90c14ed into merged_master (Bitcoin PR #16528)
This is the 43-commit descriptor wallet PR. It was remarkably easy to merge, given
its magnitude. With this commit Elements supports importing Bitcoin descriptors
and deriving (Bitcoin) addresses, though of course it does not support blinding
yet. That is a post-rebase project.

The material changes were:

1. Changing constants in the tests (super annoying but nothing surprising)

2. Adding a missing "skip if this coin is not ours" check in src/script/sign.cpp
   which was causing us to erroneously remove existing witnesses from transactions.
   This wasn't a problem before this commit since we would only ask specific
   scriptpubkeymans to sign, and we'd never ask any to sign inputs we didn't
   own. Andy simplified the logic here to always try every scriptpubkeyman,
   which means they have to play a bit more nicely with each other.

Other than that, this was a big diff with many conflicts but literally all of
them were "we both added code" and the resolution was to take both sides.
2020-11-26 01:08:31 +00:00
Andrew Poelstra
6990af3107 Merge e890c15e2c into merged_master (Bitcoin PR #18671) 2020-11-26 01:08:28 +00:00
Andrew Poelstra
873db53fe3 Merge 3be119c0f6 into merged_master (Bitcoin PR #17579) 2020-11-26 01:08:26 +00:00
Andrew Poelstra
569c68a0f2 Merge f8102d9088 into merged_master (Bitcoin PR #18601) 2020-11-26 01:08:25 +00:00
Andrew Poelstra
b7307be8cd Merge b470c75847 into merged_master (Bitcoin PR #15761) 2020-11-26 01:08:25 +00:00
Andrew Poelstra
9192999921 Merge bbb1ba1814 into merged_master (Bitcoin PR #17219)
This modifies the CreateTransaction loop in a way not remotely worth the complexity,
and includes an absurdly fragile test where I had to add a bunch of trace statements
and tweak pretty-much every single hardcoded number. Not to name names, but it was
Sjors. (In fairness, the PR is a pure simplification of the CreateTransaction logic,
and it wasn't hard to merge even. It was just the test that caused my grief.)

Adapting the "use a dummy CTxDestination in the case that we cannot retrieve one from
the wallet" logic to our `mapScriptChange` map was not trivial. On my first attempt I
incorrectly assigned a positive vout index to the dummy script, which caused us to
call `ReturnDestination` later on the (unused) dummy destination. This is harmless now,
but when descriptor wallets are introduced in #16528, they introduce an edge case where
returning a null destination can incorrectly mark the 0th key of a BIP32 range as
unused. This triggered a test failure much later, in #19504, which uses descriptor
wallets in fundrawtransaction. The bug was that we'd import a descriptor, mark the
first key as being used, lock the wallet, call `fundrawtransaction` on a transaction
that did not require change (incorrectly marking the first key as unused but leaving
it in the descriptor ScriptPubKeyMan's cache), then call `fundrawtransaction` again
on a transaction that *did* require change. The wallet would then incorrectly retrieve
the "unused" key from cache and use it for change, rather than correctly failing and
advising the user that it could not produce change with a locked wallet and empty
keypool. This was not a fun bug to track down.

Another interesting observation is that branch-and-bound uses the CT size-overestimate
for change when trying to create changeless outputs, while our normal dust detection
uses Core's unchanged "an output is 133 bytes" logic. So when BnB is used we're willing
to delete a far bigger change output than we are when we don't use BnB.

Lest you think this works in Core, they're also inconsistent because BnB uses a
normal fee estimate for gauging change cost, while non-BnB uses the discardfee rate.

My advice is to hold your nose, pull stuff in from Core as it comes in, and thanks
to Andy's efforts things are getting better. Don't bother reviewing this too closely.
2020-12-03 00:58:01 +00:00
Andrew Poelstra
86082b9846 Merge 244daa4821 into merged_master (Bitcoin PR #18607) 2020-11-26 01:08:23 +00:00
Andrew Poelstra
fd37b7c5d6 Merge 54f812d9d2 into merged_master (Bitcoin PR #18673) 2020-11-26 01:08:23 +00:00
Andrew Poelstra
a1367df7d3 Merge c2e53ff064 into merged_master (Bitcoin PR #18467) 2020-11-26 01:08:23 +00:00
Andrew Poelstra
7acaa0481b Merge c189bfd260 into merged_master (Bitcoin PR #17824) 2020-11-26 01:08:22 +00:00
Andrew Poelstra
4b58cd7c0a Merge 0856c15706 into merged_master (Bitcoin PR #18262) 2020-11-26 01:08:22 +00:00
Andrew Poelstra
23cab4213a Merge 4702cadca9 into merged_master (Bitcoin PR #17954) 2020-11-26 01:08:19 +00:00
Andrew Poelstra
f72cf74cb7 Merge d5783985eb into merged_master (Bitcoin PR #18502) 2020-11-26 01:08:18 +00:00
Andrew Poelstra
9ce236f051 Merge 10358a381a into merged_master (Bitcoin PR #17737) 2020-11-26 01:08:16 +00:00
Andrew Poelstra
e978e137dd Merge 4eb1eeb02c into merged_master (Bitcoin PR #18504) 2020-11-26 01:08:16 +00:00
Andrew Poelstra
c8909955fa Merge 1b151e3ffc into merged_master (Bitcoin PR #18532) 2020-11-26 01:08:13 +00:00
Andrew Poelstra
0a87d878fa Merge 63dad67348 into merged_master (Bitcoin PR #18546) 2020-11-26 01:08:12 +00:00
Andrew Poelstra
879cfb6ad8 Merge c5966a87d1 into merged_master (Bitcoin PR #18192) 2020-11-26 01:08:11 +00:00
Andrew Poelstra
09ced2d1f2 Merge 75021e80ee into merged_master (Bitcoin PR #18487) 2020-11-26 01:08:11 +00:00
Andrew Poelstra
04bbdf241a Merge c8971547d9 into merged_master (Bitcoin PR #18499) 2020-11-26 01:08:09 +00:00
Andrew Poelstra
44f30e687f Merge 6bdd515ccf into merged_master (Bitcoin PR #16923) 2020-11-26 01:08:08 +00:00
Andrew Poelstra
6fae461783 Merge 9a2b5f22c1 into merged_master (Bitcoin PR #18338) 2020-11-26 01:08:06 +00:00
Andrew Poelstra
55e75466a4 Merge b47d087356 into merged_master (Elements PR #843)
Fixes the change-size estimation bug that I fixed in #17290, though incompletely
(Steven made up a size for the surjection proof which was different from the
size that I made up....this time I actually checked with libsecp to get an upper
bound.) He also found another place we were doing the wrong estimation, which
I had missed on my pass. So between the two of us I think we've done some good.

Also moves some which sets code coin_selection_params.tx_noinputs_size to after
some Elements sanity checks, which I think will have zero observable effect
(or non-observable effect) but it's part of the PR so I'm keeping it. Though
updated since we can now use BnB even with subtract-fee-from-output.
2020-11-26 01:08:05 +00:00