Advertisement
Guest User

AndroidEthereum.py

a guest
Nov 16th, 2018
2,966
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 19.91 KB | None | 0 0
  1. '''
  2. Control-Eth Android v0.1.0
  3. Author: Skrypt
  4. Email: J0k3rsk0d3@Gmail.com
  5. '''
  6.  
  7. ############## App Import Section ################
  8.  
  9. # (binascii) For Ethereum Address Function
  10. try:
  11.  print('Attempting To Import [binascii] Module.')
  12.  import binascii
  13. except Exception as E:
  14.  print('Error Importing [binascii] Module. Instructing Program To Exit.')
  15.  print('Please Consider [\'pip install binascii\']')
  16.  print('Error: [{}]'.format(str(E)))
  17.  exit()
  18.  
  19. # (pickle) For Binary Datasets
  20. try:
  21.  print('Attempting To Import [pickle] Module.')
  22.  import pickle
  23. except Exception as E:
  24.  print('Error Importing [pickle] Module. Instructing Program To Exit.')
  25.  print('Please Consider [\'pip install pickle\']')
  26.  print('Error: [{}]'.format(str(E)))
  27.  exit()
  28.  
  29. # (hashlib) For hashlib.sha256() algorithm
  30. try:
  31.  print('Attempting To Import [hashlib] Module.')
  32.  import hashlib
  33. except Exception as E:
  34.  print('Error Importing [hashlib] Module. Instructing Program To Exit.')
  35.  print('Please Consider [\'pip install hashlib\']')
  36.  print('Error: [{}]'.format(str(E)))
  37.  exit()
  38.  
  39. # (time) For localtime
  40. try:
  41.  print('Attempting To Import [time] Module.')
  42.  import time
  43. except Exception as E:
  44.  print('Error Importing [time] Module. Instructing Program To Exit.')
  45.  print('Please Consider [\'pip install time\']')
  46.  print('Error: [{}]'.format(str(E)))
  47.  exit()
  48.  
  49. # (sha3) For Ethereum Address Conversion
  50. try:
  51.  print('Attempting To Import [sha3] Module.')
  52.  import sha3
  53. except Exception as E:
  54.  print('Error Importing [sha3] Module. Instructing Program To Exit.')
  55.  print('Please Consider [\'pip install sha3\']')
  56.  print('Error: [{}]'.format(str(E)))
  57.  exit()
  58.  
  59. # (web3) For Ethereum API Integration
  60. try:
  61.  print('Attempting To Import [web3] Module.')
  62.  from web3 import Web3
  63. except Exception as E:
  64.  print('Error Importing [web3] Module. Instructing Program To Exit.')
  65.  print('Please Consider [\'pip install web3\']')
  66.  print('Error: [{}]'.format(str(E)))
  67.  exit()
  68.  
  69. # (SigningKey, SECP256k1) From (ecdsa) for keccak algorithm
  70. try:
  71.  print('Attempting To Import [SigningKey, SECP256k1] From [ecdsa] Module.')
  72.  from ecdsa import SigningKey, SECP256k1
  73. except Exception as E:
  74.  print('Error Importing [SigningKey, SECP256k1] From [ecdsa] Module. Instructing Program To Exit.')
  75.  print('Please Consider [\'pip install ecdsa\']')
  76.  print('Error: [{}]'.format(str(E)))
  77.  exit()
  78.  
  79. # (HTTPProvider) From (web3.providers.rpc) for web3.eth API integration and Application HTTP Connection Protocol
  80. try:
  81.  print('Attempting To Import [HTTPProvider] From [web3.providers.rpc] Module.')
  82.  from web3.providers.rpc import HTTPProvider
  83. except Exception as E:
  84.  print('Error Importing [HTTPProvider] From [web3.providers.rpc] Module. Instructing Program To Exit.')
  85.  print('Please Consider [\'pip install web3\']')
  86.  print('Error: [{}]'.format(str(E)))
  87.  exit()
  88.  
  89.  
  90. ############### Global Declairation #################
  91. global Data
  92. global _WEB3
  93. global Syntax
  94. ############### App Constants #######################
  95. _VERSION = 'v0.1.0'
  96. _TITLE = 'Control-Eth Android {}'.format(_VERSION)
  97. _AUTHOR = 'Skrypt'
  98. _TESTNODE = 'https://kovan.infura.io/'
  99. _TESTAPI = 'M4QNeQhVp2x0Lm0OxNvW'
  100. _WEB3 = Web3(HTTPProvider(_TESTNODE+_TESTAPI))
  101. ################ Default Datasets ###################
  102. Data = dict()
  103. Syntax = dict()
  104. Syntax['Sudo Create'] = ['-c','-cr','-cre','-crea','-creat','-create']
  105. Syntax['Wallet'] = ['w','wa','wal','wall','walle','wallet','a','ad','add','addr','addre',
  106.                     'addres','address','ac','acc','acco','accou','accoun','account']
  107.  
  108. ############## Class Objects #########################
  109. class BaseUser():
  110.  def __init__(self,name,password,wallet,transactions,nodes):
  111.   self.name = name
  112.   self.password = password
  113.   self.wallet = wallet
  114.   self.transactions = transactions
  115.   self.nodes = nodes
  116.  
  117. class StackUser(BaseUser):
  118.  def __init__(self):
  119.   super().__init__(title='',passhash='',wallet=list(),transactions=dict(),nodes=dict())
  120.  
  121. ######## Ethereum / Hash Functions ##################
  122.  
  123. # Ethereum Balance Query. Returns bool success
  124. def get_eth_balance(a):
  125.  return _WEB3.eth.getBalance(a)
  126.  
  127. # Ethereum Transaction Count Query. Returns bool success
  128. def get_eth_transactionCount(a):
  129.  return _WEB3.eth.getTransactions(a)
  130.  
  131. # Ethereum Privatekey To Wallet Function.
  132. def eth_center(k):
  133.  global Data
  134.  private_key = binascii.unhexlify(k)
  135.  keccak = sha3.keccak_256()
  136.  keccak.update(SigningKey.from_string(private_key, curve=SECP256k1).get_verifying_key().to_string())
  137.  address = "0x{0}".format(keccak.hexdigest()[24:])
  138.  check_groups_for_wallet(address,k)
  139.  
  140. # Hashlib.sha256() Function For Data.
  141. def hash_lab(data):
  142.  a = hashlib.sha256(data.encode()).hexdigest()
  143.  print('Used Data: [{}] For SHA256 Hash: [{}]'.format(data,a))
  144.  eth_center(a)
  145.  
  146. ######## Internal Helper Functions ##################
  147.  
  148.  
  149. # Extracts Local Time For User Creation Stamp
  150. def _time():
  151.  timed = time.localtime()
  152.  return str(timed[1])+'/'+str(timed[2])+'/'+str(timed[0])+' '+str(timed[3])+':'+str(timed[4])+':'+str(timed[5])
  153.  
  154. # Yes / No Internal Query
  155. def yes_no(question):
  156.  yes_list = ['yes','ye','y']
  157.  no_list = ['no','n']
  158.  print('[{}?] [Yes/No]'.format(question))
  159.  Req = input('|[INPUT]|>>: ')
  160.  if Req.lower() in yes_list:
  161.   return True
  162.  elif Req.lower() in no_list:
  163.   return False
  164.  else:
  165.   print('Please Use [Yes/No]')
  166.   yes_no()
  167.  
  168. # Checks If Pickle File Exists. Returns bool success
  169. def pickle_check(where):
  170.  try:
  171.   check = pickle.load(open(where,'rb'))
  172.   del check
  173.   return True
  174.  except Exception as E:
  175.   return False
  176.  
  177. # Pulls And Returns Binary Pickle Data If Able. Exception Will Exit()
  178. def extract_data(file):
  179.  try:
  180.   data = pickle.load(open(file,'rb'))
  181.   return data
  182.  except Exception as E:
  183.   print('Failure To Pull Data File [{}] *(extract_data(file))'.format(file))
  184.   print('Please Contact Skrypt With Error: [{}]'.format(E))
  185.   print('Calling Exit() Function')
  186.   exit()
  187.  
  188. ############### Internal App Functions ############################
  189.  
  190. # Main App Start Function
  191. def app_start(title=True):
  192.  global Data
  193.  if title:
  194.   print('Welcome To [{}] By [{}]! Please Log In Below!'.format(Data['APPLICATION']['TITLE'],Data['APPLICATION']['AUTHOR']))
  195.  if not Data['USER']['LOGGED']:
  196.   Data['USER']['USERNAME'] = collect_username()
  197.   Data['USER']['PASSWORD'] = collect_password(Data['USER']['USERNAME'])
  198.   pc = pickle_check('{}.user'.format(Data['USER']['USERNAME']))
  199.   if pc:
  200.    data = extract_data('{}.user'.format(Data['USER']['USERNAME']))
  201.    if Data['USER']['PASSWORD'] == data['USER']['PASSWORD']:
  202.     load_user('{}.user'.format(Data['USER']['USERNAME']))
  203.     app_start(title=False)
  204.    else:
  205.     print('Incorrect Password For User: [{}]'.format(Data['USER']['USERNAME']))
  206.     print('Please Try Again')
  207.     app_start(title=True)
  208.   else:
  209.    create_user(Data['USER']['USERNAME'], Data['USER']['PASSWORD'])
  210.  else:
  211.   # Application Options
  212.   print('Welcome [{}] To [{}] By [{}]!'.format(Data['USER']['USERNAME'],Data['APPLICATION']['TITLE'],Data['APPLICATION']['AUTHOR']))
  213.   options_selector()
  214.  
  215. # User Syntax Options Selection Function.
  216. def options_selector():
  217.  print('Please Choose A Action Or Use Help/Options')
  218.  Require = input('|[INPUT]|>>: ')
  219.  Digest = Require.split(' ')
  220.  if len(Digest) > 1:
  221.   if Digest[0].lower() in Syntax['Sudo Create'] and Digest[1].lower() in Syntax['Wallet']:
  222.    add_wallet()
  223.   else:
  224.    print('Unknown Command')
  225.    options_selector()
  226.  else:
  227.   print('Unknown Command')
  228.   options_selector()
  229.  
  230. # Default HELP Function
  231. def HELP(topic):
  232.  if topic.lower() == 'add_wallet/data':
  233.   print('''
  234. |[HELP]|>>: Selecting Data While Creating A Wallet Utilizes Human Input => SHA256 => KECCAK To Generate A Ethereum Keypair''')
  235.   add_wallet()
  236.  if topic.lower() == 'add_wallet/privatekey':
  237.   print('''
  238. |[HELP]|>>: Selecting Private Key While Creating A Wallet Accepts A 64 Character (32 byte) 0-9, a-f Private Key To Generate A Ethereum Keypair''')
  239.   add_wallet()
  240.  
  241.  
  242. ############# Group Functions ##############################
  243.  
  244. # Creates A New Group For User
  245. def create_new_group(pak):
  246.  global Data
  247.  if pak[0]:
  248.   Req = yes_no('Create New Group')
  249.   if Req:
  250.    label = label_group(pak)
  251.    Data['ETHEREUM']['WALLET']['GROUPS']['LIST'].append(label)
  252.    Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][label] = dict()
  253.    Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][label]['TOTAL WALLETS'] = 0
  254.    Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][label]['LIST'] = list()
  255.    Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][label]['STACK'] = dict()
  256.    if pak[0]:
  257.     Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][label]['TOTAL WALLETS'] += 1
  258.     Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][label]['LIST'].append(pak[1])
  259.     Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][label][pak[1]] = dict()
  260.     Req = yes_no('Would You Like To Name This Address')
  261.     if Req:
  262.      Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['LABEL'] = label_address(pak[1])
  263.      Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['KEY'] = pak[2]
  264.      Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['BALANCE'] = get_eth_balance(pak[1])
  265.      Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['TRANSACTION COUNT'] = get_eth_transactionCount(pak[1])
  266.      Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['TRANSACTIONS'] = store_address_transactions(address,Syn[0])
  267.     else:
  268.      Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['LABEL'] = str(pak[1])
  269.      Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['KEY'] = pak[2]
  270.      Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['BALANCE'] = get_eth_balance(pak[1])
  271.      Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['TRANSACTION COUNT'] = get_eth_transactionCount(pak[1])
  272.      Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['TRANSACTIONS'] = dict()    
  273.  
  274. # Labels A Group. Returns Group label
  275. def label_group(_):
  276.  print('Please Submit A Name For A New Group.')
  277.  label = input('>>: ')
  278.  if label.lower() == '':
  279.   print('You Must Enter At Least A Single Character')
  280.  if label.lower() in Data['ETHEREUM']['WALLET']['GROUPS']['LIST']:
  281.   Req = yes_no('You Already Own This Group. Would You Like To Make A New Group?')
  282.   if Req:
  283.    label_group(_)
  284.   else:
  285.    option_selector()
  286.  else:
  287.   Req = yes_no('New Group Will Be Created As: [{}] Is This Ok'.format(label))
  288.   if Req:
  289.    return label
  290.   else:
  291.    label_group(_)
  292.  
  293. # Scans Available Groups For Address
  294. def check_groups_for_wallet(w,k):
  295.  global Data
  296.  if Data['ETHEREUM']['WALLET']['TOTAL GROUPS'] > 0 and Data['ETHEREUM']['WALLET']['GROUPS']['LIST'] != []:
  297.   for i in Data['ETHEREUM']['WALLET']['GROUPS']['LIST']:
  298.    if w in Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][i]['LIST']:
  299.     print('Wallet [{}] Already Owned In Group: [{}]'.format(w,i))
  300.     Req = yes_no('Would You Like To Group Anyways')
  301.     if Req:
  302.      group_wallet(w,k,[True,i])
  303.     else:
  304.      app_start()
  305.    
  306.  elif Data['ETHEREUM']['WALLET']['TOTAL GROUPS'] == 0 and Data['ETHEREUM']['WALLET']['GROUPS']['LIST'] == []:
  307.   Req = yes_no('You Do Not Own Any Groups At This Time Would You Like To Create A New Group')
  308.   if Req:
  309.    create_new_group([True,w,k])
  310.   else:
  311.    Req = yes_no('Return To App Start')
  312.    if Req:
  313.     app_start()
  314.    else:
  315.     check_groups_for_wallet(w,k)
  316.  
  317. ############# Wallet Functions Below #######################
  318.  
  319. # Adds A Wallet To A Group
  320. def group_wallet(address,private,options):
  321.  global Data
  322.  if Data['ETHEREUM']['WALLET']['TOTAL GROUPS'] > 0 and Data['ETHEREUM']['WALLET']['GROUPS']['LIST'] != []:
  323.   if options[0] == True:
  324.    mock = Data['ETHEREUM']['WALLET']['GROUPS']['LIST']
  325.    mock.remove(options[1])
  326.    subOptions = '%s' % ' '.join(mock)
  327.    print('Please Choose A Group For Address Or -create')
  328.    print('Options: [{}]'.format(subOptions))
  329.    Inp = input('>>: ')
  330.    Syn = Inp.split(' ')
  331.    if len(Syn) == 1:
  332.     if Syn[0].lower() in Syntax['Sudo Create']:
  333.      create_new_group([True,address,private])
  334.     elif Syn[0] in mock:
  335.      if Syn[0] in Data['ETHEREUM']['WALLET']['GROUPS']['STACK']:
  336.       if address not in Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]]['LIST']:
  337.        Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]]['LIST'].append(address)
  338.        Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]]['TOTAL WALLETS'] += 1
  339.        Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address] = dict()
  340.        Req = yes_no('Would You Like To Name This Address')
  341.        if Req:
  342.         Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['LABEL'] = label_address(address)
  343.         Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['KEY'] = private
  344.         Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['BALANCE'] = get_eth_balance(address)
  345.         Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['TRANSACTION COUNT'] = get_eth_transactionCount(address)
  346.         Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['TRANSACTIONS'] = store_address_transactions(address,Syn[0])
  347.        else:
  348.         Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['LABEL'] = str(address)
  349.         Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['KEY'] = private
  350.         Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['BALANCE'] = get_eth_balance(address)
  351.         Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['TRANSACTION COUNT'] = get_eth_transactionCount(address)
  352.         Data['ETHEREUM']['WALLET']['GROUPS']['STACK'][Syn[0]][address]['TRANSACTIONS'] = dict()
  353.     elif Syn[0] not in mock:
  354.      print('[{}] Is Not In [{}] Please Try Again'.format(Syn[0],subOptions))
  355.      group_wallet(address,private,options)
  356.  
  357. # Labels A Address. Returns Group label
  358. def label_address(address):
  359.  print('Please Submit A Name For This Address Or Use None.')
  360.  label = input('>>: ')
  361.  if label.lower() == 'none' or label.lower() == '' or label.lower() == address:
  362.   Req = yes_no('Address [{0}] Will Be Labeled As [{0}] Is This Ok'.format(address))
  363.   if Req:
  364.    return str(address)
  365.   else:
  366.    label_address(address)
  367.  else:
  368.   Req = yes_no(yes_no('Address [{0}] Will Be Labeled As [{1}] Is This Ok'.format(address,label)))
  369.   if Req:
  370.    return label
  371.   else:
  372.    label_address(address)
  373.  
  374. # Wallet Addition Utility
  375. def add_wallet():
  376.  print('|[NOTICE]|>>: Use -back To Return To Action Menu Or Use -help(data) or -help(privatekey) For More Information')
  377.  print('Would You Like To Create A Wallet Via Data Or Private Key? [SYNTAX]: -data/-privatekey')
  378.  Req = input('|[INPUT]|>>: ')
  379.  Digest = Req.split(' ')
  380.  if len(Digest) > 0:
  381.   if Digest[0].lower() == '-help(data)':
  382.    HELP('add_wallet/data')
  383.   if Digest[0].lower() == '-help(privatekey)':
  384.    HELP('add_wallet/privatekey')
  385.   if Digest[0].lower() == '-back':
  386.    app_start(title=False)
  387.   if Digest[0].lower() == '-data':
  388.    Digest.remove(Digest[0])
  389.    D = '%s' % ' '.join(Digest)
  390.    hash_lab(D)
  391.  
  392.  
  393. ############# User Functions Below ##########################
  394.  
  395. # Clears User Loading Template
  396. def blank_data():
  397.  global Data
  398.  ######### Application Data #################
  399.  Data['APPLICATION'] = dict()
  400.  Data['APPLICATION']['VERSION'] = _VERSION
  401.  Data['APPLICATION']['TITLE'] = _TITLE
  402.  Data['APPLICATION']['AUTHOR'] = _AUTHOR
  403.  ############################################
  404.  ######### User Data ########################
  405.  Data['USER'] = dict()
  406.  Data['USER']['LOGGED'] = False
  407.  Data['USER']['USERNAME'] = ''
  408.  Data['USER']['PASSWORD'] = ''
  409.  Data['USER']['CREATION TIME'] = _time()
  410.  ###########################################
  411.  ######### Network Data ####################
  412.  Data['NETWORK'] = dict()
  413.  Data['NETWORK']['NODES'] = dict()
  414.  Data['NETWORK']['NODES']['TOTAL'] = 2
  415.  Data['NETWORK']['NODES']['INFURA'] = dict()
  416.  Data['NETWORK']['NODES']['INFURA']['KOVAN'] = dict()
  417.  Data['NETWORK']['NODES']['INFURA']['KOVAN']['SET'] = True
  418.  Data['NETWORK']['NODES']['INFURA']['KOVAN']['RPC'] = _TESTNODE
  419.  Data['NETWORK']['NODES']['INFURA']['KOVAN']['APIKEY'] = _TESTAPI
  420.  Data['NETWORK']['NODES']['INFURA']['KOVAN']['TOTAL CALLS'] = 0
  421.  Data['NETWORK']['NODES']['INFURA']['MAINNET'] = dict()
  422.  Data['NETWORK']['NODES']['INFURA']['MAINNET']['SET'] = False
  423.  Data['NETWORK']['NODES']['INFURA']['MAINNET']['RPC'] = ''
  424.  Data['NETWORK']['NODES']['INFURA']['MAINNET']['APIKEY'] = ''
  425.  Data['NETWORK']['NODES']['INFURA']['MAINNET']['TOTAL CALLS'] = 0
  426.  Data['NETWORK']['NODES']['LOCAL'] = dict()
  427.  Data['NETWORK']['NODES']['LOCAL']['RPC'] = ''
  428.  Data['NETWORK']['NODES']['LOCAL']['TOTAL CALLS'] = 0
  429.  ############################################
  430.  ######## Ethereum Data #####################
  431.  Data['ETHEREUM'] = dict()
  432.  Data['ETHEREUM']['WALLET'] = dict()
  433.  Data['ETHEREUM']['WALLET']['TOTAL WALLETS'] = 0
  434.  Data['ETHEREUM']['WALLET']['TOTAL GROUPS'] = 0
  435.  Data['ETHEREUM']['WALLET']['GROUPS'] = dict()
  436.  Data['ETHEREUM']['WALLET']['GROUPS']['LIST'] = list()
  437.  Data['ETHEREUM']['WALLET']['GROUPS']['STACK'] = dict()
  438.  Data['ETHEREUM']['TRANSACTIONS'] = dict()
  439.  Data['ETHEREUM']['TRANSACTIONS']['TOTAL'] = 0
  440.  Data['ETHEREUM']['TRANSACTIONS']['STACK'] = dict()
  441.  
  442. # Loads User Pickle Template For Object Stamp
  443. def load_user(where):
  444.  global Data
  445.  what = pickle.load(open(where,'rb'))
  446.  Data.update(what)
  447.  Data['USER']['LOGGED'] = True
  448.  
  449. # Collects A Username For Client
  450. def collect_username():
  451.  print('Please Provide A Username')
  452.  Req = input('|[INPUT]|>>: ')
  453.  return Req
  454.  
  455. # Collects A Sha256 Hash Of Users Password
  456. def collect_password(user):
  457.  print('Please Provide The Password For Username [{}]'.format(user))
  458.  Req = input('|[INPUT]|>>: ')
  459.  return hashlib.sha256(Req.encode()).hexdigest()
  460.  
  461. # Create User Function Requires: Username + Password
  462. def create_user(username,passhash):
  463.  global Data
  464.  Req = yes_no('Would You Like To Create User: [{}]'.format(Data['USER']['USERNAME']))
  465.  if Req:
  466.   ######### Application Data #################
  467.   Data['APPLICATION'] = dict()
  468.   Data['APPLICATION']['VERSION'] = _VERSION
  469.   Data['APPLICATION']['TITLE'] = _TITLE
  470.   Data['APPLICATION']['AUTHOR'] = _AUTHOR
  471.   ############################################
  472.   ######### User Data ########################
  473.   Data['USER'] = dict()
  474.   Data['USER']['LOGGED'] = False
  475.   Data['USER']['USERNAME'] = username
  476.   Data['USER']['PASSWORD'] = passhash
  477.   Data['USER']['CREATION TIME'] = _time()
  478.   ###########################################
  479.   ######### Network Data ####################
  480.   Data['NETWORK'] = dict()
  481.   Data['NETWORK']['NODES'] = dict()
  482.   Data['NETWORK']['NODES']['TOTAL'] = 2
  483.   Data['NETWORK']['NODES']['INFURA'] = dict()
  484.   Data['NETWORK']['NODES']['INFURA']['KOVAN'] = dict()
  485.   Data['NETWORK']['NODES']['INFURA']['KOVAN']['SET'] = True
  486.   Data['NETWORK']['NODES']['INFURA']['KOVAN']['RPC'] = _TESTNODE
  487.   Data['NETWORK']['NODES']['INFURA']['KOVAN']['APIKEY'] = _TESTAPI
  488.   Data['NETWORK']['NODES']['INFURA']['KOVAN']['TOTAL CALLS'] = 0
  489.   Data['NETWORK']['NODES']['INFURA']['MAINNET'] = dict()
  490.   Data['NETWORK']['NODES']['INFURA']['MAINNET']['SET'] = False
  491.   Data['NETWORK']['NODES']['INFURA']['MAINNET']['RPC'] = ''
  492.   Data['NETWORK']['NODES']['INFURA']['MAINNET']['APIKEY'] = ''
  493.   Data['NETWORK']['NODES']['INFURA']['MAINNET']['TOTAL CALLS'] = 0
  494.   Data['NETWORK']['NODES']['LOCAL'] = dict()
  495.   Data['NETWORK']['NODES']['LOCAL']['RPC'] = ''
  496.   Data['NETWORK']['NODES']['LOCAL']['TOTAL CALLS'] = 0
  497.   ############################################
  498.   ######## Ethereum Data #####################
  499.   Data['ETHEREUM'] = dict()
  500.   Data['ETHEREUM']['WALLET'] = dict()
  501.   Data['ETHEREUM']['WALLET']['TOTAL WALLETS'] = 0
  502.   Data['ETHEREUM']['WALLET']['TOTAL GROUPS'] = 0
  503.   Data['ETHEREUM']['WALLET']['GROUPS'] = dict()
  504.   Data['ETHEREUM']['WALLET']['GROUPS']['LIST'] = list()
  505.   Data['ETHEREUM']['WALLET']['GROUPS']['STACK'] = dict()
  506.   Data['ETHEREUM']['TRANSACTIONS'] = dict()
  507.   Data['ETHEREUM']['TRANSACTIONS']['TOTAL'] = 0
  508.   Data['ETHEREUM']['TRANSACTIONS']['STACK'] = dict()
  509.   print('User: [{}] Created!'.format(Data['USER']['USERNAME']))
  510.   pickle.dump(Data,open('{}.user'.format(Data['USER']['USERNAME']),'wb'))
  511.   app_start(title=True)
  512.  else:
  513.   app_start()
  514.  
  515. if __name__ == '__main__':
  516.  blank_data()
  517.  app_start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement