prevent misconfiguration of blockchain parameters #149

Closed
opened 2021-07-21 18:56:01 +00:00 by prandnum · 20 comments
prandnum commented 2021-07-21 18:56:01 +00:00 (Migrated from gitlab.com)
The following parameters in genesis.json are related
1) Fees for proposals
   a. proposal create (22)
   b. proposal update (23)
   c. proposal delete (24)  -- Not sure how relevant this is.
2) SON Parameters
   a. "son_pay_max": 20000000,
   b. "son_deregister_time": 120,
   c. "son_heartbeat_frequency": 20,
   d. "maximum_son_count": 15

Any new proposal which tries to misconfigure the parameters should be prevented
Following are some of the relations
1) ("proposal update fees"| "proposal create" | "proposal delete" ) < (son_pay_max/(10000 * maximum_son_count))
2) son_heartbeat_frequency < son_deregister_time

There might be more parameters like these that could be checked during propose_parameter_change operation.
Similarly:

 "extensions": {
      ..........
      "son_pay_time": 600,
      "son_deregister_time": 300,
      "son_heartbeat_frequency": 60,
      "son_down_time": 180,
      .......
    }

son_down_time, son_deregister_time and son_pay_time should be greater than son_heartbeat_frequency.

Instead of giving all them absolute values, we should instead give them relative values ie  

 "extensions": {
      ..........
      "son_pay_time_frequency": 10,
      "son_deregister_time_frequency": 5,
      "son_heartbeat_frequency": 60,
      "son_down_time_frequency": 3,
      .......
    }

which will mean as same as below:

 "extensions": {
      ..........
      "son_pay_time": 600,
      "son_deregister_time": 300,
      "son_heartbeat_frequency": 60,
      "son_down_time": 180,
      .......
    }

``` The following parameters in genesis.json are related 1) Fees for proposals a. proposal create (22) b. proposal update (23) c. proposal delete (24) -- Not sure how relevant this is. 2) SON Parameters a. "son_pay_max": 20000000, b. "son_deregister_time": 120, c. "son_heartbeat_frequency": 20, d. "maximum_son_count": 15 Any new proposal which tries to misconfigure the parameters should be prevented Following are some of the relations 1) ("proposal update fees"| "proposal create" | "proposal delete" ) < (son_pay_max/(10000 * maximum_son_count)) 2) son_heartbeat_frequency < son_deregister_time There might be more parameters like these that could be checked during propose_parameter_change operation. ``` ``` Similarly: "extensions": { .......... "son_pay_time": 600, "son_deregister_time": 300, "son_heartbeat_frequency": 60, "son_down_time": 180, ....... } son_down_time, son_deregister_time and son_pay_time should be greater than son_heartbeat_frequency. Instead of giving all them absolute values, we should instead give them relative values ie "extensions": { .......... "son_pay_time_frequency": 10, "son_deregister_time_frequency": 5, "son_heartbeat_frequency": 60, "son_down_time_frequency": 3, ....... } which will mean as same as below: "extensions": { .......... "son_pay_time": 600, "son_deregister_time": 300, "son_heartbeat_frequency": 60, "son_down_time": 180, ....... } ```
prandnum commented 2021-07-21 18:56:41 +00:00 (Migrated from gitlab.com)

@bobinson @sierra19XX @serkixenos - Please provide your views on this

CC: @hbelakon

@bobinson @sierra19XX @serkixenos - Please provide your views on this CC: @hbelakon
bobinson commented 2021-07-22 10:18:54 +00:00 (Migrated from gitlab.com)

@sierra19XX @serkixenos - This parameters are tweak-able by witnesses or by advisors ?

@sierra19XX @serkixenos - This parameters are tweak-able by witnesses or by advisors ?
serkixenos commented 2021-10-18 09:04:16 +00:00 (Migrated from gitlab.com)

mentioned in issue #127

mentioned in issue #127
prandnum commented 2021-11-22 20:12:56 +00:00 (Migrated from gitlab.com)

