Події виконання з низькою затримкою Сьогодні ми документуємо систему Execution Events у Monad, яка дозволяє розробникам створювати високопродуктивні програми, які отримують дані про події з найнижчою затримкою від вузла Monad через спільну чергу пам'яті. Щоб споживати ці дані в реальному часі, ви пишете програмне забезпечення на C, C++ або Rust, використовуючи наданий SDK, і запускаєте його на хості, на якому працює повний вузол Monad. Ось коротке порівняння з іншими подібними системами: - Geth Live Tracing - API на основі "hook": ваш код завантажується в вузол Geth як плагін, і виконується синхронно (через зворотні виклики) під час виконання. - Reth ExEx - API на основі асинхронних функцій: ваш код завантажується в вузол Ret; Виконання бачить події постфактум, а не синхронно - Solana Geyser - API на основі "hook", плагін, який працює всередині валідатора Solana і викликає зворотні виклики під час виконання Всі ці три аспекти відрізняються від підходу до подій виконання. У подіях виконання: - Ви бачите події «як-вони-відбуваються», як у Geth Live Tracer і Solana Geyser. На відміну від цих підходів, ваш код виконується не як плагін всередині движка виконання, а паралельно (приблизно через одну мікросекунду) в окремому процесі - Подібно до Geth Live Tracer (але на відміну від ExEx від Reth), ви бачите кожну "частину" транзакції - кожен журнал, кожну зміну балансу і т.д. - як окрему подію - На відміну від Geth Live Tracer або Geyser, ви не встановлюєте "хуки" і не отримуєте зворотні дзвінки; Замість цього ви постійно проводите опитування на наявність нових записів подій, повторюючи всі нові події, які вам повертаються (і ігноруючи події, які вас не цікавлять) - Оскільки система заснована на кільцевих буферах спільної пам'яті, ви можете втратити дані, якщо ваш споживач занадто повільний - ви повинні йти в ногу з часом!