Ultimas do CanalQb

Python - Usando o Pyminer

Python - Usando o Pyminer
Canal Qb

O cgminer não é uma biblioteca nativa do Python, mas existem algumas opções de bibliotecas Python que permitem se comunicar com o cgminer através de uma API, como por exemplo:

pyminer: Uma biblioteca Python que fornece uma interface simples para controlar o cgminer através da sua API. Você pode instalá-la usando o pip:
pip install pyminer
Em seguida, você pode usar a biblioteca no seu script Python:
import pyminer

miner = pyminer.Miner('127.0.0.1', 4028) # endereço IP e porta do cgminer

print(miner.summary()) # exibe um resumo das informações do minerador
cgminer-api: Outra biblioteca Python que oferece uma interface para a API do cgminer. Para instalá-la, você pode usar o pip:
pip install cgminer-api
Você pode usar a biblioteca no seu script Python:
from cgminer_api import CgminerAPI
miner = CgminerAPI('127.0.0.1', 4028) # endereço IP e porta do cgminer
print(miner.summary()) # exibe um resumo das informações do minerador
Tenha em mente que é necessário ter o cgminer rodando e configurado com a API habilitada para poder usar essas bibliotecas.

--*-- Um Script de exemplo de mineração em Python --**--

Para criar um script em Python que execute o minerador com os parâmetros "-a scrypt -o stratum+tcp://pool.knolix.com:3433 -u 63dc459 -p x", você precisará dos seguintes módulos:

requests: para fazer solicitações HTTP à API do pool de mineração.
time: para adicionar atrasos entre as solicitações de mineração.
Você pode instalar esses módulos usando o pip:
pip install requests
Aqui está um exemplo de script Python que usa esses módulos para executar o minerador:

import requests
import time

url = 'stratum+tcp://pool.knolix.com:3433' # endereço do pool de mineração
usuario = '63dc459' # usuário de mineração
senha = 'x' # senha de mineração
algoritmo = 'scrypt' # algoritmo de mineração

while True:
    # faz uma solicitação HTTP GET para a API do pool de mineração com os parâmetros de mineração
    resposta = requests.get(f'{url}/mine?algo={algoritmo}&user={usuario}&pass={senha}')
    
    # exibe a resposta do pool de mineração
    print(resposta.text)
    
    # adiciona um atraso de 10 segundos antes de fazer a próxima solicitação de mineração
    time.sleep(10)
Esse script fará solicitações ao pool de mineração a cada 10 segundos e exibirá a resposta do pool. Lembre-se de substituir o usuário e a senha pelos seus próprios dados de mineração e o endereço do pool pelo endereço do pool que você está usando.

--**-- Possiveis Erros -- ** --

O erro "InvalidSchema: No connection adapters were found for 'stratum+tcp://pool.knolix.com:3433/mine?algo=scrypt&user=63dc459&pass=x'" indica que o URL fornecido não pode ser usado com o pacote "requests" do Python, pois o esquema "stratum+tcp" não é suportado.

Para corrigir esse erro, você pode tentar usar um pacote Python específico para comunicação com pools de mineração, como o "pystratum", que suporta o esquema "stratum+tcp". Para instalar o "pystratum", basta usar o comando:
pip install pystratum
Em seguida, você pode usar o seguinte código para se conectar ao pool de mineração: 
from pystratum import StratumClient

url = "stratum+tcp://pool.knolix.com:3433"
user = "63dc459"
password = "x"
algo = "scrypt"

client = StratumClient(url, user, password, algo)
client.connect()

# Envie comandos para o pool de mineração aqui

client.disconnect()
Este código usa o "pystratum" para se conectar ao pool de mineração com o URL "stratum+tcp://pool.knolix.com:3433", o usuário "63dc459", a senha "x" e o algoritmo "scrypt". Depois que a conexão é estabelecida, você pode enviar comandos para o pool de mineração. Lembre-se de desconectar do pool após terminar de enviar comandos.

-- ** --

O erro "ERROR: Could not find a version that satisfies the requirement pystratum (from versions: none) ERROR: No matching distribution found for pystratum" significa que o pacote "pystratum" não está disponível no índice de pacotes padrão do pip.

