10 мин чтения
CardanoWall Desktop: локальный почтовый клиент для подтверждений существования
CardanoWall Desktop — это открытый кроссплатформенный клиент для Label 309: локальные идентичности, офлайн-ориентированное зеркало записей, запечатанные входящие, отслеживание отправленных записей и свобода выбора шлюза. Рассказываем, как он устроен.

CardanoWall Desktop — это открытый настольный клиент для Label 309, который позволяет хранить ваши записи Proof of Existence, идентичности и запечатанные входящие на собственной машине, а не во вкладке браузера. По ощущениям это почтовый клиент: Входящие с запечатанными записями, адресованными вам, раздел Отправленные со всем, что вы опубликовали, окно создания для новых подтверждений, локальный обозреватель публичного набора записей в блокчейне, контакты с адресами получателей и локальное управление идентичностями.
Эта статья описывает, как всё устроено, — чтобы вы могли решить, подходит ли он под то, как вы работаете.
Дело не просто в «настольном приложении». Дело в трёх свойствах, которые браузер не может дать в полной мере: оно офлайн-ориентированное, оно не привязано к одному поставщику, и оно устроено так, чтобы ваши приватные ключи никогда не покидали устройство.
Какую задачу решает настольное приложение?
Веб-приложение — самый простой способ начать. Настольное приложение нужно тем, кто хочет локального владения.
Браузер прекрасно подходит, чтобы быстро создать подтверждение, опубликовать запись или провести рабочий процесс на основе аккаунта. Но некоторым людям и компаниям нужно больше:
- локальное зашифрованное хранилище идентичности;
- офлайн-доступ к уже синхронизированным записям;
- локально кешированные зашифрованные файлы;
- приватные входящие, которые обнаруживаются локальным расшифровыванием, а не серверной маршрутизацией;
- локальное зеркало публичного набора записей с поиском;
- работа с большими файлами потоком, без загрузки файлов целиком в память;
- возможность указать собственный, самостоятельно размещённый шлюз;
- меньше допущений, завязанных на одного размещённого поставщика.
CardanoWall Desktop создан именно для таких пользователей. Он переносит модель Label 309 на вашу собственную машину и относится к состоянию «офлайн» как к нормальному, а не как к ошибке.
CardanoWall Desktop — это кошелёк Cardano?
Нет. Это не кошелёк, и он специально сделан так, чтобы вы никогда не путали одно с другим.
Он не хранит ADA. Он не держит фразу восстановления кошелька. Он не строит и не отправляет транзакции Cardano и не хранит никаких ключей блокчейна или хранилища.
Публикация по-прежнему идёт через шлюз Label 309, которому принадлежит весь конвейер публикации: расчёт стоимости, загрузка, построение и отправка транзакции Cardano, подтверждение, обработка реорганизаций, индексация и учёт баланса. Настольное приложение — это клиент. Оно хранит ваши идентичности Label 309 локально, готовит записи, подписывает их, когда вы решаете подписать, шифрует запечатанные данные, расшифровывает входящие запечатанные записи, проверяет подтверждения и общается с тем шлюзом, который вы настроите. Если вы хотите такого же разделения из скрипта или терминала, открытый инструмент командной строки выполняет ту же работу без графического интерфейса.
Почему настольное приложение с открытым исходным кодом?
Потому что программа, которая работает с идентичностями, подписями, зашифрованными файлами и долгосрочными подтверждениями, должна поддаваться проверке.
Если инструмент касается ваших ключей и ваших свидетельств, вы должны иметь возможность прочитать, как он работает, команда безопасности — провести его аудит, разработчики — построить на его основе своё, а операторы — направить его на собственную инфраструктуру. Формат подтверждения открыт, шлюз открыт, и настольный клиент тоже открыт — под той же лицензией Apache-2.0, что и остальной код Label 309. Стандарт удобен ровно настолько, насколько удобны окружающие его инструменты, и эти инструменты не должны превращать вас в зависимого клиента.
Что здесь означает «офлайн-ориентированность»?
Офлайн-ориентированность означает, что локальное приложение остаётся полезным, когда сеть недоступна, потому что источником истины для того, что вы видите, служит локальная база данных, а не сеть.
Приложение хранит локальное состояние: синхронизированные записи, совпадения во входящих, отправленные записи, контакты, идентичности, кешированный шифротекст и (только если вы это включите) кешированные расшифрованные файлы. Когда вы офлайн, вы по-прежнему можете:
- просматривать уже синхронизированные записи;
- читать свои входящие;
- расшифровывать кешированные запечатанные файлы;
- проверять кешированные записи;
- искать по локальным данным;
- готовить черновик подтверждения для публикации позже.
Офлайн не значит, что любое действие завершится. Публикация нового подтверждения по-прежнему требует шлюза и сетевого соединения. Получение шифротекста, который вы никогда не кешировали, по-прежнему требует доступа к хранилищу. Но данные, которые вы уже синхронизировали, не исчезнут из-за того, что отвалился Wi-Fi. (О случаях, где офлайн — это сама суть, то есть о хешировании и подписи на изолированной машине, читайте в статье об офлайн-подтверждениях.)
Как работают настольные входящие?
Входящие — это локальное представление запечатанных записей, которые могут открыть ваши идентичности, причём сервер так и не узнаёт, какие записи ваши.
Шлюз публикует общий поток всех записей Label 309. Настольное приложение синхронизирует этот поток в локальное зеркало. Для каждой из ваших идентичностей оно локально пытается открыть запечатанные ключевые слоты с помощью ключей получателя этой идентичности. Если слот открывается, запись появляется во входящих этой идентичности.
Это сознательно не серверный почтовый ящик. Поток шлюза не раскрывает получателя: в нём нет поля с указанием получателя, поэтому он не может определить, кому адресована запечатанная запись. Ваш клиент выясняет это сам, пробным расшифровыванием. Именно поэтому локальный клиент так хорошо подходит для запечатанного Proof of Existence: та же машина, что хранит ключи вашей идентичности, — единственное место, где входящие вообще можно собрать.
Что отслеживает раздел «Отправленные»?
Раздел «Отправленные» отслеживает публикуемые вами записи на протяжении всего их жизненного цикла, причём он проверяет результат, а не доверяет ему.
Подтверждение не готово в тот момент, когда вы нажимаете «отправить». Оно проходит этапы: черновик, расчёт стоимости, загрузка, публикация, отправлено, подтверждается, подтверждено — или сбой и автоматический возврат средств, если публикацию не удаётся завершить. Настольное приложение держит этот жизненный цикл на виду локально. Оно может показать, какой шлюз использовался, какая идентичность подписала запись, была ли запись запечатана, какие получатели были выбраны, когда транзакция подтвердилась и согласен ли локальный верификатор с тем, что запись в блокчейне совпадает с тем, что подготовило приложение.
Вот эта последняя часть и есть самое важное. «Подтверждено» не должно означать «так сказал шлюз». Шлюз строит и отправляет транзакцию, поэтому это не то, что стоит принимать на веру: шлюз с ошибкой или враждебный шлюз мог бы сообщить о другой транзакции или исказить подтверждение. Поэтому, как только появляется хеш транзакции, приложение получает запись из блокчейна и побайтово сравнивает её с той самой записью, которую опубликовало, прежде чем что-либо отметить подтверждённым. Это автономная верификация, применённая к вашим собственным отправленным.
Как идентичности хранятся на компьютере?
Каждая идентичность хранится в локальном зашифрованном хранилище, а секретный сид никогда не покидает ядро на Rust в основе приложения.
Каждая идентичность Label 309 уходит корнями в один 32-байтовый Identity Seed (сид идентичности). Из этого сида приложение выводит ключ подписи и ключи получателя идентичности. Сам сид остаётся внутри локального ядра: он никогда не передаётся в webview, который рисует интерфейс, и никогда не отправляется ни на какой шлюз. Интерфейс видит только публичные проекции — метки, отпечатки, открытые ключи, адреса получателей и статусы. Пока хранилище разблокировано, сид живёт в самозатирающейся памяти и стирается, когда вы блокируете приложение или оно блокируется автоматически по простою.
Это разделение и есть весь замысел: сид — это переносимая резервная копия и то, что действительно стоит защищать, поэтому к нему относятся как к главной драгоценности. Если вам интересно, почему именно сид — а не аккаунт и не пароль — и есть настоящая идентичность, см. статью ваша идентичность — это сид, а о принципе хранения сида на устройстве — почему ключи никогда не покидают устройство.
Одно честное ограничение: хранение секретов в локальном ядре защищает от вредоносного или ошибочного интерфейса и от украденного, заблокированного файла хранилища. Оно не спасает от полностью скомпрометированной операционной системы. Пока приложение разблокировано, вредоносная программа на той же машине в принципе могла бы прочитать секреты в памяти. Короткие окна разблокировки, автоблокировка и минимум зависимостей снижают эту угрозу, но не сводят её к нулю — та же оговорка касается любого настольного кошелька.
Можно ли использовать собственный шлюз?
Да — и это одна из главных причин, по которым настольное приложение существует.
Оно работает с любым совместимым шлюзом Label 309. Направьте его на официальный шлюз CardanoWall ради удобства, на самостоятельно размещённый шлюз, который держит ваша компания, или на шлюз за чужим продуктом. Официальный — это в лучшем случае точка входа в один клик ради удобства; он никогда не становится умолчанием, которое вы не выбирали. Вы указываете базовый URL шлюза и ключ аккаунта, а приложение проверяет конечную точку, чтобы убедиться, что она говорит на языке стандарта, прежде чем вы на неё положитесь.
Разделение чистое: шлюзу принадлежит конвейер публикации, настольному приложению — опыт локального клиента. Именно это разделение и предотвращает привязку. Ваше локальное приложение, ваши локальные идентичности, ваш локальный кеш и ваши стандартные записи не должны зависеть от одного размещённого интерфейса.
Что шлюз видит, а что не видит никогда?
Шлюз видит то, что нужно для публикации и работы сервиса, — и ничего, что позволило бы ему прочитать ваши запечатанные файлы или выдать себя за вас.
Он может видеть ваши учётные данные аккаунта, расчёты стоимости, загрузки, шифротекст, ваш баланс, статус транзакции, байты публичных записей и эксплуатационные метаданные. Он не видит ваш Identity Seed, он не видит ваши приватные ключи получателя и не может расшифровать ваши запечатанные файлы. Настольное приложение готовит и использует каждый секрет локально; шлюз лишь публикует стандартные записи и отдаёт публичный поток.
Это не значит, что шлюз никогда не может вести себя неправильно. Он может задержать, дать сбой, придержать запись или исказить статус. Именно поэтому важна верификация: действительное подтверждение проверяется по публичной записи в блокчейне и публичному обозревателю Cardano, а не считается верным потому, что так говорит интерфейс шлюза.
Что я могу делать с файлами офлайн?
Это зависит от того, что вы синхронизировали и кешировали, — и приложение честно говорит, какие файлы можно безопасно держать под рукой.
Шифротекст можно кешировать свободно, потому что он уже зашифрован; тогда повторное открытие полученного файла происходит мгновенно и работает офлайн. Расшифрованные файлы более чувствительны, поэтому любой кеш расшифрованных файлов включается по выбору, по умолчанию выключен и сам зашифрован. Поведение по умолчанию — хранить шифротекст и расшифровывать по запросу в памяти.
Полезная мысленная модель:
- метаданные публичных записей можно зеркалировать локально;
- шифротекст можно кешировать для офлайн-доступа;
- расшифрованные файлы обрабатываются аккуратно и записываются на диск только там, где вы их явно сохраняете;
- Identity Seed остаётся защищённым в хранилище;
- верификация выполняется локально для кешированных записей и файлов.
Это даёт вам практические преимущества работы офлайн, но не делает вид, что расшифрованные файлы безрисковы. И расшифрованный файл — это всё равно просто файл: как только вы его сохранили, любой, кому вы его передадите, сможет его прочитать. Запечатанное подтверждение сохраняет содержимое конфиденциальным для держателей ключей; оно не делает получателя достойным доверия.
Для кого настольное приложение?
Для людей и организаций, которые работают с подтверждениями достаточно регулярно, чтобы вкладка браузера перестала быть подходящим инструментом.
Хорошо подходит для:
- юридических команд и команд комплаенса, получающих запечатанные свидетельства;
- журналистов и их источников, работающих с конфиденциальными записями;
- компаний, публикующих регулярные подтверждения соответствия;
- разработчиков и платформенных команд, использующих Label 309 в автоматизации;
- AI-команд, фиксирующих обязательства по наборам данных и результатам;
- авторов, хранящих подписанные подтверждения оригинальной работы;
- аудиторов, которым нужен локальный доступ к пакетам свидетельств;
- всех, кто предпочитает самостоятельно размещённую инфраструктуру или инфраструктуру без привязки к поставщику.
Если вы публикуете подтверждения лишь изредка, веб-приложение остаётся самым простым путём, а открытый инструмент командной строки уже сегодня позволяет работать без сайта. Настольное приложение — для постоянной работы.
Что вы получаете
Это локально-ориентированный продукт, который ведёт себя как серьёзное ПО для работы со свидетельствами, а не как лёгкая игрушка. Что он вам даёт:
- понятные напоминания о резервном копировании идентичности, чтобы вы случайно не потеряли идентичность;
- никакой путаницы с сид-фразой кошелька;
- прозрачные состояния верификации;
- читаемый статус подтверждения;
- аккуратную работу с адресами получателей по отдельному каналу;
- локальный поиск по вашим записям и открытым файлам;
- безопасный предпросмотр файлов прямо в приложении;
- несколько идентичностей в одном месте;
- контакты с проверяемыми отпечатками;
- свободный выбор шлюза;
- честные состояния ошибок вместо тихих сбоев.
Стандарт даёт вам модель подтверждения. Настольное приложение даёт вам рабочую среду вокруг неё. Скачать его можно из открытого кода.
Коротко
CardanoWall Desktop — это локальный клиент для Label 309. Он синхронизирует публичный набор записей, хранит ваши идентичности локально, обнаруживает запечатанные входящие локальным пробным расшифровыванием, отслеживает отправляемые вами подтверждения (и проверяет их в блокчейне), работает офлайн с уже синхронизированными данными и подключается к любому совместимому шлюзу.
Веб-приложение даёт удобство. Настольное приложение даёт локальный контроль.
Что почитать дальше
- Стандарт Label 309: label309.org
- Открытый код, SDK и инструмент командной строки: github.com/cardanowall
- Что такое шлюз Label 309 и что может видеть CardanoWall
- Как получать запечатанные записи и использовать CLI в автоматизации