Blockchain para los más pequeños

Descargo de responsabilidad


Este texto no está vinculado a los proyectos criptográficos existentes y representa un "caballo esférico en el vacío" para la primera inmersión en el tema. Los especialistas, muy probablemente, no necesitarán verdades tan comunes. Y sí, este es Longrid. Aunque queda mucho detrás de escena.


Introductorio


En primer lugar, blockchain está de moda. Y esta es la razón principal por la que están interesados. Parece que esta es una tecnología de "bromista" que puede y debe aplicarse en todas partes. Pero esto no es cierto. Y para que no tenga que aceptar mi palabra, le diré qué es realmente la cadena de bloques, dónde es aplicable y dónde se necesita, como un paraguas para pescar.


Entonces ...


Blockchain


El término proviene del inglés "block chain", que se traduce como "block chain". Cada nuevo bloque contiene el hash del bloque anterior, formando una lista enlazada individualmente en la que el hash de cada bloque se registra en el siguiente bloque.


El hash de bloque depende de todos los bloques anteriores. Por lo tanto, el hash del último bloque refleja el estado de toda la base de datos. Y la cadena de hashes desde el último bloque hasta el primero es prueba de su inmutabilidad. Cuando se agrega un nuevo bloque, se "vincula" al último bloque y su hash se convierte en el nuevo estado de la base de datos.


Si se cambia cualquier bloque existente, se violará la cadena hash y el lugar de su violación indicará el bloque cambiado. Puede volver a calcular y cambiar todos los valores hash hasta el final de la cadena; entonces la conectividad criptográfica permanecerá, pero el valor hash del último bloque cambiará. Si el estado de la base de datos, y este es el hash del último bloque, es bien conocido, entonces la falsificación es imposible.


Eso, de hecho, es todo.


Base de datos


Ya sabemos que blockchain es solo una forma de proteger la base de datos de interferencias. ¿Cuál debería ser la base de datos en sí? De hecho, puede ser cualquiera: SQL, BigTable, Key-Value, sistema de archivos. Pero el uso de blockchain impone sus limitaciones.


La base de datos protegida blockchain de las cuatro propiedades CRUD ("Crear, Leer, Actualizar, Eliminar") permite solo las dos primeras. No puede cambiar ni eliminar datos de dicha base de datos, ya que perderá de inmediato la integridad criptográfica. Blockchain le permite solo leer y crear nuevos bloques.


Tal base defectuosa se llama registro. Para flujo de trabajo, actividad de patentes y, por supuesto. - las criptomonedas tal modelo es aceptable y orgánico. Pero usarlo como una base de datos de propósito general es casi imposible.


La palabra clave aquí es "casi". Hay una manera de conciliar una base de datos de blockchain "completa" y este método se denomina "registro de transacciones".


Tomemos, por ejemplo, una base de datos simple de clave-valor que almacena entidades arbitrarias asociadas con una clave única. Se pueden crear y eliminar, leer y realizar cambios.


Para cada entidad, calcule el hash y luego literalmente ordene (ordene alfabéticamente) la lista resultante. Para cada par de hashes, calcule el hash de la suma literal (concatenación) de estos hashes. Luego, en la lista resultante, haga lo mismo. Y así sucesivamente hasta que construyamos un árbol hash, sobre el cual habrá un valor único. Este mecanismo se llama árbol Merkle y en la parte superior habrá un hash que refleja el estado de la base de datos.


A continuación, crearemos una lista vinculada individualmente de acuerdo con todas las reglas de blockchain, que contendrá registros sobre el estado de la base de datos, la clave y el nuevo valor de la entidad. Bueno, y el hash de la entrada anterior, por supuesto. Esto ya será una cadena de bloques, una cadena de bloques de transacciones, cada una de las cuales está asociada con el estado de la base de datos y contiene la esencia de los cambios realizados por esta transacción.


