Source code for pycoin.services.chain_so
import io
import json
from .agent import urlopen
from pycoin.coins.bitcoin.Tx import Tx
from pycoin.encoding.hexbytes import b2h_rev, h2b, h2b_rev
from pycoin.networks.default import get_current_netcode
[docs]class ChainSoProvider(object):
def __init__(self, netcode=None):
NETWORK_PATHS = {
"BTC": "BTC",
"XTN": "BTCTEST",
"DOGE": "DOGE",
"XDT": "DOGETEST",
}
if netcode is None:
netcode = get_current_netcode()
self.network_path = NETWORK_PATHS.get(netcode)
[docs] def base_url(self, method, args):
return "https://chain.so/api/v2/%s/%s/%s" % (method, self.network_path, args)
[docs] def spendables_for_address(self, address):
"""
Return a list of Spendable objects for the
given bitcoin address.
"""
spendables = []
r = json.loads(urlopen(self.base_url('get_tx_unspent', address)).read().decode("utf8"))
for u in r['data']['txs']:
coin_value = int(float(u['value']) * 100000000)
script = h2b(u["script_hex"])
previous_hash = h2b_rev(u["txid"])
previous_index = u["output_no"]
spendables.append(Tx.Spendable(coin_value, script, previous_hash, previous_index))
return spendables
[docs] def tx_for_tx_hash(self, tx_hash):
"Get a Tx by its hash."
url = self.base_url("get_tx", b2h_rev(tx_hash))
r = json.loads(urlopen(url).read().decode("utf8"))
tx = Tx.parse(io.BytesIO(h2b(r.get("data").get("tx_hex"))))
return tx