anchor.diff:  
   { TCoreTool }
   
  -TCoreTool = class(TObject)
  -  class function GetSignerCandidates(ANumOps : Integer; const ACandidates : TArray<TAccount>) : TArray<TAccount>; static;
  -  end;
  +TCoreTool = class
  +public
  +  class function GetSignerCandidates(ANumOps : Integer; const ACandidates : array of TAccount) : TArray<TAccount>; static;
  +end;
  +
  +{ TSafeBoxHelper }
  +
  +TSafeBoxHelper = class helper for TPCSafeBox
  +  private
  +    function GetKeysSummaryInternal(UseFilter: boolean; const AFilterKeys : array of TAccountKey; FetchAccounts : boolean = false) : TUserSummary;
  +  public
  +    function GetModifiedAccounts(const AAccounts : array of TAccount) : TArray<TAccount>;
  +    function GetKeySummary(const AKey : TAccountKey; FetchAccounts : boolean = false) : TKeySummary;
  +    function GetUserSummary(const AKeys : array of TAccountKey; FetchAccounts : boolean = false) : TUserSummary;
  +    function GetSummaryAllKeys : TUserSummary;
  +end;
  +
  +{ TNodeHelper }
  +
  +TNodeHelper = class helper for TNode
  +  function HasBestKnownBlockchainTip : boolean;
  +end;
  +
  +{ TAccountHelper }
   
   TAccountHelper = record helper for TAccount
     function GetAccountString : AnsiString;
     function GetInfoText(const ABank : TPCBank) : utf8string;
   end;
   
  +{ TOperationResumeHelper }
  +
   TOperationResumeHelper = record helper for TOperationResume
     function GetPrintableOPHASH : AnsiString;
     function GetInfoText(const ABank : TPCBank) : utf8string;
   end;
   
  +{ TTimeSpanHelper }
  +
   TTimeSpanHelper = record helper for TTimeSpan
     function TotalBlockCount : Integer;
   end;
  
positive.code: interface
  
  uses
    Classes, SysUtils, UCrypto, UAccounts, UBlockChain, UCommon,
    Generics.Collections, Generics.Defaults;
  
  type
  
  TAccountKeyComparer = class (TComparer<TAccountKey>)
    function Compare(constref ALeft, ARight: T): Integer; override;
    class function DoCompare(constref ALeft, ARight : TAccountKey) : Integer; inline;
  end;
  
  TAccountKeyEqualityComparer = class(TEqualityComparer<TAccountKey>)
    public
  
negative.code: 
  { TCoreTool }
  
  class function TCoreTool.GetSignerCandidates(ANumOps : Integer; const ACandidates : array of TAccount) : TArray<TAccount>;
  var
    i: Integer;
    Fee: Int64;
    acc: TAccount;
  begin
    //make deep copy of accounts!!! Very Important
    Result := TArrayTool<TAccount>.Copy(ACandidates);
    Fee := ANumOps * CT_MOLINA;
    for i := High(Result) downto Low(Result) do
      begin
  