Разогнать блокчейн до 710 000 транзакций в секунду

Разогнать блокчейн до 710 000 транзакций в секунду: обзор алгоритма Proof of History 

Статьи

19.03.2020

Одна из проблем криптовалют — синхронизация узлов. Чтобы исполнить транзакции, узлы должны записать блок в блокчейн. Для этого они общаются и достигают консенсуса.

Этот процесс занимает время. Пропускная способность биткоина — 4 транзакции в секунду (TPS), блокчейна EOS — менее 50 TPS. При этом платежная система Visa обрабатывает 65 000 TPS.

Во время тестов Solana показала 60 000 TPS. По подсчетам разработчиков, теоретическая пропускная способность сети может достигать 710 000 TPS. Проект достиг таких показателей благодаря собственным решениям: Proof of History, Tower Byzantine Fault Tolerance (TBFT), Turbine, Gulfstream, Sealevel, Pipeline, Cloudbreak и Archivers.

Рассказываем, как работает Proof of History и почему большая пропускная способность блокчейна — это важно.

О проекте Solana

Solana — американский проект, разрабатывающий масштабируемый блокчейн-протокол для создания децентрализованных приложений и смарт-контрактов.

В команде Solana: бывший ведущий разработчик Qualcomm Анатолий Яковенко,  разработчик ОС BREW Грег Фицжеральд и доктор наук в области физики частиц Эрик Уильямс.

Проект основан в 2017 году. В 2018 году команда запустила альфа-версию тестовой сети, в 2019 — получила $20 млн венчурных инвестиций.

Solana использует utility-токен SOL для награждения узлов, поддерживающих работу сети.

Проект анонсировал голландский аукцион токенов SOL. Он состоится  24 марта в 08:00 (МСК) на площадке Coinlist. Начальная цена токена SOL — $4. Делать ставки можно с 17 марта.

Зарегистрироваться на торги можно на странице аукциона. Пользователи могут вернуть токены по гарантии в течение 12 месяцев. В таком случае Solana выкупит их за 90% от итоговой цены аукциона.

Что такое Proof of History

Proof of History (PoH) — это алгоритм синхронизации блокчейна. В нем есть внутренние часы, которые показывают одинаковое время на всех узлах.

Узлы сети работают по расписанию. Благодаря синхронизации они могут проверить время между операциями в блокчейне. 

Для чего нужна синхронизация узлов

Чтобы достигнуть консенсуса, узлы должны обменяться информацией — синхронизироваться. Это может занимать до 40 секунд в зависимости от скорости передачи данных между узлами.

Скорость синхронизации влияет на пропускную способность блокчейна. Чем она быстрее, тем больше транзакций в секунду обрабатывает сеть.

Представьте: вы командуете сухопутными войсками и по очереди отдаете приказ генералам, они доносят его солдатам. Если вы можете докричаться до генералов, то синхронизация происходит быстро. Но если вы отправляете приказы голубями, синхронизация будет медленной. Пока танковые войска дождутся голубя, кавалерия выполнит приказ.

Так происходит и в криптовалюте: 

  • узел находит новый блок и сообщает об этом другому узлу; 
  • они вместе отправляют новость о найденном блоке другим двум узлам, которые передают ее остальным.

Майнеры, которые не знают о найденном блоке, продолжают майнинг. В результате майнеры могут одновременно добыть два блока. Один из блоков станет отвергнутым (orphan-блок). 

Orphan-блоки разделяют блокчейн на две ветки. Это дает шанс провести двойное расходование и другие атаки.

В биткоине узлы ищут блок 10 минут и синхронизируются за 15 секунд. Orphan-блоки появляются редко — раз в 10 000 блоков. Если ускорить добычу блоков, не затрагивая время синхронизации, orphan-блоки будут появляться чаще. 

Разработчики Ethereum увеличили скорость добычи блока до 13 секунд, и майнеры регулярно добывают отвергнутые блоки.

Проблема синхронизации по времени

Чтобы использовать синхронизацию по времени, нужны часы. В криптовалютах есть свои часы и внутреннее время — timestamp. Оно не точное, потому что нет центральных часов, с которыми можно свериться.

Узел не может доверять timestamp, поэтому усредняет это значение: 

  1. Запрашивает локальное время у других узлов.
  2. Считает медиану выборки по времени.
  3. Подстраивает по этой медиане свое время. 

Такая синхронизация неидеальна: если ориентироваться на timestamp, новый блок может появиться раньше предыдущего.

Но время не обязательно считать в секундах. Для этого можно использовать любые интервалы вроде падающих капель воды. Главное, чтобы время было одинаковым на всех часах. Если у солдата спешат часы, он пойдет в атаку раньше остальных бойцов. 

Чтобы решить проблему синхронизации по времени, Solana изобрела децентрализованные часы — протокол  Proof of History. 

Как работает Proof of History

Proof of History работает как песочные часы. Песчинки в часах связаны нитью, словно бисер. Песок перетекает из верхней чаши в нижнюю.

