Exemplo n.º 1
0
const CTxOut &CCoinsViewCache::GetOutputFor(const CTxIn& input, int& nVersion) const
{
    const CCoins* coins = AccessCoins(input.prevout.hash);
    assert(coins && coins->IsAvailable(input.prevout.n));
    nVersion = coins->nVersion;
    return coins->vout[input.prevout.n];
}
Exemplo n.º 2
0
bool CCoinsViewCache::HaveInputs(const CTransaction& tx) const
{
    if (!tx.IsCoinBase()) {
        for (unsigned int i = 0; i < tx.vin.size(); i++) {
            const COutPoint &prevout = tx.vin[i].prevout;
            const CCoins* coins = AccessCoins(prevout.hash);
            if (!coins || !coins->IsAvailable(prevout.n)) {
                return false;
            }
        }
    }
    return true;
}
Exemplo n.º 3
0
CAmount CCoinsViewCache::GetValueIn(const CTransaction& tx, int valuationHeight) const
{
    if (tx.IsCoinBase())
        return 0;

    CAmount nValueIn = 0;
    for (unsigned int i = 0; i < tx.vin.size(); i++){
        CTxOut outTX=GetOutputFor(tx.vin[i]);
        const COutPoint &prevout = tx.vin[i].prevout;
        const CCoins* coins = AccessCoins(prevout.hash);
        nValueIn += outTX.GetValueWithInterest(coins->nHeight,valuationHeight);
    }

    return nValueIn;
}
Exemplo n.º 4
0
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);
}
Exemplo n.º 5
0
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);
}