Перевірювані знімки, захист від подвійного підпису та надійні міжшардові перекази

Ми запускаємо мережу з чотирьох валідаторів у нашому тестовому стенді (tools/quorum-net). Кожен запуск зберігає свої параметри, логи кожного вузла та підсумок. Ця серія запусків виявила п'ять дефектів, і всі п'ять виправлено.

Кожна зміна стану проходить через консенсус

Деякі операції (мультипідписні скарбниці, сертифікати, білий список байткоду, профілі вузлів) застосовувалися безпосередньо вузлом, який прийняв запит, і інші вузли їх ніколи не бачили. Як у Cosmos SDK, вузол тепер лише перевіряє запит під час надходження; його ефект записується в стан лише тоді, коли застосовується блок.

Знімок, який не треба приймати на віру

Новий вузол може стартувати зі знімка стану замість того, щоб відтворювати всю історію. Знімок приймається, лише якщо блок після нього підписаний понад 2/3 валідаторів, а відновлений стан відтворює точно той самий корінь стану, — це правило, яке використовує state sync у CometBFT. У тесті ми дали вузлу підроблений знімок з одним зміненим балансом і перерахованими контрольними сумами; вузол відмовився стартувати.

Захист від подвійного підпису

Валідатор, якого стерли й відновили зі старішого знімка, підписав висоту, яку вже підписував, і мережа його слешнула. Тепер, як у CometBFT, останній підпис зберігається у файлі поруч із ключем валідатора: повтор відхиляється, а відновлення ніколи не стартує нижче останньої підписаної висоти. Той самий сценарій тепер проходить без слешингу.

Міжшардові перекази

Шард призначення зараховував переказ у момент надходження повідомлення, тож два його вузли могли зарахувати його в різних блоках; мережа помічала розбіжність і зупиняла шард. Тепер, як в IBC, переказ зараховується транзакцією в блоці, а шард призначення перевіряє, що списання є в блоці шарда-джерела, підписаному його валідаторами. Зарахування займає 1–2 секунди замість до 30.

Зайві блоки

У мережі з двох шардів системні транзакції знову й знову поверталися в блоки, і мережа без навантаження робила 120 блоків за хвилину. Тепер вона робить 2, як і задумано.

Шквал з'єднань

Тест dos грає роль зловмисника, що відкриває близько 480 000 з'єднань до вузлів. На релізній збірці мережа продовжувала випускати блоки в тому самому темпі, що й без атаки, завдяки обмеженню в 20 з'єднань на секунду з одного IP, постійним з'єднанням між пірами з рукостисканням, підписаним ML-DSA, і окремому допуску для валідаторів і гостей із банами за ключем, а не за IP. Кількість попереджень у логах упала з 16 000 рядків до 39. Сповільнення, яке ми спершу списали на атаку, виявилося наслідком debug-збірки, тож навантажувальні тести тепер запускаються лише на релізних збірках.

Результат

Проходять 333 тести вузла та 63 тести консенсусу, а також мережеві сценарії — падіння вузлів, перезапуски, навантаження, шквал з'єднань і два шарди — без розбіжностей стану й без слешингу.

Усі новини