changed the description

changed the description
hbelakon commented 2021-12-09 18:55:32 +00:00 (Migrated from gitlab.com)

assigned to @prandnum

assigned to @prandnum
hbelakon commented 2021-12-09 18:55:45 +00:00 (Migrated from gitlab.com)

@prandnum is it still an issue?

@prandnum is it still an issue?
prandnum commented 2021-12-09 19:02:51 +00:00 (Migrated from gitlab.com)

yes, this is still an issue. @serkixenos was supposed to work on this.

yes, this is still an issue. @serkixenos was supposed to work on this.
prandnum commented 2022-01-17 13:17:09 +00:00 (Migrated from gitlab.com)

assigned to @serkixenos

assigned to @serkixenos
serkixenos commented 2022-02-11 15:02:52 +00:00 (Migrated from gitlab.com)

mentioned in issue #275

mentioned in issue #275
serkixenos commented 2022-02-11 15:03:15 +00:00 (Migrated from gitlab.com)

marked this issue as related to #275

marked this issue as related to #275
serkixenos commented 2022-02-18 18:38:52 +00:00 (Migrated from gitlab.com)

One way to do this is to update committee_member_update_global_parameters_evaluator::do_evaluate, to compare for invalid values, similarly to what we already have there for min/max bet multiplier
https://gitlab.com/PBSA/peerplays/-/blob/develop/libraries/chain/committee_member_evaluator.cpp#L80

Also, we should prevent updating gpos_period_start, son_account, btc_asset, hbd_asset, hive_asset. These values must be copied from whatever is in the GPO at the moment the update is applied.

One way to do this is to update committee_member_update_global_parameters_evaluator::do_evaluate, to compare for invalid values, similarly to what we already have there for min/max bet multiplier https://gitlab.com/PBSA/peerplays/-/blob/develop/libraries/chain/committee_member_evaluator.cpp#L80 Also, we should prevent updating gpos_period_start, son_account, btc_asset, hbd_asset, hive_asset. These values must be copied from whatever is in the GPO at the moment the update is applied.
serkixenos commented 2022-02-18 18:48:03 +00:00 (Migrated from gitlab.com)

