transacción de línea de comando de pycoin

¿Existe una forma rápida de realizar transacciones conociendo solo la clave privada (exponente secreto) y la dirección de destino, preferiblemente desde una utilidad de línea de comandos como pycoin?

Estoy usando Debian/Ubuntu y Python 2.7.

Deberá aclarar qué versión de sistema operativo y Python está utilizando. Asumiendo Win/Posix, Python 2.7 pybitcointools tiene una CLI excelente. Aunque estoy de acuerdo en que Pycoin es una gran herramienta por simplicidad. Casos de uso más complicados bajo posix podrían usar SX/libbitcoin
Actualmente estoy usando Ubuntu con Python 2.7.6.

Respuestas (4)

Para crear una transacción, necesita la cadena de bloques, o al menos las transacciones en la cadena de bloques que pertenecen a una dirección en particular (el término técnico sería salidas de transacciones no gastadas o UTXO para una secuencia de comandos en particular). Hay tres maneras en que esto puede suceder:

  1. Tiene instalado un bitcoind o btcd local que le permitiría consultar transacciones, a expensas de descargar toda la cadena de bloques.

  2. Utiliza un electrum o algún otro servidor SPV para consultar transacciones, a expensas de conectarse a estos nodos.

  3. Utiliza un servicio centralizado como blockchain.info para recopilar todas las transacciones a expensas de tener que confiar en que el servicio centralizado esté activo todo el tiempo y no sea corrupto.

De cualquier forma que lo corte, no puede obtener los datos de transacción de una biblioteca de Python que no se conecta a algún otro servicio. Por lo tanto, herramientas como pybitcointools o pycoin no le darán lo que necesita. sx tiene algunas herramientas para buscar utxos usando el método #3.

Puede instalar Armory o bitcoind e importar la clave privada y usar el método n. ° 1 anterior o usar algo como pi-wallet y usar el método n. ° 2.

Para Ubuntu, Python 2.7 (la misma configuración que yo) recomiendo:

  1. pybitcointools (instale usando pip install pybitcointools para la versión 1.1.15 o pip install bitcoin para la versión 1.1.25 (recomendado)
  2. sx /libbitcoin. Es posible que deba instalar usando el script install.sh de mastercoin , dependiendo de si las dependencias funcionan (tuve problemas al usar Tasty Tahr Ubuntu 14.04).

Ambos son CLI, y ambos funcionan de manera similar, lo que permite canalizar variables, etc. Sin embargo, pybitcointools parece admitir la función de historial de direcciones (llamada API a Blockchain.info/Blockr.io) y la documentación de soporte para pybitcointools parece ser más autoexplicativa que el breve tutorial sx .

+1 ¿Tiene algún ejemplo de cómo realizar una transacción conociendo solo el WIF y una dirección de destino?
Desde la página del manual no me queda muy claro cómo se especifica la dirección de destino.
Por supuesto. Lo haré una vez que esté fuera de iOS. Tendré que jugar un poco y lo publicaré aquí en ~ 12 horas
@Sebi solo para aclarar, desea crear un Txn sin procesar y enviar BTC desde su dirección (es decir, clave privada) a otra dirección, ¿verdad?
si eso es lo que quiero
OK, voy a editar en consecuencia. SX tools es la forma en que lo he hecho en el pasado. Lea bitcoin.stackexchange.com/questions/32219/… si tiene problemas de dependencia, ya que pondré procedimientos para SX y pybitcointools

Uso de herramientas SX.

En la línea de comandos de bash, cree un archivo de clave privada WIF llamado private.key1MBngSqZbMydscpzSoehjP8kznMaHAzh9y con estos datos dentro: 5HvofFG7K1e2aeWESm5pbCzRHtCSiZNbfLYXBvxyA57DhKHV4U3. FYI, la clave privada (como se discutió aquí ) es un brainwallet de mrbubbymrbubbymrbubby. (lo cual es genial, porque 1 MB ≈ frase de billetera cerebral)

Bien, ahora ejecutamos estos alias/comandos en el orden exacto dado (comentarios del nodo que explican cada paso):

  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

En este caso, los alias dan lo siguiente:

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

TXN FIRMADO FINAL:

Aquí está el Txn sin procesar final que envía BTC a 14zWNsgUMmHhYx4suzc2tZD6HieGbkQi5s.

0100000001be66e10da854e7aea9338c1f91cd489768d1d6d7189f586d7a3613f2a24d5396000000008b483045022100da43201760bda697222002f56266bf65023fef2094519e13077f777baed553b102205ce35d05eabda58cd50a67977a65706347cc25ef43153e309ff210a134722e9e0141042daa93315eebbe2cb9b5c3505df4c6fb6caca8b756786098567550d4820c09db988fe9997d049d687292f815ccd6e7fb5c1b1a91137999818d17c73d0f80aef9ffffffff0123ce0100000000001976a9142bc89c2702e0e618db7d59eb5ce2f0f147b4075488ac00000000

Contenido del archivo:

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

aquí hay un ejemplo de transacción en testnet( https://github.com/suhailvs/bitcoin-code/tree/testnet ), que necesita private key, destination addressy previous transacion hashque tiene una dirección de salida que se relaciona con la clave privada dada:

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