diff options
author | MeshCollider <dobsonsa68@gmail.com> | 2019-04-11 21:24:54 +1200 |
---|---|---|
committer | MeshCollider <dobsonsa68@gmail.com> | 2019-04-11 21:25:07 +1200 |
commit | f6120d40d583d15dd2ad7e09446fda84ab516018 (patch) | |
tree | bf289b0c118121ba5e36f7702b535d2413637765 /src/wallet | |
parent | 6a135fbe5b30c3603616589b4779b1ce602c9392 (diff) | |
parent | 7a9046e48d0aac35e8e6a3dd315aa98a207bebfe (diff) |
Merge #15728: [wallet] Refactor relay transactions
7a9046e48 [wallet] Refactor CWalletTx::RelayWalletTransaction() (John Newbery)
Pull request description:
Refactor `CWalletTx::RelayWalletTransaction()` function.
This was a suggestion from the wallet-node separation PR: https://github.com/bitcoin/bitcoin/pull/15288#discussion_r256036330, which we deferred until after the main PR was merged.
There are also makes two minor behavior changes:
- no longer assert if fBroadcastTransactions is false. Just return false from the function.
- no longer print the relay message if p2pEnabled is set to false (since the transaction is not actually relayed).
ACKs for commit 7a9046:
promag:
utACK 7a9046e48d0aac35e8e6a3dd315aa98a207bebfe.
MeshCollider:
utACK https://github.com/bitcoin/bitcoin/pull/15728/commits/7a9046e48d0aac35e8e6a3dd315aa98a207bebfe
ryanofsky:
utACK 7a9046e48d0aac35e8e6a3dd315aa98a207bebfe. No changes at all, just rebase after base PR #15632 was merged
Tree-SHA512: 2ae6214cfadd917a1b3a892c4277e5e57c3eb791e17f67511470e6fbc634d19356554b9f9c55af6b779fdef821914aad59b7cc9e6c13ece145df003bf507d486
Diffstat (limited to 'src/wallet')
-rw-r--r-- | src/wallet/wallet.cpp | 33 | ||||
-rw-r--r-- | src/wallet/wallet.h | 2 |
2 files changed, 20 insertions, 15 deletions
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 2ef6850a2e..743704d5f8 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -1900,20 +1900,25 @@ void CWallet::ReacceptWalletTransactions(interfaces::Chain::Lock& locked_chain) bool CWalletTx::RelayWalletTransaction(interfaces::Chain::Lock& locked_chain) { - assert(pwallet->GetBroadcastTransactions()); - if (!IsCoinBase() && !isAbandoned() && GetDepthInMainChain(locked_chain) == 0) - { - CValidationState state; - /* GetDepthInMainChain already catches known conflicts. */ - if (InMempool() || AcceptToMemoryPool(locked_chain, state)) { - pwallet->WalletLogPrintf("Relaying wtx %s\n", GetHash().ToString()); - if (pwallet->chain().p2pEnabled()) { - pwallet->chain().relayTransaction(GetHash()); - return true; - } - } - } - return false; + // Can't relay if wallet is not broadcasting + if (!pwallet->GetBroadcastTransactions()) return false; + // Don't relay coinbase transactions outside blocks + if (IsCoinBase()) return false; + // Don't relay abandoned transactions + if (isAbandoned()) return false; + // Don't relay conflicted or already confirmed transactions + if (GetDepthInMainChain(locked_chain) != 0) return false; + // Don't relay transactions that aren't accepted to the mempool + CValidationState unused_state; + if (!InMempool() && !AcceptToMemoryPool(locked_chain, unused_state)) return false; + // Don't try to relay if the node is not connected to the p2p network + if (!pwallet->chain().p2pEnabled()) return false; + + // Try to relay the transaction + pwallet->WalletLogPrintf("Relaying wtx %s\n", GetHash().ToString()); + pwallet->chain().relayTransaction(GetHash()); + + return true; } std::set<uint256> CWalletTx::GetConflicts() const diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index cefdf479c6..36c0e160dd 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -515,7 +515,7 @@ public: int64_t GetTxTime() const; - // RelayWalletTransaction may only be called if fBroadcastTransactions! + // Pass this transaction to the node to relay to its peers bool RelayWalletTransaction(interfaces::Chain::Lock& locked_chain); /** Pass this transaction to the mempool. Fails if absolute fee exceeds absurd fee. */ |