Протокол Биткоин: как работают транзакции
Протокол Биткойн был впервые анонсирован 31 октября 2008 года, когда Сатоши Накамото, анонимный основатель(и) Биткойна, отправил технический документ Биткойна в список рассылки Cypherpunk. Чуть более двух месяцев спустя, примерно 3 января 2009 года, был добыт первый блок в цепочке блоков Биткойн, и протокол Биткойн ожил.
В этой статье рассматриваются фундаментальные концепции работы протокола Биткойн. Мы рассмотрим основы исходного кода Биткойна, процессы транзакций, механизмы безопасности и типы платежей.
Исходный код Bitcoin
Доступность - это один из атрибутов, который привел к массовому внедрению протокола Биткоин. Сатоши Накамото запустил Bitcoin Core как программное обеспечение с открытым исходным кодом, которое позволяет разработчикам блокчейнов постоянно выпускать новые обновления, улучшающие функциональность протокола.
Оригинальный исходный код Bitcoin Core написан на C ++, а последнюю версию можно найти на GitHub. C ++ не только используется в протоколе Биткойн, но также стал одним из самых популярных блокчейн языков программирования для других протоколов. Этот язык программирования поддерживает жесткий контроль использования памяти и ЦП. Это также позволяет узлам быстро проверять и распространять блоки, что означает, что транзакции обрабатываются эффективно.
По мере того, как Биткоин стал более популярным, были выпущены новые клиенты, написанные на других языках программирования. Сегодня разработчики блокчейнов также имеют возможность создавать приложения Биткойн с использованием Python, Golang, Java или Rust.
Вывод неизрасходованной транзакции (UTXO)
BTC - это собственная монета протокола Биткойн, которая используется во всех сетевых транзакциях. Для организации транзакций BTC протокол Биткоин представил первый в мире блокчейн (один из разновидностей технологии распределенного реестра). В частности, Биткоин использует модель неизрасходованного вывода транзакций (UTXO) как способ отслеживать движение средств и предотвращать проблему двойных расходов. Важно понимать, что каждый UTXO можно потратить только один раз. Когда один пользователь проводит UTXO, создается один или несколько новых UTXO.
Допустим, у Боба в биткоин-кошельке 1,2 BTC. Он хочет отправить Алисе 1 BTC. Перед обработкой транзакции сети необходимо распознать, что в кошельке Боба содержится не менее 1 BTC. Если в кошельке Боба нет хотя бы 1 BTC, то он не сможет отправить 1 BTC Алисе.
В модели UTXO один или несколько неизрасходованных выходов могут быть добавлены вместе, чтобы отразить общую сумму средств, принадлежащих одному пользователю. В нашем примере у Боба может быть один UTXO стоимостью 0,5 BTC, а другой - 0,7 BTC, что соответствует общей сумме средств в его биткойн-кошельке. При отправке 1 BTC Алисе Боб фактически должен отправить всю сумму обоих UTXO (1,2 BTC). Затем Боб получает один новый UTXO, содержащий 0,2 BTC. Тем временем Алиса получает один новый UTXO, содержащий 1,0 BTC.
Биткоин-скрипт и коды операций
Как обсуждалось выше, программное обеспечение с открытым исходным кодом Биткоин (известное как Bitcoin Core) написано на C ++. Однако протокол Биткоин на самом деле использует другой язык программирования, называемый Биткойн-скрипт, чтобы давать инструкции Bitcoin Core о том, как можно потратить каждый UTXO. Большинству пользователей на самом деле не нужно изучать биткоин-скрипт. Это связано с тем, что и биткоин-кошельки, и другие приложения автоматически выполняют обработку биткоин-скриптов за кулисами. Тем не менее, хорошо понимать, что такое биткоин-скрипт и почему он так важен.
Биткоин-скрипт использует систему кодов операций. По сути, коды операций - это команды, которые сообщают узлам в сети Биткоин, как обрабатывать любой запрос транзакции. Каждый код операции начинается с префикса «OP_», за которым следует конкретная команда. Например, OP_CHECKSIG используется как механизм для проверки того, что отправитель транзакции применяет правильную цифровую подпись. Независимо от того, хочет ли пользователь отправить стандартную транзакцию или создать собственный сценарий транзакции, биткойн-сценарий и коды операций являются обязательными компонентами этого процесса.
Приватные ключи Биткоин
Для обеспечения безопасности средств пользователей в протоколе Биткоин используется асимметричное шифрование. В этой системе пользователи могут генерировать приватные ключи (также известные как секретные ключи) как часть пары приватных и открытых ключей. Приватные ключи должны храниться в секрете, а открытые ключи могут быть общедоступными для получения транзакций BTC. Только пользователь, имеющий доступ к соответствующему приватному ключу Биткоин, может тратить средства (разблокировать UTXO), которые отправляются на соответствующий открытый ключ. Таким образом, открытый ключ можно сравнить с номером банковского счета. Приватный ключ можно сравнить с кодом доступа к банковскому счету. Основное отличие состоит в том, что количество приватных ключей невероятно велико - настолько велико, что шансы угадать правильную комбинацию пары приватных и открытых ключей практически равны нулю.
Безопасность приватных ключей Биткоин поддерживается криптографией на основе эллиптических кривых (ECC) и криптографическими хеш-функциями. Эти математические концепции применяются для предоставления пользователям двух основных преимуществ. Во-первых, пользователи могут делиться своим открытым ключом с кем угодно в сети для получения платежей. Учитывая открытый ключ, перепроектировать приватный ключ практически невозможно. Во-вторых, пользователи, которые хотят отправлять транзакции BTC по сети, могут использовать свой приватный ключ для создания цифровых подписей. Цифровая подпись работает аналогично одноразовому паролю для аутентификации личности. Это позволяет получателю транзакции или кому-либо еще в сети математически доказать со 100-процентной уверенностью, что конкретный приватный ключ Биткоин предоставил подпись. Более того, приватный ключ никогда не раскрывается в сети в процессе.
Биткоин-кошельки и адреса
Как и другие криптосистемы, использующие криптографию с открытым ключом, мы знаем, что Биткоин поддерживает генерацию пар приватного и открытого ключей. Однако на самом деле этот процесс идет еще дальше. Хотя пользователи могут получать средства с помощью открытого ключа, они могут использовать адрес биткоин-кошелька (также известный как публичный адрес) для получения транзакций BTC. Публичный адрес создается из соответствующего открытого ключа с использованием двух алгоритмов хеширования: алгоритм 256 безопасного хеширования (SHA-256) и дайджест сообщения оценки примитивов целостности RACE 160 (RIPEMD-160). Публичные адреса более широко используются благодаря безопасности, обеспечиваемой этим дополнительным уровнем шифрования, и более дружелюбному пользовательскому интерфейсу, обеспечиваемому более короткой буквенно-цифровой строкой.
Каждый биткоин-кошелек по умолчанию имеет приватный ключ и соответствующий публичный адрес (а также открытый ключ). Часто используемая аналогия - рассматривать биткоин-кошельки как связку ключей. Вообще говоря, каждый биткоин-кошелек предназначен для хранения нескольких пар ключей. Пользователи должны иметь возможность создавать новые пары ключей в любое время. Технически BTC никогда не хранится в биткоин-кошельке. Тем не менее, мы можем рассматривать биткоин-кошелек как удобный интерфейс для хранения, отправки и получения BTC. Несколько популярных типов биткоин-кошельков включают настольные кошельки, кошельки веб-браузера, аппаратные кошельки, мобильные кошельки и бумажные кошельки.
Биткоин-транзакции
Протокол Биткоин позволяет пользователям отправлять различные типы платежей. Три популярных примера включают Pay To Pubkey (P2PK), Pay To Pubkey Hash (P2PKH) и Pay To Script Hash (P2SH). Обратите внимание, что BTC отправляется с каждым типом платежа, но необходимые шаги немного различаются.
Оплата в Pubkey (P2PK)
Когда в 2009 году был запущен протокол Биткоин, важным типом оплаты была Pay To Pubkey (P2PK). На тот момент это был единственный вид оплаты, кроме P2PKH. В 2009 и 2010 годах сеть требовала, чтобы пользователи, запускающие узлы (известные как майнеры криптовалюты), принимали вознаграждения за блоки через транзакции P2PK. Кроме того, программное обеспечение для майнинга BTC для процессоров поддерживает P2PK. Хотя этот тип оплаты получил некоторую раннюю поддержку, его использование прекратилось из-за дополнительных преимуществ, предоставляемых использованием общедоступных адресов вместо открытых ключей.
Когда P2PK-транзакция создается и отправляется в одноранговую сеть Биткоина, отправитель отправляет средства из своего собственного Биткоин-кошелька на открытый ключ (также известный как pubkey для краткости) другого пользователя. Если получатель захочет потратить эти средства (потратить соответствующий UTXO) в любой момент в будущем, ему нужно только доказать, что он владеет открытым ключом, на который были отправлены средства.
Оплата в хэш Pubkey (P2PKH)
Наряду с P2PK, Pay To Pubkey Hash (P2PKH) изначально поддерживался в качестве типа платежа, когда протокол Биткоин был запущен в 2009 году. P2PKH остается самым популярным способом отправки и получения BTC. На момент написания этой статьи более 54% существующего предложения BTC хранится на выходах P2PKH.
Транзакции P2PKH очень похожи на транзакции P2PK. Наиболее важное отличие состоит в том, что транзакции P2PKH отправляются в хэш открытого ключа получателя. P2PKH в конечном итоге получил более широкое распространение по двум основным причинам. Во-первых, по сравнению с открытым ключом хэш открытого ключа представляет собой более короткую и более управляемую буквенно-цифровую строку. Во-вторых, P2PKH позволяет обнаруживать ошибки с помощью функции контрольной суммы, помогая пользователям значительно снизить вероятность отправки BTC на недопустимый адрес.
Плата за скрипт хэш (P2SH)
Pay To Script Hash (P2SH) был представлен как тип оплаты в 2012 году. Он быстро получил поддержку со стороны пользователей, которым требовались дополнительные функции, не предоставляемые через типы оплаты P2PK или P2PKH. На момент написания этой статьи почти 31% существующего запаса BTC хранится на выходах P2SH.
Транзакции P2SH обычно добавляют ограничения в дополнение к требованию обычной цифровой подписи или проверки открытого ключа. Например, транзакция P2SH может потребовать от получателя или группы получателей предоставить цифровые подписи из нескольких приватных ключей. Эти ограничения создаются с помощью нескольких строк Биткойн-скрипта. Затем создается хэш этого сценария как способ заблокировать платеж в транзакции P2SH.
P2SH предоставляет два преимущества по сравнению с ранее разработанными способами оплаты. Во-первых, отправители могут отправлять BTC, не беспокоясь о том, как получатели разблокируют соответствующий UTXO (например, с помощью кода доступа или с учетом требований множественной подписи). Во-вторых, P2SH позволяет отправителям требовать от получателей оплаты дополнительных сетевых комиссий за транзакции. Прежде чем P2SH стал стандартизированным типом оплаты, отправителям приходилось проходить утомительный процесс написания настраиваемых строк кода (известных как сценарии) с использованием сценария Биткоин для достижения того же результата.
Дополнительные протоколы цепочки блоков
Сегодня Биткоин можно считать семейством протоколов. Это потому, что ряд протоколов цепочки блоков был создан как ответвления протокола Биткоин. Во многих случаях протоколы цепочки блоков, которые происходят из протокола Биткоин, функционируют совершенно по-разному и служат совершенно разным целям.
Например, Zcash - это хорошо известный проект криптовалюты, который был создан с использованием кода, изначально написанного для клиента Bitcoin Core. Хотя некоторые характеристики этих двух протоколов одинаковы (например, оба используют модель UTXO), разработчики Zcash представили несколько отличных функций. Например, доказательства с нулевым разглашением позволяют сохранять конфиденциальность транзакций в сети Zcash. Litecoin, Bitcoin Cash и Dash - другие популярные примеры проектов криптовалюты, которые были созданы с использованием исходного клиента Bitcoin Core.
Кроме того, существует множество проектов криптовалюты, которые были созданы на основе автономных протоколов цепочки блоков, что означает, что они не происходят из протокола Биткоин или какого-либо другого существующего протокола. Несколько ярких примеров включают Ethereum, EOS, Stellar, Tezos, Cardano, Cosmos и Monero.
Кроме того, в некоторых криптовалютных проектах используются другие типы технологий распределенного реестра. Например, IOTA использует направленный ациклический граф (DAG) для организации транзакций, а не блокчейн. По большей части большинство протоколов блокчейнов изначально проектировались как разрозненные экосистемы. Другими словами, протокол Биткоин не может легко подключаться или взаимодействовать с протоколом Ethereum. Однако технические решения, такие как атомарные свопы, теперь обеспечивают некоторую совместимость блокчейнов между различными протоколами.
Узнать больше о Bitcoin протоколе
Если вы нашли этот обзор протокола Биткоин полезным, ознакомьтесь с серией материалов Komodo's Blockchain Fundamentals. Есть десятки информативных статей, которые помогут вам узнать все о том, как работает технология блокчейн. Подробные руководства доступны для UTXO, биткоин-скрипта, биткоин-секретных ключей и многих других концепций, представленных в этой статье.
Чтобы идти в ногу с прогрессом Komodo, вы можете присоединиться к Komodo Discord и подписаться на ежемесячную рассылку новостей.
Начните свое путешествие по блокчейну с Komodo сегодня.
Присоединяйтесь к нашему сообществу в Твиттер и вступайте в наш Телеграм канал, чтобы узнать последние новости Komodo и пообщаться с другими членами сообщества.
#ОсновыБлокчейн