Verification of claimed Proof-of-Work.
authorCryptoManiac <balthazar@yandex.ru>
Wed, 2 Sep 2015 16:47:59 +0000 (19:47 +0300)
committerCryptoManiac <balthazar@yandex.ru>
Wed, 2 Sep 2015 16:47:59 +0000 (19:47 +0300)
Novacoin/CBlock.cs
Novacoin/NetInfo.cs

index d80e68e..9bf7e36 100644 (file)
@@ -271,7 +271,22 @@ namespace Novacoin
 
         private bool CheckProofOfWork(uint256 hash, uint nBits)
         {
-            // TODO: stub!
+            uint256 nTarget = new uint256();
+            nTarget.Compact = nBits;
+
+            // Check range
+            if (nTarget > NetUtils.nProofOfWorkLimit)
+            {
+                // nBits below minimum work
+                return false; 
+            }
+
+            // Check proof of work matches claimed amount
+            if (hash > nTarget)
+            {
+                //  hash doesn't match nBits
+                return false;
+            }
 
             return true;
         }
index e0307bc..a899fbd 100644 (file)
@@ -4,6 +4,14 @@ namespace Novacoin
 {
     internal class NetUtils
     {
+        public static uint256 nProofOfWorkLimit = ~(new uint256(0)) >> 20;        // "standard" scrypt target limit for proof of work, results with 0,000244140625 proof-of-work difficulty
+        public static uint256 nProofOfStakeLegacyLimit = ~(new uint256(0)) >> 24; // proof of stake target limit from block #15000 and until 20 June 2013, results with 0,00390625 proof of stake difficulty
+
+        public static uint256 nProofOfStakeLimit = ~(new uint256(0)) >> 27;       // proof of stake target limit since 20 June 2013, equal to 0.03125  proof of stake difficulty
+        public static uint256 nProofOfStakeHardLimit = ~(new uint256(0)) >> 30;   // disabled temporarily, will be used in the future to fix minimal proof of stake difficulty at 0.25
+
+        public static uint256 nPoWBase = new uint256("00000000ffff0000000000000000000000000000000000000000000000000000"); // difficulty-1 target
+
         public static readonly uint nLockTimeThreshold = 500000000;
         private static readonly uint nDrift = 7200;