Блокчейн/Уровень II · Механика/2.2 Транзакции/Урок 2
Входы и выходы
Анатомия транзакции: outpoint, скрипты и неявная комиссия
МатериалыОбозреватель блоков, например mempool.space или blockchain.comКалькулятор для сложения значений в сатоши
Любопытство
- Как транзакция доказывает, что имеет право потратить сумму, созданную другой транзакцией?
- Если отдельного поля для комиссии нет, как майнеры точно знают, сколько им платят?
- Почему первая транзакция в каждом блоке необычна по своей структуре?
Исследование
- Транзакция в Биткоине — это структура данных с номером версии и полем nLockTime, но её основу составляют входы и выходы. Вход не содержит ценности; он указывает на неё. Каждый вход ссылается на конкретный предыдущий выход с помощью outpoint: 32-байтного txid исходной транзакции и 4-байтного индекса, указывающего, какой именно выход этой транзакции тратится. Эта ссылка связывает транзакции в цепочку.
- Каждый вход также содержит данные для разблокировки и поле nSequence. Поле nSequence управляет временными блокировками и сигналами replace-by-fee. Данные для разблокировки, которые хранятся в scriptSig у legacy-транзакций или в секции witness у SegWit, дают криптографическое доказательство, необходимое для выполнения условий выхода, на который ссылается вход. Именно здесь находится подпись, созданная приватным ключом.
- Ценность хранится в выходах. Каждый выход задаёт сумму в сатоши в виде 8-байтного целого числа и скрипт блокировки (scriptPubKey), определяющий, кто сможет потратить её в дальнейшем. Одна транзакция может иметь несколько входов и выходов, но сумма входов должна быть не меньше суммы выходов.
- Комиссия нигде не хранится. Она вычисляется как разница между общей суммой, расходуемой входами, и общей суммой, создаваемой выходами. Этот остаток получает майнер, включивший транзакцию в блок. Если бы суммы были равны, комиссия была бы нулевой; если бы выходы превышали входы, транзакция была бы недействительной.
- Coinbase-транзакция — исключение, которое подтверждает правило. У неё есть один особый вход без предыдущего outpoint, который фактически создаёт новую ценность из ничего. Её выходы содержат субсидию за блок (сейчас 3,125 BTC) плюс все комиссии, собранные с других транзакций этого блока. Txid любой транзакции — это двойной хеш SHA-256 её сериализованных данных без учёта witness-данных.
- Откройте обозреватель блоков и найдите блок 170, добытый 12 января 2009 года. Помимо coinbase-транзакции, в нём есть одна транзакция: Сатоши Накамото отправляет 10 BTC Хэлу Финни. Её единственный вход тратит coinbase-выход блока 9 на 50 BTC. У неё два выхода: 10 BTC Финни и 40 BTC обратно Сатоши. И входы, и выходы в сумме составляют 50 BTC, поэтому комиссия равна нулю; ранние транзакции часто ничего не платили, потому что места в блоках было с избытком.
Ключевые факты
- Вход ссылается на предыдущий выход через outpoint, состоящий из txid и индекса выхода.
- Комиссия за транзакцию — это разница между суммой значений входов и суммой значений выходов.
- Выходы содержат 8-байтное значение в сатоши и скрипт блокировки (scriptPubKey).
- Входы содержат данные для разблокировки (подпись) и поле nSequence для временных блокировок или сигнализации RBF.
- Coinbase-транзакция создаёт новые биткоины с помощью особого входа без предыдущего outpoint.
- Txid — это двойной хеш SHA-256 сериализованной транзакции без учёта witness-данных.
Упражнение девять, шесть, три, один
9СобратьИзучите 9 недавних транзакций в обозревателе блоков. Для каждой запишите количество входов, количество выходов и комиссию в сатоши.
6СгруппироватьРаспределите эти 9 по 6 группам по структуре: один вход — один выход, один вход — два выхода, много входов — один выход (консолидация), один вход — много выходов (пакетный платёж), много входов — много выходов или другое.
3Выделить главноеСведите 6 групп к 3 причинам, по которым у транзакции бывает несколько входов или несколько выходов.
1КристаллизоватьНапишите 1 предложение о том, почему Биткоин может оставлять комиссию неявной, а не указывать её.
Проверка фактов
Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.