Creazione di Pool per Cryptomonete

Pool

Se siete minatori di criptomonete, sicuramente saprete cosa sono le pool e come si usano, ma se volete crearne una (anche per vostro uso interno) come fare? E se volete crearne più di una?
Questa mini guida vi da le basi per raggiungere questo scopo.

Premessa

Un pool è un servizio a cui vari minatori accedono contemporaneamente per minare una criptomoneta.

L’idea è semplice: dato che all’aumentare della difficoltà solo chi ha hardware potente riesce in tempi ragionevoli a risolvere il blocco e ottenere i coins, per far si che tutti possano guadagnare qualcosa, si è pensato di assegnare ad ogni minatore un contributo dato da quanto ha partecipato alla soluzione del problema e alla fine dare una percentuale di monete in base al lavoro svolto.
Tecnicamente il pool dà in pasto al minatore di problemi con bassa difficoltà (e l’aumenta fino ad un limite massimo dato dalle risorse del minatore): per ogni problema risolto guadagna dei punti share.
Quando un blocco viene trovato (solitamente da chi ha harware potente e quindi sta lavorando alla reale difficoltà del problema), si divide il tutto in percentuale rispetto alla share guadagnata (secondo varie modalità, come la PPS – Pay Per Share o la PPLNS – Pay Per Last N Shares).

MPOS vecchia interfaccia
MPOS vecchia interfaccia

Per far si che il pool riesca a gestire le richieste di molti client, è stato sviluppato un protocollo di comunicazione che si chiama stratum (che agisce a livello TCP).

Creazione del pool

Per creare un pool servono 3 distinti software

  1. il demone della criptomoneta, solitamente chiamato coind (esempio bitcoind, litecoind, ecc)
  2. il software che gestisce il protocollo stratum (stratum-mining)
  3. il software che gestisce il pool vero e proprio (solitamente MPOS)

e alcune operazioni extra:

  1. Installare tutto il software necessario a corredo (librerie, dipendenze, database, ecc.)
  2. predisporre gli script automatici (cron) e di manutenzione
  3. settare il servizio del server su apache in modo che sia raggiungibile dai minatori
MPOS nuova interfaccia
MPOS nuova interfaccia

Demone

Ogni moneta ha i sorgenti solitamente ospitati su Github con cui è possibile compilare sia il demone che il wallet grafico. Per il server si deve solo compilare il demone. Perciò, una volta scaricati i sorgenti e decompressi, si deve entrare nella sottocartella src ed eseguire il comando di compilazione

make -f makefile.unix USE_UPNP=-

Attenzione: alcuni coin non hanno la cartella obj presente, pertanto essa va creata se mancante, altrimenti la compilazione non andrà a buon fine.

Ora che il demone è compilato esso può essere eseguito, non appena viene creato il file di configurazione per esso, ma la raccomandazione è quella di spostare la posizione del wallet in una cartella differente in modo da poter meglio gestire i permessi di sicurezza (il wallet dovrebbe essere visibile al solo utente che esegue il demone).

Il file di configurazione solitamente si chiama coin.conf (esempio bitcoin.conf, litecoin.conf, ecc) e deve contenere almeno le seguenti informazioni:

server=1
listen=1
daemon=1
rpcport=9999
port=9998
rpcallowip=127.0.0.1
rpcconnect=127.0.0.1
rpcallowip=localhost
rpcconnect=localhost
rpcuser=mylogin
rpcpassword=mypassord
addnode=9.9.9.9

In cui il numero di porta solitamente viene dato diverso per goni coin e i nodi sarannomolteplici e ognuno avrà il proprio indirizzo IP.

Fatto questo si esegue il daemone con:

./coind -datadir=/directory_del_wallet/

appena eseguito il demone, da un altra console, si esegue:

./coind -datadir=/directory_del_wallet/ getaccountaddress ""

che ci restituisce la chiave pubblica del nostro Wallet da usare per i coin generati dal pool.

