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.
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:
Sie haben eine lokale Bitcoin oder btcd installiert, mit der Sie Transaktionen abfragen können, auf Kosten des Herunterladens der gesamten Blockchain.
Sie verwenden einen Elektron- oder einen anderen SPV-Server, um Transaktionen abzufragen, auf Kosten der Verbindung zu diesen Knoten.
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:
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.
Verwendung von SX-Tools.
Erstellen Sie in der Bash-Befehlszeile eine private WIF-Schlüsseldatei namens private.key
1MBngSqZbMydscpzSoehjP8kznMaHAzh9y 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):
DECODED_ADDR=$(cat private.key | sx addr | sx decode-addr) # hash160
PREVOUT_SCRIPT=$(sx rawscript dup hash160 [ $DECODED_ADDR ] equalverify checksig) # hash160 + script padding
SIGNATURE=$(cat private.key | sx sign-input txfile.tx 0 $PREVOUT_SCRIPT) # 72 digit der signature
SIGNATURE_AND_PUBKEY_SCRIPT=$(sx rawscript [ $SIGNATURE ] [ $(cat private.key | sx pubkey) ]) # 278 digit script/sig/pubkey
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 = 5HvofFG7K1e2aeWESm5pbCzRHtCSiZNbfLYXBvxyA57DhKHV4U3
txfile.tx = 0100000001be66e10da854e7aea9338c1f91cd489768d1d6d7189f586d7a3613f2a24d53960000000000ffffffff0123ce0100000000001976a9142bc89c2702e0e618db7d59eb5ce2f0f147b4075488ac00000000
rawscript.sigpubkey.tx = 473044022054f60e8ae19411541597167362d12fc132e081a546c766bfd69c16d9d58e268a022048055c7fd8bf78e48543e8756bb3b26336df35b812a184119ba0e9d525bbb8aa0141042daa93315eebbe2cb9b5c3505df4c6fb6caca8b756786098567550d4820c09db988fe9997d049d687292f815ccd6e7fb5c1b1a91137999818d17c73d0f80aef9
signiert.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 key
und 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
Zauberer von Ozzie
Sebi