0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-10 10:52:31 -05:00
Commit graph

23090 commits

Author SHA1 Message Date
Andrew Chow
a8f69541ad
Merge bitcoin/bitcoin#25748: refactor: Avoid copies in FlatSigningProvider Merge
fa3f15f2dd refactor: Avoid copies in FlatSigningProvider Merge (MacroFake)

Pull request description:

  `Merge` will create several copies unconditionally:
  * To initialize the args `a`, and `b`
  * `ret`, which is the merge of the two args

  So change the code to let the caller decide how many copies they need/want:
  * `a`, and `b` must be explicitly moved or copied by the caller
  * `ret` is no longer needed, as `a` can be used for it in place "for free"

ACKs for top commit:
  achow101:
    ACK fa3f15f2dd
  furszy:
    looks good, ACK fa3f15f2
  ryanofsky:
    Code review ACK fa3f15f2dd. Confirmed that all the places `std::move` was added the argument actually did seem safe to move from. Compiler enforces that temporary copies are explicitly created in non-move cases.

Tree-SHA512: 7c027ccdea1549cd9f37403344ecbb76e008adf545f6ce52996bf95e89eb7dc89af6cb31435a9289d6f2eea1c416961b2fb96348bc8a211d550728f1d99ac49c
2022-08-17 17:57:33 -04:00
w0xlt
416ceb8661 descriptor: check if rawtr has only one key. 2022-08-17 13:54:51 -03:00
fanquake
a75b7796b7
Merge bitcoin/bitcoin#25077: Fix chain tip data race and corrupt rest response
fac04cb6ba refactor: Add lock annotations to Active* methods (MacroFake)
fac15ff673 Fix logical race in rest_getutxos (MacroFake)
fa97a528d6 Fix UB/data-race in RPCNotifyBlockChange (MacroFake)
fa530bcb9c Add ChainstateManager::GetMutex(), an alias for ::cs_main (MacroFake)

