|
|
@ -553,7 +553,7 @@ CBlockTreeDB *pblocktree = NULL; |
|
|
|
|
|
|
|
bool AddOrphanTx(const CTransaction& tx, NodeId peer) |
|
|
|
{ |
|
|
|
uint256 hash = tx.GetTxid(); |
|
|
|
uint256 hash = tx.GetHash(); |
|
|
|
if (mapOrphanTransactions.count(hash)) |
|
|
|
return false; |
|
|
|
|
|
|
@ -607,7 +607,7 @@ void EraseOrphansFor(NodeId peer) |
|
|
|
map<uint256, COrphanTx>::iterator maybeErase = iter++; // increment to avoid iterator becoming invalid
|
|
|
|
if (maybeErase->second.fromPeer == peer) |
|
|
|
{ |
|
|
|
EraseOrphanTx(maybeErase->second.tx.GetTxid()); |
|
|
|
EraseOrphanTx(maybeErase->second.tx.GetHash()); |
|
|
|
++nErased; |
|
|
|
} |
|
|
|
} |
|
|
@ -1018,7 +1018,7 @@ CAmount GetMinRelayFee(const CTransaction& tx, unsigned int nBytes, bool fAllowF |
|
|
|
{ |
|
|
|
{ |
|
|
|
LOCK(mempool.cs); |
|
|
|
uint256 hash = tx.GetTxid(); |
|
|
|
uint256 hash = tx.GetHash(); |
|
|
|
double dPriorityDelta = 0; |
|
|
|
CAmount nFeeDelta = 0; |
|
|
|
mempool.ApplyDeltas(hash, dPriorityDelta, nFeeDelta); |
|
|
@ -1073,7 +1073,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa |
|
|
|
return state.DoS(0, false, REJECT_NONSTANDARD, "non-final"); |
|
|
|
|
|
|
|
// is it already in the memory pool?
|
|
|
|
uint256 hash = tx.GetTxid(); |
|
|
|
uint256 hash = tx.GetHash(); |
|
|
|
if (pool.exists(hash)) |
|
|
|
return false; |
|
|
|
|
|
|
@ -1265,7 +1265,7 @@ bool GetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock |
|
|
|
return error("%s: Deserialize or I/O error - %s", __func__, e.what()); |
|
|
|
} |
|
|
|
hashBlock = header.GetHash(); |
|
|
|
if (txOut.GetTxid() != hash) |
|
|
|
if (txOut.GetHash() != hash) |
|
|
|
return error("%s: txid mismatch", __func__); |
|
|
|
return true; |
|
|
|
} |
|
|
@ -1287,7 +1287,7 @@ bool GetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock |
|
|
|
CBlock block; |
|
|
|
if (ReadBlockFromDisk(block, pindexSlow)) { |
|
|
|
BOOST_FOREACH(const CTransaction &tx, block.vtx) { |
|
|
|
if (tx.GetTxid() == hash) { |
|
|
|
if (tx.GetHash() == hash) { |
|
|
|
txOut = tx; |
|
|
|
hashBlock = pindexSlow->GetBlockHash(); |
|
|
|
return true; |
|
|
@ -1578,7 +1578,7 @@ void UpdateCoins(const CTransaction& tx, CValidationState &state, CCoinsViewCach |
|
|
|
} |
|
|
|
|
|
|
|
// add outputs
|
|
|
|
inputs.ModifyCoins(tx.GetTxid())->FromTx(tx, nHeight); |
|
|
|
inputs.ModifyCoins(tx.GetHash())->FromTx(tx, nHeight); |
|
|
|
} |
|
|
|
|
|
|
|
void UpdateCoins(const CTransaction& tx, CValidationState &state, CCoinsViewCache &inputs, int nHeight) |
|
|
@ -1590,7 +1590,7 @@ void UpdateCoins(const CTransaction& tx, CValidationState &state, CCoinsViewCach |
|
|
|
bool CScriptCheck::operator()() { |
|
|
|
const CScript &scriptSig = ptxTo->vin[nIn].scriptSig; |
|
|
|
if (!VerifyScript(scriptSig, scriptPubKey, nFlags, CachingTransactionSignatureChecker(ptxTo, nIn, cacheStore), &error)) { |
|
|
|
return ::error("CScriptCheck(): %s:%d VerifySignature failed: %s", ptxTo->GetTxid().ToString(), nIn, ScriptErrorString(error)); |
|
|
|
return ::error("CScriptCheck(): %s:%d VerifySignature failed: %s", ptxTo->GetHash().ToString(), nIn, ScriptErrorString(error)); |
|
|
|
} |
|
|
|
return true; |
|
|
|
} |
|
|
@ -1605,11 +1605,11 @@ bool NonContextualCheckInputs(const CTransaction& tx, CValidationState &state, c |
|
|
|
// This doesn't trigger the DoS code on purpose; if it did, it would make it easier
|
|
|
|
// for an attacker to attempt to split the network.
|
|
|
|
if (!inputs.HaveInputs(tx)) |
|
|
|
return state.Invalid(error("CheckInputs(): %s inputs unavailable", tx.GetTxid().ToString())); |
|
|
|
return state.Invalid(error("CheckInputs(): %s inputs unavailable", tx.GetHash().ToString())); |
|
|
|
|
|
|
|
// are the JoinSplit's requirements met?
|
|
|
|
if (!inputs.HaveJoinSplitRequirements(tx)) |
|
|
|
return state.Invalid(error("CheckInputs(): %s JoinSplit requirements not met", tx.GetTxid().ToString())); |
|
|
|
return state.Invalid(error("CheckInputs(): %s JoinSplit requirements not met", tx.GetHash().ToString())); |
|
|
|
|
|
|
|
CAmount nValueIn = 0; |
|
|
|
CAmount nFees = 0; |
|
|
@ -1646,13 +1646,13 @@ bool NonContextualCheckInputs(const CTransaction& tx, CValidationState &state, c |
|
|
|
|
|
|
|
if (nValueIn < tx.GetValueOut()) |
|
|
|
return state.DoS(100, error("CheckInputs(): %s value in (%s) < value out (%s)", |
|
|
|
tx.GetTxid().ToString(), FormatMoney(nValueIn), FormatMoney(tx.GetValueOut())), |
|
|
|
tx.GetHash().ToString(), FormatMoney(nValueIn), FormatMoney(tx.GetValueOut())), |
|
|
|
REJECT_INVALID, "bad-txns-in-belowout"); |
|
|
|
|
|
|
|
// Tally transaction fees
|
|
|
|
CAmount nTxFee = nValueIn - tx.GetValueOut(); |
|
|
|
if (nTxFee < 0) |
|
|
|
return state.DoS(100, error("CheckInputs(): %s nTxFee < 0", tx.GetTxid().ToString()), |
|
|
|
return state.DoS(100, error("CheckInputs(): %s nTxFee < 0", tx.GetHash().ToString()), |
|
|
|
REJECT_INVALID, "bad-txns-fee-negative"); |
|
|
|
nFees += nTxFee; |
|
|
|
if (!MoneyRange(nFees)) |
|
|
@ -1871,7 +1871,7 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex |
|
|
|
// undo transactions in reverse order
|
|
|
|
for (int i = block.vtx.size() - 1; i >= 0; i--) { |
|
|
|
const CTransaction &tx = block.vtx[i]; |
|
|
|
uint256 hash = tx.GetTxid(); |
|
|
|
uint256 hash = tx.GetHash(); |
|
|
|
|
|
|
|
// Check that all outputs are available and match the outputs in the block itself
|
|
|
|
// exactly.
|
|
|
@ -2052,7 +2052,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin |
|
|
|
// Do not allow blocks that contain transactions which 'overwrite' older transactions,
|
|
|
|
// unless those are already completely spent.
|
|
|
|
BOOST_FOREACH(const CTransaction& tx, block.vtx) { |
|
|
|
const CCoins* coins = view.AccessCoins(tx.GetTxid()); |
|
|
|
const CCoins* coins = view.AccessCoins(tx.GetHash()); |
|
|
|
if (coins && !coins->IsPruned()) |
|
|
|
return state.DoS(100, error("ConnectBlock(): tried to overwrite transaction"), |
|
|
|
REJECT_INVALID, "bad-txns-BIP30"); |
|
|
@ -2150,7 +2150,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
vPos.push_back(std::make_pair(tx.GetTxid(), pos)); |
|
|
|
vPos.push_back(std::make_pair(tx.GetHash(), pos)); |
|
|
|
pos.nTxOffset += ::GetSerializeSize(tx, SER_DISK, CLIENT_VERSION); |
|
|
|
} |
|
|
|
|
|
|
@ -2207,7 +2207,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin |
|
|
|
// Watch for changes to the previous coinbase transaction.
|
|
|
|
static uint256 hashPrevBestCoinBase; |
|
|
|
GetMainSignals().UpdatedTransaction(hashPrevBestCoinBase); |
|
|
|
hashPrevBestCoinBase = block.vtx[0].GetTxid(); |
|
|
|
hashPrevBestCoinBase = block.vtx[0].GetHash(); |
|
|
|
|
|
|
|
int64_t nTime4 = GetTimeMicros(); nTimeCallbacks += nTime4 - nTime3; |
|
|
|
LogPrint("bench", " - Callbacks: %.2fms [%.2fs]\n", 0.001 * (nTime4 - nTime3), nTimeCallbacks * 0.000001); |
|
|
@ -4649,7 +4649,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, |
|
|
|
CTransaction tx; |
|
|
|
vRecv >> tx; |
|
|
|
|
|
|
|
CInv inv(MSG_TX, tx.GetTxid()); |
|
|
|
CInv inv(MSG_TX, tx.GetHash()); |
|
|
|
pfrom->AddInventoryKnown(inv); |
|
|
|
|
|
|
|
LOCK(cs_main); |
|
|
@ -4671,7 +4671,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, |
|
|
|
|
|
|
|
LogPrint("mempool", "AcceptToMemoryPool: peer=%d %s: accepted %s (poolsz %u)\n", |
|
|
|
pfrom->id, pfrom->cleanSubVer, |
|
|
|
tx.GetTxid().ToString(), |
|
|
|
tx.GetHash().ToString(), |
|
|
|
mempool.mapTx.size()); |
|
|
|
|
|
|
|
// Recursively process any orphan transactions that depended on this one
|
|
|
@ -4740,7 +4740,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, |
|
|
|
LogPrint("mempool", "mapOrphan overflow, removed %u tx\n", nEvicted); |
|
|
|
} else { |
|
|
|
assert(recentRejects); |
|
|
|
recentRejects->insert(tx.GetTxid()); |
|
|
|
recentRejects->insert(tx.GetHash()); |
|
|
|
|
|
|
|
if (pfrom->fWhitelisted) { |
|
|
|
// Always relay transactions received from whitelisted peers, even
|
|
|
@ -4756,7 +4756,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, |
|
|
|
int nDoS = 0; |
|
|
|
if (state.IsInvalid(nDoS)) |
|
|
|
{ |
|
|
|
LogPrint("mempool", "%s from peer=%d %s was not accepted into the memory pool: %s\n", tx.GetTxid().ToString(), |
|
|
|
LogPrint("mempool", "%s from peer=%d %s was not accepted into the memory pool: %s\n", tx.GetHash().ToString(), |
|
|
|
pfrom->id, pfrom->cleanSubVer, |
|
|
|
state.GetRejectReason()); |
|
|
|
pfrom->PushMessage("reject", strCommand, state.GetRejectCode(), |
|
|
|