Безбанковский лидер
Безбанковский лидер выполняет минимальный объем работы для создания действительного блока. Лидеру поручено входящие транзакции, сортировка и фильтрация действительных транзакций, организация их в записи, уничтожение записей и широковещательная рассылка клочков. В то время как валидатору нужно только собрать блок и воспроизвести выполнение правильно сформированных записей. Лидер выполняет в 3 раза больше операций с памятью перед выполнением любого банка, чем валидатор на обработанную транзакцию.
Обоснование
Нормальная банковская операция для траты должна выполнять 2 загрузки и 2 сохранения. С этим лидером конструкции выполняется только 1 загрузка. так что в 4 раза меньше работы account_db перед созданием блока. Операции сохранения, вероятно, будут дороже, чем операции чтения.
Когда этап воспроизведения начинает обрабатывать одни и те же транзакции, он может предположить, что PoH действителен и что все записи безопасны для параллельного выполнения. Платные счета, которые были загружены для создания блока, вероятно, все еще находятся в памяти, поэтому дополнительная нагрузка должна быть теплой, а стоимость, вероятно, будет амортизирована.
Комиссионный счет
fee account оплачивает транзакцию, которая будет включена в блок. Лидеру нужно только подтвердить, что на счету комиссии есть баланс для оплаты комиссии.
Кэш баланса
На время последовательных блоков лидеров лидер поддерживает временный кеш баланса для всех обработанных учетных записей комиссий. Кэш — это карта паб-ключей с лампами.
В начале первого блока кеш баланса пуст. В конце последнего блока кеш уничтожается.
Поиск балансового кэша должен ссылаться на одну и ту же базовую вилку на протяжении всего кэша. На границе блока кеш может быть сброшен вместе с базовой вилкой после того, как этап воспроизведения завершит проверку предыдущего блока.
Проверка баланса
Перед проверкой баланса лидер проверяет все подписи в транзакции.
- Убедитесь, что учетные записи не используются, а BlockHash действителен.
- Проверьте, присутствует ли в кеше учетная запись комиссии, или загрузите учетную запись из account_db и сохраните баланс лампорта в кеше.
- Если баланс меньше комиссии, отказаться от транзакции.
- Вычтите комиссию из баланса.
- Для всех ключей в транзакции, которые являются кредитно-дебетовыми и на которые ссылается инструкция, уменьшите их баланс до 0 в кэше. Плата за счет объявляется как кредит-дебет, но до тех пор, пока она не используется ни в каких инструкциях, ее баланс не будет уменьшен до 0.
Повтор лидера
Лидеры должны будут воспроизвести свои блоки в рамках стандартной операции повторного этапа.
Повтор лидера с последовательными блоками
Лидер может быть запланирован для производства нескольких блоков подряд. В этом сценарии лидер, вероятно, будет создавать следующий блок, пока воспроизводится этап повтора для первого блока.
Когда лидер завершает стадию воспроизведения, он может сбросить кеш баланса, очистив его, и установить новую вилку в качестве базы для кеша, которая может стать активной в следующем блоке.
Сброс кеша баланса
- В начале блока, если кеш баланса не инициализирован, установите базовую вилку для кеша баланса в качестве родителя блока и создайте пустой кеш.
- если кеш инициализирован, проверьте, есть ли у родителей блока новый замороженный банк, более новый, чем текущий базовый форк для кеша баланса.
- если существует родитель более новый, чем базовая вилка кеша, сбросить кеш на родителя.
Влияние на клиентов
Один и тот же комиссионный счет может многократно использоваться в одном и том же блоке до тех пор, пока он не будет использован инструкцией один раз в качестве кредита-дебета.
Клиенты, которые передают большое количество транзакций в секунду, должны использовать специальный счет для оплаты, который не используется в качестве кредита-дебета ни в одной инструкции.
Как только плата за счет используется в качестве кредита-дебета, проверка баланса не будет выполнена до тех пор, пока кэш баланса не будет сброшен.