Детерминированные комиссии за транзакции

В настоящее время транзакции включают поле комиссии, которое указывает максимальное поле комиссии, которое лидер слота может взимать за обработку транзакции. Кластер, с другой стороны, соглашается на минимальную плату. Если сеть перегружена, слот-лидер может отдавать приоритет транзакциям, предлагающим более высокие комиссии. Это означает, что клиент не будет знать, сколько было собрано, пока кластер не подтвердит транзакцию и не проверит остаток. Пахнет именно тем, что нам не нравится в «газе» Эфириума, недетерминизмом.

Плата за перегрузку

Каждый валидатор использует сигнатур на слот (SPS) для оценки перегрузки сети и цель SPS для оценки желаемой вычислительной мощности кластера. Валидатор узнает цель SPS из конфигурации генезиса, тогда как он вычисляет SPS из недавно обработанных транзакций. Конфигурация генезиса также определяет цель lampports_per_signature, которая представляет собой плату, взимаемую за подпись, когда кластер работает с целью SPS.

Расчет сборов

Клиент использует JSON RPC API, чтобы запросить у кластера текущие параметры платы. Эти параметры помечены хэшем блока и остаются в силе до тех пор, пока этот хэш блока не станет достаточно старым, чтобы быть отклоненным лидером слота.

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

Параметры платы

В первой реализации этого дизайна единственным платным параметром является lampports_per_signature. Чем больше подписей необходимо проверить кластеру, тем выше плата. Точное количество лампортов определяется отношением SPS к целевому значению SPS. В конце каждого слота кластер снижает значение lampports_per_signature, когда SPS ниже целевого значения, и повышает его, когда оно превышает целевое значение. Минимальное значение для lamports_per_signature составляет 50% от целевого значения lamports_per_signature, а максимальное значение в 10 раз превышает целевое значение `lamports_per_signature'.

Будущие параметры могут включать:

Атаки

Перехват цели SPS

Группа валидаторов может централизовать кластер, если им удастся убедить его поднять цель SPS выше точки, за которой остальные валидаторы могут не отставать. Повышение целевого показателя приведет к снижению комиссий, что, по-видимому, создаст больший спрос и, следовательно, более высокий TPS. Если у валидатора нет оборудования, способного обрабатывать такое количество транзакций с такой скоростью, его голоса подтверждения в конечном итоге станут такими длинными, что кластер будет вынужден загрузить его.