drk 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. #!/usr/bin/env python
  2. import argparse
  3. import requests
  4. import json
  5. def arg_parser(client):
  6. parser = argparse.ArgumentParser(prog='drk',
  7. usage='%(prog)s [commands]',
  8. description="""DarkFi wallet
  9. command-line tool""")
  10. subparser = parser.add_subparsers(help='All available commands', title="Commands", dest='cmd')
  11. subparser.metavar = 'subcommands';
  12. #create = subparser.add_parser('create', help='create a new X')
  13. login = subparser.add_parser('login', help='wallet login')
  14. test = subparser.add_parser('test', help='test wallet functions')
  15. #create.add_argument('-kp', '--keypair', dest='keypair', action='store_true', help='Create a new keypair')
  16. #create.add_argument('-w', '--wallet', dest='wallet', action='store_true', help='Create a new wallet')
  17. #create.add_argument('-c', '--cashier', dest='cashier',action='store_true', help='Create a cashier wallet')
  18. login.add_argument('-u', '--username', type=str, required=True)
  19. login.add_argument('-p', '--password', type=str, required=True)
  20. test.add_argument('-k', '--key', dest='key', action='store_true', help='Test key')
  21. test.add_argument('-p', '--path', dest='path', action='store_true', help='Test path')
  22. test.add_argument('-pk', '--pkey', dest='pkey', action='store_true', help='Print test key')
  23. test.add_argument('-ck', '--ckey', dest='ckey', action='store_true', help='Cashier test key')
  24. test.add_argument('-i', '--info', dest='info', action='store_true', help='Request info from daemon')
  25. test.add_argument('-hi', '--hello', dest='hello', action='store_true', help='Test hello')
  26. test.add_argument('-w', '--wallet', dest='wallet', action='store_true', help='Create a new wallet')
  27. test.add_argument('-c', '--cashier', dest='cashier',action='store_true', help='Create a cashier wallet')
  28. parser.add_argument("-s", "--stop", action='store_true', help="Send a stop signal to the daemon")
  29. args = parser.parse_args()
  30. if args.path:
  31. try:
  32. print("Testing path...")
  33. client.test_path(client.payload)
  34. except Exception:
  35. raise
  36. if args.pkey:
  37. try:
  38. print("Attempting to print cashier key...")
  39. client.cashkey(client.payload)
  40. except Exception:
  41. raise
  42. if args.key:
  43. try:
  44. print("Attemping to generate a create key pair...")
  45. client.key_gen(client.payload)
  46. except Exception:
  47. raise
  48. if args.wallet:
  49. try:
  50. print("Attemping to generate a create wallet...")
  51. client.create_wallet(client.payload)
  52. except Exception:
  53. raise
  54. if args.info:
  55. try:
  56. print("Info was entered")
  57. client.get_info(client.payload)
  58. print("Requesting daemon info...")
  59. except Exception:
  60. raise
  61. if args.stop:
  62. try:
  63. print("Stop was entered")
  64. client.stop(client.payload)
  65. print("Sending a stop signal...")
  66. except Exception:
  67. raise
  68. if args.hello:
  69. try:
  70. print("Hello was entered")
  71. client.say_hello(client.payload)
  72. except Exception:
  73. raise
  74. if args.cashier:
  75. try:
  76. print("Cash was entered")
  77. client.create_cashier_wallet(client.payload)
  78. except Exception:
  79. raise
  80. # TODO: refactor into async
  81. class DarkClient:
  82. # TODO: generate random ID (4 byte unsigned int) (rand range 0 - max size
  83. # uint32
  84. def __init__(self):
  85. self.url = "http://localhost:8000/"
  86. self.payload = {
  87. "method": [],
  88. "params": [],
  89. "jsonrpc": [],
  90. "id": [],
  91. }
  92. def ckeygen(self, payload):
  93. payload['method'] = "cash_key_gen"
  94. payload['jsonrpc'] = "2.0"
  95. payload['id'] = "0"
  96. ckeygen = self.__request(payload)
  97. print(ckeygen)
  98. def cashkey(self, payload):
  99. payload['method'] = "get_cash_key"
  100. payload['jsonrpc'] = "2.0"
  101. payload['id'] = "0"
  102. cashk = self.__request(payload)
  103. print(cashk)
  104. def test_path(self, payload):
  105. payload['method'] = "test_path"
  106. payload['jsonrpc'] = "2.0"
  107. payload['id'] = "0"
  108. test = self.__request(payload)
  109. print(test)
  110. def key_gen(self, payload):
  111. payload['method'] = "key_gen"
  112. payload['jsonrpc'] = "2.0"
  113. payload['id'] = "0"
  114. key = self.__request(payload)
  115. print(key)
  116. def get_info(self, payload):
  117. payload['method'] = "get_info"
  118. payload['jsonrpc'] = "2.0"
  119. payload['id'] = "0"
  120. info = self.__request(payload)
  121. print(info)
  122. def stop(self, payload):
  123. payload['method'] = "stop"
  124. payload['jsonrpc'] = "2.0"
  125. payload['id'] = "0"
  126. stop = self.__request(payload)
  127. print(stop)
  128. def say_hello(self, payload):
  129. payload['method'] = "say_hello"
  130. payload['jsonrpc'] = "2.0"
  131. payload['id'] = "0"
  132. hello = self.__request(payload)
  133. print(hello)
  134. def create_wallet(self, payload):
  135. payload['method'] = "create_wallet"
  136. payload['jsonrpc'] = "2.0"
  137. payload['id'] = "0"
  138. wallet = self.__request(payload)
  139. print(wallet)
  140. def create_cashier_wallet(self, payload):
  141. payload['method'] = "create_cashier_wallet"
  142. payload['jsonrpc'] = "2.0"
  143. payload['id'] = "0"
  144. wallet = self.__request(payload)
  145. print(wallet)
  146. def __request(self, payload):
  147. response = requests.post(self.url, json=payload).json()
  148. # print something better
  149. # parse into data structure
  150. print(response)
  151. assert response["jsonrpc"]
  152. if __name__ == "__main__":
  153. client = DarkClient()
  154. arg_parser(client)
  155. #rpc()
  156. ## Example echo method
  157. #payload = {
  158. # #"method:": args,
  159. # #"method": "stop",
  160. # "method": "get_info",
  161. # #"method": "say_hello",
  162. # #"params": [],
  163. # "jsonrpc": "2.0",
  164. # "id": 0,
  165. #}
  166. #response = requests.post(url, json=payload).json()
  167. #print(response)
  168. #assert response["result"] == "Hello World!"
  169. #assert response["jsonrpc"]