lbrycrd/src/interfaces
MeshCollider 459baa1756
Merge #16208: wallet: Consume ReserveDestination on successful CreateTransaction
e10e1e8db0 Restrict lifetime of ReserveDestination to CWallet::CreateTransaction (Gregory Sanders)
d9ff862f2d CreateTransaction calls KeepDestination on ReserveDestination before success (Gregory Sanders)

Pull request description:

  The typical usage pattern of `ReserveDestination` is to explicitly `KeepDestination`, or `ReturnDestination` when it's detected it will not be used.

  Implementers such as myself may fail to complete this pattern, and could result in key re-use: https://github.com/bitcoin/bitcoin/pull/15557#discussion_r271956393

  Since ReserveDestination is currently only used directly in the `CreateTransaction`/`CommitTransaction` flow(or fee bumping where it's just used in `CreateTransaction`), I instead make the assumption that if a transaction is returned by `CreateTransaction` it's highly likely that it will be accepted by the caller, and the `ReserveDestination` kept. This simplifies the API as well. There are very few cases where this would not be the case which may result in keys being burned.

  Those failure cases appear to be:
  `CommitTransaction` failing to get the transaction into the mempool
  Belt and suspenders check in `WalletModel::prepareTransaction`

  Alternative to https://github.com/bitcoin/bitcoin/pull/15796

ACKs for top commit:
  achow101:
    ACK e10e1e8db0 Reviewed the diff
  stevenroose:
    utACK e10e1e8db0
  meshcollider:
    utACK e10e1e8db0

Tree-SHA512: 78d047a00f39ab41cfa297052cc1e9c224d5f47d3d2299face650d71827635de077ac33fb4ab9f7dc6fc5a27f4a68415a1bc9ca33a3cb09a78f4f15b2a48411b
2019-07-17 19:45:55 +12:00
..
chain.cpp Add Travis check for single parameter constructors not marked "explicit" 2019-06-26 16:57:14 +02:00
chain.h Merge #16033: Hold cs_main when reading chainActive via getTipLocator(). Remove assumeLocked(). 2019-05-17 07:17:41 -04:00
handler.cpp scripted-diff: Move util files to separate directory. 2018-11-04 22:46:07 -08:00
handler.h scripted-diff: Avoid interface keyword to fix windows gitian build 2018-04-07 03:42:02 -04:00
node.cpp Merge #16129: refactor: Remove unused includes 2019-06-06 16:41:40 +02:00
node.h [wallet] Move maxTxFee to wallet 2019-04-18 11:34:42 -04:00
README.md Suggested interfaces::Chain cleanups from #15288 2019-03-04 15:57:58 -05:00
wallet.cpp Merge #16208: wallet: Consume ReserveDestination on successful CreateTransaction 2019-07-17 19:45:55 +12:00
wallet.h Merge #16237: Have the wallet give out destinations instead of keys 2019-07-10 11:45:55 +02:00

Internal c++ interfaces

The following interfaces are defined here:

  • Chain — used by wallet to access blockchain and mempool state. Added in #14437, #14711, #15288, and #10973.

  • ChainClient — used by node to start & stop Chain clients. Added in #14437.

  • Node — used by GUI to start & stop bitcoin node. Added in #10244.

  • Wallet — used by GUI to access wallets. Added in #10244.

  • Handler — returned by handleEvent methods on interfaces above and used to manage lifetimes of event handlers.

  • Init — used by multiprocess code to access interfaces above on startup. Added in #10102.

The interfaces above define boundaries between major components of bitcoin code (node, wallet, and gui), making it possible for them to run in different processes, and be tested, developed, and understood independently. These interfaces are not currently designed to be stable or to be used externally.