Browse Source

Get Hashrate in Hash per second

Need for Randomhash slow hashing values
PascalCoin 6 years ago
parent
commit
2222e6d344
1 changed files with 22 additions and 11 deletions
  1. 22 11
      src/core/UAccounts.pas

+ 22 - 11
src/core/UAccounts.pas

@@ -384,6 +384,7 @@ Type
     Function Block(block_number : Cardinal) : TBlockAccount;
     Function Block(block_number : Cardinal) : TBlockAccount;
     Function CalcSafeBoxHash : TRawBytes;
     Function CalcSafeBoxHash : TRawBytes;
     Function CalcBlockHashRateInKhs(block_number : Cardinal; Previous_blocks_average : Cardinal) : Int64;
     Function CalcBlockHashRateInKhs(block_number : Cardinal; Previous_blocks_average : Cardinal) : Int64;
+    Function CalcBlockHashRateInHs(block_number : Cardinal; Previous_blocks_average : Cardinal) : TBigNum;
     Property TotalBalance : Int64 read FTotalBalance;
     Property TotalBalance : Int64 read FTotalBalance;
     Procedure StartThreadSafe;
     Procedure StartThreadSafe;
     Procedure EndThreadSave;
     Procedure EndThreadSave;
@@ -2066,18 +2067,17 @@ begin
   end;
   end;
 end;
 end;
 
 
-function TPCSafeBox.CalcBlockHashRateInKhs(block_number: Cardinal;
-  Previous_blocks_average: Cardinal): Int64;
+function TPCSafeBox.CalcBlockHashRateInHs(block_number, Previous_blocks_average: Cardinal): TBigNum;
 Var c,t : Cardinal;
 Var c,t : Cardinal;
   t_sum : Extended;
   t_sum : Extended;
-  bn, bn_sum : TBigNum;
+  bn : TBigNum;
 begin
 begin
   FLock.Acquire;
   FLock.Acquire;
   Try
   Try
-    bn_sum := TBigNum.Create;
+    Result := TBigNum.Create;
     try
     try
       if (block_number=0) then begin
       if (block_number=0) then begin
-        Result := 1;
+        Result.Value := 1;
         exit;
         exit;
       end;
       end;
       if (block_number<0) Or (block_number>=FBlockAccountsList.Count) then raise Exception.Create('Invalid block number: '+inttostr(block_number));
       if (block_number<0) Or (block_number>=FBlockAccountsList.Count) then raise Exception.Create('Invalid block number: '+inttostr(block_number));
@@ -2089,28 +2089,39 @@ begin
       while (c<=block_number) do begin
       while (c<=block_number) do begin
         bn := TBigNum.TargetToHashRate(PBlockAccount(FBlockAccountsList.Items[c])^.blockchainInfo.compact_target);
         bn := TBigNum.TargetToHashRate(PBlockAccount(FBlockAccountsList.Items[c])^.blockchainInfo.compact_target);
         try
         try
-          bn_sum.Add(bn);
+          Result.Add(bn);
         finally
         finally
           bn.Free;
           bn.Free;
         end;
         end;
         t_sum := t_sum + (PBlockAccount(FBlockAccountsList.Items[c])^.blockchainInfo.timestamp - PBlockAccount(FBlockAccountsList.Items[c-1])^.blockchainInfo.timestamp);
         t_sum := t_sum + (PBlockAccount(FBlockAccountsList.Items[c])^.blockchainInfo.timestamp - PBlockAccount(FBlockAccountsList.Items[c-1])^.blockchainInfo.timestamp);
         inc(c);
         inc(c);
       end;
       end;
-      bn_sum.Divide(Previous_blocks_average); // Obtain target average
+      Result.Divide(Previous_blocks_average); // Obtain target average
       t_sum := t_sum / Previous_blocks_average; // time average
       t_sum := t_sum / Previous_blocks_average; // time average
       t := Round(t_sum);
       t := Round(t_sum);
       if (t<>0) then begin
       if (t<>0) then begin
-        bn_sum.Divide(t);
+        Result.Divide(t);
       end;
       end;
-      Result := bn_sum.Divide(1024).Value; // Value in Kh/s
-    Finally
-      bn_sum.Free;
+    Except
+      Result.Free;
+      Raise;
     end;
     end;
   Finally
   Finally
     FLock.Release;
     FLock.Release;
   End;
   End;
 end;
 end;
 
 
+function TPCSafeBox.CalcBlockHashRateInKhs(block_number: Cardinal; Previous_blocks_average: Cardinal): Int64;
+var bn : TBigNum;
+begin
+  bn := CalcBlockHashRateInHs(block_number,Previous_blocks_average);
+  try
+    Result := bn.Divide(1000).Value; // Value in Kh/s
+  finally
+    bn.Free;
+  end;
+end;
+
 function TPCSafeBox.CalcSafeBoxHash: TRawBytes;
 function TPCSafeBox.CalcSafeBoxHash: TRawBytes;
 begin
 begin
   StartThreadSafe;
   StartThreadSafe;