BL-26: Batch-assignment pool-reshaping gap — unstake between seed lock and autoCreateTier1AndTier2 re-rolls all assignments
Mantenedores costumam responder em até 1 dia
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 48/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- solidity
- Domínio
- blockchain, security
Direção de pesquisa
Read DINTaskCoordinator.sol around autoCreateTier1AndTier2 (L714–780), createAuditorsBatches (L820–880), and the existing _assignFreshSubgroup pattern. Check the relevant tests for batch creation and validator activity. Done when assignments use the fixed per-GI registration list and locked seed, skipping inactive entries so an unstake only forfeits that validator’s seat.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Summary
DINTaskCoordinator.autoCreateTier1AndTier2 and createAuditorsBatches build the validator pool from _activeAggregatorPool / _activeAuditorPool at call time, after the seed is already public. A validator can unstake between the seed lock and the batch-creation call to change the active pool size, which causes Fisher-Yates to re-roll the entire batch assignment for everyone else. The cost to the attacker is real but modest: their own Sybils sit out the GI and enter unbonding.
This is a distinct gap from BL-11's re-roll-by-declining-to-lock residual (partially mitigated by the validator-side lock added in PR #191). A validator doesn't need to decline locking anything — they just wait until the seed is locked, then unstake, then the batch draw re-rolls when the model owner eventually calls autoCreateTier1AndTier2.
Reachability
- Seed is locked (permissionlessly, by any validator online) once
block.number >= seedBlock. autoCreateTier1AndTier2/createAuditorsBatchescan be called by the model owner any time after the seed is locked — no deadline enforced.- Between lock and create,
_activeAggregatorPool/_activeAuditorPoolread the live staking contract. Any change in the active-validator count between those two calls shifts the Fisher-Yates index mapping. - Verified against
develop@aa76ce18:autoCreateTier1AndTier2L714–780,createAuditorsBatchesL820–880 (DINTaskCoordinator.sol).
Ready-made fix
Adopt _assignFreshSubgroup's existing pattern (the dispute re-eval draw, merged in PR #171):
- Shuffle the fixed per-GI registration list (
dinAggregators[_GI]/ the auditor equivalent) with the locked seed, not the live active pool. - Walk the shuffled list and skip inactive entries when filling seats.
Under this scheme an unstake only forfeits the leaver's own seat; everyone else's assignment is already determined by the fixed list + locked seed and cannot be changed.
Out of scope here
The contract-side re-anchor cap (bounding how many times the seed can expire and re-anchor) was considered in PR #191 and deferred pending a GI-abort design (issue #222): without an abort path, a capped-out GI is stuck forever. That is a separate issue. This issue covers only the pool-reshaping gap.
References
Developer/BACK_LOG.mdBL-26- PR #191 review — pool-reshaping gap documented as residual in
DINTaskCoordinator.md§6.3 - Issue #222 (GI-abort design, prerequisite for the re-anchor cap)
- Issue #178 (sequencer-trust residual, separate track)
- Linguagem predominante
- Python
- Estrelas
- 4
- Forks
- 7
- Merge médio
- 3d 7h
- PRs com merge (30d)
- 33
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de InfiniteZeroFoundation/DevNet
-
ROADMAP.md: refresh "What is still open for P3" (several items were fixed in October)Talvez já em andamento @umermjd11 assumiu há 5 dias. Abertadocumentation good first issue
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
InfiniteZeroFoundation/DevNet#285 · 1 comentário · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
Update the 25 translated organisation READMEs to match the English versionTalvez já em andamento @mrCabez assumiu há 3 dias. Abertagood first issue help wanted
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
InfiniteZeroFoundation/DevNet#277 · 3 comentários · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
Update the client-service guide to explain training and uploading separatelyTalvez já em andamento @Santiagocetran assumiu há 3 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
InfiniteZeroFoundation/DevNet#266 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
Few questions related to GI2 aggregatorTalvez já em andamento @Abidoyesimze assumiu há 2 dias. Aberta
InfiniteZeroFoundation/DevNet#307 · 1 comentário · 1 reação · 4 responsáveis ·
Mantenedores costumam responder em até 1 dia
-
bug python
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 52/100
InfiniteZeroFoundation/DevNet#306 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de InfiniteZeroFoundation/DevNet
Issues semelhantes
-
breaking change
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Mantenedores costumam responder em até 1 dia
-
check-skill-pages: show fixture build errors when a build failsTalvez já em andamento @ShahadatTest assumiu hoje. Abertagood first issue P2
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
coco-research/coco#439 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
esphome/home-assistant-addon#274 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
endurain-project/endurain#882 ·
Mantenedores costumam responder em até 1 dia
-
good first issue
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100