From 8abd6cd807aeafcbbddfd659b985fcb01bb2c1e6 Mon Sep 17 00:00:00 2001 From: moss9001 Date: Wed, 1 Dec 2021 01:24:32 +0200 Subject: [PATCH] Feature implemented (test) --- .../include/graphene/chain/protocol/son.hpp | 2 ++ libraries/chain/son_evaluator.cpp | 4 +++ .../wallet/include/graphene/wallet/wallet.hpp | 2 +- libraries/wallet/wallet.cpp | 29 +++++++++++++++---- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/libraries/chain/include/graphene/chain/protocol/son.hpp b/libraries/chain/include/graphene/chain/protocol/son.hpp index 10a75412..32adc9d4 100644 --- a/libraries/chain/include/graphene/chain/protocol/son.hpp +++ b/libraries/chain/include/graphene/chain/protocol/son.hpp @@ -1,6 +1,7 @@ #pragma once #include #include +#include namespace graphene { namespace chain { @@ -32,6 +33,7 @@ namespace graphene { namespace chain { optional new_signing_key; optional> new_sidechain_public_keys; optional new_pay_vb; + optional status; account_id_type fee_payer()const { return owner_account; } share_type calculate_fee(const fee_parameters_type& k)const { return 0; } diff --git a/libraries/chain/son_evaluator.cpp b/libraries/chain/son_evaluator.cpp index bf92b709..61e2d51d 100644 --- a/libraries/chain/son_evaluator.cpp +++ b/libraries/chain/son_evaluator.cpp @@ -79,6 +79,9 @@ void_result update_son_evaluator::do_evaluate(const son_update_operation& op) FC_ASSERT(vbo.policy.which() == vesting_policy::tag::value, "Payment balance must have linear vesting policy"); } + if(op.status.valid()) { + FC_ASSERT(db().get(op.son_id).status == son_status::deregistered, "SON must be in deregistered state"); + } return void_result(); } FC_CAPTURE_AND_RETHROW( (op) ) } @@ -94,6 +97,7 @@ object_id_type update_son_evaluator::do_apply(const son_update_operation& op) if(op.new_signing_key.valid()) so.signing_key = *op.new_signing_key; if(op.new_sidechain_public_keys.valid()) so.sidechain_public_keys = *op.new_sidechain_public_keys; if(op.new_pay_vb.valid()) so.pay_vb = *op.new_pay_vb; + if(op.status.valid()) so.status = son_status::inactive; }); } return op.son_id; diff --git a/libraries/wallet/include/graphene/wallet/wallet.hpp b/libraries/wallet/include/graphene/wallet/wallet.hpp index bae8e3e1..c15d55fe 100644 --- a/libraries/wallet/include/graphene/wallet/wallet.hpp +++ b/libraries/wallet/include/graphene/wallet/wallet.hpp @@ -1425,7 +1425,7 @@ class wallet_api flat_map sidechain_public_keys, bool broadcast = false); - string activate_deregistered_son(const string& id); + signed_transaction activate_deregistered_son(const string & owner_account, bool broadcast /* = false */); /** diff --git a/libraries/wallet/wallet.cpp b/libraries/wallet/wallet.cpp index 59a1841f..5679c0e8 100644 --- a/libraries/wallet/wallet.cpp +++ b/libraries/wallet/wallet.cpp @@ -2114,7 +2114,24 @@ public: return sign_transaction( tx, broadcast ); } FC_CAPTURE_AND_RETHROW( (owner_account)(url)(block_signing_key)(broadcast) ) } - signed_transaction update_son_vesting_balances(string owner_account, + signed_transaction activate_deregistered_son(const string & owner_account, + bool broadcast /* = false */) { + { try { + son_object son = get_son(owner_account); + + son_update_operation son_update_op; + son_update_op.son_id = son.id; + son_update_op.owner_account = son.son_account; + son_update_op.status = son_status::inactive; + signed_transaction tx; + tx.operations.push_back( son_update_op ); + set_operation_fees( tx, _remote_db->get_global_properties().parameters.current_fees ); + tx.validate(); + + return sign_transaction( tx, broadcast ); + } FC_CAPTURE_AND_RETHROW( (owner_account)(url)(block_signing_key)(broadcast) ) } + +signed_transaction update_son_vesting_balances(string owner_account, optional new_deposit, optional new_pay_vb, bool broadcast /* = false */) @@ -4391,11 +4408,6 @@ vector wallet_api::list_assets(const string& lowerbound, uint32_t return my->_remote_db->list_assets( lowerbound, limit ); } -string wallet_api::activate_deregistered_son(const string& id) -{ - return string("stub for activate_deregistered_son for ( ") + id + " ) "; -} - uint64_t wallet_api::get_asset_count()const { return my->_remote_db->get_asset_count(); @@ -5058,6 +5070,11 @@ signed_transaction wallet_api::update_son(string owner_account, return my->update_son(owner_account, url, block_signing_key, sidechain_public_keys, broadcast); } +signed_transaction wallet_api::activate_deregistered_son(const string & owner_account, bool broadcast) { + return my->_remote_db->activate_deregistered_son(owner_account, broadcast); +} + + signed_transaction wallet_api::update_son_vesting_balances(string owner_account, optional new_deposit, optional new_pay_vb,