enchufado
   RSS
#
Conceptos básicos de criptomoneda aplicados a la mineria (GNU/Linux) 2017-06-03 23:32:49

Disclaimer: Antes de nada, avisar que éste post puede ser desordenado, tener imprecisiones y sobreentender conceptos. Asimismo, está enfocado a mostrar un ejemplo práctico de mineria con Monero, así que algunas de las cosas que se explican pueden ser exclusivas de ésta criptomoneda. Así pues, vamos allá.

La criptomoneda es un medio digital de intercambio con una serie de características que se pueden leer en la Wikipedia. La minería de criptomoneda por lo general requiere de capacidad de procesamiento. Mayormente CPU (bien las corrientes y de uso generalista, bien gráficas aka "GPU"), aunque dependiendo del algoritmo a procesar puedan ser igualmente importantes y necesarios otros recursos (RAM, disco...).

La criptomoneda que popularizó éste propio concepto fue el Bitcoin, uno de los primeros y que desde entonces se ha eregido como la reina. Vendría a ser como el MP3 en el mundo del audio digital: sea o no el mejor, fue el primero y vino para quedarse. No en vano conforma casi la mitad del volumen de las criptomonedas existentes en el mercado y es la que más valor tiene (actualmente está alrededor de 2000€).

Cada criptomoneda tiene sus particularidades. Antes dijimos que necesitamos capacidad de procesamiento para hacer mineria. Muchos inicios de criptomoneda empiezan con la posibilidad de realizar mineria con CPU, pero a medida que pasa el tiempo, el incremento de dificultad que implementa cada sistema hace más o menos viable continuar con esta opción. El siguiente paso dentro del campo de herramientas útiles para minar suele ser el uso de GPU. Y finalmente se puede pasar a hardware dedicado (FPGA, ASIC...). La agrupación de éstos recursos de mineria en un sólo equipo se conoce como minning rigs (compuestos normalmente por raids de GPU o de otro hardware dedicado).

Siguiendo con el ejemplo del Bitcoin, en sus inicios era posible minar con CPU. Posteriormente se hizo necesario el uso de GPU para obtener resultados, no valiendo la pena hacerlo con CPU. Y finalmente fue necesario pasar al uso de hardware dedicado o mining rigs para poder sacar provecho.

Análogamente y como pasa con las monedas del mundo real, las criptomonedas necesitan de monederos (wallets) para ser guardadas. Éstos existen en forma de monederos locales (normalmente más seguros y bajo nuestro control, si bien también son más demandantes de recursos) o remotos (normalmente más inseguros, aunque más prácticos y sin necesidad de dedicarles recursos). Asimismo, las criptomonedas se basan en un blockchain, que es como una base de datos distribuida diseñada para evitar su modificación. Es como un histórico de operaciones que verifican las acciones de la propia mineria y las transacciones (pagos, cobros, transferencias). Comento el blockchain en éste punto de los monederos porque guardan una estrecha relación, puesto que es lo que hace que los monederos locales necesiten de recursos: el blockchain debe descargarse y verificarse, consumiendo una cantidad variable pero no desdeñable de CPU, memoria, operaciones en disco y espacio en el mismo. Y dependiendo del blockchain, será necesario mucho tiempo y paciencia.

Volviendo un poco a la historia, el emerger de muchas otras criptomonedas ha propiciado que se pueda reaprovechar hardware para minar que para otras criptomonedas ya ha quedado obsoleto. Como puede verse en la imagen de arriba, éste emerger está diversificando el mercado (algo recomendable en general). Algunas de éstas criptomonedas funcionan en base a algoritmos que por sus características son susceptibles de ser minados con CPU al no tener diferencias demasiado notables respecto a hacerlos con otro hardware (p.ej. GPU).

En este caso estoy hablando del cryptocurrency Monero. Ésta cryptocurrency se basa en el algoritmo "cryptonight" y permite que las CPUs no sean (al menos de momento) relegadas del campo de la mineria. Evidentemente cuanto más potentes sean, mejor. Y sobretodo, cuanto más nuevas sean, mucho mejor. Porque éste algoritmo en concreto "se empuja" mucho mejor con CPUs con el set de instrucciones AES-NI (puedes buscar su disponibilidad ejecutando cat /proc/cpuinfo | grep --color=always aes).

En el minado puede hablarse de 2 modalidades: solo mining vs pools. La primera se refiere a minar en solitario, algo que sólo es recomendable si se dispone de una buena cantidad de recursos para el minado. De otro modo, si queremos ver algún tipo de recompensa, deberemos optar por formar parte de un pool de minado trabajando en comunidad con otros mineros. Ésto resulta en un beneficio más seguro y a repartir equitativamente (según los recursos aportados al pool).

Ahora sí, vamos a ver un ejemplo de minado de Monero con la herramienta "cpuminer-multi", que entre otros, puede minar el algoritmo de Monero. Las instrucciones del setup básico con GNU/Linux se reducen a:

 $ apt-get install git libcurl4-openssl-dev build-essential libjansson-dev autotools-dev automake
 $ git clone https://github.com/wolf9466/cpuminer-multi
 $ cd cpuminer-multi
 $ ./autogen.sh
 $ CFLAGS="-march=native" ./configure
 $ make
 $ ./minerd -a cryptonight -o stratum+tcp://pool.minexmr.com:4444 -u WALLET_ADDRESS_HERE -p x -t 3