This provisional change might show what we need when updating chain params.
https://gitlab.com/PBSA/peerplays/-/blob/develop/libraries/chain/db_maint.cpp#L2221

      if( p.pending_parameters )
      {
         if( !p.pending_parameters->extensions.value.min_bet_multiplier.valid() )
            p.pending_parameters->extensions.value.min_bet_multiplier = p.parameters.extensions.value.min_bet_multiplier;
         if( !p.pending_parameters->extensions.value.max_bet_multiplier.valid() )
            p.pending_parameters->extensions.value.max_bet_multiplier = p.parameters.extensions.value.max_bet_multiplier;
         if( !p.pending_parameters->extensions.value.betting_rake_fee_percentage.valid() )
            p.pending_parameters->extensions.value.betting_rake_fee_percentage = p.parameters.extensions.value.betting_rake_fee_percentage;
         if( !p.pending_parameters->extensions.value.permitted_betting_odds_increments.valid() )
            p.pending_parameters->extensions.value.permitted_betting_odds_increments = p.parameters.extensions.value.permitted_betting_odds_increments;
         if( !p.pending_parameters->extensions.value.live_betting_delay_time.valid() )
            p.pending_parameters->extensions.value.live_betting_delay_time = p.parameters.extensions.value.live_betting_delay_time;
         //if( !p.pending_parameters->extensions.value.gpos_period_start.valid() )
            p.pending_parameters->extensions.value.gpos_period_start = p.parameters.extensions.value.gpos_period_start;
         if( !p.pending_parameters->extensions.value.gpos_period.valid() )
            p.pending_parameters->extensions.value.gpos_period = p.parameters.extensions.value.gpos_period;
         if( !p.pending_parameters->extensions.value.gpos_subperiod.valid() )
            p.pending_parameters->extensions.value.gpos_subperiod = p.parameters.extensions.value.gpos_subperiod;
         if( !p.pending_parameters->extensions.value.gpos_vesting_lockin_period.valid() )
            p.pending_parameters->extensions.value.gpos_vesting_lockin_period = p.parameters.extensions.value.gpos_vesting_lockin_period;
         if( !p.pending_parameters->extensions.value.rbac_max_permissions_per_account.valid() )
            p.pending_parameters->extensions.value.rbac_max_permissions_per_account = p.parameters.extensions.value.rbac_max_permissions_per_account;
         if( !p.pending_parameters->extensions.value.rbac_max_account_authority_lifetime.valid() )
            p.pending_parameters->extensions.value.rbac_max_account_authority_lifetime = p.parameters.extensions.value.rbac_max_account_authority_lifetime;
         if( !p.pending_parameters->extensions.value.rbac_max_authorities_per_permission.valid() )
            p.pending_parameters->extensions.value.rbac_max_authorities_per_permission = p.parameters.extensions.value.rbac_max_authorities_per_permission;
         if( !p.pending_parameters->extensions.value.account_roles_max_per_account.valid() )
            p.pending_parameters->extensions.value.account_roles_max_per_account = p.parameters.extensions.value.account_roles_max_per_account;
         if( !p.pending_parameters->extensions.value.account_roles_max_lifetime.valid() )
            p.pending_parameters->extensions.value.account_roles_max_lifetime = p.parameters.extensions.value.account_roles_max_lifetime;
         if( !p.pending_parameters->extensions.value.son_vesting_amount.valid() )
            p.pending_parameters->extensions.value.son_vesting_amount = p.parameters.extensions.value.son_vesting_amount;
         if( !p.pending_parameters->extensions.value.son_vesting_period.valid() )
            p.pending_parameters->extensions.value.son_vesting_period = p.parameters.extensions.value.son_vesting_period;
         if( !p.pending_parameters->extensions.value.son_pay_max.valid() )
            p.pending_parameters->extensions.value.son_pay_max = p.parameters.extensions.value.son_pay_max;
         if( !p.pending_parameters->extensions.value.son_pay_time.valid() )
            p.pending_parameters->extensions.value.son_pay_time = p.parameters.extensions.value.son_pay_time;
         if( !p.pending_parameters->extensions.value.son_deregister_time.valid() )
            p.pending_parameters->extensions.value.son_deregister_time = p.parameters.extensions.value.son_deregister_time;
         if( !p.pending_parameters->extensions.value.son_heartbeat_frequency.valid() )
            p.pending_parameters->extensions.value.son_heartbeat_frequency = p.parameters.extensions.value.son_heartbeat_frequency;
         if( !p.pending_parameters->extensions.value.son_down_time.valid() )
            p.pending_parameters->extensions.value.son_down_time = p.parameters.extensions.value.son_down_time;
         if( !p.pending_parameters->extensions.value.son_bitcoin_min_tx_confirmations.valid() )
            p.pending_parameters->extensions.value.son_bitcoin_min_tx_confirmations = p.parameters.extensions.value.son_bitcoin_min_tx_confirmations;
	 //if( !p.pending_parameters->extensions.value.son_account.valid() )
            p.pending_parameters->extensions.value.son_account = p.parameters.extensions.value.son_account;
         //if( !p.pending_parameters->extensions.value.btc_asset.valid() )
            p.pending_parameters->extensions.value.btc_asset = p.parameters.extensions.value.btc_asset;
	 if( !p.pending_parameters->extensions.value.maximum_son_count.valid() )
            p.pending_parameters->extensions.value.maximum_son_count = p.parameters.extensions.value.maximum_son_count;
         //if( !p.pending_parameters->extensions.value.hbd_asset.valid() )
            p.pending_parameters->extensions.value.hbd_asset = p.parameters.extensions.value.hbd_asset;
         //if( !p.pending_parameters->extensions.value.hive_asset.valid() )
            p.pending_parameters->extensions.value.hive_asset = p.parameters.extensions.value.hive_asset;
         p.parameters = std::move(*p.pending_parameters);
         p.pending_parameters.reset();
      }
