From 86df9c04fd80edc105d589a7947415a191c1cf7f Mon Sep 17 00:00:00 2001 From: Daniel Larimer Date: Tue, 7 Jul 2015 09:02:36 -0400 Subject: [PATCH] Progress #141 - defining extension parameters --- .../chain/include/graphene/chain/types.hpp | 20 ++++++----- libraries/chain/operations.cpp | 6 ++-- programs/js_operation_serializer/main.cpp | 33 ++++++++++++++++++- 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/libraries/chain/include/graphene/chain/types.hpp b/libraries/chain/include/graphene/chain/types.hpp index 6f0659d9..f0bbe79d 100644 --- a/libraries/chain/include/graphene/chain/types.hpp +++ b/libraries/chain/include/graphene/chain/types.hpp @@ -386,24 +386,24 @@ namespace graphene { namespace chain { * protocol serialization. */ ///@{ - enum advanced_fee_id + enum extended_fee_id { withdraw_permission_delete_fee_id = 1, ///< the cost to delete a withdraw permission proposal_delete_fee_id = 2, ///< fee for deleting a proposed transaction limit_order_cancel_fee_id = 3 ///< fee for canceling a limit order }; - uint64_t get_advanced_fee( advanced_fee_id id )const + uint64_t get_extended_fee( extended_fee_id id )const { - auto itr = advanced.find(id); - if( itr == advanced.end() ) return 0; + auto itr = extended.find(id); + if( itr == extended.end() ) return 0; return itr->second; } - uint64_t withdraw_permission_delete_fee()const { return get_advanced_fee( withdraw_permission_delete_fee_id ); } + uint64_t withdraw_permission_delete_fee()const { return get_extended_fee( withdraw_permission_delete_fee_id ); } - flat_map advanced; + flat_map extended; ///@} protected: @@ -443,6 +443,8 @@ namespace graphene { namespace chain { bool is_valid_v1( const std::string& base58str ); }; + typedef static_variant<> parameter_extension; + struct chain_parameters { fee_schedule_type current_fees; ///< current schedule of fees @@ -475,6 +477,7 @@ namespace graphene { namespace chain { share_type fee_liquidation_threshold = GRAPHENE_DEFAULT_FEE_LIQUIDATION_THRESHOLD; ///< value in CORE at which accumulated fees in blockchain-issued market assets should be liquidated uint16_t accounts_per_fee_scale = GRAPHENE_DEFAULT_ACCOUNTS_PER_FEE_SCALE; ///< number of accounts between fee scalings uint8_t account_fee_scale_bitshifts = GRAPHENE_DEFAULT_ACCOUNT_FEE_SCALE_BITSHIFTS; ///< number of times to left bitshift account registration fee at each scaling + vector extensions; void validate()const { @@ -603,9 +606,9 @@ FC_REFLECT( graphene::chain::fee_schedule_type, (assert_op_fee) (proposal_create_fee) (proposal_update_fee) - (advanced) + (extended) ) -FC_REFLECT_ENUM( graphene::chain::fee_schedule_type::advanced_fee_id, +FC_REFLECT_ENUM( graphene::chain::fee_schedule_type::extended_fee_id, (withdraw_permission_delete_fee_id) (proposal_delete_fee_id) (limit_order_cancel_fee_id) ) @@ -641,6 +644,7 @@ FC_REFLECT( graphene::chain::chain_parameters, (fee_liquidation_threshold) (accounts_per_fee_scale) (account_fee_scale_bitshifts) + (extensions) ) FC_REFLECT_TYPENAME( graphene::chain::share_type ) diff --git a/libraries/chain/operations.cpp b/libraries/chain/operations.cpp index e7beff65..175e3fa2 100644 --- a/libraries/chain/operations.cpp +++ b/libraries/chain/operations.cpp @@ -492,7 +492,7 @@ void limit_order_cancel_operation::validate()const share_type limit_order_cancel_operation::calculate_fee(const fee_schedule_type& k) const { - return k.get_advanced_fee(fee_schedule_type::limit_order_cancel_fee_id); + return k.get_extended_fee(fee_schedule_type::limit_order_cancel_fee_id); } void call_order_update_operation::get_required_auth(flat_set& active_auth_set, flat_set&) const @@ -594,7 +594,7 @@ void proposal_delete_operation::get_required_auth(flat_set& act active_auth_set.insert(fee_paying_account); } share_type proposal_delete_operation::calculate_fee(const fee_schedule_type& k)const -{ return k.get_advanced_fee( fee_schedule_type::proposal_delete_fee_id ); } +{ return k.get_extended_fee( fee_schedule_type::proposal_delete_fee_id ); } void account_transfer_operation::validate()const { @@ -717,7 +717,7 @@ void withdraw_permission_delete_operation::validate() const share_type withdraw_permission_delete_operation::calculate_fee(const fee_schedule_type& k) const { - return k.get_advanced_fee( fee_schedule_type::withdraw_permission_delete_fee_id ); + return k.get_extended_fee( fee_schedule_type::withdraw_permission_delete_fee_id ); } void withdraw_permission_create_operation::get_required_auth(flat_set& active_auth_set, flat_set&) const diff --git a/programs/js_operation_serializer/main.cpp b/programs/js_operation_serializer/main.cpp index 1f48ba64..19751220 100644 --- a/programs/js_operation_serializer/main.cpp +++ b/programs/js_operation_serializer/main.cpp @@ -138,7 +138,6 @@ template struct js_sv_name template struct js_sv_name { static std::string name(){ return "\n " + js_name::name() +" " + js_sv_name::name(); } }; - template struct js_name< fc::static_variant > { @@ -149,6 +148,17 @@ struct js_name< fc::static_variant > else return name; } }; +template<> +struct js_name< fc::static_variant<> > +{ + static std::string name( std::string n = ""){ + static const std::string name = n; + if( name == "" ) + return "static_variant []"; + else return name; + } +}; + template::is_defined::value> @@ -279,6 +289,26 @@ struct serializer< fc::static_variant, false > std::cout << js_name>::name() << " = static_variant [" + js_sv_name::name() + "\n]\n\n"; } }; +template<> +struct serializer< fc::static_variant<>, false > +{ + static void init() + { + static bool init = false; + if( !init ) + { + init = true; + fc::static_variant<> var; + register_serializer( js_name>::name(), [=](){ generate(); } ); + } + } + + static void generate() + { + std::cout << js_name>::name() << " = static_variant []\n\n"; + } +}; + class register_member_visitor { @@ -337,6 +367,7 @@ int main( int argc, char** argv ) detail_ns::js_name>::name("key_data"); detail_ns::js_name::name("operation_result"); detail_ns::js_name::name("header_extension"); + detail_ns::js_name::name("parameter_extension"); detail_ns::js_name>::name("worker_initializer"); detail_ns::js_name>::name("vesting_policy_initializer"); detail_ns::serializer::init();