Kaspa создаёт блок примерно раз в секунду. При такой скорости вопрос, на который Bitcoin отвечает без труда — *«как давно создан этот UTXO?»* — становится по-настоящему непростым. В DAG нет одной цепи и одной высоты. Ответ Kaspa — DAA score: консенсусно согласованные часы, которые каждая нода вычисляет идентично. Они используются для регулировки сложности, измерения возраста UTXO и — в ковенантах Kaspa Forge — для обеспечения исполнения спорных окон и задержек хранилищ.
В этой статье разбирается, что такое DAA score, как он связан с blue score и окном регулировки сложности, что означает прунинг для высокопроизводительного blockDAG и как GHOSTDAG обеспечивает быструю практическую финальность. В конце мы покажем, как Kaspa Forge задаёт тайм-ауты эскроу и хранилищ в единицах DAA score, а не в реальных часах.
Проблема: как отсчитывать время в DAG
В Bitcoin блоки образуют одну цепь. Высота блока однозначна, а метки времени примерно монотонны. Ковенантные опкоды вроде OP_CHECKSEQUENCEVERIFY измеряют «относительное время» в интервалах между блоками — всё просто.
blockDAG Kaspa устроен иначе. Несколько блоков создаётся параллельно; протокол GHOSTDAG выбирает для каждого из них selected parent, формируя виртуальную «выбранную цепь», но эта цепь может реорганизоваться. В вики Kaspa отмечается, что выбранная цепь «быстро стабилизируется, оставляя нестабильным лишь небольшой суффикс», но простой подсчёт блоков по всему DAG включает красные (не синие) блоки, которые могут как участвовать в консенсусе, так и не участвовать. Наивная метрика «высота блока» поэтому недетерминирована между нодами.
Kaspa нужен детерминированный, монотонно возрастающий счётчик, с которым согласны все честные ноды. Этим счётчиком является DAA score.
Blue score: каркас DAG
Blue score — количество синих блоков в прошлом данного блока (предки, достижимые через связи selected parent, плюс объединённые синие блоки). Эта метрика показывает, насколько глубоко блок находится в «blue-work».
Алгоритм GHOSTDAG классифицирует каждый блок как синий (хорошо связанный, способствующий безопасности) или красный (разрозненный или запоздавший). С точки зрения любого блока цепи *C* его mergeset — это множество блоков, которые есть в прошлом *C*, но отсутствуют в прошлом selected parent блока *C*. Синие блоки в mergeset получают награду coinbase от *C*; красные блоки, попавшие в окно DAA, тоже приносят награду майнеру, выполнившему объединение.
Blue score привязан к конкретному блоку, но для выбранной цепи он сходится — две ноды, видящие один и тот же конец выбранной цепи, договорятся о его blue score.
DAA score: консенсусные часы Kaspa
DAA score = blue score блока + суммарное количество красных блоков, которые были успешно объединены и получили вознаграждение к этому моменту. Значение монотонно возрастает и управляет графиком эмиссии.
DAA score — это величина, которую читает алгоритм регулировки сложности для калибровки сложности майнинга, а также метрика, на которую ссылаются ковенанты Silverscript для временных условий (age >= delay). Думайте о нём как о «консенсусном времени» — не о реальных секундах, а о тиках внутренних часов реестра, которые каждая нода вычисляет идентично.
Почему не использовать метки времени? В DAG с параллельными блоками часы майнеров расходятся. Медианное время прошлых блоков (окно из 263 блоков, согласно вики) помогает для грубой сортировки, но ковенант, блокирующий средства до тех пор, пока UTXO не достигнет возраста в 72 часа, нуждается в точном детерминированном пороге. DAA score его обеспечивает.
Окно DAA: регулировка сложности в blockDAG
Алгоритм регулировки сложности Kaspa использует скользящее окно из 2 641 блока — набор синих блоков плюс квалифицирующиеся красные блоки, отсчитанные назад от перспективы виртуального блока. Вики объясняет, что блоки за пределами этого окна — те, «между добычей и публикацией которых прошло не менее 45 минут, то есть они крайне разрозненны».
Алгоритм суммирует работу в этом окне, делит на его временную протяжённость и корректирует сложность так, чтобы поддерживать целевую скорость создания блоков (в настоящее время ~10 блоков в секунду). Поскольку окно включает красные блоки, которые были фактически объединены, а не осиротевшие, DAA score растёт быстрее, чем blue score в отдельности, отражая реальную пропускную способность реестра.
При скорости ~10 блоков в секунду DAA score увеличивается примерно на 864 000 в сутки. Спорное окно в 72 часа в эскроу-контракте Kaspa Forge соответствует примерно 259 200 единицам DAA score — это преобразование пользовательский интерфейс выполняет прозрачно, когда пользователь выбирает пресет.
Прунинг: сокращение реестра
blockDAG со скоростью 10 блоков в секунду генерирует на порядки больше данных в сутки, чем Bitcoin. Без прунинга запуск полной ноды в конечном счёте потребовал бы терабайтов хранилища и часов на синхронизацию.
Прунинг отбрасывает тела блоков (транзакции, свидетельства), которые больше не нужны для консенсуса, сохраняя при этом:
- набор UTXO — текущее множество расходуемых выходов;
- подтверждение полной структуры DAG — чтобы вновь синхронизированная нода могла проверить, что получила корректный снимок UTXO;
- недавние блоки — в пределах горизонта прунинга, необходимые для ретрансляции блоков и окна DAA.
Граница называется точкой прунинга. Блоки старше неё можно безопасно отбросить. Прунинг-нода по-прежнему способна валидировать все новые транзакции и полноценно участвовать в консенсусе. Однако она не может передавать исторические данные о блоках новым нодам, выполняющим синхронизацию с нуля; за это отвечают архивные ноды.
Активные исследования Kaspa включают KIP «Расширенная масс-формула для смягчения разбухания состояния» (указана как находящаяся в разработке на вики), целью которой является ограничение скорости роста самого набора UTXO — отдельная, но дополняющая задача по отношению к прунингу данных блоков.
Для операторов нод прунинг — это то, что делает ноду Kaspa реалистичной на обычном оборудовании: вместо неограниченного роста использование диска стабилизируется примерно на уровне (размер набора UTXO + размер окна прунинга).
Финальность: насколько быстро «готово»?
Гарантия безопасности GHOSTDAG состоит в том, что выбранная цепь устойчива: она может реорганизоваться, но только в коротком суффиксе. Чем глубже блок в blue work, тем дороже обходится его отмена.
На практике Kaspa достигает быстрой практической финальности:
- При скорости ~10 блоков в секунду транзакция, включённая в синий блок на глубине 100 блоков (примерно 10 секунд реального времени), уже накопила значительный объём blue work.
- Платёжная интеграция Kaspa в нашем стеке использует настраиваемый порог подтверждений, основанный на глубине по blue score — количестве приращений blue score после включения транзакции.
- Для ковенантных тайм-локов (задержки хранилищ, окна эскроу) финальность связана не столько с необратимостью, сколько с детерминированным счётчиком возраста. Как только DAA score UTXO превысит порог, условие ковенанта считается выполненным — никакой неоднозначности.
Ключевое отличие от Bitcoin: финальность — не магическое число вроде «6 подтверждений». Это совокупная blue work над блоком, а структура GHOSTDAG делает её одновременно измеримой и быстрорастущей.
Как Kaspa Forge использует DAA score в продакшне
Связь между DAA score и нашим инструментарием конкретна и видна каждому пользователю Kaspa Escrow и Kaspa Safe.
Спорные окна эскроу
При создании P2P-сделки в Kaspa Escrow покупатель и продавец выбирают спорное окно из шести пресетов: 24 / 48 / 72 / 96 / 120 / 168 часов. Внутри интерфейс конвертирует их в приращения DAA score на основе текущей скорости создания блоков (~864 000 в сутки при 10 блоках в секунду). Ончейн-ковенант escrow.sil хранит их как параметры конструктора disputeWindow и arbiterDeadline — оба номинированы в единицах DAA.
Контракт обеспечивает два временных шлюза:
autoRelease: mode == ACTIVE && age >= disputeWindow → funds to seller, keyless
timeout: mode == DISPUTED && age >= arbiterDeadline → funds per timeoutTo, keyless
Здесь age — это возраст UTXO в единицах DAA score, то есть разница между текущим DAA score и значением на момент создания эскроу-UTXO. Каждая нода вычисляет одно и то же значение.
Задержки хранилищ
Ковенант хранилища (как работает хранилище) использует тот же механизм. Когда владелец хранилища инициирует вывод, путь complete() требует age >= delay — опять же в единицах DAA. Ключ тревоги может отменить операцию в течение этого окна. Путь inheritAuto() работает идентично для наследования: age >= inheritDelay при autoInherit == 1.
Слой наблюдения
Наш бэкенд опрашивает ноду через gRPC каждые 10 секунд. Для эскроу-сделок он отслеживает возраст каждого UTXO в единицах DAA score и отправляет предупреждения на 50 % и 90 % спорного окна, а также примерно за 20 % до дедлайна арбитра. Для хранилищ он напоминает владельцу проверить статус на ≥80 % задержки наследования.
Ничто из этого не требует, чтобы сервер хранил ключи. Наблюдатель лишь транслирует безключевые ковенантные пути (autoRelease, complete, inheritAuto) в нужный момент по DAA score — сам ковенант определяет, кто получит средства.
Почему DAA score, а не реальное время
Естественный вопрос: почему не метки времени? В блокчейне с одной цепью медианное время прошлых блоков — приемлемое приближение. В blockDAG со скоростью 10 блоков в секунду манипуляция метками времени проще (параллельные блоки, расхождение часов майнеров), а консенсус требует точного единогласия. DAA score вычисляется идентично каждой нодой из одной и той же структуры DAG — никакой неоднозначности, никакого дрейфа, никакой поверхности атаки через манипуляцию часами.
Компромисс — точность: спорное окно «72 часа» может длиться 70 или 75 реальных часов в зависимости от колебаний хешрейта. При скорости 10 блоков в секунду и относительно стабильном хешрейте Kaspa разброс невелик — и детерминизм того стоит.
Каждое спорное окно, задержка хранилища и таймер наследования в Kaspa Forge обеспечивается ончейн-ковенантом, а не серверными часами. Путь autoRelease() в Kaspa Escrow может транслировать любой желающий, как только порог DAA score достигнут, и средства всё равно поступят туда, куда указывает контракт. То же самое касается задержек вывода из хранилищ в Kaspa Safe.
Компромиссы и честные ограничения
- DAA score ≠ реальное время. Если хешрейт резко упадёт (например, крупный майнер отключится), DAA score увеличивается медленнее, и окно «72 часа» может растянуться. Регулировка сложности компенсирует это, но с задержкой. Пользователям, выбирающим очень короткие спорные окна, стоит это учитывать.
- Прунинг имеет свою цену. Прунинг-нода не способна поддерживать новых пиров при начальной загрузке; архивные ноды по-прежнему необходимы для первой синхронизации. Экосистема зависит от того, достаточно ли операторов решатся на запуск архивной инфраструктуры.
- Финальность вероятностна, а не абсолютна. Гарантия устойчивости GHOSTDAG означает, что глубокие реорганизации астрономически дороги, но слово «невозможно» мы не используем. Для крупных транзакций всегда разумно подождать большей глубины по DAA score.
- Разрешение ковенантного
age— по тикам DAA. Гранулярность ниже одного тика DAA недоступна. При скорости 10 блоков в секунду каждый тик — примерно 100 мс, что подходит для окон, измеряемых днями, но не для субсекундных интервалов.
- Миграция точки прунинга при обновлениях протокола может потребовать повторной синхронизации исторических данных на архивных нодах. Операторам стоит следить за заметками к релизам, касающимся изменений точки прунинга при хард-форках.
---
FAQ
В: Что такое DAA score в Kaspa? О: DAA score равен blue score блока плюс суммарное количество красных блоков, которые были объединены и получили вознаграждение. Это согласованный консенсусом монотонно возрастающий счётчик, который управляет графиком эмиссии и служит временной метрикой в ковенантных скриптах.
В: Как работает прунинг в blockDAG Kaspa? О: Прунинг удаляет старые тела блоков за точкой прунинга, сохраняя набор UTXO и подтверждение структуры DAG. Прунинг-нода валидирует все новые транзакции, но не может передавать полную историю синхронизирующимся узлам — этим занимаются архивные ноды.
В: Почему спорные окна эскроу используют DAA score, а не часы? О: DAA score детерминирован: каждая нода вычисляет одно и то же значение из DAG. Реальное время не является консенсусно согласованным в DAG с параллельными блоками. Kaspa Forge конвертирует часовые пресеты в приращения DAA score, чтобы ончейн-ковенант обеспечивал их точное исполнение.
В: Чем финальность в Kaspa отличается от Bitcoin? О: Bitcoin измеряет финальность через подтверждения блоков вдоль одной цепи. GHOSTDAG в Kaspa измеряет её совокупной blue work в DAG — чем глубже blue work, тем экспоненциально выше стоимость отмены, и она растёт быстрее, потому что несколько блоков создаётся каждую секунду.
В: Сколько единиц DAA score в сутках? О: При текущей скорости Kaspa — примерно 10 блоков в секунду — DAA score увеличивается примерно на 864 000 в сутки. Это значение может незначительно отклоняться, если хешрейт изменится до того, как регулировка сложности компенсирует разницу.
В: Может ли DAA score уменьшиться? О: Нет. DAA score монотонно возрастает. Даже при реорганизации выбранной цепи DAA score нового конца цепи не меньше предыдущего — это следствие свойства устойчивой цепи в GHOSTDAG.
FAQ
Что такое DAA score в Kaspa?
DAA score равен blue score блока плюс суммарное количество красных блоков, которые были объединены и получили вознаграждение. Это согласованный консенсусом монотонно возрастающий счётчик, который управляет графиком эмиссии и служит временной метрикой в ковенантных скриптах.
Как работает прунинг в blockDAG Kaspa?
Прунинг удаляет старые тела блоков за точкой прунинга, сохраняя при этом набор UTXO и подтверждение структуры DAG. Прунинг-нода валидирует все новые транзакции, но не может передавать полную историю синхронизирующимся узлам — этим занимаются архивные ноды.
Почему спорные окна эскроу используют DAA score, а не часы?
DAA score детерминирован: каждая нода вычисляет одно и то же значение из DAG. Реальное время не является консенсусно согласованным в DAG с параллельными блоками. Kaspa Forge конвертирует часовые пресеты в приращения DAA score, чтобы ончейн-ковенант обеспечивал их точное исполнение.
Чем финальность в Kaspa отличается от Bitcoin?
Bitcoin измеряет финальность через подтверждения блоков вдоль одной цепи. GHOSTDAG в Kaspa измеряет её совокупной blue work в DAG — чем глубже blue work, тем экспоненциально выше стоимость отмены, и она растёт быстрее, потому что несколько блоков создаётся каждую секунду.
Сколько единиц DAA score в сутках?
При текущей скорости Kaspa — примерно 10 блоков в секунду — DAA score увеличивается примерно на 864 000 в сутки. Это значение может незначительно отклоняться, если хешрейт изменится до того, как регулировка сложности компенсирует разницу.
Может ли DAA score уменьшиться?
Нет. DAA score монотонно возрастает. Даже при реорганизации выбранной цепи DAA score нового конца цепи не меньше предыдущего — это следствие свойства устойчивой цепи в GHOSTDAG.
Держите KAS там, где кражу можно отменить
Ковенант-сейф в мейннете Kaspa: ваши ключи, ваши правила, наш инструмент. Ончейн — бесплатно, навсегда.
Создать сейф