Pull request description:

  This fixes two issues:

  * A data race in `ActiveChain`, which returns a reference to the chain (a `std::vector`), which is not thread safe. See also below traceback.
  * A corrupt rest response, which returns a blockheight and blockhash, which are unrelated to each other and to the result, as the chain might advance between each call without cs_main held.

  The issues are fixed by taking cs_main and holding it for the required time.

  ```
  ==================
  WARNING: ThreadSanitizer: data race (pid=32335)
    Write of size 8 at 0x7b3c000008f0 by thread T22 (mutexes: write M131626, write M151, write M131553):
      #0 std::__1::enable_if<(is_move_constructible<CBlockIndex**>::value) && (is_move_assignable<CBlockIndex**>::value), void>::type std::__1::swap<CBlockIndex**>(CBlockIndex**&, CBlockIndex**&) /usr/lib/llvm-13/bin/../include/c++/v1/__utility/swap.h:39:7 (bitcoind+0x501239)
      #1 std::__1::vector<CBlockIndex*, std::__1::allocator<CBlockIndex*> >::__swap_out_circular_buffer(std::__1::__split_buffer<CBlockIndex*, std::__1::allocator<CBlockIndex*>&>&) /usr/lib/llvm-13/bin/../include/c++/v1/vector:977:5 (bitcoind+0x501239)
      #2 std::__1::vector<CBlockIndex*, std::__1::allocator<CBlockIndex*> >::__append(unsigned long) /usr/lib/llvm-13/bin/../include/c++/v1/vector:1117:9 (bitcoind+0x501239)
      #3 std::__1::vector<CBlockIndex*, std::__1::allocator<CBlockIndex*> >::resize(unsigned long) /usr/lib/llvm-13/bin/../include/c++/v1/vector:2046:15 (bitcoind+0x4ffe29)
      #4 CChain::SetTip(CBlockIndex*) src/chain.cpp:19:12 (bitcoind+0x4ffe29)
      #5 CChainState::ConnectTip(BlockValidationState&, CBlockIndex*, std::__1::shared_ptr<CBlock const> const&, ConnectTrace&, DisconnectedBlockTransactions&) src/validation.cpp:2748:13 (bitcoind+0x475d00)
      #6 CChainState::ActivateBestChainStep(BlockValidationState&, CBlockIndex*, std::__1::shared_ptr<CBlock const> const&, bool&, ConnectTrace&) src/validation.cpp:2884:18 (bitcoind+0x47739e)
      #7 CChainState::ActivateBestChain(BlockValidationState&, std::__1::shared_ptr<CBlock const>) src/validation.cpp:3011:22 (bitcoind+0x477baf)
      #8 node::ThreadImport(ChainstateManager&, std::__1::vector<fs::path, std::__1::allocator<fs::path> >, ArgsManager const&) src/node/blockstorage.cpp:883:30 (bitcoind+0x23cd74)
      #9 AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7::operator()() const src/init.cpp:1657:9 (bitcoind+0x15863e)
      #10 decltype(static_cast<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&>(fp)()) std::__1::__invoke<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&>(AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&) /usr/lib/llvm-13/bin/../include/c++/v1/type_traits:3918:1 (bitcoind+0x15863e)
      #11 void std::__1::__invoke_void_return_wrapper<void, true>::__call<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&>(AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&) /usr/lib/llvm-13/bin/../include/c++/v1/__functional/invoke.h:61:9 (bitcoind+0x15863e)
      #12 std::__1::__function::__alloc_func<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7, std::__1::allocator<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>, void ()>::operator()() /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:171:16 (bitcoind+0x15863e)
      #13 std::__1::__function::__func<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7, std::__1::allocator<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>, void ()>::operator()() /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:345:12 (bitcoind+0x15863e)
      #14 std::__1::__function::__value_func<void ()>::operator()() const /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:498:16 (bitcoind+0x88891f)
      #15 std::__1::function<void ()>::operator()() const /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:1175:12 (bitcoind+0x88891f)
      #16 util::TraceThread(char const*, std::__1::function<void ()>) src/util/thread.cpp:18:9 (bitcoind+0x88891f)
      #17 decltype(static_cast<void (*>(fp)(static_cast<char const*>(fp0), static_cast<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>(fp0))) std::__1::__invoke<void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>(void (*&&)(char const*, std::__1::function<void ()>), char const*&&, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&&) /usr/lib/llvm-13/bin/../include/c++/v1/type_traits:3918:1 (bitcoind+0x157e6a)
      #18 void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7, 2ul, 3ul>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>&, std::__1::__tuple_indices<2ul, 3ul>) /usr/lib/llvm-13/bin/../include/c++/v1/thread:280:5 (bitcoind+0x157e6a)
      #19 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7> >(void*) /usr/lib/llvm-13/bin/../include/c++/v1/thread:291:5 (bitcoind+0x157e6a)
    Previous read of size 8 at 0x7b3c000008f0 by main thread:
      #0 std::__1::vector<CBlockIndex*, std::__1::allocator<CBlockIndex*> >::size() const /usr/lib/llvm-13/bin/../include/c++/v1/vector:680:61 (bitcoind+0x15179d)
      #1 CChain::Tip() const src/./chain.h:449:23 (bitcoind+0x15179d)
      #2 ChainstateManager::ActiveTip() const src/./validation.h:927:59 (bitcoind+0x15179d)
      #3 AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*) src/init.cpp:1841:35 (bitcoind+0x15179d)
      #4 AppInit(node::NodeContext&, int, char**) src/bitcoind.cpp:231:43 (bitcoind+0x133fd2)
      #5 main src/bitcoind.cpp:275:13 (bitcoind+0x133fd2)
    Location is heap block of size 232 at 0x7b3c00000870 allocated by main thread:
      #0 operator new(unsigned long) <null> (bitcoind+0x132668)
      #1 ChainstateManager::InitializeChainstate(CTxMemPool*, std::__1::optional<uint256> const&) src/validation.cpp:4851:21 (bitcoind+0x48e26b)
      #2 node::LoadChainstate(bool, ChainstateManager&, CTxMemPool*, bool, Consensus::Params const&, bool, long, long, long, bool, bool, std::__1::function<bool ()>, std::__1::function<void ()>) src/node/chainstate.cpp:31:14 (bitcoind+0x24de07)
      #3 AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*) src/init.cpp:1438:32 (bitcoind+0x14e994)
      #4 AppInit(node::NodeContext&, int, char**) src/bitcoind.cpp:231:43 (bitcoind+0x133fd2)
      #5 main src/bitcoind.cpp:275:13 (bitcoind+0x133fd2)
    Mutex M131626 (0x7b3c00000898) created at:
      #0 pthread_mutex_lock <null> (bitcoind+0xda898)
      #1 std::__1::mutex::lock() <null> (libc++.so.1+0x49f35)
      #2 node::ThreadImport(ChainstateManager&, std::__1::vector<fs::path, std::__1::allocator<fs::path> >, ArgsManager const&) src/node/blockstorage.cpp:883:30 (bitcoind+0x23cd74)
      #3 AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7::operator()() const src/init.cpp:1657:9 (bitcoind+0x15863e)
      #4 decltype(static_cast<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&>(fp)()) std::__1::__invoke<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&>(AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&) /usr/lib/llvm-13/bin/../include/c++/v1/type_traits:3918:1 (bitcoind+0x15863e)
      #5 void std::__1::__invoke_void_return_wrapper<void, true>::__call<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&>(AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&) /usr/lib/llvm-13/bin/../include/c++/v1/__functional/invoke.h:61:9 (bitcoind+0x15863e)
      #6 std::__1::__function::__alloc_func<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7, std::__1::allocator<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>, void ()>::operator()() /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:171:16 (bitcoind+0x15863e)
      #7 std::__1::__function::__func<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7, std::__1::allocator<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>, void ()>::operator()() /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:345:12 (bitcoind+0x15863e)
      #8 std::__1::__function::__value_func<void ()>::operator()() const /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:498:16 (bitcoind+0x88891f)
      #9 std::__1::function<void ()>::operator()() const /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:1175:12 (bitcoind+0x88891f)
      #10 util::TraceThread(char const*, std::__1::function<void ()>) src/util/thread.cpp:18:9 (bitcoind+0x88891f)
      #11 decltype(static_cast<void (*>(fp)(static_cast<char const*>(fp0), static_cast<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>(fp0))) std::__1::__invoke<void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>(void (*&&)(char const*, std::__1::function<void ()>), char const*&&, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&&) /usr/lib/llvm-13/bin/../include/c++/v1/type_traits:3918:1 (bitcoind+0x157e6a)
      #12 void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7, 2ul, 3ul>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>&, std::__1::__tuple_indices<2ul, 3ul>) /usr/lib/llvm-13/bin/../include/c++/v1/thread:280:5 (bitcoind+0x157e6a)
      #13 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7> >(void*) /usr/lib/llvm-13/bin/../include/c++/v1/thread:291:5 (bitcoind+0x157e6a)
    Mutex M151 (0x55aacb8ea030) created at:
      #0 pthread_mutex_init <null> (bitcoind+0xbed2f)
      #1 std::__1::recursive_mutex::recursive_mutex() <null> (libc++.so.1+0x49fb3)
      #2 __libc_start_main <null> (libc.so.6+0x29eba)
    Mutex M131553 (0x7b4c000042e0) created at:
      #0 pthread_mutex_init <null> (bitcoind+0xbed2f)
      #1 std::__1::recursive_mutex::recursive_mutex() <null> (libc++.so.1+0x49fb3)
      #2 std::__1::__unique_if<CTxMemPool>::__unique_single std::__1::make_unique<CTxMemPool, CBlockPolicyEstimator*, int const&>(CBlockPolicyEstimator*&&, int const&) /usr/lib/llvm-13/bin/../include/c++/v1/__memory/unique_ptr.h:728:32 (bitcoind+0x15c81d)
      #3 AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*) src/init.cpp:1426:24 (bitcoind+0x14e7b4)
      #4 AppInit(node::NodeContext&, int, char**) src/bitcoind.cpp:231:43 (bitcoind+0x133fd2)
      #5 main src/bitcoind.cpp:275:13 (bitcoind+0x133fd2)
    Thread T22 'b-loadblk' (tid=32370, running) created by main thread at:
      #0 pthread_create <null> (bitcoind+0xbd5bd)
      #1 std::__1::__libcpp_thread_create(unsigned long*, void* (*)(void*), void*) /usr/lib/llvm-13/bin/../include/c++/v1/__threading_support:443:10 (bitcoind+0x155e06)
      #2 std::__1:🧵:thread<void (*)(char const*, std::__1::function<void ()>), char const (&) [8], AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7, void>(void (*&&)(char const*, std::__1::function<void ()>), char const (&) [8], AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&&) /usr/lib/llvm-13/bin/../include/c++/v1/thread:307:16 (bitcoind+0x155e06)
      #3 AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*) src/init.cpp:1656:29 (bitcoind+0x150164)
      #4 AppInit(node::NodeContext&, int, char**) src/bitcoind.cpp:231:43 (bitcoind+0x133fd2)
      #5 main src/bitcoind.cpp:275:13 (bitcoind+0x133fd2)
  SUMMARY: ThreadSanitizer: data race /usr/lib/llvm-13/bin/../include/c++/v1/__utility/swap.h:39:7 in std::__1::enable_if<(is_move_constructible<CBlockIndex**>::value) && (is_move_assignable<CBlockIndex**>::value), void>::type std::__1::swap<CBlockIndex**>(CBlockIndex**&, CBlockIndex**&)
  ==================
  ```

  From https://cirrus-ci.com/task/5612886578954240?logs=ci#L4868

