Browse Source

Reset target for V4

Introducing a reset target value (instead of a minimum target value) on V4
PascalCoin 6 years ago
parent
commit
ff1007c493
3 changed files with 23 additions and 5 deletions
  1. 13 1
      src/core/UAccounts.pas
  2. 2 2
      src/core/UBlockChain.pas
  3. 8 2
      src/core/UConst.pas

+ 13 - 1
src/core/UAccounts.pas

@@ -64,6 +64,7 @@ Type
   TPascalCoinProtocol = Class
   public
     Class Function MinimumTarget(protocol_version : Integer): Cardinal;
+    Class Function ResetTarget(current_target : Cardinal; protocol_version : Integer): Cardinal;
     Class Function GetRewardForNewLine(line_index: Cardinal): UInt64;
     Class Function TargetToCompact(target: TRawBytes; protocol_version : Integer): Cardinal;
     Class Function TargetFromCompact(encoded: Cardinal; protocol_version : Integer): TRawBytes;
@@ -824,6 +825,17 @@ begin
   end;
 end;
 
+class function TPascalCoinProtocol.ResetTarget(current_target: Cardinal; protocol_version: Integer): Cardinal;
+begin
+  {$IFDEF ACTIVATE_RANDOMHASH_V4}
+  if protocol_version=CT_PROTOCOL_4 then begin
+    Result := CT_CompactTarget_Reset_v4
+  end else Result := current_target;
+  {$ELSE}
+  Result := current_target;
+  {$ENDIF}
+end;
+
 class function TPascalCoinProtocol.TargetFromCompact(encoded: Cardinal; protocol_version : Integer): TRawBytes;
 Var
   nbits, high, offset, i: Cardinal;
@@ -3354,7 +3366,7 @@ begin
         {$IFDEF ACTIVATE_RANDOMHASH_V4}
         // Change target on first block of V4 protocol
         isChangeTargetBlock := true;
-        newMinimumTargetBlock := TPascalCoinProtocol.MinimumTarget(CT_PROTOCOL_4);
+        newMinimumTargetBlock := TPascalCoinProtocol.ResetTarget(newOperationBlock.compact_target,CT_PROTOCOL_4);
         {$ENDIF}
       end else If (newOperationBlock.protocol_version=CT_PROTOCOL_3) then begin
         If (newOperationBlock.block<CT_Protocol_Upgrade_v3_MinBlock) then begin

+ 2 - 2
src/core/UBlockChain.pas

@@ -1035,7 +1035,7 @@ begin
       FOperationBlock.block := FBank.BlocksCount;
       FOperationBlock.reward := TPascalCoinProtocol.GetRewardForNewLine(FBank.BlocksCount);
       if (resetNewTarget) then begin
-        FOperationBlock.compact_target := TPascalCoinProtocol.MinimumTarget(FOperationBlock.protocol_version);
+        FOperationBlock.compact_target := TPascalCoinProtocol.ResetTarget(FOperationBlock.compact_target,FOperationBlock.protocol_version);
       end else begin
         FOperationBlock.compact_target := FBank.Safebox.GetActualCompactTargetHash(FOperationBlock.protocol_version);
       end;
@@ -1411,7 +1411,7 @@ begin
 
       FOperationBlock.reward := TPascalCoinProtocol.GetRewardForNewLine(FBank.BlocksCount);
       if (resetNewTarget) then begin
-        FOperationBlock.compact_target := TPascalCoinProtocol.MinimumTarget(FOperationBlock.protocol_version);
+        FOperationBlock.compact_target := TPascalCoinProtocol.ResetTarget(FOperationBlock.compact_target,FOperationBlock.protocol_version);
       end else begin
         FOperationBlock.compact_target := FBank.Safebox.GetActualCompactTargetHash(FOperationBlock.protocol_version);
       end;

+ 8 - 2
src/core/UConst.pas

@@ -66,11 +66,17 @@ Const
   CT_MaxWalletAmount = 10000000000000; // ... can be deleted
   //
   CT_MinCompactTarget_v1: Cardinal = {$IFDEF PRODUCTION}$19000000{$ELSE}{$IFDEF TESTNET}$17000000{$ELSE}{$ENDIF}{$ENDIF}; // First compact target of block 0
-  CT_MinCompactTarget_v4: Cardinal = // First compact target of block if using Protocol 4 or higher
+  CT_MinCompactTarget_v4: Cardinal = // Minimum compact target of block if using Protocol 4 or higher
     {$IFDEF ACTIVATE_RANDOMHASH_V4}
-    {$IFDEF PRODUCTION}$0D000000{$ELSE}{$IFDEF TESTNET}$08000000{$ELSE}{$ENDIF}{$ENDIF}
+    {$IFDEF PRODUCTION}$12000000{$ELSE}{$IFDEF TESTNET}$08000000{$ELSE}{$ENDIF}{$ENDIF}
     {$ELSE}CT_MinCompactTarget_v1{$ENDIF};
 
+  {$IFDEF ACTIVATE_RANDOMHASH_V4}
+  CT_CompactTarget_Reset_v4: Cardinal = // First compact target of block if using Protocol 4 and RandomHash is Active
+    {$IFDEF PRODUCTION}$16000000{$ELSE}$08000000{$ENDIF};
+  {$ENDIF}
+
+
   CT_CalcNewTargetBlocksAverage: Cardinal = 100;
   CT_CalcNewTargetLimitChange_SPLIT = 10;