Песчинки падают с разной скоростью, но мы можем посчитать количество песчинок в нижней чаше:

  1. Покрасим одну песчинку в зеленый цвет, другую — в красный, остальные красить не будем. 
  2. Сначала упадет зеленая песчинка, потом несколько бесцветных и красная. 
  3. Мы не знаем интервал падения песчинок в секундах, но знаем, сколько бесцветных песчинок упало между зеленой и красной. Мы можем сказать: красная песчинка упала через N песчинок после зеленой.
  4. Если по нитке отмотать цепочку песчинок до начала, то узнаем, что зеленая песчинка — X по счету. Красная песчинка — X + N. 

Proof of History — это хеш-функция с подтвержденным временем выполнения. Если циклично считать PoH и использовать результат для следующего расчета, на выходе получится цепочка связанных хешей — нить с песчинками.

Как работает Proof of History. Валидаторы считают PoH и записывают результаты: хеш PoH и порядковый номер хеширования — count. По этим результатам можно проверить, что лидер считал каждый PoH. Также можно доказать последовательность получения хешей: хеш Y был получен после хеша X и перед хешем Z.

Песчинки Proof of History можно красить — записывать в них события. Если считать хеши от первого значения PoH, можно определить относительное время события. Валидаторы проверяют порядок хешей PoH и узнают хронологический порядок транзакций.

Как PoH увеличивает пропускную способность блокчейна и решает проблему отвергнутых блоков

Solana создает расписание для узлов-валидаторов (Leader Schedule), чтобы синхронизировать их действия. Время в расписании измеряется в хешах Proof of History. Вот как это работает:

  1. Первый валидатор становится лидером на период от 0 до 1000 хешей PoH.
  2. Он считает хеш Proof of History, проверяет транзакцию и ставит на нее штамп. В него входит публичный ключ, значение и порядковый номер хеша PoH. 
  3. Лидер отправляет транзакцию двум валидаторам. Они проверяют ее и передают другим валидаторам.
  4. Период лидерства следующего валидатора — от 1001 до 2000 хешей. Валидатор считает время в Proof of History и знает, когда станет лидером. 

Алгоритм ротации лидеров снижает время добычи блока до 0.4 сек и решает проблему orphan-блоков. Валидаторы становятся лидерами по расписанию. Их рабочие смены (slot) не пересекаются: валидатор не создаст отвергнутый блок в чужую смену.

Опыт Solana: масштабирование без шардинга

Разработчики Ethereum планируют решить проблему масштабирования при помощи шардинга: сеть разбивают на несколько подсетей (шардов) с отдельным блокчейном и узлами. У этого решения есть недостатки: 

Solana масштабируется без шардинга благодаря таким разработкам:

  • протоколы передачи транзакций Turbine и Gulfstream;
  • распределенное хранение данных у архиваторов;
  • оптимизация записи транзакций Cloudbreak.

Turbine и Gulfstream разбивают транзакции на части (batch): 

  1. Лидер передает части транзакции двум случайным валидаторам. Это быстрее, чем передавать узлам полные блоки.
  2. Валидаторы обмениваются этими частями и так собирают полную транзакцию.

Обмен частями транзакций

Архиваторы — отдельные узлы, которые записывают batch от случайных валидаторов. Протокол архивации распределяет блокчейн между архиваторами. 

Cloudbreak оптимизирует многопоточную запись на диск: архиваторы быстро записывают небольшие фрагменты данных.

Если разбить блокчейн размером 1 гигабайт между сотней архиваторов, общий объем блокчейна в сети составит 1.33 ГБ: 1 гигабайт блокчейна и 0.33 гигабайта проверочных кодов. В биткоине узлы хранят по 1 гигабайту блокчейна, в сумме — 100 гигабайт.

Зачем блокчейну высокая пропускная способность

Во время тестов 50 узлов в сети Solana обработали 191 000 транзакций в секунду на пике нагрузки. Средняя пропускная способность сети — 60 000 TPS.

Высокая пропускная способность нужна ресурсоемким системам и приложениям: биржам, рекламным площадкам и файловым хранилищам.

Практический пример — работа провайдеров 5G. У вышек 5G малый радиус действия. Для вышек со скоростью 20 Мбит/с — меньше 200 метров.

Провайдерам нужно много вышек 5G. С ростом количества вышек станет сложно следить за верификацией абонентов и считать оплату за интернет

«Провайдерам нужно будет обрабатывать тысячи технических запросов каждой новой вышки. Блокчейн поможет автоматизировать учет трафика, посчитать оплату и верифицировать пользователей», — комментирует разработчик Solana

По подсчетам проекта Solana, владельцы смартфонов присылают вышкам 50 тысяч технических запросов в секунду. Solana сможет обработать такое количество транзакций и упростить провайдерам процессы верификации и оплаты. Благодаря этому обслуживание 5G будет дешевле, а тарифы — доступней.

Выводы

Если криптовалюты хотят конкурировать с централизованными системами, им нужно  повысить пропускную способность. А для этого — ускорить синхронизацию узлов.

Централизованные системы используют внутренние часы. Google синхронизирует базы данных по атомным часам, Яндекс — по центральному NTP-серверу. Proof of History — их децентрализованный аналог. 

Возможно, в будущем централизованные проекты будут использовать Proof of History как более простой способ синхронизации действий: переключения режимов работы, резервного копирования баз данных и распределенных расчетов.