drk 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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. parser.add_argument("-k", "--key", action='store_true', help="Generate a new keypair")
  11. parser.add_argument("-i", "--info", action='store_true', help="Request info from daemon")
  12. parser.add_argument("-s", "--stop", action='store_true', help="Send a stop signal to the daemon")
  13. parser.add_argument("-n", "--new", action='store_true', help="Generate a new wallet")
  14. parser.add_argument("-hi", "--hello", action='store_true', help="Say hello")
  15. args = parser.parse_args()
  16. if args.key:
  17. try:
  18. print("Attemping to generate a new key pair...")
  19. client.key_gen(client.payload)
  20. except Exception:
  21. raise
  22. if args.new:
  23. try:
  24. print("Attemping to generate a new wallet...")
  25. client.new_wallet(client.payload)
  26. except Exception:
  27. raise
  28. if args.info:
  29. try:
  30. print("Info was entered")
  31. client.get_info(client.payload)
  32. print("Requesting daemon info...")
  33. except Exception:
  34. raise
  35. if args.stop:
  36. try:
  37. print("Stop was entered")
  38. client.stop(client.payload)
  39. print("Sending a stop signal...")
  40. except Exception:
  41. raise
  42. if args.hello:
  43. try:
  44. print("Hello was entered")
  45. client.say_hello(client.payload)
  46. except Exception:
  47. raise
  48. # TODO: refactor into async
  49. class DarkClient:
  50. # TODO: generate random ID (4 byte unsigned int) (rand range 0 - max size
  51. # uint32
  52. def __init__(self):
  53. self.url = "http://localhost:8000/"
  54. self.payload = {
  55. "method": [],
  56. "params": [],
  57. "jsonrpc": [],
  58. "id": [],
  59. }
  60. def key_gen(self, payload):
  61. payload['method'] = "key_gen"
  62. payload['jsonrpc'] = "2.0"
  63. payload['id'] = "0"
  64. key = self.__request(payload)
  65. print(key)
  66. def get_info(self, payload):
  67. payload['method'] = "get_info"
  68. payload['jsonrpc'] = "2.0"
  69. payload['id'] = "0"
  70. info = self.__request(payload)
  71. print(info)
  72. def stop(self, payload):
  73. payload['method'] = "stop"
  74. payload['jsonrpc'] = "2.0"
  75. payload['id'] = "0"
  76. stop = self.__request(payload)
  77. print(stop)
  78. def say_hello(self, payload):
  79. payload['method'] = "say_hello"
  80. payload['jsonrpc'] = "2.0"
  81. payload['id'] = "0"
  82. hello = self.__request(payload)
  83. print(hello)
  84. def new_wallet(self, payload):
  85. payload['method'] = "new_wallet"
  86. payload['jsonrpc'] = "2.0"
  87. payload['id'] = "0"
  88. wallet = self.__request(payload)
  89. print(wallet)
  90. def __request(self, payload):
  91. response = requests.post(self.url, json=payload).json()
  92. # print something better
  93. # parse into data structure
  94. print(response)
  95. assert response["jsonrpc"]
  96. if __name__ == "__main__":
  97. client = DarkClient()
  98. arg_parser(client)
  99. #rpc()
  100. ## Example echo method
  101. #payload = {
  102. # #"method:": args,
  103. # #"method": "stop",
  104. # "method": "get_info",
  105. # #"method": "say_hello",
  106. # #"params": [],
  107. # "jsonrpc": "2.0",
  108. # "id": 0,
  109. #}
  110. #response = requests.post(url, json=payload).json()
  111. #print(response)
  112. #assert response["result"] == "Hello World!"
  113. #assert response["jsonrpc"]