mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-31 06:21:02 +00:00
past-session validator discovery APIs (#2009)
* guide: fix formatting for SessionInfo module * primitives: SessionInfo type * punt on approval keys * ah, revert the type alias * session info runtime module skeleton * update the guide * runtime/configuration: sync with the guide * runtime/configuration: setters for newly added fields * runtime/configuration: set codec indexes * runtime/configuration: update test * primitives: fix SessionInfo definition * runtime/session_info: initial impl * runtime/session_info: use initializer for session handling (wip) * runtime/session_info: mock authority discovery trait * guide: update the initializer's order * runtime/session_info: tests skeleton * runtime/session_info: store n_delay_tranches in Configuration * runtime/session_info: punt on approval keys * runtime/session_info: add some basic tests * Update primitives/src/v1.rs * small fixes * remove codec index annotation on structs * fix off-by-one error * validator_discovery: accept a session index * runtime: replace validator_discovery api with session_info * Update runtime/parachains/src/session_info.rs Co-authored-by: Sergei Shulepov <sergei@parity.io> * runtime/session_info: add a comment about missing entries * runtime/session_info: define the keys * util: expose connect_to_past_session_validators * util: allow session_info requests for jobs * runtime-api: add mock test for session_info * collator-protocol: add session_index to test state * util: fix error message for runtime error * fix compilation * fix tests after merge with master Co-authored-by: Sergei Shulepov <sergei@parity.io>
This commit is contained in:
@@ -23,7 +23,7 @@ The other parachains modules are initialized in this order:
|
||||
1. Paras
|
||||
1. Scheduler
|
||||
1. Inclusion
|
||||
1. Validity
|
||||
1. SessionInfo
|
||||
1. DMP
|
||||
1. UMP
|
||||
1. HRMP
|
||||
|
||||
@@ -30,11 +30,11 @@ struct SessionInfo {
|
||||
// no-show.
|
||||
no_show_slots: u32,
|
||||
/// The number of validators needed to approve a block.
|
||||
needed_approvals: u32,
|
||||
needed_approvals: u32,
|
||||
}
|
||||
```
|
||||
|
||||
Storage Layout:
|
||||
Storage Layout:
|
||||
|
||||
```rust
|
||||
/// The earliest session for which previous session info is stored.
|
||||
@@ -45,11 +45,10 @@ Sessions: map SessionIndex => Option<SessionInfo>,
|
||||
|
||||
## Session Change
|
||||
|
||||
1. Update the `CurrentSessionIndex`.
|
||||
1. Update `EarliestStoredSession` based on `config.dispute_period` and remove all entries from `Sessions` from the previous value up to the new value.
|
||||
1. Create a new entry in `Sessions` with information about the current session.
|
||||
|
||||
## Routines
|
||||
|
||||
* `earliest_stored_session() -> SessionIndex`: Yields the earliest session for which we have information stored.
|
||||
* `session_info(session: SessionIndex) -> Option<SessionInfo>`: Yields the session info for the given session, if stored.
|
||||
* `session_info(session: SessionIndex) -> Option<SessionInfo>`: Yields the session info for the given session, if stored.
|
||||
|
||||
@@ -424,14 +424,8 @@ enum RuntimeApiRequest {
|
||||
Validators(ResponseChannel<Vec<ValidatorId>>),
|
||||
/// Get the validator groups and rotation info.
|
||||
ValidatorGroups(ResponseChannel<(Vec<Vec<ValidatorIndex>>, GroupRotationInfo)>),
|
||||
/// Get the session index for children of the block. This can be used to construct a signing
|
||||
/// context.
|
||||
SessionIndex(ResponseChannel<SessionIndex>),
|
||||
/// Get the validation code for a specific para, using the given occupied core assumption.
|
||||
ValidationCode(ParaId, OccupiedCoreAssumption, ResponseChannel<Option<ValidationCode>>),
|
||||
/// Fetch the historical validation code used by a para for candidates executed in
|
||||
/// the context of a given block height in the current chain.
|
||||
HistoricalValidationCode(ParaId, BlockNumber, ResponseChannel<Option<ValidationCode>>),
|
||||
/// Get information about all availability cores.
|
||||
AvailabilityCores(ResponseChannel<Vec<CoreState>>),
|
||||
/// with the given occupied core assumption.
|
||||
PersistedValidationData(
|
||||
ParaId,
|
||||
@@ -450,12 +444,25 @@ enum RuntimeApiRequest {
|
||||
CandidateCommitments,
|
||||
RuntimeApiSender<bool>,
|
||||
),
|
||||
/// Get information about all availability cores.
|
||||
AvailabilityCores(ResponseChannel<Vec<CoreState>>),
|
||||
/// Get the session index for children of the block. This can be used to construct a signing
|
||||
/// context.
|
||||
SessionIndexForChild(ResponseChannel<SessionIndex>),
|
||||
/// Get the validation code for a specific para, using the given occupied core assumption.
|
||||
ValidationCode(ParaId, OccupiedCoreAssumption, ResponseChannel<Option<ValidationCode>>),
|
||||
/// Fetch the historical validation code used by a para for candidates executed in
|
||||
/// the context of a given block height in the current chain.
|
||||
HistoricalValidationCode(ParaId, BlockNumber, ResponseChannel<Option<ValidationCode>>),
|
||||
/// Get a committed candidate receipt for all candidates pending availability.
|
||||
CandidatePendingAvailability(ParaId, ResponseChannel<Option<CommittedCandidateReceipt>>),
|
||||
/// Get all events concerning candidates in the last block.
|
||||
CandidateEvents(ResponseChannel<Vec<CandidateEvent>>),
|
||||
/// Get the session info for the given session, if stored.
|
||||
SessionInfo(SessionIndex, ResponseChannel<Option<SessionInfo>>),
|
||||
/// Get all the pending inbound messages in the downward message queue for a para.
|
||||
DmqContents(ParaId, ResponseChannel<Vec<InboundDownwardMessage<BlockNumber>>>),
|
||||
/// Get the contents of all channels addressed to the given recipient. Channels that have no
|
||||
/// messages in them are also included.
|
||||
InboundHrmpChannelsContents(ParaId, ResponseChannel<BTreeMap<ParaId, Vec<InboundHrmpMessage<BlockNumber>>>>),
|
||||
}
|
||||
|
||||
enum RuntimeApiMessage {
|
||||
|
||||
@@ -12,6 +12,9 @@ struct HostConfiguration {
|
||||
pub validation_upgrade_frequency: BlockNumber,
|
||||
/// The delay, in blocks, before a validation upgrade is applied.
|
||||
pub validation_upgrade_delay: BlockNumber,
|
||||
/// The acceptance period, in blocks. This is the amount of blocks after availability that validators
|
||||
/// and fishermen have to perform secondary checks or issue reports.
|
||||
pub acceptance_period: BlockNumber,
|
||||
/// The maximum validation code size, in bytes.
|
||||
pub max_code_size: u32,
|
||||
/// The maximum head-data size, in bytes.
|
||||
@@ -37,6 +40,8 @@ struct HostConfiguration {
|
||||
/// submitting an approval vote before a validator is considered a no-show.
|
||||
/// Must be at least 1.
|
||||
pub no_show_slots: u32,
|
||||
/// The number of delay tranches in total.
|
||||
pub n_delay_tranches: u32,
|
||||
/// The width of the zeroth delay tranche for approval assignments. This many delay tranches
|
||||
/// beyond 0 are all consolidated to form a wide 0 tranche.
|
||||
pub zeroth_delay_tranche_width: u32,
|
||||
|
||||
Reference in New Issue
Block a user