Browse Source

GetActualTargetHash change to allow v3

GetActualTargetHash was limited to protocol 1 or 2, now will allow
future protocols changes thanks to change boolean value (1 or 2) for
Word value
PascalCoin 7 years ago
parent
commit
5769928276
3 changed files with 14 additions and 12 deletions
  1. 10 8
      src/core/UAccounts.pas
  2. 3 3
      src/core/UBlockChain.pas
  3. 1 1
      src/core/UPoolMining.pas

+ 10 - 8
src/core/UAccounts.pas

@@ -273,8 +273,8 @@ Type
 
     Function IsValidNewOperationsBlock(Const newOperationBlock : TOperationBlock; checkSafeBoxHash : Boolean; var errors : AnsiString) : Boolean;
     class Function IsValidOperationBlock(Const newOperationBlock : TOperationBlock; var errors : AnsiString) : Boolean;
-    Function GetActualTargetHash(UseProtocolV2 : Boolean): TRawBytes;
-    Function GetActualCompactTargetHash(UseProtocolV2 : Boolean): Cardinal;
+    Function GetActualTargetHash(protocolVersion : Word): TRawBytes;
+    Function GetActualCompactTargetHash(protocolVersion : Word): Cardinal;
     Function FindAccountByName(aName : AnsiString) : Integer;
 
     Procedure Clear;
@@ -2314,7 +2314,7 @@ begin
     end;
   end;
   // compact_target
-  target_hash:=GetActualTargetHash(newOperationBlock.protocol_version=CT_PROTOCOL_2);
+  target_hash:=GetActualTargetHash(newOperationBlock.protocol_version);
   if (newOperationBlock.compact_target <> TPascalCoinProtocol.TargetToCompact(target_hash)) then begin
     errors := 'Invalid target found:'+IntToHex(newOperationBlock.compact_target,8)+' actual:'+IntToHex(TPascalCoinProtocol.TargetToCompact(target_hash),8);
     exit;
@@ -2394,7 +2394,7 @@ begin
   Result := true;
 end;
 
-function TPCSafeBox.GetActualTargetHash(UseProtocolV2 : Boolean): TRawBytes;
+function TPCSafeBox.GetActualTargetHash(protocolVersion : Word): TRawBytes;
 { Target is calculated in each block with avg obtained in previous
   CT_CalcNewDifficulty blocks.
   If Block is lower than CT_CalcNewDifficulty then is calculated
@@ -2416,9 +2416,9 @@ begin
     ts2 := Block(BlocksCount-CalcBack-1).blockchainInfo.timestamp;
     tsTeorical := (CalcBack * CT_NewLineSecondsAvg);
     tsReal := (ts1 - ts2);
-    If (Not UseProtocolV2) then begin
+    If (protocolVersion=CT_PROTOCOL_1) then begin
       Result := TPascalCoinProtocol.GetNewTarget(tsTeorical, tsReal,TPascalCoinProtocol.TargetFromCompact(lastBlock.compact_target));
-    end else begin
+    end else if (protocolVersion=CT_PROTOCOL_2) then begin
       CalcBack := CalcBack DIV CT_CalcNewTargetLimitChange_SPLIT;
       If CalcBack=0 then CalcBack := 1;
       ts2 := Block(BlocksCount-CalcBack-1).blockchainInfo.timestamp;
@@ -2436,13 +2436,15 @@ begin
         // Nothing to do!
         Result:=TPascalCoinProtocol.TargetFromCompact(lastBlock.compact_target);
       end;
+    end else begin
+      Raise Exception.Create('ERROR DEV 20180306-1 Protocol not valid');
     end;
   end;
 end;
 
-function TPCSafeBox.GetActualCompactTargetHash(UseProtocolV2 : Boolean): Cardinal;
+function TPCSafeBox.GetActualCompactTargetHash(protocolVersion : Word): Cardinal;
 begin
-  Result := TPascalCoinProtocol.TargetToCompact(GetActualTargetHash(UseProtocolV2));
+  Result := TPascalCoinProtocol.TargetToCompact(GetActualTargetHash(protocolVersion));
 end;
 
 function TPCSafeBox.FindAccountByName(aName: AnsiString): Integer;

+ 3 - 3
src/core/UBlockChain.pas

@@ -881,7 +881,7 @@ begin
       end;
       FOperationBlock.block := bank.BlocksCount;
       FOperationBlock.reward := TPascalCoinProtocol.GetRewardForNewLine(bank.BlocksCount);
-      FOperationBlock.compact_target := bank.Safebox.GetActualCompactTargetHash(FOperationBlock.protocol_version=CT_PROTOCOL_2);
+      FOperationBlock.compact_target := bank.Safebox.GetActualCompactTargetHash(FOperationBlock.protocol_version);
       FOperationBlock.initial_safe_box_hash := bank.SafeBox.SafeBoxHash;
       If Bank.LastOperationBlock.timestamp>FOperationBlock.timestamp then
         FOperationBlock.timestamp := Bank.LastOperationBlock.timestamp;
@@ -937,7 +937,7 @@ begin
     lastopb := FOperationBlock;
     FOperationBlock := Operations.FOperationBlock;
     FOperationBlock.account_key := lastopb.account_key; // Except AddressKey
-    FOperationBlock.compact_target := Bank.Safebox.GetActualCompactTargetHash(FOperationBlock.protocol_version=CT_PROTOCOL_2);
+    FOperationBlock.compact_target := Bank.Safebox.GetActualCompactTargetHash(FOperationBlock.protocol_version);
     FIsOnlyOperationBlock := Operations.FIsOnlyOperationBlock;
     FOperationsHashTree.CopyFromHashTree(Operations.FOperationsHashTree);
     FOperationBlock.operations_hash := FOperationsHashTree.HashTree;
@@ -1219,7 +1219,7 @@ begin
       end;
       FOperationBlock.block := bank.BlocksCount;
       FOperationBlock.reward := TPascalCoinProtocol.GetRewardForNewLine(bank.BlocksCount);
-      FOperationBlock.compact_target := bank.SafeBox.GetActualCompactTargetHash(FOperationBlock.protocol_version=CT_PROTOCOL_2);
+      FOperationBlock.compact_target := bank.SafeBox.GetActualCompactTargetHash(FOperationBlock.protocol_version);
       FOperationBlock.initial_safe_box_hash := bank.SafeBox.SafeBoxHash;
       If Bank.LastOperationBlock.timestamp>FOperationBlock.timestamp then
         FOperationBlock.timestamp := Bank.LastOperationBlock.timestamp;

+ 1 - 1
src/core/UPoolMining.pas

@@ -819,7 +819,7 @@ begin
         P := l[i];
         // Best practices: Only will accept a solution if timestamp >= sent timestamp for this job (1.5.3)
         If (P^.SentMinTimestamp<=_timestamp) then begin
-          _targetPoW := FNodeNotifyEvents.Node.Bank.SafeBox.GetActualTargetHash(P^.OperationsComp.OperationBlock.protocol_version=CT_PROTOCOL_2);
+          _targetPoW := FNodeNotifyEvents.Node.Bank.SafeBox.GetActualTargetHash(P^.OperationsComp.OperationBlock.protocol_version);
           P^.OperationsComp.Update_And_RecalcPOW(_nOnce,_timestamp,_payload);
           if (P^.OperationsComp.OperationBlock.proof_of_work<=_targetPoW) then begin
             // Candidate!