Progress #141 - defining extension parameters
This commit is contained in:
parent
1eb273118b
commit
86df9c04fd
3 changed files with 47 additions and 12 deletions
|
|
@ -386,24 +386,24 @@ namespace graphene { namespace chain {
|
||||||
* protocol serialization.
|
* protocol serialization.
|
||||||
*/
|
*/
|
||||||
///@{
|
///@{
|
||||||
enum advanced_fee_id
|
enum extended_fee_id
|
||||||
{
|
{
|
||||||
withdraw_permission_delete_fee_id = 1, ///< the cost to delete a withdraw permission
|
withdraw_permission_delete_fee_id = 1, ///< the cost to delete a withdraw permission
|
||||||
proposal_delete_fee_id = 2, ///< fee for deleting a proposed transaction
|
proposal_delete_fee_id = 2, ///< fee for deleting a proposed transaction
|
||||||
limit_order_cancel_fee_id = 3 ///< fee for canceling a limit order
|
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);
|
auto itr = extended.find(id);
|
||||||
if( itr == advanced.end() ) return 0;
|
if( itr == extended.end() ) return 0;
|
||||||
return itr->second;
|
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:
|
protected:
|
||||||
|
|
@ -443,6 +443,8 @@ namespace graphene { namespace chain {
|
||||||
bool is_valid_v1( const std::string& base58str );
|
bool is_valid_v1( const std::string& base58str );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef static_variant<> parameter_extension;
|
||||||
|
|
||||||
struct chain_parameters
|
struct chain_parameters
|
||||||
{
|
{
|
||||||
fee_schedule_type current_fees; ///< current schedule of fees
|
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
|
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
|
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
|
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
|
void validate()const
|
||||||
{
|
{
|
||||||
|
|
@ -603,9 +606,9 @@ FC_REFLECT( graphene::chain::fee_schedule_type,
|
||||||
(assert_op_fee)
|
(assert_op_fee)
|
||||||
(proposal_create_fee)
|
(proposal_create_fee)
|
||||||
(proposal_update_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)
|
(withdraw_permission_delete_fee_id)
|
||||||
(proposal_delete_fee_id)
|
(proposal_delete_fee_id)
|
||||||
(limit_order_cancel_fee_id) )
|
(limit_order_cancel_fee_id) )
|
||||||
|
|
@ -641,6 +644,7 @@ FC_REFLECT( graphene::chain::chain_parameters,
|
||||||
(fee_liquidation_threshold)
|
(fee_liquidation_threshold)
|
||||||
(accounts_per_fee_scale)
|
(accounts_per_fee_scale)
|
||||||
(account_fee_scale_bitshifts)
|
(account_fee_scale_bitshifts)
|
||||||
|
(extensions)
|
||||||
)
|
)
|
||||||
|
|
||||||
FC_REFLECT_TYPENAME( graphene::chain::share_type )
|
FC_REFLECT_TYPENAME( graphene::chain::share_type )
|
||||||
|
|
|
||||||
|
|
@ -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
|
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
|
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);
|
active_auth_set.insert(fee_paying_account);
|
||||||
}
|
}
|
||||||
share_type proposal_delete_operation::calculate_fee(const fee_schedule_type& k)const
|
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
|
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
|
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
|
void withdraw_permission_create_operation::get_required_auth(flat_set<account_id_type>& active_auth_set, flat_set<account_id_type>&) const
|
||||||
|
|
|
||||||
|
|
@ -138,7 +138,6 @@ template<typename A> struct js_sv_name<A>
|
||||||
template<typename A, typename... T>
|
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(); } };
|
struct js_sv_name<A,T...> { static std::string name(){ return "\n " + js_name<A>::name() +" " + js_sv_name<T...>::name(); } };
|
||||||
|
|
||||||
|
|
||||||
template<typename... T>
|
template<typename... T>
|
||||||
struct js_name< fc::static_variant<T...> >
|
struct js_name< fc::static_variant<T...> >
|
||||||
{
|
{
|
||||||
|
|
@ -149,6 +148,17 @@ struct js_name< fc::static_variant<T...> >
|
||||||
else return name;
|
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>
|
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";
|
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
|
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<static_variant<address,public_key_type>>::name("key_data");
|
||||||
detail_ns::js_name<operation_result>::name("operation_result");
|
detail_ns::js_name<operation_result>::name("operation_result");
|
||||||
detail_ns::js_name<header_extension>::name("header_extension");
|
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<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::js_name<static_variant<linear_vesting_policy_initializer,cdd_vesting_policy_initializer>>::name("vesting_policy_initializer");
|
||||||
detail_ns::serializer<signed_block>::init();
|
detail_ns::serializer<signed_block>::init();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue