Bitcoin: встроенная система сценариев и цифровые контракты.
В этом же посте затронут весьма узкий аспект — встроенная система сценариев, предназначенная для проверки валидности транзакций, а также некоторые её возможности. На родном языке такой информации мне не попадалось, потому вношу свою лепту.
http://habrahabr.ru/blogs/p2p/139291/Отвечу сюда. На хабре не зареган.
http://habrahabr.ru/blogs/p2p/139291/#comment_4663474...
По поводу BIP12/BIP16 — почитав, не могу сказать определенно, но кажется бредом. PayToScriptHash не может работать даже в теории, ибо ScriptHash=HASH(scriptSig) не известен и не может быть известен в принципе отправляющей стороне, поскольку ECDSA-сигнатура состоит наполовину из случайного числа.
...
Видимо vibornoff не внимательно прочитал.
В scripthash транзакции в out пишется:
OP_HASH160
HASH({pubKeyA OP_CHECKSIG})
OP_EQUAL
То есть в качестве адреса получателя выступает хэш-образ сценария
{pubKeyA OP_CHECKSIG}А в in:
signature(TX)
{pubKeyA OP_CHECKSIG}
Зная тип транзакции, отправитель формирует сценарий со своим открытым ключом и подписью, тем самым доказывая владение выходом. Сценарий
{pubKeyA OP_CHECKSIG} сериализуется и записывается в виде константы.
И в итоге для проверки транзакции выполняется сценарий:
signature(TX)
{pubKeyA OP_CHECKSIG}
OP_HASH160
HASH({pubKeyA OP_CHECKSIG})
OP_EQUAL
Если хэш-образы
{pubKeyA OP_CHECKSIG} равны, то выполняется сценарий:
signature(TX)
pubKeyA
OP_CHECKSIG
Успешное выполнение последнего сценария доказывает корректность транзакции.
Попытаюсь ответить rPman
http://habrahabr.ru/blogs/p2p/139291/#comment_4663669Официальный клиент Bitcoin позволяет проводить только те транзакции которые в точности до инструкции попадают под шаблон. Сейчас их 4 штуки: PUBKEY, PUBKEYHASH, SCRIPTHASH, MULTISIG.
https://github.com/bitcoin/bitcoin/blob/master/src/script.cpp#L1126