pycoin-Befehlszeilentransaktion

Gibt es eine schnelle Möglichkeit, Transaktionen durchzuführen, bei denen nur der private Schlüssel (geheimer Exponent) und die Zieladresse bekannt sind, vorzugsweise von einem Befehlszeilenprogramm wie Pycoin?

Ich verwende Debian/Ubuntu und Python 2.7.

Sie müssen klären, welches Betriebssystem und welche Python-Version Sie verwenden. Unter der Annahme von Win/Posix hat Python 2.7 pybitcointools eine hervorragende CLI. Obwohl ich zustimme, dass Pycoin ein großartiges Werkzeug für die Einfachheit ist. Kompliziertere Anwendungsfälle unter Posix könnten SX/libbitcoin verwenden
Ich verwende derzeit Ubuntu mit Python 2.7.6.

Antworten (4)

Um eine Transaktion zu erstellen, benötigt man die Blockchain, oder zumindest die Transaktionen in der Blockchain, die zu einer bestimmten Adresse gehören (Fachbegriff wäre unverbrauchte Transaktionsausgaben oder UTXOs für ein bestimmtes Skript). Dies kann auf drei Arten geschehen:

  1. Sie haben eine lokale Bitcoin oder btcd installiert, mit der Sie Transaktionen abfragen können, auf Kosten des Herunterladens der gesamten Blockchain.

  2. Sie verwenden einen Elektron- oder einen anderen SPV-Server, um Transaktionen abzufragen, auf Kosten der Verbindung zu diesen Knoten.

  3. Sie verwenden einen zentralisierten Dienst wie blockchain.info, um alle Transaktionen zu sammeln, auf Kosten dessen, dass Sie darauf vertrauen müssen, dass der zentralisierte Dienst die ganze Zeit verfügbar und nicht korrupt ist.

Wie auch immer Sie es aufteilen, Sie können die Transaktionsdaten nicht aus einer Python-Bibliothek abrufen, die keine Verbindung zu einem anderen Dienst herstellt. Daher erhalten Sie mit Tools wie Pybitcointools oder Pycoin nicht das, was Sie brauchen. sx hat einige Tools, um utxos mit Methode #3 nachzuschlagen.

Sie können Armory oder Bitcoin installieren und den privaten Schlüssel importieren und die obige Methode Nr. 1 verwenden oder so etwas wie Pi-Wallet verwenden und Methode Nr. 2 verwenden.

