Changeset View
Changeset View
Standalone View
Standalone View
src/consensus/tx_verify.cpp
Show First 20 Lines • Show All 304 Lines • ▼ Show 20 Lines | for (const auto &in : tx.vin) { | ||||
nValueIn += coin.GetTxOut().nValue; | nValueIn += coin.GetTxOut().nValue; | ||||
if (!MoneyRange(coin.GetTxOut().nValue) || !MoneyRange(nValueIn)) { | if (!MoneyRange(coin.GetTxOut().nValue) || !MoneyRange(nValueIn)) { | ||||
return state.DoS(100, false, REJECT_INVALID, | return state.DoS(100, false, REJECT_INVALID, | ||||
"bad-txns-inputvalues-outofrange"); | "bad-txns-inputvalues-outofrange"); | ||||
} | } | ||||
} | } | ||||
if (nValueIn < tx.GetValueOut()) { | if (nValueIn < tx.GetValueOut()) { | ||||
return state.DoS(100, false, REJECT_INVALID, "bad-txns-in-belowout", | return state.DoS( | ||||
false, strprintf("value in (%s) < value out (%s)", | 100, false, REJECT_INVALID, "bad-txns-in-belowout", false, | ||||
FormatMoney(nValueIn), | strprintf("value in (%s) < value out (%s)", FormatMoney(nValueIn), | ||||
FormatMoney(tx.GetValueOut()))); | FormatMoney(tx.GetValueOut()))); | ||||
} | } | ||||
// Tally transaction fees | // Tally transaction fees | ||||
Amount nTxFee = nValueIn - tx.GetValueOut(); | Amount nTxFee = nValueIn - tx.GetValueOut(); | ||||
if (nTxFee < Amount::zero()) { | if (nTxFee < Amount::zero()) { | ||||
return state.DoS(100, false, REJECT_INVALID, "bad-txns-fee-negative"); | return state.DoS(100, false, REJECT_INVALID, "bad-txns-fee-negative"); | ||||
} | } | ||||
nFees += nTxFee; | nFees += nTxFee; | ||||
if (!MoneyRange(nFees)) { | if (!MoneyRange(nFees)) { | ||||
return state.DoS(100, false, REJECT_INVALID, "bad-txns-fee-outofrange"); | return state.DoS(100, false, REJECT_INVALID, "bad-txns-fee-outofrange"); | ||||
} | } | ||||
return true; | return true; | ||||
} | } | ||||
} // namespace Consensus | } // namespace Consensus |