ACKs for top commit:
  achow101:
    re-ACK fac04cb6ba
  theStack:
    Code-review ACK fac04cb6ba

Tree-SHA512: 9d619f99ff6373874c7ffe1db20674575605646b4b54b692fb54515a4a49f110a770026d7320ed6dfeaa7976be4cd89e93f821acdbf22c7662bd1c5be0cedcd2
2022-08-17 15:04:14 +01:00
fanquake
0ae0aa251b
Merge bitcoin/bitcoin#24678: Prevent wallet unload on GetWalletForJSONRPCRequest
f59959e381 wallet: Prevent wallet unload on GetWalletForJSONRPCRequest (João Barbosa)

Pull request description:

  Don't extend shared ownership of all wallets to `GetWalletForJSONRPCRequest` scope.

ACKs for top commit:
  achow101:
    ACK f59959e381
  shaavan:
    Code Review ACK f59959e381
  theStack:
    Concept and code-review ACK f59959e381

Tree-SHA512: 7c0294098b5c32acaab8cc6fcf17a581d580ad1a557ba0602a9506074ac035815739afb4a25b3e61be9132535c7fc3ec7ef5137c1dfc9d4078f13663d508ef55
2022-08-17 14:39:50 +01:00
fanquake
95d4744f02
Merge bitcoin/bitcoin#19391: RPC/Mining: Clean out pre-Segwit miner compatibility code
90a5dfa509 RPC/Mining: Clean out pre-Segwit miner compatibility code (Luke Dashjr)

Pull request description:

  This is dead code post-Segwit.

ACKs for top commit:
  achow101:
    ACK 90a5dfa509

Tree-SHA512: 5970aa3548d2a7da7c6e83fb9b910529faab10251b115122cec833bb7d3a54c7cb0714c1a873807be04c7817bb827c7ece1e20e8fa4c907aa58688487d0ec44d
2022-08-17 14:07:41 +01:00
Andrew Chow
f2d00bfe1a wallet: Add CWallet::IsMine(COutPoint)
It is useful to have an IsMine function that can take an outpoint.
2022-08-16 20:17:01 -04:00
Andrew Chow
64f7a1940d
Merge bitcoin/bitcoin#25734: wallet, refactor: #24584 follow-ups
8cd21bb279 refactor: improve readability for AttemptSelection (josibake)
f47ff71761 test: only run test for descriptor wallets (josibake)
0760ce0b9e test: add missing BOOST_ASSERT (josibake)
db09aec937 wallet: switch to new shuffle, erase, push_back (josibake)
b6b50b0f2b scripted-diff: Uppercase function names (josibake)
3f27a2adce refactor: add new helper methods (josibake)
f5649db9d5 refactor: add UNKNOWN OutputType (josibake)

Pull request description:

  This PR is to address follow-ups for #24584, specifically:

  * Remove redundant, hard-to-read code by adding a new `OutputType` and adding shuffle, erase, and push_back methods for `CoinsResult`
  * Add missing `BOOST_ASSERT` to unit test
  * Ensure functional test only runs if using descriptor wallets
  * Improve readability of `AttemptSelection` by removing triple-nested if statement

  Note for reviewers: commit `refactor: add new helper methods` should throw an "unused function warning"; the function is used in the next commit. Also, commit `wallet: switch to new shuffle, erase, push_back` will fail to compile, but this is fixed in the next commit with a scripted-diff. the commits are separate like this (code change then scripted-diff) to improve legibility.

ACKs for top commit:
  achow101:
    ACK 8cd21bb279
  aureleoules:
    ACK 8cd21bb279.
  LarryRuane:
    Concept, code review ACK 8cd21bb279
  furszy:
    utACK 8cd21bb2. Left a small, non-blocking, comment.

Tree-SHA512: a1bbc5962833e3df4f01a4895d8bd748cc4c608c3f296fd94e8afd8797b8d2e94e7bd44d598bd76fa5c9f5536864f396fcd097348fa0bb190a49a86b0917d60e
2022-08-16 20:00:19 -04:00
brunoerg
91497031cb rest: add /deploymentinfo 2022-08-16 19:21:46 -03:00
Jeremy Rubin
0652dc53b2 [BugFix]: Do not allow deserializing PSBT with empty PSBT_OUT_TAP_TREE 2022-08-16 15:21:58 -04:00
Andrew Chow
c336f813b3
Merge bitcoin/bitcoin#25504: RPC: allow to track coins by parent descriptors
a6b0c1fcc0 doc: add releases notes for 25504 (listsinceblock updates) (Antoine Poinsot)
0fd2d14454 rpc: add an include_change parameter to listsinceblock (Antoine Poinsot)
55f98d087e rpc: output parent wallet descriptors for coins in listunspent (Antoine Poinsot)
b724476158 rpc: output wallet descriptors for received entries in listsinceblock (Antoine Poinsot)
55a82eaf91 wallet: allow to fetch the wallet descriptors for a given Script (Antoine Poinsot)

Pull request description:

  Wallet descriptors are useful for applications using the Bitcoin Core wallet as a backend for tracking coins, as they allow to track coins for multiple descriptors in a single wallet. However there is no information currently given for such applications to link a coin with an imported descriptor, severely limiting the possibilities for such applications of using multiple descriptors in a single wallet. This PR outputs the matching imported descriptor(s) for a given received coin in `listsinceblock` (and friends).

  It comes from a need for an application i'm working on, but i think it's something any software using `bitcoind` to track multiple descriptors in a single wallet would have eventually. For instance i'm thinking about the BDK project. Currently, the way to achieve this is to import raw addresses with labels and to have your application be responsible for wallet things like the gap limit.

  I'll add this to the output of `listunspent` too if this gets a few Concept ACKs.

ACKs for top commit:
  instagibbs:
    ACK a6b0c1fcc0
  achow101:
    re-ACK a6b0c1fcc0

