Два дня назад я нашел несколько статей об использовании необработанного протокола биткойнов, и теперь я все еще пытаюсь отправить транзакцию.
Мой код основан на этом классе , и если я правильно понимаю всю эту биткойн-магию, мне нужно подписать мою необработанную входную транзакцию закрытым ключом для адреса 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"]
строки, потому что там ничего не говорится о подписании транзакций или открытых ключей, поэтому, вероятно, это причина моих неудач.
Спасибо за любые ответы :)
Во-первых, если вы хотите узнать, как построить необработанную транзакцию, вам действительно следует ответить на этот вопрос: Требуется пошаговый пример погашения необработанной транзакции.
Во-вторых, для 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 ) .
Питер Уилле