Представьте, что Алиса владеет 10 BTC и хочет отправить 1 BTC Бобу с комиссией майнерам в 1 BTC.
В блокчейне транзакция записывается как «Алиса потратила 10 биткойнов, 1 достается Бобу, 1 — майнеру и 8 — Алисе».
Это кажется довольно неинтуитивным. Почему бы просто не записывать оплату и комиссию майнерам в явном виде?
Я изучал это раньше, и мне никогда не удавалось найти явное объяснение от Сатоши, но есть несколько возможных причин.
Представьте, что вместо использования модели «израсходовано/неизрасходовано» вы отслеживаете баланс каждого адреса. Вы получаете транзакцию без подтверждения, которая платит вам с адреса.
Теперь, чтобы выяснить, каков баланс этого адреса, вам нужно получить все депозиты и снятия с него. Если вы пропустите один, вы рассчитываете неправильный баланс.
Вы можете исправить это, заставив каждую транзакцию с адреса ссылаться на последнюю транзакцию по хэшу, но это устраняет важное свойство Биткойна — несколько депозитов и выводов на один и тот же адрес могут обрабатываться одновременно, без координации между ними. .
Вывод сдачи (на который вы ссылаетесь как «8 BTC идут Алисе») отправляется на совершенно новый адрес, и теоретически невозможно выяснить, какой вывод является выводом сдачи. На практике реальный вывод обычно представляет собой красивое круглое число, а вывод сдачи — что-то вроде 0,00019841.
Если вы использовали биткойн достаточно долго, вы, вероятно, сталкивались с ситуацией, когда кто-то отправил вам немного биткойнов, но не приложил комиссию.
Если бы вывод сдачи был явно помечен, отправитель мог бы просто повторно отправить транзакцию с немного меньшим выводом сдачи и немного большей комиссией. Майнеры будут знать, что они могут безопасно принять новую транзакцию в свой пул памяти, не помогая никому совершить мошенничество. Тогда нам не понадобились бы такие вещи, как «замена платой» или «плата ребенка за родителя».
Если у вас есть 50 выходов, которые составляют ваши деньги, это означает, что вы занимаете в 50 раз больше места, чем если бы у вас был один баланс.
TL;DR: Это можно было сделать по-другому, и есть несколько достаточно веских аргументов, но сейчас это невозможно изменить.
Выходы транзакций имеют только два состояния: потрачено и неизрасходовано, поэтому использование части одного невозможно без создания другого. С логическим значением потрачено/неизрасходовано нет состояния, которое нужно хранить и вызывать, что позволяет использовать более простые состояния в кошельках и значительно упрощает масштабирование от цепочки блоков. Представьте, если бы у нас была транзакция, расходующая на выходе уменьшающуюся сумму, что может остановить повторение этой транзакции и повторное списание суммы? Наличие атомарных выходных данных означает, что вам не нужно беспокоиться о таких вещах, как серийные номера, что делают альтернативные системы, такие как Ethereum и NXT, из-за отсутствия встроенной защиты от повторного воспроизведения.
Кроме того, нет смысла указывать комиссию, если ее можно вывести, и это экономит место в транзакции.
Transaction outputs only have two states, spent and unspent
, Я это понимаю. Я не понимаю, почему так разработан протокол. Почему была выбрана эта система?
Кларис
Ник Оделл
Кларис
Ник Оделл
Яннес
Ник Оделл