wallet.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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_state(sess, url):
  13. pass
  14. def get_transactions(sess, url, pubkey):
  15. resp = sess.post(url + 'transactions', data=pubkey.as_bytes())
  16. resp.raise_for_status()
  17. return [Transaction.from_json_compatible(t) for t in resp.json()]
  18. def main():
  19. parser = argparse.ArgumentParser(description="Wallet.")
  20. parser.add_argument("--miner-port", default=40203, type=int,
  21. help="The RPC port of the miner to connect to.")
  22. parser.add_argument("--show-transactions", type=argparse.FileType("rb"), default=[], action="append",
  23. help="Shows all transactions involving the public key stored in the specified file.")
  24. args = parser.parse_args()
  25. url = "http://localhost:{}/".format(args.miner_port)
  26. s = requests.session()
  27. for key in args.show_transactions:
  28. for trans in get_transactions(s, url, Signing(key.read())):
  29. print(trans.to_json_compatible())
  30. key.close()
  31. if __name__ == '__main__':
  32. main()