Si la clave es nueva, se crea la entidad. Si existe, cambia. Si el nuevo valor es cero, la entidad se elimina. Cada cambio lleva a un recuento de las ramas afectadas del árbol Merkle y a un nuevo estado de la base.


En principio, se puede implementar el mismo esquema para una base de datos relacional y para cualquier otro, si es necesario. El registro de transacciones registrará los cambios, el árbol de Merkle demostrará su fiabilidad. No está mal, ¿verdad?


Descentralización de datos


¿Por qué molestarse con todos estos mecanismos de autenticación? Entonces, de esa manera puede construir una base de datos distribuida en la que pueda confiar. Incluso si los mismos nodos de la red en la que se almacena esta base de datos, no confiamos.


Las bases de datos descentralizadas se replican y distribuyen. Las bases de datos replicadas de cada usuario se almacenan de manera igual y completa, y las bases de datos distribuidas se almacenan de manera diferente y parcial. La ventaja del primer enfoque es el control total sobre la base de datos, y la desventaja está en los altos requisitos para los volúmenes de almacenamiento. Los pros y los contras del segundo enfoque se reflejan: el volumen de toda la base de datos puede ser muchas veces mayor que las capacidades de cualquier usuario individual, pero a costa de un control insuficiente y, por lo tanto, una disminución de la confianza en su fiabilidad.


Cualquier usuario de la base de datos puede agregar su propio bloque. Pero la base es confiable solo cuando todas sus instancias son iguales. La sincronización es una forma de mantener la fiabilidad de una base de datos. Es posible llevar a cabo cualquier operación con él, leer o escribir, siempre que sea lo suficientemente relevante como para que las mismas acciones con él conduzcan a los mismos resultados.


En general, la sincronización consiste en obtener el último estado de la base de datos, seguido de la obtención secuencial de los elementos faltantes hasta que la integridad se restablezca por completo.


Red distribuida


La descentralización garantiza la estabilidad del sistema contra la influencia destructiva, tanto de piratas informáticos individuales, como de corporaciones y estructuras de gobierno. Un sistema descentralizado vivirá mientras exista una conexión entre sus elementos.


Los participantes en una red distribuida forman un gráfico, cuyos nodos son computadoras conectadas a Internet, y los bordes entre ellos están conectados por bordes. Cada nodo tiene un identificador único: una cuenta, una clave pública de una firma electrónica u otra cosa. Este identificador se usa para direccionar mensajes, y la forma de enrutarlos depende de la arquitectura de la red.


La arquitectura más simple es un gráfico totalmente conectado, en el que cada identificador corresponde a una dirección de red real y existe la posibilidad de comunicación de todos con todos. Pero en una infraestructura de red real, la posibilidad de conectar a todos con todos puede no serlo. Además, debido a la necesidad de notificar a todos los participantes, con el crecimiento de la red, el tráfico crecerá en proporción al número de participantes. Tarde o temprano llegará un límite de eficiencia, más allá del cual comenzará la degradación de la red, hasta su punto final.


Un modelo más complejo es un gráfico cíclico dirigido. Los identificadores se organizan en una sola lista, que se enlaza para que cada nodo tenga "vecinos" a la izquierda y a la derecha. Al recibir un mensaje de los vecinos de la izquierda y enviarlo a la derecha, los nodos lo envían por retransmisión. Este esquema no depende del tamaño de la red, porque los nodos interactúan con un número fijo relativamente pequeño de vecinos. Este esquema puede mejorarse y complementarse, pero el punto es que cada nodo interactuará solo con su propia subred, que, superponiéndose parcialmente, implementará un gráfico conectado de tamaño ilimitado.


Pero esto no proporciona una solución para situaciones en las que los nodos pueden conectarse a otros unilateralmente. Desde redes privadas ocultas detrás de enrutadores de traducción de direcciones de red (NAT), pueden enviar mensajes, pero no pueden recibirlos. Para ellos, es necesario implementar un modelo en el que establezcan una conexión y se reciban mensajes en respuesta a una solicitud. El "problema transversal NAT" puede tener una solución en forma de enrutadores "baliza" separados u otros nodos que implementan estas funciones. El patrón con enrutadores es similar al patrón en estrella de la arquitectura de red.


