Сквозной поток транзакций биткойнов

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

Случай: A хочет отправить 10 BTC игроку B. 

  1. A создал адрес, который представляет собой хэш (SHA 256) из нескольких слов. Аналогично для B. Это закрытый ключ ; валидатор права собственности на сумму биткойнов. Используя закрытый ключ, генерируется открытый ключ . Приложения кошелька предлагают начальные слова , которые генерируют частный адрес путем хеширования с помощью SHA256, так что даже при потере закрытого ключа его можно освободить от секретных начальных слов. Этот открытый ключ известен всем, но закрытый ключ является секретным и не должен разглашаться. Невозможно получить закрытый ключ из открытого ключа. Закрытый ключ — это математическое доказательство того, что А имеет право потратить определенное количество BTC. Это доказывает право собственности на деньги. Пусть каким-то образом у A сейчас больше 10 BTC.

  2. A отправляет 10 BTC на открытый ключ B. Открытый ключ — это «адрес» транзакции. Сообщение (A отправляет 10 BTC B) подписано с использованием закрытого ключа A. Это цифровая подпись транзакции. Это сообщение о транзакции транслируется всем (всем узлам сети блокчейн). Цифровая подпись подтверждает, что транзакцию создал настоящий владелец.

  3. Майнеры выберут эту транзакцию вместе с другими ожидающими транзакциями и попытаются создать следующий блок блокчейна. Все сделки открыты для всех. В примере с транзакцией майнеры будут проверять транзакцию, действительно ли у A более 10 BTC, проверяя полную базу данных блокчейна (все завершенные блоки цепочки). Если нет, транзакция будет отклонена и не будет добавлена ​​в блок, где он попытается решить головоломку.

  4. Майнеры будут проверять количество транзакций из ожидающих транзакций (транзакций, которые еще не добавлены ни в один блок в блокчейне). 

  5. Разные майнеры могут принимать разное количество действительных транзакций для формирования блока. Но майнер, выигравший математическую головоломку , созданный им блок будет добавлен в качестве следующего блока в блокчейн. Эта головоломка состоит в том, чтобы получить хэш (SHA 256) в соответствии с текущей сложностью (19 ведущих нулей хеша в шестнадцатеричном формате). Это процесс проб и ошибок для получения желаемого хэша с 19 нулями. Хеш-функция вывода выглядит следующим образом: 

SHA256 (отметка времени + хеш предыдущего блока + MarkleRootHash (все действительные транзакции в этом блоке) + одноразовый номер)

Майнеры меняют значение nonce (целое число) каждый раз, когда он пытается получить желаемый хэш в соответствии с вышеупомянутым форматом генерации хэша. Для решения головоломки требуется огромное количество попыток, следовательно, огромная вычислительная мощность. Предположим, майнер только что получил хэш с 19 нулями. Обратите внимание, что транзакция «A отправляет 10 BTC B» действительна и существует в этом примере блока, чей хеш только что был найден с 19 ведущими нулями. 

  1. Майнер получил желаемый хэш со счастливым значением одноразового номера. Используя это одноразовое значение, любой может проверить выходной хэш из 19 нулей; следовательно, это успешный блок. Это одноразовое значение на самом деле является доказательством работы . Когда большинство майнеров проверят одноразовый номер и получат успешный результат работы, это приведет к консенсусу . Затем блок добавляется в базу данных блокчейна. 

  2. Поскольку этот блок содержит транзакцию «A отправляет 10 BTC B». Эта транзакция также успешно завершена. B получает 10 BTC. Право собственности на эти 10 BTC принадлежит B, поскольку B имеет закрытый ключ открытого ключа, который используется в качестве «адреса» транзакции в примере. 

Ответы (1)

В целом правильно. Несколько мелких деталей не соответствуют действительности.

№1. Закрытые ключи — это просто 256-битные числа. Они могут быть созданы случайным образом или, в современных кошельках, как часть иерархической детерминированной последовательности, в которой каждый ключ генерируется повторяющимся образом из семени. См. https://learnmeabitcoin.com/technical/hd-wallets . Кроме того, адрес кошелька не является открытым ключом, хотя и получен от него. Сайт, указанный выше, также объясняет это.

№3. Транзакция явно ссылается на предыдущие транзакции — и именно они проверяются на достаточность средств (а не «весь блокчейн»). Новая транзакция также будет касаться любых избыточных средств.

Мне все еще нужно знать, как транзакции проверяются всеми узлами/майнерами? Например, если майнер берет 100 транзакций и из них 1 транзакция недействительна (пришел запрос на сумму больше баланса) умышленно. И он достиг желаемого хэша. Используя значение nonce, все остальные майнеры смогут проверить блок для достижения консенсуса. Но как все майнеры пришли к соглашению, что все транзакции в добавляемом блоке действительны?
Все транзакции проверяются узлами индивидуально. Если майнер передает блок, содержащий недопустимую транзакцию, он будет отклонен узлами. На самом деле недействительные транзакции даже не транслируются по сети. Работа по проверке выполняется биткойн-клиентом, работающим на всех узлах.
"1 транзакция недействительна (пришел запрос на сумму больше остатка)" Никто, кроме владельца, не отслеживает и не заботится об остатках. Другие узлы (кошельки, майнеры и т. д.) заботятся только о том, чтобы отдельные «монеты» (входы транзакции) еще не были потрачены и чтобы сценарий расходования (фактически доказательство владения) был выполнен.