Wydarzenia Wykonania o Niskiej Latencji Dziś dokumentujemy system Wydarzeń Wykonania w Monad, który pozwala deweloperom budować aplikacje o wysokiej wydajności, które otrzymują dane o najniższej latencji z węzła Monad za pośrednictwem kolejki pamięci współdzielonej. Aby konsumować te dane w czasie rzeczywistym, piszesz oprogramowanie w C, C++ lub Rust, korzystając z dostarczonego SDK, i uruchamiasz je na hoście działającym jako pełny węzeł Monad. Oto krótka porównanie z innymi takimi systemami: - Geth Live Tracing - API oparte na "hookach": twój kod jest ładowany do węzła Geth jako wtyczka i jest uruchamiany synchronicznie (poprzez wywołania zwrotne) podczas wykonania. - Reth ExEx - API oparte na asynchronicznych funkcjach: twój kod jest ładowany do węzła Reth; wykonanie widzi wydarzenia po fakcie, a nie synchronicznie. - Solana Geyser - API oparte na "hookach", wtyczka, która działa wewnątrz walidatora Solana i wywołuje wywołania zwrotne podczas wykonania. Wszystkie trzy różnią się od podejścia Wydarzeń Wykonania. W Wydarzeniach Wykonania: - Widzisz wydarzenia "na bieżąco", jak w Geth Live Tracer i Solana Geyser. W przeciwieństwie do tych podejść, twój kod nie działa jako wtyczka wewnątrz silnika wykonawczego, ale równolegle (około jedną mikrosekundę później) w osobnym procesie. - Podobnie jak w Geth Live Tracer (ale w przeciwieństwie do Reth's ExEx), widzisz każdy "element" transakcji - każdy log, każda zmiana salda itp. - jako osobne wydarzenie. - W przeciwieństwie do Geth Live Tracer lub Geyser, nie instalujesz "hooków" i nie otrzymujesz wywołań zwrotnych; zamiast tego ciągle sprawdzasz nowe rekordy wydarzeń, iterując przez wszelkie nowe wydarzenia, które są ci zwracane (i ignorując wydarzenia, którymi nie jesteś zainteresowany). - Ponieważ system oparty jest na współdzielonych buforach pamięci ring, możesz stracić dane, jeśli twój konsument jest zbyt wolny -- musisz dotrzymać kroku!