Глоссарий / Адреса и ключи
Адрес сдачи
Другие названия: выход сдачи.
- Что такое адрес сдачи?
- Адрес сдачи получает ту часть входа, которую ваш кошелек не потратил, поскольку выходы биткоина расходуются целиком и любой остаток должен куда-то уйти.
Определено в BIP-32.
В биткоине нет понятия частичного расходования. Если у вас есть одна монета в 0,05 BTC и вы платите 0,012 BTC, транзакция уничтожает эту монету и создает две новые: платеж и примерно 0,038 BTC сдачи, закрепленной за адресом, который управляется только вами. В обозревателе блоков второй выход выглядит как платеж незнакомцу, хотя ею не является.
Как это работает
Каждый платеж в биткоине начинается с выбора целых монет, которые пойдут на него. Монета, точнее неизрасходованный выход транзакции, не может быть разделена на месте: транзакция расходует ее целиком и создает новые выходы. Кошелек суммирует выбранное, вычитает то, что вы платите, и то, что заберет майнер, и отправляет остаток на адрес, который он сгенерировал для себя. Этот адрес и есть адрес сдачи.
Современные кошельки хранят такие адреса на отдельной ветви дерева ключей. BIP-44 закрепил структуру m / purpose' / coin_type' / account' / change / address_index, где предпоследний уровень равен 0 для адресов, которые вы передаете другим, и 1 для адресов, которые кошелек держит для себя. Поэтому первый адрес сдачи кошелька с нативным SegWit имеет вид m/84'/0'/0'/1/0 и выводится из той же сид-фразы, что и все остальное, так что дополнительно ничего резервировать не нужно.
Так было не всегда, и история объясняет, зачем эта ветвь вообще существует. Ранние клиенты Bitcoin брали сдачу из пула заранее сгенерированных случайных ключей, по умолчанию их было 100. Если потратить больше, чем было в пуле, ранняя резервная копия wallet.dat уже не содержала ключ, за которым закреплена ваша сдача, и именно так люди восстанавливали резервную копию и обнаруживали пропажу денег. Bitcoin Core создает только иерархические детерминированные кошельки начиная с версии 0.16.0, а пул предварительно выведенных ключей теперь по умолчанию содержит 1000 ключей.
Сумма сдачи вычисляется арифметически: входы минус платежи минус комиссия. Ничто в транзакции не помечает выход как сдачу. Узел видит два выхода и обращается с ними одинаково, и именно поэтому сдача является проблемой приватности, а не учета.
Почему это важно при покупке биткоина
Ваш первый выход со сдачей обычно появляется, когда вы впервые тратите монеты, выведенные с биржи, и она наследует все, что этот вывод знает о вас.
Биржа, которая проверила ваш паспорт, записала адрес, на который заплатила. Когда вы позже тратите с этого адреса, сдачу создает та же транзакция, поэтому любой, кто отслеживает исходный выход, отслеживает и сдачу, включая любого поставщика аналитики, которому платит биржа. Разделение вывода между двумя кошельками ничего не дает, если затем вы тратите из обоих в одной транзакции. Ограничивает распространение личности именно то, что монеты, выведенные с биржи, хранятся в отдельном кошельке и с них платят осознанно.
Аппаратные кошельки защищают от второго, более острого риска. Скомпрометированный компьютер может построить транзакцию, в которой выход со сдачей уходит атакующему вместо вас, с итоговой суммой, которая все равно выглядит правильной, так что на экране ничего не кажется неверным. Устройство Trezor или Ledger проверяет, что каждый выход со сдачей выводится из хранимой им сид-фразы, и помечает любой выход, который не выводится. Проверка работает только если вы подтверждаете суммы на собственном экране устройства, а не в браузере.
Есть и издержка, на которую вы можете повлиять. Два выхода стоят дороже одного: выход со сдачей нативного SegWit добавляет к транзакции 31 байт, около 465 сатоши при 15 sat/vB, и создает монету, расходование которой позже будет стоить примерно 68 виртуальных байт. Кошельки, применяющие выбор монет методом ветвей и границ, стараются найти входы, достаточно близкие к платежу, чтобы вовсе обойтись без сдачи, и это чаще удается, когда ваши монеты разного размера, а не когда все они являются выводами круглых сумм.
Сдача также не является отчуждением. Выплата себе остатка собственной монеты не является продажей, но программы отслеживания портфеля обычно импортируют выходы со сдачей как входящие покупки или исходящие продажи, что искажает стоимость приобретения. Если ваша программа отслеживания показывает транзакцию, которую вы не узнаете, в день, когда вы оплатили счет, обычно причина именно в этом.
Отслеживание сдачи при выводе 0,05 BTC
Если проследить одну монету от биржи до продавца, каждая цифра видна ончейн. Вы выводите 0,05 BTC на адрес bech32 в свой кошелек, и сумма приходит одним выходом на 5 000 000 сатоши.
Недели спустя вы должны продавцу 1 200 000 сатоши. В вашем кошельке ровно одна монета, поэтому приходится потратить все 5 000 000. У транзакции один вход и два выхода, примерно 141 виртуальный байт, и при 15 sat/vB комиссия составляет 2115 сатоши. Продавец получает 1 200 000. Выход со сдачей получает 5 000 000 минус 1 200 000 минус 2115, то есть 3 797 885 сатоши, и она попадает на m/84'/0'/0'/1/0.
Ничто в этой транзакции не сообщает, какой выход какой. Обычно ее выдают две эвристики: сдача представляет собой выход с неокругленной суммой, и сдача часто является выходом, тип скрипта которого совпадает с типом скрипта входа. Кошельки, которые округляют сдачу или копируют тип скрипта получателя, существуют именно для того, чтобы сломать такие догадки.
Адрес сдачи vs уникальный адрес
Адрес сдачи и новый адрес для получения используются по одному разу, а различие в том, кому их положено видеть. Адрес для получения берется из внешней ветви с индексом цепочки 0 и существует, чтобы его скопировали в чужой кошелек. Адрес сдачи берется из внутренней ветви с индексом цепочки 1 и никогда не показывается плательщику; большинство интерфейсов не покажет его, если вы не откроете экран управления монетами. Оба меняются по одной и той же причине приватности, и оба восстанавливаются из одних и тех же двенадцати или двадцати четырех слов.
Адрес сдачи vs пыль
Сдача представляет собой все, что осталось; пыль представляет собой остаток, слишком малый, чтобы его стоило создавать. Bitcoin Core отказывается передавать выход, оцененный ниже 3 сатоши за виртуальный байт ее будущего расходования, что составляет 546 сатоши для выхода старого формата и 294 для нативного SegWit. Когда кошелек вычисляет сдачу ниже этой черты, он вовсе не создает выход, и стоимость уходит майнеру как дополнительная комиссия. Поэтому оплата суммы чуть меньше всего вашего баланса может стоить гораздо больше, чем указанная вам комиссия.