Browse Source

Save safebox every 10000 blocks

Save a safebox history copy every 10000 blocks and some minor changes to
be Delphi compatible
PascalCoin 7 years ago
parent
commit
0ceea4481f
4 changed files with 19 additions and 8 deletions
  1. 0 4
      src/core/UBlockChain.pas
  2. 1 1
      src/core/UConst.pas
  3. 17 2
      src/core/UFileStorage.pas
  4. 1 1
      src/core/URPC.pas

+ 0 - 4
src/core/UBlockChain.pas

@@ -672,13 +672,9 @@ begin
                 break;
               end else begin
                 // To prevent continuous saving...
-                {$IFDEF TESTNET}
-                Storage.SaveBank;
-                {$ELSE}
                 If (BlocksCount MOD (CT_BankToDiskEveryNBlocks*10))=0 then begin
                   Storage.SaveBank;
                 end;
-                {$ENDIF}
               end;
             end else break;
           end else break;

+ 1 - 1
src/core/UConst.pas

@@ -166,7 +166,7 @@ Const
   CT_DEFAULT_MaxSafeboxSnapshots = 10;
 
   CT_MOLINA  = 1;
-  CT_MOLINA_DECIMAL = Real(CT_MOLINA/1000.0);
+  CT_MOLINA_DECIMAL = {$IFDEF FPC}Real(CT_MOLINA/1000.0);{$ELSE}0.0001;{$ENDIF}
 
   // App Params
   CT_PARAM_GridAccountsStream = 'GridAccountsStreamV2';

+ 17 - 2
src/core/UFileStorage.pas

@@ -20,7 +20,7 @@ unit UFileStorage;
 interface
 
 uses
-  Classes, UBlockChain, SyncObjs, UThread, UAccounts, UCrypto;
+  Classes, {$IFDEF FPC}fileutil,{$ELSE} Windows,{$ENDIF} UBlockChain, SyncObjs, UThread, UAccounts, UCrypto;
 {$I config.inc}
 
 Type
@@ -491,7 +491,7 @@ end;
 
 function TFileStorage.DoSaveBank: Boolean;
 var fs: TFileStream;
-    bankfilename: AnsiString;
+    bankfilename,aux_newfilename: AnsiString;
     ms : TMemoryStream;
 begin
   Result := true;
@@ -513,6 +513,21 @@ begin
     finally
       fs.Free;
     end;
+    // Save a copy each 10000 blocks (aprox 1 month) only when not an orphan
+    if (Orphan='') And ((Bank.BlocksCount MOD (CT_BankToDiskEveryNBlocks*100))=0) then begin
+      aux_newfilename := GetFolder('') + PathDelim+'checkpoint_'+ inttostr(Bank.BlocksCount)+'.safebox';
+      try
+        {$IFDEF FPC}
+        CopyFile(bankfilename,aux_newfilename);
+        {$ELSE}
+        CopyFile(PWideChar(bankfilename),PWideChar(aux_newfilename),False);
+        {$ENDIF}
+      Except
+        On E:Exception do begin
+          TLog.NewLog(lterror,ClassName,'Exception copying extra safebox file '+aux_newfilename+' ('+E.ClassName+'):'+E.Message);
+        end;
+      end;
+    end;
   end;
 end;
 

+ 1 - 1
src/core/URPC.pas

@@ -2486,7 +2486,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject;
   var i,iKey : Integer;
     pubKey : TAccountKey;
     nAccount : Cardinal;
-    _error_desc : AnsiString;
+    _error_desc : String;
   begin
     signedAccounts := 0;
     if (Not (_RPCServer.FWalletKeys.IsValidPassword)) then Exit;