Skip to content

Commit

Permalink
Update nep-0509.md
Browse files Browse the repository at this point in the history
apply Michael's suggestion and fix more lint warnings
  • Loading branch information
walnut-the-cat authored Jun 24, 2024
1 parent 1d1e74b commit e498ab7
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions neps/nep-0509.md
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ This logic is triggered in `ChunkInclusionTracker` by methods [get_chunk_headers

Chunk validators will be randomly assigned to validate shards, for each block (or as we may decide later, for multiple blocks in a row, if required for performance reasons). A chunk validator may be assigned multiple shards at once, if it has sufficient stake.

Each chunk validator's stake is divided into "mandates". There are full and partial mandates. The amount of stake for a full mandate is a fixed parameter determined by the stake distribution of all validators, and any remaining amount smaller than a full mandate is a partial mandate. A chunk validator therefore has zero or more full mandates plus up to one partial mandate. The list of full mandates and the list of partial mandates are then separately shuffled and partitioned equally (as in, no more than one mandate in difference between any two shards) across the shards. Any mandate assigned to a shard means that the chunk validator who owns the mandate is assigned to validate that shard. Because a chunk validator may have multiple mandates, it may be assigned multiple shards to validate.
Each chunk validator's stake is divided into "mandates". There are full and partial mandates. The number of mandates per shard is a fixed parameter and the amount of stake per mandate is dynamically computed based on this parameter and the actual stake distribution; any remaining amount smaller than a full mandate is a partial mandate. A chunk validator therefore has zero or more full mandates plus up to one partial mandate. The list of full mandates and the list of partial mandates are then separately shuffled and partitioned equally (as in, no more than one mandate in difference between any two shards) across the shards. Any mandate assigned to a shard means that the chunk validator who owns the mandate is assigned to validate that shard. Because a chunk validator may have multiple mandates, it may be assigned multiple shards to validate.

For Stage 0, we select **target amount of mandates per shard** to 68, which was a [result of the latest research](https://near.zulipchat.com/#narrow/stream/407237-core.2Fstateless-validation/topic/validator.20seat.20assignment/near/435252304).
With this number of mandates per shard and 6 shards, we predict the protocol to be secure for 40 years at 90% confidence.
Expand Down Expand Up @@ -465,16 +465,16 @@ While reducing `r`, i.e. reducing the number of data parts required to reconstru

For the first release of stateless validation, we've kept the ratio as `0.6` representing that ~2/3rd of all chunk validators need to be online for chunk state witness distribution mechanism to work smoothly.

One thing to note here is that the redundancy and upkeep requirement of 2/3rd is the _number_ of chunk validators and not the _stake_ of chunk validators.
One thing to note here is that the redundancy and upkeep requirement of 2/3rd is the *number* of chunk validators and not the *stake* of chunk validators.

### PartialEncodedStateWitness structure

The partial encoded state witness has the following fields:
- `(epoch_id, shard_id, height_created)` : These are the three fields that together uniquely determine the chunk associated with the partial witness. Since the chunk and chunk header distribution mechanism is independent of the partial witness, we rely on this triplet to uniquely identify which chunk is a part associated with.
- `part_ord` : The index or id of the part in the array of partial witnesses.
- `part` : The data associated with the part
- `encoded_length` : The total length of the state witness. This is required in the reed solomon decoding process to reconstruct the state witness.
- `signature` : Each part is signed by the chunk producer. This way the validity of the partial witness can be verified by the chunk validators receiving the parts.
* `(epoch_id, shard_id, height_created)` : These are the three fields that together uniquely determine the chunk associated with the partial witness. Since the chunk and chunk header distribution mechanism is independent of the partial witness, we rely on this triplet to uniquely identify which chunk is a part associated with.

Check failure on line 473 in neps/nep-0509.md

View workflow job for this annotation

GitHub Actions / markdown-lint

Lists should be surrounded by blank lines [Context: "* `(epoch_id, shard_id, height..."]

neps/nep-0509.md:473 MD032/blanks-around-lists Lists should be surrounded by blank lines [Context: "* `(epoch_id, shard_id, height..."]
* `part_ord` : The index or id of the part in the array of partial witnesses.
* `part` : The data associated with the part
* `encoded_length` : The total length of the state witness. This is required in the reed solomon decoding process to reconstruct the state witness.
* `signature` : Each part is signed by the chunk producer. This way the validity of the partial witness can be verified by the chunk validators receiving the parts.

The `PartialEncodedStateWitnessTracker` module that is responsible for the storage and decoding of partial witnesses. This module has a LRU cache to store all the partial witnesses with `(epoch_id, shard_id, height_created)` triplet as the key. We reconstruct the state witness as soon as we have `D` of the `N` parts as forward the state witness to the validation module.

Expand All @@ -488,7 +488,7 @@ Partial state witness distribution takes this load off the chunk producer and di

### Future work

In the Reed Solomon Erasure encoding section we discussed that the chunk state distribution mechanism relies on 2/3rd of the _number_ of chunk validators being available/non-malicious and not 2/3rd of the _total stake_ of the chunk validators. This can cause a potential issue where it's possible for more than 1/3rd of the chunk validators with small enough stake to be unavailable and cause the chunk production to stall. In the future we would like to address this problem.
In the Reed Solomon Erasure encoding section we discussed that the chunk state distribution mechanism relies on 2/3rd of the *number* of chunk validators being available/non-malicious and not 2/3rd of the *total stake* of the chunk validators. This can cause a potential issue where it's possible for more than 1/3rd of the chunk validators with small enough stake to be unavailable and cause the chunk production to stall. In the future we would like to address this problem.

## Validator Role Change

Check failure on line 493 in neps/nep-0509.md

View workflow job for this annotation

GitHub Actions / markdown-lint

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Validator Role Change"]

neps/nep-0509.md:493 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Validator Role Change"]
Currently, there are two different types of validators and their responsibilities are as follows:
Expand Down

0 comments on commit e498ab7

Please sign in to comment.