Las arquitecturas en anillo y en estrella se pueden mejorar y utilizar en combinación, pero la arquitectura de red en malla es la más eficiente, lo que convierte el gráfico original totalmente conectado en un gráfico no conectado al reducir las conexiones y convertir las conexiones directas en una "ruta" de varias intermedias. Para hacer esto, cada nodo debe ser capaz, si es necesario, de convertirse en un enrutador para los vecinos. Las rutas y paradas de nodos particularmente inaccesibles dan miedo para tal arquitectura: la red reconstruirá rutas dañadas y se reparará automáticamente. Y es más efectivo en términos de rendimiento.


Pero tienes que pagar por todo. El aparato matemático de las redes de malla (del inglés. Mesh - "cell") es mucho más complicado y probablemente me abstendré de describirlo aquí. Quienes estén interesados, me referiré al "problema del vendedor ambulante" y luego, si esto no los ahuyenta, a la teoría de juegos. Hay todas las respuestas allí, para aquellos que pueden obtenerlas.


Problema de ramificación


La cadena de bloques tiene un defecto fatal: donde simplemente hay listas conectadas, pueden existir árboles. Esto no contradice nada, porque varios posteriores pueden referirse al mismo bloque. Cada rama resultante es confiable, mantiene la integridad criptográfica y tiene su propio estado. Pero la base en su conjunto entra en una superposición de todos estos estados y se vuelve incierta.


Este problema es especialmente relevante en un sistema descentralizado, donde diferentes nodos pueden realizar cambios en la base de datos de forma independiente, causando bifurcaciones (del inglés fork - "fork"). Hay dos formas de lidiar con esto: evitando la situación de grabación simultánea y eliminando las consecuencias.


Minería


Probablemente haya escuchado que los usuarios de BitCoin queman electricidad la mayor parte del tiempo, desperdiciando recursos informáticos para resolver un problema matemático inútil. Si no, ahora sabes que ...


Se agrega un número aleatorio a cada nuevo bloque. Es aleatorio, pero el hash del bloque resultante debe cumplir las condiciones. Por ejemplo, comience con 10 ceros. Y ahora los nodos que desean escribir un nuevo bloque clasifican estos números hasta que el hash cumpla con las condiciones de complejidad especificadas. Y las "granjas" de computadoras, tarjetas de video o dispositivos especialmente diseñados absorben kilovatios y producen calor. Bueno, y los hashes necesarios, por supuesto.


¿Por qué todo esto? Pero muy simple. De los muchos participantes en la teoría de la probabilidad, una persona encuentra el hash cada 10 minutos. Él escribe el bloque. Esta es la forma más fácil de protegerse contra la ramificación.


Y lo más ineficiente, porque a pesar de la complejidad de la tarea, suceden "tenedores". Luego, aquellos que encuentran el tenedor quitan los bloques de la rama más corta y la transfieren secuencialmente al final del más largo.


Y para que los participantes de la red estén interesados ​​en hacer todo esto, por los recursos que gastan, obtienen monedas de criptomonedas "de la nada". Esto es minería (del inglés. "Minería" - trabajo en la mina).


PoW, PoS, DPoS ...


Calcular hashes es solo una forma de elegir uno de muchos. Esto es prueba de trabajo, que significa "prueba de trabajo realizado". Al calcular el hash deseado, los participantes hacen el trabajo, y el hash encontrado es esta misma evidencia. Prueba de desperdicio de electricidad.


Cuando los verdes hablaron de eso, a pocas personas les importó. Pero cuando el dinero nuevo comenzó a amenazar a los viejos, los gobiernos recordaron la ecología. Sin embargo, la inutilidad de la minería en ese momento no fue entendida solo por aquellos que recibieron dinero por ella. Es hora de cambiar algo ...


