Progress #141 - defining extension parameters

This commit is contained in:
Daniel Larimer 2015-07-07 09:02:36 -04:00
parent 1eb273118b
commit 86df9c04fd
3 changed files with 47 additions and 12 deletions

View file

@ -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<unsigned_int,uint64_t> advanced;
flat_map<unsigned_int,uint64_t> 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<parameter_extension> 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 )

View file

@ -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<account_id_type>& active_auth_set, flat_set<account_id_type>&) const
@ -594,7 +594,7 @@ void proposal_delete_operation::get_required_auth(flat_set<account_id_type>& 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<account_id_type>& active_auth_set, flat_set<account_id_type>&) const

View file

@ -138,7 +138,6 @@ template<typename A> struct js_sv_name<A>
template<typename A, typename... T>
struct js_sv_name<A,T...> { static std::string name(){ return "\n " + js_name<A>::name() +" " + js_sv_name<T...>::name(); } };
template<typename... T>
struct js_name< fc::static_variant<T...> >
{
@ -149,6 +148,17 @@ struct js_name< fc::static_variant<T...> >
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<typename T, bool reflected = fc::reflector<T>::is_defined::value>
@ -279,6 +289,26 @@ struct serializer< fc::static_variant<T...>, false >
std::cout << js_name<fc::static_variant<T...>>::name() << " = static_variant [" + js_sv_name<T...>::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<fc::static_variant<>>::name(), [=](){ generate(); } );
}
}
static void generate()
{
std::cout << js_name<fc::static_variant<>>::name() << " = static_variant []\n\n";
}
};
class register_member_visitor
{
@ -337,6 +367,7 @@ int main( int argc, char** argv )
detail_ns::js_name<static_variant<address,public_key_type>>::name("key_data");
detail_ns::js_name<operation_result>::name("operation_result");
detail_ns::js_name<header_extension>::name("header_extension");
detail_ns::js_name<parameter_extension>::name("parameter_extension");
detail_ns::js_name<static_variant<refund_worker_type::initializer, vesting_balance_worker_type::initializer,burn_worker_type::initializer>>::name("worker_initializer");
detail_ns::js_name<static_variant<linear_vesting_policy_initializer,cdd_vesting_policy_initializer>>::name("vesting_policy_initializer");
detail_ns::serializer<signed_block>::init();