Für Ubuntu, Python 2.7 (gleiches Setup wie ich) würde ich entweder wärmstens empfehlen:

  1. pybitcointools (installieren mit pip install pybitcointools für Version 1.1.15 oder pip install bitcoin für Version 1.1.25 (empfohlen)
  2. sx /libbitcoin. Möglicherweise muss mit dem install.sh - Skript von mastercoin installiert werden , je nachdem, ob Abhängigkeiten funktionieren (ich hatte Probleme mit Tasty Tahr Ubuntu 14.04).

Beide sind CLIs und beide funktionieren ähnlich und ermöglichen das Weiterleiten von Variablen usw. Allerdings scheint pybitcointools die Adressverlaufsfunktion (API-Aufruf an Blockchain.info/Blockr.io) zu unterstützen, und die Support-Dokumentation für pybitcointools scheint selbsterklärender zu sein als das kurze sx- tutorial.

+1 Haben Sie zufällig ein Beispiel dafür, wie Sie eine Transaktion durchführen, wenn Sie nur die WIF und eine Zieladresse kennen?
Aus der Handbuchseite ist mir nicht ganz klar, wie die Zieladresse angegeben wird.
Sicher. Ich werde es tun, sobald ich aus iOS bin. Ich muss herumspielen und werde es hier in ~ 12 Stunden posten
@Sebi nur zur Verdeutlichung, Sie möchten einen Roh-Txn erstellen und BTC von Ihrer Adresse (dh dem privaten Schlüssel) an eine andere Adresse senden, oder?
ja das ist was ich will
OK, ich werde entsprechend bearbeiten. SX-Tools ist, wie ich es in der Vergangenheit gemacht habe. Lesen Sie bitcoin.stackexchange.com/questions/32219/… , wenn Sie Abhängigkeitsprobleme haben, da ich Verfahren sowohl für SX als auch für pybitcointools einfügen werde

Verwendung von SX-Tools.

Erstellen Sie in der Bash-Befehlszeile eine private WIF-Schlüsseldatei namens private.key1MBngSqZbMydscpzSoehjP8kznMaHAzh9y mit diesen Daten darin: 5HvofFG7K1e2aeWESm5pbCzRHtCSiZNbfLYXBvxyA57DhKHV4U3. Zu Ihrer Information , der private Schlüssel (wie hier besprochen ) ist eine Brainwallet von mrbubbymrbubbymrbubby! (was cool ist, denn 1 MB ≈ Brainwallet-Phrase)

OK, jetzt führen wir diese Aliase/Befehle genau in der angegebenen Reihenfolge aus (Knotenkommentare erklären jeden Schritt):

  1. DECODED_ADDR=$(cat private.key | sx addr | sx decode-addr) # hash160
  2. PREVOUT_SCRIPT=$(sx rawscript dup hash160 [ $DECODED_ADDR ] equalverify checksig) # hash160 + script padding
  3. SIGNATURE=$(cat private.key | sx sign-input txfile.tx 0 $PREVOUT_SCRIPT) # 72 digit der signature
  4. SIGNATURE_AND_PUBKEY_SCRIPT=$(sx rawscript [ $SIGNATURE ] [ $(cat private.key | sx pubkey) ]) # 278 digit script/sig/pubkey
  5. sx set-input txfile.tx 0 $SIGNATURE_AND_PUBKEY_SCRIPT > txfile.tx.signed # 192 digit signed txn

In diesem Fall geben die Aliase Folgendes an:

  • DECODED_ADDR=dd6cce9f255a8cc17bda8ba0373df8e861cb866e
  • PREVOUT_SCRIPT=76a914dd6cce9f255a8cc17bda8ba0373df8e861cb866e88ac
  • SIGNATURE=3045022100da43201760bda697222002f56266bf65023fef2094519e13077f777baed553b102205ce35d05eabda58cd50a67977a65706347cc25ef43153e309ff210a134722e9e01
  • SIGNATURE_AND_PUBKEY_SCRIPT=483045022100da43201760bda697222002f56266bf65023fef2094519e13077f777baed553b102205ce35d05eabda58cd50a67977a65706347cc25ef43153e309ff210a134722e9e0141042daa93315eebbe2cb9b5c3505df4c6fb6caca8b756786098567550d4820c09db988fe9997d049d687292f815ccd6e7fb5c1b1a91137999818d17c73d0f80aef9

ENDGÜLTIGE UNTERZEICHNETE TXN:

Hier ist der letzte Roh-Txn, der BTC an 14zWNsgUMmHhYx4suzc2tZD6HieGbkQi5s sendet.

0100000001be66e10da854e7aea9338c1f91cd489768d1d6d7189f586d7a3613f2a24d5396000000008b483045022100da43201760bda697222002f56266bf65023fef2094519e13077f777baed553b102205ce35d05eabda58cd50a67977a65706347cc25ef43153e309ff210a134722e9e0141042daa93315eebbe2cb9b5c3505df4c6fb6caca8b756786098567550d4820c09db988fe9997d049d687292f815ccd6e7fb5c1b1a91137999818d17c73d0f80aef9ffffffff0123ce0100000000001976a9142bc89c2702e0e618db7d59eb5ce2f0f147b4075488ac00000000

Dateiinhalt:

private.key = 5HvofFG7K1e2aeWESm5pbCzRHtCSiZNbfLYXBvxyA57DhKHV4U3txfile.tx = 0100000001be66e10da854e7aea9338c1f91cd489768d1d6d7189f586d7a3613f2a24d53960000000000ffffffff0123ce0100000000001976a9142bc89c2702e0e618db7d59eb5ce2f0f147b4075488ac00000000rawscript.sigpubkey.tx = 473044022054f60e8ae19411541597167362d12fc132e081a546c766bfd69c16d9d58e268a022048055c7fd8bf78e48543e8756bb3b26336df35b812a184119ba0e9d525bbb8aa0141042daa93315eebbe2cb9b5c3505df4c6fb6caca8b756786098567550d4820c09db988fe9997d049d687292f815ccd6e7fb5c1b1a91137999818d17c73d0f80aef9signiert.tx =0100000001be66e10da854e7aea9338c1f91cd489768d1d6d7189f586d7a3613f2a24d5396000000000b00000c0000000000000000ffffffff0123ce0100000000001976a9142bc89c2702e0e618db7d59eb5ce2f0f147b4075488ac00000000

Hier ist ein Beispiel für eine Transaktion auf testnet( https://github.com/suhailvs/bitcoin-code/tree/testnet ), die Sie benötigen private keyund die eine Ausgabeadresse hat, die sich auf den angegebenen privaten Schlüssel bezieht destination address:previous transacion hash

import hashlib
import txnUtils
from keyUtils import keyToAddr, addrToScriptPubkey

# From --> one input
privateKey = hashlib.sha256('abcdefghijklmnop').hexdigest() # mpSyb71528U8dQjuTCeDCcJqH8dQTyY13c
from_address= keyToAddr(privateKey,testnet=True)
txn_hash = "3c24ca820100153fb43434191d10464dd2dcd13f0c9aa07d15f7330e8bcd0596"

# To --> android testnet wallet
to_address = 'miD4PnSDWC2M725hvFBoBhNn8fbowoHnnS'

# Sign the Transction
signed_txn = txnUtils.makeSignedTransaction(
    privateKey, txn_hash, 0, addrToScriptPubkey(from_address), # input: has balance 0.01btc
    [[900000,addrToScriptPubkey(to_address)]] # outputs: 0.009btc 
)

print 'SIGNED TXN', signed_txn

# Broadcast this transaction(ie: signed_txn) at:
# https://testnet.blockexplorer.com/tx/send