Ist es möglich, eine Transaktion in reinem Python zu erstellen, ohne Bitcoin lokal ausführen zu müssen?

Nehmen wir an, ich habe eine Bitcoin-Adresse, an die 10 BTC gesendet werden. Ich habe auch den privaten Schlüssel für diese Adresse

Mit Python (2 oder 3) gibt es eine Möglichkeit, eine signierte Transaktion zu erstellen (von der ich glaube, dass sie eine lange Reihe von Hex-Ziffern ist), die dann zur Netzwerkverbreitung an einen externen Dienst (bockchain.info oder was auch immer) gesendet werden kann.

Es scheint, dass alle Python-Bibliotheken zum Durchführen von Transaktionen eine Verbindung zur Bitcoin-RPC-Schnittstelle erfordern. In meiner Anwendung wird es keine lokal ausgeführte Bitcoin geben.

Ich denke, der Code, den ich suche, ist wie folgt:

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"

Antworten (3)

Falls Sie es nicht gesehen haben, gibt es einen guten (IMHO) Artikel, der beschreibt, wie man eine Transaktion "manuell" mit "raw" Python (keine Bitcoin-Bibliotheken oder RPC) generiert: "Bitcoins the hard way: Using the raw Bitcoin protocol "

Vitalik Buterin hat kürzlich Pybitcointools geteilt , eine schöne und einfach zu verwendende Python-Bibliothek zum Erstellen von Bitcoin-Transaktionen. Das Beispiel zeigt den grundlegenden Arbeitsablauf, der ziemlich genau dem entspricht, was Sie in Ihrem Beispiel beschrieben haben (nur auf einige weitere Schritte heruntergebrochen).

Wenn Sie weitere Hilfe benötigen, erklärt dieser nette Artikel Bitcoin-Transaktionen technisch und zeigt Beispiele mit der Pybitcointools- Bibliothek.

Ich denke, dass PyCoin Ihren Bedürfnissen entsprechen würde.

Dieser Testfall zeigt, wie eine Transaktion erstellt wird.

Dieser Testfall zeigt, wie das Wallet-Importformat mit PyCoin verwendet wird.

Ich möchte auch anmerken, dass dies keine sehr gute Idee ist. Angenommen, Ihre Eingabe beträgt tatsächlich 20 BTC statt 10. Was passieren wird, ist, dass Bitcoin die zusätzlichen 10 BTC als eine Gebühr interpretiert, die vom Miner eingezogen werden muss.

Beachten Sie, dass neben der Zieladresse und dem privaten Schlüssel das andere Datenelement, das Sie benötigen, das utxo (ID und Ausgabenummer einer vorherigen Transaktion) ist, das ausgegeben werden soll. Sofern Sie nicht zufällig wissen, was das ist, benötigen Sie einen Bitcoin-Client (oder Zugriff auf eine Kopie der Blockchain), um mit dem privaten Schlüssel ein geeignetes utxo zu finden.