This provisional change might show what we need when updating chain params. https://gitlab.com/PBSA/peerplays/-/blob/develop/libraries/chain/db_maint.cpp#L2221 ``` if( p.pending_parameters ) { if( !p.pending_parameters->extensions.value.min_bet_multiplier.valid() ) p.pending_parameters->extensions.value.min_bet_multiplier = p.parameters.extensions.value.min_bet_multiplier; if( !p.pending_parameters->extensions.value.max_bet_multiplier.valid() ) p.pending_parameters->extensions.value.max_bet_multiplier = p.parameters.extensions.value.max_bet_multiplier; if( !p.pending_parameters->extensions.value.betting_rake_fee_percentage.valid() ) p.pending_parameters->extensions.value.betting_rake_fee_percentage = p.parameters.extensions.value.betting_rake_fee_percentage; if( !p.pending_parameters->extensions.value.permitted_betting_odds_increments.valid() ) p.pending_parameters->extensions.value.permitted_betting_odds_increments = p.parameters.extensions.value.permitted_betting_odds_increments; if( !p.pending_parameters->extensions.value.live_betting_delay_time.valid() ) p.pending_parameters->extensions.value.live_betting_delay_time = p.parameters.extensions.value.live_betting_delay_time; //if( !p.pending_parameters->extensions.value.gpos_period_start.valid() ) p.pending_parameters->extensions.value.gpos_period_start = p.parameters.extensions.value.gpos_period_start; if( !p.pending_parameters->extensions.value.gpos_period.valid() ) p.pending_parameters->extensions.value.gpos_period = p.parameters.extensions.value.gpos_period; if( !p.pending_parameters->extensions.value.gpos_subperiod.valid() ) p.pending_parameters->extensions.value.gpos_subperiod = p.parameters.extensions.value.gpos_subperiod; if( !p.pending_parameters->extensions.value.gpos_vesting_lockin_period.valid() ) p.pending_parameters->extensions.value.gpos_vesting_lockin_period = p.parameters.extensions.value.gpos_vesting_lockin_period; if( !p.pending_parameters->extensions.value.rbac_max_permissions_per_account.valid() ) p.pending_parameters->extensions.value.rbac_max_permissions_per_account = p.parameters.extensions.value.rbac_max_permissions_per_account; if( !p.pending_parameters->extensions.value.rbac_max_account_authority_lifetime.valid() ) p.pending_parameters->extensions.value.rbac_max_account_authority_lifetime = p.parameters.extensions.value.rbac_max_account_authority_lifetime; if( !p.pending_parameters->extensions.value.rbac_max_authorities_per_permission.valid() ) p.pending_parameters->extensions.value.rbac_max_authorities_per_permission = p.parameters.extensions.value.rbac_max_authorities_per_permission; if( !p.pending_parameters->extensions.value.account_roles_max_per_account.valid() ) p.pending_parameters->extensions.value.account_roles_max_per_account = p.parameters.extensions.value.account_roles_max_per_account; if( !p.pending_parameters->extensions.value.account_roles_max_lifetime.valid() ) p.pending_parameters->extensions.value.account_roles_max_lifetime = p.parameters.extensions.value.account_roles_max_lifetime; if( !p.pending_parameters->extensions.value.son_vesting_amount.valid() ) p.pending_parameters->extensions.value.son_vesting_amount = p.parameters.extensions.value.son_vesting_amount; if( !p.pending_parameters->extensions.value.son_vesting_period.valid() ) p.pending_parameters->extensions.value.son_vesting_period = p.parameters.extensions.value.son_vesting_period; if( !p.pending_parameters->extensions.value.son_pay_max.valid() ) p.pending_parameters->extensions.value.son_pay_max = p.parameters.extensions.value.son_pay_max; if( !p.pending_parameters->extensions.value.son_pay_time.valid() ) p.pending_parameters->extensions.value.son_pay_time = p.parameters.extensions.value.son_pay_time; if( !p.pending_parameters->extensions.value.son_deregister_time.valid() ) p.pending_parameters->extensions.value.son_deregister_time = p.parameters.extensions.value.son_deregister_time; if( !p.pending_parameters->extensions.value.son_heartbeat_frequency.valid() ) p.pending_parameters->extensions.value.son_heartbeat_frequency = p.parameters.extensions.value.son_heartbeat_frequency; if( !p.pending_parameters->extensions.value.son_down_time.valid() ) p.pending_parameters->extensions.value.son_down_time = p.parameters.extensions.value.son_down_time; if( !p.pending_parameters->extensions.value.son_bitcoin_min_tx_confirmations.valid() ) p.pending_parameters->extensions.value.son_bitcoin_min_tx_confirmations = p.parameters.extensions.value.son_bitcoin_min_tx_confirmations; //if( !p.pending_parameters->extensions.value.son_account.valid() ) p.pending_parameters->extensions.value.son_account = p.parameters.extensions.value.son_account; //if( !p.pending_parameters->extensions.value.btc_asset.valid() ) p.pending_parameters->extensions.value.btc_asset = p.parameters.extensions.value.btc_asset; if( !p.pending_parameters->extensions.value.maximum_son_count.valid() ) p.pending_parameters->extensions.value.maximum_son_count = p.parameters.extensions.value.maximum_son_count; //if( !p.pending_parameters->extensions.value.hbd_asset.valid() ) p.pending_parameters->extensions.value.hbd_asset = p.parameters.extensions.value.hbd_asset; //if( !p.pending_parameters->extensions.value.hive_asset.valid() ) p.pending_parameters->extensions.value.hive_asset = p.parameters.extensions.value.hive_asset; p.parameters = std::move(*p.pending_parameters); p.pending_parameters.reset(); } ```
serkixenos commented 2022-02-18 18:51:34 +00:00 (Migrated from gitlab.com)

