При скорости десять блоков в секунду Kaspa производит примерно 864 000 блоков в день. Bitcoin — 144. Именно эта скорость делает Kaspa пригодной для субсекундных платежей и отзывчивых ковенант-контрактов — но она же означает, что алгоритм корректировки сложности сети должен работать принципиально иначе, чем в Bitcoin. Двухнедельный цикл пересчёта был бы абсурдным при таком темпе: сложность отставала бы от изменений хешрейта на дни.
Алгоритм корректировки сложности Kaspa — DAA — решает это с помощью выборочного окна в 2641 блок, которое пересчитывает целевую сложность практически при каждом новом блоке. В этой статье рассказывается, как формируется это окно, как оно разграничивает хорошо связанные блоки от устаревших и как итоговый DAA score становится часами консенсуса, на которые опираются Kaspa Safe, Escrow и Deposit для ончейн-таймлоков.
Зачем BlockDAG нужен собственный DAA
Алгоритм корректировки сложности Bitcoin пересчитывается каждые 2016 блоков — примерно раз в две недели. При одном блоке каждые десять минут это окно покрывает достаточно статистической дисперсии, чтобы удерживать время блока около десятиминутной цели. Алгоритм прост и проверен временем, но он предполагает единую цепочку, где блоки приходят по одному.
BlockDAG в Kaspa производит множество блоков параллельно. При 10 BPS те же 2016 блоков проходят примерно за три с половиной минуты. Наивный пересчёт на таком коротком окне колебался бы дико: кратковременное падение хешрейта обрушило бы сложность, привлекая майнеров обратно и перелетая цель в другую сторону. Протоколу нужен алгоритм, который:
- берёт достаточно блоков для сглаживания дисперсии, но достаточно мало, чтобы реагировать в течение минут;
- работает с DAG, где блоки имеют несколько родителей, а не с единой цепочкой;
- разграничивает хорошо связанные блоки от устаревших или разобщённых.
Результат задокументирован в базе знаний разработчиков вики Kaspa и реализован в исходном коде протокола difficulty.go.
Виртуальный блок: откуда начинается окно
Каждый узел Kaspa поддерживает виртуальный блок — не настоящий добытый блок, а синтетическую ссылку, указывающую на все текущие кончики DAG. У виртуального блока есть выбранный родитель (кончик, выбранный протоколом GHOSTDAG), а проход вниз по цепочке выбранных родителей даёт выбранную цепочку.
Окно DAA отсчитывается назад от перспективы виртуального блока вдоль этой выбранной цепочки. Поскольку виртуальный блок обновляется при каждом новом блоке, окно всегда актуально. Представьте себе скользящее среднее, привязанное к текущему видению консенсуса узлом, — не фиксированный календарный интервал, а фиксированную выборку работы.
Что содержит окно в 2641 блок
Окно — это не просто «последние 2641 блок». Это 2641 блок, отсчитанных назад от виртуального блока, отфильтрованных по связности:
- Все синие блоки в прошлом выбранной цепочки включены. Синий блок был хорошо связан на момент объединения — он внёс вклад в безопасность консенсуса. Если блок синий, он гарантированно находится внутри окна DAA.
- Красные блоки (блоки, которые были плохо связаны или пришли слишком поздно, чтобы стать синими) включаются только в том случае, если они не являются чрезмерно устаревшими. Практический порог — примерно 45 минут: красный блок, чья временная метка отстаёт от объединившего его блока более чем на ~45 минут, считается сильно разобщённым и исключается.
Эта фильтрация важна. Без неё всплеск очень поздних блоков мог бы исказить выборку временных меток и исказить сложность. Исключая наиболее разобщённые красные блоки, DAA удерживает свои оценки времени привязанными к блокам, которые фактически участвовали в консенсусе.
Окно DAA: выборка из 2641 блока, отсчитанных назад от перспективы виртуального блока. Включает все синие блоки и красные блоки, которые не являются чрезмерно устаревшими. Используется для вычисления сложности майнинга и получения DAA score.
Как вычисляется сложность
Алгоритм берёт временные метки и целевые значения сложности блоков в окне и вычисляет новую цель. Основная логика:
1. Выборка временных меток. Для каждого блока в окне записывается его временная метка. Поскольку окно включает как синие, так и квалифицированные красные блоки, выборка отражает фактическую скорость, с которой сеть производила работу, — а не только скорость выбранной цепочки.
2. Расчёт фактической скорости работы. Суммируется работа всех блоков в окне (работа каждого блока — функция его целевой сложности). Делится на время между первым и последним блоком в окне. Это даёт наблюдаемый хешрейт.
3. Сравнение с целевой скоростью. Kaspa нацелена на определённую скорость блоков в секунду (в настоящее время 10 BPS). Ожидаемая работа за длительность окна — это целевая скорость × длительность окна × работа-на-блок-при-целевой-сложности.
4. Корректировка сложности. Если наблюдаемая скорость работы превышает цель, сложность увеличивается. Если не дотягивает — уменьшается. Корректировка пропорциональная, а не ступенчатая — никакого дискретного «события пересчёта». Каждый новый блок фактически пересчитывает заново.
При 10 BPS окно в 2641 блок охватывает примерно 264 секунды — около 4,4 минут. Изменение хешрейта отражается в сложности в течение минут, а не недель.
DAA score: часы консенсуса
DAA score — это нарастающий счётчик, получаемый из бухгалтерии окна DAA:
DAA score = blue score + количество красных блоков, успешно объединённых и вознаграждённых
Где blue score — это количество синих блоков в прошлом данного блока. DAA score всегда ≥ blue score, потому что он также считает вознаграждённые красные блоки.
Этот счётчик служит двум целям:
1. График эмиссии. Coinbase-субсидия для каждого блока рассчитывается на основе текущего DAA score. Поскольку DAA score продвигается с предсказуемой скоростью (примерно отслеживая общее количество произведённых блоков), он обеспечивает стабильную основу для хроматической кривой эмиссии.
2. Программируемые часы для ковенантов. Скрипты ковенантов могут проверять DAA score транзакции расходования относительно порога. Вместо сравнения реальных временных меток (которые майнеры могут манипулировать в пределах допуска) ковенанты сравнивают DAA score — значение, с которым согласна вся сеть и которое продвигается со скоростью, привязанной к фактическому производству блоков.
При 10 BPS DAA score продвигается примерно на 10 единиц в секунду. Ковенант, требующий задержки в 600 единиц, обеспечивает примерно одну минуту реального времени.
Граничные случаи, которые обрабатывает окно
Всплеск хешрейта. Блоки приходят быстрее 10 BPS. Окно заполняется свежими временными метками, наблюдаемая скорость работы растёт, и сложность увеличивается — в течение минут.
Падение хешрейта. Блоки замедляются. Окно растягивается во времени, наблюдаемая скорость работы падает, и сложность уменьшается — снова в течение минут.
Крупная реорганизация. Выбранная цепочка сдвигается. Выбранный родитель виртуального блока меняется, и окно DAA пересчитывается с новой перспективы. Поскольку окно имеет глубину всего ~4,4 минуты, реорганизация, затрагивающая хвост окна, встречается редко, но обрабатывается: новое окно отражает историю новой выбранной цепочки.
Всплеск красных блоков. Если много блоков приходит с опозданием и классифицируются как красные, они всё равно вносят свои временные метки в окно DAA (если не превышают порог устаревания ~45 минут). Это предотвращает искажение сложности вниз из-за внезапного притока поздних блоков.
Как Kaspa Forge использует DAA score
DAA score — это не просто параметр майнинга. Это временная привязка, на которую опираются ончейн-ковенанты во всём стеке Kaspa Forge.
Kaspa Safe использует DAA score для задержек вывода. Когда владелец хранилища инициирует вывод, ковенант обеспечивает период ожидания, измеряемый в единицах DAA score. Ключ тревоги может отменить вывод в течение этого окна. Поскольку DAA score обеспечивается консенсусом, задержка предсказуема и не может быть обойдена манипуляцией временными метками.
Kaspa Escrow использует DAA score для таймаутов сделок. Если ни одна из сторон не завершает P2P-сделку, путь таймаута эскроу-ковенанта активируется после достижения порога DAA score. Это предотвращает бессрочную блокировку средств.
Kaspa Deposit использует DAA score для периодов блокировки залога. Арендодатель или поставщик услуг может потребовать, чтобы залоговые средства оставались заблокированными ковенантом на минимальную длительность в единицах DAA score, с путями претензии и возврата, управляемыми тем же счётчиком.
В каждом случае скрипт ковенанта содержит проверку вроде:
// Псевдокод: обеспечить задержку в DAA score
if (tx.daaScore - lockStartDaaScore) >= requiredDelay:
allow timeout / refund path
Этот шаблон работает, потому что каждый узел Kaspa согласован по DAA score каждой транзакции. Никакой неоднозначности, никакой манипуляции временными метками майнерами и никакой зависимости от внешних часов.
Kaspa Safe обеспечивает задержки вывода с помощью DAA score — часов консенсуса, которые ни один майнер не может отмотать назад. Создайте хранилище и увидьте задержку в действии на Kaspa Safe, или прочитайте полное руководство по контракту в документации хранилища.
Компромиссы и честные ограничения
Размер окна vs. отзывчивость. Окно в 2641 блок при 10 BPS — это ~4,4 минуты. Это отзывчиво, но означает, что сложность может колебаться больше, чем в Bitcoin, на коротких интервалах. Этот компромисс сознателен: Kaspa отдаёт приоритет быстрой адаптации абсолютной стабильности.
Включение красных блоков консервативно. Порог устаревания ~45 минут означает, что сильно разобщённые блоки исключаются из окна DAA. Это предотвращает манипуляцию временными метками, но также означает, что всплеск очень поздних блоков не вносит данных о времени в расчёт сложности. На практике это встречается редко и самоисправляется.
DAA score — не реальное время. Авторы ковенантов должны помнить, что DAA score продвигается примерно на 10 единиц в секунду, но фактическая скорость зависит от состояния сети. Падение хешрейта замедляет продвижение DAA score; всплеск хешрейта ускоряет его. Для большинства случаев использования ковенантов (задержки от минут до часов) эта дисперсия пренебрежимо мала. Для очень длительных периодов блокировки (месяцы) отклонение может быть заметным — хотя корректировка сложности Kaspa удерживает скорость близкой к цели.
Пока нет выбираемого майнерами минимального гонорара. Минимальная комиссия ретрансляции протокола — это антиспам-мера, а не майнинговая политика. Майнеры в настоящее время выбирают транзакции по размеру комиссии, но протокольно установленного минимума нет. Это отдельная тема от DAA, но она влияет на рынок комиссий, в котором участвуют все транзакции Kaspa Forge.
Итоги
DAA в Kaspa заменяет периодический пересчёт непрерывной корректировкой со скользящим окном. Окно в 2641 блок — отфильтрованное так, чтобы включать синие блоки и неустаревшие красные блоки — даёт алгоритму достаточно данных для сглаживания дисперсии, оставаясь отзывчивым к изменениям хешрейта в течение минут. Результирующий DAA score выполняет двойную функцию: он управляет графиком эмиссии и служит часами консенсуса, которые ончейн-ковенанты используют для таймлоков. Для продуктов Kaspa Forge это означает, что задержки вывода, таймауты сделок и периоды блокировки залога обеспечены самим протоколом — а не временными метками, которые майнеры могут подправить.
Продолжить изучение
архитектура транзакций Kaspa Forge
Следующий шаг: перейти к документации протоколов
FAQ
Какой размер окна DAA в Kaspa?
Окно DAA составляет 2641 блок, отсчитанных назад от перспективы виртуального блока. В него входят все синие блоки и любые красные блоки, которые не являются чрезмерно устаревшими.
Чем DAA score отличается от blue score?
Blue score считает только синие блоки в прошлом данного блока. DAA score добавляет количество красных блоков, которые были успешно объединены и получили вознаграждение, давая более полную меру совокупной работы.
Почему Kaspa использует DAA score вместо реального времени для таймлоков?
Временные метки можно манипулировать майнерами в пределах допуска. DAA score — это счётчик, поддерживаемый консенсусом, который продвигается с предсказуемой скоростью, что делает его более надёжными часами для ончейн-контрактов.
Как часто Kaspa корректирует сложность майнинга?
Сложность пересчитывается непрерывно. Каждый новый блок берёт выборку из последних 2641 блока, поэтому корректировка фактически плавная, а не периодическая.
Что происходит со сложностью, если хешрейт внезапно падает?
Поскольку окно составляет всего ~4,4 минуты при 10 BPS, падение хешрейта отражается в сложности в течение минут — гораздо быстрее, чем цикл корректировки Bitcoin примерно раз в две недели.
Могут ли красные блоки влиять на сложность?
Да. Красные блоки, попадающие в окно DAA, вносят свои временные метки в расчёт сложности. Однако блоки, которые слишком разобщены (примерно 45+ минут устаревания), полностью исключаются из окна.
Держите KAS там, где кражу можно отменить
Ковенант-сейф в мейннете Kaspa: ваши ключи, ваши правила, наш инструмент. Ончейн — бесплатно, навсегда.
Создать сейф