diff --git a/libraries/chain/account_evaluator.cpp b/libraries/chain/account_evaluator.cpp index 4ecb3307..8ff2efcd 100644 --- a/libraries/chain/account_evaluator.cpp +++ b/libraries/chain/account_evaluator.cpp @@ -193,7 +193,14 @@ object_id_type account_create_evaluator::do_apply( const account_create_operatio if (!obj.options.extensions.value.num_son.valid()) { - obj.options.extensions.value = account_options::ext(); + obj.options.extensions.value.num_son = []{ + flat_map num_son; + for(const auto& active_sidechain_type : all_sidechain_types){ + num_son[active_sidechain_type] = 0; + } + return num_son; + }(); + } obj.statistics = d.create([&obj](account_statistics_object& s){ @@ -335,6 +342,19 @@ void_result account_update_evaluator::do_apply( const account_update_operation& a.top_n_control_flags = 0; } if( o.new_options ) a.options = *o.new_options; + + if (!a.options.extensions.value.num_son.valid()) + { + a.options.extensions.value.num_son = []{ + flat_map num_son; + for(const auto& active_sidechain_type : all_sidechain_types){ + num_son[active_sidechain_type] = 0; + } + return num_son; + }(); + + } + if( o.extensions.value.owner_special_authority.valid() ) { a.owner_special_authority = *(o.extensions.value.owner_special_authority); diff --git a/libraries/chain/include/graphene/chain/protocol/account.hpp b/libraries/chain/include/graphene/chain/protocol/account.hpp index c8074885..5acb065c 100644 --- a/libraries/chain/include/graphene/chain/protocol/account.hpp +++ b/libraries/chain/include/graphene/chain/protocol/account.hpp @@ -36,21 +36,16 @@ namespace graphene { namespace chain { bool is_cheap_name( const string& n ); /// These are the fields which can be updated by the active authority. - struct account_options + struct account_options { struct ext { /// The number of active son members this account votes the blockchain should appoint /// Must not exceed the actual number of son members voted for in @ref votes - optional< flat_map > num_son = []{ - flat_map num_son; - for(const auto& active_sidechain_type : all_sidechain_types){ - num_son[active_sidechain_type] = 0; - } - return num_son; - }(); + optional< flat_map > num_son; }; + /// The memo key is the key this account will typically use to encrypt/sign transaction memos and other non- /// validated account activities. This field is here to prevent confusion if the active authority has zero or /// multiple keys in it.