diff --git a/libraries/chain/db_block.cpp b/libraries/chain/db_block.cpp index bd917960..e11c50f7 100644 --- a/libraries/chain/db_block.cpp +++ b/libraries/chain/db_block.cpp @@ -62,6 +62,17 @@ namespace { std::vector proposed_operations_digests; }; + + std::vector 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 { @@ -145,22 +156,12 @@ void database::check_tansaction_for_duplicated_operations(const signed_transacti for (auto& pending_transaction: _pending_tx) { - proposed_operations_digest_accumulator digest_accumulator; - for (auto& operation: pending_transaction.operations) - { - operation.visit(digest_accumulator); - } - - existed_operations_digests.insert(digest_accumulator.proposed_operations_digests.begin(), digest_accumulator.proposed_operations_digests.end()); + auto proposed_operations_digests = gather_proposed_operations_digests(pending_transaction); + existed_operations_digests.insert(proposed_operations_digests.begin(), proposed_operations_digests.end()); } - proposed_operations_digest_accumulator digest_accumulator; - for (auto& operation: trx.operations) - { - operation.visit(digest_accumulator); - } - - for (auto& digest: digest_accumulator.proposed_operations_digests) + auto proposed_operations_digests = gather_proposed_operations_digests(trx); + for (auto& digest: proposed_operations_digests) { FC_ASSERT(existed_operations_digests.count(digest) == 0, "Proposed operation is already pending for approval."); }