diff --git a/libraries/chain/bitcoin_transaction_evaluator.cpp b/libraries/chain/bitcoin_transaction_evaluator.cpp index d3c8d9d8..8693b648 100644 --- a/libraries/chain/bitcoin_transaction_evaluator.cpp +++ b/libraries/chain/bitcoin_transaction_evaluator.cpp @@ -39,7 +39,6 @@ object_id_type bitcoin_transaction_send_evaluator::do_apply( const bitcoin_trans obj.transaction = mutable_op.transaction; obj.transaction_id = mutable_op.transaction.get_txid(); obj.fee_for_size = mutable_op.fee_for_size; - obj.confirm = false; }); sidechain::prev_out new_pw_vout = { "", 0, 0 }; diff --git a/libraries/chain/db_sidechain.cpp b/libraries/chain/db_sidechain.cpp index 087f70b1..86d76635 100644 --- a/libraries/chain/db_sidechain.cpp +++ b/libraries/chain/db_sidechain.cpp @@ -296,7 +296,6 @@ void database::roll_back_vin_and_vout( const proposal_object& proposal ) fc::optional database::create_bitcoin_issue_proposals( const witness_object& current_witness ) { std::vector trx_ids; - bitcoin_confirmations.safe_for([&]( btc_tx_confirmations_index::index::type::iterator itr_b, btc_tx_confirmations_index::index::type::iterator itr_e ){ for(auto iter = itr_b; iter != itr_e; iter++) { if( !iter->is_confirmed_and_not_used() ) return; @@ -304,7 +303,6 @@ fc::optional database::create_bitcoin_issue_proposals( const witness_ const auto& btc_trx_idx = get_index_type().indices().get(); const auto& btc_tx = btc_trx_idx.find( iter->transaction_id ); if( btc_tx == btc_trx_idx.end() ) continue; - trx_ids.push_back( iter->transaction_id ); } }); diff --git a/libraries/chain/include/graphene/chain/bitcoin_transaction_object.hpp b/libraries/chain/include/graphene/chain/bitcoin_transaction_object.hpp index d2961f2e..8a0898f0 100644 --- a/libraries/chain/include/graphene/chain/bitcoin_transaction_object.hpp +++ b/libraries/chain/include/graphene/chain/bitcoin_transaction_object.hpp @@ -23,8 +23,6 @@ class bitcoin_transaction_object : public abstract_object create_bitcoin_issue_proposals( const witness_object& current_witness ); fc::signal send_btc_tx; diff --git a/libraries/sidechain/include/sidechain/bitcoin_transaction_confirmations.hpp b/libraries/sidechain/include/sidechain/bitcoin_transaction_confirmations.hpp index fbdac0d6..42ae8edc 100644 --- a/libraries/sidechain/include/sidechain/bitcoin_transaction_confirmations.hpp +++ b/libraries/sidechain/include/sidechain/bitcoin_transaction_confirmations.hpp @@ -20,7 +20,18 @@ struct bitcoin_transaction_confirmations { bitcoin_transaction_confirmations() = default; - bitcoin_transaction_confirmations( fc::sha256 trx_id ) : transaction_id( trx_id ) {} + bitcoin_transaction_confirmations( fc::sha256 trx_id ) : id( count_id_tx_conf++ ), transaction_id( trx_id ) {} + + struct comparer { + bool operator()( const bitcoin_transaction_confirmations& lhs, const bitcoin_transaction_confirmations& rhs ) const { + if( lhs.is_confirmed_and_not_used() != rhs.is_confirmed_and_not_used() ) + return lhs.is_confirmed_and_not_used() < rhs.is_confirmed_and_not_used(); + return lhs.id < rhs.id; + } + }; + + static uint64_t count_id_tx_conf; + uint64_t id; bool is_confirmed_and_not_used() const { return !used && confirmed; } @@ -37,7 +48,7 @@ struct by_confirmed_and_not_used; using btc_tx_confirmations_index = boost::multi_index_container, member>, + ordered_unique, member>, ordered_non_unique, const_mem_fun< bitcoin_transaction_confirmations, bool, &bitcoin_transaction_confirmations::is_confirmed_and_not_used >> > >; diff --git a/libraries/sidechain/input_withdrawal_info.cpp b/libraries/sidechain/input_withdrawal_info.cpp index b716956f..b616d783 100644 --- a/libraries/sidechain/input_withdrawal_info.cpp +++ b/libraries/sidechain/input_withdrawal_info.cpp @@ -2,10 +2,12 @@ #include #include #include +#include namespace sidechain { uint64_t info_for_vin::count_id_info_for_vin = 0; +uint64_t bitcoin_transaction_confirmations::count_id_tx_conf = 0; bool info_for_vin::comparer::operator() ( const info_for_vin& lhs, const info_for_vin& rhs ) const { @@ -173,12 +175,8 @@ std::vector input_withdrawal_info::get_info_for_vouts() const auto& info_for_vout_idx = db.get_index_type().indices().get< graphene::chain::by_id_and_not_used >(); auto itr = info_for_vout_idx.begin(); for(size_t i = 0; i < 5 && itr != info_for_vout_idx.end() && !itr->used; i++) { - info_for_vout vout; - vout.payer = itr->payer; - vout.address = itr->address; - vout.amount = itr->amount; - result.push_back( vout ); + result.push_back( *itr ); ++itr; } diff --git a/libraries/sidechain/sidechain_condensing_tx.cpp b/libraries/sidechain/sidechain_condensing_tx.cpp index 58974900..879df790 100644 --- a/libraries/sidechain/sidechain_condensing_tx.cpp +++ b/libraries/sidechain/sidechain_condensing_tx.cpp @@ -97,7 +97,7 @@ void sidechain_condensing_tx::subtract_fee( const uint64_t& fee, const double& w size_t limit = is_pw_vin ? 1 + count_witness_vout : count_witness_vout; size_t offset = is_pw_vin ? 1 : 0; FC_ASSERT( fee_witness > 0 ); - for( offset = 0; offset < limit; offset++ ) { + for( ; offset < limit; offset++ ) { tx.vout[offset].value += fee_witness; } }