Es decir, se instalan unas pocas dependencias, clonamos el proyecto de git, compilamos y finalmente ejecutamos la orden, que se compone de:

  • Algoritmo, ya comentado.
  • Pool y puerto. Hay muchos pools con distintas características que nos pueden hacer decantarnos por uno u otro: disponibilidad, hashrate, niveles de dificultad de minado, quotas (fees), mejor o peor interfaz web...
  • Monedero. Dirección de nuestro monedero, sea éste local o remoto.
  • Password: Normalmente no es necesario, se pone "x" por poner algo.
  • Cantidad de hilos de ejecución. Por las características del algoritmo de minado de Monero, se recomienda poner la cantidad de cores correspodiente a la mitad de caché de CPU.

Ok, entonces antes de lanzar nada, necesitamos un wallet/monedero (efectivamente, hemos de sustituir el WALLET_ADDRESS_HERE). Podemos crear uno local (cada sistema tiene su manera de hacerlo), pero para éste propósito y para no complicarnos la vida vamos a crearnos uno online via web (web wallet). Para ello podemos acceder al sitio mymonero.com y creanos uno. No olvidéis apuntaros en un sitio seguro la clave de paso (la Private Login Key), pues será requisito para acceder en un futuro al monedero. Normalmente el resultado de lo minado se apunta a un monedero, pero hay pools que permiten guardarlo directamente a un Exchange (algo interesante si lo que queremos es acabar haciendo trading, puesto que transferirlo del moneredo a otro -el del pool- tiene su coste; por si no lo adivinaste, ese coste será el aliciente para que los mineros validen criptográficamente tu transacción).

Ahora ya podríamos minar. Veamos un ejemplo de salida del comando ejecutado para comentarlo brevemente:

 $ ./minerd -a cryptonight -o stratum+tcp://pool.minexmr.com:4444 -u WALLET_ADDRESS_HERE -p x -t 3
 [2017-06-03 23:12:36] I go faster as root.
 [2017-06-03 23:12:36] Using JSON-RPC 2.0
 [2017-06-03 23:12:36] 2 miner threads started, using "cryptonight" algorithm.
 [2017-06-03 23:12:36] Starting Stratum on stratum+tcp://pool.minexmr.com:4444
 [2017-06-03 23:12:36] Pool set diff to 5000
 [2017-06-03 23:12:36] Stratum detected new block
 [2017-06-03 23:13:27] accepted: 1/1 (100.00%), 46.71 H/s at diff 5000 (yay!!!)
 [2017-06-03 23:13:41] Pool set diff to 7500
 [2017-06-03 23:13:41] Stratum detected new block
 [2017-06-03 23:14:00] accepted: 2/2 (100.00%), 47.25 H/s at diff 7500 (yay!!!)
 [2017-06-03 23:14:11] Pool set diff to 11250
 [2017-06-03 23:14:11] Stratum detected new block
 [2017-06-03 23:15:28] accepted: 3/3 (100.00%), 47.16 H/s at diff 11250 (yay!!!)
 [2017-06-03 23:15:41] Pool set diff to 16875
 [2017-06-03 23:15:41] Stratum detected new block
 [2017-06-03 23:15:44] Stratum detected new block
 [2017-06-03 23:17:29] Stratum detected new block
 [2017-06-03 23:19:12] Pool set diff to 11300
 [2017-06-03 23:19:12] Stratum detected new block

Como podéis ver, lo iniciamos con 2 threads y en el caso de éste pool en particular (minexmr.com), apuntar al puerto 4444 significa empezar con la dificultad baja de 5000, y usa de forma automática niveles adaptativos en función de la dificultad que tu procesamiento sea capaz de resolver. Se aprecia que en cada resolución (el yay!!! supone que el pool nos acepta un bloque que fuimos capaces de resolver, indicándonos a qué dificultad minamos y nuestro hashrate, esto es, los hashes por segundo de los que es capaz nuestro elemento de minado) sube a 7500, posteriormente a 11250, y así sucesivamente. Si "se atasca" (no es capaz de resolver bloques en veces sucesivas), va bajando la dificultad de nuevo hasta una en la que nos sea asequible resolver el problema. Al fin y al cabo, todos queremos resolver bloques y sacar tajada :) Como te puedes imaginar, cuanto más alta sea la dificultad de los bloques resueltos, mayor será la recompensa, y viceversa.

Vale, con ésto ya puedo minar y guardarlo en un monedero. Pero ¿y si lo quiero convertir a dinero real (fiat)? Llega el momento de hablar de los exchange, que en resumidas cuentas son sites que permiten la compra/venta/intercambio de criptomonedas y/o fiat. Sólo es preciso abrirse una cuenta en uno de ellos (p.ej. en Coinbase o Kraken, de entre muchos otros) y transferir allí lo minado. Hecho ésto, se puede ofertar lo minado o la inversa, que es publicar ofertas de compra de criptomoneda.

Y por si no te paraste a pensar, en el minado no todo son beneficios. Hay gastos del propio uso/desgaste del hardware que ya tienes, de electricidad, de compra de material de minado... ¡y del tiempo invertido en aprender! Son cosas a tener en cuenta siquiera antes de empezar a minar, aunque como el precio de las criptomonedas es variable y de futuro incierto... quién sabe el dia de mañana si habrás perdido, mantenido o recuperado con creces lo invertido. Tomar o no el riesgo es tu elección ;)


Comentarios (0)


Volver al indice

login, admin, form, register