anchor.diff:    inc(FTotalAmount,op.OperationAmount);
     inc(FTotalFee,op.OperationFee);
     If Assigned(FOnChanged) then FOnChanged(Self);
  +end;
  +
  +function TOperationsHashTree.InternalCanAddOperationToHashTree(lockedThreadList : TList; op: TPCOperation): Boolean;
  +Var PaccData : POperationsHashAccountsData;
  +  iListSigners,iFound : Integer;
  +  listSigners : TList;
  +begin
  +  Result := False;
  +  // Protections:
  +  // Protect 0-fee operations
  +  if (op.OperationFee=0) And (FMax0feeOperationsBySigner>=0) then begin
  +    if (FMax0feeOperationsBySigner=0) then Exit // Not allowed 0-fee operations!
  +    else if (FMax0feeOperationsBySigner>0) then begin
  +      listSigners := TList.Create;
  +      try
  +        op.SignerAccounts(listSigners);
  +        for iListSigners:=0 to listSigners.Count-1 do begin
  +          If FindOrderedByAccountData(lockedThreadList,PtrInt(listSigners[iListSigners]),iFound) then begin
  +            PaccData := FListOrderedByAccountsData[iFound];
  +            if (PaccData^.account_without_fee>=FMax0feeOperationsBySigner) then Exit; // Limit 0-fee reached
  +          end;
  +        end;
  +      finally
  +        listSigners.Free;
  +      end;
  +    end;
  +  end;
  +  Result := True;
   end;
   
   function TOperationsHashTree.FindOrderedBySha(lockedThreadList : TList; const Value: TRawBytes; var Index: Integer): Boolean;
  
positive.code:   i,npos,iListSigners : Integer;
    listSigners : TList;
  begin
    Result := False;
    // Protections:
    // Protect 0-fee operations
    if (op.OperationFee=0) And (FMax0feeOperationsBySigner>=0) then begin
      if (FMax0feeOperationsBySigner=0) then Exit // Not allowed 0-fee operations!
      else if (FMax0feeOperationsBySigner>0) then begin
        listSigners := TList.Create;
        try
          op.SignerAccounts(listSigners);
          for iListSigners:=0 to listSigners.Count-1 do begin
            If FindOrderedByAccountData(list,PtrInt(listSigners[iListSigners]),i) then begin
              PaccData := FListOrderedByAccountsData[i];
              if (PaccData^.account_without_fee>=FMax0feeOperationsBySigner) then Exit; // Limit 0-fee reached
            end;
          end;
        finally
          listSigners.Free;
        end;
      end;
    end;
    Result := True; // Will add:
    msCopy := TMemoryStream.Create;
    try
      New(P);
  
negative.code:   public
      Constructor Create;
      Destructor Destroy; Override;
      function CanAddOperationToHashTree(op : TPCOperation) : Boolean;
      function AddOperationToHashTree(op : TPCOperation) : Boolean;
      Procedure ClearHastThree;
      Property HashTree : TRawBytes read GetHashTree;
  