Ну можно было короче:
В первых версиях биткоина было так (
pay-to-pubkey transaction):
кто хочет потратить, в своей транзакции на входе писал
vin.scriptSig = PUSH правильная_подпись
vin.txid = ид транзакции которую надо потратить.
На выходе транзакции которую собираются тратить стояло
vout.scriptPubKey = PUSH публичный_ключ CHECKSIG
Итого полный скрипт получался
PUSH правильная_подпись PUSH публичный_ключ CHECKSIG
Соответственно если подпись для публичного ключа действительно правильная, то предыдущая транзакция считалась потраченной.
В следующих версиях скрипты слегка усложнили.
(pay-to-pubkey-hash)кто хочет потратить, в своей транзакции на входе пишет
vin.scriptSig = PUSH правильная_подпись PUSH публичный_ключ
vin.txid = ид транзакции которую надо потратить.
На выходе транзакции которую собираются тратить стоит
vout.scriptPubKey = DUPLICATE HASH160 хэш_публичного_ключа EQUALVERIFY CHECKSIG
Итого полный скрипт получается
PUSH правильная_подпись PUSH публичный_ключ DUPLICATE HASH160 хэш_публичного_ключа EQUALVERIFY CHECKSIG
Потом появилась еще одна разновидность
Pay-To-Script Hashкто хочет потратить, в своей транзакции на входе пишет
vin.scriptSig = PUSH правильная_подпись1 [PUSH правильная_подпись2] [правильная_подпись3] [...] ЛЮБОЙ_ВАЛИДНЫЙ_СКРИПТ
vin.txid = ид транзакции которую надо потратить.
На выходе транзакции которую собираются тратить стоит
vout.scriptPubKey = OP_HASH160 хэш_скрипта OP_EQUAL
Итого полный скрипт получается.
PUSH правильная_подпись1 [PUSH правильная_подпись2] [правильная_подпись3] [...] ЛЮБОЙ_ВАЛИДНЫЙ_СКРИПТ OP_HASH160 хэш(vin.scriptSig) OP_EQUAL
В этом месте у меня уже нет полного понимания, как оно на самом деле работает. Походу дела как-то так:
1. Сначала исполняется скрипт vin.scriptSig
2. Потом берется хэш от vin.scriptSig (или берется хэш только от скрипта, а подписи не хэшируются ?)
3. Полученный хэш засовывается в стек и дальше начинает исполняться OP_HASH160 хэш_скрипта OP_EQUAL
4. Если на выходе стека получится не ноль, значит предыдущая транзакция считается потраченной.
Наконец самое последнее веяние:
SegWit транзакции.Тут я как раз хотел у знатоков поинтересоваться - как они работают.