return false;
}
- // Coinbase output should be empty if proof-of-stake block
+ // Coinbase output must be empty if proof-of-stake block
if (vtx[0].vout.Length != 1 || !vtx[0].vout[0].IsEmpty)
{
return false;
// Check proof-of-stake block signature
if (fCheckSig && !SignatureOK)
{
- return false;
+ return false; // Proof-of-Stake signature checking failure.
}
if (!vtx[1].CheckTransaction())
/// <param name="nBits">Packed difficulty representation.</param>
/// <param name="nFees">Amount of fees.</param>
/// <returns>Reward value.</returns>
- public static ulong GetProofOfWorkReward(uint nBits, ulong nFees)
+ public static long GetProofOfWorkReward(uint nBits, long nFees)
{
// NovaCoin: subsidy is cut in half every 64x multiply of PoW difficulty
// A reasonably continuous curve is used to avoid shock to market
bnLowerBound = bnMidValue;
}
- ulong nSubsidy = bnUpperBound;
+ long nSubsidy = (long)bnUpperBound;
nSubsidy = (nSubsidy / CTransaction.nCent) * CTransaction.nCent;
return Math.Min(nSubsidy, NetInfo.nMaxMintProofOfWork) + nFees;
}
- public static ulong GetProofOfStakeReward(ulong nCoinAge, uint nBits, uint nTime)
+ public static long GetProofOfStakeReward(long nCoinAge, uint nBits, uint nTime)
{
- ulong nRewardCoinYear, nSubsidy, nSubsidyLimit = 10 * CTransaction.nCoin;
+ long nRewardCoinYear, nSubsidy, nSubsidyLimit = 10 * CTransaction.nCoin;
if (nTime > NetInfo.nDynamicStakeRewardTime)
{
return nSubsidy;
}
- }
+
+ public Tuple<COutPoint, uint> ProofOfStake
+ {
+ get { return IsProofOfStake ? new Tuple<COutPoint, uint>(vtx[1].vin[0].prevout, vtx[1].nTime) : new Tuple<COutPoint, uint>(new COutPoint(), 0); }
+ }
+
+}
}