Source code for pycoin.services.bitcoind
from pycoin.encoding.hexbytes import b2h, b2h_rev
from pycoin.coins.bitcoin.Tx import Tx
[docs]class BitcoindProvider(object):
def __init__(self, bitcoind_url):
try:
from bitcoinrpc.authproxy import AuthServiceProxy
except ImportError:
print("This script depends upon python-bitcoinrpc.")
print("pip install -e git+https://github.com/jgarzik/"
"python-bitcoinrpc#egg=python_bitcoinrpc-master")
raise
self.bitcoind_url = bitcoind_url
self.connection = AuthServiceProxy(bitcoind_url)
[docs] def bitcoind_agrees_on_transaction_validity(self, tx):
tx.check_unspents()
unknown_tx_outs = [unspent_to_bitcoind_dict(tx_in, tx_out)
for tx_in, tx_out in zip(tx.txs_in, tx.unspents)]
signed = self.connection.signrawtransaction(tx.as_hex(), unknown_tx_outs, [])
is_ok = [tx.is_solution_ok(idx) for idx in range(len(tx.txs_in))]
return all(is_ok) == signed.get("complete")
[docs] def tx_for_tx_hash(self, tx_hash):
raw_tx = self.connection.getrawtransaction(b2h_rev(tx_hash))
tx = Tx.from_hex(raw_tx)
return tx
[docs]def unspent_to_bitcoind_dict(tx_in, tx_out):
return dict(
txid=b2h_rev(tx_in.previous_hash),
vout=tx_in.previous_index,
scriptPubKey=b2h(tx_out.script)
)
[docs]def bitcoind_agrees_on_transaction_validity(bitcoind_url, tx):
bp = BitcoindProvider(bitcoind_url)
return bp.bitcoind_agrees_on_transaction_validity(tx)