Tree-SHA512: 7a5850e8de98b439ddede2cb72de0208944f8cda67272e8b8037678738d55b7a5272375be808b0f7d15def4904430e089dafdcc037436858ff3292c5f8b75e37
2022-08-16 13:08:05 -04:00
Antoine Poinsot
0fd2d14454
rpc: add an include_change parameter to listsinceblock
It's useful for an external application tracking coins to not be limited
by our change detection. For instance, for a watchonly wallet with two
descriptors a transaction from one to the other would be considered a
change output and not be included in the result (if the address was not
generated by this wallet).
2022-08-16 18:33:05 +02:00
MacroFake
fac04cb6ba
refactor: Add lock annotations to Active* methods
This is a refactor, putting the burden to think about thread safety to
the caller. Otherwise, there is a risk that the caller will assume
thread safety where none exists, as is evident in the previous two
commits.
2022-08-16 17:26:40 +02:00
MacroFake
fac15ff673
Fix logical race in rest_getutxos
Calling ActiveHeight() and ActiveTip() subsequently without holding the
::cs_main lock over both calls may result in a height that does not
correspond to the tip due to a race.

Fix this by holding the lock.
2022-08-16 17:26:28 +02:00
MacroFake
fa97a528d6
Fix UB/data-race in RPCNotifyBlockChange
ActiveTip() is *not* thread-safe, as the required ::cs_main lock will be
released as ActiveChainstate() returns.

ActiveTip() is an alias for ActiveChainstate().m_chain.Tip(), so m_chain
may be involved in a data-race (UB).
2022-08-16 17:25:49 +02:00
MacroFake
fa530bcb9c
Add ChainstateManager::GetMutex(), an alias for ::cs_main 2022-08-16 17:25:19 +02:00
Vasil Dimov
59aa54f731
i2p: log "SAM session" instead of "session"
This way the log messages are consistent with "Creating SAM session..."
2022-08-16 13:02:21 +02:00
Vasil Dimov
ae1e97ce86
net: use transient I2P session for outbound if -i2pacceptincoming=0
If not accepting I2P connections, then do not create
`CConnman::m_i2p_sam_session`.

When opening a new outbound I2P connection either use
`CConnman::m_i2p_sam_session` like before or create a temporary one and
store it in `CNode` for destruction later.
2022-08-16 13:02:18 +02:00
Vasil Dimov
a1580a04f5
net: store an optional I2P session in CNode
and destroy it when `CNode::m_sock` is closed.

I2P transient sessions are created per connection (i.e. per `CNode`) and
should be destroyed when the connection is closed. Storing the session
in `CNode` is a convenient way to destroy it together with the connection
socket (`CNode::m_sock`).

An alternative approach would be to store a list of all I2P sessions in
`CConnman` and from `CNode::CloseSocketDisconnect()` to somehow ask the
`CConnman` to destroy the relevant session.
2022-08-16 13:02:17 +02:00
fanquake
cf39913e57
Merge bitcoin/bitcoin#25803: refactor: Drop boost/algorithm/string/replace.hpp dependency
fea75ad3ca refactor: Drop `boost/algorithm/string/replace.hpp` dependency (Hennadii Stepanov)
857526e8cb test: Add test case for `ReplaceAll()` function (Hennadii Stepanov)

Pull request description:

  A new implementation of the `ReplaceAll()` seems enough for all of our purposes.

ACKs for top commit:
  adam2k:
    ACK Tested fea75ad3ca
  theStack:
    Code-review ACK fea75ad3ca

Tree-SHA512: dacfffc9d2bd1fb9f034baf8c045b1e8657b766db2f0a7f8ef7e25ee6cd888f315b0124c54aba7a29ae59186b176ef9868a8b709dc995ea215c6b4ce58e174d9
2022-08-16 09:19:28 +01:00
Andrew Chow
22d96d76ab
Merge bitcoin/bitcoin#25720: p2p: Reduce bandwidth during initial headers sync when a block is found
f6a916683d Add functional test for block announcements during initial headers sync (Suhas Daftuar)
05f7f31598 Reduce bandwidth during initial headers sync when a block is found (Suhas Daftuar)

Pull request description:

  On startup, if our headers chain is more than a day behind current time, we'll pick one peer to sync headers with until our best headers chain is caught up (at that point, we'll try to sync headers with all peers).

  However, if an INV for a block is received before our headers chain is caught up, we'll then start to sync headers from each peer announcing the block.  This can result in doing a big headers sync with many (if not all) of our peers simultaneously, which wastes bandwidth.

  This PR would reduce that overhead by picking (at most) one new peer to try syncing headers with whenever a new block is announced, prior to our headers chain being caught up.

ACKs for top commit:
  LarryRuane:
    ACK f6a916683d
  ajtowns:
    ACK f6a916683d
  mzumsande:
    ACK f6a916683d
  dergoegge:
    Code review ACK f6a916683d
  achow101:
    ACK f6a916683d

Tree-SHA512: 0662000bd68db146f55981de4adc2e2b07cbfda222b1176569d61c22055e5556752ffd648426f69687ed1cc203105515e7304c12b915d6270df8e41a4a0e1eaa
2022-08-15 15:43:41 -04:00
Hennadii Stepanov
6d4889a694
Merge bitcoin-core/gui#598: Avoid recalculating the wallet balance - use model cache
4584d300a4 GUI: remove now unneeded 'm_balances' field from overviewpage (furszy)
050e8b1391 GUI: 'getAvailableBalance', use cached balance if the user did not select UTXO manually (furszy)
96e3264a82 GUI: use cached balance in overviewpage and sendcoinsdialog (furszy)
321335bf02 GUI: add getter for WalletModel::m_cached_balances field (furszy)
e62958dc81 GUI: sendCoinsDialog, remove duplicate wallet().getBalances() call (furszy)

