Post
Topic
Board Кодеры
Re: Помогите разобраться с SegWit
by
amaclin1
on 11/09/2017, 10:56:54 UTC
Все адреса из блокчейна вытащил) Вначале пробовал в MySQL на PHP, но получилось сильно долго и
много места. Более компактно и быстро получилось с levelDb и хранением адресов в бинарном виде.
Прекрасно. Половина дела сделана. Базу вы как парсите? Дергаете клиент за API
или самостоятельно открываете  читаете blk-файлы?

Quote
Я ведь правильно понимаю? Что раньше скрипт разблокировки включался в выход транзакции.
Сейчас там содержится только хеш Меркля (P2SH), само дерево представляет из себя возможные
Ой-вей. Всё смешалось в доме Облонских.
Меркля забудьте. И не вспоминайте. Этот хэш вообще из другой оперы.

Есть несколько "разновидностей" использования сегвита.
Два (по-моему) нативных и два завернутых в P2SH

Начнем с нативных.
А, не, давайте вспомним сперва как работает самый популярный p2pkh

scriptPubKey = OP_DUP OP_HASH160
OP_EQUALVERIFY OP_CHECKSIG
такой скрипт в обычных условиях вернет в стеке "1" если в scriptSig будет два пуш-элемента:
сигнатура и публичный ключ. Причем хэш публичного ключа (не Меркль, а посчитанный
по-биткойновски) должен быть равным адресу (иначе OP_EQUALVERIFY бросит исключение),
а сигнатура должна правильно подписывать подписывать дайджест (иначе OP_CHECKSIG вернет
"0" или вообще бросит исключение)

Задание на проверку навыков. Что если scriptSig состоит не из двух, а из трех и более элементов?
последний - это публичный ключ, предпоследний - валидная сигнатура, а остальные - какие-либо
другие? Что будет в стеке после выполнения? Будет ли транзакция валидной? Подтвердят ли её майнеры?

И второе задание на проверку навыков: а если в scriptSig  будет одна или ноль пуш-операций?
На какой команде произойдет сбой выполнения?

Теперь переходим к нативным.
Я по памяти буду писать. Идею изложу, но могу где-то напутать.
Нативный pubkeyScript имеет вид OP_0
Про сегвит пока забыли. Давайте проверим навыки. Каким должен быть scriptSig
чтобы после последовательного выполнения scriptSig и scriptPubkey наверху стека
оказалось бы ненулевое значение. (ответ на этот вопрос можно высказать одним словом)