Y apareció Prueba de participación, "prueba de propiedad". Todo es simple, quién es más rico: tiene razón. De hecho, todo es un poco más complicado, pero no importa: la creación de bloques (¡y obtener recompensas por ellos!) Está en manos de aquellos con una mayor participación en la propiedad.


Luego vino DPoS (PoS delegado con democracia y votación), PoI ("prueba de importancia" basada en algunas métricas como actividad de actividad y tiempo de actividad), y más, y más, y más ...


La esencia sigue siendo la misma: se necesita un mecanismo que permita que solo uno escriba un nuevo bloque en una cadena en cada intervalo de tiempo. ¿Por qué debería de alguna manera demostrar que es digno y generalmente mejor que nadie?


¿Y si no para probar?


Y aquí nos detenemos y recordamos por qué es tan crítico para nosotros que la grabación haya sido realizada por una persona. Sí, para que la cadena no se divida en un árbol. Pero por que?


Si una cadena tiene dos bloques finales, la base de datos está en dos estados al mismo tiempo. Y si es más, entonces en una superposición de todos los estados posibles. La base se está volviendo incierta. Toda la base, en su totalidad. ¿Necesitamos una integridad monolítica de la base? Para verificar la autenticidad de un elemento, no se necesita toda la base, solo se necesitan aquellas partes asociadas con él.


Y si cambiamos independientemente la base de datos en diferentes lugares y cada cambio es compatible con la integridad criptográfica, entonces tendremos una base de datos indefinida, cuyos subconjuntos serán deterministas. Y si, además de la ramificación, también nos ocupamos de la ramificación, entonces la medida de incertidumbre aumentará y disminuirá al mismo tiempo. Y cualquier nodo puede agregar cualquier bloque a la cadena en cualquier momento, si primero se encarga de llevar todos los estados de los elementos afectados a un subconjunto determinista de la base de datos.


Esta es una cadena de bloques sin una cadena de bloques. Más precisamente, un registro en un gráfico dirigido acíclico.


Criptomoneda


Decimos "criptomoneda" - queremos decir "blockchain", decimos "blockchain" ... pero no, lo contrario no es cierto. ¿Qué es la criptomoneda?


Imagine una base de datos que contiene entradas con los campos "cuenta de remitente", "cuenta de destinatario" y "cantidad". Nada más, solo estas tres columnas. Con cada entrada en la cuenta del remitente, la cantidad de dinero disminuye en la cantidad indicada, y en la cuenta del destinatario, más. Si reúne todos los registros en los que se transfiere dinero a una sola cuenta y los agrega, y luego resta de la cantidad recibida todas las operaciones en las que se transfiere dinero de la cuenta, obtenemos la cantidad que ahora está en esta cuenta. Con cada nueva entrada, el dinero se transfiere de una cuenta a otra, etc.


¿Ves lo simple que es? Solo una tabla de tres columnas, y ya tenemos nuestro propio sistema financiero. Y todo sería así, si no fuera por un problema. Al principio, cuando la tabla está vacía, todas las cuentas tienen el mismo valor: cero. Y esto significa que no se puede realizar ninguna operación. Bueno, porque de lo contrario, algunas de las cuentas tendrían un valor negativo, y esto ... ¿está mal? O no?


Emisión


Si consideramos que el papel moneda es un recibo de la deuda del gobierno, entonces la cantidad total de billetes es la deuda total del estado con sus ciudadanos. Y si en sus cuentas hay diferentes números con un signo más, entonces en la "cuenta de estado" condicional, su suma con un signo menos. Entonces todo converge.


Los contadores llaman a este saldo "saldo", también tienen cuentas activas (estrictamente negativas) y pasivas (estrictamente positivas). También tienen cuentas activas-pasivas, pero si la razón y la vida son apreciadas por usted, manténgase alejado de las turbas de contabilidad, porque incluso tienen un "saldo en cuentas fuera de balance", cuya existencia no puede soportar toda mente.


