Транзакция, покинувшая ваш кошелёк, — ещё не платёж. Это предложение: подписанное сообщение вида «потратить эти UTXO, создать вот такие новые». Между этим предложением и подтверждённым платежом находится промежуточная зона, которую поддерживает каждая полная нода, — мемпул, и у мемпула свои правила о том, что он хранит, что разглашает, а что молча выбрасывает.
Большинство жалоб «моя транзакция зависла» на Kaspa на самом деле — истории про мемпул. Правила за ними простые, и, когда вы их увидите, всё становится вполне предсказуемым.
Проблема: отправка — ещё не доставка
Два допущения порождают большую часть путаницы:
- «Я отправил, значит, у каждой ноды она есть». На самом деле распространение — это слухи: ноды объявляют пирам хеши транзакций и отдают полные данные по запросу. Не каждая нода держит вашу транзакцию, и ни одна не обязана хранить её вечно.
- «Если транзакция в мемпуле, её в конце концов добудут». Майнеры выбирают транзакции по политике — на практике сначала самые доходные. В консенсусе нет ничего, что обязывало бы кого-то вообще включать вашу транзакцию.
Значит, должно существовать правило сбора мусора, и в Kaspa оно есть.
Мемпул — хранимый локально нодой набор корректных, ещё не включённых транзакций в оперативной памяти. Это состояние ноды, а не состояние цепи: оно может отличаться от ноды к ноде, не покрывается proof-of-work и может быть потеряно или пересобрано без какого-либо влияния на реестр.
Как работает механизм, шаг за шагом
1. Попадание. Транзакция достигает ноды одним из двух способов: через RPC — её подаёт кошелёк или приложение, работающее со своей нодой, — или через P2P-сеть, релеем от пира. Это различие важнее любой другой детали здесь.
2. Приём. Нода проверяет транзакцию по своему текущему представлению набора UTXO и собственной политике — включая порог минимальной комиссии. Порог существует для борьбы со спамом и настраивается на каждой ноде (софт ноды exposes его как параметр командной строки).
3. Разглашение. После приёма нода объявляет активным пирам хеш транзакции — ровно так же, как объявляет хеши блоков. Транспорт построен на TCP, а пиры непрерывно поддерживаются менеджером соединений. Полные тела транзакций передаются по запросу, поэтому разглашение остаётся дешёвым.
4. Ожидание. Транзакция сидит в мемпуле, пока её не подберёт майнер. Выбор экономический: когда в блоке есть место, майнер берёт самые доходные транзакции, которые помещаются. Выполнение релейного минимума лишь даёт вам место *в очереди*, но не выводит *из* неё.
5. Включение или вытеснение. Либо транзакцию включают в блок и мержат в DAG — и тогда она уходит из-под контроля мемпула в область консенсуса, — либо не включают, и запускается отсчёт до истечения срока.
6. Истечение. Транзакция, пришедшая от пира и не включённая за 60 блоков, выбрасывается из мемпула. Транзакция, поданная через RPC, не истекает никогда; нода время от времени рассылает её повторно, и убрать её можно только перезапуском ноды.
Схема двух путей:
signed tx
├─ path A: submitted via RPC (own wallet / app)
│ -> mempool entry, node rebroadcasts periodically
│ -> no expiry; cleared only by node restart
│
└─ path B: relayed from a peer (P2P)
-> mempool entry
-> if not included within 60 blocks -> dropped
Обратите внимание: 60 блоков считаются в блоках, а не в минутах настенных часов. Это сделано намеренно: часы протокола — это блоки и DAA score, а не метка времени, поэтому правило хранения не дрейфует при изменении скорости добычи блоков.
7. Комиссии — это политика, а не консенсус. Это вторая часть головоломки. Ноды не берут транзакции с низкой комиссией в свои мемпулы, но принимают их без возражений, если те приходят внутри блока. Майнер, решивший добывать транзакции с нулевой комиссией, ничего не нарушает — теоретически это возможно, и сеть из-за этого не форкнётся. Практическое следствие: комиссию, которую одна нода отказалась релеить, всё равно могут подтвердить, если её возьмёт майнер, а повышение комиссии, которое приняло большинство пользователей, сработает без раскола сети.
Что это значит на практике
Из правил следуют три операционных вывода.
Исчезнувшая транзакция — это не потерянный платёж. Пока транзакцию не включат и не смерджат, монеты, которые она тратит, всё ещё остаются непотраченными UTXO. Выброс из мемпула ничего не перемещает. Исправление механическое: разослать транзакцию повторно или пересобрать её с комиссией, которую ноды готовы релеить.
Инструменты, отправляющие через RPC, получают бессмертную запись. Это удобно для кошелька, который повторяет попытки за вас, и неудобно для всего, кому нужен чистый лист — поэтому перезапуски нод так часто встречаются в эксплуатационных регламентах.
Подтверждение — единственное состояние, что имеет значение. Наличие в мемпуле — лишь намёк на будущее. Включение в блок, за которым следует упорядочивание этого блока DAG-ом, — вот событие, меняющее реестр. Всё, что идёт дальше, — балансы, состояния контрактов, исходы сделок — следует читать из набора UTXO и данных блоков, а никогда не из «моя нода до сих пор его показывает».
Как на этом строит Kaspa Forge
Коротко о нашем дизайне: мемпул мы рассматриваем как транспорт, а цепь — как истину.
Транзакции собираются и подписываются на устройстве пользователя — Desk держит ключи в зашифрованном браузерном профиле и никуда их не переносит — и рассылаются в ноду как любые другие транзакции. Дальше идёт дисциплина ожидания и наблюдения, а не допущение о доставке. Наши продукты следят за состоянием UTXO и данными блоков, поэтому выброшенная или повторно разосланная транзакция обрабатывается как повторная попытка, а не как баг.
Ончейн-контракты — вот где это окупается. Kaspa Safe — хранилище на ковенанте, у которого задержка вывода, тревожный ключ и наследственные пути обеспечены собственными правилами расходования контракта, а не терпением мемпула. Kaspa Escrow держит средства сделки в контракте с явными путями претензии, возврата и спора. Deposit блокирует залог тем же способом. Во всех трёх случаях «кто, что и когда может потратить» решает ковенант, когда транзакция проверяется против расходуемого UTXO, — мемпул решает лишь *доедет ли запрос*.
Та же логика действует на более социальных площадках. Посты и чаевые на Boards якорятся в BlockDAG, а индекс можно пересобрать из данных цепи; Marketplace никогда не держит средства покупателя — он передаёт стороны в отдельную эскроу-сделку. В Arena блэкджек-стол мейннет-беты держит деньги в UTXO комнат/игр, а игрок подписывает локально, поэтому исход раунда — событие в цепи, а не сообщение в чьей-то очереди. Даже наши платёжные сценарии следуют тому же принципу: ждать появления выхода, а затем читать подтверждения из DAG, а не из списков мемпула.
Если хотите увидеть сценарий «сначала рассылка, затем расчёт» в деле от начала до конца, Kaspa Escrow — это живой сервис, где средства находятся в ончейн-контракте, а каждое изменение состояния — настоящая транзакция, которую вы подписываете сами; дизайн контракта описан в как работает хранилище и в описании архитектуры Kaspa Forge.
Компромиссы и честные границы
Дизайн не бесплатен, и это стоит назвать прямо.
- Политика ноды действительно своя у каждой ноды. Две ноды могут разойтись в оценке достаточности комиссии вашей транзакции и держать разные мемпулы. Это не сбой; это цена того, чтобы релейная политика оставалась вне консенсуса.
- Истечение срока может удивить интеграторов. Транзакция, пришедшая по релею от пира и исчезнувшая после 60 блоков, заставит наивную логику «отправил и забыл» сначала отчитаться об успехе, а потом ничего не доставить. Всёерьёзным системам нужен собственный цикл повторных попыток и мониторинга.
- Бессмертные RPC-записи имеют эксплуатационную стоимость. «Перезапустить ноду, чтобы очистить» — грубый инструмент. Для реестра он безвреден — состояние мемпула одноразовое, — но операциям с нодами нужно это закладывать.
- Комиссия — не гарантия. Оплата минимума даёт вам релей; оплата большего повышает шансы. Решает только включение.
- Ковенанты ничего из этого не обходят. Транзакции с контрактами в отношении релея, истечения срока и выбора майнерами — самые обычные транзакции. Их логика — пути расходования, бюджеты комиссий, ветки без ключей — исполняется на этапе валидации, и именно поэтому контрактам можно доверять, а мемпулам — нельзя.
Что касается продуктов, статус стоит повторить прямо: Arena Blackjack — публичная бета мейннета проверяемой игры; Dice — инженерная работа, у которой постоянная продакшн-ветка отложена до независимого аудита; Permissionless Tokens, дуэли и баккара — запланированные идеи, а не живые сервисы. Ничего из этого не стоит читать как приглашение к ним. Всё, на что ссылки выше, работает сегодня: Safe, Escrow, Deposit, Marketplace, Desk, Boards и бета Arena.
Сноска об источниках: конкретные цифры в этой статье — истечение срока в 60 блоков, правило отсутствия истечения для RPC, различие между релейной комиссией и консенсусом — взяты из открытой документации протокола, а историческая цифра комиссии 0,0001 KAS за UTXO датирована маем 2022 года. Полная картина поведения нод, обработки транзакций и всей окружающей терминологии — в Kaspa wiki, это справочный источник.
Продолжить изучение
архитектура транзакций Kaspa Forge
Следующий шаг: перейти к документации протоколов
FAQ
Почему моя транзакция Kaspa исчезла из мемпула?
Если она попала в мемпул через одноранговую релейную передачу и не была включена в DAG в течение 60 блоков, нода её выбрасывает. Если транзакция была подана локально по RPC, она остаётся и вместо выброса повторно рассылается. Исчезновение транзакции не перемещает монеты — UTXO остаются непотраченными, пока транзакцию реально не включат в блок.
Как долго транзакция остаётся в мемпуле Kaspa?
Согласно открытой документации, 60 блоков — для транзакций, приходящих от других нод. Транзакции, поданные по RPC из кошелька, никогда не истекают сами; очистить их из мемпула можно только перезапуском ноды.
Является ли минимальная комиссия правилом консенсуса?
Нет. Минимальная релейная комиссия — это антиспам-настройка каждой ноды. Ноды не принимают транзакции с низкой комиссией в свои мемпулы, но спокойно принимают их, если те приходят внутри блока. Поэтому майнер теоретически может добыть транзакцию с нулевой комиссией.
Означает ли истечение срока в мемпуле, что мои средства потеряны?
Нет. Пока транзакцию не включат в блок и не смерджат в DAG, расходуемые ею выходы всё ещё ваши. Практическое решение — повторно разослать транзакцию или пересобрать её с комиссией, которую сеть готова релеить.
Зависят ли продукты Kaspa Forge от хранения в мемпуле?
Нет. Хранилища, эскроу-сделки и депозиты живут в ончейн-контрактах с явными путями расходования, а состояние читается из набора UTXO, а не из того, что мемпул в данный момент держит у себя.
Какую комиссию платит транзакция Kaspa?
Исторически привычное значение в кошельках — 0,0001 KAS за каждый UTXO, используемый в транзакции (по состоянию на май 2022 года, согласно открытой базе знаний), но уровень комиссии — это решение кошелька и ноды, а не константа протокола.
Держите KAS там, где кражу можно отменить
Ковенант-сейф в мейннете Kaspa: ваши ключи, ваши правила, наш инструмент. Ончейн — бесплатно, навсегда.
Создать сейф
