Кошелёк — приложение или устройство для получения и отправки биткоинов. Transaction Labeling — добавление описаний и заметок к транзакциям, адресам и другим записям кошелька. Можно указать цель платежа или источник средств. Эти метаданные хранятся в приложении вне транзакции Bitcoin и сами по себе не доказывают личность другой стороны.
Вы открываете историю кошелька и видите давний платёж. Это был аванс, подарок или перевод на другой ваш счёт? Метка «аванс за ремонт велосипеда» объяснит запись и спустя время. Переименование меняет заметку приложения, а не транзакцию или её идентификатор txid. Для этого ничего нового не нужно записывать в блокчейн, публичную историю подтверждённых транзакций. То же различие важно при восстановлении: Seed Phrase, слова для восстановления ключей кошелька, не содержит личных заметок. Возвращение возможности тратить и возвращение контекста платежей — разные задачи. [1] [3] [5]
Полезная заметка описывает известное: номер счёта, цель или источник денег. Собственная запись отличается от автоматической привязки приложения или заимствованного утверждения аналитика. BTCPay Server использует, например, invoice для платежей по счетам и payout для выплат или возвратов, а также допускает свои метки. Контекст помогает при Coin Control, ручном выборе UTXO — ещё не потраченных выходов. Каждый такой выход содержит сумму и условия, при которых её можно потратить. Но надпись «не объединять» сама ничего не блокирует. Какие поступления свяжет следующий платёж, определяет фактический выбор входов. [1] [2]
Некоторые кошельки замораживают выход, чтобы приложение не выбирало его для расходования. BIP 329 переносит это локальное состояние через spendable только для типа output. spendable:false использует логическое значение false; текстовая строка "false" — другое. Практический смысл прост: заморозка защищает от случайного выбора в этом приложении, а не от любого возможного расходования. Это не Timelock, временное условие правил Bitcoin. Другой кошелёк с правильными ключами может потратить выход, если выполнит его действительные условия. [1] [3]
При переходе в другое приложение подумайте и об отдельном экспорте заметок. Файл может связывать имена, счета и историю платежей с адресами или XPUB, расширенным публичным ключом. Из него можно вычислять следующие адреса соответствующей части кошелька, но один XPUB не позволяет подписывать платежи. Если экспорт содержит запись типа spscan, в ней есть приватный ключ сканирования для поиска входящих Silent Payments. Сам по себе он не разрешает тратить, но его раскрытие вредит приватности. Отсутствие приватного ключа расходования не делает файл безобидным. Шифруйте сохранённые копии и передачу, а восстановление проверяйте в правильной учётной записи. [1] [4] [5]
BIP 329 различает tx, addr, pubkey, input, output, xpub и spscan: транзакцию, адрес, публичный ключ, вход, выход, расширенный публичный ключ и выражение сканирования Silent Payments. Тип определяет смысл ref. Для input это идентификатор транзакции и индекс её входа; для output — идентификатор транзакции, создавшей выход, и индекс этого выхода. Поэтому txid:1 без типа недостаточно. Он может обозначать вход или выход, то есть разные объекты. Небезопасно считать любую такую ссылку «адресом платежа». [1] [4]
BIP 329 использует JSON Lines: текстовый файл UTF-8 с одной структурированной записью в строке. Писать его вручную необязательно; важно понимание обеими программами. Обязательные type и ref указывают объект. label, origin и spendable необязательны. Отсутствующие label или spendable при импорте не должны перезаписывать имеющиеся значения. Совместимый импортёр должен игнорировать неизвестные типы. Успешное открытие файла поэтому не означает переноса всех заметок и настроек. [1]
Одна транзакция может появляться в нескольких счетах или кошельках с разными описаниями. origin помогает различить эти представления. Поле содержит сокращённый Output Descriptor, машинное описание кошелька, с происхождением ключей, но без самих ключей, дочерних путей вывода и контрольной суммы. Оно указывает, к какому кошельку относится метка. Это не подпись файла и не подтверждение правдивости указанной цели платежа. Определить правильный счёт и доверять содержанию заметки — разные вещи. [1]
Прежде чем оставлять старое приложение, испытайте перенос на отдельной тестовой копии. Для знакомых платежей сравните объект и ref, текст и возможную заморозку spendable. Проверьте диакритические знаки, несколько счетов, неизвестные типы и пропущенные необязательные поля. Импортёр может пропустить неподдерживаемые записи или сократить метки. Рекомендуемые 255 символов — предел по умолчанию, не всеобщая гарантия. Сохраните исходную копию, пока не проверите важный контекст. Одно сообщение «импорт завершён» этого не подтверждает. [1]
Для полной картины прочитайте эту статью вместе с Coin Control, UTXO, Приватность в Bitcoin, Address Clustering, Seed Phrase, Output Descriptor. На эту статью также ссылаются Chain Surveillance.