Пояснения к цепочке транзакций

Я читаю статью Сатоши, и в Разделе 2. Транзакции он начинает со слов:

Мы определяем электронную монету как цепочку цифровых подписей. Каждый владелец передает монету следующему, подписывая цифровой подписью хэш предыдущей транзакции и открытый ключ следующего владельца и добавляя их в конец монеты. Получатель платежа может проверить подписи, чтобы проверить цепочку владения.

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

Таким образом, фактически, если BTC0 — это предыдущая транзакция, новая транзакция:

Кр(Владелец1)

хэш := H(BTC0,Kp(Владелец1))

S( хеш ,Ks(Владелец0))

куда

  • Kp(Owner1) — открытый ключ получателя (Owner1)

  • hash := H(BTC0,Kp(Owner1)) — это хэш предыдущей транзакции вместе с публичным ключом получателя.

а также

  • S( hash ,Ks(Owner0)) — ранее вычисленный хэш, подписанный отправителем закрытого ключа (Owner0)

У меня есть пара вопросов:

Здесь я указал, что «предыдущая транзакция» — это BTC0 — это предыдущая транзакция для этой монеты или предыдущая транзакция в цепочке? Даниэль Дрейнвилл предполагает, что «предыдущая транзакция, в которой использовалась эта монета, хешируется вместе с открытым ключом получателя» в своей статье ( «Анализ системы электронных денег Биткойн» ) .

Если да, то должен ли быть сначала какой-то поиск предыдущей транзакции?

И, если я правильно понимаю, в вашем кошельке нет «монет»… в кошельке хранится цепочка блоков, то есть журнал транзакций, и ваши ключи pub/pri. Когда ваш кошелек показывает вам количество биткойнов «в нем», это на самом деле результат поиска в цепочке блоков?

На что не хватает вашей репутации? Кто-то может вставить изображения для вас, если вы где-нибудь дадите URL.
Наконец-то мне удалось объединить свои аккаунты!

Ответы (1)

Я не совсем понимаю ваш вопрос, сначала реакция на ваше предположение.

Это действительно так, что ваш кошелек не содержит реальных монет. Однако обратите внимание на различие между терминами «кошелек» и «клиент». Это не официальное различие, но полезно понимать два разных принципа.

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

Кошелек часто относится к набору закрытых ключей ваших собственных адресов. Для биткойн-клиента по умолчанию это файл wallet.dat. Он содержит список адресов, которыми вы владеете, и соответствующие закрытые ключи, необходимые для совершения транзакций с вашими адресами.

Однако термин «кошелек» также часто используется для биткойн-клиента, например, на домашней странице биткойнов . Предупреждение здесь заключается в том, что некоторые из этих кошельков действительно не хранят полную цепочку блоков, но имеют другие методы неявного запроса цепочки блоков другим способом. Такие клиенты называются облегченными клиентами.


Итак, транзакция — это, в принципе, просто передача контроля над определенным значением в цепочке блоков другому адресу.

Для каждого адреса существует ноль или более транзакций, для которых этот адрес является выходом. Когда вы не отправляли их кому-то другому, они называются неизрасходованными биткойнами или неизрасходованными выходами транзакций. Их сумма составляет баланс адреса.

Когда вы хотите отправить эти монеты или их часть (обратите внимание, что нет понятия монеты, а просто некоторая стоимость валюты, которую вы отправляете, которая может быть любым десятичным числом с точностью до сатоши ), вы совершаете транзакцию в который вы требуете некоторые из неизрасходованных выходов для вашего адреса (в качестве входов для вашей транзакции) и распределяете ценность, которую они имеют, по другим адресам (которые являются выходами для вашей транзакции). Таким образом, неизрасходованные выходные данные для адреса можно использовать в качестве входных данных для транзакции.

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

Стивен- Спасибо. Ваше наблюдение о разнице между кошельком и клиентом интересно. Когда я говорил о кошельке, я действительно имел в виду клиента. По вашему определению у клиента ЕСТЬ кошелек; сбор ключей. На мой взгляд, термин «кошелек» является более удобным для пользователя именем для клиента, поскольку оно связывает его с эквивалентом в реальном мире. Мой вопрос, который вы не поняли, что делать с хешированной «предыдущей транзакцией» — это предыдущая транзакция в цепочке или предыдущая транзакция этой монеты? Я подозреваю, что понимание того, что он вводит/выводит, поможет.
Большинство людей называют клиентов кошельками, поэтому это различие не совсем официально верно, но полезно понимать разные принципы. Я постараюсь объяснить ваш вопрос в ответе
Когда я прочитал исходный код на нескольких клиентах (bitcoin, bitcoinj и libbitcoin), я пришел к выводу, что кошелек (wallet.dat, xxx.wallet или как его называет клиент) — это больше, чем набор ключей. и адреса. Каждый клиент реализует кошелек по-своему, но этот комментарий от bitcoinj резюмирует его цель: «Кошелек хранит ключи и записи транзакций, которые отправляют и получают значение с этих ключей. Используя их, он может создавать новые транзакции, которые тратят записанные транзакций, и это основная операция протокола Биткойн».