whallets_cli.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. """CLI for users to manage the wallet database and run research functions"""
  2. #TODO:
  3. # 1) Learn operating Blockscan APIs
  4. # 2) Program functions pulling APIs data based on users interaction
  5. # 3) CLI function to easy add new wallets and other data to the wallets_dict.json
  6. # - loop through each info separately
  7. # - ask to re-add info if matches
  8. # 4) Prints options for the user (-h)
  9. import json
  10. from tabulate import tabulate
  11. import texts_cli as tc
  12. print(tc._welcome_message())
  13. def cli_main():
  14. """Main program for the cli"""
  15. print(tabulate(tc._main_menu()))
  16. main_menu_choice()
  17. def main_menu_choice():
  18. """main cli operations choice"""
  19. choice = input(tc._menu_choice())
  20. if choice == '1':
  21. add_wallet()
  22. elif choice == '2':
  23. print(tc._missing_operation())
  24. _new_choice()
  25. elif choice == '3':
  26. display_all_wallets()
  27. elif choice == '4':
  28. print(tc._missing_operation())
  29. _new_choice()
  30. elif choice == '5':
  31. print(tc._missing_operation())
  32. _new_choice()
  33. elif choice.lower() == "q":
  34. quit()
  35. else:
  36. _new_choice()
  37. _new_choice()
  38. def _new_choice():
  39. """Offer user a new choice"""
  40. x = 1
  41. while x < 3:
  42. chc = input(tc._ask_new_choice())
  43. if chc == '1':
  44. cli_main()
  45. elif chc == '2':
  46. quit()
  47. else:
  48. x += 1
  49. else:
  50. quit()
  51. def add_wallet():
  52. """A function to add wallet to the wallets_dict.json"""
  53. ntw_i, name, addr, inf, twtr, ens = _get_inputs()
  54. x = check_wallet(ntw_i, name, addr, twtr, ens)
  55. if x[0] != 4:
  56. y = x[1]
  57. new_item = _correct_item(y)
  58. def _correct_item(y):
  59. """Allows user to rewrite an exisitng item in the wallet"""
  60. z = (input(tc._display_wallet_check_result(y)[0]))
  61. if z =='1':
  62. print(tc._display_wallet_check_result(y)[1])
  63. return y
  64. elif z == '2':
  65. new_item = input(tc._enter_new_info(y))
  66. return new_item
  67. def remove_wallet():
  68. """Removes wallet from the wallet dictionary"""
  69. # This function needs to be developped
  70. def _get_inputs():
  71. """Get infor to add a new wallet"""
  72. ntw_i = _check_network()
  73. name = input(tc._prompt_name())
  74. addr = input(tc._prompt_address())
  75. inf = input(tc._prompt_info())
  76. twtr = input(tc._prompt_twitter())
  77. ens = input(tc._prompt_ens())
  78. return ntw_i, name, addr, inf, twtr, ens
  79. def _check_network():
  80. """Check if the existing network"""
  81. print(tabulate(tc._choose_network()))
  82. ntw = int(input(tc._menu_choice()))
  83. i = ntw - 1
  84. if i != 0:
  85. print(tc._missing_operation())
  86. _new_choice()
  87. else:
  88. return i
  89. def check_wallet(ntw_i,name, addr, twtr, ens):
  90. """
  91. Scans through wallets to check if a new wallet is not already in the
  92. database
  93. """
  94. i = ntw_i
  95. dict = get_wallets()[i]
  96. for key, value in dict.items():
  97. user = key
  98. wallets = value['wallets']
  99. info = value['info']
  100. twitter = value['twitter']
  101. ens_saved = value['ens']
  102. if user == name:
  103. x = [0,'name']
  104. elif addr in wallets.values():
  105. x = [1, 'address']
  106. elif twtr == twitter:
  107. x = [2, 'twitter']
  108. elif ens == ens_saved:
  109. x = [3, 'ENS']
  110. else:
  111. x = 4
  112. return x
  113. def get_wallets():
  114. """ Gets the info from the dictionary """
  115. filename = 'wallets_dict.json'
  116. with open(filename) as f:
  117. all_wallets = json.load(f)
  118. evm_wallets = all_wallets['evm_wallets']
  119. spl_wallets = all_wallets['spl_wallets']
  120. return evm_wallets, spl_wallets,
  121. def display_wallets(chain):
  122. """Displays the wallets according the given chain"""
  123. # Chains available 'evm','spl'
  124. # evm shows all the forks
  125. i = _chain_index(chain)
  126. dict = get_wallets()[i]
  127. print(f"\n\n{chain.upper()} WALLETS:")
  128. for key, value in dict.items():
  129. user = key
  130. info = value['info']
  131. twitter = value['twitter']
  132. wallets = {}
  133. wlts = value['wallets']
  134. for x, y in wlts.items():
  135. wallets[x] = y
  136. print(f"\nUser: {user}")
  137. print(f"Info: {info}")
  138. print(f"Twitter: {twitter}")
  139. for wlt,inf in wallets.items():
  140. print(f"Wallets: {wlt}")
  141. print(f"Address: {inf['address']}")
  142. print(f"Active networks:")
  143. networks = inf['networks']
  144. networks_str = ', '.join(networks)
  145. print(networks_str)
  146. def _chain_index(chain):
  147. """Asigns an index based on given parameter of the chain"""
  148. if chain.lower() == 'evm':
  149. i = 0
  150. elif chain.lower() == 'spl':
  151. i = 1
  152. return i
  153. def display_all_wallets():
  154. display_wallets('evm')
  155. display_wallets('spl')
  156. # Run the program
  157. cli_main()