hyperledger/iroha
Iroha - A simple, decentralized ledger http://iroha.tech
utils.hpp
Go to the documentation of this file.
1 
6 #ifndef IROHA_VALIDATION_UTILS
7 #define IROHA_VALIDATION_UTILS
8 
9 #include <string>
10 #include <vector>
11 
12 #include <boost/range/adaptor/transformed.hpp>
13 #include <boost/range/any_range.hpp>
14 
16 
17 namespace iroha {
18  namespace validation {
26  template <typename PublicKeys>
27  inline bool signaturesSubset(
29  const PublicKeys &public_keys) {
30  return std::all_of(
31  signatures.begin(),
32  signatures.end(),
33  [&public_keys](auto const &signature) {
34  return std::find_if(public_keys.begin(),
35  public_keys.end(),
36  [&signature](auto const &public_key) {
37  return signature.publicKey() == public_key;
38  })
39  != public_keys.end();
40  });
41  }
42 
49  template <typename Peers>
50  inline bool peersSubset(
52  const Peers &peers) {
53  using shared_model::interface::types::PublicKeyHexStringView;
54  return signaturesSubset(
55  signatures, peers | boost::adaptors::transformed([](auto const &p) {
56  return PublicKeyHexStringView{p->pubkey()};
57  }));
58  }
59 
60  } // namespace validation
61 } // namespace iroha
62 
63 #endif // IROHA_VALIDATION_UTILS
bool peersSubset(const shared_model::interface::types::SignatureRangeType &signatures, const Peers &peers)
Definition: utils.hpp:50
boost::any_range< interface::Signature, boost::forward_traversal_tag, const Signature & > SignatureRangeType
Type of signature range, which returns when signatures are invoked.
Definition: range_types.hpp:24
Definition: block_query.hpp:15
bool signaturesSubset(const shared_model::interface::types::SignatureRangeType &signatures, const PublicKeys &public_keys)
Definition: utils.hpp:27