Don't calculate sigops for coinbase scriptsig.
[NovacoinLibrary.git] / Novacoin / CBlock.cs
index 450612a..923b47a 100644 (file)
@@ -164,7 +164,7 @@ namespace Novacoin
                     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;
@@ -179,7 +179,7 @@ namespace Novacoin
                 // Check proof-of-stake block signature
                 if (fCheckSig && !SignatureOK)
                 {
-                    return false;
+                    return false; // Proof-of-Stake signature checking failure.
                 }
 
                 if (!vtx[1].CheckTransaction())
@@ -477,7 +477,7 @@ namespace Novacoin
         /// <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
@@ -509,15 +509,15 @@ namespace Novacoin
                     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)
             {
@@ -594,6 +594,12 @@ namespace Novacoin
 
             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); }
+        }
+
+}
 }