Вечная гонка блокчейна за производительность и пропускную способность привела к появлению множества интересных решений. Один из них — параллельное выполнение транзакций. Как это работает и какие преимущества дает?
Криптовалютная биржа Binance опубликовала целое исследование, посвященное параллельному исполнению на блокчейне. Хотя само решение появилось уже давно, аналитики уже теоретически подвели итоги многолетних разработок. Эта технология известна в основном благодаря проекту Solana, Однако это решение в различных формах используется Vara, TON, Sui, sei, Aptos, Linera, Fuel и Monad.
Что препятствует пропускной способности блокчейна, так это проблема последовательного выполнения. Решения с последовательным выполнением требуют проверки каждой транзакции в сети, что потребляет значительную энергию и увеличивает нагрузку на майнеров и валидаторов.
Параллельное выполнение предназначено для разделения задач и одновременной обработки множества транзакций, что благотворно влияет на пропускную способность и улучшает масштабируемость сети.
Эксперты Binance отмечают, что эволюция вычислительных машин движется в сторону многозадачности и многопоточности. Свидетельством этого может служить тот факт, что за последние 20 лет частоты процессоров не сильно выросли, а вместо этого увеличилось количество ядер. Это более эффективное решение, поскольку большинство задач выполняются быстрее несколькими более слабыми ядрами, чем одним мощным ядром.
Программирование также следует этой тенденции: современные решения пишутся таким образом, чтобы максимизировать положительные эффекты многопоточности. Поэтому в моде решения, которые решают множество проблем параллельно.
Проще говоря, параллельное выполнение позволяет обрабатывать множество транзакций одновременно. В ситуациях больших вычислительных мощностей и многозадачности параллельные решения кажутся наиболее эффективными.
Однако существует множество проблем, связанных с созданием надежного и безопасного согласованного блокчейн-решения. Основная – Зависимая транзакция. Что происходит, когда две транзакции обрабатываются параллельно, например, отправляя криптовалюту с одного и того же адреса на два разных адреса? Если эти транзакции выполняются полностью параллельно, владелец кошелька может потратить монеты дважды. А это не приветствуется.
Следовательно, зависимые транзакции могут выполняться только последовательно. Зависимость транзакций — это важная концепция, которая означает:
Выходные данные одной задачи записываются на входные данные другой задачи. Алиса передает ETH Бобу (выход), а Вася (вход) передает ETH Кэрол.
Вывод нескольких задач записывается в одну и ту же ячейку памяти. Например, и Алиса, и Кэрол передают ETH Васе (выход).
Отсюда ясно, что распараллеливать можно только задачи, независимые друг от друга. Это означает, что скорость параллельного блокчейна всегда ограничена самой длинной цепочкой зависимых задач. Тем не менее, поскольку существует так много независимых задач, в блокчейне достаточно места для параллельных решений.
Шардинг. Эксперты Binance классифицировали шардинг как параллельное выполнение. Это верно на макроуровне (шарды фактически обрабатывают транзакции параллельно друг другу). Но на микроуровне каждый шард внутри себя по очереди обрабатывает транзакции.
Параллельная обработка задач. Это тот случай, когда несколько транзакций обрабатываются одновременно. Например, если узел имеет 16 ядер, он может одновременно обрабатывать 16 транзакций.
Параллелизм данных — одна инструкция для нескольких данных (Single Instruction Multiple Data или SIMD). SIMD — это низкоуровневое решение, позволяющее более эффективно манипулировать данными. Полезно для хеширования и проверки.
Параллельные проекты не всегда выгодны по сравнению с простыми последовательными решениями. Напротив, он гораздо менее безопасен, предсказуем и прост.
Авторы исследования обобщили уязвимости параллельного выполнения и выделили несколько критических уязвимостей:
условия гонки (неопределенность результата, если независимые транзакции не определены должным образом);
проблемы повторного входа;
Взаимная блокировка — это когда две или более задачи неопределенно долго ждут завершения друг друга. Каждый из них не может быть выполнен, пока не будет выполнен другой;
Некомпонуемость: когда сам программный код может быть правильным, но при использовании в разных условиях возникают серьезные ошибки.
Кроме того, условно критический (т.е критический в определенных ситуациях) создает две дополнительные проблемы:
Состояние, при котором задача с более низким приоритетом может косвенно блокировать задачу с более высоким приоритетом из-за инверсии приоритета или неисправности планировщика;
истощение ресурсов. Некоторые задачи потребляют больше ресурсов, чем необходимо, лишая другие задачи необходимых ресурсов.
Погоня за пропускной способностью может стоить значительных затрат. Параллельное выполнение представляет собой сложную конструкцию и создает множество проблем, но позволяет значительно повысить производительность.
Группа из девяти анонимных криптокошельков стала играть ключевую роль в определении результатов на крупнейших рынках…
Сооснователь компании OpenZeppelin Мануэль Араос (Manuel Araoz) назвал уязвимым местом децентрализованных финансов (DeFI) быстрорастущие возможности…
Неизвестный взломал криптовалютную платформу Stake DAO, специализирующуюся на автоматизированных стратегиях получения дохода и блокировке токенов, создал…
Компания BitMine Immersion Technologies, крупнейший корпоративный держатель эфира, пополнила свой запас на 111942 ETH стоимостью…
Аккаунт на платформе Hyperliquid потерял $128 млн из-за того, что после удачной сделки не смог остановиться…
Прокуратура Южной Кореи направила в окружной суд Сеула дело организаторов схемы с мемкоином CatFi на…