Тестування регіональних множників для MainNet

Карта світу

Команда проводить остаточні тести регіональних мультиплікаторів перед MainNet, щоб переконатися, що вони працюють, як очікувалося

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

За допомогою цих множників ми повинні компенсувати коефіцієнт затримки для запущених вузлів у різних регіонах.  

Це недосконала система. Регіони, такі як Близький Схід, які мають лише один вузол, читають результати, які насправді не описують їх загальну продуктивність. Інші регіони, як-от Північна Африка, не мають вузлів взагалі, і, як наслідок, доведеться вгадати їх значення.

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

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

Це рішення також вимагає налаштувати спосіб обробки множників. Спочатку всі вузли в команді успадкували однакові множники. Це призвело до деяких дуже дивних множників, тому ми коригуємо алгоритм, щоб дати всім вузлам середнє значення їхнього власного множника та найвище в команді.

Розрахунок множників

Під час обчислення множників ми почали з необроблених чисел, скільки балів отримав кожен вузол за кожну епоху, за винятком множника. Ми хочемо, щоб усе було справедливо, і ми хочемо, щоб кожен бегун вузлів був заохочений до команди з кожним іншим вузлом. Отже, наша мета — переконатися, що повна участь дасть вам повні «балки» в мережі.

Перш ніж ми продовжимо, деякі визначення:

  1. Mᵢ – множник для всіх вузлів в Bin я.
  2. Aᵢ – налаштоване значення точки для Bin я.
  3. Pᵢ – Імовірність того, що принаймні один вузол із bin я входить до команди, а вузол з будь-якого bin <я не входить.


Розрахунок ґрунтується на реальних мережевих даних. Протягом останнього тижня ми отримали середні бали, отримані за операції cMix за одну епоху на вузол. Потім це було «нормалізовано», щоб отримати відрегульоване значення точки для корзини, відомого як Aᵢ.

Метою цієї системи є створення таких множників, щоб усі майбутні As були 1.

Біни впорядковуються від мінімуму до максимуму на A. Під час обчислення балів коефіцієнт кожного вузла є середнім їх множником і найвищим у команді (також найнижчим i). 

Оскільки регіон з найнижчим середнім, Bin 0, замінює всі інші, множник Bin 0 можна обчислити як:

Наша мета — забезпечити, щоб коефіцієнти та коригування для всіх вузлів у всіх командах також були в середньому максимальні 1. Оскільки Mₙ — це множник для n-го впорядкованого ядра, а Aₙ — нормалізоване середнє для n-го впорядкованого біта. Це можна легко вирішити:

Наступний множник для Bin 1 можна розрахувати як ймовірність того, що вузол із Bin 1 буде вибрано з вузлом із Bin 0 (який використовує множник bin M0), і ймовірність того, що вузол із Bin 1 не об'єднаний з вузлом із Bin. 0 (який використовує командний множник М1):

Ми можемо зробити те ж саме обчислення для кошика 2:

Ці рівняння для будь-якого Bin є розв’язними і можуть бути визначені в термінах множника. Для корзини 2 перетворення для обчислення множника:

Ми можемо узагальнити це, використовуючи підсумовування для будь-якого командного множника Bin n:

На додаток до рекурсивного визначення, вірогідності важко отримати. Кожен вибір команди з 5 вузлів складається з випадкового жеребкування без заміни із загальної кількості вузлів у мережі. Цей вид виділення описується гіпергеометричним розподілом. Найчастіше цей розподіл застосовується до простого випадку підрахунку об’єктів (вузлів у нашому випадку) з бінарною ознакою (наприклад, у консенсусній сфері BFT: візантійські/чесні вузли). Однак у cMix ми розділили вузли на 12 бінів, що перетворює проблему на багатовимірну, що означає, що нам потрібно обчислити багатовимірний гіпергеометричний розподіл. На щастя, через природу роботи множників, коли ми вибираємо вузол, скажімо, із групи 2, нас не хвилює, чи є будь-який інший вузол у команді з бензом, який має вищий множник. Це означає, що всі ймовірності, які нам потрібно обчислити, подібні: ми хочемо мати команду з принаймні одним вузлом з bin i, без жодних вузлів з усіх bin <i. We include a spreadsheet in our resources below which show how to do this in detail.

Помилка

Це рішення має деякі помилки через той факт, що розбіжності в значеннях A значною мірою викликані різницею в тривалості раундів, що впливає на ймовірність відбору. Це рішення, описане нашим моделюванням, є правильним з точністю до 3%. Майбутня робота може деконструювати причини точкових варіацій, щоб краще моделювати їх і зменшити цю помилку.

Ресурси:

Список контейнерів:

 https://docs.google.com/spreadsheets/d/1z9kvEW7XXcHYxUSPpXkoA1Cv9trIbY4VkPzaWzJEN_I/edit#gid=2056956216

Алгоритм планування: https://git.xx.network/xx_network/primitives/-/blob/dev/region/ordering.go

Розрахунок множника:

https://docs.google.com/spreadsheets/d/1d2HcuCVorKDkUppBam-dk-_PJ8ukPp8ja18DyE_VYJQ/edit?usp=sharing

Скрипт Python для моделювання для підтвердження обчислень:

https://git.xx.network/-/snippets/3

Популярний