Isso pode acontecer por algumas razões, por exemplo, o pacote pode não existir mais ou ainda não ter sido adicionado ao índice do pip. Uma solução alternativa é instalar o "pystratum" manualmente.

Para instalar o "pystratum" manualmente, siga estas etapas:

Baixe o pacote "pystratum" do GitHub em https://github.com/costasd/PyStratum-Mining

Extraia o conteúdo do arquivo ZIP baixado em uma pasta do seu computador.

Abra o terminal ou prompt de comando e navegue até a pasta em que o pacote "pystratum" foi extraído.

Execute o comando "python setup.py install" para instalar o pacote "pystratum".

Com isso, você deve conseguir instalar o "pystratum" manualmente e utilizá-lo para se conectar ao pool de mineração.

--**--

Se você não conseguiu instalar o "pystratum", você pode tentar usar outra biblioteca Python para se conectar a pools de mineração, como o "stratum" ou "miningcore-client". Ambas são bibliotecas Python que suportam conexões com pools de mineração usando o protocolo Stratum.

Para instalar o "stratum", você pode usar o seguinte comando:
pip install stratum
Em seguida, você pode usar o seguinte código para se conectar ao pool de mineração:
import stratum

url = "stratum+tcp://pool.knolix.com:3433"
user = "63dc459"
password = "x"
algo = "scrypt"

client = stratum.Client(url, username=user, password=password, service=algo)
client.authorize()

# Envie comandos para o pool de mineração aqui

client.close()
Este código usa o "stratum" para se conectar ao pool de mineração com o URL "stratum+tcp://pool.knolix.com:3433", o usuário "63dc459de87f9", a senha "x" e o algoritmo "scrypt". Depois que a conexão é estabelecida, você pode enviar comandos para o pool de mineração. Lembre-se de fechar a conexão após terminar de enviar comandos.

Para instalar o "miningcore-client", você pode usar o seguinte comando:
pip install miningcore-client
Em seguida, você pode usar o seguinte código para se conectar ao pool de mineração:
from miningcore.miningcore import Miningcore

url = "stratum+tcp://pool.knolix.com:3433"
user = "63dc459"
password = "x"
algo = "scrypt"

client = Miningcore(url, user, password, algo)
client.connect()

# Envie comandos para o pool de mineração aqui

client.disconnect()
Este código usa o "miningcore-client" para se conectar ao pool de mineração com o URL "stratum+tcp://pool.knolix.com:3433", o usuário "63dc459", a senha "x" e o algoritmo "scrypt". Depois que a conexão é estabelecida, você pode enviar comandos para o pool de mineração. Lembre-se de desconectar do pool após terminar de enviar comandos.

-- ** -- Possiveis erros  -- ** --

Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
ERROR: Could not find a version that satisfies the requirement miningcore-client (from versions: none)
ERROR: No matching distribution found for miningcore-client

O erro que você está enfrentando indica que o pip não conseguiu encontrar uma versão disponível da biblioteca "miningcore-client". Isso pode ocorrer se a biblioteca não estiver mais disponível no repositório de pacotes padrão do Python ou se a biblioteca não estiver mais sendo mantida.

Se você não conseguiu instalar o "miningcore-client", você pode tentar usar outra biblioteca Python para se conectar a pools de mineração, como o "stratum". O "stratum" é uma biblioteca Python que suporta conexões com pools de mineração usando o protocolo Stratum.

Para instalar o "stratum", você pode usar o seguinte comando:
pip install stratum
Em seguida, você pode usar o seguinte código para se conectar ao pool de mineração:
import stratum

url = "stratum+tcp://pool.knolix.com:3433"
user = "63dc459"
password = "x"
algo = "scrypt"

client = stratum.Client(url, username=user, password=password, service=algo)
client.authorize()

# Envie comandos para o pool de mineração aqui

client.close()
Este código usa o "stratum" para se conectar ao pool de mineração com o URL "stratum+tcp://pool.knolix.com:3433", o usuário "63dc459", a senha "x" e o algoritmo "scrypt". Depois que a conexão é estabelecida, você pode enviar comandos para o pool de mineração. Lembre-se de fechar a conexão após terminar de enviar comandos.

