Валидатор
История
Когда мы впервые запустили Solana, целью было снизить риски для наших требований TPS. Мы знали, что при оптимистичном контроле параллелизма и достаточно длинных лидерских слотах консенсус PoS не представлял самого большого риска для TPS. Это была проверка подписи на основе графического процессора, конвейерная обработка программного обеспечения и параллельный банкинг. Так родился ТПУ. Достигнув отметки в 100 000 TPS, мы разделили команду на одну группу, работающую над достижением 710 000 TPS, и другую, чтобы конкретизировать конвейер валидатора. Так родился TVU. Текущая архитектура является следствием постепенного развития с таким порядком и приоритетами проекта. Это не отражение того, что мы когда-либо считали наиболее технически элегантным срезом этих технологий. В контексте ротации лидеров четкое различие между лидерством и валидацией стирается.
Разница между проверкой и опережением
Фундаментальное различие между конвейерами заключается в наличии PoH. В лидере мы обрабатываем транзакции, удаляя плохие, а затем помечаем результат PoH-хешем. В валидаторе мы проверяем этот хэш, отделяем его и точно так же обрабатываем транзакции. Единственное отличие состоит в том, что если валидатор увидит плохую транзакцию, он не сможет просто удалить ее, как это делает лидер, потому что это приведет к изменению хэша PoH. Вместо этого он отклоняет весь блок. Другое различие между конвейерами заключается в том, что происходит после банковского обслуживания. Лидер передает записи нижестоящим валидаторам, тогда как валидатор уже сделал это в RetransmitStage, что является оптимизацией времени подтверждения. Конвейер проверки, с другой стороны, имеет один последний шаг. Каждый раз, когда он заканчивает обработку блока, ему необходимо взвесить все форки, которые он наблюдает, возможно, проголосовать, и если это так, сбросить свой хэш PoH на хэш блока, за который он только что проголосовал.
Предлагаемый дизайн
Мы разворачиваем множество слоев абстракции и создаем единый конвейер, который может включать режим лидера всякий раз, когда идентификатор валидатора появляется в расписании лидера.
Заметные изменения
- Поднимите FetchStage и BroadcastStage из TPU
- BankForks переименован в Banktree
- TPU переходит на новый крейт без сокетов под названием solana-tpu.
- BankingStage TPU поглощает ReplayStage
- ТВУ уходит
- Новый RepairStage поглощает Shred Fetch Stage и запросы на ремонт.
- Служба JSON RPC не является обязательной и используется для отладки. Вместо этого он должен быть частью отдельного исполняемого файла solana-blockstreamer.
- Новый MulticastStage поглощает ретранслируемую часть RetransmitStage.
- MulticastStage после Blockstore