diff --git a/libraries/chain/bitcoin_transaction_evaluator.cpp b/libraries/chain/bitcoin_transaction_evaluator.cpp index c3c0ccf5..95ea9510 100644 --- a/libraries/chain/bitcoin_transaction_evaluator.cpp +++ b/libraries/chain/bitcoin_transaction_evaluator.cpp @@ -116,8 +116,7 @@ void_result bitcoin_transaction_sign_evaluator::do_evaluate( const bitcoin_trans const auto& proposal_itr = proposal_idx.find( op.proposal_id ); FC_ASSERT( proposal_idx.end() != proposal_itr, "proposal not found"); - witness_id_type scheduled_witness = d.get_scheduled_witness( 1 ); - const auto& witness_obj = d.get< witness_object >( scheduled_witness ); + const auto& witness_obj = d.get< witness_object >( d._current_witness_id ); FC_ASSERT( witness_obj.witness_account == op.payer, "Incorrect witness." ); sidechain::bytes public_key( public_key_data_to_bytes( witness_obj.signing_key.key_data ) ); diff --git a/libraries/chain/db_block.cpp b/libraries/chain/db_block.cpp index 42c7e327..e8e18f3e 100644 --- a/libraries/chain/db_block.cpp +++ b/libraries/chain/db_block.cpp @@ -436,6 +436,8 @@ signed_block database::_generate_block( send_btc_tx_flag = false; + _current_witness_id = witness_obj.id; + uint64_t postponed_tx_count = 0; // pop pending state (reset to head block state) for( const processed_transaction& tx : _pending_tx ) @@ -587,6 +589,8 @@ void database::apply_block( const signed_block& next_block, uint32_t skip ) skip = ~0;// WE CAN SKIP ALMOST EVERYTHING } + _current_witness_id = next_block.witness; + detail::with_skip_flags( *this, skip, [&]() { _apply_block( next_block ); diff --git a/libraries/chain/include/graphene/chain/database.hpp b/libraries/chain/include/graphene/chain/database.hpp index a38ed5b8..504ea5b6 100644 --- a/libraries/chain/include/graphene/chain/database.hpp +++ b/libraries/chain/include/graphene/chain/database.hpp @@ -570,6 +570,8 @@ namespace graphene { namespace chain { bool send_btc_tx_flag = true; + witness_id_type _current_witness_id; + private: void restore_bitcoin_transaction_status(); // db_sidechain