How to make a simple payment with the python-bitcoinlib?

4

2

I've been using the bitcoin-python library for making payments from within Python. This worked pretty simple:

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

The Readme of that library now says that it is not maintained anymore and refers to the python-bitcoinlib as a successor. So now I'm trying to wrap my head around that lib, but it seems to be a bit more difficult than bitcoin-python used to be. I now understand I can connect to the running bitcoind using the following code:

>>> 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}

So far so good. The problem is now that I have no idea how I can do a simple payment. I see there is a function called proxy.sendrawtransaction(self, tx), which apparently takes a raw transaction as an argument. I have no idea how to create a raw transaction though, plus I would expect that there is some kind of send_to_address(address, amount) available, but I can't find it around the library.

So does anybody know how I can send a simple transaction to an address with the python-bitcoinlib? All tips are welcome!

kramer65

Posted 2014-04-13T17:14:55.490

Reputation: 285

Answers

7

I just added sendtoaddress to 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))

Note quite as simple as bitcoinrpc, but that's the trade-off for having proper types and so forth.

Peter Todd

Posted 2014-04-13T17:14:55.490

Reputation: 106

Could you expand your answer to relate to the question? – John T – 2014-04-19T07:00:56.060

Thank you for your good work and answer! I have another question. Maybe you have an answer to that as well?: http://bitcoin.stackexchange.com/questions/24802/how-to-getreceivedbyaddress-with-the-python-bitcoinlib

– kramer65 – 2014-04-22T12:46:58.253

where is CBitcoinAddress being imported from? – priestc – 2014-09-17T05:08:33.890

3

Code sample from 04/2014 is out of date with current python-bitcoinlib. Slight modification here:

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))

Tested on v0.3.0+

Scott Bigelow

Posted 2014-04-13T17:14:55.490

Reputation: 31

from version 0.5.1 CBitcoinAddressError: Version 0 not a recognized Bitcoin Address. Can you help me to fix it? – Moreno – 2016-05-05T23:01:32.000