Implement committee_member_update operation #258

This commit is contained in:
theoreticalbts 2015-08-26 17:30:44 -04:00
parent 7db477b9d7
commit 695978cfa1
7 changed files with 70 additions and 4 deletions

View file

@ -133,7 +133,14 @@ struct get_impacted_account_visitor
_impacted.insert( op.authorized_account );
}
void operator()( const committee_member_create_operation& op ) {}
void operator()( const committee_member_create_operation& op )
{
_impacted.insert( op.committee_member_account );
}
void operator()( const committee_member_update_operation& op )
{
_impacted.insert( op.committee_member_account );
}
void operator()( const committee_member_update_global_parameters_operation& op ) {}
void operator()( const vesting_balance_create_operation& op )

View file

@ -48,6 +48,25 @@ object_id_type committee_member_create_evaluator::do_apply( const committee_memb
return new_del_object.id;
} FC_CAPTURE_AND_RETHROW( (op) ) }
void_result committee_member_update_evaluator::do_evaluate( const committee_member_update_operation& op )
{ try {
FC_ASSERT(db().get(op.committee_member).committee_member_account == op.committee_member_account);
return void_result();
} FC_CAPTURE_AND_RETHROW( (op) ) }
void_result committee_member_update_evaluator::do_apply( const committee_member_update_operation& op )
{ try {
database& _db = db();
_db.modify(
_db.get(op.committee_member),
[&]( committee_member_object& com )
{
if( op.new_url.valid() )
com.url = *op.new_url;
});
return void_result();
} FC_CAPTURE_AND_RETHROW( (op) ) }
void_result committee_member_update_global_parameters_evaluator::do_evaluate(const committee_member_update_global_parameters_operation& o)
{ try {
FC_ASSERT(trx_state->_is_proposed_trx);

View file

@ -118,6 +118,7 @@ void database::initialize_evaluators()
register_evaluator<account_upgrade_evaluator>();
register_evaluator<account_whitelist_evaluator>();
register_evaluator<committee_member_create_evaluator>();
register_evaluator<committee_member_update_evaluator>();
register_evaluator<committee_member_update_global_parameters_evaluator>();
register_evaluator<custom_evaluator>();
register_evaluator<asset_create_evaluator>();

View file

@ -30,6 +30,15 @@ namespace graphene { namespace chain {
object_id_type do_apply( const committee_member_create_operation& o );
};
class committee_member_update_evaluator : public evaluator<committee_member_update_evaluator>
{
public:
typedef committee_member_update_operation operation_type;
void_result do_evaluate( const committee_member_update_operation& o );
void_result do_apply( const committee_member_update_operation& o );
};
class committee_member_update_global_parameters_evaluator : public evaluator<committee_member_update_global_parameters_evaluator>
{
public:
@ -39,5 +48,4 @@ namespace graphene { namespace chain {
void_result do_apply( const committee_member_update_global_parameters_operation& o );
};
} } // graphene::chain

View file

@ -24,6 +24,28 @@ namespace graphene { namespace chain {
void validate()const;
};
/**
* @brief Update a committee_member object.
* @ingroup operations
*
* Currently the only field which can be updated is the `url`
* field.
*/
struct committee_member_update_operation : public base_operation
{
struct fee_parameters_type { uint64_t fee = 20 * GRAPHENE_BLOCKCHAIN_PRECISION; };
asset fee;
/// The committee member to update.
committee_member_id_type committee_member;
/// The account which owns the committee_member. This account pays the fee for this operation.
account_id_type committee_member_account;
optional< string > new_url;
account_id_type fee_payer()const { return committee_member_account; }
void validate()const;
};
/**
* @brief Used by committee_members to update the global parameters of the blockchain.
* @ingroup operations
@ -50,10 +72,12 @@ namespace graphene { namespace chain {
} } // graphene::chain
FC_REFLECT( graphene::chain::committee_member_create_operation::fee_parameters_type, (fee) )
FC_REFLECT( graphene::chain::committee_member_update_operation::fee_parameters_type, (fee) )
FC_REFLECT( graphene::chain::committee_member_update_global_parameters_operation::fee_parameters_type, (fee) )
FC_REFLECT( graphene::chain::committee_member_create_operation,
(fee)(committee_member_account)(url) )
FC_REFLECT( graphene::chain::committee_member_update_operation,
(fee)(committee_member)(committee_member_account)(new_url) )
FC_REFLECT( graphene::chain::committee_member_update_global_parameters_operation, (fee)(new_parameters) );

View file

@ -54,6 +54,7 @@ namespace graphene { namespace chain {
withdraw_permission_claim_operation,
withdraw_permission_delete_operation,
committee_member_create_operation,
committee_member_update_operation,
committee_member_update_global_parameters_operation,
vesting_balance_create_operation,
vesting_balance_withdraw_operation,

View file

@ -9,11 +9,17 @@ void committee_member_create_operation::validate()const
FC_ASSERT(url.size() < GRAPHENE_MAX_URL_LENGTH );
}
void committee_member_update_operation::validate()const
{
FC_ASSERT( fee.amount >= 0 );
if( new_url.valid() )
FC_ASSERT(new_url->size() < GRAPHENE_MAX_URL_LENGTH );
}
void committee_member_update_global_parameters_operation::validate() const
{
FC_ASSERT( fee.amount >= 0 );
new_parameters.validate();
}
} } // graphene::chain