Be aware that gpos_period_start can change between creating parameter change proposal, and applying the change.

Be aware that gpos_period_start can change between creating parameter change proposal, and applying the change.
serkixenos commented 2022-02-18 19:22:39 +00:00 (Migrated from gitlab.com)

https://gitlab.com/PBSA/peerplays/-/blob/develop/libraries/chain/protocol/fee_schedule.cpp#L155

chain_paramters validation function. Not sure why its here, should be moved to chain_parameters.cpp

https://gitlab.com/PBSA/peerplays/-/blob/develop/libraries/chain/protocol/fee_schedule.cpp#L155 chain_paramters validation function. Not sure why its here, should be moved to chain_parameters.cpp
serkixenos commented 2022-03-01 17:50:14 +00:00 (Migrated from gitlab.com)
Important read https://gitlab.com/PBSA/peerplays/-/issues/127
hirunda commented 2022-03-01 20:35:55 +00:00 (Migrated from gitlab.com)

assigned to @hirunda

assigned to @hirunda
hirunda commented 2022-03-03 12:50:34 +00:00 (Migrated from gitlab.com)

Here are my findings so far:

void chain_parameters::validate() const should do the job for us, although I am going to extend function for checking the problematic parameters listed in the issue.
This function is defined within fee_schedule.cpp, although I am not sure why is there, since this function is a member of chain_parameters class.
I think that initially we should do as following:

  1. Extend function for checking problematic parameters
  2. Call this function in committee_member_update_global_parameters_evaluator::do_evaluate(const committee_member_update_global_parameters_operation& o)

I will start with prototype and let you know the rsults

