From 8b0cdacb1123ce8d97f4b89fc0f696f795f31a64 Mon Sep 17 00:00:00 2001 From: Roman Olearski Date: Fri, 28 Oct 2016 19:35:49 +0200 Subject: [PATCH] Create new blockchain parameters for peerplays that can be voted on by committee members part 1 --- .../chain/protocol/chain_parameters.hpp | 13 +++++++ libraries/chain/tournament_evaluator.cpp | 37 ++++++++++++++++--- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/libraries/chain/include/graphene/chain/protocol/chain_parameters.hpp b/libraries/chain/include/graphene/chain/protocol/chain_parameters.hpp index 4dbd6c15..d2ced925 100644 --- a/libraries/chain/include/graphene/chain/protocol/chain_parameters.hpp +++ b/libraries/chain/include/graphene/chain/protocol/chain_parameters.hpp @@ -69,6 +69,13 @@ namespace graphene { namespace chain { uint16_t accounts_per_fee_scale = GRAPHENE_DEFAULT_ACCOUNTS_PER_FEE_SCALE; ///< number of accounts between fee scalings uint8_t account_fee_scale_bitshifts = GRAPHENE_DEFAULT_ACCOUNT_FEE_SCALE_BITSHIFTS; ///< number of times to left bitshift account registration fee at each scaling uint8_t max_authority_depth = GRAPHENE_MAX_SIG_CHECK_DEPTH; + /* rps tournament parameters constraints */ + uint32_t min_round_delay = 0; ///< miniaml delay between games + uint32_t max_round_delay = 600; ///< maxiaml delay between games + uint32_t min_time_per_commit_move = 0; ///< minimal time to commit the next move + uint32_t max_time_per_commit_move = 600; ///< maximal time to commit the next move + uint32_t min_time_per_reveal_move = 0; ///< minimal time to reveal move + uint32_t max_time_per_reveal_move = 600; ///< maximal time to reveal move extensions_type extensions; /** defined in fee_schedule.cpp */ @@ -106,5 +113,11 @@ FC_REFLECT( graphene::chain::chain_parameters, (accounts_per_fee_scale) (account_fee_scale_bitshifts) (max_authority_depth) + (min_round_delay) + (max_round_delay) + (min_time_per_commit_move) + (max_time_per_commit_move) + (min_time_per_reveal_move) + (max_time_per_reveal_move) (extensions) ) diff --git a/libraries/chain/tournament_evaluator.cpp b/libraries/chain/tournament_evaluator.cpp index 12e89661..0d777aba 100644 --- a/libraries/chain/tournament_evaluator.cpp +++ b/libraries/chain/tournament_evaluator.cpp @@ -56,11 +56,6 @@ namespace graphene { namespace chain { else FC_THROW("Must specify either a fixed start time or a delay"); - // TODO: make this committee-set - const uint32_t maximum_round_delay = 60 * 60; // one hour - FC_ASSERT(op.options.round_delay < maximum_round_delay, - "Round delay is too long"); - // TODO: make this committee-set const uint32_t maximum_tournament_number_of_wins = 100; FC_ASSERT(op.options.number_of_wins > 0); @@ -68,6 +63,38 @@ namespace graphene { namespace chain { "Matches may not require more than ${number_of_wins} wins", ("number_of_wins", maximum_tournament_number_of_wins)); + // round_delay constraints + const uint32_t minimum_round_delay = d.get_global_properties().parameters.min_round_delay; + FC_ASSERT(op.options.round_delay >= minimum_round_delay, + "Delay between games must not be less then ${min}", + ("min", minimum_round_delay)); + const uint32_t maximum_round_delay = d.get_global_properties().parameters.max_round_delay; + FC_ASSERT(op.options.round_delay <= maximum_round_delay, + "Delay between games must not be greater then ${max}", + ("max", maximum_round_delay)); + + const rock_paper_scissors_game_options& game_options = op.options.game_options.get(); + + // time_per_commit_move constraints + const uint32_t minimum_time_per_commit_move = d.get_global_properties().parameters.min_time_per_commit_move; + FC_ASSERT(game_options.time_per_commit_move >= minimum_time_per_commit_move, + "Time to commit the next move must not be less then ${min}", + ("min", minimum_time_per_commit_move)); + const uint32_t maximum_time_per_commit_move = d.get_global_properties().parameters.max_time_per_commit_move; + FC_ASSERT(game_options.time_per_commit_move <= maximum_time_per_commit_move, + "Time to commit the next move must not be greater then ${max}", + ("max", maximum_time_per_commit_move)); + + // time_per_commit_reveal constraints + const uint32_t minimum_time_per_reveal_move = d.get_global_properties().parameters.min_time_per_reveal_move; + FC_ASSERT(game_options.time_per_reveal_move >= minimum_time_per_reveal_move, + "Time to reveal the move must not be less then ${min}", + ("min", minimum_time_per_reveal_move)); + const uint32_t maximum_time_per_reveal_move = d.get_global_properties().parameters.max_time_per_reveal_move; + FC_ASSERT(game_options.time_per_reveal_move <= maximum_time_per_reveal_move, + "Time to reveal the move must not be greater then ${max}", + ("max", maximum_time_per_reveal_move)); + return void_result(); } FC_CAPTURE_AND_RETHROW( (op) ) }