anchor.diff:        exit;
       end;
     end;
  +  if (newOperationBlock.proof_of_work > target_hash) then begin
  +    errors := 'Proof of work is higher than target '+TCrypto.ToHexaString(newOperationBlock.proof_of_work)+' > '+TCrypto.ToHexaString(target_hash);
  +    exit;
  +  end;
  +  Result := IsValidOperationBlock(newOperationBlock,errors);
  +end;
  +
  +class function TPCSafeBox.IsValidOperationBlock(Const newOperationBlock : TOperationBlock; var errors : AnsiString) : Boolean;
  +  { This class function will check a OperationBlock basic info as a valid info
  +
  +    Creted at Build 2.1.7 as a division of IsValidNewOperationsBlock for easily basic check TOperationBlock
  +
  +    TOperationBlock contains the info of the new block, but cannot be checked with current Safebox state
  +    (Use IsValidNewOperationsBlock instead) and also cannot check operations, operations_hash, fees...
  +  }
  +var pow : TRawBytes;
  +  i : Integer;
  +begin
  +  Result := False;
  +  errors := '';
  +  // Check Account key
  +  if Not TAccountComp.IsValidAccountKey(newOperationBlock.account_key,errors) then begin
  +    exit;
  +  end;
  +  // reward
  +  if (newOperationBlock.reward<>TPascalCoinProtocol.GetRewardForNewLine(newOperationBlock.block)) then begin
  +    errors := 'Invalid reward';
  +    exit;
  +  end;
  +  // Valid protocol version
  +  if (Not (newOperationBlock.protocol_version in [CT_PROTOCOL_1,CT_PROTOCOL_2])) then begin
  +    errors := 'Invalid protocol version '+IntToStr(newOperationBlock.protocol_version);
  +    exit;
  +  end;
  +  // fee: Cannot be checked only with the safebox
  +  // protocol available is not checked
  +  if (newOperationBlock.block > 0) then begin
  +  end else begin
  +    if (CT_Zero_Block_Proof_of_work_in_Hexa<>'') then begin
  +      // Check if valid Zero block
  +      if Not (AnsiSameText(TCrypto.ToHexaString(newOperationBlock.proof_of_work),CT_Zero_Block_Proof_of_work_in_Hexa)) then begin
  +        errors := 'Zero block not valid, Proof of Work invalid: '+TCrypto.ToHexaString(newOperationBlock.proof_of_work)+'<>'+CT_Zero_Block_Proof_of_work_in_Hexa;
  +        exit;
  +      end;
  +    end;
  +  end;
  +  // block_payload: Checking Miner payload size
  +  if length(newOperationBlock.block_payload)>CT_MaxPayloadSize then begin
  +    errors := 'Invalid Miner Payload length: '+inttostr(Length(newOperationBlock.block_payload));
  +    exit;
  +  end;
  +  // Checking Miner Payload valid chars
  +  for i := 1 to length(newOperationBlock.block_payload) do begin
  +    if Not (newOperationBlock.block_payload[i] in [#32..#254]) then begin
  +      errors := 'Invalid Miner Payload character at pos '+inttostr(i)+' value:'+inttostr(ord(newOperationBlock.block_payload[i]));
  +      exit;
  +    end;
  +  end;
     // operations_hash: NOT CHECKED WITH OPERATIONS!
     If (length(newOperationBlock.operations_hash)<>32) then begin
       errors := 'Invalid Operations hash value: '+TCrypto.ToHexaString(newOperationBlock.operations_hash)+' length='+IntToStr(Length(newOperationBlock.operations_hash));
  
positive.code:   TPascalCoinProtocol.CalcProofOfWork(newOperationBlock,pow);
    if (pow<>newOperationBlock.proof_of_work) then begin
      errors := 'Proof of work is bad calculated '+TCrypto.ToHexaString(newOperationBlock.proof_of_work)+' <> Good: '+TCrypto.ToHexaString(pow);
      exit;
    end;
    if (newOperationBlock.proof_of_work > target_hash) then begin
      errors := 'Proof of work is higher than target '+TCrypto.ToHexaString(newOperationBlock.proof_of_work)+' > '+TCrypto.ToHexaString(target_hash);
      exit;
    end;
    Result := true;
  
negative.code: interface
  
  uses
    Classes, UConst, UCrypto, SyncObjs, UThread, UBaseTypes;
  {$I config.inc}
  
  Type
  