Auto merge of #4343 - oxarbitrage:issue3083, r=str4d
Add expired transaction notifications Closes https://github.com/zcash/zcash/issues/3083
This commit is contained in:
commit
ac4e91c6f4
12
src/init.cpp
12
src/init.cpp
|
@ -368,6 +368,7 @@ std::string HelpMessage(HelpMessageMode mode)
|
|||
#ifndef WIN32
|
||||
strUsage += HelpMessageOpt("-sysperms", _("Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)"));
|
||||
#endif
|
||||
strUsage += HelpMessageOpt("-txexpirynotify=<cmd>", _("Execute command when transaction expires (%s in cmd is replaced by transaction id)"));
|
||||
strUsage += HelpMessageOpt("-txindex", strprintf(_("Maintain a full transaction index, used by the getrawtransaction rpc call (default: %u)"), DEFAULT_TXINDEX));
|
||||
|
||||
strUsage += HelpMessageGroup(_("Connection options:"));
|
||||
|
@ -529,6 +530,14 @@ static void BlockNotifyCallback(const uint256& hashNewTip)
|
|||
boost::thread t(runCommand, strCmd); // thread runs free
|
||||
}
|
||||
|
||||
static void TxExpiryNotifyCallback(const uint256& txid)
|
||||
{
|
||||
std::string strCmd = GetArg("-txexpirynotify", "");
|
||||
|
||||
boost::replace_all(strCmd, "%s", txid.GetHex());
|
||||
boost::thread t(runCommand, strCmd); // thread runs free
|
||||
}
|
||||
|
||||
struct CImportingNow
|
||||
{
|
||||
CImportingNow() {
|
||||
|
@ -1569,6 +1578,9 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|||
if (mapArgs.count("-blocknotify"))
|
||||
uiInterface.NotifyBlockTip.connect(BlockNotifyCallback);
|
||||
|
||||
if (mapArgs.count("-txexpirynotify"))
|
||||
uiInterface.NotifyTxExpiration.connect(TxExpiryNotifyCallback);
|
||||
|
||||
uiInterface.InitMessage(_("Activating best chain..."));
|
||||
// scan for better chains in the block chain database, that are not yet connected in the active best chain
|
||||
CValidationState state;
|
||||
|
|
|
@ -3161,7 +3161,11 @@ bool static ConnectTip(CValidationState& state, const CChainParams& chainparams,
|
|||
mempool.removeForBlock(pblock->vtx, pindexNew->nHeight, txConflicted, !IsInitialBlockDownload(chainparams));
|
||||
|
||||
// Remove transactions that expire at new block height from mempool
|
||||
mempool.removeExpired(pindexNew->nHeight);
|
||||
auto ids = mempool.removeExpired(pindexNew->nHeight);
|
||||
|
||||
for (auto id : ids) {
|
||||
uiInterface.NotifyTxExpiration(id);
|
||||
}
|
||||
|
||||
// Update chainActive & related variables.
|
||||
UpdateTip(pindexNew, chainparams);
|
||||
|
|
|
@ -406,7 +406,7 @@ void CTxMemPool::removeConflicts(const CTransaction &tx, std::list<CTransaction>
|
|||
}
|
||||
}
|
||||
|
||||
void CTxMemPool::removeExpired(unsigned int nBlockHeight)
|
||||
std::vector<uint256> CTxMemPool::removeExpired(unsigned int nBlockHeight)
|
||||
{
|
||||
// Remove expired txs from the mempool
|
||||
LOCK(cs);
|
||||
|
@ -418,11 +418,14 @@ void CTxMemPool::removeExpired(unsigned int nBlockHeight)
|
|||
transactionsToRemove.push_back(tx);
|
||||
}
|
||||
}
|
||||
std::vector<uint256> ids;
|
||||
for (const CTransaction& tx : transactionsToRemove) {
|
||||
list<CTransaction> removed;
|
||||
remove(tx, removed, true);
|
||||
ids.push_back(tx.GetHash());
|
||||
LogPrint("mempool", "Removing expired txid: %s\n", tx.GetHash().ToString());
|
||||
}
|
||||
return ids;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -203,7 +203,7 @@ public:
|
|||
void removeWithAnchor(const uint256 &invalidRoot, ShieldedType type);
|
||||
void removeForReorg(const CCoinsViewCache *pcoins, unsigned int nMemPoolHeight, int flags);
|
||||
void removeConflicts(const CTransaction &tx, std::list<CTransaction>& removed);
|
||||
void removeExpired(unsigned int nBlockHeight);
|
||||
std::vector<uint256> removeExpired(unsigned int nBlockHeight);
|
||||
void removeForBlock(const std::vector<CTransaction>& vtx, unsigned int nBlockHeight,
|
||||
std::list<CTransaction>& conflicts, bool fCurrentEstimate = true);
|
||||
void removeWithoutBranchId(uint32_t nMemPoolBranchId);
|
||||
|
|
|
@ -98,6 +98,9 @@ public:
|
|||
|
||||
/** New block has been accepted */
|
||||
boost::signals2::signal<void (const uint256& hash)> NotifyBlockTip;
|
||||
|
||||
/** Transaction expired */
|
||||
boost::signals2::signal<void (const uint256& txid)> NotifyTxExpiration;
|
||||
};
|
||||
|
||||
extern CClientUIInterface uiInterface;
|
||||
|
|
Loading…
Reference in New Issue