Erstellen, Signieren und Pushen einer Bitcoin-Transaktion mithilfe von pybitcointools mit Python

Ich verwende das pybitcointools -Modul in Python 3.4

Ich bin die auf der Github-Seite aufgeführten Beispiele immer wieder durchgegangen, aber es ist weder sehr gut dokumentiert noch der Code.

Meine Situation ist folgende: Ich habe eine Liste mit privaten Schlüsseln in einer CSV-Datei und möchte eine Rohtransaktion für jede Adresse generieren und ihre nicht ausgegebenen Ausgaben an eine einzelne Adresse ausgeben, indem ich die signierte Transaktion an blockchain.info weiterleite

Ich habe ein Problem mit diesen Funktionen: mktx, mksend, sign

Wenn jemand ein Beispiel für den Prozess erstellen und gleichzeitig jeden Schritt dokumentieren und erklären könnte, wozu jedes Argument für jede Funktion dient und wie es verwendet wird. Das wäre eine große Hilfe, wenn hier jemand helfen könnte! Ich habe weit und breit gesucht, aber ich kann einfach keine gute Dokumentation dieses Prozesses finden. Ich bin mir sicher, dass dies auch vielen anderen helfen würde!

Gib mir eine Stunde und ich schreibe eine Antwort. Sie haben Recht, dem Code fehlt es stark an Dokumentation. Schauen Sie sich diesen Fork für einige bessere Codekommentare an, bis ich antworte, aber beachten Sie, dass er nicht für 3.4, sondern nur für 2.7 getestet wurde.

Antworten (1)

Okay, also erstmal:

  1. Verwenden Sie Python 2.7; Es gibt zahlreiche Codeteile, die mit Python 3.4 nicht funktionieren, nämlichmake_request
  2. Schauen Sie sich diesen pybitcointools-Fork an, da es viele zusätzliche Funktionen gibt (siehe README.txtDatei) .

Die Funktionen, die Sie benannt haben, funktionieren wie folgt:

  • mktx(ins, outs)wo insist ein Array von "hexTxIdString:index"und outsist ein Array von{"value": 12345, "address": 1base58addressString}
  • mksend(ins, outs, txfee, 1changeAddress)wo txfeeist wieder in Satoshis
    • sign(unsignedtx, index to sign, privkey for utxo)wo indexist der inputzu signierende Index

Wir beginnen mit den Einfügungen:

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)

Richtig, also nehmen wir an, Sie haben die UTXOs TxIDund die entsprechenden voutfür jeden privaten Schlüssel. Machen Sie ein Diktat von privkeys ={ 'TxID:vout' : privkey, 'TxID2:vout2': privkey2 }Dann endlich, signall(rawtx, privkeys)um Ihren signierten Tx zu erhalten. Um es dann zu übertragen, verwenden Sie pushtx(signedTx, source="bci")oder pushtx(signedTx, "testnet", source="blockr")für Testnet. Getan!

Welche Funktion verwenden Sie, um die Werte für utxos einfach abzurufen? Wie geht man da am besten vor?
Ich benutze diese Gabel, die ich verlinkt habe; Sie können eine Liste des Verlaufs/der nicht ausgegebenen Werte filtern und dann verwenden get_outputs, um die erforderliche Zeichenfolge zurückzugeben. Habe genau das gleiche Problem gehabt
In dem Codeblock oben, den Sie dort haben, wird Ihnen nicht gezeigt, wie Sie mktx verwenden, aber Sie haben es oben erklärt.
address = 164QpJNZPYtHNVZiNmzuG2yEeWok2UfymZAlso sollte ich history(address) statt unspent(address) verwenden? Es sieht nicht so aus, als würde mir der Verlauf den unspent_output-Hash geben? Ich bin immer noch sehr, sehr verwirrt, weil es so aussieht, als würden sie es im Beispiel von pybitcointools ganz anders machen. Ich versuche mir vorzustellen, wie ich es von Anfang an machen soll, indem ich meine Variablen und alles erstelle. "2e204724677fb2f6cc80ed4cc92f0d068e8ec7774f49bfbf4b075aea76154f2b:0"ist die ausgegebene Ausgabe und der Index, habe ich recht? Aus irgendeinem Grund wird mir hier mit der Formatierung in den Arsch getreten.
Eigentlich haben Sie Recht, verwenden Sie unspent: unspent_1 = [unspent(privtoaddr(x)) for x in privs]. Ich glaube, das wird ein Array von "txid:index" zurückgeben, das Sie nach nicht ausgegebenen Werten mit len>1 filtern müssen, [x for y in unspent_1 for x in y]wodurch die abgeflachte Liste zurückgegeben wird. Betreff: mktx, mksend ruft mktx auf, es rechnet einfach die Differenz aus und erstattet diese an eine Änderungsadresse zurück
Ich werde es hier gleich mal ausprobieren. Danke für all die Hilfe.
@encodex cool, ich werde meine Antwort in Kürze bearbeiten, um Ihnen genau den Prozess zu zeigen