double CCoinsViewCache::GetPriority(const CTransaction &tx, int nHeight) { if (tx.IsCoinBase()) return 0.0; double dResult = 0.0; BOOST_FOREACH(const CTxIn& txin, tx.vin) { const CCoins &coins = GetCoins(txin.prevout.hash); if (!coins.IsAvailable(txin.prevout.n)) continue; if (coins.nHeight < nHeight) { dResult += coins.vout[txin.prevout.n].nValue * (nHeight-coins.nHeight); } } return tx.ComputePriority(dResult); }
double CCoinsViewCache::GetPriority(const CTransaction& tx, int nHeight) const { if (tx.IsCoinBase() || tx.IsCoinStake()) return 0.0; double dResult = 0.0; for (const CTxIn& txin: tx.vin) { const CCoins* coins = AccessCoins(txin.prevout.hash); assert(coins); if (!coins->IsAvailable(txin.prevout.n)) continue; if (coins->nHeight < nHeight) { dResult += coins->vout[txin.prevout.n].nValue * (nHeight - coins->nHeight); } } return tx.ComputePriority(dResult); }
double CCoinsViewCache::GetPriority(const CTransaction &tx, int nHeight, CAmount &inChainInputValue) const { inChainInputValue = 0; if (tx.IsCoinBase()) return 0.0; double dResult = 0.0; BOOST_FOREACH(const CTxIn& txin, tx.vin) { const Coin& coin = AccessCoin(txin.prevout); if (coin.IsSpent()) continue; if (coin.nHeight <= nHeight) { dResult += coin.out.nValue * (nHeight-coin.nHeight); inChainInputValue += coin.out.nValue; } } return tx.ComputePriority(dResult); }
double CCoinsViewCache::GetPriority(const CTransaction &tx, int nHeight, CAmount &inChainInputValue) const { inChainInputValue = 0; if (tx.IsCoinBase()) return 0.0; double dResult = 0.0; BOOST_FOREACH(const CTxIn& txin, tx.vin) { const CCoins* coins = AccessCoins(txin.prevout.hash); assert(coins); if (!coins->IsAvailable(txin.prevout.n)) continue; if (coins->nHeight <= nHeight) { dResult += coins->vout[txin.prevout.n].nValue * (nHeight-coins->nHeight); inChainInputValue += coins->vout[txin.prevout.n].nValue; } } return tx.ComputePriority(dResult); }