supermajority is one word
This commit is contained in:
parent
c4220a4853
commit
47dd293904
|
@ -52,5 +52,5 @@ Solana's trustless sense of time and ordering provided by its PoH data structure
|
||||||
|
|
||||||
As discussed in the [Economic Design](../implemented-proposals/ed_overview/) section, annual validator interest rates are to be specified as a function of total percentage of circulating supply that has been staked. The cluster rewards validators who are online and actively participating in the validation process throughout the entirety of their _validation period_. For validators that go offline/fail to validate transactions during this period, their annual reward is effectively reduced.
|
As discussed in the [Economic Design](../implemented-proposals/ed_overview/) section, annual validator interest rates are to be specified as a function of total percentage of circulating supply that has been staked. The cluster rewards validators who are online and actively participating in the validation process throughout the entirety of their _validation period_. For validators that go offline/fail to validate transactions during this period, their annual reward is effectively reduced.
|
||||||
|
|
||||||
Similarly, we may consider an algorithmic reduction in a validator's active amount staked amount in the case that they are offline. I.e. if a validator is inactive for some amount of time, either due to a partition or otherwise, the amount of their stake that is considered ‘active’ \(eligible to earn rewards\) may be reduced. This design would be structured to help long-lived partitions to eventually reach finality on their respective chains as the % of non-voting total stake is reduced over time until a super-majority can be achieved by the active validators in each partition. Similarly, upon re-engaging, the ‘active’ amount staked will come back online at some defined rate. Different rates of stake reduction may be considered depending on the size of the partition/active set.
|
Similarly, we may consider an algorithmic reduction in a validator's active amount staked amount in the case that they are offline. I.e. if a validator is inactive for some amount of time, either due to a partition or otherwise, the amount of their stake that is considered ‘active’ \(eligible to earn rewards\) may be reduced. This design would be structured to help long-lived partitions to eventually reach finality on their respective chains as the % of non-voting total stake is reduced over time until a supermajority can be achieved by the active validators in each partition. Similarly, upon re-engaging, the ‘active’ amount staked will come back online at some defined rate. Different rates of stake reduction may be considered depending on the size of the partition/active set.
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
This design describes Solana's _Tower BFT_ algorithm. It addresses the following problems:
|
This design describes Solana's _Tower BFT_ algorithm. It addresses the following problems:
|
||||||
|
|
||||||
* Some forks may not end up accepted by the super-majority of the cluster, and voters need to recover from voting on such forks.
|
* Some forks may not end up accepted by the supermajority of the cluster, and voters need to recover from voting on such forks.
|
||||||
* Many forks may be votable by different voters, and each voter may see a different set of votable forks. The selected forks should eventually converge for the cluster.
|
* Many forks may be votable by different voters, and each voter may see a different set of votable forks. The selected forks should eventually converge for the cluster.
|
||||||
* Reward based votes have an associated risk. Voters should have the ability to configure how much risk they take on.
|
* Reward based votes have an associated risk. Voters should have the ability to configure how much risk they take on.
|
||||||
* The [cost of rollback](tower-bft.md#cost-of-rollback) needs to be computable. It is important to clients that rely on some measurable form of Consistency. The costs to break consistency need to be computable, and increase super-linearly for older votes.
|
* The [cost of rollback](tower-bft.md#cost-of-rollback) needs to be computable. It is important to clients that rely on some measurable form of Consistency. The costs to break consistency need to be computable, and increase super-linearly for older votes.
|
||||||
|
|
|
@ -68,7 +68,7 @@ pub struct ValidatorConfig {
|
||||||
pub broadcast_stage_type: BroadcastStageType,
|
pub broadcast_stage_type: BroadcastStageType,
|
||||||
pub partition_cfg: Option<PartitionCfg>,
|
pub partition_cfg: Option<PartitionCfg>,
|
||||||
pub fixed_leader_schedule: Option<FixedSchedule>,
|
pub fixed_leader_schedule: Option<FixedSchedule>,
|
||||||
pub wait_for_super_majority: bool,
|
pub wait_for_supermajority: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for ValidatorConfig {
|
impl Default for ValidatorConfig {
|
||||||
|
@ -88,7 +88,7 @@ impl Default for ValidatorConfig {
|
||||||
broadcast_stage_type: BroadcastStageType::Standard,
|
broadcast_stage_type: BroadcastStageType::Standard,
|
||||||
partition_cfg: None,
|
partition_cfg: None,
|
||||||
fixed_leader_schedule: None,
|
fixed_leader_schedule: None,
|
||||||
wait_for_super_majority: false,
|
wait_for_supermajority: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -297,7 +297,7 @@ impl Validator {
|
||||||
.set_entrypoint(entrypoint_info.clone());
|
.set_entrypoint(entrypoint_info.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.wait_for_super_majority {
|
if config.wait_for_supermajority {
|
||||||
info!(
|
info!(
|
||||||
"Waiting more than 66% of activated stake at slot {} to be in gossip...",
|
"Waiting more than 66% of activated stake at slot {} to be in gossip...",
|
||||||
bank.slot()
|
bank.slot()
|
||||||
|
|
|
@ -538,10 +538,10 @@ pub fn main() {
|
||||||
.help("Redirect logging to the specified file, '-' for standard error"),
|
.help("Redirect logging to the specified file, '-' for standard error"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name("wait_for_super_majority")
|
Arg::with_name("wait_for_supermajority")
|
||||||
.long("wait-for-super-majority")
|
.long("wait-for-supermajority")
|
||||||
.takes_value(false)
|
.takes_value(false)
|
||||||
.help("After processing the ledger, wait until a super majority of stake is visible on gossip before starting PoH"),
|
.help("After processing the ledger, wait until a supermajority of stake is visible on gossip before starting PoH"),
|
||||||
)
|
)
|
||||||
.get_matches();
|
.get_matches();
|
||||||
|
|
||||||
|
@ -588,7 +588,7 @@ pub fn main() {
|
||||||
validator_config.dev_halt_at_slot = value_t!(matches, "dev_halt_at_slot", Slot).ok();
|
validator_config.dev_halt_at_slot = value_t!(matches, "dev_halt_at_slot", Slot).ok();
|
||||||
|
|
||||||
validator_config.rpc_config.enable_validator_exit = matches.is_present("enable_rpc_exit");
|
validator_config.rpc_config.enable_validator_exit = matches.is_present("enable_rpc_exit");
|
||||||
validator_config.wait_for_super_majority = matches.is_present("wait_for_super_majority");
|
validator_config.wait_for_supermajority = matches.is_present("wait_for_supermajority");
|
||||||
|
|
||||||
validator_config.rpc_config.faucet_addr = matches.value_of("rpc_faucet_addr").map(|address| {
|
validator_config.rpc_config.faucet_addr = matches.value_of("rpc_faucet_addr").map(|address| {
|
||||||
solana_net_utils::parse_host_port(address).expect("failed to parse faucet address")
|
solana_net_utils::parse_host_port(address).expect("failed to parse faucet address")
|
||||||
|
|
Loading…
Reference in New Issue