Testnet report 3 — Downtime slash
For the DAO and community: how downtime penalties work in simple words, what we learned from barter-kir, and the softer mainnet parameters we propose after this test.
1. Verdict
Live page: stake.html · Roadmap: roadmap.html ·
Draft params: deployments/mainnet-network-params.draft.json
2. In plain words
Validators must keep signing blocks. The chain watches a short sliding window of recent blocks. If a validator signs too few of them, the protocol treats that as downtime:
- Slash — a fixed percent is burned from the validator’s bonded stake (self-stake + all delegations, proportionally).
- Jail — the validator leaves the active set (no more proposing / rewards) until an
unjailtransaction after the jail timer.
This is not the same as double-sign (signing two conflicting blocks). Double-sign is malice / key compromise and stays a hard penalty. Downtime is “the node was offline or stuck.”
Delegators share the slash. If you stake with a validator and it goes down, your bonded BRTR is reduced by the same percentage. Choosing a reliable operator matters.
3. Math on today’s public testnet
| Parameter | Testnet value | Plain meaning |
|---|---|---|
signed_blocks_window | 100 | Look at the last 100 blocks |
min_signed_per_window | 50% | Must sign ≥ 50 of those 100 |
slash_fraction_downtime | 1% (0.01) | Burn 1% of all bonded stake |
downtime_jail_duration | 600 s (10 min) | Earliest unjail after jail |
slash_fraction_double_sign | 5% | Separate, for double-sign |
Block time on this testnet is about ~3.6 seconds. So 100 blocks ≈ 6 minutes. Roughly: stay silent for a few minutes in a bad stretch of the window → downtime evidence.
Example (matches the live kir case):
- Bonded stake before: 100 000 BRTR
- Slash 1%: −1 000 BRTR
- Bonded after: 99 000 BRTR
- Min self-delegation policy: 100 000 BRTR → unjail was blocked until self-stake was topped up
Formula: slash_amount = bonded × slash_fraction_downtime.
Everyone bonded to that validator loses the same fraction.
4. What happened to barter-kir (2026-09-19)
- kir missed enough signatures in the 100-block window → jailed + 1% slash (100k → 99k).
- Active set temporarily became 3/4 (ceo, vla, rus kept producing blocks).
- Jail timer expired, but
unjailfailed: self-stake 99k < 100k minimum. - Ops topped self-stake by +2 000 BRTR, then unjail succeeded → 4/4 bonded again.
- Community e2e delegates later raised kir bonded stake further (see stake page).
Lesson for operators: after a downtime slash, check self-stake ≥ min_self_delegation before unjail. Lesson for DAO: testnet 1% / ~6‑minute window is a useful stress test, not a mainnet default.
5. Mainnet proposal (after this test)
Proposed for genesis / DAO-3 lock (draft updated 2026-09-19). Goal: punish real neglect, not a short reboot; keep double-sign hard.
| Parameter | Testnet (now) | Mainnet draft |
|---|---|---|
| Signed blocks window | 100 (~6 min) | 12 053 (~12 h at ~3.58 s/block) |
| Min signed in window | 50% | 34% |
| Downtime slash | 1% | 0.1% |
| Jail duration | 10 min | 10 min (unchanged) |
| Double-sign slash | 5% | 5% (unchanged, malice) |
Mainnet example at 100 000 BRTR bonded:
- Testnet-style 1% slash → −1 000 BRTR
- Proposed 0.1% slash → −100 BRTR
Window ~12 hours means a brief outage is unlikely to trip the threshold; prolonged silence still jails and slashes. Final genesis may re-measure block time and round the window; the intent is ~12 hours.
6. Next
- Keep these mainnet candidates in
mainnet-network-params.draft.jsonuntil DAO-3. - Operators: monitoring + alerts; home-PC validators should expect reconnects — mainnet window is designed for that.
- Delegators: prefer validators with uptime discipline; slash is shared.
- Continue roadmap block A (day-4 bridge microcap) with a healthy 4/4 set.
1. Вердикт
Стейкинг: stake.html · Дорожная карта: roadmap.html ·
Черновик параметров: deployments/mainnet-network-params.draft.json
2. Простыми словами
Валидаторы обязаны подписывать блоки. Сеть смотрит на короткое скользящее окно последних блоков. Если валидатор подписал слишком мало — это downtime (простой):
- Slash — сжигается фиксированный процент bonded-стейка (self-stake и все делегации пропорционально).
- Jail — валидатор выпадает из активного набора (не предлагает блоки / не получает награды), пока после таймера не отправит
unjail.
Это не то же самое, что double-sign (две конфликтующие подписи). Double-sign — злой умысел или компрометация ключа; штраф остаётся жёстким. Downtime — «нода была офлайн или зависла».
Делегаторы делят slash. Если ваш валидатор упал — ваш bonded BRTR уменьшается на тот же процент. Надёжность оператора важна.
3. Математика на текущем public testnet
| Параметр | Значение testnet | Смысл |
|---|---|---|
signed_blocks_window | 100 | Смотрим последние 100 блоков |
min_signed_per_window | 50% | Нужно подписать ≥ 50 из 100 |
slash_fraction_downtime | 1% (0.01) | Сжечь 1% всего bonded |
downtime_jail_duration | 600 с (10 мин) | Минимум до unjail |
slash_fraction_double_sign | 5% | Отдельно, за double-sign |
Время блока на этом тестнете ≈ ~3.6 с. Значит 100 блоков ≈ 6 минут. Грубо: несколько минут молчания в «плохой» части окна → срабатывание downtime.
Пример (как у kir):
- До: 100 000 BRTR
- Slash 1%: −1 000 BRTR
- После: 99 000 BRTR
- Мин. self-stake: 100 000 → unjail не проходил, пока self-stake не долили
Формула: slash_amount = bonded × slash_fraction_downtime.
4. Что случилось с barter-kir (2026-09-19)
- kir не набрал подписей в окне 100 блоков → jail + slash 1% (100k → 99k).
- Активный набор временно 3/4 (ceo, vla, rus продолжали блоки).
- Таймер jail вышел, но
unjailупал: self-stake 99k < 100k. - Долили self-stake +2 000 BRTR, затем unjail → снова 4/4.
- Позже добавили внешние e2e-делегации (см. stake).
Вывод для операторов: после slash проверьте self-stake ≥ минимума перед unjail. Вывод для DAO: 1% и окно ~6 минут — хороший стресс-тест, не дефолт для mainnet.
5. Предложение для mainnet (после теста)
Кандидаты в genesis / фиксация на DAO-3 (черновик обновлён 2026-09-19). Цель: наказывать длительный простой, а не короткий ребут; double-sign оставить жёстким.
| Параметр | Testnet сейчас | Mainnet draft |
|---|---|---|
| Окно подписей | 100 (~6 мин) | 12 053 (~12 ч при ~3.58 с/блок) |
| Min signed | 50% | 34% |
| Downtime slash | 1% | 0.1% |
| Jail | 10 мин | 10 мин |
| Double-sign slash | 5% | 5% (умысел) |
Пример mainnet при 100 000 BRTR bonded:
- Как на testnet 1% → −1 000 BRTR
- Предлагаемые 0.1% → −100 BRTR
Окно ~12 часов: короткий обрыв связи почти не триггерит порог; долгий простой по-прежнему ведёт к jail + slash. В финальном genesis окно можно округлить после замера времени блока — смысл ~12 часов.
6. Дальше
- Держим кандидаты в
mainnet-network-params.draft.jsonдо DAO-3. - Операторам: мониторинг и алерты; для ПК-валидаторов окно mainnet как раз прощает короткие ребуты.
- Делегаторам: выбирать операторов с дисциплиной аптайма — slash общий.
- Продолжаем roadmap блок A (day-4 bridge microcap) при живом сете 4/4.