in caso si debba stoppare il demone, la procedura corretta è di eseguire:

./coind -datadir=/directory_del_wallet/ stop

Stratum mining

Per gestire il protocollo stratum e il mining, serve il software che si trova su:

https://github.com/Crypto-Expert/stratum-mining.git

questo è il software di mining, che deve utilizare dei sotto moduli esterni (infatti li carica sotto External):

litecoin-scrypt: https://github.com/Tydus/litecoin_scrypt.git
stratum: https://github.com/ahmedbodi/stratum.git

ed eventualmente, se minate monete differenti da SHA256 e Scrypt, vi potrebbero servire altri moduli, come

vertcoin: https://github.com/scr34m/vertcoin_scrypt

le guide in rete vi spiegano come installare i sottomoduli litecoin e stratum e a configurarli (qui non approfondiamo questo aspetto), ma bisogna tener presente che questi moduli installati possono servire per gestire più pool e non serve che siamo installati per ogni nuovo pool.

Per quanto riguarda stratum-mining, l’unica modifica che serve è quella di creare il file di configurazione config.py (partendo da quello di esempio presente) compilando i campi che essenzialmente sono:

  • login di accesso al demone (quello inserito nel coind.conf)
  • login di accesso al database di MPOS
  • indirizzo wallet da utilizzare
  • porta stratum a cui risponde il server (per ogni pool essa deve essere diversa dalle altre)
  • parametri relativi al coin da minare (algoritmo, modalità di gestione pool – PPS/PPLNS, ecc)

A questo punto il software può essere eseguito con:

twistd -y launcher.tac

nel caso lo di debba stoppare, si deve killare il relativo processo che viene salvato nel file twistd.pid che si trova nella cartella del programma.

MPOS

Mpos è il software che gestisce il pool e si trova al link: git://github.com/TheSerapher/php-mpos.git

Una volta scaricato l’unica cosa da creare è il file global.inc.php che si può copiare dall’esempio presente (eventualmente anche il file security.inc.php per gestire le opzioni di sicurezza delel operazioni utente).

Questo file contiene le informazioni sul pool, che si riassumono con:

  • credenziali di accesso al database di MPOS
  • login di accesso al demone (configurato in coind.conf)
  • indirizzo di accesso a stratum-mining (configurato in config.py)
  • parametri sulla pool (tasse, algoritmo utilizzato, soglie per il pagamento, ecc)

Per far funzionare MPOS serve adesso creare il database MYSQL utilizzando lo script 000_base_structure.sql presente in esso. Nessuna guida mostra come creare il database utilizzando un utente specifico, cosa che è raccomandabile se si gestisce più pool per garantirne la sicurezza:

mysql -u root -p -e "create database coin;"
mysql -u root -p -e "create user 'coin'@'localhost' identified by 'password';"
mysql -u root -p -e "grant all privileges on coin.* TO 'coin'@'localhost';"
mysql -u coin -p coin < sql/000_base_structure.sql

Ora che MPOS è installato, per vederlo in funzione si deve andare sul sito web che deve essere stato configurato per puntare al file /mpos/public/index.php
Ovviamente se si gestisce un solo pool è un attimo configurare apache per far vedere quel link come sito principale, ma se avete più pool, bigogna creare un server virtuale per ogni pool che verrà mappato via DNS a indirizzi web differenti (esempio mic.multi-pool.info, grw.multi-pool.info).

La procedura è un pò più complicata e su questa guida non viene mostrata, ma nulla di trascendentale per chi ha già gestito siti web.

Una volta visitato il sito, bisogna registrarsi alla propria pool: questo indirizzo viene creato come amministratore e pertanto al login si ha accesso a tutto il mondo di configurazione e gestione del pool che non viene qui trattato.

Rimangono ancora due cose da fare per avere il pool funzionante: vanno ineriti in cron l’esecuzione degli script di MPOS: run-statistics.sh, run-maintenance.sh, run-payout.sh.

