Это перевод, спасибо wwzsocki за полезную информациюЧтобы понять, как работают биткойн-транзакции и каковы их типы, мы должны начать с самого начала и объяснить, что такое биткойн-адрес, транзакция и сценарии и как они работают?
Биткоин адрес - это строка буквенно-цифровых символов, которую пользователь может раздать всем, кто хочет отправить ему деньги. Адреса биткойнов могут быть разных форматов, причем наиболее распространенными являются: Pay-to-PubKeyHash (P2PKH) и Pay-to-ScriptHash (P2SH). Каждый может отправлять биткойны на любой указанный биткойн-адрес, эти средства можно потратить только в том случае, если они отвечают определенным требованиям, установленным системой скриптов Биткойн.
Скрипт - фактически представляет собой список записанных инструкций, сопровождающих каждую выполненную транзакцию; скрипт управляет тем, как следующий человек, желающий потратить отправленные биткойны, может получить к ним доступ.
Скрипты, сопровождающие выходные данные в транзакциях, называются PubKey Scripts (они также известны как скрипты блокировки), которые в коде известны как scriptPubKey. Получатели отправленных биткойнов затем сгенерируют сценарий подписи (также известный как сценарий разблокировки), который представляет собой набор параметров данных, сгенерированных спонсором, который используется для удовлетворения сценария PubKey. Сценарии подписи называются scriptSig в коде.
Пример: когда Алиса решает инициировать транзакцию с Бобом, выходные данные содержат биткойны, которые можно потратить при условии выполнения инструкций, изложенных в прилагаемом скрипте PubKey. Как только эта транзакция будет передана и добавлена в цепочку блоков, сеть будет классифицировать транзакцию как вывод неизрасходованных транзакций (UTXO), а программное обеспечение кошелька Боба распознает его как расходуемый баланс. Когда Боб решает потратить этот UTXO, он создаст вход, который включает сценарий подписи, который должен удовлетворять условиям, которые Алиса поместила в сценарий PubKey предыдущего вывода.
Биткойн транзакция - это передача монет между биткойн-кошельками, которая включается в блокчейн. Биткойн-кошельки хранят секретный фрагмент данных, называемый закрытым ключом или начальным числом, который используется для подписания транзакций, обеспечивая математическое доказательство того, что они получены от владельца кошелька. Подпись также предотвращает изменение транзакции кем-либо после ее выдачи. Все транзакции передаются в сеть и обычно начинают подтверждаться в течение 10-20 минут с помощью процесса, называемого майнингом. Все транзакции видны в блокчейне и могут быть просмотрены с помощью обозревателя. Оюозреватель блокчейна - это сайт, на котором каждая транзакция, включенная в блокчейн, может быть просмотрена человеком. Это полезно для просмотра технических деталей транзакций в действии и для проверки платежей.
Какие бывают типы биткойн-транзакций?TНа момент написания этой статьи было несколько стандартных типов транзакций в биткойнах. Разработчики Bitcoin постоянно совершенствуют типы транзакций, чтобы обеспечить больше функциональности - в будущем список может измениться. Существуют стандартные транзакции, которые принимаются стандартным клиентом - хотя некоторые майнеры принимают последний тип, который является нестандартной транзакцией.
Скрипты > P2PK, P2PKH, P2MS, P2SH, P2WPKH, NULL DATA, NON-STANDARDСтандартные типы скриптов транзакций: pay-to-public-key-hash (
P2PKH), public-key (
P2PK), multi-signature (
P2MS) ограничено 15 ключами, pay-to-script-hash (
P2SH), pay-to-witness-public-key-hash (
P2WPKH) - это была особенность Segwit, которая расшифровывается как Segregated Witness и нулевые данные вывода (
OP_RETURN), которые более подробно описаны в следующих разделах.
Последний тип является особенным, и мы называем его нестандартной транзакцией.
Упрощенное объяснение типов скриптов для новичковP2PKH: "Pay To Public Key Hash" - Так совершается большой процент транзакций. Вы требуете, чтобы отправитель предоставил действительную подпись (из личного ключа) и открытый ключ. Сценарий вывода транзакции будет использовать сигнатуру и открытый ключ после проверки хеша предоставленного открытого ключа с предыдущим выводом, и с помощью некоторых криптографических функций проверит, действительна ли подпись, если она была, то средства будут потрачены. Этот метод скрывает ваш открытый ключ в форме хэша для дополнительной безопасности. Если условие расхода установлено для представления хэша открытого ключа, то это TX P2PKH, и у вас есть структура std Op_Dup, Op_Hash160, ....
P2PK: "Pay To Public Key" - В отличие от P2PKH, который содержит хэш открытого ключа; этот скрипт содержит сам открытый ключ. Любой, кто использует этот метод для отправки средств по сети P2P, показывает людям свой открытый ключ в деталях транзакции. Условие расходов требует от вас только предоставить свой открытый ключ и подпись. Открытый ключ будет распознаваться вашим кошельком (в соответствии с вышеупомянутой схемой кодирования) как адрес «типа 1».
P2SH: "Pay To Script Hash" - стал стандартным сценарием в апреле 2012 года. Результатом транзакции является просто хэш сценариев, известный как redeemscript, который, если он выполняется с конкретными параметрами, приведет к логическому значению true или false. Если майнер запускает выходной скрипт с предоставленными параметрами и в результате получает значение true, деньги будут отправлены на ваш желаемый результат. P2SH используется для кошельков с несколькими подписями, создавая логику выходных сценариев, которая проверяет наличие нескольких подписей перед принятием транзакции. P2SH также может использоваться, чтобы позволить кому-либо или никому тратить средства. Если выходной сценарий транзакции P2SH равен 1 для истины, то попытка потратить выходные данные без указания параметров приведет к тому, что 1 сделает деньги потраченными любым, кто попытается. Это также относится к сценариям, которые возвращают 0, что делает вывод нерациональным.
P2WPKH: "Pay To Witness Public Key Hash" - Это была особенность сегвита, что означает «Сегрегированный Свидетель». Вместо использования параметров scriptSig для проверки правильности транзакции существует новая часть транзакции, называемая свидетелем, где происходит валидация. В 2015 году Питер Уилль представил биткойну новую функцию под названием Segregated Witness, также известную под сокращенным названием Segwit. По сути, Segregated Witness перемещает подтверждение владения из части транзакции scriptSig в новую часть, называемую свидетелем ввода.
P2MS: "MultiSignature" - Используется, когда нужно более чем одного ключа для авторизации транзакции Биткойн и впервые был применен к адресам Биткойн в 2013 году. Обычно используется для разделения ответственности за владение биткойнами. Стандартные транзакции в сети Биткойн могут называться «транзакциями с единой подписью», поскольку для передачи требуется только одна подпись - от владельца закрытого ключа, связанного с адресом Биткойна. Тем не менее, сеть Биткойн поддерживает гораздо более сложные транзакции, которые требуют подписи нескольких людей, прежде чем средства могут быть переведены. Их часто называют транзакциями M-of-N. Идея состоит в том, что биткойны становятся «обремененными», предоставляя адреса нескольких сторон, что требует сотрудничества этих сторон для того, чтобы что-то с ними сделать. Эти стороны могут быть людьми, учреждениями или запрограммированными сценариями. Стал стандартным сценарием в январе 2012 года.
NULL DATA: (OP_RETURN) - тип транзакции, ретранслируемый и добавленный по умолчанию в Bitcoin Core 0.9.0 и более поздних версиях, который добавляет произвольные данные в доказуемый ненадежный сценарий pubkey, которые полные узлы не должны хранить в своей базе данных UTXO. Любой может использовать сценарий NULL DATA для добавления произвольных данных в транзакцию, поэтому вы можете найти их разбросанными по блокчейну. Мы должны помнить, что не все майнеры принимают транзакции с нулевыми данными, и не все узлы передают их. (OP_RETURN) outputLook для пустых выходных данных при просмотре цепочки блоков, поскольку сценарии NULL DATA почти всегда размещаются на пустых выходных данных (поскольку выходные данные делаются блокируемыми).
Вот веб-страница со списком метаданных, недавно встроенных в цепочку биткойнов с использованием выходных данных OP_RETURN:
http://coinsecrets.org/Non-Standart - чтобы включить этот тип транзакции в цепочку биткойнов, необходимо достичь соглашения с майнером: нестандартная транзакция будет затем включена в цепочку блоков, когда майнер разрешит блок. Зависит от скорости хэширования от майнера, это может быть довольно долго, принимая во внимание очень высокую фактическую сложность, которая постоянно растет с момента старта биткойна. Конечно, майнер возьмет на себя соответствующую плату за нестандартную транзакцию.
Отличный ресурс для генерации адреса из hex pubkey:
http://gobittest.appspot.com/Address
Подробное описание типов транзакций в биткойнах для более опытных пользователей.Pay-to-PubKey - (P2PK) - более простая форма оплаты биткойнами, чем pay-to-public-key-hash. В этой форме сценария сам открытый ключ хранится в скрипте блокировки, а не в хеше открытого ключа, как в случае с P2PKH, что намного короче. P2PK - это шаблон сценария, который блокирует вывод для открытого ключа. Несмотря на то, что P2PK является самым простым сценарием для привязки биткойнов к чьему-то открытому ключу, он используется не так часто, как аналогичный (но более сложный) сценарий P2PKH. Это связано с тем, что оригинальный майнер Bitcoin Core использовал P2PK для вознаграждения за блок при построении блока-кандидата. Вы чаще всего найдете P2PK в транзакциях на основе монет в более ранних блоках в блокчейне.
Pay-to-Public-Key-Hash - (P2PKH) Подавляющее большинство транзакций, обрабатываемых в сети биткойнов, были транзакциями P2PKH. Они содержат сценарий блокировки, который кодирует выходные данные с помощью хэша открытого ключа, более известного как адрес биткойна. Выход, заблокированный сценарием P2PKH, можно разблокировать (потратить), представив открытый ключ и цифровую подпись, созданную соответствующим закрытым ключом.
P2PKH - это скрипт по умолчанию, используемый кошельками, когда вы хотите «отправить» кому-то биткойны, так что вы можете найти его в большинстве блоков в блокчейне. Этот шаблон сценария используется для «отправки» кому-либо биткойнов. Это наиболее распространенный сценарий, используемый для блокировки вывода на чей-то открытый ключ. Он похож на P2PK, но вместо этого блокировка содержит хэш открытого ключа (а не сам открытый ключ). Каждый раз, когда вы отправляете биткойны на адрес, начинающийся с 1, вы создаете скрипт блокировки P2PKH.