Создание, подписание и отправка биткойн-транзакции с помощью pybitcointools с Python

Я использую модуль pybitcointools в python 3.4.

Я снова и снова просматривал примеры, перечисленные на странице github, но они не очень хорошо документированы, как и код.

Моя ситуация такова: у меня есть список закрытых ключей в CSV, и я хочу сгенерировать необработанную транзакцию для каждого адреса и потратить их unspent_outputs на один адрес, отправив подписанную транзакцию в blockchain.info

У меня проблема с этими функциями: mktx, mksend, sign

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

Дайте мне час, и я напишу ответ. Вы правы, коду сильно не хватает документации. Проверьте этот форк для некоторых лучших комментариев к коду, пока я не отвечу, но обратите внимание, что он не тестировался для 3.4, только для 2.7,

Ответы (1)

Итак, сначала:

  1. Используйте Python 2.7; существует множество фрагментов кода, которые не работают с Python 3.4, а именноmake_request
  2. Проверьте этот форк pybitcointools , так как в нем много добавленной функциональности (см. README.txtфайл)

Функции, которые вы назвали, работают так:

  • mktx(ins, outs)где insмассив "hexTxIdString:index"и outsмассив{"value": 12345, "address": 1base58addressString}
  • mksend(ins, outs, txfee, 1changeAddress)где txfeeопять в сатоши
    • sign(unsignedtx, index to sign, privkey for utxo)где indexиндекс inputдля подписи

Начнем со входов:

utxos = [(utxo_txid, utxo_index), (txid2, i2)....]
ins = ["%s:%d" % utxo for utxo in utxos]
change_addr = "1thisIsAChangeAddressYouOwn123"
txfee = int(0.45 * len(ins) * 10000) # you may want to check this 10000 value, it could be 100000
rawtx = mksend(ins, txfee, change_addr)

Итак, давайте предположим, что у вас есть UTXO TxIDи соответствующие voutкаждому закрытому ключу. Сделайте диктант privkeys ={ 'TxID:vout' : privkey, 'TxID2:vout2': privkey2 }Затем, наконец, signall(rawtx, privkeys)чтобы получить подписанный Tx. Затем, чтобы транслировать его, используйте pushtx(signedTx, source="bci")или pushtx(signedTx, "testnet", source="blockr")для Testnet. Сделанный!

Какую функцию вы используете, чтобы легко получить значения для utxos? Как лучше всего это сделать?
Я использую ту вилку, которую я связал; вы можете отфильтровать список истории/неизрасходованных, а затем использовать get_outputsдля возврата требуемой строки. Была точно такая же проблема
В приведенном выше блоке кода не показано, как вы используете mktx, но вы объяснили это выше.
address = 164QpJNZPYtHNVZiNmzuG2yEeWok2UfymZИтак, я должен использовать историю (адрес), а не неизрасходованные (адрес)? Не похоже, что история дает мне хэш unspent_output? Я все еще очень, очень запутался, потому что кажется, что в примере с pybitcointools они делают это совершенно по-другому. Я пытаюсь представить, как это сделать с самого начала, создавая свои переменные и все такое. "2e204724677fb2f6cc80ed4cc92f0d068e8ec7774f49bfbf4b075aea76154f2b:0"это израсходованный вывод и индекс, я прав? По какой-то причине мне надрали задницу с форматированием здесь.
На самом деле, вы правы, используйте unspent: unspent_1 = [unspent(privtoaddr(x)) for x in privs]. Я полагаю, что это вернет массив «txid:index», который вам нужно будет отфильтровать для неизрасходованных средств с len> 1, с [x for y in unspent_1 for x in y]которым возвращается сглаженный список. Re: mktx, mksend вызывает mktx, он просто вычисляет разницу и возвращает ее на измененный адрес.
Я дам ему водоворот здесь в немного. Спасибо за помощь.
@encodex круто, я скоро отредактирую свой ответ, чтобы точно показать вам процесс