Il primi due vanno eseguiti ogni minuto, l’altro ogni 3/10 minuti a seconda di quanto spesso vogliamo far partire i pagamenti.

Se si hanno più pool, bisogna passare il parametro -d coin per far si che ogni pool utilizzi il proprio spazio temporaneo indipendente dagli altri.

L’ultimo punto è quello di mettere sull’init di Linux che vengano eseguiti il demone e stratum-mining ad ogni avvio di pc (e questo potrebbe non bastare: consiglio di mettere ogni 15 minuti che vengaro rieseguiti, perchè se per quelche motivo uno di questi due muore inaspettatamente, potreste ritrovarvi col pool non più operativo).

MPOS crons job
MPOS crons job

Problematiche

Ora che tutto è in funzione aspettatevi sicuramente dei problemi su MPOS.
Una mail vi viene spedita quando MPOS trova problemi e si blocca. I problemi possono essere molti, ma si riassumono sul fatto che ci sono 3 software differenti che devono dialogare tra di loro:

  • daemon
  • stratum-mining
  • MPOS

Ogni problema necessita di una procedura per far ripartire il corretto funzionamento del pool e servirebbero parecchie altre guide per descrivere ogni caso (in alcuni bisogna entrare nel database e modificare a mano i valori)

Un caso rognoso è quando c’è un fork del coin e il pool rimane bloccato perchè sta seguendo la blockchain sbagliata.
In questo caso, oltre a dover convalidare a mano i blocchi sbagliati sul database, bisogna riscaricare tutta la blockchain e ripartire con un nuovo wallet (trasferendo i coin da quello vecchio a quello nuovo), altrimenti MPOS continuerà a segnalare incongruienze e non vorrà saperne di partire.

A tutto questo bisogna tener prensete che MPOS è modificato pressochè ogni giorno e pertanto prima o poi dovrete aggiornarlo (lo potete fare con la pool che lavora senza problemi) e più santuariamente sia il daemone che stratum-mining possono venir modficati, pertanto un loro aggiornamento comporta il blocco della pool fino a operazioni completata.

Conclusioni

La guida è stata volutamente molto soft per non appensantire l’articolo, ma se volete gestire più di una pool sul vostro server, la gestione dei permessi, delle dirtectory e di tutti questi parametri che riguardano ogni pool diventa veramente notevole.

Ci può essere una soluzione?
Probabilemente si: il mio software open source Multi-pool che sto creando permette di automatizzare tutti questi processi rendendo la creazione di un pool molto facile.
Attualmente serve 1h per far partire un nuovo pool, ma l’obiettivo e di poter portare questo tempo a 15 minuti (tenendo conto anche del tempo che ci impiega il demone a compilarsi)!

Le operazioni preliminari (come l’installazione di tutte le dipendenze che servono) vengono gestite da un semplice script, così come tutti i cron da lanciare sono gestiti da appositi script. Tutte le cartelle sono gerarchicamente ordinate in modo da aver tutto a portata di mano mantenendo comunque la separazione tra i vari coin.

Attualmente con questo software gestisco in contemporanea 10 pools, ed il limite è solo la potenza e memoria del server come semaforo sul poter o meno aggiungerne altre.

Quando verrà rilasciato questo software? Lo sarà solo quando avrà raggiunto lo scopo per cui è prefissato (o almeno sarà tale che anche un non programmatore sarà in grado di poter gestire N pools in contemporanea).

multi-pool.info
multi-pool.info

2 Risposte a “Creazione di Pool per Cryptomonete”

  1. bell’articolo. Salvato nei preferiti e a breve comincio a fare le prove 🙂

  2. In caso di problemi avvisami.

    Tra l’altro visto il caso recente di Dafunkcoin che conteneva una backdoar, la parte che ho omesso sulla sicurezza della pool in realtà deve essere particolarmente curata (ad esempio io utilizzo utenti e gruppi a bassi permessi per eseguire i daemoni e scongiurare casi di codice maligno che se eseguito da root può cpmromettere il sistema)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.