diff --git a/libraries/chain/account_evaluator.cpp b/libraries/chain/account_evaluator.cpp index 4480d48530..93b9f0f7db 100644 --- a/libraries/chain/account_evaluator.cpp +++ b/libraries/chain/account_evaluator.cpp @@ -217,7 +217,7 @@ object_id_type account_create_evaluator::do_apply( const account_create_operatio && global_properties.parameters.account_fee_scale_bitshifts != 0 ) { d.modify(global_properties, [](global_property_object& p) { - p.parameters.get_mutable_fees().get().basic_fee <<= p.parameters.account_fee_scale_bitshifts; + p.parameters.get_mutable_fees().mutable_get().basic_fee <<= p.parameters.account_fee_scale_bitshifts; }); } diff --git a/libraries/chain/db_maint.cpp b/libraries/chain/db_maint.cpp index 5aa2eb6e1a..4215237a78 100644 --- a/libraries/chain/db_maint.cpp +++ b/libraries/chain/db_maint.cpp @@ -1184,7 +1184,7 @@ void database::perform_chain_maintenance(const signed_block& next_block, const g modify(gpo, [&dgpo](global_property_object& p) { // Remove scaling of account registration fee - p.parameters.get_mutable_fees().get().basic_fee >>= p.parameters.account_fee_scale_bitshifts * + p.parameters.get_mutable_fees().mutable_get().basic_fee >>= p.parameters.account_fee_scale_bitshifts * (dgpo.accounts_registered_this_interval / p.parameters.accounts_per_fee_scale); if( p.pending_parameters ) diff --git a/libraries/protocol/include/graphene/protocol/fee_schedule.hpp b/libraries/protocol/include/graphene/protocol/fee_schedule.hpp index 275e87e704..36c31d23d1 100644 --- a/libraries/protocol/include/graphene/protocol/fee_schedule.hpp +++ b/libraries/protocol/include/graphene/protocol/fee_schedule.hpp @@ -37,42 +37,38 @@ namespace graphene { namespace protocol { template class fee_helper { public: - const typename Operation::fee_parameters_type& cget(const fee_parameters::flat_set_type& parameters)const + const typename Operation::fee_parameters_type& get(const fee_parameters::flat_set_type& parameters)const { auto itr = parameters.find( typename Operation::fee_parameters_type() ); - FC_ASSERT( itr != parameters.end() ); - return itr->template get(); - } - }; + if( itr != parameters.end() ) + return itr->template get(); - template<> - class fee_helper { - public: - const account_create_operation::fee_parameters_type& cget(const fee_parameters::flat_set_type& parameters)const - { - auto itr = parameters.find( account_create_operation::fee_parameters_type() ); - FC_ASSERT( itr != parameters.end() ); - return itr->get(); + static typename Operation::fee_parameters_type dummy; + return dummy; } - typename account_create_operation::fee_parameters_type& get(fee_parameters::flat_set_type& parameters)const + typename Operation::fee_parameters_type& mutable_get(fee_parameters::flat_set_type& parameters)const { - auto itr = parameters.find( account_create_operation::fee_parameters_type() ); - FC_ASSERT( itr != parameters.end() ); - return itr->get(); + auto itr = parameters.find( typename Operation::fee_parameters_type() ); + if( itr != parameters.end() ) + return itr->template get(); + + static typename Operation::fee_parameters_type dummy = get(parameters); + parameters.insert(dummy); + return dummy; } }; template<> class fee_helper { public: - const bid_collateral_operation::fee_parameters_type& cget(const fee_parameters::flat_set_type& parameters)const + const bid_collateral_operation::fee_parameters_type& get(const fee_parameters::flat_set_type& parameters)const { auto itr = parameters.find( bid_collateral_operation::fee_parameters_type() ); if ( itr != parameters.end() ) return itr->get(); static bid_collateral_operation::fee_parameters_type bid_collateral_dummy; - bid_collateral_dummy.fee = fee_helper().cget(parameters).fee; + bid_collateral_dummy.fee = fee_helper().get(parameters).fee; return bid_collateral_dummy; } }; @@ -80,14 +76,14 @@ namespace graphene { namespace protocol { template<> class fee_helper { public: - const asset_update_issuer_operation::fee_parameters_type& cget(const fee_parameters::flat_set_type& parameters)const + const asset_update_issuer_operation::fee_parameters_type& get(const fee_parameters::flat_set_type& parameters)const { auto itr = parameters.find( asset_update_issuer_operation::fee_parameters_type() ); if ( itr != parameters.end() ) return itr->get(); static asset_update_issuer_operation::fee_parameters_type dummy; - dummy.fee = fee_helper().cget(parameters).fee; + dummy.fee = fee_helper().get(parameters).fee; return dummy; } }; @@ -95,58 +91,20 @@ namespace graphene { namespace protocol { template<> class fee_helper { public: - const asset_claim_pool_operation::fee_parameters_type& cget(const fee_parameters::flat_set_type& parameters)const + const asset_claim_pool_operation::fee_parameters_type& get(const fee_parameters::flat_set_type& parameters)const { auto itr = parameters.find( asset_claim_pool_operation::fee_parameters_type() ); if ( itr != parameters.end() ) return itr->get(); static asset_claim_pool_operation::fee_parameters_type asset_claim_pool_dummy; - asset_claim_pool_dummy.fee = fee_helper().cget(parameters).fee; + asset_claim_pool_dummy.fee = fee_helper().get(parameters).fee; return asset_claim_pool_dummy; } }; - template<> - class fee_helper { - public: - const htlc_create_operation::fee_parameters_type& cget(const fee_parameters::flat_set_type& parameters)const - { - auto itr = parameters.find( htlc_create_operation::fee_parameters_type() ); - if ( itr != parameters.end() ) - return itr->get(); - - static htlc_create_operation::fee_parameters_type htlc_create_operation_fee_dummy; - return htlc_create_operation_fee_dummy; - } - }; - - template<> - class fee_helper { - public: - const htlc_redeem_operation::fee_parameters_type& cget(const fee_parameters::flat_set_type& parameters)const - { - auto itr = parameters.find( htlc_redeem_operation::fee_parameters_type() ); - if ( itr != parameters.end() ) - return itr->get(); - static htlc_redeem_operation::fee_parameters_type htlc_redeem_operation_fee_dummy; - return htlc_redeem_operation_fee_dummy; - } - }; - template<> - class fee_helper { - public: - const htlc_extend_operation::fee_parameters_type& cget(const fee_parameters::flat_set_type& parameters)const - { - auto itr = parameters.find( htlc_extend_operation::fee_parameters_type() ); - if ( itr != parameters.end() ) - return itr->get(); - static htlc_extend_operation::fee_parameters_type htlc_extend_operation_fee_dummy; - return htlc_extend_operation_fee_dummy; - } - }; /** * @brief contains all of the parameters necessary to calculate the fee for any operation */ @@ -182,12 +140,12 @@ namespace graphene { namespace protocol { template const typename Operation::fee_parameters_type& get()const { - return fee_helper().cget(parameters); + return fee_helper().get(parameters); } template - typename Operation::fee_parameters_type& get() + typename Operation::fee_parameters_type& mutable_get() { - return fee_helper().get(parameters); + return fee_helper().mutable_get(parameters); } template bool exists()const diff --git a/tests/tests/fee_tests.cpp b/tests/tests/fee_tests.cpp index 83b7557425..8e4a145980 100644 --- a/tests/tests/fee_tests.cpp +++ b/tests/tests/fee_tests.cpp @@ -690,7 +690,7 @@ BOOST_AUTO_TEST_CASE( account_create_fee_scaling ) db.modify(global_property_id_type()(db), [](global_property_object& gpo) { gpo.parameters.get_mutable_fees() = fee_schedule::get_default(); - gpo.parameters.get_mutable_fees().get().basic_fee = 1; + gpo.parameters.get_mutable_fees().mutable_get().basic_fee = 1; }); for( int i = db.get_dynamic_global_properties().accounts_registered_this_interval; i < accounts_per_scale; ++i )