6 #ifndef IROHA_BLOCK_VALIDATOR_HPP 7 #define IROHA_BLOCK_VALIDATOR_HPP 9 #include <unordered_map> 12 #include <boost/range/adaptor/indexed.hpp> 22 namespace validation {
27 template <
typename FieldVal
idator,
typename TransactionsCollectionVal
idator>
31 : transactions_collection_validator_(
46 error_creator |= transactions_collection_validator_.
validate(
54 | boost::adaptors::indexed(1)) {
57 rejected_hashes.emplace(
hash.value(),
hash.index());
58 if (not emplace_result.second) {
60 "Duplicates hash #{}", emplace_result.first->second));
64 std::move(hash_error_creator)
66 return fmt::format(
"Rejected transaction hash #{} {}",
72 for (
auto tx : block.
transactions() | boost::adaptors::indexed(1)) {
73 auto it = rejected_hashes.find(tx.value().hash());
74 if (it != rejected_hashes.end()) {
76 fmt::format(
"Hash '{}' of transaction #{} has already " 77 "appeared in rejected hashes (#{}).",
78 tx.value().hash().hex(),
95 #endif // IROHA_BLOCK_VALIDATOR_HPP std::optional< ValidationError > validateHash(const crypto::Hash &hash) const
Definition: field_validator.cpp:383
virtual interface::types::HashCollectionType rejected_transactions_hashes() const =0
std::optional< ValidationError > validateHeight(const interface::types::HeightType &height) const
Definition: field_validator.cpp:373
Definition: block_validator.hpp:28
std::optional< ValidationError > getValidationErrorWithGeneratedName(NameProvider &&name_provider) &&
Definition: validation_error_helpers.hpp:31
Definition: wsv_restorer_impl.hpp:20
std::optional< ValidationError > validate(const interface::Block &block) const override
Definition: block_validator.hpp:40
virtual types::TimestampType createdTime() const =0
virtual types::TransactionsCollectionType transactions() const =0
ValidationErrorCreator & addReason(ReasonType reason)
Add a reason to error.
Definition: validation_error_helpers.cpp:23
hash256_t hash(const T &pb)
Definition: pb_common.hpp:43
std::optional< ValidationError > getValidationError(const ReasonName &name) &&
Definition: validation_error_helpers.cpp:15
BlockValidator(std::shared_ptr< ValidatorsConfig > config)
Definition: block_validator.hpp:30
Definition: field_validator.hpp:41
Helper class for ValidationError creation.
Definition: validation_error_helpers.hpp:16
virtual const types::HashType & prevHash() const =0
std::optional< ValidationError > validate(const interface::types::TransactionsForwardCollectionType &transactions) const
Definition: transactions_collection_validator.cpp:96
Definition: command_executor.hpp:12
Definition: transactions_collection_validator.hpp:24
virtual types::HeightType height() const =0