Всё, от чего зависит, можно ли доверить Kaspa Forge деньги, — в одном месте: реальные хеши, ключи и цифры тестов и то, как каждую из них проверить самому. Kaspa Forge — некостодиальный сервис: средства лежат в открытых ончейн-ковенантах, и эта страница — попытка сделать это проверяемым, а не обещанием на словах. Последняя сверка: 11 июля 2026. Контакт по безопасности: kaspa@officeforge.co · security.txt.
Открытая бета · внешний аудит впереди. Оба ковенанта открыты и прошли наши ончейн- и adversarial-тесты, но независимого внешнего аудита у них пока нет. Относитесь к Kaspa Forge как к бета-софту: держите балансы сейфов и суммы сделок умеренными (рекомендуемый потолок сейфа 5 000 KAS; сделки — 50–10 000 KAS).
1. Модель доверия
Kaspa Forge не берёт ваши монеты в кастоди. Деньги лежат в ончейн-ковенанте Kaspa — скрипте, который исполняет консенсус Kaspa, а не наш сервер. Подписывающие ключи существуют только в вашем браузере или приложении, внутри зашифрованного ключевого файла, и нам не передаются. Что это даёт, в виде жёстких инвариантов:
Сервер не может украсть. Ни приватных ключей сейфа/эскроу, ни seed на сервере нет. Keyless-пути ковенанта (у сейфа — complete и inheritAuto; у эскроу — autoRelease и timeout) жёстко биндят выход к фиксированному получателю, поэтому даже наш вотчер способен лишь толкнуть средства туда, куда уже говорит контракт.
Арбитр не может украсть. У эскроу-ковенанта нет пути к третьему лицу — каждый из 10 путей платит только покупателю, продавцу или на фиксированный fee-адрес сервиса. Скомпрометированный или принуждённый арбитр не может выразить кражу валидной транзакцией; максимум — выбрать покупателя / продавца / раздел.
Вор с вашим горячим ключом быстро ничего не получит. Вывод из сейфа уходит только через окно задержки (unvault) на фиксированный адрес, а отдельный тревожный ключ (хранимый вне устройства с горячим ключом) его отменяет.
Вотчер — сервис liveness, а не кастодиан. Он следит за цепочкой, публикует уже подписанные keyless-пути (авто-релиз, наследование, timeout) и шлёт алерты — ключа, способного перенаправить средства, у него нет.
Ковенанты только P2PK и несоставляемы. Выходы биндятся к простым pay-to-pubkey-скриптам; ковенанты нельзя сцепить или обернуть в больший контракт, меняющий их правила.
Single-input на каждом пути. Каждый вход обоих ковенантов утверждает tx.inputs.length == 1 и ончейн-cap бюджета комиссии (0,1 KAS), закрывая multi-UTXO-сифон и не давая сжечь переход в сетевую комиссию.
Сервис — удобство, а не зависимость. Если наш сайт исчезнет, ваши средства — нет: контракты живут ончейн и управляются с вашего recovery-листа против любой ноды Kaspa — см. §10.
Полная архитектура и аннотированный список инвариантов — в документации; исходники контрактов ниже — источник истины.
2. Контракты и их хеши
Всем управляют два ковенанта на Silverscript. Оба целиком опубликованы в нашем открытом репозитории. SHA-256 ниже — от файла-исходника ковенанта в опубликованном виде: он позволяет убедиться, что код, который вы аудируете, — это код, который мы поставляем.
vault.sil — ковенант сейфа Kaspa Safe
версияv3 — наследование (auto / signed), путь migrate
Почему нет одного «хеша задеплоенного контракта»? Скрипт-префикс ковенанта в цепочке — это исходник плюс ваши параметры (ваши pubkeys, задержка, наследник, бюджет комиссии, условия сделки), поэтому у каждого сейфа и каждой сделки свой script-hash — так и задумано. Стабильная, проверяемая вещь — исходник выше; конкретный script сейфа/сделки детерминированно выводится из него открытым тулингом, а ваш Деск показывает точный адрес, который вы пополнили. Как воспроизвести — в §3.
3. Проверьте контракт сами
Всё для проверки ковенантов открыто в github.com/pcdoctormsk-ctrl/kaspa-safe: оба .sil-исходника, CLI vaultctl / escrowctl, веб-фронт и Android-приложение с его сборочным workflow.
Сверьте хеш исходника с тем, что заявлено на этой странице:
Прогоните ковенанты в настоящей VM Kaspa. CLI компилируют ковенант закреплённым компилятором Silverscript (rev d25bd34) и исполняют каждый путь траты — включая атаки (досрочное завершение, неверный ключ, неверный адрес, преждевременное наследование, migrate одним ключом, multi-input-сифон) — внутри реальной VM ноды Kaspa, с консенсусным лимитом compute-budget:
Воспроизведите адрес своего сейфа. Для уже созданного сейфа vaultctl status --recovery <ваш recovery-лист> пересобирает ковенант из ваших параметров и печатает тот же адрес, который пополнил ваш Деск, — доказательство, что задеплоенный script и есть этот исходник, инстанциированный вашими ключами, без сервера в контуре.
4. Публичные ключи и адреса
Это единственные долгоживущие значения сервиса, зашиваемые в эскроу-сделки. Оба публичны по природе — x-only публичный ключ и адрес Kaspa. Никакого приватного ключа сервиса, которому нужно доверять, нет: ключ арбитра лишь позволяет арбитру выбрать среди покупатель/продавец/раздел, а fee-адрес только получает видимую комиссию сервиса.
Когда вы создаёте или входите в сделку, ровно эти значения записываются в ковенант, который вы пополняете, — их можно сверить в своём ключевом файле и с ончейн-сделкой.
5. Тесты и статус аудита
Автоматические тест-наборы (прогон 11 июля 2026). Rust-ядро и сервер несут юнит- и property-тесты по логике ковенантов, вотчеру, кошельку/деривации и конечному автомату сделки:
крейт сервера119 passed · 0 failed · 1 ignored
wasm-крейт ядра29 passed · 0 failed
итого148 passed · 0 failed
Selftest контрактов в VM консенсуса. Поверх юнит-тестов ковенанты прогоняются путь-за-путём внутри реальной VM ноды Kaspa (как запустить самому — §3): сейф — 25 проверок, эскроу — 52 проверки — каждая с adversarial-кейсами, всё зелёное.
Внешний аудит: впереди. Независимого стороннего аудита безопасности пока не проводилось. Выше — наше собственное тестирование: тщательное, но не заменяющее внешнюю проверку. Это и есть главная причина держать суммы умеренными в открытой бете.
6. Воспроизводимые сборки и приложение
WASM-ядро сейфа/эскроу собирается из исходников скриптом wasm/build.sh (wasm-pack, release). Android-приложение собирает публичный workflow android-apk в GitHub Actions в том же репозитории, поэтому устанавливаемый бинарь прослеживается до открытого исходника и CI, а не залит руками.
Текущая Android-сборка. APK и его SHA-256 публикуются рядом со скачиванием; проверьте перед установкой:
# проверка скачанного APKsha256sum KaspaSafe.apk# должно быть равно 086421854bedd54b1c123092f06ab309be2aea04efbbfff3590ff7a089bc413b
Подписанные релизные APK также публикуются в GitHub Releases. Веб-приложение работает целиком в браузере; его Content-Security-Policy запрещает любые сетевые соединения, кроме как к этому origin, поэтому ключ нельзя выкрасть даже через инъекцию скрипта.
7. Известные ограничения
Честность — часть истории про безопасность. Вот реальные края текущего дизайна:
Внешнего аудита ещё нет. Контракты не аудированы третьей стороной — см. §5.
Эскроу требует активного покупателя. Спор нужно открыть внутри окна спора. Если окно прошло без спора, средства авто-релизятся продавцу — покупатель обязан успеть.
Потеряли ключевой файл — потеряли доступ. Аккаунтов и сброса пароля нет. Ваш зашифрованный ключевой файл — единственный вход, делайте резервную копию. Словарно-слабый пароль ослабляет шифрование файла.
Сервисный токен — это capability. Токен в ключевом файле авторизует управляющие API-вызовы для вашего сейфа/сделки; получивший его может звать эти эндпоинты (двигать средства вне фиксированных путей ковенанта он всё равно не может). Автоматически он не ротируется. Подробности — в политике приватности.
Алерты зависят от сервиса. Telegram/e-mail-алерты и удобные автопубликации вотчера прекращаются, если наш сервис недоступен. Ончейн-безопасность от них не зависит — но вы можете узнать позже. Хотите независимости — запустите свой вотчер из recovery-кита.
Контрагента оцениваете вы. В Гаранте и Маркетплейсе мы не сторона сделки и не проверяем товар, личность или платёжеспособность; арбитр судит только в треугольнике покупатель/продавец/комиссия.
8. История изменений контрактов
Каждое изменение исходников ковенантов, новое сверху (из git-истории репозитория):
Платной программы bug bounty у нас нет, и выплат мы не обещаем. Это добросовестный канал ответственного раскрытия — просто просим сообщать приватно, и мы отреагируем.
10. Если что-то пошло не так
Поскольку контракты живут ончейн, вы можете действовать, даже если наш сайт недоступен:
Восстановление сейфа (офлайн):гайд по восстановлению сейфа и vaultctl управляют сейфом с вашего recovery-листа против любой ноды Kaspa — чекин, отмена кражи, завершение вывода, вступление в наследство или migrate наружу.
Восстановление сделки (офлайн):гайд по восстановлению эскроу покрывает застрявшую сделку — включая keyless-путь timeout, который выдаёт средства, если арбитр так и не вынес вердикт.
Подозрение на кражу горячего ключа сейфа: отмените текущий вывод тревожным ключом (он показан в Telegram-алерте и в панели сейфа), затем сделайте migrate в свежий сейф.
Нашли баг безопасности: не публикуйте его открыто — пишите на kaspa@officeforge.co (см. §9).