Как посчитать вес подписей под коммитом CometBFT

Простой подсчёт подписей скрывает вес голосов и может учесть голос за nil. Используйте флаги block ID и набор валидаторов именно высоты коммита.

Разделите голоса по типам

Укажите в RPC адрес CometBFT с нужной историей. Прочтите signed_header.commit.signatures и загрузите все страницы набора валидаторов той же высоты. Сопоставьте голоса за блок с консенсусными адресами.

curl -fsS "$RPC/commit?height=12000"
curl -fsS "$RPC/validators?height=12000&page=1&per_page=100"

В CometBFT 0.38 флаг 2 обозначает голос за блок, 3 — за nil, 1 — отсутствие. Если веса равны 45, 30 и 25 и за блок подписались первые двое, суммарный вес составляет 75 из 100.

Отделите подсчёт от проверки подлинности

Результат описывает коммит в ответе ноды. Для проверки недоверенного ответа дополнительно нужны заголовок, криптографическая проверка подписей и доверенный набор валидаторов. Когда читаете last_commit из блока, уточните его собственную высоту. github.com CometBFT RPC