whallets_cli.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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. wlt = check_wallet(ntw_i, name, addr, twtr, ens)
  55. ntw_i, name, addr, twtr, ens = wlt[0], wlt[1], wlt[2], wlt[3], wlt[4]
  56. print(tabulate(tc._save_wallet_confirm(ntw_i, name, addr, twtr, ens)))
  57. def _correct_item(y):
  58. """Allows user to rewrite an exisitng item in the wallet"""
  59. z = (input(tc._display_wallet_check_result(y)[0]))
  60. if z =='1':
  61. print(tc._display_wallet_check_result(y)[1])
  62. return True
  63. elif z == '2':
  64. new_item = input(tc._enter_new_info(y))
  65. return new_item
  66. def remove_wallet():
  67. """Removes wallet from the wallet dictionary"""
  68. # This function needs to be developped
  69. def _get_inputs():
  70. """Get infor to add a new wallet"""
  71. ntw_i = _check_network()
  72. name = input(tc._prompt_name())
  73. addr = input(tc._prompt_address())
  74. inf = input(tc._prompt_info())
  75. twtr = input(tc._prompt_twitter())
  76. ens = input(tc._prompt_ens())
  77. return ntw_i, name, addr, inf, twtr, ens
  78. def _check_network():
  79. """Check if the existing network"""
  80. print(tabulate(tc._choose_network()))
  81. ntw = int(input(tc._menu_choice()))
  82. i = ntw - 1
  83. if i != 0:
  84. print(tc._missing_operation())
  85. _new_choice()
  86. else:
  87. return i
  88. def check_wallet(ntw_i,name, addr, twtr, ens):
  89. """
  90. Scans through wallets to check if a new wallet is not already in the
  91. database
  92. """
  93. i = ntw_i
  94. dict = get_wallets()[i]
  95. for key, value in dict.items():
  96. user = key
  97. wallets = value['wallets']
  98. info = value['info']
  99. twitter = value['twitter']
  100. ens_saved = value['ens']
  101. if user == name:
  102. x = [1,'name']
  103. elif addr in wallets.values():
  104. x = [2, 'address']
  105. elif twtr == twitter:
  106. x = [3, 'twitter']
  107. elif ens == ens_saved:
  108. x = [4, 'ENS']
  109. else:
  110. x = [5, "none"]
  111. y = x[1]
  112. x = x[0]
  113. if x != 5:
  114. new_item = _correct_item(y)
  115. else:
  116. print(tc._display_wallet_check_result(y)[1])
  117. new_item = True
  118. wlt = [ntw_i, name, addr, twtr, ens]
  119. if new_item != True:
  120. wlt[x] = new_item
  121. return wlt
  122. def get_wallets():
  123. """ Gets the info from the dictionary """
  124. filename = 'wallets_dict.json'
  125. with open(filename) as f:
  126. all_wallets = json.load(f)
  127. evm_wallets = all_wallets['evm_wallets']
  128. spl_wallets = all_wallets['spl_wallets']
  129. return evm_wallets, spl_wallets,
  130. def display_wallets(chain):
  131. """Displays the wallets according the given chain"""
  132. # Chains available 'evm','spl'
  133. # evm shows all the forks
  134. i = _chain_index(chain)
  135. dict = get_wallets()[i]
  136. print(f"\n\n{chain.upper()} WALLETS:")
  137. for key, value in dict.items():
  138. user = key
  139. info = value['info']
  140. twitter = value['twitter']
  141. wallets = {}
  142. wlts = value['wallets']
  143. for x, y in wlts.items():
  144. wallets[x] = y
  145. print(f"\nUser: {user}")
  146. print(f"Info: {info}")
  147. print(f"Twitter: {twitter}")
  148. for wlt,inf in wallets.items():
  149. print(f"Wallets: {wlt}")
  150. print(f"Address: {inf['address']}")
  151. print(f"Active networks:")
  152. networks = inf['networks']
  153. networks_str = ', '.join(networks)
  154. print(networks_str)
  155. def _chain_index(chain):
  156. """Asigns an index based on given parameter of the chain"""
  157. if chain.lower() == 'evm':
  158. i = 0
  159. elif chain.lower() == 'spl':
  160. i = 1
  161. return i
  162. def display_all_wallets():
  163. display_wallets('evm')
  164. display_wallets('spl')
  165. # Run the program
  166. cli_main()