--*--
Para mineração com algoritmo Scrypt, alguns módulos Python que você pode usar incluem:

  • pycryptodomex
  • scrypt
  • pycryptodome
  • pycryptosat
Tenha em mente que estes módulos podem ter diferentes níveis de suporte e documentação, portanto, certifique-se de ler a documentação antes de utilizá-los. Além disso, esses módulos podem não ter uma integração direta com o tipo de pool de mineração que você deseja usar, então você precisará implementar essa parte do código por conta própria ou procurar por outros módulos que atendam às suas necessidades.

--**--

10 módulos para mineração por script com CPU de 1 cabeça:

  • pycryptodomex: Uma biblioteca de criptografia que pode ser usada para hash e assinatura digital. É útil para mineração de criptomoedas que usam algoritmos de hash, como o Bitcoin.
  • solo: Uma biblioteca para mineração solo, ou seja, sem se conectar a um pool de mineração.
  • pyminer: Um minerador Python para mineração de Bitcoin usando CPU.
  • yacminer: Um minerador para mineração de criptomoedas que usa CPU e GPU.
  • xmr-stak-cpu: Um minerador de CPU para a criptomoeda Monero.
  • cpuminer: Um minerador de CPU para várias criptomoedas.
  • cgminer: Um minerador de criptomoedas que pode ser usado com CPU e GPU.
  • cpuminer-opt: Uma versão otimizada do cpuminer com suporte a vários algoritmos de mineração.
  • xmrig: Um minerador de criptomoedas que pode ser usado com CPU e GPU.
  • ccminer: Um minerador de criptomoedas para GPUs NVIDIA, mas também suporta mineração com CPU.
Lembre-se de verificar se os módulos são adequados para o tipo de criptomoeda que você está tentando minerar e se são compatíveis com o sistema operacional que você está usando. Além disso, observe que a mineração com CPU é geralmente menos eficiente do que a mineração com GPU ou ASIC, então não espere grandes retornos.

Segue abaixo um exemplo de script em Python utilizando a biblioteca pycryptodomex para mineração com a criptografia scrypt, com as informações fornecidas:

import hashlib
import socket

from pycryptodomex.scrypt import hash as scrypt_hash


# informações da pool de mineração
host = "pool.knolix.com"
port = 3433
user = "63dc459de87f9"
password = "x"

# conexão com a pool de mineração
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))

# envio da mensagem de autenticação
auth_msg = f"{user}\x00{password}\x00{int(socket.gettime() * 1000)}".encode("utf-8")
auth_hash = hashlib.sha256(hashlib.sha256(auth_msg).digest()).digest()
sock.sendall(auth_hash)

# recebimento da resposta de autenticação
response = sock.recv(1024)
if response != b"\x00":
    raise Exception("Falha na autenticação")

# loop de mineração
while True:
    job = sock.recv(1024)
    header_hash = scrypt_hash(job)

    # envio do resultado da mineração
    sock.sendall(header_hash)
Lembrando que este é apenas um exemplo básico de script de mineração e que é necessário realizar ajustes de acordo com as suas necessidades e configurações específicas. Além disso, é importante verificar as políticas da pool de mineração em relação ao uso de scripts automatizados para mineração.

scrypt: stratum+tcp://pool.knolix.com:3433
Periodic Report     5m19s        25m40s
Share rate        0.00/min     0.08/min
Hash rate          0.00h/s     10.89kh/s   (6761.53h/s)
Submitted             0            2
Accepted              0            2      100.0%
Stratum resets                     1
Hi/Lo Share Diff  0.020365 /  0.010142

Esse é um relatório gerado a cada 5 minutos e 19 segundos pelo minerador de criptomoedas que está usando o algoritmo scrypt e conectado ao pool de mineração através do protocolo stratum na porta 3433 do endereço pool.knolix.com. O relatório apresenta informações sobre a taxa de compartilhamento (share rate), a taxa de hash (hash rate), o número de soluções submetidas e aceitas pelo pool, a porcentagem de aceitação, além de informações sobre a dificuldade do compartilhamento (share diff).

Nenhum comentário

Comente só assim vamos crescer juntos!

Observação: somente um membro deste blog pode postar um comentário.