mirror of
https://github.com/twisterarmy/twister-core.git
synced 2025-01-11 07:17:53 +00:00
Monitor incoming transactions for spends by (a copy of) your own wallet
This commit is contained in:
parent
72e962cf55
commit
8857aeb223
46
main.cpp
46
main.cpp
@ -178,9 +178,12 @@ bool AddToWallet(const CWalletTx& wtxIn)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AddToWalletIfMine(const CTransaction& tx, const CBlock* pblock)
|
bool AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pblock, bool fUpdate = false)
|
||||||
{
|
{
|
||||||
if (tx.IsMine() || mapWallet.count(tx.GetHash()))
|
uint256 hash = tx.GetHash();
|
||||||
|
bool fExisted = mapWallet.count(hash);
|
||||||
|
if (fExisted && !fUpdate) return false;
|
||||||
|
if (fExisted || tx.IsMine() || tx.IsFromMe())
|
||||||
{
|
{
|
||||||
CWalletTx wtx(tx);
|
CWalletTx wtx(tx);
|
||||||
// Get merkle branch if transaction was found in a block
|
// Get merkle branch if transaction was found in a block
|
||||||
@ -188,20 +191,7 @@ bool AddToWalletIfMine(const CTransaction& tx, const CBlock* pblock)
|
|||||||
wtx.SetMerkleBranch(pblock);
|
wtx.SetMerkleBranch(pblock);
|
||||||
return AddToWallet(wtx);
|
return AddToWallet(wtx);
|
||||||
}
|
}
|
||||||
return true;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
bool AddToWalletIfFromMe(const CTransaction& tx, const CBlock* pblock)
|
|
||||||
{
|
|
||||||
if (tx.IsFromMe() || mapWallet.count(tx.GetHash()))
|
|
||||||
{
|
|
||||||
CWalletTx wtx(tx);
|
|
||||||
// Get merkle branch if transaction was found in a block
|
|
||||||
if (pblock)
|
|
||||||
wtx.SetMerkleBranch(pblock);
|
|
||||||
return AddToWallet(wtx);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EraseFromWallet(uint256 hash)
|
bool EraseFromWallet(uint256 hash)
|
||||||
@ -911,22 +901,8 @@ int ScanForWalletTransactions(CBlockIndex* pindexStart)
|
|||||||
block.ReadFromDisk(pindex, true);
|
block.ReadFromDisk(pindex, true);
|
||||||
foreach(CTransaction& tx, block.vtx)
|
foreach(CTransaction& tx, block.vtx)
|
||||||
{
|
{
|
||||||
uint256 hash = tx.GetHash();
|
if (AddToWalletIfInvolvingMe(tx, &block))
|
||||||
if (mapWallet.count(hash)) continue;
|
ret++;
|
||||||
AddToWalletIfMine(tx, &block);
|
|
||||||
if (mapWallet.count(hash))
|
|
||||||
{
|
|
||||||
++ret;
|
|
||||||
printf("Added missing RECEIVE %s\n", hash.ToString().c_str());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
AddToWalletIfFromMe(tx, &block);
|
|
||||||
if (mapWallet.count(hash))
|
|
||||||
{
|
|
||||||
++ret;
|
|
||||||
printf("Added missing SEND %s\n", hash.ToString().c_str());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
pindex = pindex->pnext;
|
pindex = pindex->pnext;
|
||||||
}
|
}
|
||||||
@ -1471,7 +1447,7 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex)
|
|||||||
|
|
||||||
// Watch for transactions paying to me
|
// Watch for transactions paying to me
|
||||||
foreach(CTransaction& tx, vtx)
|
foreach(CTransaction& tx, vtx)
|
||||||
AddToWalletIfMine(tx, this);
|
AddToWalletIfInvolvingMe(tx, this, true);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -2714,7 +2690,7 @@ bool ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
|||||||
bool fMissingInputs = false;
|
bool fMissingInputs = false;
|
||||||
if (tx.AcceptToMemoryPool(true, &fMissingInputs))
|
if (tx.AcceptToMemoryPool(true, &fMissingInputs))
|
||||||
{
|
{
|
||||||
AddToWalletIfMine(tx, NULL);
|
AddToWalletIfInvolvingMe(tx, NULL, true);
|
||||||
RelayMessage(inv, vMsg);
|
RelayMessage(inv, vMsg);
|
||||||
mapAlreadyAskedFor.erase(inv);
|
mapAlreadyAskedFor.erase(inv);
|
||||||
vWorkQueue.push_back(inv.hash);
|
vWorkQueue.push_back(inv.hash);
|
||||||
@ -2735,7 +2711,7 @@ bool ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
|||||||
if (tx.AcceptToMemoryPool(true))
|
if (tx.AcceptToMemoryPool(true))
|
||||||
{
|
{
|
||||||
printf(" accepted orphan tx %s\n", inv.hash.ToString().substr(0,10).c_str());
|
printf(" accepted orphan tx %s\n", inv.hash.ToString().substr(0,10).c_str());
|
||||||
AddToWalletIfMine(tx, NULL);
|
AddToWalletIfInvolvingMe(tx, NULL, true);
|
||||||
RelayMessage(inv, vMsg);
|
RelayMessage(inv, vMsg);
|
||||||
mapAlreadyAskedFor.erase(inv);
|
mapAlreadyAskedFor.erase(inv);
|
||||||
vWorkQueue.push_back(inv.hash);
|
vWorkQueue.push_back(inv.hash);
|
||||||
|
Loading…
Reference in New Issue
Block a user