Guest User

mamkin_miner.py

a guest
Apr 3rd, 2021
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.79 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. try:
  4.     import npyscreen
  5. except ImportError:
  6.     raise ImportError('Установи необходимый пакет командой "pip install npyscreen"')
  7. import re
  8. import threading
  9. from subprocess import Popen, PIPE
  10. '''
  11. Скрипт для упрощения понимания происходящего. Если он тебе не нравится, просто не используй его.
  12. Предполагается, что у тебя установлен https://github.com/JayDDee/cpuminer-opt
  13. Предполагается, что у тебя установлен python3 и модуль npyscreen.
  14.  
  15. Скрипт работает через жопу, это говнокод, бла-бла-бла... Допиливай сам, умник. Мне надоело.
  16. '''
  17. MINER_NAME: str = "cpuminer"  # на случай, если нужен './cpuminer' или что-то ещё
  18. MINER_ALGO: str = "yespowerr16"  # это вряд ли придётся менять
  19. POOL_ADDRESS: str = "2chpool.cc"  # пул ещё не сдох?
  20. WALLET: str = "YnGGEgfH6SmjBHXDYr7hemoqq1Ey7PhRpy.sup2ch"  # оставь как есть!! не трогай эту настройку.
  21.  
  22. IGNORED_WORDS = ["**********",
  23.                  "A",
  24.                  "with",
  25.                  "BTC",
  26.                  "CPU",
  27.                  "CPU:",
  28.                  "SW",
  29.                  "Algo",
  30.                  "Starting",
  31.                  "Lost",
  32.                  "Diff",
  33.                  "Stale"]
  34.  
  35.  
  36. class MamkinMiner(npyscreen.NPSAppManaged):
  37.     def __init__(self):
  38.         self.miner = Popen
  39.         self.ready = False
  40.         self.stat = [['За последние', '--'],  # 0
  41.                      ['Хешрейт', 'погоди'],  # 1
  42.                      ['Скорость шариков', 'погоди'],  # 2
  43.                      ['Отправлено шариков', '0'],  # 3
  44.                      ['Принято шариков', '0'],  # 4
  45.                      ['Накопано блоков', 'ты серьёзно?'],  # 5
  46.  
  47.                      ['За эту сессию', ''],  # 6
  48.                      ['Хешрейт', 'погоди'],  # 7
  49.                      ['Скорость шариков', 'погоди'],  # 8
  50.                      ['Отправлено шариков', '0'],  # 9
  51.                      ['Принято шариков', '0'],  # 10
  52.                      ['Накопано блоков', 'не смеши'],  # 11
  53.  
  54.                      ['ХР по мнению пула', 'погоди'],  # 12
  55.                      ['Мин. сложность', 'погоди'],  # 13
  56.                      ['Макс. сложность', 'погоди'],  # 14
  57.                      ['Твоя сложность сейчас', 'погоди'],  # 15
  58.                      ['Сложность сети', 'погоди'],  # 16
  59.                      ['Текущий блок', 'погоди'],  # 17
  60.                      ['Жоп', 'погоди']]  # 18
  61.  
  62.         self.F = npyscreen.Form
  63.         self.block_last = npyscreen.BoxTitle
  64.         self.block_overall = npyscreen.BoxTitle
  65.         self.block_varia = npyscreen.BoxTitle
  66.         self.operation_thread = threading.Thread(target=self.start_mining)
  67.         self.operation_thread.start()
  68.         super().__init__()
  69.  
  70.     def main(self):
  71.         self.F = npyscreen.Form(name='Мам, смотри, я майнер! Ну маааам...')
  72.  
  73.         self.block_last = self.F.add(npyscreen.BoxTitle, max_width=40, max_height=7)
  74.         self.update_text(self.block_last)
  75.  
  76.         self.block_overall = self.F.add(npyscreen.BoxTitle, max_width=40, max_height=7)
  77.         self.update_text(self.block_overall)
  78.  
  79.         self.block_varia = self.F.add(npyscreen.BoxTitle, name="Всякоразличности:", max_width=40, max_height=9)
  80.         self.update_text(self.block_varia)
  81.         self.F.edit()
  82.  
  83.     def update_text(self, text_block):
  84.         out = []
  85.  
  86.         if text_block == self.block_last:
  87.             start, stop = 1, 5
  88.             text_block.name = ' '.join(self.stat[0])
  89.         elif text_block == self.block_overall:
  90.             start, stop = 7, 11
  91.             text_block.name = ' '.join(self.stat[6])
  92.         elif text_block == self.block_varia:
  93.             start, stop = 12, 18
  94.  
  95.         line_len = 35
  96.         for i in range(start, stop + 1):
  97.             n = line_len - len(self.stat[i][0]) - len(self.stat[i][1])
  98.             out.append(self.stat[i][0] + ' ' * n + self.stat[i][1])
  99.  
  100.         text_block.values = out
  101.         text_block.display()
  102.  
  103.     def start_mining(self):
  104.         self.miner = Popen([MINER_NAME,
  105.                             '-a', MINER_ALGO,
  106.                             '-o', f'stratum+tcp://{POOL_ADDRESS}:63368',
  107.                             '-u', WALLET,
  108.                             '-p', 'c=YTN', '-q', '--no-color',
  109.                             '--cpu-affinity', '0xff', '-t', '8'],
  110.                            stdout=PIPE, encoding='utf-8')
  111.         for line in iter(self.miner.stdout.readline, b''):
  112.             line = line.strip()
  113.             if len(line):
  114.                 self.parse(line)
  115.  
  116.     def parse(self, data):
  117.         words = data.split()
  118.         try:
  119.             if words[0] in IGNORED_WORDS:
  120.                 pass
  121.             elif re.fullmatch(r'\[\d{4}-\d\d-\d\d', words[0]):
  122.                 if words[2] == 'New' and words[3] == 'Work:':
  123.                     self.stat[17][1] = words[5][:-1]  # block
  124.                     self.stat[16][1] = words[8][:-1]  # net diff
  125.                     self.stat[18][1] = words[10]  # job
  126.                 elif words[2] == 'New' and words[3] == 'Stratum':
  127.                     self.stat[15][1] = words[5][:-1]
  128.             elif words[0] == "Periodic":
  129.                 self.stat[0][1] = words[2]
  130.                 self.stat[6][1] = words[3]
  131.             elif words[0] == "Share":
  132.                 self.stat[2][1] = words[2]
  133.                 self.stat[8][1] = words[3]
  134.             elif words[0] == "Hash":
  135.                 self.stat[1][1] = words[2]
  136.                 self.stat[7][1] = words[3]
  137.                 self.stat[12][1] = words[4][1:-1]
  138.             elif words[0] == "Submitted":
  139.                 self.stat[3][1] = words[1]
  140.                 self.stat[9][1] = words[2]
  141.             elif words[0] == "Accepted":
  142.                 self.stat[4][1] = words[1]
  143.                 self.stat[10][1] = words[2]
  144.             elif words[0] == "Hi/Lo":
  145.                 self.stat[14][1] = words[3]
  146.                 self.stat[13][1] = words[5]
  147.             else:
  148.                 pass
  149.         except IndexError:
  150.             print("словили")
  151.  
  152.         self.update_text(self.block_last)
  153.         self.update_text(self.block_overall)
  154.         self.update_text(self.block_varia)
  155.  
  156.  
  157. if __name__ == '__main__':
  158.     app = MamkinMiner()
  159.     app.run()
  160.  
Advertisement
Add Comment
Please, Sign In to add comment