From 75f16752d2fc3ca3b31b2a852ab6b8940bf443f1 Mon Sep 17 00:00:00 2001 From: pbattu123 Date: Wed, 19 Jun 2019 11:16:43 -0300 Subject: [PATCH] virtual-op-fix for deterministic virtual_op number --- libraries/chain/db_block.cpp | 12 ++++++++++++ libraries/chain/include/graphene/chain/database.hpp | 2 +- .../graphene/chain/operation_history_object.hpp | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/libraries/chain/db_block.cpp b/libraries/chain/db_block.cpp index e67e916f..9b2c7f36 100644 --- a/libraries/chain/db_block.cpp +++ b/libraries/chain/db_block.cpp @@ -587,6 +587,8 @@ void database::_apply_block( const signed_block& next_block ) _current_block_num = next_block_num; _current_trx_in_block = 0; + _current_op_in_trx = 0; + _current_virtual_op = 0; for( const auto& trx : next_block.transactions ) { @@ -596,8 +598,16 @@ void database::_apply_block( const signed_block& next_block ) * for transactions when validating broadcast transactions or * when building a block. */ + apply_transaction( trx, skip ); + // For real operations which are explicitly included in a transaction, virtual_op is 0. + // For VOPs derived directly from a real op, + // use the real op's (block_num,trx_in_block,op_in_trx), virtual_op starts from 1. + // For VOPs created after processed all transactions, + // trx_in_block = the_block.trsanctions.size(), virtual_op starts from 0. ++_current_trx_in_block; + _current_op_in_trx = 0; + _current_virtual_op = 0; } if (global_props.parameters.witness_schedule_algorithm == GRAPHENE_WITNESS_SCHEDULED_ALGORITHM) @@ -708,8 +718,10 @@ processed_transaction database::_apply_transaction(const signed_transaction& trx //Finally process the operations processed_transaction ptrx(trx); _current_op_in_trx = 0; + _current_virtual_op = 0; for( const auto& op : ptrx.operations ) { + _current_virtual_op = 0; eval_state.operation_results.emplace_back(apply_operation(eval_state, op)); ++_current_op_in_trx; } diff --git a/libraries/chain/include/graphene/chain/database.hpp b/libraries/chain/include/graphene/chain/database.hpp index d0a1f773..08421648 100644 --- a/libraries/chain/include/graphene/chain/database.hpp +++ b/libraries/chain/include/graphene/chain/database.hpp @@ -549,7 +549,7 @@ namespace graphene { namespace chain { uint32_t _current_block_num = 0; uint16_t _current_trx_in_block = 0; uint16_t _current_op_in_trx = 0; - uint16_t _current_virtual_op = 0; + uint32_t _current_virtual_op = 0; vector _vote_tally_buffer; vector _witness_count_histogram_buffer; diff --git a/libraries/chain/include/graphene/chain/operation_history_object.hpp b/libraries/chain/include/graphene/chain/operation_history_object.hpp index eae8a01e..d8b90b58 100644 --- a/libraries/chain/include/graphene/chain/operation_history_object.hpp +++ b/libraries/chain/include/graphene/chain/operation_history_object.hpp @@ -61,7 +61,7 @@ namespace graphene { namespace chain { /** the operation within the transaction */ uint16_t op_in_trx = 0; /** any virtual operations implied by operation in block */ - uint16_t virtual_op = 0; + uint32_t virtual_op = 0; }; /**