Почему UTXO должен быть полностью израсходован? [дубликат]

Представьте, что Алиса владеет 10 BTC и хочет отправить 1 BTC Бобу с комиссией майнерам в 1 BTC.

В блокчейне транзакция записывается как «Алиса потратила 10 биткойнов, 1 достается Бобу, 1 — майнеру и 8 — Алисе».

Это кажется довольно неинтуитивным. Почему бы просто не записывать оплату и комиссию майнерам в явном виде?

Ответы (2)

Я изучал это раньше, и мне никогда не удавалось найти явное объяснение от Сатоши, но есть несколько возможных причин.

Для: упрощает проверку SPV

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

Теперь, чтобы выяснить, каков баланс этого адреса, вам нужно получить все депозиты и снятия с него. Если вы пропустите один, вы рассчитываете неправильный баланс.

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

Для: Теоретически улучшает конфиденциальность транзакций

Вывод сдачи (на который вы ссылаетесь как «8 BTC идут Алисе») отправляется на совершенно новый адрес, и теоретически невозможно выяснить, какой вывод является выводом сдачи. На практике реальный вывод обычно представляет собой красивое круглое число, а вывод сдачи — что-то вроде 0,00019841.

Против: сильно усложняет повышение комиссии.

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

Если бы вывод сдачи был явно помечен, отправитель мог бы просто повторно отправить транзакцию с немного меньшим выводом сдачи и немного большей комиссией. Майнеры будут знать, что они могут безопасно принять новую транзакцию в свой пул памяти, не помогая никому совершить мошенничество. Тогда нам не понадобились бы такие вещи, как «замена платой» или «плата ребенка за родителя».

Против: делает набор UTXO намного больше.

Если у вас есть 50 выходов, которые составляют ваши деньги, это означает, что вы занимаете в 50 раз больше места, чем если бы у вас был один баланс.

TL;DR: Это можно было сделать по-другому, и есть несколько достаточно веских аргументов, но сейчас это невозможно изменить.

Вы, вероятно, должны указать, что таких понятий, как база данных UTXO, даже не существовало до Bitcoin Core 0.8, это смущает многих людей, когда они читают об «обрезке» и удивляются, почему система, которую мы используем сегодня, кажется совершенно чужой.
@Bitcoin Их не существовало, потому что идея заключалась в том, что обычный человек будет использовать кошелек SPV. Идея о том, что средний потребитель или продавец должен управлять полным узлом, является относительно недавним изобретением.
UTXO не существовало, потому что он еще не был написан, вместо этого клиент использовал громоздкую и плохо масштабируемую базу данных BerkeleyDB. Текущие реализации SPV ужасны с точки зрения масштабируемости и конфиденциальности, поэтому довольно безответственно предлагать их кому-либо.
@Bitcoin Может быть, мне следует перефразировать: идея иметь базу данных транзакций и маркировать их потраченными и неизрасходованными существовала, но не считалось важным оптимизировать размер неизрасходованного выходного набора, потому что вы не можете обслуживать клиентов SPV только база данных UTXO. WRT к масштабируемости и конфиденциальности ... это, вероятно, становится оффтопом. Перенесем это обсуждение в Bitcoin Lounge?
Аргумент «Против: делает набор UTXO намного больше» действителен только при условии, что все используют только один адрес. Что означает крайне плохую конфиденциальность.
@Jannes: возможно, но я не уверен, что особенно сложно связать наборы транзакций вместе по тому, кто их отправил. И есть много обстоятельств, когда люди все равно используют один и тот же адрес несколько раз, несмотря на то, что он стоит столько же с точки зрения места в текущей системе.

Выходы транзакций имеют только два состояния: потрачено и неизрасходовано, поэтому использование части одного невозможно без создания другого. С логическим значением потрачено/неизрасходовано нет состояния, которое нужно хранить и вызывать, что позволяет использовать более простые состояния в кошельках и значительно упрощает масштабирование от цепочки блоков. Представьте, если бы у нас была транзакция, расходующая на выходе уменьшающуюся сумму, что может остановить повторение этой транзакции и повторное списание суммы? Наличие атомарных выходных данных означает, что вам не нужно беспокоиться о таких вещах, как серийные номера, что делают альтернативные системы, такие как Ethereum и NXT, из-за отсутствия встроенной защиты от повторного воспроизведения.

Кроме того, нет смысла указывать комиссию, если ее можно вывести, и это экономит место в транзакции.

Transaction outputs only have two states, spent and unspent, Я это понимаю. Я не понимаю, почему так разработан протокол. Почему была выбрана эта система?
@Bitcoin: Комментарии предназначены только для уточнения и незначительных дополнений , пожалуйста, отредактируйте ответ, чтобы добавить туда дополнительную информацию. :)