son_maintenance_operation
This commit is contained in:
parent
9d8278428f
commit
0e2d9c3310
8 changed files with 66 additions and 2 deletions
|
|
@ -310,6 +310,9 @@ struct get_impacted_account_visitor
|
||||||
void operator()( const son_heartbeat_operation& op ){
|
void operator()( const son_heartbeat_operation& op ){
|
||||||
_impacted.insert( op.owner_account );
|
_impacted.insert( op.owner_account );
|
||||||
}
|
}
|
||||||
|
void operator()( const son_maintenance_operation& op ){
|
||||||
|
_impacted.insert( op.owner_account );
|
||||||
|
}
|
||||||
void operator()( const sidechain_address_add_operation& op ){
|
void operator()( const sidechain_address_add_operation& op ){
|
||||||
_impacted.insert( op.sidechain_address_account );
|
_impacted.insert( op.sidechain_address_account );
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -250,6 +250,7 @@ void database::initialize_evaluators()
|
||||||
register_evaluator<update_son_evaluator>();
|
register_evaluator<update_son_evaluator>();
|
||||||
register_evaluator<delete_son_evaluator>();
|
register_evaluator<delete_son_evaluator>();
|
||||||
register_evaluator<son_heartbeat_evaluator>();
|
register_evaluator<son_heartbeat_evaluator>();
|
||||||
|
register_evaluator<son_maintenance_evaluator>();
|
||||||
register_evaluator<add_sidechain_address_evaluator>();
|
register_evaluator<add_sidechain_address_evaluator>();
|
||||||
register_evaluator<update_sidechain_address_evaluator>();
|
register_evaluator<update_sidechain_address_evaluator>();
|
||||||
register_evaluator<delete_sidechain_address_evaluator>();
|
register_evaluator<delete_sidechain_address_evaluator>();
|
||||||
|
|
|
||||||
|
|
@ -297,6 +297,9 @@ struct get_impacted_account_visitor
|
||||||
void operator()( const son_heartbeat_operation& op ) {
|
void operator()( const son_heartbeat_operation& op ) {
|
||||||
_impacted.insert( op.owner_account );
|
_impacted.insert( op.owner_account );
|
||||||
}
|
}
|
||||||
|
void operator()( const son_maintenance_operation& op ) {
|
||||||
|
_impacted.insert( op.owner_account );
|
||||||
|
}
|
||||||
void operator()( const sidechain_address_add_operation& op ) {
|
void operator()( const sidechain_address_add_operation& op ) {
|
||||||
_impacted.insert( op.sidechain_address_account );
|
_impacted.insert( op.sidechain_address_account );
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,8 @@ namespace graphene { namespace chain {
|
||||||
sidechain_address_add_operation,
|
sidechain_address_add_operation,
|
||||||
sidechain_address_update_operation,
|
sidechain_address_update_operation,
|
||||||
sidechain_address_delete_operation,
|
sidechain_address_delete_operation,
|
||||||
son_report_down_operation
|
son_report_down_operation,
|
||||||
|
son_maintenance_operation
|
||||||
> operation;
|
> operation;
|
||||||
|
|
||||||
/// @} // operations group
|
/// @} // operations group
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,7 @@ namespace graphene { namespace chain {
|
||||||
share_type calculate_fee(const fee_parameters_type& k)const { return 0; }
|
share_type calculate_fee(const fee_parameters_type& k)const { return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct son_report_down_operation : public base_operation
|
struct son_report_down_operation : public base_operation
|
||||||
{
|
{
|
||||||
struct fee_parameters_type { uint64_t fee = 0; };
|
struct fee_parameters_type { uint64_t fee = 0; };
|
||||||
|
|
@ -76,6 +77,18 @@ namespace graphene { namespace chain {
|
||||||
share_type calculate_fee(const fee_parameters_type& k)const { return 0; }
|
share_type calculate_fee(const fee_parameters_type& k)const { return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct son_maintenance_operation : public base_operation
|
||||||
|
{
|
||||||
|
struct fee_parameters_type { uint64_t fee = 0; };
|
||||||
|
|
||||||
|
asset fee;
|
||||||
|
son_id_type son_id;
|
||||||
|
account_id_type owner_account;
|
||||||
|
|
||||||
|
account_id_type fee_payer()const { return owner_account; }
|
||||||
|
share_type calculate_fee(const fee_parameters_type& k)const { return 0; }
|
||||||
|
};
|
||||||
|
|
||||||
} } // namespace graphene::chain
|
} } // namespace graphene::chain
|
||||||
|
|
||||||
FC_REFLECT(graphene::chain::son_create_operation::fee_parameters_type, (fee) )
|
FC_REFLECT(graphene::chain::son_create_operation::fee_parameters_type, (fee) )
|
||||||
|
|
@ -93,4 +106,7 @@ FC_REFLECT(graphene::chain::son_heartbeat_operation::fee_parameters_type, (fee)
|
||||||
FC_REFLECT(graphene::chain::son_heartbeat_operation, (fee)(son_id)(owner_account)(ts) )
|
FC_REFLECT(graphene::chain::son_heartbeat_operation, (fee)(son_id)(owner_account)(ts) )
|
||||||
|
|
||||||
FC_REFLECT(graphene::chain::son_report_down_operation::fee_parameters_type, (fee) )
|
FC_REFLECT(graphene::chain::son_report_down_operation::fee_parameters_type, (fee) )
|
||||||
FC_REFLECT(graphene::chain::son_report_down_operation, (fee)(son_id)(payer)(down_ts) )
|
FC_REFLECT(graphene::chain::son_report_down_operation, (fee)(son_id)(payer)(down_ts) )
|
||||||
|
|
||||||
|
FC_REFLECT(graphene::chain::son_maintenance_operation::fee_parameters_type, (fee) )
|
||||||
|
FC_REFLECT(graphene::chain::son_maintenance_operation, (fee)(son_id)(owner_account) )
|
||||||
|
|
|
||||||
|
|
@ -49,4 +49,13 @@ public:
|
||||||
object_id_type do_apply(const son_report_down_operation& o);
|
object_id_type do_apply(const son_report_down_operation& o);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class son_maintenance_evaluator : public evaluator<son_maintenance_evaluator>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef son_maintenance_operation operation_type;
|
||||||
|
|
||||||
|
void_result do_evaluate(const son_maintenance_operation& o);
|
||||||
|
object_id_type do_apply(const son_maintenance_operation& o);
|
||||||
|
};
|
||||||
|
|
||||||
} } // namespace graphene::chain
|
} } // namespace graphene::chain
|
||||||
|
|
|
||||||
|
|
@ -156,6 +156,10 @@ struct proposal_operation_hardfork_visitor
|
||||||
FC_ASSERT( block_time >= HARDFORK_SON_TIME, "son_report_down_operation not allowed yet!" );
|
FC_ASSERT( block_time >= HARDFORK_SON_TIME, "son_report_down_operation not allowed yet!" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void operator()(const son_maintenance_operation &v) const {
|
||||||
|
FC_ASSERT( block_time >= HARDFORK_SON_TIME, "son_maintenance_operation not allowed yet!" );
|
||||||
|
}
|
||||||
|
|
||||||
// loop and self visit in proposals
|
// loop and self visit in proposals
|
||||||
void operator()(const proposal_create_operation &v) const {
|
void operator()(const proposal_create_operation &v) const {
|
||||||
for (const op_wrapper &op : v.proposed_ops)
|
for (const op_wrapper &op : v.proposed_ops)
|
||||||
|
|
|
||||||
|
|
@ -175,4 +175,31 @@ object_id_type son_report_down_evaluator::do_apply(const son_report_down_operati
|
||||||
return op.son_id;
|
return op.son_id;
|
||||||
} FC_CAPTURE_AND_RETHROW( (op) ) }
|
} FC_CAPTURE_AND_RETHROW( (op) ) }
|
||||||
|
|
||||||
|
void_result son_maintenance_evaluator::do_evaluate(const son_maintenance_operation& op)
|
||||||
|
{ try {
|
||||||
|
FC_ASSERT(db().head_block_time() >= HARDFORK_SON_TIME, "Not allowed until SON HARDFORK"); // can be removed after HF date pass
|
||||||
|
FC_ASSERT(db().get(op.son_id).son_account == op.owner_account);
|
||||||
|
const auto& idx = db().get_index_type<son_index>().indices().get<by_id>();
|
||||||
|
auto itr = idx.find(op.son_id);
|
||||||
|
FC_ASSERT( itr != idx.end() );
|
||||||
|
// Inactive SONs can't go to maintenance
|
||||||
|
FC_ASSERT(itr->status == son_status::active || itr->status == son_status::in_maintenance, "Inactive SONs can't go to maintenance");
|
||||||
|
return void_result();
|
||||||
|
} FC_CAPTURE_AND_RETHROW( (op) ) }
|
||||||
|
|
||||||
|
object_id_type son_maintenance_evaluator::do_apply(const son_maintenance_operation& op)
|
||||||
|
{ try {
|
||||||
|
const auto& idx = db().get_index_type<son_index>().indices().get<by_id>();
|
||||||
|
auto itr = idx.find(op.son_id);
|
||||||
|
if(itr != idx.end())
|
||||||
|
{
|
||||||
|
if(itr->status == son_status::active) {
|
||||||
|
db().modify(*itr, [](son_object &so) {
|
||||||
|
so.status = son_status::in_maintenance;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return op.son_id;
|
||||||
|
} FC_CAPTURE_AND_RETHROW( (op) ) }
|
||||||
|
|
||||||
} } // namespace graphene::chain
|
} } // namespace graphene::chain
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue