Contactos

¿Qué es la tasa de hash? Función hash: qué es, por qué es necesaria y para qué sirve. Hash de subcadena y su cálculo rápido

Intentemos comprender cuál es la complejidad de la red, lo que asusta a todos los nuevos mineros y qué tipo de hashrate de la red es.

Hoy en día hay muchas conversaciones sobre minería y comercio de criptomonedas. Cada pregunta de novato “qué ASIC comprar o qué granja construir” va acompañada de la respuesta... “¡Mira cómo crece la complejidad de la red y ni se te ocurra involucrarte en este asunto!”

Para simplificar, consideraremos la complejidad y el hashrate de la red usando el ejemplo de una moneda (análoga a Ethereum, usando un algoritmo similar). Los números son más pequeños y, espero, me resultará más fácil explicarles la esencia.

La red de cada criptomoneda tiene un parámetro como "tiempo de creación del bloque". En el caso de Musicoin, son 15 segundos. Cada 15 segundos, uno de los mineros debe encontrar una solución para crear un bloque.

¿Cómo mantener este parámetro en 15 segundos, independientemente de la cantidad de mineros que estén conectados a la red? Después de todo, si hay muchos mineros, encontrarán bloques con demasiada frecuencia (aquí hay un ejemplo de un bloque vacío en la red UBIQ http://www.ubiq.cc/block/212214), y si hay pocos mineros, entonces los bloques se encontrarán raramente y las transacciones de red continuarán durante mucho tiempo.

Por encontrar 1 bloque en la red Musicoin, un minero o grupo (muchos mineros juntos) recibe 309 monedas Musicoin = $13 al cambio actual.

Retiro. En la red Ethereum, pagan 5 ETH = $1900 por encontrar un bloque, en la red Ethereum clásica 5 ETC = $75. Pero, lamentablemente, la complejidad y el hashrate de las redes en estas monedas son muchas veces mayores.

Si los mineros producen bloques vacíos y reciben dinero por ellos, la moneda se depreciará, y si los bloques se encuentran lentamente, las transacciones se detendrán... nuevamente, la moneda se depreciará.

Aquí es donde entra en juego la Complejidad. En pocas palabras, esto es simplemente la complejidad del problema que los mineros deben resolver para crear un bloque, y puede cambiar. La dificultad depende del hashrate de la red (la cantidad de mineros conectados a la red de una moneda determinada). Si hay pocos mineros la dificultad baja, si hay muchos mineros la dificultad empieza a aumentar y es más difícil que un minero en concreto encuentre un bloque...

Los mineros reciben recompensas en monedas de la propia red, pero a todos los mineros les encantan los buenos coches, la comida y los trapos. Por lo tanto, para ellos es importante cuánto es en dólares estadounidenses, porque si el precio de una moneda ha aumentado en el intercambio, entonces el valor de la recompensa por encontrar un bloque en los notorios dólares estadounidenses se ha vuelto mayor.

El otro día, el 27 de agosto (ver gráfico arriba), el precio de la moneda musicoin aumentó significativamente, los mineros que estaban ocupados extrayendo monedas Zcash, Ethereum, Monero... se quedaron sin aliento anticipando más ganancias y cambiaron sus granjas a la moneda musicoin. . Al mismo tiempo, la propia red musicoin reaccionó, por supuesto, con un fuerte aumento de complejidad.

La dificultad se mide en hashes (normalmente TH terrahashes) y, cuando se aplica a la minería, es una unidad de trabajo completada. La potencia de la red (número de mineros) se mide en hashes por segundo (TH/s). La propia red ajusta la dificultad para que Dificultad/potencia de la red = tiempo hasta el siguiente bloque (en el caso de Musicoin 15 segundos).

El 27 de agosto, antes de que el precio se disparara, la complejidad de la red era: 7,5 TH en promedio y el hashrate de la red: 500 GH/s (aproximadamente 16.000 tarjetas de vídeo), luego, después de que el precio se disparara, el hashrate de la red aumentó a: 1,12 TH/ s (1120 GH/s) (aproximadamente 35.000 tarjetas de vídeo), y la dificultad se disparó a 16.728 TH.

Como resultado, la ganancia de la granja que extrajo la moneda ANTES de que el precio se disparara y DESPUÉS de que el precio se disparara no cambió. La granja empezó a producir menos monedas, pero a un precio más alto (no importa si es una granja o un conjunto completo de granjas).

Este es un punto clave que mucha gente no entiende. Sí, puedes ganar un par de dólares con estos saltos de dificultad, pero, como regla general, todo se calma en un par de horas y no importa qué moneda extraigas usando el mismo algoritmo. El escape será el mismo. Por supuesto, si está esperando que una moneda en particular despegue, búsquela.

Aquí tenemos que hacer otra digresión, hay personas que monitorean de cerca la complejidad y el hashrate... de todas las redes las 24 horas del día y en momentos en que el hashrate baja o la dificultad disminuye, compran energía en Nicehash y la envían a la red. de la moneda caída. Y atrapan muchos bloques.

En realidad, la conclusión: Imaginemos que existe una sola moneda, Ethereum. El hashrate de la red Ethereum crece constantemente y cada vez llegan más mineros nuevos. Si el precio de Ethereum cae y el número de mineros permanece sin cambios (o peor aún, crece), la minería llegará al nivel del outlet (cuánto $ extrajo, cuánto $ pagó por la electricidad). En esta situación, las granjas comenzarán a cerrarse y venderse, la complejidad comenzará a caer y los ingresos volverán a aumentar.

La supervivencia del más fuerte y del que tiene dinero a veces espera y mina por el enchufe.

Hoy en día, quizás sea difícil encontrar una persona que no sepa qué es la criptomoneda. Este producto innovador literalmente hizo estallar Internet y atrajo la atención de millones de personas. Minar monedas digitales es una de las pocas formas de convertirse en propietario de una criptomoneda. Sin embargo, la complejidad de la red de plataformas populares ha aumentado tanto que el hashrate de los procesadores y tarjetas de video convencionales no es suficiente para extraer "monedas" caras.

Hashrate es una unidad de medida que permite determinar la potencia informática efectiva de los equipos involucrados en la minería de criptomonedas. El hashrate se puede expresar en las siguientes unidades:

  • hash/segundo (H/s);
  • megahash/segundo (MH/s);
  • gigahash/segundo (GH/s);
  • terahash/segundo (TH/s);
  • petahash/segundo (PH/s).

Vale la pena señalar que la unidad H/s no se encuentra en ninguna red peer-to-peer. Esto se explica por el hecho de que la complejidad de la minería crece constantemente y la extracción de criptomonedas requiere equipos con una potencia informática más seria.

¿En qué se basa el proceso de minería?

La minería es un proceso bastante complejo, cuya esencia es que el equipo involucrado en respaldar el funcionamiento estable y correcto de la red peer-to-peer debe resolver problemas matemáticos. Cuando se encuentra la respuesta correcta, el minero recibe una determinada recompensa.

Los problemas matemáticos aparecen dentro de la red no por casualidad, sino como consecuencia de la siguiente transacción. El historial de todas las transacciones financieras se registra en un registro especial que está disponible públicamente. El equipo conectado a la red comienza a procesar la información entrante y su objetivo principal es encontrar el hash deseado enumerando números aleatorios. Si el hash "correcto" coincide con la clave secreta, entonces la red peer-to-peer proporciona acceso a las siguientes operaciones.

Para que quede más claro qué es el hashrate, pongamos un ejemplo claro. Digamos que sabemos que el equipo del minero tiene una potencia de 15 MH/s (megahash/segundo). Esto significa que la potencia informática permite generar 16 millones de combinaciones numéricas diferentes cada segundo, entre las cuales puede haber la única correcta que satisfaga todos los requisitos de la red peer-to-peer.

Cómo saber el hashrate de tu equipo

La forma más segura y sencilla de conocer la potencia informática de su equipo existente es instalar un software de minería especial y luego abrir la consola, que muestra todos los datos. Sin embargo, este método no es en absoluto adecuado para personas que simplemente están pensando en comprar dispositivos para la minería criptográfica. En este caso, debes prestar atención a la potencia declarada por el fabricante. Pero tiene un valor medio y puede variar dependiendo de los siguientes factores:

  • Algoritmo de minería. Hay que tener en cuenta que el hashrate puede aumentar o disminuir cuando se trabaja con diferentes algoritmos. Por ejemplo, si un dispositivo demuestra un alto rendimiento dentro de una red peer-to-peer utilizando el algoritmo SHA, entonces la eficiencia disminuye significativamente al cambiar a una red que funciona con Scrypt.
  • Fabricante de equipos. Si, por ejemplo, tomamos una tarjeta de video GTX 1080 de Nvidia y una similar de MSI, a pesar de la similitud general de indicadores, su hashrate será completamente diferente.

La mayoría de los mineros novatos navegan por la World Wide Web en busca de tablas especiales que contienen información confiable sobre la potencia informática de un equipo en particular.

Tarjetas de video con el hashrate más alto

El mercado moderno de adaptadores gráficos ofrece la gama más amplia, pero no todas las tarjetas de video hacen frente a la minería de manera efectiva. Le sugerimos que consulte la tabla que muestra los mejores adaptadores de video para minería de criptomonedas a finales de noviembre de 2017.

Tasa de hash

(MH/s)

Precio

(rublos)

Recuperación (días)

Recuperación de la inversión sin tener en cuenta los costes

para electricidad (días)

Radeón RX470

11.700

Radeón RX480

15.100

GeForce GTX 1060

12.000

GeForce GTX 1070

23.500

Radeon Furia X

26.500

El hashrate que se muestra en la tabla es válido cuando se trabaja con el algoritmo Equihash. Sin embargo, los indicadores pueden cambiar significativamente a medida que aumenta continuamente la dificultad de la minería. Por el momento, es imposible predecir cuál será la potencia informática de estos dispositivos, incluso después de un mes. Por lo tanto, el período de recuperación de la inversión del equipo puede aumentar significativamente.

Cómo calcular los ingresos conociendo el hashrate

Todo minero que conozca el hashrate real de su propio equipo puede calcular fácilmente sus ingresos diarios, semanales e incluso mensuales. Para ello, basta con utilizar una calculadora en línea, por ejemplo, proporcionada por el servicio coinwarz.com.

Manténgase actualizado con todos los eventos importantes de United Traders: suscríbase a nuestro

A menudo, al descargar torrents o los propios archivos, la descripción dice algo como "ad33e486d0578a892b8vbd8b19e28754" (por ejemplo, en ex.ua), a menudo con el prefijo "md5". Este es el código hash: el resultado que produce la función hash después de procesar los datos entrantes. Traducido del inglés, hash significa confusión, marihuana, hierba o un plato de carne y verduras finamente picadas. muy, muy difícil, se podría decir casi imposible. Entonces surge la pregunta: "¿Por qué es necesario todo esto? Dicen palabrerías incomprensibles, que además no son descifrables". Esto se discutirá en este artículo.

¿Qué es una función hash y cómo funciona?

Esta función está diseñada para convertir datos entrantes de tamaño arbitrariamente grande en un resultado de longitud fija. El proceso de dicha conversión se llama hash y el resultado es un hash o código hash. A veces también se utilizan las palabras “huella digital” o “resumen de mensaje”, pero en la práctica son mucho menos comunes. Existen muchos algoritmos diferentes sobre cómo convertir cualquier matriz de datos en una determinada secuencia de caracteres de cierta longitud. El algoritmo más utilizado se llama md5 y fue desarrollado en 1991. A pesar de que hoy en día md5 está algo desactualizado y no se recomienda su uso, todavía está en uso y, a menudo, en lugar de la palabra "código hash", los sitios simplemente escriben md5 e indican el código en sí.

¿Por qué se necesita una función hash?

Conociendo el resultado, es casi imposible determinar los datos de entrada, pero los mismos datos de entrada dan el mismo resultado. Por lo tanto, la función hash (también llamada función de convolución) se usa a menudo para almacenar información muy importante como contraseña, inicio de sesión, número de identificación y otra información personal. En lugar de comparar la información que ingresa el usuario con la almacenada en la base de datos, se comparan sus hashes. Esto garantiza que, en caso de una filtración accidental de información, nadie podrá utilizar datos importantes para sus propios fines. Comparando el código hash también es conveniente comprobar que los archivos se están descargando correctamente desde Internet, especialmente si hubo interrupciones en la conexión durante la descarga.

Funciones hash: ¿que son? t

Dependiendo de su propósito, una función hash puede ser de tres tipos:

1. Función para verificar la integridad de la información.

Cuando ocurre a través de la red, se calcula un hash del paquete y este resultado también se transmite junto con el archivo. Al recibirlo, el código hash se calcula nuevamente y se compara con el valor recibido a través de la red. Si el código no coincide, esto indica errores y el paquete dañado se transmitirá nuevamente. Esta función tiene una velocidad de cálculo rápida, pero una pequeña cantidad de valores hash y poca estabilidad. Un ejemplo de este tipo: CRC32, que tiene sólo 232 valores diferentes.

2. Función criptográfica

Se utiliza para protección contra (ND). Le permiten comprobar si se han producido daños en los datos como resultado de un accidente durante la transferencia de archivos a través de la red. El verdadero hash en este caso está disponible públicamente y el hash del archivo resultante se puede calcular utilizando muchos programas diferentes. Estas funciones tienen una vida útil larga y estable, y la búsqueda de colisiones (posibles coincidencias de resultados de diferentes fuentes de datos) es muy difícil. Estas son las funciones que se utilizan para almacenar contraseñas (SH1, SH2, MD5) y otra información valiosa en la base de datos.

3. Una función diseñada para crear una estructura de datos eficiente.

Su objetivo es una organización compacta y bastante ordenada de la información en una estructura especial llamada tabla hash. Dicha tabla le permite agregar nueva información, eliminar información y buscar los datos necesarios a muy alta velocidad.

Los algoritmos de hash de cadenas ayudan a resolver muchos problemas. Pero tienen un gran inconveniente: que la mayoría de las veces no son 100% precisos, ya que hay muchas cadenas cuyos hashes son iguales. Otra cosa es que en la mayoría de los problemas puedes ignorar esto, ya que la probabilidad de que los hashes coincidan sigue siendo muy baja.

Definición y cálculo de hash

Una de las mejores formas de determinar la función hash de una cadena S es la siguiente:

H(S) = S + S * P + S * P^2 + S * P^3 + ... + S[N] * P^N

donde P es algún número.

Es razonable elegir un número primo para P, aproximadamente igual al número de caracteres del alfabeto de entrada. Por ejemplo, si se espera que las cadenas consten solo de letras minúsculas, entonces una buena opción sería P = 31. Si las letras pueden ser tanto mayúsculas como minúsculas, entonces, por ejemplo, P = 53.

Todo el código de este artículo utilizará P = 31.

Es recomendable almacenar el valor hash en el tipo numérico más grande: int64, también conocido como long long. Obviamente, cuando la longitud de la cadena es de aproximadamente 20 caracteres, ya se producirá un desbordamiento de valores. El punto clave es que no prestamos atención a estos desbordamientos, como si tomáramos el módulo hash 2^64.

Un ejemplo de cálculo hash si solo se permiten letras latinas minúsculas:

Constante int p = 31; hash largo largo = 0, p_pow = 1; para (tamaño_t i=0; i

En la mayoría de los problemas, tiene sentido calcular primero todas las potencias necesarias de P en alguna matriz.

Tarea de ejemplo. Encontrar cadenas idénticas

Ahora podemos resolver eficazmente este problema. Dada una lista de cadenas S, cada una de no más de M caracteres. Supongamos que desea encontrar todas las cadenas duplicadas y dividirlas en grupos para que cada grupo contenga solo cadenas idénticas.

Con la clasificación de cadenas normal obtendríamos un algoritmo con una complejidad de O (N M log N), mientras que usando hashes obtendríamos O (N M + N log N).

Algoritmo. Calculemos el hash de cada línea y ordenemos las líneas según este hash.

Vector s(n); // ... leyendo líneas... // cuenta todas las potencias de p, digamos, hasta 10000 - la longitud máxima de líneas const int p = 31; vector p_pow(10000); p_pow = 1; para (tamaño_t i=1; i >hashes(n); para (int i=0; i

Hash de subcadena y su cálculo rápido

Supongamos que nos dan una cadena S y los índices I y J. Necesitamos encontrar el hash de la subcadena S.

Por definición tenemos:

H = S[I] + S * P + S * P^2 + ... + S[J] * P^(JI)

H * P[I] = S[I] * P[I] + ... + S[J] * P[J], H * P[I] = H - H

La propiedad resultante es muy importante.

En efecto, resulta que Conociendo sólo los hash de todos los prefijos de una cadena S, podemos obtener el hash de cualquier subcadena en O(1).

El único problema que surge es que es necesario poder dividir por P[I]. De hecho, no es tan simple. Dado que estamos calculando un módulo hash 2^64, para dividir por P[I] debemos encontrar su elemento inverso en el campo (por ejemplo, usando el algoritmo euclidiano extendido) y multiplicarlo por este elemento inverso.

Sin embargo, existe una manera más sencilla. En la mayoría de los casos, en lugar de dividir los hashes por potencias de P, puedes, por el contrario, multiplicarlos por estas potencias.

Digamos que se dan dos hashes: uno multiplicado por P[I] y el otro por P[J]. Si yo< J, то умножим перый хэш на P, иначе же умножим второй хэш на P. Теперь мы привели хэши к одной степени, и можем их спокойно сравнивать.

Por ejemplo, código que calcula hashes de todos los prefijos y luego compara dos subcadenas en O(1):

Cadena s; int i1, i2, len; // datos de entrada // contar todas las potencias p const int p = 31; vector i2 && h1 == h2 * p_pow) cout<< "equal"; else cout << "different";

Usando hash

A continuación se muestran algunos usos típicos del hashing:

  • Determinar el número de subcadenas distintas en O(N^2 log N) (ver más abajo)
  • Determinar el número de palíndromos dentro de una cadena

Determinar el número de subcadenas distintas

Sea una cadena S de longitud N, que consta únicamente de letras latinas minúsculas. Necesita encontrar la cantidad de subcadenas diferentes en esta cadena.

Para resolver, tomemos la longitud de la subcadena una por una: L = 1 .. N.

Para cada L, construiremos una matriz de hashes de subcadenas de longitud L, reduciremos los hashes al mismo grado y ordenaremos esta matriz. Agregamos la cantidad de elementos diferentes en esta matriz a la respuesta.

Implementación:

Cadena s; // cadena de entrada int n = (int) s.length(); // cuenta todas las potencias de p const int p = 31; vector p_pow(s.length()); p_pow = 1; para (tamaño_t i=1; i H(s.longitud()); para (tamaño_t i=0; i hs(n-l+1); para (int i=0; i

En la red Bitcoin y en la mayoría de las otras criptomonedas modernas, la unidad de potencia informática es el hashrate. Al procesar operaciones y formar nuevos bloques de transacciones, la tecnología informática realiza complejos cálculos matemáticos para resolver los cuales el minero recibe una cierta cantidad de nuevas criptomonedas. Toda la información sobre las transacciones completadas se registra y almacena en un historial que está disponible públicamente. La tarea de los mineros es seleccionar el hash deseado entre todas las combinaciones posibles. Este hash es similar a una clave secreta y proporciona acceso a nuevas operaciones. Una vez resuelto el problema, el minero recibe una recompensa única, cuyo tamaño está estrictamente regulado por el algoritmo de la red de criptomonedas. Después de "cerrar" un bloque, el minero pasa a calcular un nuevo bloque. Como regla general, una gran cantidad de dispositivos que trabajan en el mismo grupo buscan simultáneamente un hash, y tan pronto como uno de ellos encuentra el hash, la recompensa se paga en proporción a todo el grupo, después de lo cual el proceso comienza de nuevo.

Si lo imaginas matemáticamente, se ve así: los mineros se dedican a seleccionar un hash, que incluye parte del bloque anterior, el número total de hashes de los últimos minutos y un número arbitrario. Los mineros necesitan encontrar un número aleatorio adecuado probando todas las opciones posibles hasta que se genere un hash que cumpla con los requisitos del sistema.

Este proceso recuerda al principio de funcionamiento de los rastreadores de torrents. No es ningún secreto que son la base de la red p2p, que permite descargar películas, música y software de forma rápida y ilimitada. Cualquier usuario, después de descargar un archivo y permanecer en la distribución, brinda a otros participantes de la red la oportunidad de descargar esta información, mientras su calificación aumenta, lo que le permite volver a descargar una cierta cantidad de gigabytes de datos en el futuro.

La minería se lleva a cabo en equipos cada vez más potentes, lo que aumenta la dificultad de extraer nuevas monedas. En los primeros años de Bitcoin, cualquiera podía extraer criptomonedas en la computadora de su propia casa, mientras que los mineros usaban potentes tarjetas de video para extraer Bitcoin. Sin embargo, en cierto momento, la complejidad aumentó tanto que se volvió imposible extraer BTC en una computadora normal, y se desarrollaron dispositivos especiales para este propósito: los mineros ASIC, que tienen una alta tasa de hash con bajos costos de energía.

Cómo averiguar la tasa de hash

No existen tablas de información uniformes que indiquen la potencia de tal o cual equipo, y todo porque la velocidad de hash (hashrate) está influenciada por varios factores. Aquí están los principales:

  • Fabricante de equipos. Con características técnicas absolutamente idénticas, los dispositivos de diferentes fabricantes producirán diferentes hashrates.
  • La ranura a través de la cual se conecta el minero o la tarjeta de video a la placa base. Hay casos en los que al conectar un dispositivo a diferentes ranuras, la velocidad de hash es radicalmente diferente.
  • Algoritmo. El equipo se comporta de manera diferente en cada uno de los algoritmos utilizados. Por ejemplo, si calcula utilizando el algoritmo Scrypt, la tasa de hash será la misma, pero si el equipo realiza cálculos utilizando SHA, entonces la tasa de hash será completamente diferente.

Los mineros novatos deben recordar que ciertos tipos de equipos, a pesar de su alto rendimiento, pueden no funcionar en absoluto con determinadas criptomonedas.

Los fabricantes de equipos siempre indican la potencia declarada en sus productos, pero no debes confiar completamente en estas cifras, porque incluso los modelos que salen de la misma línea de montaje producen diferentes tasas de hash. La mejor opción para calcular la tasa de hash es calcular la tasa de hash promedio durante un cierto período de tiempo en un equipo en funcionamiento.

Conclusión

La tasa de hash es un indicador clave que afecta la velocidad de los cálculos y, por lo tanto, aumenta las ganancias del minero. Sin embargo, este indicador en la minería depende de muchos factores externos diferentes, por lo que al comprar un equipo no se puede saber exactamente qué potencia tiene y, por tanto, qué ingresos generará el equipo. Muchos mineros prefieren no molestarse en ajustar el dispositivo, sino recurrir a especialistas de servicios que brindan servicios de minería en la nube. Al concluir un acuerdo con una empresa, un minero le alquila cierta potencia y, en este caso, nada podrá influir en la velocidad de hashrate.

Manténgase actualizado con todos los eventos importantes de United Traders: suscríbase a nuestro



¿Te gustó el artículo? Compártelo