El significado es el siguiente. Debido al hecho de que las cuentas de los emisores pueden ser negativas, transfieren dinero que no tienen y, por lo tanto, las "imprimen". Teóricamente, pueden hacer esto en cualquier cantidad. En la práctica, el emisor es parte de un sistema que debería regular la oferta monetaria. Cómo hacer esto: cada proyecto decide por sí mismo.


Inflación


Todo el valor total del sistema se estima en la deuda total de los participantes entre sí. La unidad monetaria es la cuantía de esta deuda total. Cuantas más unidades monetarias se pongan en circulación, menor será el costo de cada una de ellas. Y cuanto menor sea el valor objetivo de los ahorros de cada participante.


La inflación es un efecto secundario de cualquier problema. Si es posible, debe evitarse.


Deflación


Si alguna cantidad se transfiere a la cuenta del emisor, este dinero se "quemará". La cantidad de oferta monetaria disminuirá, el valor de la unidad monetaria aumentará y todos los participantes en el sistema se volverán un poco más ricos. Además, el filántropo, por supuesto, que sacó su dinero de circulación.


Se puede unir un mecanismo de incentivo a este mecanismo. Por ejemplo, para proporcionar la capacidad de realizar algunas acciones para una comisión que se debita de los participantes en el intercambio de dinero. Por ejemplo, quemando su propio dinero, un participante cobra una comisión por procesar los pagos de los remitentes de fondos.


La eliminación de parte de la oferta monetaria de la circulación aumenta el valor de la parte restante. Y vale la pena estimular este proceso, pero no demasiado activamente, porque la oferta de dinero debe ser lo suficientemente grande como para asegurar toda la actividad requerida.


Lo principal, como en todo, es el equilibrio y un sentido de proporción.


No solo dinero


Cuando hablamos de blockchain, mencionamos bases de datos arbitrarias, y no solo los registros de cuenta-conteo-suma. Entonces, podemos almacenar cualquier información en una base de datos distribuida. Esto abre grandes oportunidades. Una base de datos pública que no puede ser destruida y falsificada encontrará aplicación en todas partes.


Solo necesita encontrar un incentivo para que los participantes tengan sentido para ellos mismos al mantener sus computadoras encendidas.


Contratos inteligentes


Técnicamente, esto es lo mismo que los procedimientos almacenados en bases de datos. Es decir, código ejecutable en algún lenguaje de programación, que puede realizar cambios en la base de datos. Y el nombre se debe a que se ha desarrollado históricamente.


En las criptomonedas, un contrato inteligente es un tipo de participante que no es una persona viva, sino un autómata cuyo comportamiento está definido por el código. Cuando se realiza una operación de transferencia de dinero a este miembro, se ejecuta el código. Él puede hacer cualquier cosa: transferir la cantidad recibida a otros participantes en cuotas, ahorrar el dinero recibido hasta la hora X y luego seleccionar una y transferirle todo el dinero. Este último, por cierto, es una implementación clásica de todo tipo de ruletas, loterías y sorteos. Simplemente puede guardar información en la base de datos que algún participante ha pagado por el servicio, y luego otro participante conectado podrá recibir esta información y proporcionar el servicio.


Existe una cierta variedad de tales "autómatas" llamados "oráculos". ( , ) . "" , . , , .


, . - , , .


, — , .


Entonces podemos crear una máquina virtual distribuida dentro de una base distribuida. Lo mismo confiable (es decir, verificable), como todo lo demás.


Conclusión


Eso, de hecho, es todo.Una gran cantidad de innovaciones no son más que implementaciones más efectivas de las ideas descritas aquí de una forma u otra. Si te dicen algo "revolucionario", solo debes saber que quieren engañarte.


Por cierto, las pirámides de tipo MMM ya han aparecido en la cripta.


Gracias por su atencion

Source: https://habr.com/ru/post/480220/


All Articles