From daefbfef80161c191014829c994d6eb4215b4069 Mon Sep 17 00:00:00 2001 From: Nikolay Kurtov Date: Mon, 16 Oct 2023 16:04:47 +0200 Subject: [PATCH 1/6] fix(protocol-config-rpc): Fix --- Cargo.lock | 11 +---------- nearcore/src/runtime/mod.rs | 32 +++++++++++++++++++++++++------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 42702ad5ce9..14e347e3f9b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -847,7 +847,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35b4db62e0515621636e47f425d78a40bdea94c2d23713428fb12194cf5459a4" dependencies = [ "once_cell", - "proc-macro-crate 1.3.0", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 2.0.15", @@ -4721,15 +4721,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "nom8" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae01545c9c7fc4486ab7debaf2aad7003ac19431791868fb2e8066df97fad2f8" -dependencies = [ - "memchr", -] - [[package]] name = "ntapi" version = "0.3.7" diff --git a/nearcore/src/runtime/mod.rs b/nearcore/src/runtime/mod.rs index ef32a80b603..49da4960a26 100644 --- a/nearcore/src/runtime/mod.rs +++ b/nearcore/src/runtime/mod.rs @@ -1174,15 +1174,33 @@ impl RuntimeAdapter for NightshadeRuntime { let protocol_version = self.epoch_manager.get_epoch_protocol_version(epoch_id)?; let mut genesis_config = self.genesis_config.clone(); genesis_config.protocol_version = protocol_version; - let shard_config = { - let epoch_manager = self.epoch_manager.read(); - epoch_manager.get_shard_config(epoch_id)? - }; + + let epoch_config = self.epoch_manager.get_epoch_config(epoch_id)?; + genesis_config.epoch_length = epoch_config.epoch_length; + genesis_config.num_block_producer_seats = epoch_config.num_block_producer_seats; genesis_config.num_block_producer_seats_per_shard = - shard_config.num_block_producer_seats_per_shard; + epoch_config.num_block_producer_seats_per_shard; genesis_config.avg_hidden_validator_seats_per_shard = - shard_config.avg_hidden_validator_seats_per_shard; - genesis_config.shard_layout = shard_config.shard_layout; + epoch_config.avg_hidden_validator_seats_per_shard; + genesis_config.block_producer_kickout_threshold = + epoch_config.block_producer_kickout_threshold; + genesis_config.chunk_producer_kickout_threshold = + epoch_config.chunk_producer_kickout_threshold; + genesis_config.max_kickout_stake_perc = epoch_config.validator_max_kickout_stake_perc; + genesis_config.online_min_threshold = epoch_config.online_min_threshold; + genesis_config.online_max_threshold = epoch_config.online_max_threshold; + genesis_config.fishermen_threshold = epoch_config.fishermen_threshold; + genesis_config.minimum_stake_divisor = epoch_config.minimum_stake_divisor; + genesis_config.protocol_upgrade_stake_threshold = + epoch_config.protocol_upgrade_stake_threshold; + genesis_config.shard_layout = epoch_config.shard_layout; + genesis_config.num_chunk_only_producer_seats = + epoch_config.validator_selection_config.num_chunk_only_producer_seats; + genesis_config.minimum_validators_per_shard = + epoch_config.validator_selection_config.minimum_validators_per_shard; + genesis_config.minimum_stake_ratio = + epoch_config.validator_selection_config.minimum_stake_ratio; + let runtime_config = self.runtime_config_store.get_config(protocol_version).as_ref().clone(); Ok(ProtocolConfig { genesis_config, runtime_config }) From 58896ad3cc73c5d31a8452d7b1114a41cd0cb8db Mon Sep 17 00:00:00 2001 From: Nikolay Kurtov Date: Mon, 16 Oct 2023 16:39:35 +0200 Subject: [PATCH 2/6] Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a9c5f2439c..4d0364b9df2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ * The default config now enables TIER1 outbound connections by default. [#9349](https://github.com/near/nearcore/pull/9349) * State Sync from GCS is available for experimental use. [#9398](https://github.com/near/nearcore/pull/9398) * Add prometheus metrics for the internal state of the doomslug. [#9458](https://github.com/near/nearcore/pull/9458) +* Fix `EXPERIMENTAL_protocol_config` to apply overrides from `EpochConfig`. [#9692](https://github.com/near/nearcore/pull/9692) ## 1.35.0 From 8a2072317d2812100dfee43a3731a91fac381613 Mon Sep 17 00:00:00 2001 From: Simonas Kazlauskas Date: Tue, 17 Oct 2023 07:09:16 +0000 Subject: [PATCH 3/6] runtime: "normalize" VMKind as soon as it is parsed (#9691) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit People with M1 Macs run the neard node too, not just the test suites. Unfortunately a proper regression test for this is not obvious… I’ll think about it. (Possibly) Fixes #9665 --- core/primitives/src/runtime/config.rs | 4 +--- core/primitives/src/runtime/parameter_table.rs | 7 ++++--- runtime/near-vm-runner/src/tests.rs | 2 +- runtime/near-vm-runner/src/vm_kind.rs | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/core/primitives/src/runtime/config.rs b/core/primitives/src/runtime/config.rs index 746d17515a1..81bcebe4bf0 100644 --- a/core/primitives/src/runtime/config.rs +++ b/core/primitives/src/runtime/config.rs @@ -39,10 +39,9 @@ impl RuntimeConfig { pub fn test() -> Self { let config_store = super::config_store::RuntimeConfigStore::new(None); - let mut wasm_config = near_vm_runner::logic::Config::clone( + let wasm_config = near_vm_runner::logic::Config::clone( &config_store.get_config(PROTOCOL_VERSION).wasm_config, ); - wasm_config.vm_kind = wasm_config.vm_kind.normalize(); RuntimeConfig { fees: RuntimeFeesConfig::test(), wasm_config, @@ -55,7 +54,6 @@ impl RuntimeConfig { let mut wasm_config = near_vm_runner::logic::Config::clone( &config_store.get_config(PROTOCOL_VERSION).wasm_config, ); - wasm_config.vm_kind = wasm_config.vm_kind.normalize(); wasm_config.make_free(); Self { fees: RuntimeFeesConfig::free(), diff --git a/core/primitives/src/runtime/parameter_table.rs b/core/primitives/src/runtime/parameter_table.rs index ca6724428df..d107badd176 100644 --- a/core/primitives/src/runtime/parameter_table.rs +++ b/core/primitives/src/runtime/parameter_table.rs @@ -170,9 +170,10 @@ impl TryFrom<&ParameterValue> for VMKind { fn try_from(value: &ParameterValue) -> Result { match value { - ParameterValue::String(v) => { - v.parse().map_err(|e| ValueConversionError::ParseVmKind(e, value.to_string())) - } + ParameterValue::String(v) => v + .parse() + .map(|v: VMKind| v.replace_with_wasmtime_if_unsupported()) + .map_err(|e| ValueConversionError::ParseVmKind(e, value.to_string())), _ => { Err(ValueConversionError::ParseType(std::any::type_name::(), value.clone())) } diff --git a/runtime/near-vm-runner/src/tests.rs b/runtime/near-vm-runner/src/tests.rs index 25121c587fe..346143d9ad9 100644 --- a/runtime/near-vm-runner/src/tests.rs +++ b/runtime/near-vm-runner/src/tests.rs @@ -36,7 +36,7 @@ impl crate::logic::Config { ExtVMKind::NearVm => VMKind::NearVm, ExtVMKind::Wasmtime => VMKind::Wasmtime, } - .normalize(), + .replace_with_wasmtime_if_unsupported(), disable_9393_fix: config.disable_9393_fix, storage_get_mode: match config.storage_get_mode { ExtStorageGetMode::Trie => StorageGetMode::Trie, diff --git a/runtime/near-vm-runner/src/vm_kind.rs b/runtime/near-vm-runner/src/vm_kind.rs index d66f87438f0..a472b7e67cb 100644 --- a/runtime/near-vm-runner/src/vm_kind.rs +++ b/runtime/near-vm-runner/src/vm_kind.rs @@ -32,7 +32,7 @@ pub enum VMKind { } impl VMKind { - pub fn normalize(self) -> Self { + pub fn replace_with_wasmtime_if_unsupported(self) -> Self { if cfg!(not(target_arch = "x86_64")) { Self::Wasmtime } else { From 55786e9e6f6aca0ec0863c98771171806bb72763 Mon Sep 17 00:00:00 2001 From: Nikolay Kurtov Date: Tue, 17 Oct 2023 12:04:51 +0200 Subject: [PATCH 4/6] Add fields to ProtocolConfigView --- core/chain-configs/src/genesis_config.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/chain-configs/src/genesis_config.rs b/core/chain-configs/src/genesis_config.rs index 247fd86c18d..f50deba1c9d 100644 --- a/core/chain-configs/src/genesis_config.rs +++ b/core/chain-configs/src/genesis_config.rs @@ -781,6 +781,11 @@ pub struct ProtocolConfigView { pub fishermen_threshold: Balance, /// The minimum stake required for staking is last seat price divided by this number. pub minimum_stake_divisor: u64, + pub max_kickout_stake_perc: u8, + pub minimum_stake_ratio: Rational32, + pub minimum_validators_per_shard: NumSeats, + pub num_chunk_only_producer_seats: NumSeats, + pub shard_layout: ShardLayout, } pub struct ProtocolConfig { @@ -820,6 +825,11 @@ impl From for ProtocolConfigView { protocol_treasury_account: genesis_config.protocol_treasury_account, fishermen_threshold: genesis_config.fishermen_threshold, minimum_stake_divisor: genesis_config.minimum_stake_divisor, + max_kickout_stake_perc: genesis_config.max_kickout_stake_perc, + minimum_stake_ratio: genesis_config.minimum_stake_ratio, + minimum_validators_per_shard: genesis_config.minimum_validators_per_shard, + num_chunk_only_producer_seats: genesis_config.num_chunk_only_producer_seats, + shard_layout: genesis_config.shard_layout, } } } From 95d28a61b22d7ce99381a3b9579d9e746cc7114a Mon Sep 17 00:00:00 2001 From: Nikolay Kurtov Date: Tue, 17 Oct 2023 14:10:36 +0200 Subject: [PATCH 5/6] Comments --- core/chain-configs/src/genesis_config.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/chain-configs/src/genesis_config.rs b/core/chain-configs/src/genesis_config.rs index f50deba1c9d..044b9ee852c 100644 --- a/core/chain-configs/src/genesis_config.rs +++ b/core/chain-configs/src/genesis_config.rs @@ -781,10 +781,16 @@ pub struct ProtocolConfigView { pub fishermen_threshold: Balance, /// The minimum stake required for staking is last seat price divided by this number. pub minimum_stake_divisor: u64, + /// Max stake percentage of the validators we will kick out. pub max_kickout_stake_perc: u8, + /// The lowest ratio s/s_total any block producer can have. + /// See for details pub minimum_stake_ratio: Rational32, + /// The minimum number of validators each shard must have pub minimum_validators_per_shard: NumSeats, + /// Number of validator seats for chunk only producers. pub num_chunk_only_producer_seats: NumSeats, + /// Layout information regarding how to split accounts to shards pub shard_layout: ShardLayout, } From e3ea9eead7f2d328c368b8966b8e2f5f8730d28f Mon Sep 17 00:00:00 2001 From: Nikolay Kurtov Date: Tue, 17 Oct 2023 15:28:36 +0200 Subject: [PATCH 6/6] TODO --- core/chain-configs/src/genesis_config.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/chain-configs/src/genesis_config.rs b/core/chain-configs/src/genesis_config.rs index 044b9ee852c..09980702407 100644 --- a/core/chain-configs/src/genesis_config.rs +++ b/core/chain-configs/src/genesis_config.rs @@ -723,6 +723,9 @@ impl GenesisChangeConfig { // Ideally we should create `RuntimeConfigView`, but given the deeply nested nature and the number of fields inside // `RuntimeConfig`, it should be its own endeavor. // TODO: This has changed, there is now `RuntimeConfigView`. Reconsider if moving this is possible now. +// TODO: Consider replacing tens of fields with a combination of `GenesisConfig` +// and `EpochConfig` fields, similar to how `RuntimeConfig` is represented as a +// separate struct and not inlined. #[derive(serde::Serialize, serde::Deserialize, Debug)] pub struct ProtocolConfigView { /// Current Protocol Version