Here are my findings so far: void chain_parameters::validate() const should do the job for us, although I am going to extend function for checking the problematic parameters listed in the issue. This function is defined within fee_schedule.cpp, although I am not sure why is there, since this function is a member of chain_parameters class. I think that initially we should do as following: 1) Extend function for checking problematic parameters 2) Call this function in committee_member_update_global_parameters_evaluator::do_evaluate(const committee_member_update_global_parameters_operation& o) I will start with prototype and let you know the rsults
hirunda commented 2022-03-08 12:51:15 +00:00 (Migrated from gitlab.com)

Added the implementation in MR !79 .
The only way to prevent miss-configuration is to do the check in:

void_result committee_member_update_global_parameters_evaluator::do_evaluate(const committee_member_update_global_parameters_operation& o)

since there is available information for global properties which are queried from data base.

The implementation is checking allowed value for son_heartbeat_frequency which must be less than:

  • son_deregister_time
  • son_down_time
  • son_pay_time

The implementation also constrains changing:

  • gpos_period_start
  • son_account
  • btc_asset
  • hbd_asset
  • hive_asset

The remaining work regarding this issue is to add automated tests in mentioned MR.

Added the implementation in MR !79 . The only way to prevent miss-configuration is to do the check in: `void_result committee_member_update_global_parameters_evaluator::do_evaluate(const committee_member_update_global_parameters_operation& o)` since there is available information for global properties which are queried from data base. The implementation is checking allowed value for son_heartbeat_frequency which must be less than: - son_deregister_time - son_down_time - son_pay_time The implementation also constrains changing: - gpos_period_start - son_account - btc_asset - hbd_asset - hive_asset The remaining work regarding this issue is to add automated tests in mentioned MR.
hirunda commented 2022-03-09 12:52:42 +00:00 (Migrated from gitlab.com)

Hi Kiran,

Please run the following tests to confirm that the issue is fixed:

  1. Create a proposal with valid parameters for son_pay_time, son_deregister_time son_down_time and
    son_heartbeat_frequency.

    Note that valid inputs are son_heartbeat_frequency < son_pay_time, son_heartbeat_frequency < son_down_time and
    son_heartbeat_frequency < son_deregister_time.

  2. Approve proposal

  3. Query the global properties

  4. Verify that changes from point 1) are applied.

  5. Create a proposal with invalid inputs for son_pay_time, son_deregister_time son_down_time and
    son_heartbeat_frequency. For example, set one of the parameter to be less than son_heartbeat_frequency.

  6. Verify that proposal creation is failing for invalid inputs from point 5)

  7. Get the global properties

  8. Create a proposal to change gpos_period_start, hive_asset, hbd_asset, btc_asset , son_account.

  9. Approve proposal.

  10. Verify that none of parameters from point 8) are applied and mentioned parameters from 8) are aligned
    with the parameters you got from 7)

  11. Create the proposal for changing some of parameters by your choice that are not mentioned in previous points.

  12. Approve proposal

  13. Verify that global properties are applied from point 11)

  14. Verify that non of param

Hi Kiran, Please run the following tests to confirm that the issue is fixed: 1) Create a proposal with valid parameters for son_pay_time, son_deregister_time son_down_time and son_heartbeat_frequency. Note that valid inputs are son_heartbeat_frequency < son_pay_time, son_heartbeat_frequency < son_down_time and son_heartbeat_frequency < son_deregister_time. 2) Approve proposal 3) Query the global properties 4) Verify that changes from point 1) are applied. 5) Create a proposal with invalid inputs for son_pay_time, son_deregister_time son_down_time and son_heartbeat_frequency. For example, set one of the parameter to be less than son_heartbeat_frequency. 6) Verify that proposal creation is failing for invalid inputs from point 5) 7) Get the global properties 8) Create a proposal to change gpos_period_start, hive_asset, hbd_asset, btc_asset , son_account. 9) Approve proposal. 10) Verify that none of parameters from point 8) are applied and mentioned parameters from 8) are aligned with the parameters you got from 7) 11) Create the proposal for changing some of parameters by your choice that are not mentioned in previous points. 12) Approve proposal 13) Verify that global properties are applied from point 11) 9) Verify that non of param
prandnum commented 2022-03-12 10:33:24 +00:00 (Migrated from gitlab.com)

