Skip to content

Commit 10b4729

Browse files
author
Antoine Riard
committed
Pass block height in Chain::BlockConnected/Chain::BlockDisconnected
To do so we update CValidationInterface::BlockDisconnect to take a CBlockIndex pointing to the block being disconnected. This new parameter will be use in the following commit to establish wallet height.
1 parent 50591f6 commit 10b4729

File tree

10 files changed

+24
-20
lines changed

10 files changed

+24
-20
lines changed

src/interfaces/chain.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,11 +182,11 @@ class NotificationsHandlerImpl : public Handler, CValidationInterface
182182
const CBlockIndex* index,
183183
const std::vector<CTransactionRef>& tx_conflicted) override
184184
{
185-
m_notifications->BlockConnected(*block, tx_conflicted);
185+
m_notifications->BlockConnected(*block, tx_conflicted, index->nHeight);
186186
}
187-
void BlockDisconnected(const std::shared_ptr<const CBlock>& block) override
187+
void BlockDisconnected(const std::shared_ptr<const CBlock>& block, const CBlockIndex* index) override
188188
{
189-
m_notifications->BlockDisconnected(*block);
189+
m_notifications->BlockDisconnected(*block, index->nHeight);
190190
}
191191
void UpdatedBlockTip(const CBlockIndex* index, const CBlockIndex* fork_index, bool is_ibd) override
192192
{

src/interfaces/chain.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,8 @@ class Chain
226226
virtual ~Notifications() {}
227227
virtual void TransactionAddedToMempool(const CTransactionRef& tx) {}
228228
virtual void TransactionRemovedFromMempool(const CTransactionRef& ptx) {}
229-
virtual void BlockConnected(const CBlock& block, const std::vector<CTransactionRef>& tx_conflicted) {}
230-
virtual void BlockDisconnected(const CBlock& block) {}
229+
virtual void BlockConnected(const CBlock& block, const std::vector<CTransactionRef>& tx_conflicted, int height) {}
230+
virtual void BlockDisconnected(const CBlock& block, int height) {}
231231
virtual void UpdatedBlockTip() {}
232232
virtual void ChainStateFlushed(const CBlockLocator& locator) {}
233233
};

src/test/validation_block_tests.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,10 @@ struct TestSubscriber : public CValidationInterface {
4040
m_expected_tip = block->GetHash();
4141
}
4242

43-
void BlockDisconnected(const std::shared_ptr<const CBlock>& block) override
43+
void BlockDisconnected(const std::shared_ptr<const CBlock>& block, const CBlockIndex* pindex) override
4444
{
4545
BOOST_CHECK_EQUAL(m_expected_tip, block->GetHash());
46+
BOOST_CHECK_EQUAL(m_expected_tip, pindex->GetBlockHash());
4647

4748
m_expected_tip = block->hashPrevBlock;
4849
}

src/validation.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2435,7 +2435,7 @@ bool CChainState::DisconnectTip(BlockValidationState& state, const CChainParams&
24352435
UpdateTip(pindexDelete->pprev, chainparams);
24362436
// Let wallets know transactions went from 1-confirmed to
24372437
// 0-confirmed or conflicted:
2438-
GetMainSignals().BlockDisconnected(pblock);
2438+
GetMainSignals().BlockDisconnected(pblock, pindexDelete);
24392439
return true;
24402440
}
24412441