Pull request description:

  As per the title says, we are recalculating the entire wallet balance on different situations calling to `wallet().getBalances()`, when should instead make use of the wallet model cached balance.

  This has the benefits of (1) not spending resources calculating a balance that we already have cached, and (2) avoid blocking the main thread for a long time, in case of big wallets, walking through the entire wallet's tx map more than what it's really needed.

  Changes:

  1) Fix: `SendCoinsDialog` was calling `wallet().getBalances()` twice during `setModel`.
  2) Use the cached balance if the user did not select any UTXO manually inside the wallet model `getAvailableBalance` call.

  -----------------------
  As an extra note, this work born in [#25005](https://github.com/bitcoin/bitcoin/pull/25005) but grew out of scope of it.

ACKs for top commit:
  jarolrod:
    ACK 4584d300a4
  hebasto:
    re-ACK 4584d300a4, only suggested changes and commit message formatting since my [recent](https://github.com/bitcoin-core/gui/pull/598#pullrequestreview-1071268192) review.

Tree-SHA512: 6633ce7f9a82a3e46e75aa7295df46c80a4cd4a9f3305427af203c9bc8670573fa8a1927f14a279260c488cc975a08d238faba2e9751588086fea1dcf8ea2b28
2022-08-15 19:38:17 +01:00
Hennadii Stepanov
867f5fd1b3
Merge bitcoin-core/gui#654: Update source translations for string freeze
fcc0c8448b qt: Update source translations for string freeze (laanwj)

Pull request description:

  Make sure transifex source translations match the ones in the source code after today's string freeze.
  It looks like only one message was added: "Too many external signers
  found".

ACKs for top commit:
  hebasto:
    ACK fcc0c8448b, `make -C src translate` produces zero diff.
  jarolrod:
    ACK fcc0c8448b

Tree-SHA512: 2c2383a6f1ad086e86b7c7d35b9a06c30090a8c9517f93912b64957ec58c95c982d5340f189028717dc876e14ba2344750e3f5d81b522b0cf3d7f4586b8e0cc6
2022-08-15 19:34:51 +01:00
MacroFake
fac09f4f7a
refactor: Remove not needed empty RPC doc std::string 2022-08-15 12:38:05 +02:00
laanwj
fcc0c8448b qt: Update source translations for string freeze
It looks like only one message was added: "Too many external signers
found".
2022-08-15 12:35:32 +02:00
MacroFake
2778cccf1c
Merge bitcoin/bitcoin#25836: subtree: update crc32c subtree
08269e54a9 Squashed 'src/crc32c/' changes from 0d624261ef..0bac72c455 (fanquake)

Pull request description:

  Update the crc32c subtree. Includes:
  * https://github.com/bitcoin-core/crc32c-subtree/pull/5

  Which is useful for https://github.com/bitcoin/bitcoin/pull/25797.

  Guix Build (x86_64):
  ```bash
  10677afb5b43e75f9c44ca2a854df88c2d2443392d3930d8c63d3c17e8d5959f  guix-build-9546b3a2a3a4/output/aarch64-linux-gnu/SHA256SUMS.part
  a05ea337e8dbbf234419908e1c95467f24f9ad83f3371718d4d4e3c1ae64dc7b  guix-build-9546b3a2a3a4/output/aarch64-linux-gnu/bitcoin-9546b3a2a3a4-aarch64-linux-gnu-debug.tar.gz
  9e3bcaecc55e8100c17cd6049f99a5dcdd485153091a9ddc1bb014cd74da719b  guix-build-9546b3a2a3a4/output/aarch64-linux-gnu/bitcoin-9546b3a2a3a4-aarch64-linux-gnu.tar.gz
  1306478fadf15b11636625747029de78a9121d179bc63cad77478a5a4b70e012  guix-build-9546b3a2a3a4/output/arm-linux-gnueabihf/SHA256SUMS.part
  55e82fc26fb57b4a58d63985b4b746c939c949abc670c976e270d5ec9c678623  guix-build-9546b3a2a3a4/output/arm-linux-gnueabihf/bitcoin-9546b3a2a3a4-arm-linux-gnueabihf-debug.tar.gz
  4ef06487c7df0b5ffdbcd5b8e4d32ffc8016f071fda7566f824e713581e7b043  guix-build-9546b3a2a3a4/output/arm-linux-gnueabihf/bitcoin-9546b3a2a3a4-arm-linux-gnueabihf.tar.gz
  fff63a55498bc592296fa3514bc99b39e83c4ab808ce3b04c9499b7a6adf3fd6  guix-build-9546b3a2a3a4/output/arm64-apple-darwin/SHA256SUMS.part
  965a96698bf7e49e2cc710ea567f69fbd4bedef64308f574e96c66e15c78d84d  guix-build-9546b3a2a3a4/output/arm64-apple-darwin/bitcoin-9546b3a2a3a4-arm64-apple-darwin-unsigned.dmg
  6738a0692430d4e59b45a8a9a247b6765970fb17c4047b66a332999425caafd9  guix-build-9546b3a2a3a4/output/arm64-apple-darwin/bitcoin-9546b3a2a3a4-arm64-apple-darwin-unsigned.tar.gz
  d2dc890f9d4e7f147b29e3e186504fc1af7f68b516d770d7700d4982429ad7e3  guix-build-9546b3a2a3a4/output/arm64-apple-darwin/bitcoin-9546b3a2a3a4-arm64-apple-darwin.tar.gz
  c74196e38f26f0aa8b345d81389a69c2324017c08b32fe5d97823a6bdaebd63b  guix-build-9546b3a2a3a4/output/dist-archive/bitcoin-9546b3a2a3a4.tar.gz
  fdcebf2b6518f3a538429aba53795f45a6c07e0b3a73e58242a46b0e1a1de429  guix-build-9546b3a2a3a4/output/powerpc64-linux-gnu/SHA256SUMS.part
  d4180196535c6a13f158e6f1b013bac6e1f32291d2940f830898aff55bd215ad  guix-build-9546b3a2a3a4/output/powerpc64-linux-gnu/bitcoin-9546b3a2a3a4-powerpc64-linux-gnu-debug.tar.gz
  ffbaea4130f460a93afd89618b68be5918d9fad053427390350daa1f512f628c  guix-build-9546b3a2a3a4/output/powerpc64-linux-gnu/bitcoin-9546b3a2a3a4-powerpc64-linux-gnu.tar.gz
  09071b159126c89bdbc3f19b51b89c34d9709658e77f0f5da55b41218453b652  guix-build-9546b3a2a3a4/output/powerpc64le-linux-gnu/SHA256SUMS.part
  4b75a22ac557a0fea88f8df0beaff9b19fb032587710edcca3d942847445fbc3  guix-build-9546b3a2a3a4/output/powerpc64le-linux-gnu/bitcoin-9546b3a2a3a4-powerpc64le-linux-gnu-debug.tar.gz
  1bbb30880fe9ec5151377b0ee1952316b63d3d4bfaaa383f72660591e46e1965  guix-build-9546b3a2a3a4/output/powerpc64le-linux-gnu/bitcoin-9546b3a2a3a4-powerpc64le-linux-gnu.tar.gz
  06e6140b0b23f974a1c49e551fc4f8effba8afcc3fef3adf4fc3a5cd72d55007  guix-build-9546b3a2a3a4/output/riscv64-linux-gnu/SHA256SUMS.part
  948219a7eb070e48d613bef5c96e47880414d738ecc0c334e1d46291af315cc9  guix-build-9546b3a2a3a4/output/riscv64-linux-gnu/bitcoin-9546b3a2a3a4-riscv64-linux-gnu-debug.tar.gz
  9dcdb87bf947a23eb8e108a15b7b224f03f01dfac1879be85114f67ecc1cd425  guix-build-9546b3a2a3a4/output/riscv64-linux-gnu/bitcoin-9546b3a2a3a4-riscv64-linux-gnu.tar.gz
  c02b6fcc9f1333a83571eff16c6d7789febd8f693c6945b751b0665bdc025f20  guix-build-9546b3a2a3a4/output/x86_64-apple-darwin/SHA256SUMS.part
  3a092d1c08cb85f4ac502424b3c5932ff6970a191ce43d622d36ad17f9b36243  guix-build-9546b3a2a3a4/output/x86_64-apple-darwin/bitcoin-9546b3a2a3a4-x86_64-apple-darwin-unsigned.dmg
  1a1bbefb93131d62f88d9eb51bddc2bd3e247533f8000555af20ea582fe65daa  guix-build-9546b3a2a3a4/output/x86_64-apple-darwin/bitcoin-9546b3a2a3a4-x86_64-apple-darwin-unsigned.tar.gz
  684180389af6cba525439b8c8142bbdc3391c125583743275b6876e69adbd733  guix-build-9546b3a2a3a4/output/x86_64-apple-darwin/bitcoin-9546b3a2a3a4-x86_64-apple-darwin.tar.gz
  f81bc831e3d933b387940c8bd3cc10402e00116c713cd2ac9e7531082a354187  guix-build-9546b3a2a3a4/output/x86_64-linux-gnu/SHA256SUMS.part
  05faf45bc567742d41addafc5d8e85b5b586173f2efdd2ae501d6ebdf69379bb  guix-build-9546b3a2a3a4/output/x86_64-linux-gnu/bitcoin-9546b3a2a3a4-x86_64-linux-gnu-debug.tar.gz
  dfe1b0c22c706a918cbc8952bebba0b471c849276725dd5e0b2eee265c281386  guix-build-9546b3a2a3a4/output/x86_64-linux-gnu/bitcoin-9546b3a2a3a4-x86_64-linux-gnu.tar.gz
  64186c495eb9b6e8c6a2be89530c928e7b161e5ca7a1b56b7786dd28d310e7e8  guix-build-9546b3a2a3a4/output/x86_64-w64-mingw32/SHA256SUMS.part
  c099d0dfeb4556539b52c8bc08ef2c15c636526dccc0a73900c68fa45b052189  guix-build-9546b3a2a3a4/output/x86_64-w64-mingw32/bitcoin-9546b3a2a3a4-win64-debug.zip
  7751e50110ed1a9a46a2fdadb7d71c6e30910685a3074dea563ec64997cbb134  guix-build-9546b3a2a3a4/output/x86_64-w64-mingw32/bitcoin-9546b3a2a3a4-win64-setup-unsigned.exe
  d8ec6a7d24c9b514c342fe3ee2281482a104100230650523d3303484036507a3  guix-build-9546b3a2a3a4/output/x86_64-w64-mingw32/bitcoin-9546b3a2a3a4-win64-unsigned.tar.gz
  ee3123a60a732596347e58351c38cc5c0a8bf9b24f3cc9041f12ec11572e0659  guix-build-9546b3a2a3a4/output/x86_64-w64-mingw32/bitcoin-9546b3a2a3a4-win64.zip
  ```

  Guix Build (arm64):
  ```bash
  1306478fadf15b11636625747029de78a9121d179bc63cad77478a5a4b70e012  guix-build-9546b3a2a3a4/output/arm-linux-gnueabihf/SHA256SUMS.part
  55e82fc26fb57b4a58d63985b4b746c939c949abc670c976e270d5ec9c678623  guix-build-9546b3a2a3a4/output/arm-linux-gnueabihf/bitcoin-9546b3a2a3a4-arm-linux-gnueabihf-debug.tar.gz
  4ef06487c7df0b5ffdbcd5b8e4d32ffc8016f071fda7566f824e713581e7b043  guix-build-9546b3a2a3a4/output/arm-linux-gnueabihf/bitcoin-9546b3a2a3a4-arm-linux-gnueabihf.tar.gz
  fff63a55498bc592296fa3514bc99b39e83c4ab808ce3b04c9499b7a6adf3fd6  guix-build-9546b3a2a3a4/output/arm64-apple-darwin/SHA256SUMS.part
  965a96698bf7e49e2cc710ea567f69fbd4bedef64308f574e96c66e15c78d84d  guix-build-9546b3a2a3a4/output/arm64-apple-darwin/bitcoin-9546b3a2a3a4-arm64-apple-darwin-unsigned.dmg
  6738a0692430d4e59b45a8a9a247b6765970fb17c4047b66a332999425caafd9  guix-build-9546b3a2a3a4/output/arm64-apple-darwin/bitcoin-9546b3a2a3a4-arm64-apple-darwin-unsigned.tar.gz
  d2dc890f9d4e7f147b29e3e186504fc1af7f68b516d770d7700d4982429ad7e3  guix-build-9546b3a2a3a4/output/arm64-apple-darwin/bitcoin-9546b3a2a3a4-arm64-apple-darwin.tar.gz
  c74196e38f26f0aa8b345d81389a69c2324017c08b32fe5d97823a6bdaebd63b  guix-build-9546b3a2a3a4/output/dist-archive/bitcoin-9546b3a2a3a4.tar.gz
  fdcebf2b6518f3a538429aba53795f45a6c07e0b3a73e58242a46b0e1a1de429  guix-build-9546b3a2a3a4/output/powerpc64-linux-gnu/SHA256SUMS.part
  d4180196535c6a13f158e6f1b013bac6e1f32291d2940f830898aff55bd215ad  guix-build-9546b3a2a3a4/output/powerpc64-linux-gnu/bitcoin-9546b3a2a3a4-powerpc64-linux-gnu-debug.tar.gz
  ffbaea4130f460a93afd89618b68be5918d9fad053427390350daa1f512f628c  guix-build-9546b3a2a3a4/output/powerpc64-linux-gnu/bitcoin-9546b3a2a3a4-powerpc64-linux-gnu.tar.gz
  09071b159126c89bdbc3f19b51b89c34d9709658e77f0f5da55b41218453b652  guix-build-9546b3a2a3a4/output/powerpc64le-linux-gnu/SHA256SUMS.part
  4b75a22ac557a0fea88f8df0beaff9b19fb032587710edcca3d942847445fbc3  guix-build-9546b3a2a3a4/output/powerpc64le-linux-gnu/bitcoin-9546b3a2a3a4-powerpc64le-linux-gnu-debug.tar.gz
  1bbb30880fe9ec5151377b0ee1952316b63d3d4bfaaa383f72660591e46e1965  guix-build-9546b3a2a3a4/output/powerpc64le-linux-gnu/bitcoin-9546b3a2a3a4-powerpc64le-linux-gnu.tar.gz
  06e6140b0b23f974a1c49e551fc4f8effba8afcc3fef3adf4fc3a5cd72d55007  guix-build-9546b3a2a3a4/output/riscv64-linux-gnu/SHA256SUMS.part
  948219a7eb070e48d613bef5c96e47880414d738ecc0c334e1d46291af315cc9  guix-build-9546b3a2a3a4/output/riscv64-linux-gnu/bitcoin-9546b3a2a3a4-riscv64-linux-gnu-debug.tar.gz
  9dcdb87bf947a23eb8e108a15b7b224f03f01dfac1879be85114f67ecc1cd425  guix-build-9546b3a2a3a4/output/riscv64-linux-gnu/bitcoin-9546b3a2a3a4-riscv64-linux-gnu.tar.gz
  c02b6fcc9f1333a83571eff16c6d7789febd8f693c6945b751b0665bdc025f20  guix-build-9546b3a2a3a4/output/x86_64-apple-darwin/SHA256SUMS.part
  3a092d1c08cb85f4ac502424b3c5932ff6970a191ce43d622d36ad17f9b36243  guix-build-9546b3a2a3a4/output/x86_64-apple-darwin/bitcoin-9546b3a2a3a4-x86_64-apple-darwin-unsigned.dmg
  1a1bbefb93131d62f88d9eb51bddc2bd3e247533f8000555af20ea582fe65daa  guix-build-9546b3a2a3a4/output/x86_64-apple-darwin/bitcoin-9546b3a2a3a4-x86_64-apple-darwin-unsigned.tar.gz
  684180389af6cba525439b8c8142bbdc3391c125583743275b6876e69adbd733  guix-build-9546b3a2a3a4/output/x86_64-apple-darwin/bitcoin-9546b3a2a3a4-x86_64-apple-darwin.tar.gz
  f81bc831e3d933b387940c8bd3cc10402e00116c713cd2ac9e7531082a354187  guix-build-9546b3a2a3a4/output/x86_64-linux-gnu/SHA256SUMS.part
  05faf45bc567742d41addafc5d8e85b5b586173f2efdd2ae501d6ebdf69379bb  guix-build-9546b3a2a3a4/output/x86_64-linux-gnu/bitcoin-9546b3a2a3a4-x86_64-linux-gnu-debug.tar.gz
  dfe1b0c22c706a918cbc8952bebba0b471c849276725dd5e0b2eee265c281386  guix-build-9546b3a2a3a4/output/x86_64-linux-gnu/bitcoin-9546b3a2a3a4-x86_64-linux-gnu.tar.gz
  64186c495eb9b6e8c6a2be89530c928e7b161e5ca7a1b56b7786dd28d310e7e8  guix-build-9546b3a2a3a4/output/x86_64-w64-mingw32/SHA256SUMS.part
  c099d0dfeb4556539b52c8bc08ef2c15c636526dccc0a73900c68fa45b052189  guix-build-9546b3a2a3a4/output/x86_64-w64-mingw32/bitcoin-9546b3a2a3a4-win64-debug.zip
  7751e50110ed1a9a46a2fdadb7d71c6e30910685a3074dea563ec64997cbb134  guix-build-9546b3a2a3a4/output/x86_64-w64-mingw32/bitcoin-9546b3a2a3a4-win64-setup-unsigned.exe
  d8ec6a7d24c9b514c342fe3ee2281482a104100230650523d3303484036507a3  guix-build-9546b3a2a3a4/output/x86_64-w64-mingw32/bitcoin-9546b3a2a3a4-win64-unsigned.tar.gz
  ee3123a60a732596347e58351c38cc5c0a8bf9b24f3cc9041f12ec11572e0659  guix-build-9546b3a2a3a4/output/x86_64-w64-mingw32/bitcoin-9546b3a2a3a4-win64.zip
  ```

ACKs for top commit:
  hebasto:
    ACK 9546b3a2a3, I have reviewed the code and it looks OK, I agree it can be merged.
  jarolrod:
    ACK 9546b3a2a3

Tree-SHA512: e5f98fd3bdb90516d24ed6cc26da9ed4a83374888d322a4e3a26d8df4a2352711d842787b07ba94e2dbd142391bb8f39eb6f040cbb3c2f217f7980b69aaae31f
2022-08-15 12:33:14 +02:00
S3RK
4fef534428 wallet: use GetChange() when computing waste 2022-08-15 09:35:20 +02:00
S3RK
87e0ef9031 wallet: use GetChange() in tx building 2022-08-15 09:35:20 +02:00
S3RK
15e97a6886 wallet: add SelectionResult::GetChange 2022-08-15 09:35:20 +02:00
S3RK
72cad28da0 wallet: calculate and store min_viable_change 2022-08-15 09:35:13 +02:00
S3RK
e3210a7225 wallet: account for preselected inputs in target
When we have preselected inputs the coin selection search target is reduced
by the sum of (effective) values. This causes incorrect m_target value.

Create separate instance of SelectionResult for all the preselected inputs and
set the target equal to the sum of (effective) values. Target for preselected
SelectionResult is equal to the delta for the search target. To get the final
SelectionResult with accurate m_target we merge both SelectionResult instances.
2022-08-15 09:34:38 +02:00
S3RK
f8e796348b wallet: add SelectionResult::Merge 2022-08-15 09:34:38 +02:00
S3RK
06f558e4e2 wallet: accurate SelectionResult::m_target
SelectionResult::m_target should be equal to actual selection target.
Selection target is the sum of all recipient amounts plus non input fees.
So we need to remove change_fee from the m_target. It's safe because change
target is always greater than the change fee, so we can always cover fees
if change output is created.
2022-08-15 09:34:38 +02:00
S3RK
c8cf08ea74 wallet: ensure m_min_change_target always covers change fee 2022-08-15 09:34:26 +02:00
fanquake
dc9d662683
Merge bitcoin/bitcoin#25235: GetExternalSigner(): fail if multiple signers are found
292b1a3e9c GetExternalSigner(): fail if multiple signers are found (amadeuszpawlik)

Pull request description:

  If there are multiple external signers, `GetExternalSigner()` will
  just pick the first one in the list. If the user has two or more
  hardware wallets connected at the same time, he might not notice this.

  This PR adds a check and fails with suitable message, forcing the user to disconnect all but one external signer, so that there is no ambiguity as to which external signer was used.

ACKs for top commit:
  Sjors:
    tACK 292b1a3e9c
  achow101:
    ACK 292b1a3e9c

Tree-SHA512: e2a41d3eecc607d4f94e708614bed0f3545f7abba85f300c5a5f0d3d17d72c815259734accc5ca370953eacd290f27894ba2c18016f5e9584cd50fa1ec2fbb0b
2022-08-13 16:08:19 +01:00
fanquake
9546b3a2a3
Update crc32c subtree to latest upstream master 2022-08-13 13:55:38 +01:00
Suhas Daftuar
05f7f31598 Reduce bandwidth during initial headers sync when a block is found
If our headers chain is behind on startup, then if a block is found we'll try
to catch up from all peers announcing the block, in addition to our initial
headers-sync peer. This commit changes behavior so that in this situation,
we'll choose at most one peer announcing a block to additionally sync headers
from.
2022-08-12 17:05:04 -04:00
furszy
4584d300a4
GUI: remove now unneeded 'm_balances' field from overviewpage 2022-08-12 13:06:10 -03:00
furszy
050e8b1391
GUI: 'getAvailableBalance', use cached balance if the user did not select UTXO manually
No need to walk through the entire wallet's tx map. Used for 'walletModel::prepareTransaction' and 'useAvailable' flow in sendcoinsdialog.
2022-08-12 13:06:05 -03:00
furszy
96e3264a82
GUI: use cached balance in overviewpage and sendcoinsdialog
Plus, calculate the cached balance right when the wallet model, so the wallet widgets don't need to redo the same balance calculation multiple times when they are waiting for the model balance polling timer.

----------------------------------------------------------------------

test wise: `WalletTests` now need to trigger the walletModel balance changed manually. So the model updates its internal state and can be used by the widgets.

This is because the test does not start the balance polling timer, in the same way as does not initialize several parts of the GUI workflow. All the objects (wallet, models, views, etc) that are used on this test are manually created instead of using the `WalletController` class flow.

Rationale is that this unit test is focused on verifying the GUI widgets/views behavior only: update the presented information, etc. when they receive different signals and/or function calls from outside (in other words, focus is on the signal slots/receiver side). It's not about whether the wallet balance polling timer is functioning as expected or not (which we definitely create a new test case for it in a follow-up work).
2022-08-12 13:06:05 -03:00
furszy
321335bf02
GUI: add getter for WalletModel::m_cached_balances field
No need to guard it as it is/will only be accessed from the main thread for now
2022-08-12 13:05:57 -03:00
furszy
e62958dc81
GUI: sendCoinsDialog, remove duplicate wallet().getBalances() call
Inside setModel, we call 'wallet().getBalances()', to set the view balance,
right before calling 'updateDisplayUnit' which calls 'wallet().getBalances()'
internally and re-sets the view balance again.
2022-08-12 13:05:47 -03:00
furszy
bfb9b94ebe
wallet: remove duplicate descriptor type check in GetNewDestination 2022-08-12 12:42:20 -03:00
furszy
76b982a4a5
wallet: remove unused nAccountingEntryNumber field 2022-08-12 12:36:07 -03:00
furszy
599ff5adfc
wallet: avoid double TopUp() calls on descriptor wallets
Move TopUp() responsibility from the wallet class to each scriptpubkeyman.
So each spkm can decide to call it or not after perform the basic checks
for the new destination request.

Reason:

We were calling it twice in the following flows for descriptor wallets:

A) CWallet::GetNewDestination:
   1) Calls spk_man->TopUp()
   2) Calls spk_man->GetNewDestination() --> which, after the basic script checks, calls TopUp() again.

