From 6145c3c89b4b758a10d5564c6973cfdcaff4e8d0 Mon Sep 17 00:00:00 2001 From: Milos Milosevic Date: Thu, 23 Feb 2023 13:25:39 +0100 Subject: [PATCH 1/4] Change default constructor of account_options --- libraries/chain/account_evaluator.cpp | 9 ++++++++- .../chain/include/graphene/chain/protocol/account.hpp | 11 +++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/libraries/chain/account_evaluator.cpp b/libraries/chain/account_evaluator.cpp index 4ecb3307..aec96049 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){ 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. -- 2.45.2 From 188d55158c1ccd62313abdc0b90f590150d7ca4a Mon Sep 17 00:00:00 2001 From: Milos Milosevic Date: Thu, 23 Feb 2023 23:26:43 +0100 Subject: [PATCH 2/4] Fix tests --- libraries/chain/account_evaluator.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/chain/account_evaluator.cpp b/libraries/chain/account_evaluator.cpp index aec96049..ab3c3d83 100644 --- a/libraries/chain/account_evaluator.cpp +++ b/libraries/chain/account_evaluator.cpp @@ -193,6 +193,7 @@ 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){ -- 2.45.2 From 5e7acde8851ad5d1abd69d49fbed4b962025e1dc Mon Sep 17 00:00:00 2001 From: Milos Milosevic Date: Fri, 24 Feb 2023 15:26:30 +0100 Subject: [PATCH 3/4] Also cover account_update_operation --- libraries/chain/account_evaluator.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libraries/chain/account_evaluator.cpp b/libraries/chain/account_evaluator.cpp index ab3c3d83..2d064241 100644 --- a/libraries/chain/account_evaluator.cpp +++ b/libraries/chain/account_evaluator.cpp @@ -343,6 +343,20 @@ 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 = account_options::ext(); + 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); -- 2.45.2 From 3f558da2a1a024662cddd4633af19936cc8f06c6 Mon Sep 17 00:00:00 2001 From: Milos Milosevic Date: Sat, 25 Feb 2023 12:05:49 +0100 Subject: [PATCH 4/4] Do not overwrite value of account_options extension --- libraries/chain/account_evaluator.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/libraries/chain/account_evaluator.cpp b/libraries/chain/account_evaluator.cpp index 2d064241..8ff2efcd 100644 --- a/libraries/chain/account_evaluator.cpp +++ b/libraries/chain/account_evaluator.cpp @@ -193,7 +193,6 @@ 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){ @@ -346,7 +345,6 @@ void_result account_update_evaluator::do_apply( const account_update_operation& if (!a.options.extensions.value.num_son.valid()) { - a.options.extensions.value = account_options::ext(); a.options.extensions.value.num_son = []{ flat_map num_son; for(const auto& active_sidechain_type : all_sidechain_types){ -- 2.45.2