Browse Source

Fixed issue #23

https://github.com/PascalCoin/PascalCoin/issues/23
PascalCoin 8 years ago
parent
commit
eeee928201

+ 6 - 0
Units/PascalCoin/UBlockChain.pas

@@ -186,6 +186,7 @@ Type
     function OperationPayload : TRawBytes; virtual; abstract;
     function OperationPayload : TRawBytes; virtual; abstract;
     function SenderAccount : Cardinal; virtual; abstract;
     function SenderAccount : Cardinal; virtual; abstract;
     function N_Operation : Cardinal; virtual; abstract;
     function N_Operation : Cardinal; virtual; abstract;
+    function IsDestinationAccount(nAccount : Cardinal) : Boolean; virtual;
     Property tag : integer read Ftag Write Ftag;
     Property tag : integer read Ftag Write Ftag;
     function SaveToStorage(Stream: TStream): Boolean;
     function SaveToStorage(Stream: TStream): Boolean;
     function LoadFromStorage(Stream: TStream): Boolean;
     function LoadFromStorage(Stream: TStream): Boolean;
@@ -2102,6 +2103,11 @@ end;
 
 
 { TPCOperation }
 { TPCOperation }
 
 
+function TPCOperation.IsDestinationAccount(nAccount: Cardinal): Boolean;
+begin
+  Result := false;
+end;
+
 function TPCOperation.LoadFromStorage(Stream: TStream): Boolean;
 function TPCOperation.LoadFromStorage(Stream: TStream): Boolean;
 begin
 begin
   Result := false;
   Result := false;

+ 3 - 0
Units/PascalCoin/UNode.pas

@@ -661,6 +661,9 @@ begin
         end;
         end;
         If op.Previous_Sender_updated_block>block then exit;
         If op.Previous_Sender_updated_block>block then exit;
         block := op.Previous_Sender_updated_block;
         block := op.Previous_Sender_updated_block;
+      end else if op.IsDestinationAccount(account) then begin
+        If op.Previous_Destination_updated_block > block then exit;
+        block := op.Previous_Destination_updated_block;
       end;
       end;
     end;
     end;
     if (block>=aux_block) then exit; // Error... not found a valid block positioning
     if (block>=aux_block) then exit; // Error... not found a valid block positioning

+ 6 - 0
Units/PascalCoin/UOpTransaction.pas

@@ -70,6 +70,7 @@ Type
     function OperationPayload : TRawBytes; override;
     function OperationPayload : TRawBytes; override;
     function SenderAccount : Cardinal; override;
     function SenderAccount : Cardinal; override;
     function N_Operation : Cardinal; override;
     function N_Operation : Cardinal; override;
+    function IsDestinationAccount(nAccount : Cardinal) : Boolean; override;
     Property Data : TOpTransactionData read FData;
     Property Data : TOpTransactionData read FData;
 
 
     Constructor Create(sender, n_operation, target: Cardinal; key: TECPrivateKey; amount, fee: UInt64; payload: AnsiString);
     Constructor Create(sender, n_operation, target: Cardinal; key: TECPrivateKey; amount, fee: UInt64; payload: AnsiString);
@@ -309,6 +310,11 @@ begin
   end;
   end;
 end;
 end;
 
 
+function TOpTransaction.IsDestinationAccount(nAccount: Cardinal): Boolean;
+begin
+  Result := FData.target = nAccount;
+end;
+
 function TOpTransaction.LoadFromStream(Stream: TStream): Boolean;
 function TOpTransaction.LoadFromStream(Stream: TStream): Boolean;
 begin
 begin
   Result := false;
   Result := false;