src/validationinterface.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ struct MainSignalsInstance {
2929
boost::signals2::signal<void (const CBlockIndex *, const CBlockIndex *, bool fInitialDownload)> UpdatedBlockTip;
3030
boost::signals2::signal<void (const CTransactionRef &)> TransactionAddedToMempool;
3131
boost::signals2::signal<void (const std::shared_ptr<const CBlock> &, const CBlockIndex *pindex, const std::vector<CTransactionRef>&)> BlockConnected;
32-
boost::signals2::signal<void (const std::shared_ptr<const CBlock> &)> BlockDisconnected;
32+
boost::signals2::signal<void (const std::shared_ptr<const CBlock>&, const CBlockIndex* pindex)> BlockDisconnected;
3333
boost::signals2::signal<void (const CTransactionRef &)> TransactionRemovedFromMempool;
3434
boost::signals2::signal<void (const CBlockLocator &)> ChainStateFlushed;
3535
boost::signals2::signal<void (const CBlock&, const BlockValidationState&)> BlockChecked;
@@ -92,7 +92,7 @@ void RegisterValidationInterface(CValidationInterface* pwalletIn) {
9292
conns.UpdatedBlockTip = g_signals.m_internals->UpdatedBlockTip.connect(std::bind(&CValidationInterface::UpdatedBlockTip, pwalletIn, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
9393
conns.TransactionAddedToMempool = g_signals.m_internals->TransactionAddedToMempool.connect(std::bind(&CValidationInterface::TransactionAddedToMempool, pwalletIn, std::placeholders::_1));
9494
conns.BlockConnected = g_signals.m_internals->BlockConnected.connect(std::bind(&CValidationInterface::BlockConnected, pwalletIn, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
95-
conns.BlockDisconnected = g_signals.m_internals->BlockDisconnected.connect(std::bind(&CValidationInterface::BlockDisconnected, pwalletIn, std::placeholders::_1));
95+
conns.BlockDisconnected = g_signals.m_internals->BlockDisconnected.connect(std::bind(&CValidationInterface::BlockDisconnected, pwalletIn, std::placeholders::_1, std::placeholders::_2));
9696
conns.TransactionRemovedFromMempool = g_signals.m_internals->TransactionRemovedFromMempool.connect(std::bind(&CValidationInterface::TransactionRemovedFromMempool, pwalletIn, std::placeholders::_1));
9797
conns.ChainStateFlushed = g_signals.m_internals->ChainStateFlushed.connect(std::bind(&CValidationInterface::ChainStateFlushed, pwalletIn, std::placeholders::_1));
9898
conns.BlockChecked = g_signals.m_internals->BlockChecked.connect(std::bind(&CValidationInterface::BlockChecked, pwalletIn, std::placeholders::_1, std::placeholders::_2));
@@ -156,9 +156,10 @@ void CMainSignals::BlockConnected(const std::shared_ptr<const CBlock> &pblock, c
156156
});
157157
}
158158

159-
void CMainSignals::BlockDisconnected(const std::shared_ptr<const CBlock> &pblock) {
160-
m_internals->m_schedulerClient.AddToProcessQueue([pblock, this] {
161-
m_internals->BlockDisconnected(pblock);
159+
void CMainSignals::BlockDisconnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindex)
160+
{
161+
m_internals->m_schedulerClient.AddToProcessQueue([pblock, pindex, this] {
162+
m_internals->BlockDisconnected(pblock, pindex);
162163
});
163164
}
164165

src/validationinterface.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ class CValidationInterface {
114114
*
115115
* Called on a background thread.
116116
*/
117-
virtual void BlockDisconnected(const std::shared_ptr<const CBlock> &block) {}
117+
virtual void BlockDisconnected(const std::shared_ptr<const CBlock> &block, const CBlockIndex* pindex) {}
118118
/**
119119
* Notifies listeners of the new active block chain on-disk.
120120
*
@@ -178,7 +178,7 @@ class CMainSignals {
178178
void UpdatedBlockTip(const CBlockIndex *, const CBlockIndex *, bool fInitialDownload);
179179
void TransactionAddedToMempool(const CTransactionRef &);
180180
void BlockConnected(const std::shared_ptr<const CBlock> &, const CBlockIndex *pindex, const std::shared_ptr<const std::vector<CTransactionRef>> &);
181-
void BlockDisconnected(const std::shared_ptr<const CBlock> &);
181+
void BlockDisconnected(const std::shared_ptr<const CBlock> &, const CBlockIndex* pindex);
182182
void ChainStateFlushed(const CBlockLocator &);
183183
void BlockChecked(const CBlock&, const BlockValidationState&);
184184
void NewPoWValidBlock(const CBlockIndex *, const std::shared_ptr<const CBlock>&);

src/wallet/wallet.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1052,7 +1052,8 @@ void CWallet::TransactionRemovedFromMempool(const CTransactionRef &ptx) {
10521052
}
10531053
}
10541054

1055-
void CWallet::BlockConnected(const CBlock& block, const std::vector<CTransactionRef>& vtxConflicted) {
1055+
void CWallet::BlockConnected(const CBlock& block, const std::vector<CTransactionRef>& vtxConflicted, int height)
1056+
{
10561057
const uint256& block_hash = block.GetHash();
10571058
auto locked_chain = chain().lock();
10581059
LOCK(cs_wallet);
@@ -1068,7 +1069,8 @@ void CWallet::BlockConnected(const CBlock& block, const std::vector<CTransaction
10681069
m_last_block_processed = block_hash;
10691070
}
10701071

1071-
void CWallet::BlockDisconnected(const CBlock& block) {
1072+
void CWallet::BlockDisconnected(const CBlock& block, int height)
1073+
{
10721074
auto locked_chain = chain().lock();
10731075
LOCK(cs_wallet);
10741076

src/wallet/wallet.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -855,8 +855,8 @@ class CWallet final : public WalletStorage, private interfaces::Chain::Notificat
855855
bool AddToWallet(const CWalletTx& wtxIn, bool fFlushOnClose=true);
856856
void LoadToWallet(CWalletTx& wtxIn) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
857857
void TransactionAddedToMempool(const CTransactionRef& tx) override;
858-
void BlockConnected(const CBlock& block, const std::vector<CTransactionRef>& vtxConflicted) override;
859-
void BlockDisconnected(const CBlock& block) override;
858+
void BlockConnected(const CBlock& block, const std::vector<CTransactionRef>& vtxConflicted, int height) override;
859+
void BlockDisconnected(const CBlock& block, int height) override;
860860
void UpdatedBlockTip() override;
861861
int64_t RescanFromTime(int64_t startTime, const WalletRescanReserver& reserver, bool update);
862862

src/zmq/zmqnotificationinterface.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ void CZMQNotificationInterface::BlockConnected(const std::shared_ptr<const CBloc
185185
}
186186
}
187187

188-
void CZMQNotificationInterface::BlockDisconnected(const std::shared_ptr<const CBlock>& pblock)
188+
void CZMQNotificationInterface::BlockDisconnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindexDisconnected)
189189
{
190190
for (const CTransactionRef& ptx : pblock->vtx) {
191191
// Do a normal notify for each transaction removed in block disconnection

src/zmq/zmqnotificationinterface.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class CZMQNotificationInterface final : public CValidationInterface
2727
// CValidationInterface
2828
void TransactionAddedToMempool(const CTransactionRef& tx) override;
2929
void BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindexConnected, const std::vector<CTransactionRef>& vtxConflicted) override;
30-
void BlockDisconnected(const std::shared_ptr<const CBlock>& pblock) override;
30+
void BlockDisconnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindexDisconnected) override;
3131
void UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload) override;
3232

3333
private:

0 commit comments

Comments
 (0)