Herman Schoenfeld 7 роки тому
батько
коміт
c6afc56ecc

+ 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;

+ 14 - 1
src/gui-classic/UFRMWallet.pas

@@ -269,6 +269,7 @@ type
     procedure OnNetNodeServersUpdated(Sender : TObject);
     procedure OnNetBlackListUpdated(Sender : TObject);
     Procedure OnNodeMessageEvent(NetConnection : TNetConnection; MessageData : TRawBytes);
+    Procedure OnNodeKeysActivity(Sender : TObject);
     Procedure OnSelectedAccountsGridUpdated(Sender : TObject);
     Procedure OnMiningServerNewBlockFound(Sender : TObject);
     Procedure UpdateConnectionStatus;
@@ -898,6 +899,7 @@ begin
   FNodeNotifyEvents := TNodeNotifyEvents.Create(Self);
   FNodeNotifyEvents.OnBlocksChanged := OnNewAccount;
   FNodeNotifyEvents.OnNodeMessageEvent := OnNodeMessageEvent;
+  FNodeNotifyEvents.OnKeyActivity := OnNodeKeysActivity;
   FAccountsGrid := TAccountsGrid.Create(Self);
   FAccountsGrid.DrawGrid := dgAccounts;
   FAccountsGrid.AllowMultiSelect := True;
@@ -1559,6 +1561,13 @@ begin
   lblReceivedMessages.Visible := true;
 end;
 
+procedure TFRMWallet.OnNodeKeysActivity(Sender: TObject);
+begin
+  // XXXXXXXXXXXXXXX
+  TLog.NewLog(ltInfo,ClassName,'OnNodeKeysActivity FIRED XXXXXXXXXXXXXX');  // XXXXXXXXXXX
+  DoUpdateAccounts;
+end;
+
 procedure TFRMWallet.OnReceivedHelloMessage(Sender: TObject);
 Var nsarr : TNodeServerAddressArray;
   i : Integer;
@@ -2008,6 +2017,7 @@ Var i,last_i : Integer;
 begin
   If (Not Assigned(FOrderedAccountsKeyList)) And (Assigned(FNode)) Then begin
     FOrderedAccountsKeyList := TOrderedAccountKeysList.Create(FNode.Bank.SafeBox,false);
+    FNodeNotifyEvents.WatchKeys := FOrderedAccountsKeyList; // XXXXXXXXX Assign the Keys to Watch!!!
   end;
   if (cbMyPrivateKeys.ItemIndex>=0) then last_i := PtrInt(cbMyPrivateKeys.Items.Objects[cbMyPrivateKeys.ItemIndex])
   else last_i := -1;
@@ -2024,7 +2034,10 @@ begin
       end else begin
         s := wk.Name;
       end;
-      if Not Assigned(wk.PrivateKey) then s := s + '(*)';
+      if Not Assigned(wk.PrivateKey) then begin
+        if wk.CryptedKey<>'' then s:=s+' (Encrypted, need password)';
+        s:=s+' (* without key)';
+      end;
       cbMyPrivateKeys.Items.AddObject(s,TObject(i));
     end;
     cbMyPrivateKeys.Sorted := true;