Refactoring after review. Removed code duplication.

This commit is contained in:
Apr Team 2018-07-12 17:53:15 +03:00
parent 63f4c7f2c5
commit b28783c3ec

View file

@ -62,6 +62,17 @@ namespace {
std::vector<fc::sha256> proposed_operations_digests; std::vector<fc::sha256> proposed_operations_digests;
}; };
std::vector<fc::sha256> gather_proposed_operations_digests(const graphene::chain::transaction& trx)
{
proposed_operations_digest_accumulator digest_accumulator;
for (auto& operation: trx.operations)
{
operation.visit(digest_accumulator);
}
return digest_accumulator.proposed_operations_digests;
}
} }
namespace graphene { namespace chain { namespace graphene { namespace chain {
@ -145,22 +156,12 @@ void database::check_tansaction_for_duplicated_operations(const signed_transacti
for (auto& pending_transaction: _pending_tx) for (auto& pending_transaction: _pending_tx)
{ {
proposed_operations_digest_accumulator digest_accumulator; auto proposed_operations_digests = gather_proposed_operations_digests(pending_transaction);
for (auto& operation: pending_transaction.operations) existed_operations_digests.insert(proposed_operations_digests.begin(), proposed_operations_digests.end());
{
operation.visit(digest_accumulator);
}
existed_operations_digests.insert(digest_accumulator.proposed_operations_digests.begin(), digest_accumulator.proposed_operations_digests.end());
} }
proposed_operations_digest_accumulator digest_accumulator; auto proposed_operations_digests = gather_proposed_operations_digests(trx);
for (auto& operation: trx.operations) for (auto& digest: proposed_operations_digests)
{
operation.visit(digest_accumulator);
}
for (auto& digest: digest_accumulator.proposed_operations_digests)
{ {
FC_ASSERT(existed_operations_digests.count(digest) == 0, "Proposed operation is already pending for approval."); FC_ASSERT(existed_operations_digests.count(digest) == 0, "Proposed operation is already pending for approval.");
} }