Основы · Кошельки и хранение

Где находятся биткоины: кошелёк, ключи и UTXO без сложных слов

Кошелёк показывает баланс, но не хранит монеты внутри телефона или аппаратного устройства. Он находит в сети непотраченные выходы, которыми позволяют распорядиться ваши ключи.

Человек открывает кошелёк и видит на экране 0,25 BTC. Кажется естественным, что эти биткоины находятся внутри телефона, приложения или аппаратного устройства.

Но если телефон сломается, а кошелёк восстановят на другом устройстве, тот же баланс появится снова. Значит, биткоины находились не в старом телефоне. Где же они были?

В блокчейне нет строки с личным балансом

В Биткоине нет центральной таблицы с именами пользователей и суммами на их счетах. Вместо этого существуют транзакции. Каждая из них расходует результаты предыдущих операций и создаёт новые результаты.

Такой ещё не потраченный результат называется UTXO — Unspent Transaction Output, или непотраченный выход транзакции. За техническим названием стоит простая идея: это определённое количество сатоши, которое можно потратить при выполнении записанного условия.

Чаще всего условие требует действительную цифровую подпись, созданную соответствующим приватным ключом.

Каждый выход расходуется целиком

Допустим, кошелёк контролирует один непотраченный выход на 70 000 сатоши. Нужно отправить другому человеку 25 000 сатоши, а комиссия составит 1 000.

Вернувшиеся 44 000 сатоши называют сдачей. Обычно кошелёк создаёт для неё новый адрес автоматически, поэтому пользователь может не заметить эту часть операции.

Если одного UTXO недостаточно, кошелёк объединяет несколько непотраченных выходов. Например, для отправки 25 000 сатоши можно использовать выходы на 15 000 и 20 000. Их общая сумма будет распределена между получателем, комиссией и новым выходом сдачи.

Что тогда означает адрес

Биткоин-адрес — не счёт и не коробка, внутри которой лежат монеты. Это удобная форма инструкции для создания нового выхода транзакции. Она сообщает отправителю, при выполнении какого криптографического условия полученные сатоши можно будет потратить.

После получения платежа сеть не записывает: «этот человек владеет 50 000 сатоши». Она фиксирует новый выход с определённой суммой и условием расходования.

Один кошелёк способен создавать множество адресов. Использовать новый адрес для каждого получения полезно для приватности: наблюдателю становится сложнее автоматически связать все операции с одним участником.

Что хранит приватный ключ

Приватный ключ — секретное число, с помощью которого создаётся цифровая подпись. Он не извлекает биткоины из файла и не перемещает их из телефона в сеть. Подпись доказывает право выполнить условие расходования конкретного UTXO.

Сеть не знает, кем является подписавший: владельцем, наследником, вором или человеком, случайно нашедшим seed-фразу. Она проверяет не биографию, а подпись и правила транзакции.

Потеря ключа не уничтожает UTXO. Он продолжает существовать, но выполнить условие расходования больше некому. При краже ключа средства ещё видны владельцу, однако возможность подписать перевод появляется и у постороннего.

Зачем нужна seed-фраза

Современный кошелёк обычно управляет большим набором ключей и адресов. Seed-фраза позволяет восстановить этот набор из одной исходной секретной информации.

Восстановление на новом устройстве не «загружает биткоины» из старого телефона. Программа заново получает ключи, изучает доступную историю, находит связанные с ними непотраченные выходы и рассчитывает баланс.

Seed-фразу нельзя:

Настоящей службе поддержки seed-фраза не нужна.

Что в действительности делает кошелёк

Название «кошелёк» создаёт образ места, в котором находятся монеты, хотя программа выполняет другие задачи. В зависимости от типа она может:

Эти функции необязательно находятся на одном устройстве. Аппаратный кошелёк может хранить ключи и подписывать операцию, а приложение на компьютере — получать сведения из сети и подготавливать неподписанную транзакцию.

Watch-only кошелёк видит адреса, транзакции и баланс, но не имеет приватных ключей и не может отправить средства. Отображение баланса и право расходования — разные вещи.

Баланс — это результат подсчёта

Баланс кошелька не существует как отдельная запись в блокчейне. Программа вычисляет его, складывая доступные ей непотраченные выходы. Поэтому разные кошельки могут показывать суммы немного по-разному.

Одна программа может учитывать неподтверждённое поступление, другая — ждать включения транзакции в блок. Отдельно могут отображаться подтверждённые, ожидающие, временно недоступные и доступные только для наблюдения средства.

Неполный баланс иногда означает не потерю, а то, что программа ещё не получила всю историю или не обнаружила все связанные с ключами операции.

Почему одинаковые суммы могут иметь разные комиссии

Для сети важен размер транзакции в байтах. Платёж из одного UTXO обычно компактнее операции, объединяющей десятки небольших выходов.

Поэтому отправка 10 000 сатоши иногда может стоить дороже, чем отправка 1 000 000 сатоши. Значение имеют количество и тип входов и выходов, а также текущий спрос на место в блоке.

Продвинутые кошельки позволяют выбирать UTXO вручную. Эта функция называется coin control. Она помогает управлять комиссиями и приватностью, но требует понимания последствий.

Биткоины не путешествуют между кошельками

Фраза «отправить биткоины из одного кошелька в другой» удобна, но технически неточна. Биткоины не покидают один файл и не прилетают в другой. Транзакция расходует старые выходы и создаёт новые условия распоряжения.

В этом смысле биткоины движутся не между устройствами, а от одной транзакции к следующей.

Что проверяет полный узел

На основе проверенной истории полный узел знает, какие выходы уже потрачены, а какие остаются доступными. Их совокупность называют набором UTXO.

Получив новую транзакцию, узел проверяет:

После действительного расходования старый UTXO удаляется из доступного набора, а созданные транзакцией выходы добавляются как новые. Так сеть предотвращает повторную трату одних и тех же сатоши.

Потеря устройства и потеря доступа — не одно и то же

Если устройство сломано, но seed-фраза сохранена правильно, набор ключей можно восстановить в совместимом кошельке. Удаление приложения само по себе также не уничтожает средства.

Настоящая проблема возникает, когда потерян единственный способ восстановить приватные ключи. UTXO продолжат существовать, но создать действительную подпись будет невозможно.

В сети нет центральной службы, которая заменит ключ после проверки документов. Самостоятельное хранение даёт контроль и одновременно передаёт владельцу ответственность за восстановление доступа.

Шесть мифов, которые теперь легче увидеть

Самая точная короткая формулировка

Кошелёк не хранит биткоины. Он хранит или использует ключи, находит доступные этим ключам непотраченные выходы, показывает их общую сумму и помогает создать следующую транзакцию.

Именно это объясняет, почему кошелёк можно восстановить на другом устройстве, зачем транзакции создают сдачу, почему комиссии различаются и почему потеря seed-фразы опаснее потери телефона.

Кошелёк хранит или использует ключи. Право распоряжаться сатоши определяется условиями непотраченных выходов в сети.

Первоисточники и документация

  1. Bitcoin: A Peer-to-Peer Electronic Cash System
  2. Bitcoin Developer Guide: Transactions
  3. Bitcoin Developer Guide: Wallets
  4. Bitcoin Developer Guide: Block Chain
  5. Bitcoin Core: Managing Wallets

Образовательный материал. Не является финансовой рекомендацией.

Вернуться к хранению