B) CWallet::GetReservedDestination:
   1) Calls spk_man->TopUp()
   2) Calls spk_man->GetReservedDestination() --> which calls to GetNewDestination (which calls to TopUp again).
2022-08-12 12:36:04 -03:00
MacroFake
fa3f15f2dd
refactor: Avoid copies in FlatSigningProvider Merge 2022-08-12 17:19:16 +02:00
Aurèle Oulès
0f0cc05e4c
refactor: Remove trailing semicolon from LOCK2 2022-08-12 14:10:43 +02:00
MacroFake
bf3f05f41d
Merge bitcoin/bitcoin#25785: bench: Add a benchmark for descriptor expansion
478695982b bench: Add a benchmark for descriptor expansion (Ben Woosley)

Pull request description:

  Taken from https://github.com/bitcoin/bitcoin/pull/16116 , as requested here: https://github.com/bitcoin/bitcoin/pull/25748#issuecomment-1205441706

ACKs for top commit:
  achow101:
    ACK 478695982b

Tree-SHA512: f2efdf8f84e1783c7c298abe65123191d25cab0a9da2d0ff5957a60acc2d10e356151d7ecec0d98d28c456f42ddef50efd70c7edc0c9012df2a977e080515b9d
2022-08-12 13:00:06 +02:00
MacroFake
89b2194124
Merge bitcoin/bitcoin#25814: net: simplify GetLocalAddress()
daabd41211 net: simplify GetLocalAddress() (Vasil Dimov)

