Я читаю статью Сатоши, и в Разделе 2. Транзакции он начинает со слов:
Мы определяем электронную монету как цепочку цифровых подписей. Каждый владелец передает монету следующему, подписывая цифровой подписью хэш предыдущей транзакции и открытый ключ следующего владельца и добавляя их в конец монеты. Получатель платежа может проверить подписи, чтобы проверить цепочку владения.
Тогда есть хорошая диаграмма, которая показывает это в документе
Таким образом, фактически, если BTC0 — это предыдущая транзакция, новая транзакция:
Кр(Владелец1)
хэш := H(BTC0,Kp(Владелец1))
S( хеш ,Ks(Владелец0))
куда
Kp(Owner1) — открытый ключ получателя (Owner1)
hash := H(BTC0,Kp(Owner1)) — это хэш предыдущей транзакции вместе с публичным ключом получателя.
а также
У меня есть пара вопросов:
Здесь я указал, что «предыдущая транзакция» — это BTC0 — это предыдущая транзакция для этой монеты или предыдущая транзакция в цепочке? Даниэль Дрейнвилл предполагает, что «предыдущая транзакция, в которой использовалась эта монета, хешируется вместе с открытым ключом получателя» в своей статье ( «Анализ системы электронных денег Биткойн» ) .
Если да, то должен ли быть сначала какой-то поиск предыдущей транзакции?
И, если я правильно понимаю, в вашем кошельке нет «монет»… в кошельке хранится цепочка блоков, то есть журнал транзакций, и ваши ключи pub/pri. Когда ваш кошелек показывает вам количество биткойнов «в нем», это на самом деле результат поиска в цепочке блоков?
Я не совсем понимаю ваш вопрос, сначала реакция на ваше предположение.
Это действительно так, что ваш кошелек не содержит реальных монет. Однако обратите внимание на различие между терминами «кошелек» и «клиент». Это не официальное различие, но полезно понимать два разных принципа.
Биткойн-клиент хранит полную цепочку блоков. Когда вы запрашиваете информацию об адресе или транзакции, он может проверить цепочку блоков и получить запрошенную информацию. Таким образом, балансы действительно извлекаются запросом к цепочке блоков. Большинство клиентов хранят индекс всех транзакций ваших адресов, так что эти запросы могут быть выполнены очень эффективно.
Кошелек часто относится к набору закрытых ключей ваших собственных адресов. Для биткойн-клиента по умолчанию это файл wallet.dat. Он содержит список адресов, которыми вы владеете, и соответствующие закрытые ключи, необходимые для совершения транзакций с вашими адресами.
Однако термин «кошелек» также часто используется для биткойн-клиента, например, на домашней странице биткойнов . Предупреждение здесь заключается в том, что некоторые из этих кошельков действительно не хранят полную цепочку блоков, но имеют другие методы неявного запроса цепочки блоков другим способом. Такие клиенты называются облегченными клиентами.
Итак, транзакция — это, в принципе, просто передача контроля над определенным значением в цепочке блоков другому адресу.
Для каждого адреса существует ноль или более транзакций, для которых этот адрес является выходом. Когда вы не отправляли их кому-то другому, они называются неизрасходованными биткойнами или неизрасходованными выходами транзакций. Их сумма составляет баланс адреса.
Когда вы хотите отправить эти монеты или их часть (обратите внимание, что нет понятия монеты, а просто некоторая стоимость валюты, которую вы отправляете, которая может быть любым десятичным числом с точностью до сатоши ), вы совершаете транзакцию в который вы требуете некоторые из неизрасходованных выходов для вашего адреса (в качестве входов для вашей транзакции) и распределяете ценность, которую они имеют, по другим адресам (которые являются выходами для вашей транзакции). Таким образом, неизрасходованные выходные данные для адреса можно использовать в качестве входных данных для транзакции.
Когда вы подписываете транзакцию и она проверяется в блоке, неизрасходованные выходы теперь тратятся, а новые неизрасходованные выходы назначаются адресам, которые вы указали в выходных данных транзакции для транзакции.
Стефан Хименес
Джин М.