Отправка транзакции с Python + необработанный протокол

Два дня назад я нашел несколько статей об использовании необработанного протокола биткойнов, и теперь я все еще пытаюсь отправить транзакцию.

Мой код основан на этом классе , и если я правильно понимаю всю эту биткойн-магию, мне нужно подписать мою необработанную входную транзакцию закрытым ключом для адреса 1LwPhYQi4BRBuuyWSGVeb6kPrTqpSVmoYzи добавить мой открытый ключ сразу после него — и это будет действительный сценарий разблокировки. ?

Вот часть моего кода, который я полностью скопировал из предыдущей ссылки:

tx_in_count = struct.pack("<B", 1)
tx_in = {}                                                                                                                                                                                                     tx_in["outpoint_hash"] = flip_byte_order(previous_output_hash).decode("hex")
tx_in["outpoint_index"] = struct.pack("<L", 1)
tx_in["script"] = ("76a914%s88ac" % private_key).decode("hex")
tx_in["script_bytes"] = struct.pack("<B", (len(tx_in["script"])))
tx_in["sequence"] = "ffffffff".decode("hex")

Я не уверен насчет tx_in["script"]строки, потому что там ничего не говорится о подписании транзакций или открытых ключей, поэтому, вероятно, это причина моих неудач.

Спасибо за любые ответы :)

Этот код выглядит неправильно.

Ответы (1)

Во-первых, если вы хотите узнать, как построить необработанную транзакцию, вам действительно следует ответить на этот вопрос: Требуется пошаговый пример погашения необработанной транзакции.

Во-вторых, для tx_in требуется outpoint_hash, который является хэшем предыдущей транзакции, из которой вы тратите деньги.

В-третьих, вы никогда не должны кодировать свой закрытый ключ для какой-либо части транзакции, как вы это делали в tx_in["script"]. Это должно оставаться на защищенном устройстве, и вам нужно это для создания подписи.

В- четвертых, tx_in["script"]должен быть одинаковый скрипт с oupoint (хеш, индекс). Специфика языка сценариев, который закодирован в шестнадцатеричном формате (76a914...88ac), представляет собой OP-коды, которые вы должны изучить (см. ссылку выше).

В-пятых, эта библиотека подписывает в другом месте, так как script_bytesэто должен быть фактический открытый ключ и подпись.

Я думаю, вам было бы легче понять, используя немного более стандартную библиотеку Python, такую ​​как pycoin ( https://github.com/richardkiss/pycoin ) или pybitcoin ( https://github.com/blockstack/pybitcoin ) .