Pull request description:

  There is no need to use two variables `ret` and `addr` of the same type
  `CService` and assign one to the other in a strange way like
  `ret = CService{addr}`.

ACKs for top commit:
  jarolrod:
    ACK daabd41211
  aureleoules:
    ACK daabd41211.
  w0xlt:
    ACK daabd41211

Tree-SHA512: 4bbd3746bc30fbc05bb32b58bb122c938acd849c0f72f1d3e8170557c1999ec26a888e06e874c3fc22562a2becddc7d817db7d174e0e1b383e8d74c39aa1e898
2022-08-12 10:52:42 +02:00
MacroFake
27724c23f7
Merge bitcoin/bitcoin#25677: refactor: make active_chain_tip a reference
9376a6dae4 refactor: make active_chain_tip a reference (Aurèle Oulès)

Pull request description:

  This PR fixes a TODO introduced in #21055.

  Makes `active_chain_tip` argument in `CheckFinalTxAtTip` function a reference instead of a pointer.

ACKs for top commit:
  dongcarl:
    ACK 9376a6dae4

Tree-SHA512: c36d1769e0b9598b7f79334704b26b73e958d54caa3bd7e4eff954f3964fcf3f5e3a44a5a760497afad51b76e1614c86314fe035e4083c855e3574a620de7f4d
2022-08-12 08:32:15 +02:00
Andrew Chow
5d294bccba
Merge bitcoin/bitcoin#25825: wallet: consolidate CoinSelectionParams::m_change_target and m_min_change_target
acda7e8686 [coin selection] consolidate m_change_target and m_min_change_target (glozow)

Pull request description:

  These values are both intended for the same thing. Their divergence seems to be the result of an incomplete rename.

ACKs for top commit:
  achow101:
    ACK acda7e8686
  Xekyo:
    ACK acda7e8686
  furszy:
    ACK acda7e86
  aureleoules:
    ACK acda7e8686.

Tree-SHA512: 4b86171af5d893f7172373bb404bad12c49588ad1e22eb0544c242173f4bc4dede2ff1270c93c9f02f503ab8d9f66b841a8319d0ecb5e896d0fe8727cf03dbf4
2022-08-11 15:04:13 -04:00