Перед запуском: дефекти ловить сама мережа, NRO — лише для комісій

Готуючись до запуску, ми переглянули дефекти останніх тижнів і знайшли, що в них спільного. Майже кожен був записом у стан, яким володіє інший шард, або переміщенням вартості між шардами без повного обліку. Рев'ю знаходили їх по одному. Ми вирішили, що система має знаходити їх сама.

Охорона власності в шарі зберігання

Кожен запис у базу даних тепер перевіряє, який шард володіє ключем. Запис шарда в запис, яким він не володіє, відкочує всю транзакцію, а в тестах називає місце виклику. Підхід запозичено в NEAR, де ключі стану прив'язані до акаунта-отримувача. Першого ж дня охорона знайшла чотири старі дефекти; наприклад, кожен міжшардовий переказ зсував nonce відправника на іншому шарді.

Інваріант пропозиції

Кожен шард веде облік того, скільки NRO і кожного активу створено, спалено, надіслано іншим шардам і отримано від них. Баланси, торгові рахунки, пули та стейки мають сходитися з цим обліком — та сама ідея, що й інваріант TotalSupply у Cosmos SDK. Перевірка виконується в юніт-тестах і після кожного мережевого тесту, а серія, що запускається перед кожним злиттям, охоплює і один, і два шарди.

NRO лише як валюта комісій

DEX увімкнено з першого дня, але NRO не є торговим активом: жодного пулу з NRO, жодного депозиту NRO на торговий рахунок. Це вирішує один параметр управління, dex_nro_tradable, тож пари з NRO згодом можна відкрити голосуванням, без релізу. Ми спиралися на два наявні механізми. У Cosmos SDK перекази окремої монети вмикаються й вимикаються через управління, і Cosmos Hub запускався саме так: перекази ATOM були вимкнені в генезисі й увімкнені голосуванням. В Osmosis управління визначає, які базові активи можуть використовувати пули. Якщо параметр знову вимкнуть, вихід лишається відкритим: ліквідність і баланс NRO завжди можна вивести.

Комісія за випуск активу — з основного балансу

Комісія за випуск активу тепер сплачується з основного балансу NRO, як газ, а не з торгового рахунку — так само, як комісія за створення пулу в Osmosis. Коли актив випускається з іншого шарда, комісія подорожує разом з операцією, а якщо випуск відхилено (наприклад, символ зайнятий), комісія повертається повністю.

Результат

373 юніт-тести. Мережевий тест DEX переписано для пари актив/актив; він перевіряє відмови для NRO, актив, випущений з іншого шарда, і повернення комісії. Повна серія з 9 мережевих тестів пройшла, і інваріант пропозиції втримався в кожному запуску. Далі ми перевіримо кожен шлях застосування транзакції на відповідність цим двом правилам.

Усі новини