Система RavinOS позволяет использовать сторонние алгоритмы для майнинга и добычи кастомных монет. Для использования фунционала Custom Mining пользователю необходимы:
-
ZIP архив с майнером, включающий в себя:
- файлы майнера
- каталог RAVINOS c файлом конфигурации пакета майнера manifest.json и двумя файлами скрипта на языке python (start.py и stats.py).
Структура файлов подробнее – в соответствующем разделе.
-
Данные монеты: алгоритм и тип
-
Данные пула:
- Шаблон адреса пула
- Тип авторизации на пуле
- Данные для авторизации на пуле (адрес, Порт, Кошелек, имя пользователя, пароль и т д.)
{
"package":"nbminer-21.0",
"name": "NBMiner",
"version": "21.0",
"description": "NBMiner 21.0",
"maintainer":"RavinOS (dev@ravinos.com)",
"platforms": ["nvidia"],
"dual_coin": false,
"algo": ["cuckaroo29", "ethash", "daggerhashimoto", "tensority", "cuckaroo31", "cuckoo"],
"executable": ["nbminer"],
"rev":1
}
Описание параметров конфигурации:
{
"package":"", // Имя пакета (должно совпадать с именем ZIP архива)
"name": "", // Название майнера
"version": "", // Версия майнера
"description": "", // Описание пакета
"maintainer":"", // Информация о создателе пакета
"platforms": ["",…,""], // Поддерживаемые платформы
"dual_coin": bool, // Поддержка второй монеты
"algo": ["",…,""], // Поддерживаемые алгоритмы
"executable": [""], // Наименование исполняемого файла
"rev":int // Версия пакета
}
import ravinos
cfg = ravinos.get_config()
...
YOUR CODE HERE
...
ravinos.run(commandline)
ravinos.get_config функция возвращает объект конфигурации задачи для майнера, на основании указанных в системе параметров.
{
"coins": [ // Массив монет (index=0 - Primary, index=1 - Secondary
"coin_id" : int, //
"pools": [ // Массив пулов
"url": string, // Адрес пула
"user": string, // Имя пользователя
"password": string, // Пароль пула
"pool_type": int, // Тип пула
],
"algo": string, // Алгоритм монеты
],
"work_dir": string, // Текущая рабочая директория
"miner_dir": string, // Директория майнера
"args": string, // Дополнительные аргументы командной строки
"api_port": uint32, // Доступный порт для API майнера
"log_file":string, // Путь к лог-файлу
"mpus": [ // Массив MPU (miner process unit)
"id":int32, // Порядковый номер MPU по шине PCI
"id_by_type":int32, // Порядковый номер по типу устройства (AMD, NVIDIA)
"openl_id":int32, // Порядковый номер по OpenCL
"opencl_id_by_platform":int32,// Порядковый номер по платформе OpenCL (AMD, NVIDIA)
"pci_id":int32, // BUS ID
"pci": string, // BUS ID (строка) 01:00.0
"type":string, // Тип MPU (AMD, NVIDIA)
"name":string, // Название MPU
"memory":string, // Тип чипа памяти MPU (AMD)
"memory_size":int64, // Доступный размер памяти MPU
],
"platform":string, //
"user_config,omitempty":string, // Контент пользовательского файла конфигурации
"intensity,omitempty":string, // Интенсивность (указывается согласно настройкам майнера)
}
*Все порядковые номера начинаются с 0
ravinos.run запускает сформированную пользователем строку на исполнение
Пример получения статистики raw socket ro.get_socket_data или web ro.get_http_data:
import ravinos
stats = ro.get_stats()
ravinos.get_socket_data(stats[‘api_port’], ‘some_command’)
...
YOUR CODE HERE
...
ravinos.set_stats(stats)
ИЛИ
import ravinos
stats = ro.get_stats()
ravinos.get_http_data(‘url’)
...
YOUR CODE HERE
...
ravinos.set_stats(stats)
ravinos.get_stats функция получает объект статистики, который необходимо вернуть в функцию ravinos.set_stats:
{
"mpu":[
"id":int32, // Порядковый номер MPU по шине PCI*
"id_by_type":int32, // Порядковый номер по типу устройства (AMD, NVIDIA)*
"openl_id":int32, // Порядковый номер по OpenCL*
"opencl_id_by_platform":int32, // Порядковый номер по платформе OpenCL (AMD, NVIDIA)*
"pci_id":int32, // BUS ID
"pci": string, // BUS ID (строка) 01:00.0
"type":string, // Тип MPU (AMD, NVIDIA)
"hash_rate1":float64, // хешрейт первой монеты
"hash_rate2":float64, // хешрейт второй монеты (если есть)
"temp,omitempty":int32,
]
"fans,omitempty":[
"percent":int32,
"rpm":int32,
]
"errors":[]string, // массив ошибок
"log_file":string, //
"last_log_file_size":int64, //
"have_driver_error":bool, //
"api_port":uint32, // Доступный порт для API майнера
}
*Все порядковые номера начинаются с 0
ravinos.get_socket_data функция позволяет получить данные напрямую из сокета (в формате майнера). Принимает 2 параметра: порт API и команда для получения статистики (в формате майнера).
ravinos.get_http_data функция позволяет получить данные по http протоколу (в формате майнера). Принимает 1 параметр: URL статистики.
ravinos.set_stats функция принимает, сформированный кодом пользователя, объект статистики и передает его в систему.
Формирование ZIP архива доступно любыми удобными пользователю средствами. Структура архива:
/RAVINOS
/manifest.json
/start.py
/stats.py
/*miner_files*
После того как архив сформирован и все необходимые данные известны можно переходит к непосредственному добавлению майнера в систему RavinOS. Для этого необходимо:
-
В меню слева выбрать пункт Custom mining
-
Перейти на вкладку MINERS
-
Нажать Add
-
В открывшемся окне проводника выбрать ранее сформированный zip архив
Если все сделано верно, то новый добавленный майнер отобразится в списке на текущей вкладке.
Для добавления Custom Coin (кастомной монеты):
-
В меню слева выбрать пункт Custom mining
-
Перейти на вкладку COINS
-
Нажать Add
- В открывшейся форме заполнить данные:
- Coin Name // наименование монеты
- Short Name // сокращение имени монеты
- Select algo // выбор алгоритма монеты
- Is Nicehash // флаг для Nicehash монет
- Нажать Save (станет активной после заполнения формы)
Если все сделано верно, то новая монета отобразится в списке на текущей вкладке.
Для добавления Custom Pool (кастомного пула):
-
В меню слева выбрать пункт Custom mining
-
Перейти на вкладку POOLS
-
Нажать Add
-
В открывшейся форме заполнить данные:
- pool Name // наименование пула - Ewal template // шаблон кошелька - URL template // шаблон URL - Select auth type // выбор типа авторизации на пуле - Is Nicehash // указание типа сервера nicehash - Select coin // выбор монет(ы) - Add new url // добавление URL
-
Нажать Save (станет активной после заполнения формы)
Если все сделано верно, то новый пул отобразится в списке на текущей вкладке.
Следующие функции в модуле ravinos предоставляются для удобства пользователя
ravinos.get_by_type(devs, type)
Принимает список устройств и тип. type может принимать значения (AMD, NVIDIA, MIXED).
Возвращает массив GPU выбранного типа. При указании типа MIXED сортирует возвращаемый массив.
ravinos.sort_devs(devs, sort_by)
Принимает список устройств и метод сортировки.
Возвращает отсортированный массив устройств.
ravinos.get_pool_type(val)
Принимает числовое значение. Параметр содержащий в себе данные о типе пула и наличии шифрования и его типе.
Разбирает значение побитово. Где первые 4 бита определяют схему подключения, а вторые 4 режим работы пула.
Константы для определения схемы подключения:
STRATUM_PROTO_TYPE_TCP = 0b00000000000000000000000000000001
STRATUM_PROTO_TYPE_SSL = 0b00000000000000000000000000000010
STRATUM_PROTO_TYPE_HTTP = 0b00000000000000000000000000000100
STRATUM_PROTO_TYPE_TLS = 0b00000000000000000000000000001000
STRATUM_MODE_ETH_PROXY = 0b00000000000000000000000000010000
STRATUM_MODE_QTMINER = 0b00000000000000000000000000100000
STRATUM_MODE_MINER_PROXY = 0b00000000000000000000000001000000
STRATUM_MODE_NICEHASH = 0b00000000000000000000000010000000
ravinos.url_parse(url)
Принимает URL адрес пула. При необходимости добавляет схему для дальныйшего корректного разбора адреса на составляющие.
Разбирает адрес и возвращает 6 компонентов URL как стандартная функция urlparse