Можно ли создать транзакцию на чистом питоне без необходимости локального запуска биткойнов?

Допустим, у меня есть биткойн-адрес, на который отправлено 10 BTC. У меня также есть закрытый ключ для этого адреса

Используя Python (2 или 3), есть способ создать подписанную транзакцию (которая, как я полагаю, представляет собой длинную строку шестнадцатеричных цифр), которую затем можно отправить во внешнюю службу (bockchain.info или что-то еще) для распространения по сети.

Кажется, все библиотеки Python для совершения транзакций требуют подключения к интерфейсу bitcoind rpc. В моем приложении не будет локального биткойна.

Я думаю, что код, который я ищу, выглядит следующим образом:

address = '1ALis8zeW1XduXf98ZjoL4EKLen5mVA1q4'
private = '5KiUZd5as1TKsiwnt1KiPgiECtXiuF9BS1MxrAgedNrXcScm4d5'

from some_btc_library import make_transaction

tx_hex = make_transaction(
    inputs=[[address, private]],
    to='123rn4tNGhf1ZehQHLohYn8WRQYhjeGSCw',
    amount=3,
    miner_fee=0.0001
)

send_to_exteral_service(tx_hex)
print "transaction complete"

Ответы (3)

Если вы еще не видели, есть хорошая (ИМХО) статья, в которой описывается, как сгенерировать транзакцию «вручную» с использованием «сырого» python (без биткойн-библиотек или RPC): «Биткойны трудный путь: использование необработанного протокола биткойнов "

Виталик Бутерин недавно поделился Pybitcointools , красивой и простой в использовании библиотекой Python для ручного создания биткойн-транзакций. В примере показан базовый рабочий процесс, который в значительной степени соответствует тому, что вы описали в своем примере (просто разбитым на несколько шагов).

Если вам нужна дополнительная помощь, эта хорошая статья объясняет технические транзакции биткойнов и показывает примеры с использованием библиотеки Pybitcointools .

Я думаю, что PyCoin удовлетворит ваши потребности.

Этот тестовый пример показывает, как построить транзакцию.

Этот тестовый пример показывает, как использовать формат импорта кошелька с PyCoin.

Я также хотел бы отметить, что это не очень хорошая идея. Предположим, что ваш ввод на самом деле составляет 20 BTC вместо 10. Что произойдет, так это то, что Биткойн будет интерпретировать дополнительные 10 BTC как комиссию, которую должен получить майнер.

Обратите внимание, что в дополнение к адресу получателя и закрытому ключу, другой элемент данных, который вам нужен, — это utxo (идентификатор и выходной номер из предыдущей транзакции), который нужно потратить. Если вы не знаете, что это такое, вам понадобится биткойн-клиент (или доступ к копии цепочки блоков), чтобы найти соответствующий utxo с учетом закрытого ключа.