Advertisement
Guest User

Untitled

a guest
Feb 18th, 2019
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.17 KB | None | 0 0
  1. # pylint: disable=import-error, invalid-sequence-index
  2. import time
  3. import sys
  4. import asyncio
  5. sys.path.append("..")
  6. from coin import Coin
  7.  
  8. class BTC(Coin):
  9.     coin_name="BTC"
  10.     friendly_name="Bitcoin"
  11.     providers=["electrum","jsonrpcrequests"]
  12.  
  13.     def __init__(self,rpc_url,rpc_user,rpc_pass):
  14.         super().__init__()
  15.         self.rpc_url = rpc_url
  16.         self.rpc_user = rpc_user
  17.         self.rpc_pass = rpc_pass
  18.         self.server = self.providers["jsonrpcrequests"].RPCProxy(self.rpc_url,self.rpc_user,self.rpc_pass)
  19.         self.loop, self.stopping_fut, self.loop_thread = self.providers["electrum"].util.create_and_start_event_loop()
  20.         self.network = self.providers["electrum"].Network()
  21.         self.network.start()
  22.         # wait until connected
  23.         while not self.network.is_connected():
  24.             time.sleep(1)
  25.  
  26.     def get_tx(self, tx: str) -> dict:
  27.         fut = asyncio.run_coroutine_threadsafe(self.get_tx_async(tx), self.loop)
  28.         return fut.result()
  29.  
  30.     def get_address(self, address: str) -> list:
  31.         out = self.server.getaddresshistory(address)
  32.         for i in out:
  33.             i["tx"] = self.get_tx(i["tx_hash"])
  34.         return out
  35.  
  36.     def balance(self) -> dict:
  37.         data = self.server.getbalance()
  38.         return {"confirmed": data.get("confirmed"),
  39.             "unconfirmed": data.get("unconfirmed"),
  40.             "unmatured": data.get("unmatured")}
  41.  
  42.     async def get_tx_async(self, tx):
  43.         out = self.server.gettransaction(tx)
  44.         out1 = self.server.deserialize(out)
  45.         prevh = out1["inputs"][0]["prevout_hash"]
  46.         prevn = out1["inputs"][0]["prevout_n"]
  47.         out = self.server.gettransaction(prevh)
  48.         out = self.server.deserialize(out)
  49.         for i in out["outputs"]:
  50.             if i["prevout_n"] == prevn:
  51.                 out1["input"] = i["address"]
  52.                 break
  53.         if not out1["input"]:
  54.             out1["input"] = "Not found"
  55.         conf = await self.network.interface.session.send_request(
  56.             "blockchain.transaction.get",
  57.             [tx, True])
  58.         conf = conf.get("confirmations", 0)
  59.         out1["confirmations"] = conf
  60.         return out1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement