События выполнения с низкой задержкой Сегодня мы документируем систему событий выполнения в Monad, которая позволяет разработчикам создавать высокопроизводительные приложения, получающие данные о событиях с наименьшей задержкой от узла Monad через очередь общей памяти. Чтобы использовать эти данные в реальном времени, вы пишете программное обеспечение на C, C++ или Rust, используя предоставленный SDK, и запускаете его на хосте, работающем на полном узле Monad. Вот краткое сравнение с другими подобными системами: - Geth Live Tracing - API на основе "хуков": ваш код загружается в узел Geth как плагин и выполняется синхронно (через обратные вызовы) во время выполнения. - Reth ExEx - API на основе асинхронных функций: ваш код загружается в узел Reth; выполнение видит события постфактум, а не синхронно. - Solana Geyser - API на основе "хуков", плагин, который работает внутри валидатора Solana и вызывает обратные вызовы во время выполнения. Все три из этих систем отличаются от подхода событий выполнения. В событиях выполнения: - Вы видите события "по мере их возникновения", как в Geth Live Tracer и Solana Geyser. В отличие от этих подходов, ваш код не выполняется как плагин внутри движка выполнения, а параллельно (примерно через микросекунду) в отдельном процессе. - Как и в Geth Live Tracer (но в отличие от Reth's ExEx), вы видите каждую "часть" транзакции - каждый лог, каждое изменение баланса и т.д. - как отдельное событие. - В отличие от Geth Live Tracer или Geyser, вы не устанавливаете "хуки" и не получаете обратные вызовы; вместо этого вы постоянно опрашиваете новые записи событий, перебирая любые новые события, которые вам возвращаются (и игнорируя события, которые вас не интересуют). - Поскольку система основана на кольцевых буферах общей памяти, вы можете потерять данные, если ваш потребитель слишком медленный -- вы должны успевать!