proposed the following changes for

1. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_heartbeat_frequency < son_pay_time, son_down_time and son_deregister_time. - Proposal went through, TEST PASSED
2. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_heartbeat_frequency < son_down_time and son_deregister_time and son_pay_time <son_heartbeat_frequency - Proposal failed, TEST PASSED
3. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_heartbeat_frequency < son_pay_time and son_deregister_time  and son_down_time <son_heartbeat_frequency   - Proposal failed, TEST PASSED
4. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_heartbeat_frequency < son_pay_time and son_down_time        and son_deregister_time <son_heartbeat_frequency  - Proposal failed, TEST PASSED
5. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_heartbeat_frequency < son_down_time and son_pay_time, son_deregister_time <son_heartbeat_frequency, - Proposal failed, TEST PASSED
6. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_heartbeat_frequency < son_pay_time and son_deregister_time  and son_down_time <son_heartbeat_frequency   - Proposal failed, TEST PASSED
7. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_heartbeat_frequency < son_deregister_time and son_down_time, son_pay_time <son_heartbeat_frequency  - Proposal failed, TEST PASSED
7. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_down_time, son_pay_time, son_deregister_time <son_heartbeat_frequency  - Proposal failed, TEST PASSED

Tried changing value for "gpos_period_start", "hbd_asset", "hive_asset", "son_account", "btc_asset" - Proposal didnt get approved, TEST PASSED
propose_parameter_change 1.2.8 "2022-03-12T09:50:00" {"extensions":{"gpos_period_start": 1800, "hbd_asset":"1.3.5", "hive_asset":"1.3.6", "son_account": "1.2.14", "btc_asset": "1.3.0"  }} true

Tried changing value for "maximum_son_count" - Proposal approved, TEST PASSED
proposed the following changes for ``` 1. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_heartbeat_frequency < son_pay_time, son_down_time and son_deregister_time. - Proposal went through, TEST PASSED 2. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_heartbeat_frequency < son_down_time and son_deregister_time and son_pay_time <son_heartbeat_frequency - Proposal failed, TEST PASSED 3. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_heartbeat_frequency < son_pay_time and son_deregister_time and son_down_time <son_heartbeat_frequency - Proposal failed, TEST PASSED 4. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_heartbeat_frequency < son_pay_time and son_down_time and son_deregister_time <son_heartbeat_frequency - Proposal failed, TEST PASSED 5. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_heartbeat_frequency < son_down_time and son_pay_time, son_deregister_time <son_heartbeat_frequency, - Proposal failed, TEST PASSED 6. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_heartbeat_frequency < son_pay_time and son_deregister_time and son_down_time <son_heartbeat_frequency - Proposal failed, TEST PASSED 7. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_heartbeat_frequency < son_deregister_time and son_down_time, son_pay_time <son_heartbeat_frequency - Proposal failed, TEST PASSED 7. "son_pay_time", "son_deregister_time", and "son_heartbeat_frequency" where son_down_time, son_pay_time, son_deregister_time <son_heartbeat_frequency - Proposal failed, TEST PASSED Tried changing value for "gpos_period_start", "hbd_asset", "hive_asset", "son_account", "btc_asset" - Proposal didnt get approved, TEST PASSED propose_parameter_change 1.2.8 "2022-03-12T09:50:00" {"extensions":{"gpos_period_start": 1800, "hbd_asset":"1.3.5", "hive_asset":"1.3.6", "son_account": "1.2.14", "btc_asset": "1.3.0" }} true Tried changing value for "maximum_son_count" - Proposal approved, TEST PASSED ```
prandnum (Migrated from gitlab.com) closed this issue 2022-03-12 10:34:33 +00:00
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Peerplays_Blockchain/peerplays_migrated#149
No description provided.