¿Cómo hacer un pago simple con python-bitcoinlib?

He estado usando la biblioteca bitcoin-python para realizar pagos desde Python. Esto funcionó bastante simple:

>>> import bitcoinrpc
>>> conn = bitcoinrpc.connect_to_local()
>>> conn.sendtoaddress('bitcoin_address_here', 0.5)

El Léame de esa biblioteca ahora dice que ya no se mantiene y se refiere a python-bitcoinlib como sucesor. Así que ahora estoy tratando de entender esa lib, pero parece ser un poco más difícil de lo que solía ser bitcoin-python. Ahora entiendo que puedo conectarme al bitcoind en ejecución usando el siguiente código:

>>> import bitcoin.rpc as rpc
>>> proxy = rpc.Proxy()
>>> proxy.getinfo()
{u'connections': 36, u'errors': u'', u'blocks': 295646, u'paytxfee': 0, u'keypoololdest': 1394108331, u'walletversion': 60000, u'difficulty': Decimal('6119726
089.12814713'), u'testnet': False, u'version': 90100, u'proxy': u'', u'protocolversion': 70002, u'timeoffset': -1, u'balance': 1856000, u'keypoolsize': 101}

Hasta aquí todo bien. El problema ahora es que no tengo idea de cómo puedo hacer un pago simple. Veo que hay una función llamada proxy.sendrawtransaction(self, tx), que aparentemente toma una transacción sin procesar como argumento. Sin embargo, no tengo idea de cómo crear una transacción sin procesar, además, esperaría que haya algún tipo send_to_address(address, amount)disponible, pero no puedo encontrarlo en la biblioteca.

Entonces, ¿alguien sabe cómo puedo enviar una transacción simple a una dirección con python-bitcoinlib ? ¡Todos los consejos son bienvenidos!

Respuestas (2)

Acabo de agregar sendtoaddress a bitcoin.rpc.Proxy:

from bitcoin.core import COIN, b2lx
import bitcoin.wallet
import bitcoin.rpc
try:
    # This moved between versions
    from bitcoin.base58 import CBitcoinAddress
except:
    from bitcoin.wallet import CBitcoinAddress

rpc = bitcoin.rpc.Proxy()
addr = CBitcoinAddress('1JwSSubhmg6iPtRjtyqhUYYH7bZg3Lfy1T')

txid = rpc.sendtoaddress(addr, 0.001 * COIN)
print(b2lx(txid))

Tenga en cuenta que es tan simple como bitcoinrpc, pero esa es la compensación por tener tipos adecuados, etc.

¿Podría ampliar su respuesta para relacionarla con la pregunta?
¡Gracias por tu buen trabajo y respuesta! Tengo otra pregunta. ¿Quizás también tenga una respuesta para eso?: bitcoin.stackexchange.com/questions/24802/…
¿De dónde se CBitcoinAddressimporta?

El ejemplo de código del 04/2014 no está actualizado con python-bitcoinlib actual. Ligera modificación aquí:

from bitcoin.core import COIN, b2lx
import bitcoin.wallet
import bitcoin.rpc

rpc = bitcoin.rpc.Proxy()
addr = bitcoin.wallet.CBitcoinAddress('1JwSSubhmg6iPtRjtyqhUYYH7bZg3Lfy1T')

txid = rpc.sendtoaddress(addr, 0.001 * COIN)
print(b2lx(txid))

Probado en v0.3.0+

desde la versión 0.5.1 CBitcoinAddressError: Version 0 not a recognized Bitcoin Address. ¿Puedes ayudarme a arreglarlo?