wallet.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #!/usr/bin/env python3
  2. import argparse
  3. import requests
  4. from binascii import hexlify, unhexlify
  5. from src.blockchain import Blockchain
  6. from src.block import Block
  7. from src.transaction import Transaction
  8. from src.crypto import Signing
  9. def send_transaction(sess, url, transaction):
  10. resp = sess.put(url + 'new-transaction', data=transaction.to_json_compatible())
  11. resp.raise_for_status()
  12. def network_info(sess, url):
  13. resp = sess.get(url + 'network-info')
  14. resp.raise_for_status()
  15. return resp.json()
  16. def get_transactions(sess, url, pubkey):
  17. resp = sess.post(url + 'transactions', data=pubkey.as_bytes())
  18. resp.raise_for_status()
  19. return [Transaction.from_json_compatible(t) for t in resp.json()]
  20. def main():
  21. parser = argparse.ArgumentParser(description="Wallet.")
  22. parser.add_argument("--miner-port", default=40203, type=int,
  23. help="The RPC port of the miner to connect to.")
  24. parser.add_argument("--show-transactions", type=argparse.FileType("rb"), default=[], action="append",
  25. help="Shows all transactions involving the public key stored in the specified file.")
  26. parser.add_argument("--show-network", action="store_true", default=False,
  27. help="Prints networking information about the miner.")
  28. args = parser.parse_args()
  29. url = "http://localhost:{}/".format(args.miner_port)
  30. s = requests.session()
  31. for key in args.show_transactions:
  32. for trans in get_transactions(s, url, Signing(key.read())):
  33. print(trans.to_json_compatible())
  34. key.close()
  35. if args.show_network:
  36. for [k, v] in network_info(s, url):
  37. print("{}\t{}".format(k, v))
  38. if __name__ == '__main__':
  39. main()