Remove block signature for proof-of-work blocks since 20 Sep 2013
authoralex <alex@alex-VirtualBox.(none)>
Sat, 15 Jun 2013 13:32:01 +0000 (17:32 +0400)
committeralex <alex@alex-VirtualBox.(none)>
Sat, 15 Jun 2013 13:32:01 +0000 (17:32 +0400)
src/main.cpp
src/rpcmining.cpp

index 20a01f1..a0a2509 100644 (file)
@@ -2144,9 +2144,12 @@ bool CBlock::CheckBlock(bool fCheckPOW, bool fCheckMerkleRoot) const
     if (fCheckMerkleRoot && hashMerkleRoot != BuildMerkleTree())
         return DoS(100, error("CheckBlock() : hashMerkleRoot mismatch"));
 
-    // ppcoin: check block signature
-    if (!CheckBlockSignature())
-        return DoS(100, error("CheckBlock() : bad block signature"));
+    // NovaCoin: check proof-of-stake block signature
+    if (IsProofOfStake() || (!fTestNet && GetBlockTime() < CHAINCHECKS_SWITCH_TIME))
+    {
+        if (!CheckBlockSignature())
+            return DoS(100, error("CheckBlock() : bad block signature"));
+    }
 
     return true;
 }
index 103b933..a8022fc 100644 (file)
@@ -204,8 +204,11 @@ Value getworkex(const Array& params, bool fHelp)
 
         pblock->hashMerkleRoot = pblock->BuildMerkleTree();
 
-        if (!pblock->SignBlock(*pwalletMain))
-            throw JSONRPCError(-100, "Unable to sign block, wallet locked?");
+        if (!fTestNet && pblock->GetBlockTime() < CHAINCHECKS_SWITCH_TIME)
+        {
+            if (!pblock->SignBlock(*pwalletMain))
+                throw JSONRPCError(-100, "Unable to sign block, wallet locked?");
+        }
 
         return CheckWork(pblock, *pwalletMain, reservekey);
     }
@@ -320,8 +323,11 @@ Value getwork(const Array& params, bool fHelp)
         pblock->vtx[0].vin[0].scriptSig = mapNewBlock[pdata->hashMerkleRoot].second;
         pblock->hashMerkleRoot = pblock->BuildMerkleTree();
 
-        if (!pblock->SignBlock(*pwalletMain))
-            throw JSONRPCError(-100, "Unable to sign block, wallet locked?");
+        if (!fTestNet && pblock->GetBlockTime() < CHAINCHECKS_SWITCH_TIME)
+        {
+            if (!pblock->SignBlock(*pwalletMain))
+                throw JSONRPCError(-100, "Unable to sign block, wallet locked?");
+        }
 
         return CheckWork(pblock, *pwalletMain, reservekey);
     }
@@ -504,8 +510,11 @@ Value submitblock(const Array& params, bool fHelp)
         throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Block decode failed");
     }
 
-    if (!block.SignBlock(*pwalletMain))
-        throw JSONRPCError(-100, "Unable to sign block, wallet locked?");
+    if (!fTestNet && block.GetBlockTime() < CHAINCHECKS_SWITCH_TIME)
+    {
+        if (!block.SignBlock(*pwalletMain))
+            throw JSONRPCError(-100, "Unable to sign block, wallet locked?");
+    }
 
     bool fAccepted = ProcessBlock(NULL, &block);
     if (!fAccepted)