mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-05-31 16:24:48 +02:00
interfaces, refactor: Add more block information to block connected notifications
Add new interfaces::BlockInfo struct to be able to pass extra block information (file and undo information) to indexes which they are updated to use high level interfaces::Chain notifications. This commit does not change behavior in any way.
This commit is contained in:
@@ -137,8 +137,13 @@ FUZZ_TARGET_INIT(wallet_notifications, initialize_setup)
|
||||
block.vtx.emplace_back(MakeTransactionRef(tx));
|
||||
}
|
||||
// Mine block
|
||||
a.wallet->blockConnected(block, chain.size());
|
||||
b.wallet->blockConnected(block, chain.size());
|
||||
const uint256& hash = block.GetHash();
|
||||
interfaces::BlockInfo info{hash};
|
||||
info.prev_hash = &block.hashPrevBlock;
|
||||
info.height = chain.size();
|
||||
info.data = █
|
||||
a.wallet->blockConnected(info);
|
||||
b.wallet->blockConnected(info);
|
||||
// Store the coins for the next block
|
||||
Coins coins_new;
|
||||
for (const auto& tx : block.vtx) {
|
||||
@@ -154,8 +159,13 @@ FUZZ_TARGET_INIT(wallet_notifications, initialize_setup)
|
||||
auto& [coins, block]{chain.back()};
|
||||
if (block.vtx.empty()) return; // Can only disconnect if the block was submitted first
|
||||
// Disconnect block
|
||||
a.wallet->blockDisconnected(block, chain.size() - 1);
|
||||
b.wallet->blockDisconnected(block, chain.size() - 1);
|
||||
const uint256& hash = block.GetHash();
|
||||
interfaces::BlockInfo info{hash};
|
||||
info.prev_hash = &block.hashPrevBlock;
|
||||
info.height = chain.size() - 1;
|
||||
info.data = █
|
||||
a.wallet->blockDisconnected(info);
|
||||
b.wallet->blockDisconnected(info);
|
||||
chain.pop_back();
|
||||
});
|
||||
auto& [coins, first_block]{chain.front()};
|
||||
|
||||
@@ -1314,30 +1314,31 @@ void CWallet::transactionRemovedFromMempool(const CTransactionRef& tx, MemPoolRe
|
||||
}
|
||||
}
|
||||
|
||||
void CWallet::blockConnected(const CBlock& block, int height)
|
||||
void CWallet::blockConnected(const interfaces::BlockInfo& block)
|
||||
{
|
||||
const uint256& block_hash = block.GetHash();
|
||||
assert(block.data);
|
||||
LOCK(cs_wallet);
|
||||
|
||||
m_last_block_processed_height = height;
|
||||
m_last_block_processed = block_hash;
|
||||
for (size_t index = 0; index < block.vtx.size(); index++) {
|
||||
SyncTransaction(block.vtx[index], TxStateConfirmed{block_hash, height, static_cast<int>(index)});
|
||||
transactionRemovedFromMempool(block.vtx[index], MemPoolRemovalReason::BLOCK, 0 /* mempool_sequence */);
|
||||
m_last_block_processed_height = block.height;
|
||||
m_last_block_processed = block.hash;
|
||||
for (size_t index = 0; index < block.data->vtx.size(); index++) {
|
||||
SyncTransaction(block.data->vtx[index], TxStateConfirmed{block.hash, block.height, static_cast<int>(index)});
|
||||
transactionRemovedFromMempool(block.data->vtx[index], MemPoolRemovalReason::BLOCK, 0 /* mempool_sequence */);
|
||||
}
|
||||
}
|
||||
|
||||
void CWallet::blockDisconnected(const CBlock& block, int height)
|
||||
void CWallet::blockDisconnected(const interfaces::BlockInfo& block)
|
||||
{
|
||||
assert(block.data);
|
||||
LOCK(cs_wallet);
|
||||
|
||||
// At block disconnection, this will change an abandoned transaction to
|
||||
// be unconfirmed, whether or not the transaction is added back to the mempool.
|
||||
// User may have to call abandontransaction again. It may be addressed in the
|
||||
// future with a stickier abandoned state or even removing abandontransaction call.
|
||||
m_last_block_processed_height = height - 1;
|
||||
m_last_block_processed = block.hashPrevBlock;
|
||||
for (const CTransactionRef& ptx : block.vtx) {
|
||||
m_last_block_processed_height = block.height - 1;
|
||||
m_last_block_processed = *Assert(block.prev_hash);
|
||||
for (const CTransactionRef& ptx : Assert(block.data)->vtx) {
|
||||
SyncTransaction(ptx, TxStateInactive{});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -508,8 +508,8 @@ public:
|
||||
CWalletTx* AddToWallet(CTransactionRef tx, const TxState& state, const UpdateWalletTxFn& update_wtx=nullptr, bool fFlushOnClose=true, bool rescanning_old_block = false);
|
||||
bool LoadToWallet(const uint256& hash, const UpdateWalletTxFn& fill_wtx) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
||||
void transactionAddedToMempool(const CTransactionRef& tx, uint64_t mempool_sequence) override;
|
||||
void blockConnected(const CBlock& block, int height) override;
|
||||
void blockDisconnected(const CBlock& block, int height) override;
|
||||
void blockConnected(const interfaces::BlockInfo& block) override;
|
||||
void blockDisconnected(const interfaces::BlockInfo& block) override;
|
||||
void updatedBlockTip() override;
|
||||
int64_t RescanFromTime(int64_t startTime, const WalletRescanReserver& reserver, bool update);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user