anchor.diff:  begin
     Result := (account1.EC_OpenSSL_NID=account2.EC_OpenSSL_NID) And
       (account1.x=account2.x) And (account1.y=account2.y);
  +end;
  +
  +class function TAccountComp.EqualAccounts(const account1, account2: TAccount): Boolean;
  +begin
  +  Result := (account1.account = account2.account)
  +          And (EqualAccountInfos(account1.accountInfo,account2.accountInfo))
  +          And (account1.balance = account2.balance)
  +          And (account1.updated_block = account2.updated_block)
  +          And (account1.n_operation = account2.n_operation)
  +          And (TBaseType.BinStrComp(account1.name,account2.name)=0)
  +          And (account1.account_type = account2.account_type)
  +          And (account1.previous_updated_block = account2.previous_updated_block);
  +end;
  +
  +class function TAccountComp.EqualOperationBlocks(const opBlock1, opBlock2: TOperationBlock): Boolean;
  +begin
  +  Result := (opBlock1.block = opBlock1.block)
  +          And (EqualAccountKeys(opBlock1.account_key,opBlock2.account_key))
  +          And (opBlock1.reward = opBlock2.reward)
  +          And (opBlock1.fee = opBlock2.fee)
  +          And (opBlock1.protocol_version = opBlock2.protocol_version)
  +          And (opBlock1.protocol_available = opBlock2.protocol_available)
  +          And (opBlock1.timestamp = opBlock2.timestamp)
  +          And (opBlock1.compact_target = opBlock2.compact_target)
  +          And (opBlock1.nonce = opBlock2.nonce)
  +          And (TBaseType.BinStrComp(opBlock1.block_payload,opBlock2.block_payload)=0)
  +          And (TBaseType.BinStrComp(opBlock1.initial_safe_box_hash,opBlock2.initial_safe_box_hash)=0)
  +          And (TBaseType.BinStrComp(opBlock1.operations_hash,opBlock2.operations_hash)=0)
  +          And (TBaseType.BinStrComp(opBlock1.proof_of_work,opBlock2.proof_of_work)=0);
  +end;
  +
  +class function TAccountComp.EqualBlockAccounts(const blockAccount1, blockAccount2: TBlockAccount): Boolean;
  +Var i : Integer;
  +begin
  +  Result := (EqualOperationBlocks(blockAccount1.blockchainInfo,blockAccount2.blockchainInfo))
  +          And (TBaseType.BinStrComp(blockAccount1.block_hash,blockAccount2.block_hash)=0)
  +          And (blockAccount1.accumulatedWork = blockAccount2.accumulatedWork);
  +  If Result then begin
  +    for i:=Low(blockAccount1.accounts) to High(blockAccount1.accounts) do begin
  +      Result := EqualAccounts(blockAccount1.accounts[i],blockAccount2.accounts[i]);
  +      If Not Result then Exit;
  +    end;
  +  end;
   end;
   
   
  
positive.code:   end;
  end;
  
  
  { TPascalCoinProtocol }
  
  
negative.code:   // Save new account values
    blockAccount.block_hash:=CalcBlockHash(blockAccount,FCurrentProtocol >= CT_PROTOCOL_2);
    FModifiedBlocksFinalState.Add(blockAccount);
    If Assigned(FPreviousSafeBox) then begin
      FModifiedBlocksSeparatedChain.Add(blockAccount);
    end;
    If (Assigned(Pblock)) then begin
      ToTMemAccount(blockAccount.accounts[iAccount],Pblock^.accounts[iAccount]);
  