Endorsing rights for every block are never 32, should we change the assignment mode?

Take a look at the endorsing rights for this level (just a random choice):

One baker has 7 slots assigned (along with others that have more than 1).
So, the total endorse required for this level is 20 instead of 32 !

This is not a special case, hardly (or never?) we will see 32 different bakers, I could estimate an average of 23/24 per block.

Technically, nothing wrong, it’s the expected behavior since the rights are randomly assigned.

From my point of view, however, it would be better to make sure that each slot is assigned (always random) but to different bakers so as to have always 32 different endorser.

What do you think ?
It’s a non-problem? Something that can be ignored?

There are 32 slots for each block and each slot is treated independently. Some slots may be filled by the same endorser. That does not “remove” slots. There are always 32.

What tool did you use to create the 2nd screenshot? It doesn’t look like you are counting the length of each “slots” array.

The rights are drawn with replacement because baker keys are not Sybil resistant. What you propose would only lead to bakers splitting their keys into 1 roll stakes.

1 Like

Absolutely not, my idea is not to assign each slot of all the blocks in a cycle to different bakers but to make sure that the 32 slots of each single block / level are assigned to different bakers.

If I’m not wrong, it already happens for baking rights. There are 64 priority levels, all 64 assigned to different bakers. Why can’t we do the same for endorsements?

yes, i know, the slot are always 32 (from 0 to 31) but if two or more slot(s) are assigned to the same baker (up to 7 in my first screen), the total endorse tx required for almost all level will never been 32.

The second screen is just the output of the command :

for block in $(seq 822500 822600); do echo -n "level: $block - endorser: " ; tezos-client rpc get /chains/main/blocks/head/helpers/endorsing_rights?level=$block | jq '. | length'; done

It counts the unique addresses/bakers that have endorsing rights on a given level (regardless of how many assigned slots they have)

I understand what you’re proposing. It does not work.

Suppose there are two bakers and 10 rolls, the first baker has 5 rolls, the second has 5 rolls and there are 2 endorsements per block. Under your scheme, each baker gets exactly one endorsement in each block. So far, so good.

However, the first baker now pretends to be 5 bakers with 1 roll each. The second baker never gets two endorsements at once but the first one sometimes does. In fact, in this scenario, the second baker gets 38.889% (7/18) of endorsements and the Sybil bakers gets 61.111% (11/18) of endorsements.

As a result, it becomes every baker’s incentive to split their stake into 1 roll chunks.