Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

reconfiguration with dkg #10328

Closed
wants to merge 17 commits into from
Closed
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
225 changes: 225 additions & 0 deletions aptos-move/framework/aptos-framework/doc/stake.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,14 @@ or if their stake drops below the min required, they would get removed at the en
- [Struct `WithdrawStakeEvent`](#0x1_stake_WithdrawStakeEvent)
- [Struct `LeaveValidatorSetEvent`](#0x1_stake_LeaveValidatorSetEvent)
- [Resource `ValidatorFees`](#0x1_stake_ValidatorFees)
- [Resource `ValidatorSetChangeDisabled`](#0x1_stake_ValidatorSetChangeDisabled)
- [Resource `AllowedValidators`](#0x1_stake_AllowedValidators)
- [Resource `Ghost$ghost_valid_perf`](#0x1_stake_Ghost$ghost_valid_perf)
- [Resource `Ghost$ghost_proposer_idx`](#0x1_stake_Ghost$ghost_proposer_idx)
- [Constants](#@Constants_0)
- [Function `validator_set_change_enabled`](#0x1_stake_validator_set_change_enabled)
- [Function `disable_validator_set_changes`](#0x1_stake_disable_validator_set_changes)
- [Function `enable_validator_set_changes`](#0x1_stake_enable_validator_set_changes)
- [Function `initialize_validator_fees`](#0x1_stake_initialize_validator_fees)
- [Function `add_transaction_fee`](#0x1_stake_add_transaction_fee)
- [Function `get_lockup_secs`](#0x1_stake_get_lockup_secs)
Expand Down Expand Up @@ -82,6 +86,7 @@ or if their stake drops below the min required, they would get removed at the en
- [Function `reactivate_stake_with_cap`](#0x1_stake_reactivate_stake_with_cap)
- [Function `rotate_consensus_key`](#0x1_stake_rotate_consensus_key)
- [Function `update_network_and_fullnode_addresses`](#0x1_stake_update_network_and_fullnode_addresses)
- [Function `force_update_network_and_fullnode_addresses`](#0x1_stake_force_update_network_and_fullnode_addresses)
- [Function `increase_lockup`](#0x1_stake_increase_lockup)
- [Function `increase_lockup_with_cap`](#0x1_stake_increase_lockup_with_cap)
- [Function `join_validator_set`](#0x1_stake_join_validator_set)
Expand Down Expand Up @@ -1012,6 +1017,34 @@ at the end of the epoch.
</dl>


</details>

<a name="0x1_stake_ValidatorSetChangeDisabled"></a>

## Resource `ValidatorSetChangeDisabled`

A flag indicating that validator set changes should be rejected, if present under the system account.


<pre><code><b>struct</b> <a href="stake.md#0x1_stake_ValidatorSetChangeDisabled">ValidatorSetChangeDisabled</a> <b>has</b> drop, key
</code></pre>



<details>
<summary>Fields</summary>


<dl>
<dt>
<code>dummy_field: bool</code>
</dt>
<dd>

</dd>
</dl>


</details>

<a name="0x1_stake_AllowedValidators"></a>
Expand Down Expand Up @@ -1292,6 +1325,16 @@ Validator Config not published.



<a name="0x1_stake_EVALIDATOR_SET_CHANGES_DISABLED"></a>

TBD


<pre><code><b>const</b> <a href="stake.md#0x1_stake_EVALIDATOR_SET_CHANGES_DISABLED">EVALIDATOR_SET_CHANGES_DISABLED</a>: u64 = 19;
</code></pre>



<a name="0x1_stake_EVALIDATOR_SET_TOO_LARGE"></a>

Validator set exceeds the limit
Expand Down Expand Up @@ -1360,6 +1403,82 @@ Validator status enum. We can switch to proper enum later once Move supports it.



<a name="0x1_stake_validator_set_change_enabled"></a>

## Function `validator_set_change_enabled`



<pre><code><b>public</b> <b>fun</b> <a href="stake.md#0x1_stake_validator_set_change_enabled">validator_set_change_enabled</a>(): bool
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="stake.md#0x1_stake_validator_set_change_enabled">validator_set_change_enabled</a>(): bool {
!<b>exists</b>&lt;<a href="stake.md#0x1_stake_ValidatorSetChangeDisabled">ValidatorSetChangeDisabled</a>&gt;(@aptos_framework)
}
</code></pre>



</details>

<a name="0x1_stake_disable_validator_set_changes"></a>

## Function `disable_validator_set_changes`



<pre><code><b>public</b> <b>fun</b> <a href="stake.md#0x1_stake_disable_validator_set_changes">disable_validator_set_changes</a>(aptos_framework: &<a href="../../aptos-stdlib/../move-stdlib/doc/signer.md#0x1_signer">signer</a>)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="stake.md#0x1_stake_disable_validator_set_changes">disable_validator_set_changes</a>(aptos_framework: &<a href="../../aptos-stdlib/../move-stdlib/doc/signer.md#0x1_signer">signer</a>) {
<a href="system_addresses.md#0x1_system_addresses_assert_aptos_framework">system_addresses::assert_aptos_framework</a>(aptos_framework);
<b>assert</b>!(<a href="stake.md#0x1_stake_validator_set_change_enabled">validator_set_change_enabled</a>(), <a href="../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error_invalid_state">error::invalid_state</a>(<a href="stake.md#0x1_stake_EVALIDATOR_SET_CHANGES_DISABLED">EVALIDATOR_SET_CHANGES_DISABLED</a>));
<b>move_to</b>(aptos_framework, <a href="stake.md#0x1_stake_ValidatorSetChangeDisabled">ValidatorSetChangeDisabled</a> {} )
}
</code></pre>



</details>

<a name="0x1_stake_enable_validator_set_changes"></a>

## Function `enable_validator_set_changes`



<pre><code><b>public</b> <b>fun</b> <a href="stake.md#0x1_stake_enable_validator_set_changes">enable_validator_set_changes</a>(aptos_framework: &<a href="../../aptos-stdlib/../move-stdlib/doc/signer.md#0x1_signer">signer</a>)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="stake.md#0x1_stake_enable_validator_set_changes">enable_validator_set_changes</a>(aptos_framework: &<a href="../../aptos-stdlib/../move-stdlib/doc/signer.md#0x1_signer">signer</a>) <b>acquires</b> <a href="stake.md#0x1_stake_ValidatorSetChangeDisabled">ValidatorSetChangeDisabled</a> {
<a href="system_addresses.md#0x1_system_addresses_assert_aptos_framework">system_addresses::assert_aptos_framework</a>(aptos_framework);
<b>assert</b>!(!<a href="stake.md#0x1_stake_validator_set_change_enabled">validator_set_change_enabled</a>(), <a href="../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error_invalid_state">error::invalid_state</a>(<a href="stake.md#0x1_stake_EVALIDATOR_SET_CHANGES_DISABLED">EVALIDATOR_SET_CHANGES_DISABLED</a>));
<b>move_from</b>&lt;<a href="stake.md#0x1_stake_ValidatorSetChangeDisabled">ValidatorSetChangeDisabled</a>&gt;(@aptos_framework);
}
</code></pre>



</details>

<a name="0x1_stake_initialize_validator_fees"></a>

## Function `initialize_validator_fees`
Expand Down Expand Up @@ -1861,6 +1980,7 @@ Allow on chain governance to remove validators from the validator set.
validators: &<a href="../../aptos-stdlib/../move-stdlib/doc/vector.md#0x1_vector">vector</a>&lt;<b>address</b>&gt;,
) <b>acquires</b> <a href="stake.md#0x1_stake_ValidatorSet">ValidatorSet</a> {
<a href="system_addresses.md#0x1_system_addresses_assert_aptos_framework">system_addresses::assert_aptos_framework</a>(aptos_framework);
<b>assert</b>!(<a href="stake.md#0x1_stake_validator_set_change_enabled">validator_set_change_enabled</a>(), <a href="../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error_invalid_state">error::invalid_state</a>(<a href="stake.md#0x1_stake_EVALIDATOR_SET_CHANGES_DISABLED">EVALIDATOR_SET_CHANGES_DISABLED</a>));

<b>let</b> validator_set = <b>borrow_global_mut</b>&lt;<a href="stake.md#0x1_stake_ValidatorSet">ValidatorSet</a>&gt;(@aptos_framework);
<b>let</b> active_validators = &<b>mut</b> validator_set.active_validators;
Expand Down Expand Up @@ -2287,6 +2407,7 @@ Add <code>coins</code> into <code>pool_address</code>. this requires the corresp
<pre><code><b>public</b> <b>fun</b> <a href="stake.md#0x1_stake_add_stake_with_cap">add_stake_with_cap</a>(owner_cap: &<a href="stake.md#0x1_stake_OwnerCapability">OwnerCapability</a>, coins: Coin&lt;AptosCoin&gt;) <b>acquires</b> <a href="stake.md#0x1_stake_StakePool">StakePool</a>, <a href="stake.md#0x1_stake_ValidatorSet">ValidatorSet</a> {
<b>let</b> pool_address = owner_cap.pool_address;
<a href="stake.md#0x1_stake_assert_stake_pool_exists">assert_stake_pool_exists</a>(pool_address);
<b>assert</b>!(<a href="stake.md#0x1_stake_validator_set_change_enabled">validator_set_change_enabled</a>(), <a href="../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error_invalid_state">error::invalid_state</a>(<a href="stake.md#0x1_stake_EVALIDATOR_SET_CHANGES_DISABLED">EVALIDATOR_SET_CHANGES_DISABLED</a>));

<b>let</b> amount = <a href="coin.md#0x1_coin_value">coin::value</a>(&coins);
<b>if</b> (amount == 0) {
Expand Down Expand Up @@ -2426,6 +2547,7 @@ Rotate the consensus key of the validator, it'll take effect in next epoch.
proof_of_possession: <a href="../../aptos-stdlib/../move-stdlib/doc/vector.md#0x1_vector">vector</a>&lt;u8&gt;,
) <b>acquires</b> <a href="stake.md#0x1_stake_StakePool">StakePool</a>, <a href="stake.md#0x1_stake_ValidatorConfig">ValidatorConfig</a> {
<a href="stake.md#0x1_stake_assert_stake_pool_exists">assert_stake_pool_exists</a>(pool_address);
<b>assert</b>!(<a href="stake.md#0x1_stake_validator_set_change_enabled">validator_set_change_enabled</a>(), <a href="../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error_invalid_state">error::invalid_state</a>(<a href="stake.md#0x1_stake_EVALIDATOR_SET_CHANGES_DISABLED">EVALIDATOR_SET_CHANGES_DISABLED</a>));
<b>let</b> stake_pool = <b>borrow_global_mut</b>&lt;<a href="stake.md#0x1_stake_StakePool">StakePool</a>&gt;(pool_address);
<b>assert</b>!(<a href="../../aptos-stdlib/../move-stdlib/doc/signer.md#0x1_signer_address_of">signer::address_of</a>(operator) == stake_pool.operator_address, <a href="../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error_unauthenticated">error::unauthenticated</a>(<a href="stake.md#0x1_stake_ENOT_OPERATOR">ENOT_OPERATOR</a>));

Expand Down Expand Up @@ -2476,6 +2598,36 @@ Update the network and full node addresses of the validator. This only takes eff
pool_address: <b>address</b>,
new_network_addresses: <a href="../../aptos-stdlib/../move-stdlib/doc/vector.md#0x1_vector">vector</a>&lt;u8&gt;,
new_fullnode_addresses: <a href="../../aptos-stdlib/../move-stdlib/doc/vector.md#0x1_vector">vector</a>&lt;u8&gt;,
) <b>acquires</b> <a href="stake.md#0x1_stake_StakePool">StakePool</a>, <a href="stake.md#0x1_stake_ValidatorConfig">ValidatorConfig</a> {
<b>assert</b>!(<a href="stake.md#0x1_stake_validator_set_change_enabled">validator_set_change_enabled</a>(), <a href="../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error_invalid_state">error::invalid_state</a>(<a href="stake.md#0x1_stake_EVALIDATOR_SET_CHANGES_DISABLED">EVALIDATOR_SET_CHANGES_DISABLED</a>));
<a href="stake.md#0x1_stake_force_update_network_and_fullnode_addresses">force_update_network_and_fullnode_addresses</a>(operator, pool_address, new_network_addresses, new_fullnode_addresses);
}
</code></pre>



</details>

<a name="0x1_stake_force_update_network_and_fullnode_addresses"></a>

## Function `force_update_network_and_fullnode_addresses`



<pre><code><b>public</b>(<b>friend</b>) <b>fun</b> <a href="stake.md#0x1_stake_force_update_network_and_fullnode_addresses">force_update_network_and_fullnode_addresses</a>(operator: &<a href="../../aptos-stdlib/../move-stdlib/doc/signer.md#0x1_signer">signer</a>, pool_address: <b>address</b>, new_network_addresses: <a href="../../aptos-stdlib/../move-stdlib/doc/vector.md#0x1_vector">vector</a>&lt;u8&gt;, new_fullnode_addresses: <a href="../../aptos-stdlib/../move-stdlib/doc/vector.md#0x1_vector">vector</a>&lt;u8&gt;)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b>(<b>friend</b>) <b>fun</b> <a href="stake.md#0x1_stake_force_update_network_and_fullnode_addresses">force_update_network_and_fullnode_addresses</a>(
operator: &<a href="../../aptos-stdlib/../move-stdlib/doc/signer.md#0x1_signer">signer</a>,
pool_address: <b>address</b>,
new_network_addresses: <a href="../../aptos-stdlib/../move-stdlib/doc/vector.md#0x1_vector">vector</a>&lt;u8&gt;,
new_fullnode_addresses: <a href="../../aptos-stdlib/../move-stdlib/doc/vector.md#0x1_vector">vector</a>&lt;u8&gt;,
) <b>acquires</b> <a href="stake.md#0x1_stake_StakePool">StakePool</a>, <a href="stake.md#0x1_stake_ValidatorConfig">ValidatorConfig</a> {
<a href="stake.md#0x1_stake_assert_stake_pool_exists">assert_stake_pool_exists</a>(pool_address);
<b>let</b> stake_pool = <b>borrow_global_mut</b>&lt;<a href="stake.md#0x1_stake_StakePool">StakePool</a>&gt;(pool_address);
Expand Down Expand Up @@ -2634,6 +2786,7 @@ This internal version can only be called by the Genesis module during Genesis.
operator: &<a href="../../aptos-stdlib/../move-stdlib/doc/signer.md#0x1_signer">signer</a>,
pool_address: <b>address</b>
) <b>acquires</b> <a href="stake.md#0x1_stake_StakePool">StakePool</a>, <a href="stake.md#0x1_stake_ValidatorConfig">ValidatorConfig</a>, <a href="stake.md#0x1_stake_ValidatorSet">ValidatorSet</a> {
<b>assert</b>!(<a href="stake.md#0x1_stake_validator_set_change_enabled">validator_set_change_enabled</a>(), <a href="../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error_invalid_state">error::invalid_state</a>(<a href="stake.md#0x1_stake_EVALIDATOR_SET_CHANGES_DISABLED">EVALIDATOR_SET_CHANGES_DISABLED</a>));
<a href="stake.md#0x1_stake_assert_stake_pool_exists">assert_stake_pool_exists</a>(pool_address);
<b>let</b> stake_pool = <b>borrow_global_mut</b>&lt;<a href="stake.md#0x1_stake_StakePool">StakePool</a>&gt;(pool_address);
<b>assert</b>!(<a href="../../aptos-stdlib/../move-stdlib/doc/signer.md#0x1_signer_address_of">signer::address_of</a>(operator) == stake_pool.operator_address, <a href="../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error_unauthenticated">error::unauthenticated</a>(<a href="stake.md#0x1_stake_ENOT_OPERATOR">ENOT_OPERATOR</a>));
Expand Down Expand Up @@ -2798,6 +2951,7 @@ Withdraw from <code>pool_address</code>'s inactive stake with the corresponding
owner_cap: &<a href="stake.md#0x1_stake_OwnerCapability">OwnerCapability</a>,
withdraw_amount: u64
): Coin&lt;AptosCoin&gt; <b>acquires</b> <a href="stake.md#0x1_stake_StakePool">StakePool</a>, <a href="stake.md#0x1_stake_ValidatorSet">ValidatorSet</a> {
<b>assert</b>!(<a href="stake.md#0x1_stake_validator_set_change_enabled">validator_set_change_enabled</a>(), <a href="../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error_invalid_state">error::invalid_state</a>(<a href="stake.md#0x1_stake_EVALIDATOR_SET_CHANGES_DISABLED">EVALIDATOR_SET_CHANGES_DISABLED</a>));
<b>let</b> pool_address = owner_cap.pool_address;
<a href="stake.md#0x1_stake_assert_stake_pool_exists">assert_stake_pool_exists</a>(pool_address);
<b>let</b> stake_pool = <b>borrow_global_mut</b>&lt;<a href="stake.md#0x1_stake_StakePool">StakePool</a>&gt;(pool_address);
Expand Down Expand Up @@ -2860,6 +3014,7 @@ Can only be called by the operator of the validator/staking pool.
<a href="staking_config.md#0x1_staking_config_get_allow_validator_set_change">staking_config::get_allow_validator_set_change</a>(&config),
<a href="../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error_invalid_argument">error::invalid_argument</a>(<a href="stake.md#0x1_stake_ENO_POST_GENESIS_VALIDATOR_SET_CHANGE_ALLOWED">ENO_POST_GENESIS_VALIDATOR_SET_CHANGE_ALLOWED</a>),
);
<b>assert</b>!(<a href="stake.md#0x1_stake_validator_set_change_enabled">validator_set_change_enabled</a>(), <a href="../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error_invalid_state">error::invalid_state</a>(<a href="stake.md#0x1_stake_EVALIDATOR_SET_CHANGES_DISABLED">EVALIDATOR_SET_CHANGES_DISABLED</a>));

<a href="stake.md#0x1_stake_assert_stake_pool_exists">assert_stake_pool_exists</a>(pool_address);
<b>let</b> stake_pool = <b>borrow_global_mut</b>&lt;<a href="stake.md#0x1_stake_StakePool">StakePool</a>&gt;(pool_address);
Expand Down Expand Up @@ -4533,4 +4688,74 @@ Returns validator's next epoch voting power, including pending_active, active, a
</code></pre>




<a name="0x1_stake_ResourceRequirement"></a>


<pre><code><b>schema</b> <a href="stake.md#0x1_stake_ResourceRequirement">ResourceRequirement</a> {
<b>requires</b> <b>exists</b>&lt;<a href="stake.md#0x1_stake_AptosCoinCapabilities">AptosCoinCapabilities</a>&gt;(@aptos_framework);
<b>requires</b> <b>exists</b>&lt;<a href="stake.md#0x1_stake_ValidatorPerformance">ValidatorPerformance</a>&gt;(@aptos_framework);
<b>requires</b> <b>exists</b>&lt;<a href="stake.md#0x1_stake_ValidatorSet">ValidatorSet</a>&gt;(@aptos_framework);
<b>requires</b> <b>exists</b>&lt;StakingConfig&gt;(@aptos_framework);
<b>requires</b> <b>exists</b>&lt;StakingRewardsConfig&gt;(@aptos_framework) || !<a href="../../aptos-stdlib/../move-stdlib/doc/features.md#0x1_features_spec_periodical_reward_rate_decrease_enabled">features::spec_periodical_reward_rate_decrease_enabled</a>();
<b>requires</b> <b>exists</b>&lt;<a href="timestamp.md#0x1_timestamp_CurrentTimeMicroseconds">timestamp::CurrentTimeMicroseconds</a>&gt;(@aptos_framework);
<b>requires</b> <b>exists</b>&lt;<a href="stake.md#0x1_stake_ValidatorFees">ValidatorFees</a>&gt;(@aptos_framework);
}
</code></pre>




<a name="0x1_stake_spec_get_reward_rate_1"></a>


<pre><code><b>fun</b> <a href="stake.md#0x1_stake_spec_get_reward_rate_1">spec_get_reward_rate_1</a>(config: StakingConfig): num {
<b>if</b> (<a href="../../aptos-stdlib/../move-stdlib/doc/features.md#0x1_features_spec_periodical_reward_rate_decrease_enabled">features::spec_periodical_reward_rate_decrease_enabled</a>()) {
<b>let</b> epoch_rewards_rate = <b>global</b>&lt;<a href="staking_config.md#0x1_staking_config_StakingRewardsConfig">staking_config::StakingRewardsConfig</a>&gt;(@aptos_framework).rewards_rate;
<b>if</b> (epoch_rewards_rate.value == 0) {
0
} <b>else</b> {
<b>let</b> denominator_0 = aptos_std::fixed_point64::spec_divide_u128(<a href="staking_config.md#0x1_staking_config_MAX_REWARDS_RATE">staking_config::MAX_REWARDS_RATE</a>, epoch_rewards_rate);
<b>let</b> denominator = <b>if</b> (denominator_0 &gt; <a href="stake.md#0x1_stake_MAX_U64">MAX_U64</a>) {
<a href="stake.md#0x1_stake_MAX_U64">MAX_U64</a>
} <b>else</b> {
denominator_0
};
<b>let</b> nominator = aptos_std::fixed_point64::spec_multiply_u128(denominator, epoch_rewards_rate);
nominator
}
} <b>else</b> {
config.rewards_rate
}
}
</code></pre>




<a name="0x1_stake_spec_get_reward_rate_2"></a>


<pre><code><b>fun</b> <a href="stake.md#0x1_stake_spec_get_reward_rate_2">spec_get_reward_rate_2</a>(config: StakingConfig): num {
<b>if</b> (<a href="../../aptos-stdlib/../move-stdlib/doc/features.md#0x1_features_spec_periodical_reward_rate_decrease_enabled">features::spec_periodical_reward_rate_decrease_enabled</a>()) {
<b>let</b> epoch_rewards_rate = <b>global</b>&lt;<a href="staking_config.md#0x1_staking_config_StakingRewardsConfig">staking_config::StakingRewardsConfig</a>&gt;(@aptos_framework).rewards_rate;
<b>if</b> (epoch_rewards_rate.value == 0) {
1
} <b>else</b> {
<b>let</b> denominator_0 = aptos_std::fixed_point64::spec_divide_u128(<a href="staking_config.md#0x1_staking_config_MAX_REWARDS_RATE">staking_config::MAX_REWARDS_RATE</a>, epoch_rewards_rate);
<b>let</b> denominator = <b>if</b> (denominator_0 &gt; <a href="stake.md#0x1_stake_MAX_U64">MAX_U64</a>) {
<a href="stake.md#0x1_stake_MAX_U64">MAX_U64</a>
} <b>else</b> {
denominator_0
};
denominator
}
} <b>else</b> {
config.rewards_rate_denominator
}
}
</code></pre>


[move-book]: https://aptos.dev/move/book/SUMMARY
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ module aptos_framework::genesis {
validator.consensus_pubkey,
validator.proof_of_possession,
);
stake::update_network_and_fullnode_addresses(
stake::force_update_network_and_fullnode_addresses(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need this for genesis?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

some smoke tests set this flag (disable validator set change) which made genesis failed...

operator,
pool_address,
validator.network_addresses,
Expand Down
Loading
Loading