Mastering Blockchain (Español)
Mastering Blockchain (Español)
Comentarios de los
clientes Prefacio Lo
que cubre este libro Lo
que necesita para este libro A
quién va dirigido este libro
Convenciones Comentarios de
los lectores Atención al cliente
Descarga del código de
ejemplo Descarga de las imágenes
en color de este libro Errata Piratería Preguntas
1. Blockchain 101 Sistemas distribuidos
Teorema CAP Problema general bizantino
Consenso Consenso mecanismos Tipos de
mecanismo de consenso La historia de la cadena de
bloques Dinero electrónico El concepto de dinero
electrónico Introducción a la cadena de bloques
Varias definiciones técnicas de las cadenas de
bloques Elementos genéricos de una cadena
de bloques Direcciones Transaction Block
Red peer-to-peer Lenguaje de programación
o scripting Máquina virtual Máquina de estado
Machine Translated
Nodos by Google
Contratos inteligentes
Verificación de transacciones
Consenso en blockchain
Prueba de trabajo
Prueba de participación
Prueba de importancia
Anillo
Un grupo cíclico
un grupo abeliano
Aritmética modular
Criptografía
Confidencialidad
Integridad
Autenticación
autenticación de entidad
Autenticación de origen de datos
no repudio
Responsabilidad
primitivas criptográficas
Criptografía simétrica
Cifrados de flujo
cifrados en bloque
Bloquear el modo de cifrado
Modos de generación de Keystream
Modos de autenticación de mensajes
Hashes criptográficos
Libro de códigos electrónico
Tarifa de
transacción
Contratos Maleabilidad de
transacciones Grupos de
transacciones Verificación
de transacciones Cadena de bloques
La estructura de un bloque La
estructura de un encabezado de
bloque El bloque de génesis Minería
Tarea de los mineros
Sincronización con la red Prueba
de trabajo El algoritmo de minería
Machine Translated
La tasa debyhash
Google
Sistemas de
minería CPU GPU
FPGA ASIC Pools
de minería La red
de bitcoin
Monederos Tipos
de monedero Monederos
no deterministas
Monederos
deterministas Monederos
deterministas jerárquicos
Monederos cerebrales Monederos de
papel Monederos de hardware
Monederos en línea Monederos móviles
Pagos de Bitcoin Inversión de Bitcoin
y compra y venta de bitcoins Instalación
de Bitcoin Configuración de un nodo
de bitcoin Configuración del código fuente
Configuración de bitcoin.conf Inicio de un nodo en testnet
Inicio de un nodo en regtest Inicio de un nodo en mainnet
en vivo Experimentación con bitcoin-cli Programación
de Bitcoin y la interfaz de línea de comandos
Propuestas de mejora de Bitcoin (BIP)
Resumen
5. Monedas alternativas
Fundamentos teóricos
Alternativas a la Prueba de trabajo
Prueba de almacenamiento
Prueba de participación Prueba
de acuñación Prueba de
depósito Prueba de quema
Prueba de actividad
Rompecabezas no
subcontratables Algoritmos de
ajuste de dificultad y retargeting Pozo de gravedad
Kimoto
Machine Translated by Google
Dark Gravity Wave
DigiShield MIDAS
Limitaciones de
Bitcoin Privacidad y
anonimato Protocolos de
mezcla Protocolos de
mezcla de terceros Anonimato
inherente Protocolos extendidos
sobre bitcoin Monedas de colores
Contraparte Desarrollo de altcoins
Algoritmos de consenso Algoritmos
de hashing Algoritmos de ajuste de
dificultad Tiempo entre bloques
Recompensas de bloque Tasa de
reducción a la mitad de recompensa
Tamaño de bloque y tamaño de la
transacción Tasa de interés Edad de
la moneda Suministro total de
monedas Namecoin Negociar
Namecoins Obtener Namecoins
Generar registros de Namecoin
Litecoin Primecoin Negociar Primecoin
Guía de minería Zcash Negociar Zcash Guía
de minería Generación de direcciones
GPU minería Descargar y compilar
nheqminer Resumen 6. Historial de
contratos inteligentes Definición Contratos
ricardianos Plantillas de contratos inteligentes
Oráculos
Machine Translated by Google
Oráculos
Gas
El mecanismo de consenso
el estado mundial
el estado de la cuenta
Mientras tanto
Balance
Raíz de almacenamiento
código hash
Actas
Nonce
gasPrice
gasLimit
A
Valor
Firma
En eso
Datos
Transacción de creación de contrato
La función iteradora
Operaciones de duplicación
operaciones de cambio
Operaciones de registro
Operaciones del sistema
Contratos precompilados
La función de recuperación de clave pública de curva elíptica
La función hash SHA-256 bits
La función hash RIPEMD-160 bit
La función de identidad
cuentas
tipos de cuentas
Bloquear
Encabezado de bloque
hash padre
Hachís Ommers
Beneficiario
Raíz del estado
Raíz de transacciones
Raíz de recibos
Los troncos florecen
Dificultad
Número
límite de gas
gas usado
marca de tiempo
Datos adicionales
Mixhash
Mientras tanto
El bloque de génesis
Recibos de transacciones
El estado posterior a la transacción
gas usado
conjunto de registros
El filtro de flores
Validación y ejecución de transacciones
El subestado de transacción
conjunto de suicidio
Serie de registro
saldo de reembolso
El mecanismo de validación de bloques
Finalización de bloque
Validación de Ommers
Machine Translated by Google
Validación de transacciones
Solicitud de recompensa
Validación de estado y nonce
Bloquear dificultad
Éter
Gas
Programa de tarifas
Mensajes
Llamadas
Minería
Ethash
minería de CPU
Minería de GPU
evaluación comparativa de la CPU
plataformas mineras
tarjeta madre
disco duro SSD
GPU
Piscinas mineras
Clientes y carteras
Geth
Eth
Pyethapp
Paridad
Clientes ligeros
Instalación
instalación ética
Navegador de niebla
Geth
La consola geth
Financiando la cuenta con bitcoin
Instalación de paridad
Crear cuentas usando la línea de comando de paridad
Comercio e inversión
el papel amarillo
Símbolos útiles
La red Ethereum
red principal
Red de prueba
Redes privadas
Protocolos de apoyo
Susurro
Machine Translated
Swarm by Google
El archivo de génesis
Directorio de datos
Banderas y su significado
Nodos estáticos
Instalación
Herramientas y bibliotecas
Introducción a la solidez
Tipos
Tipos de valor
booleano
enteros
Dirección
Literales enteros
Literales de cadena
Literales hexadecimales
Enumeraciones
Tipos de funciones
Funciones internas
Machine Translated by Google
Funciones externas
Tipos de referencia
Matrices Estructuras
Ubicación de datos
Asignaciones
Variables globales
Estructuras de control
Eventos Herencia
Bibliotecas
Funciones Diseño
de un archivo de
código fuente de
Solidity Introducción a las solicitudes
POST de Web3 El frontend de HTML y JavaScript
Instalación de web3.js Ejemplo Marcos de
desarrollo Instalación de Truffle Prueba con
truffle Construir Otro ejemplo Proyecto
de ejemplo : Prueba de idea Libros
mayores distribuidos autorizados Resumen
9. Proyectos de Hyperledger Fabric
Sawtooth lake Iroha Blockchain
explorer Fabric chaintool Fabric SDK
Py Corda Hyperledger como protocolo
Arquitectura de referencia Requisitos
Enfoque modular Privacidad y
confidencialidad Identidad Auditabilidad
Machine Translated by Google
interoperabilidad
Portabilidad
Tela
Tela de hiperlibro
Arquitectura de tela
Servicios de membresía
servicios de cadena de bloques
administrador de consenso
Libro mayor distribuido
Protocolo punto a punto
Almacenamiento de libros mayores
Eventos
API y CLI
Componentes de la tela
Pares o nodos
Aplicaciones en blockchain
Implementación de código de cadena
modelo de aplicación
Lago de dientes de sierra
Poeta
Familias de transacciones
Consenso en diente de sierra
Entorno de desarrollo
Corda
Arquitectura
Objetos de estado
Actas
Consenso
Flujos
Componentes
Nodos
servicio de permisos
Servicio de mapas de red
Servicio de notario
Servicio de Oracle
Transacciones Bóvedas
CorDapp Entorno de
desarrollo Resumen 10.
Blockchains alternativos
cadenas de bloques
Machine Translated by Google
Kadena
Ripple
Transacciones
Relacionadas con
pagos Relacionadas
Protocol (TMSP)
Plataformas
Instalación de
BlockApps
Capa de red
Capa de gestión
Capa de aplicación
Experimento de cadena de bloques IoT
Configuración del primer nodo
Votación
Identificación ciudadana (tarjetas de identificación)
Misceláneos Salud
Finanzas Seguros
Liquidación posterior
al comercio
Prevención de delitos
Inauguración
Fuerte interés de investigación
Estandarización
Mejoras
Esfuerzos de interoperabilidad
Cadena de bloques como servicio
Otros desafíos
Lado oscuro
Investigación de cadena de bloques
Contratos inteligentes
Problemas de centralización
Qtum
Bitcoin-NG
Solidus
Halcón
pregonero
SETLCoin
TEEChan
Halcón
bletchley
Casper
Metrópoli
Herramientas varias
Extensión Solidity para Microsoft Visual Studio
metamáscara
estratis
Embarcar
TORDILLO
puerto de
meteoritos
INFURA
Convergencia con otras industrias
Futuro
Resumen
Machine Translated by Google
Dominar la cadena de bloques
Machine Translated by Google
Dominar la cadena de bloques
Reservados todos los derechos. Ninguna parte de este libro puede reproducirse, almacenarse en un
sistema de recuperación o transmitirse de ninguna forma ni por ningún medio sin el permiso previo por escrito del
editor, excepto en el caso de citas breves incrustadas en artículos críticos o reseñas.
Se ha hecho todo lo posible en la preparación de este libro para garantizar la exactitud de la información presentada.
Sin embargo, la información contenida en este libro se vende sin garantía, ya sea expresa o implícita. Ni el autor, ni
Packt Publishing, ni sus comerciantes y distribuidores serán responsables de los daños causados o presuntamente
causados directa o indirectamente por este libro.
Packt Publishing se ha esforzado por proporcionar información de marcas registradas sobre todas las empresas
y productos mencionados en este libro mediante el uso apropiado de capitales. Sin embargo, Packt Publishing no
puede garantizar la exactitud de esta información.
Lugar de librea
Calle librea 35
Birmingham
ISBN 978-1-78712-544-5
www.packtpub.com
Machine Translated by Google
Créditos
Autor Editor de copia
Desarrollo de contenido
Gráficos
Sumeet Sawant
tania dutta
amrita noronha
Me gustaría agradecer al talentoso equipo de Packt, que incluye a Ajith Menon, Nilesh Sawakhande,
Sumeet Sawant y Tushar Gupta, quienes brindaron orientación rápida y comentarios muy valiosos a
lo largo de este proyecto. También estoy muy agradecido con el revisor, Daniel Kraft, quien brindó
comentarios constructivos y muy útiles que ayudaron enormemente a mejorar el material de este libro.
Agradezco a mi esposa e hijos por aguantar mis sesiones de escritura de toda la noche y los fines de seman
Finalmente, me gustaría agradecer a mis padres, cuyas bendiciones sobre mí han hecho que todo sea
posible para mí.
Machine Translated by Google
Acerca del revisor
Daniel Kraft estudió matemáticas y física y tiene un doctorado en matemáticas aplicadas de la
Universidad de Graz en Austria. Ha estado involucrado en el desarrollo de criptomonedas desde
2013, ha sido el desarrollador principal y científico jefe de Namecoin y Huntercoin desde 2014, y ha
publicado dos artículos de investigación sobre criptomonedas en revistas revisadas por pares.
Trabaja como ingeniero de software y es cofundador de Crypto Realities Ltd, una empresa emergente
que trabaja en la construcción de mundos de juegos multijugador descentralizados con tecnología blo
Machine Translated by Google
www.PacktPub.com
Para archivos de soporte y descargas relacionadas con su libro, visite www.PacktPub.com.
¿Sabía que Packt ofrece versiones de libros electrónicos de cada libro publicado, con archivos PDF y ePub
disponibles? Puede actualizar a la versión de libro electrónico en www.PacktPub.com y como cliente de un
libro impreso, tiene derecho a un descuento en la copia del libro electrónico. Póngase en contacto con
nosotros en [email protected] para obtener más detalles.
En www.PacktPub.com, también puede leer una colección de artículos técnicos gratuitos, suscribirse a una
variedad de boletines gratuitos y recibir descuentos y ofertas exclusivos en libros y libros electrónicos de Packt.
https://www.packtpub.com/mapt
Obtenga las habilidades de software más demandadas con Mapt. Mapt le brinda acceso completo a todos los
libros y cursos en video de Packt, así como a herramientas líderes en la industria para ayudarlo a planificar su
desarrollo personal y avanzar en su carrera.
Machine Translated by Google
¿Por qué suscribirse?
Se puede buscar en todos los libros publicados por Packt
Copie y pegue, imprima y marque contenido
Bajo demanda y accesible a través de un navegador web
Machine Translated by Google
Comentarios de los clientes
Gracias por comprar este libro de Packt. En Packt, la calidad está en el corazón de nuestro proceso
editorial. Para ayudarnos a mejorar, déjenos una reseña honesta en la página de Amazon de este libro
en http://www.amazon.in/dp/1787125440.
El Capítulo 3, Criptografía y fundamentos técnicos, presenta los fundamentos teóricos de la criptografía, que
es necesaria para comprender completamente la tecnología blockchain. Se incluyen conceptos como criptografía de
clave pública y privada, con ejemplos prácticos. Finalmente, también se incluye una introducción a los mercados
financieros, ya que existen muchos casos de uso interesantes para la tecnología blockchain en el sector financiero.
El Capítulo 4, Bitcoin, cubre Bitcoin, la primera y más grande cadena de bloques. Introduce conceptos técnicos
relacionados con la criptomoneda bitcoin en detalle.
El Capítulo 5, Monedas alternativas, presenta las criptomonedas alternativas que se introdujeron después de la
invención de Bitcoin. También presenta ejemplos de diferentes altcoins, sus propiedades y cómo se han desarrollado
e implementado. El Capítulo 6, Contratos inteligentes, brinda una discusión detallada sobre los contratos inteligentes.
En este capítulo se presentan temas como la historia, la definición de contratos inteligentes, los contratos ricardianos,
los oráculos y los aspectos teóricos de los contratos inteligentes.
El Capítulo 7, Ethereum 101, presenta en detalle el diseño y la arquitectura de la cadena de bloques de Ethereum.
Cubre varios conceptos técnicos relacionados con la cadena de bloques de Ethereum que explica en profundidad
los principios, las características y los componentes subyacentes de esta plataforma.
El Capítulo 9, Hyperledger, presenta una discusión sobre el proyecto Hyperledger de la fundación Linux,
que incluye diferentes proyectos de cadena de bloques presentados por sus miembros.
El Capítulo 10, Cadenas de bloques alternativas, presenta soluciones y plataformas de cadenas de bloques
alternativas. Proporciona detalles técnicos y características de cadenas de bloques alternativas.
El Capítulo 11, Blockchain: fuera de las monedas, proporciona una introducción práctica y detallada a las
aplicaciones de la tecnología blockchain en campos distintos a las criptomonedas, incluido el Internet de las cosas,
el gobierno, los medios y las finanzas.
El Capítulo 12, Escalabilidad y otros desafíos, está dedicado a una discusión de los desafíos que enfrenta
Machine
por Translated
la tecnología by Google y cómo abordarlos.
blockchain
El Capítulo 13, Panorama actual y lo que sigue, tiene como objetivo proporcionar información sobre el panorama
actual, los proyectos y los esfuerzos de investigación relacionados con la tecnología blockchain. Además,
también se han realizado algunas predicciones basadas en el estado actual de la tecnología blockchain.
Machine Translated by Google
Lo que necesitas para este libro.
Todos los ejemplos de este libro se han desarrollado en Ubuntu 16.04.1 LTS (Xenial). Como tal, se recomienda usar
Ubuntu. Sin embargo, se puede usar cualquier sistema operativo apropiado, ya sea Windows o Linux, pero es posible
que sea necesario cambiar los ejemplos, especialmente los relacionados con la instalación, según corresponda.
Se han desarrollado ejemplos relacionados con la criptografía utilizando la herramienta de línea de comandos
OpenSSL 1.0.2g 1 de marzo de 2016.
Los ejemplos de solidez de Ethereum se han desarrollado utilizando Browser Solidity, disponible en línea en
https://ethereum.github.io/browser-solidity/. El lanzamiento de Homestead de Ethereum se usa para desarrollar
ejemplos relacionados con Ethereum. En el momento de escribir este artículo, esta es la última versión disponible y
se puede descargar desde https://www.ethereum.org/.
Se han desarrollado ejemplos relacionados con IoT utilizando un kit Raspberry Pi de Vilros, pero se puede utilizar cualquier
modelo o kit más reciente. Específicamente, se utilizó Raspberry Pi 3 Model BV 1.2 para construir un ejemplo de hardware
de IoT. Se han utilizado Node.js V7.2.1 y npm V3.10.10 para descargar paquetes relacionados y ejecutar el servidor Node.js
para ejemplos de IoT.
Las palabras de código en el texto, los nombres de las tablas de la base de datos, los nombres de las carpetas, los nombres de los archivos, las extensiones
de los archivos, las rutas, las direcciones URL ficticias, la entrada del usuario y los identificadores de Twitter se muestran a continuación:
"Esta línea de código simplemente usa console.log para imprimir la base de monedas llamando al método web3.eth.coinbase ".
z=x-5;
y=z;
}
Cuando deseamos llamar su atención sobre una parte particular de un bloque de código, las líneas o elementos relevantes se muestran en
negrita:
z=x-5;
y=z;
}
Los términos nuevos y las palabras importantes se muestran en negrita. Las palabras que ve en la pantalla, en menús o cuadros de diálogo,
por ejemplo, aparecen en el texto de esta manera: "Al hacer clic en el botón Siguiente, pasa a la pantalla siguiente".
Nota
Consejo
Atención al cliente
Ahora que es el orgulloso propietario de un libro de Packt, tenemos una serie de cosas para ayudarlo
a aprovechar al máximo su compra.
Machine Translated by Google
Descargando el código de ejemplo
Puede descargar los archivos de código de ejemplo para este libro desde su cuenta en http://
www.packtpub.com. Si compró este libro en otro lugar, puede visitar http://www.packtpub.com/
support y regístrese para recibir los archivos directamente por correo electrónico.
1. Inicie sesión o regístrese en nuestro sitio web utilizando su dirección de correo electrónico y contraseña.
2. Pase el puntero del mouse sobre la pestaña SOPORTE en la parte superior.
3. Haga clic en Descargas de códigos y erratas.
4. Introduzca el nombre del libro en el cuadro de búsqueda.
5. Seleccione el libro que está buscando para descargar los archivos de código.
6. Elija del menú desplegable donde compró este libro.
7. Haga clic en Descargar código.
Una vez descargado el archivo, asegúrese de descomprimir o extraer la carpeta con la última versión de:
Aunque hemos tomado todas las precauciones para garantizar la precisión de nuestro contenido,
los errores ocurren. Si encuentra un error en uno de nuestros libros, tal vez un error en el texto o en
el código, le agradeceríamos que nos lo informara. Al hacerlo, puede salvar a otros lectores de la
frustración y ayudarnos a mejorar las versiones posteriores de este libro. Si encuentra alguna errata,
infórmela visitando http://www.packtpub.com/submit-errata, seleccionando su libro, haciendo clic
en el enlace Formulario de envío de erratas e ingresando los detalles de su errata. Una vez que se
verifique su errata, se aceptará su envío y la errata se cargará en nuestro sitio web o se agregará a
cualquier lista de errata existente en la sección Errata de ese título.
Póngase en contacto con nosotros en [email protected] con un enlace al material sospechoso de piratería.
Agradecemos su ayuda para proteger a nuestros autores y nuestra capacidad para brindarle contenido valioso.
Machine Translated by Google
Preguntas
Si tiene algún problema con algún aspecto de este libro, puede comunicarse con nosotros en
[email protected] y haremos todo lo posible para solucionar el problema.
Machine Translated by Google
Capítulo 1. Cadena de bloques 101
Es muy probable que cualquiera que lea este libro ya haya oído hablar de blockchain y tenga una idea básica de su enorme potencial.
Con la invención de bitcoin en 2008, el mundo conoció un nuevo concepto que ahora probablemente revolucionará a toda la sociedad.
Es algo que ha prometido impactar en todas las industrias, incluidas, entre otras, las finanzas, el gobierno y los medios. Algunos lo
describen como una revolución, mientras que otra escuela de pensamiento dice que va a ser una evolución y pasarán muchos años
antes de que los beneficios prácticos de blockchain se hagan realidad. Esto es correcto hasta cierto punto, pero en mi opinión, la
revolución ya comenzó; muchas grandes organizaciones de todo el mundo ya están escribiendo pruebas de concepto utilizando la
tecnología blockchain, ya que ahora se ha reconocido plenamente su potencial disruptivo. Sin embargo, algunas organizaciones aún se
encuentran en la etapa preliminar de exploración, pero se espera que progresen más rápidamente a medida que la tecnología se vuelve
más madura. Es una tecnología que también tiene un impacto en las tecnologías actuales y posee la capacidad de cambiarlas en un nivel
fundamental.
De acuerdo con el gráfico del ciclo de exageración tecnológica de Gartner que se muestra a continuación, la tecnología
blockchain se encuentra actualmente en la cima de las expectativas infladas (a partir de julio de 2016) y se espera que esté lista
para la adopción generalizada en 5 a 10 años:
Se prevén varios beneficios de esta tecnología, como la confianza descentralizada, el ahorro de costos, la transparencia
y la eficiencia. Sin embargo, también existen varios desafíos que son un área de investigación activa, como la
escalabilidad y la privacidad. El Capítulo 12, Escalabilidad y otros desafíos , está dedicado a una discusión sobre las
limitaciones y desafíos de la tecnología blockchain.
Este capítulo es una introducción a la tecnología blockchain, sus fundamentos técnicos, la teoría detrás de ella y varias
tecnologías que se han combinado para construir lo que hoy se conoce como blockchain.
En 2008, se escribió un documento innovador Bitcoin: un sistema de efectivo electrónico de igual a igual sobre el tema del
efectivo electrónico de igual a igual bajo el seudónimo de Satoshi Nakamoto e introdujo el término cadena de bloques. Este
término a lo largo de los años ahora se ha convertido en la palabra blockchain.
En este capítulo, primero se describen los fundamentos teóricos de los sistemas distribuidos, luego los
precursores de bitcoin (con los que se introdujo la tecnología blockchain) como e-cash y hashcash, y finalmente
se introduce la tecnología blockchain. Esta es una forma lógica de entender la tecnología blockchain porque las
raíces de blockchain están en los sistemas distribuidos.
Machine Translated by Google
Sistemas distribuidos
Comprender los sistemas distribuidos es esencial para comprender la cadena de bloques porque,
básicamente, la cadena de bloques en su núcleo es un sistema distribuido. Más precisamente, es un sistema dist
Los sistemas distribuidos son un paradigma informático en el que dos o más nodos trabajan entre sí de manera
coordinada para lograr un resultado común y se modelan de tal manera que los usuarios finales lo ven como
una única plataforma lógica.
Un nodo se puede definir como un jugador individual en un sistema distribuido. Todos los nodos son
capaces de enviar y recibir mensajes entre sí. Los nodos pueden ser honestos, defectuosos o maliciosos y
tener su propia memoria y procesador. Un nodo que puede exhibir un comportamiento arbitrario también se
conoce como nodo bizantino. Este comportamiento arbitrario puede ser intencionalmente malicioso, lo que es
perjudicial para el funcionamiento de la red. En general, cualquier comportamiento inesperado de un nodo en
la red se puede categorizar como bizantino. Este término engloba arbitrariamente cualquier comportamiento
inesperado o malicioso:
Diseño de un sistema distribuido; N4 es un nodo bizantino, L2 está roto o es un enlace de red lento
El principal desafío en el diseño de sistemas distribuidos es la coordinación entre los nodos y la tolerancia a falla
Incluso si algunos de los nodos fallan o los enlaces de la red se rompen, el sistema distribuido debe
tolerar esto y debe continuar funcionando sin problemas para lograr el resultado deseado. Esta ha sido un
área de investigación activa durante muchos años y se han propuesto varios algoritmos y mecanismos para
superar estos problemas.
Los sistemas distribuidos son tan difíciles de diseñar que se ha demostrado un teorema conocido como el
teorema CAP y establece que un sistema distribuido no puede tener todas las propiedades deseadas
simultáneamente. En la siguiente sección, se proporcionará una introducción básica al teorema CAP.
Machine Translated by Google
teorema de la PAC
Esto también se conoce como el teorema de Brewer, presentado originalmente por Eric Brewer como una conjetura
en 1998; en 2002 fue demostrado como un teorema por Seth Gilbert y Nancy Lynch.
El teorema establece que cualquier sistema distribuido no puede tener tolerancia de consistencia, disponibilidad y
partición simultáneamente:
La coherencia es una propiedad que garantiza que todos los nodos de un sistema distribuido tengan una única
copia de datos más reciente.
Disponibilidad significa que el sistema está activo, accesible para su uso y acepta solicitudes entrantes y responde
con datos sin fallas cuando sea necesario.
La tolerancia a la partición garantiza que si un grupo de nodos falla, el sistema distribuido seguirá funcionando
correctamente.
Se ha demostrado que un sistema distribuido no puede tener todas las tres propiedades mencionadas al mismo tiempo.
Esto es extraño porque de alguna manera blockchain logra lograr todas estas propiedades, ¿o realmente lo hace? Esto se
explicará más adelante en el capítulo donde se analiza el teorema CAP en el contexto de blockchain.
Para lograr la tolerancia a fallas, se utiliza la replicación. Este es un método común y ampliamente utilizado para lograr la
tolerancia a fallas. La consistencia se logra utilizando algoritmos de consenso para garantizar que todos los nodos
tengan la misma copia de datos. Esto también se denomina replicación de máquinas de estado. Blockchain es básicamente
un método para lograr la replicación de máquinas de estado.
En general, hay dos tipos de fallas que puede experimentar un nodo: cuando un nodo defectuoso simplemente se
bloqueó y donde el nodo defectuoso puede exhibir un comportamiento malicioso o inconsistente de manera arbitraria.
Este es el tipo que es difícil de tratar ya que puede causar confusión debido a información engañosa.
Machine Translated by Google
Problema de los generales bizantinos
Antes de discutir el consenso en los sistemas distribuidos, se presentan eventos en la historia que
son precursores del desarrollo de mecanismos de consenso prácticos y exitosos.
En septiembre de 1962, Paul Baran introdujo la idea de las firmas criptográficas con su artículo
Sobre redes de comunicaciones distribuidas. Este es el documento donde también se introdujo por
primera vez el concepto de redes descentralizadas. Luego, en 1982, Lamport et al. propusieron un
experimento mental . por el cual un grupo de generales del ejército que lideran diferentes partes del
ejército bizantino planean atacar o retirarse de una ciudad. La única forma de comunicación entre
ellos es un mensajero y deben ponerse de acuerdo para atacar al mismo tiempo para poder ganar. El
tema es que uno o más generales pueden ser traidores y pueden comunicar un mensaje engañoso.
Por lo tanto, existe la necesidad de encontrar un mecanismo viable que permita el acuerdo entre los
generales incluso en presencia de generales traicioneros para que el ataque pueda tener lugar al
mismo tiempo. Como analogía con los sistemas distribuidos, los generales pueden considerarse
nodos, los traidores pueden considerarse nodos bizantinos (maliciosos) y el mensajero puede
considerarse un canal de comunicación entre los generales.
Este problema fue resuelto en 1999 por Castro y Liskov , quienes presentaron el algoritmo de
tolerancia práctica a fallas bizantinas (PBFT). Posteriormente en el 2009 se realizó la primera
implementación práctica con la invención de bitcoin donde se desarrolló el algoritmo de Prueba
de Trabajo (PoW) como mecanismo para lograr consenso.
Machine Translated by Google
Consenso
El consenso es un proceso de acuerdo entre nodos desconfiados sobre un estado final de los datos. Para
lograr el consenso se pueden utilizar diferentes algoritmos. Es fácil llegar a un acuerdo entre dos nodos
(por ejemplo, en sistemas cliente-servidor), pero cuando varios nodos participan en un sistema distribuido
y necesitan ponerse de acuerdo sobre un valor único, se vuelve muy difícil lograr un consenso. Este
concepto de lograr el consenso entre múltiples nodos se conoce como distribución.
consenso.
Mecanismos de consenso
Un mecanismo de consenso es un conjunto de pasos que toman todos o la mayoría de los nodos para
acordar un estado o valor propuesto. Durante más de tres décadas este concepto ha sido investigado por
informáticos de la industria y la academia. Los mecanismos de consenso se han convertido recientemente en
el centro de atención y han ganado mucha popularidad con la llegada de bitcoin y blockchain.
Hay varios requisitos que deben cumplirse para proporcionar los resultados deseados en un
mecanismo de consenso. Los siguientes son sus requisitos con breves descripciones:
Basado en la tolerancia a fallas bizantinas: sin operaciones intensivas de cómputo, como la inversión
parcial de hash, este método se basa en un esquema simple de nodos que publican mensajes firmados.
Eventualmente, cuando se recibe una cierta cantidad de mensajes, se llega a un acuerdo.
Mecanismos de consenso basados en líderes: este tipo de mecanismo requiere que los nodos compitan
por la lotería de elección de líderes y el nodo que gana propone un valor final.
Se han propuesto muchas implementaciones prácticas, como Paxos, el protocolo más famoso
presentado por Leslie Lamport en 1989. En Paxos, a los nodos se les asignan varios roles, como Proponente,
Aceptador y Aprendiz. Los nodos o procesos se denominan réplicas y el consenso se logra en presencia de
nodos defectuosos por acuerdo entre la mayoría de los nodos.
Otra alternativa a Paxos es RAFT, que funciona asignando cualquiera de los tres estados, es decir,
Machine Translated
Seguidor, Candidato byoGoogle
Líder, a los nodos. Se elige un líder después de que un nodo candidato recibe
suficientes votos y todos los cambios ahora deben pasar por el líder, quien confirma los cambios propuestos
una vez que se completa la replicación en la mayoría de los nodos seguidores.
Más detalles sobre la teoría de los mecanismos de consenso desde el punto de vista de un sistema
distribuido están más allá del alcance de este capítulo. Más adelante en este capítulo, se dedica una sección
completa a la introducción de protocolos de consenso. Los algoritmos específicos se discutirán en los capítulos
dedicados a bitcoin y otras cadenas de bloques más adelante en este libro.
Machine Translated by Google
La historia de la cadena de bloques
Blockchain se introdujo con la invención de bitcoin en 2008 y luego con su implementación práctica
en 2009. Para este capítulo, es suficiente presentar bitcoin muy brevemente, ya que más adelante hay un
capítulo completo sobre bitcoin, pero también es esencial referirse a bitcoin. porque sin ella, la historia de
blockchain no está completa.
El concepto de dinero electrónico o moneda digital no es nuevo. Desde la década de 1980, existen protocolos
de efectivo electrónico que se basan en un modelo propuesto por David Chaum.
Machine Translated by Google
Dinero electrónico
Así como es necesario comprender los conceptos de los sistemas distribuidos para comprender la tecnología de
la cadena de bloques, la idea del dinero electrónico también es esencial para apreciar la primera y asombrosamente
exitosa aplicación de la cadena de bloques: el bitcoin, o en términos generales, las criptomonedas.
Los conceptos teóricos en sistemas distribuidos, como los algoritmos de consenso, proporcionaron la base de la
implementación práctica de los algoritmos de prueba de trabajo en bitcoin; además, las ideas de diferentes esquemas de
efectivo electrónico también allanaron el camino para la invención de las criptomonedas, específicamente bitcoin.
En esta sección, se presentará al lector la idea del dinero electrónico y luego se presentarán varios otros conceptos que
existían antes de las criptomonedas que llevaron al desarrollo de bitcoin.
Después de esto, surgieron otros protocolos como Chaum, Fiat y Naor (CFN), esquemas de efectivo electrónico que
introdujeron el anonimato y la detección de doble gasto. El efectivo electrónico de Brand es otro sistema que mejoró el CFN,
lo hizo más eficiente e introdujo el concepto de reducción de seguridad para probar declaraciones sobre el esquema de
efectivo electrónico. La reducción de seguridad es una técnica utilizada en criptografía para demostrar que un determinado
algoritmo es seguro mediante el uso de otro problema como comparación. Dicho de otra manera, un algoritmo de seguridad
criptográfica es tan difícil de romper como cualquier otro problema difícil; por lo tanto, en comparación, se puede deducir que
el algoritmo de seguridad criptográfica también es seguro.
Adam Back introdujo un concepto diferente pero relevante llamado hashcash en 1997 como un sistema PoW para controlar
el spam de correo electrónico. La idea es bastante simple: si los usuarios legítimos desean enviar correos electrónicos,
deben calcular un hash como prueba de que han gastado una cantidad razonable de recursos informáticos antes de enviar el
correo electrónico. La generación de hashcash es un proceso intensivo de cómputo, pero no impide que un usuario legítimo
envíe el correo electrónico porque la cantidad habitual de correos electrónicos que un usuario legítimo debe enviar es
presumiblemente bastante baja. Por otro lado, si un spammer quiere enviar correos electrónicos, generalmente miles,
entonces se vuelve inviable calcular hashcash para todos los correos electrónicos, lo que hace que el esfuerzo de envío de
spam sea costoso; como resultado, este mecanismo se puede utilizar para frustrar el spam de correo electrónico. Hashcash
requiere una cantidad considerable de recursos informáticos para calcular, pero es fácil y rápido de verificar. La verificación
la realiza el usuario que recibe el correo electrónico. Hashcash se popularizó por su uso en el proceso de minería de bitcoin.
Esta idea de usar acertijos computacionales o funciones de fijación de precios para evitar el spam en el correo electrónico fue
presentada originalmente en 1992 por Cynthia Dwork y
Machine
Moni Translated
Naor. by Google
La función de fijación de precios era el nombre dado a las funciones duras que deben
calcularse antes de que se pueda otorgar acceso a un recurso. Más tarde, Adam Back inventó el
hashcash de forma independiente en 1997, lo que introdujo el uso de funciones hash informáticas como PoW.
En 1998, Wei Dai introdujo b-money y propuso la idea de crear dinero resolviendo acertijos computacionales
como el hashcash. Se basa en una red peer-to-peer donde cada nodo mantiene su propia lista de
transacciones.
Otra idea similar de Nick Szabo llamada BitGold se presentó en 2005 y también proponía resolver
acertijos computacionales para acuñar moneda digital. En 2005, Hal Finney introdujo el concepto de moneda
criptográfica al combinar ideas de b-money y rompecabezas de hashcash, pero aún dependía de una
autoridad centralizada de confianza.
Hubo múltiples problemas con los esquemas descritos en los párrafos anteriores inviables. Estos
problemas van desde la falta de una solución clara de los desacuerdos entre los nodos hasta la
dependencia de un tercero central de confianza y el sellado de tiempo confiable.
En 2009 se introdujo la primera implementación práctica de una criptomoneda denominada bitcoin; por
primera vez resolvió el problema del consenso distribuido en una red sin confianza. Utiliza criptografía de
clave pública con hashcash como PoW para proporcionar un método seguro, controlado y descentralizado
para acuñar moneda digital. La innovación clave es la idea de una lista ordenada de bloques compuesta por
transacciones y protegida criptográficamente por el mecanismo PoW. Esto se explicará con más detalle en el
Capítulo 4, Bitcoin.
Al observar todas las tecnologías antes mencionadas y su historia, es fácil ver cómo las ideas y los
conceptos de los esquemas de efectivo electrónico y los sistemas distribuidos se combinaron para
inventar bitcoin y lo que ahora se conoce como blockchain.
Blockchain, en su esencia, es un libro mayor distribuido de igual a igual que es criptográficamente seguro, solo
se agrega, es inmutable (extremadamente difícil de cambiar) y solo se puede actualizar mediante consenso o
acuerdo entre pares.
Blockchain se puede considerar como una capa de una red distribuida de igual a igual que se ejecuta sobre
Internet, como se puede ver a continuación en el diagrama. Es similar a SMTP, HTTP o FTP que se ejecutan sobre
TCP/IP. Esto se muestra en el siguiente diagrama:
Desde un punto de vista comercial, una cadena de bloques se puede definir como una plataforma en la que los
pares pueden intercambiar valores mediante transacciones sin la necesidad de un árbitro central de confianza.
Este es un concepto poderoso y una vez que los lectores lo entiendan, se darán cuenta del potencial tsunamic de
la tecnología blockchain. Esto permite que blockchain sea un mecanismo de consenso descentralizado donde
ninguna autoridad única está a cargo de la base de datos.
UnMachine
bloqueTranslated by Google
es simplemente una selección de transacciones agrupadas para organizarlas de forma lógica. Está
compuesto por transacciones y su tamaño es variable según el tipo y diseño de la cadena de bloques en uso. Una
referencia a un bloque anterior también se incluye en el bloque a menos que sea un bloque de génesis. Un bloque de
génesis es el primer bloque en la cadena de bloques que fue codificado en el momento en que se inició la cadena de
bloques. La estructura de un bloque también depende del tipo y diseño de una cadena de bloques, pero generalmente
hay algunos atributos que son esenciales para la funcionalidad de un bloque, como el encabezado del bloque, los
punteros a bloques anteriores, la marca de tiempo, nonce , contador de transacciones, transacciones y otros atributos.
Esto se muestra en un diagrama de bloques simple como sigue. Esta es una representación general de un bloque;
Las estructuras de bloques específicas en relación con sus tecnologías de cadena de bloques se discutirán más
adelante en el libro con detalles técnicos más detallados:
La estructura de un bloque.
Machine Translated by Google
Varias definiciones técnicas de blockchains
Blockchain es un mecanismo de consenso descentralizado. En una cadena de bloques, todos los pares finalmente llegan a
un acuerdo sobre el estado de una transacción.
Blockchain es un libro mayor compartido distribuido. Blockchain puede considerarse un libro mayor compartido de
transacciones. Las transacciones se ordenan y agrupan en bloques. Actualmente, el modelo del mundo real se basa en
bases de datos privadas que mantiene cada organización, mientras que el libro mayor distribuido puede servir como una
única fuente de información para todas las organizaciones miembros que utilizan la cadena de bloques.
Blockchain es una estructura de datos; es básicamente una lista enlazada que usa punteros hash en lugar de punteros
normales. Los punteros hash se utilizan para apuntar al bloque anterior.
La estructura de una cadena de bloques genérica se puede visualizar con la ayuda del siguiente diagrama:
En esta sección, se presentan los elementos genéricos de blockchain. Se discutirán elementos más precisos en el
contexto de sus respectivas cadenas de bloques en capítulos posteriores, por ejemplo, la cadena de bloques Ethereum.
direcciones
Las direcciones son identificadores únicos que se utilizan en una transacción en la cadena de bloques para indicar remitentes
y destinatarios. Una dirección suele ser una clave pública o derivada de una clave pública. Si bien el mismo usuario puede
reutilizar las direcciones, las direcciones en sí mismas son únicas. En la práctica, sin embargo, un solo usuario no puede
volver a utilizar la misma dirección y generar una nueva para cada transacción. Esta dirección recién generada será única.
Bitcoin es, de hecho, un sistema seudónimo. Por lo general, los usuarios finales no son directamente identificables, pero
algunas investigaciones sobre la eliminación del anonimato de los usuarios de bitcoin han demostrado que los usuarios
pueden identificarse con éxito. Como buena práctica se sugiere que los usuarios generen una nueva dirección para cada
transacción con el fin de evitar vincular transacciones al titular común, evitando así la identificación.
Transacción
Una transacción es la unidad fundamental de una cadena de bloques. Una transacción representa una transferencia de valor
de una dirección a otra.
Bloquear
Un bloque se compone de múltiples transacciones y algunos otros elementos, como el hash del bloque anterior (puntero
hash), la marca de tiempo y el nonce.
Como su nombre lo indica, esta es una topología de red en la que todos los pares pueden comunicarse entre sí y enviar y
recibir mensajes.
Este elemento realiza varias operaciones en una transacción. Los scripts de transacciones son conjuntos predefinidos de
comandos para que los nodos transfieran tokens de una dirección a otra y realicen otras funciones. Turear un lenguaje de
programación completo es una característica deseable de las cadenas de bloques; sin embargo, la seguridad de dichos
lenguajes es una pregunta clave y un área de investigación importante y en curso.
Máquina virtual
Esta es una extensión de un script de transacción. Una máquina virtual permite que el código completo de Turing se ejecute
en una cadena de bloques (como contratos inteligentes), mientras que un script de transacción puede tener un funcionamiento
Las máquinas virtuales no están disponibles en todas las cadenas de bloques; sin embargo, varias cadenas de
bloques usan máquinas virtuales para ejecutar programas, por ejemplo, Ethereum Virtual Machine (EVM) y Chain Virtual
Machine(CVM).
Máquina Translated by Google
Máquina estatal
Una cadena de bloques se puede ver como un mecanismo de transición de estado mediante el cual un estado se
modifica de su forma inicial a la siguiente y, finalmente, a una forma final como resultado de un proceso de ejecución
y validación de transacciones por parte de los nodos.
Nodos
Un nodo en una red blockchain realiza varias funciones según el rol que asuma. Un nodo puede proponer y validar
transacciones y realizar minería para facilitar el consenso y asegurar la cadena de bloques. Esto se hace siguiendo un
protocolo de consenso. (Más comúnmente, esto es PoW). Los nodos también pueden realizar otras funciones, como la
verificación de pago simple (nodos livianos), validadores y muchas otras funciones según el tipo de cadena de bloques
utilizada y el rol asignado al nodo.
Contratos inteligentes
Estos programas se ejecutan sobre la cadena de bloques y encapsulan la lógica comercial que se ejecutará cuando se
cumplan ciertas condiciones. La función de contrato inteligente no está disponible en todas las cadenas de bloques, pero ah
convirtiéndose en una característica muy deseable debido a la flexibilidad y potencia que proporciona a las
aplicaciones de blockchain.
Machine Translated by Google
Características de una cadena de bloques
Una cadena de bloques realiza varias funciones. Estos se describen a continuación en detalle.
Consenso distribuido
El consenso distribuido es la base principal de una cadena de bloques. Esto permite que una cadena de bloques presente una
versión única de la verdad acordada por todas las partes sin el requisito de una autoridad central.
Verificación de transacciones
Todas las transacciones publicadas desde los nodos en la cadena de bloques se verifican en función de un conjunto
predeterminado de reglas y solo se seleccionan las transacciones válidas para incluirlas en un bloque.
Una cadena de bloques es una plataforma donde se pueden ejecutar programas que ejecutan la lógica comercial en nombre de los usu
Como se explicó anteriormente, no todas las cadenas de bloques tienen un mecanismo para ejecutar contratos inteligentes; sin
embargo, esta es ahora una característica muy deseable.
Blockchain permite la transferencia de valor entre sus usuarios a través de tokens. Los tokens se pueden considerar como
portadores de valor.
Generando criptomoneda
Esta es una función opcional según el tipo de cadena de bloques utilizada. Una cadena de bloques puede generar
criptomonedas como incentivo para sus mineros que validan las transacciones y gastan recursos para asegurar la cadena de
bloques.
propiedad inteligente
Por primera vez es posible vincular un activo digital o físico a la cadena de bloques de manera irrevocable, de modo que nadie
más pueda reclamarlo; usted tiene el control total de su activo y no se puede gastar dos veces ni poseer dos veces. Compárelo
con un archivo de música digital, por ejemplo, que se puede copiar muchas veces sin ningún control; en una cadena de bloques,
sin embargo, si usted es el propietario, nadie más puede reclamarlo a menos que decida transferirlo a alguien. Esta característica
tiene implicaciones de gran alcance, especialmente en la gestión de derechos digitales (DRM) y los sistemas de efectivo electrónico,
donde la detección de doble gasto es un requisito clave. El problema del doble gasto se resolvió por primera vez en bitcoin.
proveedor de seguridad
Inmutabilidad
Esta es otra característica clave de la cadena de bloques: los registros, una vez agregados a la cadena de bloques, son inmutables
Existe la posibilidad de revertir los cambios, pero esto se considera casi imposible de hacer, ya que requerirá una cantidad
inasequible de recursos informáticos. Por ejemplo, en el caso más deseable de bitcoin, si un usuario malicioso desea alterar los
bloques anteriores, entonces sería necesario calcular nuevamente el PoW para todos los bloques que ya se agregaron a la
cadena de bloques. Esta dificultad hace que los registros en una cadena de bloques sean prácticamente inmutables.
Unicidad
Esta característica de blockchain garantiza que cada transacción sea única y que no se haya gastado aún.
Esto es especialmente relevante en las criptomonedas, donde la detección y la evitación del doble gasto son un requisito
clave.
Contratos inteligentes
Blockchain proporciona una plataforma para ejecutar contratos inteligentes. Estos son programas autónomos automatizados
que residen en la cadena de bloques y encapsulan la lógica y el código comercial para ejecutar una función requerida cuando
se cumplen ciertas condiciones. De hecho, esta es una característica revolucionaria de blockchain, ya que permite flexibilidad,
capacidad de programación y un control muy deseable de las acciones que los usuarios de blockchain deben realizar de
acuerdo con sus requisitos comerciales específicos.
Machine Translated by Google
Aplicaciones de la tecnología blockchain
La tecnología Blockchain tiene una multitud de aplicaciones en varios sectores, incluidos, entre otros, las finanzas,
el gobierno, los medios, el derecho y las artes. Se arrojará más luz sobre estos aspectos en el Capítulo 9,
Hyperledger , donde se analizarán en detalle los casos de uso práctico para varias industrias. Es suficiente decir por
ahora que casi todas las industrias ya se han dado cuenta del potencial y la promesa de blockchain y ya se han
embarcado, o pronto se embarcarán, en el viaje para beneficiarse de la tecnología blockchain.
En la siguiente sección, se analiza un esquema general de creación de bloques. Esto se presenta aquí para dar a los
lectores una idea general de cómo se generan los bloques y cuál es la relación entre las transacciones y los bloques.
Los pasos 4 y 5 pueden considerarse no obligatorios ya que la transacción en sí se finaliza en el paso 3; sin
embargo, la confirmación de bloqueo y reconfirmaciones de transacciones adicionales, si es necesario, se llevan a
cabo en los pasos 4 y 5.
Machine Translated by Google
Niveles de tecnología blockchain
En esta sección, se analizan varios niveles de la tecnología blockchain. Se prevé que, debido al rápido
desarrollo y progreso de la tecnología blockchain, muchas aplicaciones evolucionarán con el tiempo. Algunos
ya se han realizado, mientras que otros se pueden visualizar para el futuro en función de la tasa actual de avance
en la tecnología blockchain.
En primer lugar, Melanie Swan describió originalmente los tres niveles que se analizan a continuación en su
libro Blockchain, Blueprint for a New Economy como niveles de blockchain categorizados según las
aplicaciones en cada categoría. Además de esto, el Nivel X o Generación X se analiza más adelante. Esto es lo
que el autor cree que se hará realidad cuando la tecnología blockchain avance lo suficiente.
Esto se introdujo con la invención de bitcoin y se usa básicamente para criptomonedas. Además, dado que
bitcoin fue la primera implementación de criptomonedas, tiene sentido categorizar la Generación 1 de la
tecnología blockchain para incluir solo monedas criptográficas. Todas las monedas alternativas y bitcoin entran
en esta categoría. Esto incluye aplicaciones básicas como pagos y aplicaciones.
Los servicios financieros utilizan blockchains de generación 2.0 y los contratos se introducen en esta
generación. Esto incluye varios activos financieros, por ejemplo, derivados, opciones, swaps y bonos. Las
aplicaciones que van más allá de la moneda, las finanzas y los mercados se incluyen en este nivel.
Las cadenas de bloques de generación 3 se utilizan para implementar aplicaciones más allá de la industria de
servicios financieros y se utilizan en industrias de propósito más general, como el gobierno, la salud, los
medios, las artes y la justicia.
Esta es una visión de la singularidad de la cadena de bloques en la que algún día tendremos disponible un
servicio público de cadena de bloques que cualquiera puede usar como el motor de búsqueda de Google. Brindará
servicios en todos los ámbitos de la sociedad. Se trata de un libro mayor público distribuido abierto con agentes
racionales de propósito general (Machina Economicus) que se ejecutan en blockchain, toman decisiones e
interactúan con otros agentes autónomos inteligentes en nombre de los humanos y están regulados por código
en lugar de leyes o contratos en papel. Esto se elaborará en detalle en el Capítulo 13, Panorama actual y lo que sigu
Machine Translated by Google
Tipos de cadena de bloques
Según la forma en que ha evolucionado la cadena de bloques en los últimos años, se puede dividir
en varios tipos con atributos distintos, pero a veces parcialmente superpuestos.
Machine Translated by Google
Cadenas de bloques públicas
Como sugiere el nombre, estas cadenas de bloques están abiertas al público y cualquiera puede participar como
nodo en el proceso de toma de decisiones. Los usuarios pueden o no ser recompensados por su participación.
Estos libros de contabilidad no son propiedad de nadie y están abiertos públicamente para que cualquiera pueda
participar. Todos los usuarios del libro de contabilidad sin permiso mantienen una copia del libro de contabilidad en
sus nodos locales y utilizan un mecanismo de consenso distribuido para llegar a una decisión sobre el eventual.
estado del libro mayor. Estas cadenas de bloques también se conocen como libros de contabilidad sin permisos.
Machine Translated by Google
Cadenas de bloques privadas
Las cadenas de bloques privadas, como su nombre lo indica, son privadas y están abiertas solo a un
consorcio o grupo de personas u organizaciones que han decidido compartir el libro mayor entre ellos.
Machine Translated by Google
Cadenas de bloques semiprivadas
Aquí parte de la cadena de bloques es privada y parte es pública. La parte privada está controlada
por un grupo de personas, mientras que la parte pública está abierta a la participación de cualquiera.
Machine Translated by Google
Cadenas laterales
Conocido más precisamente como cadenas laterales vinculadas, este es un concepto mediante el cual las monedas se
pueden mover de una cadena de bloques a otra y volver a moverlas. Los usos comunes incluyen la creación de nuevas
altcoins (criptomonedas alternativas) mediante las cuales las monedas se queman como prueba de una participación
adecuada. Hay dos tipos de cadenas laterales. El ejemplo proporcionado anteriormente para quemar monedas es
aplicable a una cadena lateral unidireccional. El segundo tipo se denomina cadena lateral con clavijas bidireccionales,
que permite el movimiento de monedas de la cadena principal a la cadena lateral y de vuelta a la cadena principal cuando
Machine Translated by Google
Libro mayor autorizado
Un libro mayor autorizado es una cadena de bloques en la que los participantes de la red son conocidos y
de confianza. Los libros de contabilidad autorizados no necesitan utilizar un mecanismo de consenso distribuido;
en su lugar, se puede utilizar un protocolo de acuerdo para mantener una versión compartida de la verdad sobre el
estado de los registros en la cadena de bloques. Tampoco existe el requisito de que una cadena de bloques autorizada
sea privada, ya que puede ser una cadena de bloques pública pero con control de acceso regulado.
Machine Translated by Google
Libro mayor distribuido
Como sugiere el nombre, este libro mayor se distribuye entre sus participantes y se distribuye en
múltiples sitios u organizaciones. Este tipo puede ser privado o público. La idea clave es que, a
diferencia de muchas otras cadenas de bloques, los registros se almacenan de forma contigua en lugar de
clasificarse en bloques. Este concepto se usa en Ripple.
Machine Translated by Google
Libro mayor compartido
Este es un término genérico que se utiliza para describir cualquier aplicación o base de datos compartida por
el público o un consorcio.
Machine Translated by Google
Cadenas de bloques totalmente privadas y propietarias
Es posible que estas cadenas de bloques no tengan una aplicación convencional, ya que se desvían de la
idea central de la descentralización en la tecnología de cadenas de bloques. No obstante, en entornos
privados específicos dentro de una organización, puede ser necesario compartir datos y proporcionar cierto
nivel de garantía de la autenticidad de los datos. Estas cadenas de bloques podrían ser útiles en ese
escenario. Por ejemplo, para la colaboración y el intercambio de datos entre varios departamentos gubernamentales
Machine Translated by Google
Cadenas de bloques tokenizadas
Estas cadenas de bloques son cadenas de bloques estándar que generan criptomonedas como resultado de un
proceso de consenso a través de la minería o la distribución inicial.
Machine Translated by Google
Cadenas de bloques sin fichas
Probablemente no sean cadenas de bloques reales porque carecen de la unidad básica de transferencia de
valor, pero siguen siendo valiosas en situaciones en las que no es necesario transferir valor entre nodos y
solo se requiere compartir algunos datos entre varias partes que ya son de confianza.
En la siguiente sección, se discutirá la idea del consenso desde la perspectiva de la cadena de bloques. El
consenso es la columna vertebral de una cadena de bloques y proporciona la descentralización del control
como resultado a través de un proceso opcional conocido como minería. La elección del algoritmo de consenso
también se rige por el tipo de cadena de bloques en uso. No todos los mecanismos de consenso son adecuados
para todos los tipos de cadenas de bloques. Por ejemplo, en cadenas de bloques públicas sin permiso, tendría
sentido usar PoW en lugar de algún mecanismo de acuerdo básico que quizás se base en la prueba de
autoridad. Por lo tanto, es esencial elegir un algoritmo de consenso adecuado para un proyecto de cadena de blo
Machine Translated by Google
Consenso en blockchain
El consenso es básicamente un concepto de computación distribuida que se ha utilizado en la cadena de bloques para
proporcionar un medio para acordar una versión única de la verdad entre todos los pares en la red de la cadena de
bloques. Este concepto se analizó en la sección de sistemas distribuidos anteriormente en este capítulo.
1. Basado en pruebas, basado en líderes o el consenso de Nakamoto mediante el cual se elige un líder
y se propone un valor final
2. Basado en tolerancia a fallas bizantinas, que es un enfoque más tradicional basado en rondas de votos.
Los algoritmos de consenso que están disponibles en la actualidad o que se están investigando en el contexto de la
cadena de bloques se presentan más adelante. Esta no es una lista exhaustiva, pero se ha hecho un intento de presentar
todos los algoritmos importantes.
Prueba de trabajo
Este tipo de mecanismo de consenso se basa en la prueba de que se han gastado suficientes recursos
computacionales antes de proponer un valor para la aceptación por parte de la red. Esto se usa en bitcoin y otras
criptomonedas. Actualmente, este es el único algoritmo que ha demostrado ser sorprendentemente exitoso contra los
ataques de Sybil.
Prueba de participación
Este algoritmo funciona con la idea de que un nodo o usuario tiene suficiente participación en el sistema; por ejemplo,
el usuario ha invertido lo suficiente en el sistema para que cualquier intento malicioso supere los beneficios de realizar
un ataque al sistema. Esta idea fue presentada por primera vez por Peercoin y se utilizará en la cadena de bloques de
Ethereum. Otro concepto importante en la Prueba de participación (PoS) es la antigüedad de la moneda, que se deriva de
la cantidad de tiempo y la cantidad de monedas que no se han gastado. En este modelo, las posibilidades de proponer y
firmar el siguiente bloque aumentan con la edad de la moneda.
La prueba de participación delegada (DPOS) es una innovación sobre el PoS estándar mediante el cual cada nodo que
tiene participación en el sistema puede delegar la validación de una transacción a otros nodos mediante votación. Esto
se usa en la cadena de bloques de bits compartidos.
Presentado por Intel, utiliza un entorno de ejecución de confianza (TEE) para proporcionar aleatoriedad y seguridad
en el proceso de elección del líder a través de un tiempo de espera garantizado. Requiere el procesador Intel SGX
(Software Guard Extensions) para brindar la garantía de seguridad y para que sea seguro. Este concepto se analiza con
más detalle en el Capítulo 9, Hyperledger en el contexto de Intel Sawtooth
Machine
Proyecto Translated
de cadena by Google
de bloques del lago.
Los nodos que deseen participar en la red deben realizar un depósito de seguridad antes de poder
proponer un bloqueo.
Prueba de importancia
Esta idea es importante y diferente de la Prueba de Participación. La prueba de importancia no solo se basa en
la participación que tiene un usuario en el sistema, sino que también supervisa el uso y el movimiento de tokens
por parte del usuario para establecer un nivel de confianza e importancia. Esto se usa en Nemcoin.
Utilizado en el protocolo de consenso estelar, los nodos de este protocolo mantienen un grupo de pares de
confianza pública y propagan solo aquellas transacciones que han sido validadas por la mayoría de los nodos de c
Como sugiere el nombre, un líder es elegido sobre la base de la reputación que ha construido con el tiempo
en la red. Esto puede basarse en la votación de otros miembros.
La tolerancia práctica a fallas bizantinas (PBFT) logra la replicación de la máquina de estado, lo que proporciona
tolerancia contra los nodos bizantinos. Varios otros protocolos, incluidos, entre otros, PBFT, PAXOS, RAFT y
el Acuerdo bizantino federado (FBA), también se utilizan o se han propuesto para su uso en muchas
implementaciones diferentes de sistemas distribuidos y cadenas de bloques.
Machine Translated by Google
Teorema CAP y blockchain
Curiosamente, parece que se viola el teorema CAP en blockchain, y especialmente en la
implementación más exitosa: bitcoin, pero no es así. En las cadenas de bloques, se sacrifica la
consistencia en favor de la disponibilidad y la tolerancia a la partición. En este escenario, la Coherencia
(C) en la cadena de bloques no se logra simultáneamente con la Tolerancia de partición (P) y la
Disponibilidad (A), pero se logra con el tiempo. Esto se denomina consistencia eventual, donde la
consistencia se logra como resultado de la validación de múltiples nodos a lo largo del tiempo. Para
ello se introdujo en bitcoin el concepto de minería; este es un proceso que facilita el logro de consenso
mediante el uso de un algoritmo de consenso llamado PoW. En un nivel superior, la minería se puede
definir como un proceso que se utiliza para agregar más bloques a la cadena de bloques.
Machine Translated by Google
Beneficios y limitaciones de blockchain
Numerosos beneficios de la tecnología blockchain están siendo discutidos en la industria y propuestos
por líderes de opinión de todo el mundo en el espacio blockchain. Los 10 principales beneficios se enumeran
y analizan a continuación.
Machine Translated by Google
Descentralización
Este es un concepto central y un beneficio de blockchain. No es necesario que un tercero o
intermediario de confianza valide las transacciones; en cambio, se utiliza un mecanismo de consenso para
acordar la validez de las transacciones.
Machine Translated by Google
Transparencia y confianza
Como las cadenas de bloques se comparten y todos pueden ver lo que hay en la cadena de bloques, esto
permite que el sistema sea transparente y, como resultado, se establece la confianza. Esto es más relevante
en escenarios como el desembolso de fondos o beneficios donde la discreción personal debe estar restringida.
Machine Translated by Google
Inmutabilidad
Una vez que los datos se han escrito en la cadena de bloques, es extremadamente difícil volver a
cambiarlos. No es realmente inmutable pero, debido al hecho de que cambiar los datos es extremadamente
difícil y casi imposible, esto se ve como un beneficio para mantener un libro de transacciones inmutable.
Machine Translated by Google
Alta disponibilidad
Como el sistema se basa en miles de nodos en una red de igual a igual, y los datos se replican y
actualizan en todos y cada uno de los nodos, el sistema se vuelve altamente disponible. Incluso si
los nodos abandonan la red o se vuelven inaccesibles, la red en su conjunto continúa funcionando,
lo que la hace altamente disponible.
Machine Translated by Google
Altamente seguro
Todas las transacciones en una cadena de bloques están protegidas criptográficamente y brindan integridad.
Machine Translated by Google
Simplificación de los paradigmas actuales
El modelo actual en muchas industrias, como las finanzas o la salud, es bastante desorganizado, en el que
varias entidades mantienen sus propias bases de datos y el intercambio de datos puede volverse muy difícil
debido a la naturaleza dispar de los sistemas. Pero como una cadena de bloques puede servir como un único
libro mayor compartido entre las partes interesadas, esto puede resultar en la simplificación de este modelo al
reducir la complejidad de administrar los sistemas separados mantenidos por cada entidad.
Machine Translated by Google
Tratos más rápidos
En la industria financiera, especialmente en las funciones de liquidación posteriores a la negociación, la cadena de
bloques puede desempeñar un papel vital al permitir la liquidación más rápida de las transacciones, ya que no requiere
un largo proceso de verificación, reconciliación y liquidación porque se requiere una única versión de los datos
acordados. ya disponible en un libro mayor compartido entre organizaciones financieras.
Machine Translated by Google
Ahorro de costos
Como no se requieren terceros ni cámaras de compensación en el modelo de cadena de bloques, esto puede
eliminar enormemente los costos generales en forma de tarifas que se pagan a las cámaras de compensación o terceros d
Machine Translated by Google
Desafíos y limitaciones de la tecnología blockchain
Al igual que con cualquier tecnología, existen desafíos que deben abordarse para hacer que un sistema sea más sólido, útil
y accesible. La tecnología Blockchain no es una excepción; de hecho, se está haciendo un gran esfuerzo en la Academia y
la Industria para superar los desafíos que plantea la tecnología blockchain. A continuación se presenta una selección de
los desafíos más sensibles:
Escalabilidad
Adaptabilidad
Regulación
Tecnología relativamente inmadura
Privacidad
Todo esto y más se discutirá en detalle con posibles soluciones en el Capítulo 13, Panorama actual y lo que sigue.
Este capítulo se ha mantenido genérico y menos técnico a propósito. Una vez que se haya explicado en
detalle la criptografía en el Capítulo 3, Criptografía y fundamentos técnicos, se analizarán las soluciones
específicas de blockchain con la profundidad y los detalles técnicos apropiados.
Machine Translated by Google
Resumen
Este capítulo presentó la tecnología blockchain a un alto nivel para los lectores. Primero se discutieron
algunas ideas básicas sobre los sistemas distribuidos y luego se presentó la historia de blockchain. Se
discutieron conceptos como el dinero electrónico y el hashcash. Además, se presentaron varias
definiciones de blockchain desde diferentes puntos de vista. También se discutieron brevemente algunas
aplicaciones de la tecnología blockchain. A continuación, en el capítulo, se introdujeron diferentes tipos
de blockchain. Finalmente, también se presentaron los beneficios y limitaciones de esta nueva tecnología.
Algunos temas se introdujeron ligeramente a propósito, ya que se analizarán en profundidad en capítulos
posteriores. Por ejemplo, los desafíos y las limitaciones solo se mencionaron en el capítulo, pero no se
proporcionaron detalles, ya que hay un capítulo completo dedicado a esto más adelante en el libro. En el
próximo capítulo, se presentará a los lectores el concepto de descentralización, que es fundamental para
el concepto de cadenas de bloques y su gran cantidad de aplicaciones.
Machine Translated by Google
Capítulo 2. Descentralización
La descentralización no es un concepto nuevo; se ha utilizado en estrategia, gestión y gobierno durante
mucho tiempo. La idea básica de la descentralización es distribuir el control y la autoridad a las periferias
en lugar de que una autoridad central tenga el control total de la organización. Esto se traduce en varios
beneficios para las organizaciones. tales como una mayor eficiencia, una toma de decisiones más rápida,
una mejor motivación y una carga reducida para la alta dirección.
Un siguiente diagrama muestra los diferentes tipos de sistemas que existen actualmente, es decir, central,
distribuido y descentralizado. Este concepto se publicó por primera vez en 1964 en un artículo de Paul
Baran sobre redes de comunicación distribuidas en el contexto de las redes de comunicación.
Los sistemas centralizados son sistemas de TI convencionales (cliente-servidor) en los que existe una sola
autoridad que controla el sistema y está únicamente a cargo de todas las operaciones en el sistema. Todos
los usuarios de un sistema central dependen de una única fuente de servicio. Los proveedores de servicios
en línea, como eBay, Google, Amazon, la App Store de Apple y la mayoría de los demás proveedores,
utilizan este modelo común de prestación de servicios. Por otro lado, en un sistema distribuido, los datos
y el cálculo se distribuyen en varios nodos de la red. A veces, este término se confunde con la computación pa
Si bien hay una superposición en la definición, la principal diferencia entre ambos sistemas es que en un
sistema paralelo, todos los nodos realizan el cálculo simultáneamente para lograr un resultado, mientras
que en un sistema distribuido, el cálculo puede no ocurrir en paralelo y los datos solo se replican en
múltiples nodos que los usuarios ven como un único sistema coherente. Ambos modelos se utilizan con
variaciones para lograr tolerancia a fallas y velocidad. En este modelo, todavía hay una autoridad central
que tiene control sobre todos los nodos y gobierna el procesamiento. Esto significa que el sistema sigue
siendo de naturaleza centralizada.
Machine Translated by Google
Una verdadera innovación en el paradigma descentralizado que ha iniciado esta nueva era de
aplicaciones de descentralización es el consenso descentralizado, que se introdujo con bitcoin. Esto
permite a un usuario acordar algo a través de un algoritmo de consenso sin la necesidad de un
tercero, intermediario o proveedor de servicios central de confianza.
Machine Translated by Google
Métodos de descentralización
Hay dos métodos que se pueden utilizar para lograr la descentralización. Estos métodos se
discuten en detalle en las siguientes secciones.
Machine Translated by Google
desintermediación
Esto se puede explicar con la ayuda de un ejemplo. Imagina que quieres enviar dinero a tu amigo en otro
país. Vas a un banco que transferirá tu dinero al banco en el país de tu elección por una tarifa. En este caso,
el banco mantiene una base de datos central que se actualiza, confirmando que has enviado el dinero. Con
la tecnología blockchain, es posible enviar este dinero directamente a tu amigo sin necesidad de un banco.
Todo lo que necesita es la dirección de su amigo en la cadena de bloques. De esta forma, ya no se requiere
del intermediario y se logra la descentralización por desintermediación.
Sin embargo, es discutible cuán práctica es la descentralización en el sector financiero mediante la
desintermediación debido a los estrictos requisitos regulatorios y de cumplimiento. Sin embargo, este modelo
puede usarse no solo en finanzas sino también en muchas otras industrias diferentes.
Machine Translated by Google
A través de la competencia
En este método, un grupo de proveedores de servicios compiten entre sí para ser seleccionados para la
prestación de servicios por parte del sistema. Este paradigma no logra una descentralización completa, pero
hasta cierto punto asegura que un intermediario o proveedor de servicios no esté monopolizando el servicio.
En el contexto de la tecnología blockchain, se puede imaginar un sistema en el que los contratos inteligentes
puedan elegir un proveedor de datos externo entre una gran cantidad de proveedores en función de su
reputación, puntaje anterior, revisiones y calidad del servicio. Esto no dará como resultado una
descentralización total, pero permite que los contratos inteligentes hagan una elección libre en función de
los criterios mencionados anteriormente. De esta manera, se cultiva un entorno de competencia entre los
proveedores de servicios, en el que compiten entre sí para convertirse en el proveedor de datos de elección.
En el siguiente diagrama, se muestran los distintos niveles de descentralización. En el lado izquierdo, hay
un enfoque convencional donde un sistema central está en control; en el lado derecho se logra una completa
desintermediación; y en el medio, se muestran intermediarios o proveedores de servicios que compiten
entre sí. En el medio, los intermediarios o proveedores de servicios se seleccionan en función de la
reputación o la votación, logrando así una descentralización parcial.
Escala de descentralización
Si bien hay muchos beneficios de la descentralización, que incluyen, entre otros, transparencia,
eficiencia, ahorro de costos, desarrollo de ecosistemas confiables y, en algunos casos, privacidad y
anonimato, algunos desafíos, como requisitos de seguridad, errores de software y errores humanos. también
hay que mirarlo a fondo. Por ejemplo, en un sistema descentralizado como bitcoin o Ethereum, donde la
seguridad suele ser proporcionada por claves privadas, ¿cómo se puede garantizar que una propiedad
inteligente asociada a estas claves privadas no pueda quedar inutilizada si, por un error humano, la propiedad
privada se pierden las claves o si, debido a un error en el código del contrato inteligente, la aplicación
descentralizada es vulnerable al ataque de los adversarios? Antes de embarcarnos en un viaje para descentral
Machine Translated
aplicaciones by Google
descentralizadas, es importante entender que no todo se requiere (o se
puede) descentralizar.
Machine Translated by Google
Rutas hacia la descentralización
Aunque existen sistemas que existían antes de bitcoin o blockchain que pueden clasificarse como
descentralizados hasta cierto punto, como BitTorrent o Gnutella para compartir archivos, con el advenimiento
de la tecnología blockchain se están tomando muchas iniciativas para aprovechar esta nueva tecnología para
la descentralización. . Por lo general, la cadena de bloques de bitcoin es la primera opción para muchos, ya que
ha demostrado ser la cadena de bloques más resistente y segura con una capitalización de mercado de casi 12
mil millones de dólares. Un enfoque alternativo es utilizar otras cadenas de bloques, como Ethereum, que
actualmente es la herramienta elegida por muchos desarrolladores para crear aplicaciones descentralizadas.
Machine Translated by Google
como descentralizar
Arvind Narayanan y otros han propuesto un marco que se puede usar para evaluar los requisitos de descentralización de una
variedad de cosas en el contexto de la tecnología blockchain. El marco propone básicamente cuatro preguntas que, una vez
respondidas, brindan una idea clara de cómo se puede descentralizar un sistema. Estas preguntas se enumeran a continuación:
La primera pregunta simplemente pregunta qué sistema se está descentralizando. Puede ser cualquier sistema, por
ejemplo, un sistema de identidad o comercio. La siguiente pregunta se puede responder especificando el nivel de
descentralización requerido observando la escala de descentralización discutida anteriormente. Puede ser una desintermediación
total o una desintermediación parcial. La tercera pregunta es bastante sencilla, donde los desarrolladores pueden elegir qué
cadena de bloques es adecuada para una aplicación en particular. Puede ser una cadena de bloques de bitcoin, una cadena de
bloques de Ethereum o cualquier otra cadena de bloques que se considere adecuada para una aplicación específica. Finalmente,
se debe responder una pregunta clave sobre el mecanismo de seguridad sobre cómo se puede garantizar la seguridad de un
sistema descentralizado. Puede ser Atomicity, por ejemplo, mediante el cual la transacción se ejecuta en su totalidad o no se
ejecuta en absoluto. En otras palabras, es todo o nada.
Esto asegura la integridad del sistema. Otros mecanismos pueden incluir la reputación, que permite diversos grados de
confianza en un sistema.
Ejemplos
En esta sección, se proporciona un ejemplo de la aplicación del marco mencionado anteriormente.
En el primer ejemplo, se selecciona un sistema de transferencia de dinero, que debe ser descentralizado. En este caso, las cuatro
preguntas mencionadas anteriormente pueden responderse para evaluar los requisitos de descentralización. Las respuestas se
muestran a continuación:
4. Respuesta 4: Atomicidad.
Al responder estas cuatro preguntas, se puede mostrar cómo se puede descentralizar un sistema de pago.
Con base en las respuestas anteriores, se puede afirmar que el sistema de transferencia de dinero se puede descentralizar
eliminando al intermediario y se implementará en la cadena de bloques de Bitcoin con garantía de seguridad proporcionada a
través de Atomicity.
De manera similar, este marco se puede utilizar para cualquier otro sistema que deba evaluarse para la
descentralización. Al responder a estas cuatro preguntas simples, queda bastante claro qué
SeMachine
puede Translated
adoptar unbyenfoque
Google para descentralizar el sistema.
Machine Translated by Google
Blockchain y descentralización completa del ecosiste
Para lograr una descentralización completa, es necesario que el entorno alrededor de la cadena
de bloques también esté descentralizado. Blockchain en sí es un libro mayor distribuido que se
ejecuta sobre los sistemas convencionales. Estos elementos incluyen almacenamiento, comunicación
y computación. Hay otros factores, como la Identidad y la Riqueza, que tradicionalmente se basan en
paradigmas centralizados y también es necesario descentralizar estos aspectos para lograr un ecosistema
Machine Translated by Google
Almacenamiento
Los datos se pueden almacenar directamente en una cadena de bloques y, con esto, logra la descentralización,
pero una gran desventaja de este enfoque es que la cadena de bloques no es adecuada para almacenar grandes
cantidades de datos por diseño. Puede almacenar transacciones simples y algunos datos arbitrarios, pero
ciertamente no es adecuado para almacenar imágenes o grandes cantidades de datos, como es el caso de los
sistemas de bases de datos tradicionales. Una mejor alternativa es utilizar tablas hash distribuidas (DHT). Los DHT se
utilizaron originalmente en software para compartir archivos entre pares, como BitTorrent, Napster, Kazaa y Gnutella.
La investigación de DHT se hizo popular gracias a los proyectos CAN, Chord, Pastry y Tapestry. BitTorrent resulta ser
la red más escalable y rápida, pero el problema es que no hay ningún incentivo para que los usuarios se queden con
los archivos indefinidamente. Los usuarios no suelen guardar archivos de forma permanente, y si los nodos abandonan
la red que tiene datos requeridos por alguien, no hay forma de recuperarlos excepto que los nodos requeridos se
vuelvan a unir a la red para que los archivos vuelvan a estar disponibles. Dos requisitos principales aquí son la alta
disponibilidad y la estabilidad de los enlaces, lo que significa que los datos deberían estar disponibles cuando se
necesiten y los enlaces de red también deberían estar siempre accesibles. Inter Planetary File System (IPFS) de Juan
Benet posee ambas propiedades y la visión es proporcionar una World Wide Web descentralizada reemplazando el
protocolo HTTP. IPFS utiliza Kademlia DHT y merkle DAG (Gráfico acíclico dirigido) para proporcionar la funcionalidad
de almacenamiento y búsqueda, respectivamente.
El mecanismo de incentivos se basa en un protocolo conocido como Filecoin que paga incentivos a los nodos que
almacenan datos mediante el mecanismo BitSwap. El mecanismo BitSwap permite a los nodos mantener un registro
simple de bytes enviados o bytes recibidos bajo una relación de uno a uno. Además, IPFS utiliza un mecanismo de
control de versiones basado en Git para proporcionar estructura y control sobre el control de versiones de los datos.
Hay otras alternativas, como Ethereum swarm, storj y maidsafe. Ethereum tiene su propio ecosistema
descentralizado y distribuido que usa Swarm para el almacenamiento y el protocolo susurro para la comunicación.
Maidsafe tiene como objetivo proporcionar una World Wide Web descentralizada. Todos estos proyectos se discutirán
más adelante en el libro con más detalle.
BigChainDB es otro proyecto de descentralización de la capa de almacenamiento destinado a proporcionar una base
de datos descentralizada escalable, rápida y linealmente escalable en lugar de un sistema de archivos tradicional.
BigChainDB complementa las plataformas de procesamiento descentralizado y los sistemas de archivos como Ethereum
Machine Translated by Google
Comunicación
En general, se considera que Internet (la capa de comunicación en blockchain) está descentralizada.
Esto es cierto hasta cierto punto, ya que la visión original de Internet era desarrollar un sistema
descentralizado. Los servicios como el correo electrónico y el almacenamiento en línea ahora se basan en
un paradigma en el que el proveedor del servicio tiene el control y los usuarios confían en él para que les dé acceso a
Este modelo se basa en la confianza de la autoridad central (el proveedor de servicios) y los usuarios no tienen
el control de sus datos; incluso las contraseñas se almacenan en sistemas de terceros de confianza. Existe la
necesidad de proporcionar control a los usuarios individuales de tal manera que el acceso a sus datos esté
garantizado y no dependa de un solo tercero. El acceso a Internet (la capa de comunicación) se basa en los
proveedores de servicios de Internet (ISP) que actúan como un eje central para los usuarios de Internet. Si el ISP se
cierra por razones políticas o de otro tipo, entonces no es posible la comunicación en este modelo. Una alternativa
es utilizar redes de malla. A pesar de que tienen una funcionalidad limitada en comparación con Internet, aún
brindan una alternativa descentralizada donde los nodos pueden comunicarse directamente entre sí sin un centro
central como un ISP.
Nota
Un ejemplo de Meshnet es Firechat (http://www.opengarden.com/firechat.html), que permite a los usuarios
de iPhone comunicarse entre sí directamente de igual a igual sin Internet.
Ahora imagine una red que permita a los usuarios tener el control de su comunicación; nadie puede cerrarlo por
razones políticas o de censura. Este podría ser el próximo paso hacia la descentralización de las redes de
comunicación en el ecosistema blockchain. Cabe señalar que este modelo solo puede ser requerido en una
jurisdicción donde Internet está censurado y controlado por el gobierno.
Como se mencionó anteriormente, la visión original de Internet era construir una red descentralizada; sin
embargo, a lo largo de los años, con la llegada de proveedores de servicios a gran escala como Google, Amazon
y eBay, el control se está desplazando hacia los grandes actores. Por ejemplo, el correo electrónico es un sistema
descentralizado en su esencia; cualquiera puede ejecutar un servidor de correo electrónico con un mínimo esfuerzo
y puede comenzar a enviar y recibir correos electrónicos, pero existe una mejor alternativa disponible que ya
proporciona un servicio administrado para los usuarios finales, por lo que existe una inclinación natural hacia la
selección de un servicio centralizado como es más conveniente y gratis. Sin embargo, los servicios gratuitos se
ofrecen a costa de datos personales valiosos y muchos usuarios no son conscientes de este hecho. Este es un
ejemplo que muestra cómo Internet se ha movido hacia la centralización. Blockchain una vez más ha dado esta
visión de descentralización al mundo y ahora se están realizando esfuerzos concertados para aprovechar esta tecnol
Machine Translated by Google
Cálculo
La descentralización de la informática o el procesamiento se logra mediante una tecnología de cadena de
bloques como Ethereum, donde los contratos inteligentes con lógica comercial integrada pueden ejecutarse
en la red. Otras tecnologías de cadena de bloques también proporcionan plataformas de capa de procesamiento
similares donde la lógica comercial puede ejecutarse en la red de manera descentralizada.
El siguiente diagrama muestra la descripción general del ecosistema descentralizado donde, en la capa inferior,
Internet o Meshnets proporciona una capa de comunicación descentralizada, luego una capa de almacenamiento
usa tecnologías como IPFS y BigChainDB para permitir la descentralización y, finalmente, ve la cadena de bloques
que sirve como un capa de procesamiento descentralizada. Blockchain también puede, de manera limitada, proporcionar
una capa de almacenamiento, pero eso dificulta seriamente la velocidad y la capacidad del sistema; por lo tanto, otras
soluciones como IPFS y BigChainDB son más adecuadas para almacenar grandes cantidades de datos de forma
descentralizada. En la parte superior, se muestran las capas Identidad y Riqueza. La identidad en Internet es un tema
muy amplio y sistemas como bitAuth y OpenID han brindado servicios de autenticación e identificación con diversos
grados de descentralización y supuestos de seguridad.
Blockchain es capaz de proporcionar soluciones a diversos problemas. Un concepto relevante para la Identidad
conocido como el Triángulo de Zooko requiere que un sistema de nombres en un protocolo de red sea seguro,
descentralizado y significativo para los humanos. Se conjetura que un sistema puede tener solo dos de estas
propiedades simultáneamente, pero con la llegada de blockchain, en forma de Namecoin, este problema se resolvió.
Sin embargo, esto no es una panacea y conlleva sus propios desafíos, como la dependencia de los usuarios para
almacenar y mantener las claves privadas de forma segura. Esto abre otras preguntas generales sobre la idoneidad
de la descentralización. Quizás la descentralización no sea apropiada en todos los escenarios. Los sistemas
centralizados de buena reputación tienden a funcionar mejor en muchos casos.
Hay muchos proyectos en marcha que están desarrollando soluciones para un sistema blockchain distribuido más
amplio.
Machine
Con Translated by Google
el surgimiento del paradigma de la descentralización, están apareciendo diferentes terminologías
y palabras de moda en los medios y en la literatura académica. Con la llegada de la tecnología
blockchain, ahora es posible crear versiones de software de organizaciones físicas tradicionales.
En el contexto de la descentralización, vale la pena discutir los próximos conceptos.
Machine Translated by Google
contrato inteligente
Se puede pensar en un contrato inteligente como un pequeño programa descentralizado. Los contratos
inteligentes no necesariamente necesitan una cadena de bloques para ejecutarse; sin embargo, debido a los
beneficios de seguridad que brinda la tecnología blockchain, ahora se está convirtiendo casi en un estándar para
usar blockchain como una plataforma de ejecución descentralizada para contratos inteligentes. Un contrato inteligente
generalmente contiene cierta lógica comercial y una cantidad limitada de datos. Los actores o participantes en la cadena
de bloques utilizan estos contratos inteligentes o se ejecutan de forma autónoma en nombre de los participantes de la red.
Estos pequeños programas residen en la cadena de bloques y ejecutan la lógica comercial si se cumplen algunos
criterios específicos. Se proporcionará más información sobre los contratos inteligentes en el Capítulo 6, Contratos
inteligentes, que está dedicado a una discusión detallada de los contratos inteligentes.
Machine Translated by Google
organizaciones descentralizadas
Las organizaciones descentralizadas (DO) son programas de software que se ejecutan en una cadena de
bloques y se basan en la idea de organizaciones humanas reales con personas y protocolos. Una vez que
se agrega un DO, en forma de contrato inteligente o un conjunto de contratos inteligentes, a la cadena de
bloques, se descentraliza y las partes interactúan entre sí según el código definido en el software DO.
Machine Translated by Google
Organizaciones autónomas descentralizadas
Al igual que las DO, una organización autónoma descentralizada (DAO, por sus siglas en inglés) también es un
programa informático que se ejecuta sobre una cadena de bloques e incrustadas en ella se encuentran las reglas de
lógica comercial y de gobernanza. DAO y DO son básicamente lo mismo, pero la principal diferencia es que los DAO
son autónomos, lo que significa que están completamente automatizados y contienen lógica artificialmente inteligente,
mientras que los DO carecen de esta función y dependen de la intervención humana para ejecutar la lógica empresarial.
Ethereum blockchain abrió el camino con la introducción de DAO por primera vez. En DAO, el código se considera la
entidad rectora en lugar de los humanos o los contratos en papel. Un Curador, sin embargo, es una entidad humana
que participa como alguien que mantiene este código y actúa como evaluador de propuestas para la comunidad. Los
DAO son capaces de contratar contratistas externos si se reciben suficientes aportes de los titulares de tokens
(participantes). El proyecto DAO más famoso es The DAO (https://daohub.org) ya que recaudó 168 millones de dólares
estadounidenses en su fase de crowdfunding. El proyecto DAO fue diseñado para ser un fondo de capital de riesgo que
tenía como objetivo proporcionar un modelo comercial descentralizado sin una sola entidad como propietario.
Desafortunadamente, esto fue pirateado debido a un error en el código DAO y millones de dólares en moneda Ether
(ETH) se desviaron del DAO a un DAO secundario creado por los piratas informáticos. Se requirió una bifurcación dura
en la cadena de bloques de Ethereum para revertir el impacto del hackeo e iniciar la recuperación de los fondos. Este
incidente abrió un debate sobre la seguridad, la calidad y la necesidad de realizar pruebas exhaustivas del código en los
contratos inteligentes para garantizar la integridad y el control adecuado. Hay proyectos en marcha, especialmente en
la academia, que buscan formalizar la codificación de contratos inteligentes.
Actualmente, las DAO no tienen ningún estatus legal, aunque pueden contener algún código inteligente que hace
cumplir algunos protocolos y condiciones, pero estas reglas no tienen ningún valor en el sistema legal actual del mundo
real. Un día, tal vez un agente autónomo comisionado y autorizado por una agencia de aplicación de la ley o un
regulador que contenga reglas y regulaciones podría integrarse en una DAO, para garantizar la integridad de la DAO
desde una perspectiva legal y de cumplimiento. Un Agente Autónomo (AA) es un fragmento de código que se ejecuta
sin intervención humana. El hecho de que los DAO sean entidades puramente descentralizadas hace posible ejecutarlos
en cualquier jurisdicción física. Por lo tanto, plantean una gran pregunta sobre cómo funcionaría un sistema legal actual
con una combinación tan variada de jurisdicciones y geografías diferentes.
Machine Translated by Google
corporaciones autónomas descentralizadas
Las DAO, las corporaciones autónomas descentralizadas (DAC) son un concepto similar pero se consideran
un subconjunto más pequeño de las DAO. Las definiciones de DAC y DAO a veces pueden superponerse,
pero una diferencia general es que las DAO generalmente se consideran sin fines de lucro, mientras que las
DAC pueden ganar dinero a través de acciones ofrecidas a los participantes y pagando dividendos. Estas
corporaciones pueden ejecutar un negocio automáticamente sin intervención humana según la lógica programa
Machine Translated by Google
Sociedades autónomas descentralizadas
Las sociedades autónomas descentralizadas (DAS) son un concepto mediante el cual sociedades enteras
pueden funcionar en una cadena de bloques con la ayuda de múltiples contratos inteligentes complejos y una
combinación de DAO y aplicaciones descentralizadas (DAPP) que se ejecutan de forma autónoma. Este modelo
no significa un enfoque fuera de la ley, ni se basa en una ideología totalmente libertaria; en cambio, muchos
servicios que ofrece un gobierno se pueden brindar a través de blockchain, como los sistemas de tarjetas de
identidad del gobierno, la emisión de pasaportes y los registros de escrituras, matrimonios y nacimientos. Otra
teoría es que, si un gobierno es corrupto y los sistemas centrales no brindan los niveles satisfactorios de
confianza que necesita una sociedad, entonces la sociedad puede iniciar su propia sociedad virtual en una
cadena de bloques impulsada por un consenso descentralizado y transparente. Esto podría verse como un
sueño libertario o cypherpunk, pero es totalmente posible en una cadena de bloques.
Machine Translated by Google
Aplicaciones descentralizadas
Todas las ideas mencionadas anteriormente se encuentran bajo el paraguas más amplio de las aplicaciones
descentralizadas. Todos los DAO, DAC y DO son básicamente aplicaciones descentralizadas que se ejecutan
sobre una cadena de bloques en una red de igual a igual. Este es el último avance en tecnología con respecto a la de
Las aplicaciones descentralizadas o DAPP son programas de software que pueden ejecutarse en su propia
cadena de bloques, usar otra cadena de bloques establecida ya existente o usar solo protocolos de una solución
de cadena de bloques existente. Estos se denominan DAPP Tipo I, Tipo II y Tipo III.
Machine Translated by Google
Requisitos de una aplicación descentralizada
Para que una aplicación se considere una aplicación descentralizada, debe cumplir con los siguientes criterios.
Esta definición fue proporcionada por David Johnston y otros en su documento técnico llamado The General
Theory of Decentralized Applications, Dapps:
1. El DAPP debe ser completamente de código abierto y autónomo y ninguna entidad individual debe tener el
control de la mayoría de sus tokens. Todos los cambios en la aplicación deben ser impulsados por consenso
en función de los comentarios proporcionados por la comunidad.
2. Los datos y registros de las operaciones de la aplicación deben protegerse criptográficamente y almacenarse
en una cadena de bloques pública y descentralizada para evitar cualquier punto central de falla.
3. La aplicación debe usar un token criptográfico para proporcionar acceso y recompensas a
los que aportan valor a las aplicaciones, por ejemplo, mineros en bitcoin.
4. Los tokens deben ser generados por la aplicación descentralizada según un estándar
algoritmo criptográfico. Esta generación de tokens actúa como prueba del valor para los contribuyentes
(por ejemplo, mineros).
Machine Translated by Google
Operaciones de un DAPP
El establecimiento de consenso por un DAPP se puede lograr utilizando algoritmos de consenso como Prueba de
trabajo y Prueba de participación. Hasta ahora, solo se ha encontrado que PoW es increíblemente resistente al 51%
de los ataques, como lo demuestra bitcoin. Además, un DAPP puede distribuir tokens (monedas) a través de minería,
recaudación de fondos y desarrollo.
Ejemplos
Aquí se proporcionan ejemplos de algunas aplicaciones descentralizadas.
Cadena KYC
Esta aplicación proporciona una función para administrar los datos de Conozca a su cliente (KYC) de una
manera segura y conveniente basada en contratos inteligentes.
Bazar Abierto
Esta es una red peer-to-peer descentralizada que permite actividades comerciales directamente entre
vendedores y compradores en lugar de depender de una parte central, a diferencia de los proveedores
convencionales como eBay y Amazon. Cabe señalar que este sistema no está construido sobre una cadena de
bloques; en cambio, las tablas hash distribuidas se utilizan en una red de igual a igual para permitir la comunicación
directa y el intercambio de datos entre pares. Sin embargo, utiliza bitcoin como red de pago.
Lazooz
Este es un equivalente descentralizado de Uber. Permite compartir viajes entre pares y los usuarios pueden
recibir incentivos mediante pruebas de movimiento y pueden ganar monedas Zooz.
Nota
Hay muchos otros DAPPS que se han creado en la cadena de bloques de Ethereum y se
muestran en http://dapps.ethercasts.com/.
Machine Translated by Google
Plataformas para la descentralización
Hay muchas plataformas disponibles para la descentralización ahora. Muchas empresas de todo el
mundo han introducido plataformas que prometen hacer que el desarrollo de aplicaciones distribuidas sea
fácil, accesible y seguro para los usuarios. Algunos nombres prominentes se discuten aquí.
Machine Translated by Google
Etéreo
Ethereum encabeza la lista por ser la primera cadena de bloques que introdujo un lenguaje completo de
Turing y el concepto de una máquina virtual. Esto contrasta con el lenguaje de secuencias de comandos
limitado en bitcoin y muchas otras criptomonedas. Con la disponibilidad de este lenguaje completo de
Turing llamado Solidity, se han abierto infinitas posibilidades para el desarrollo de aplicaciones
descentralizadas. Esto fue propuesto en 2013 por Vitalik Buterin y proporciona una cadena de bloques
pública para desarrollar contratos inteligentes y aplicaciones descentralizadas. Los tokens de moneda en Eth
Machine Translated by Google
Seguro de limpieza
Maidsafe proporciona una red SEGURA (Acceso seguro para todos) que se compone de recursos
informáticos no utilizados, como el almacenamiento, la potencia de procesamiento y las conexiones de
datos de sus usuarios. Los archivos en la red se dividen en pequeños fragmentos de datos que se cifran
y distribuyen aleatoriamente por toda la red. Estos datos solo pueden ser recuperados por su respectivo
propietario. Una innovación clave es que los archivos duplicados se rechazan automáticamente en la
red, lo que ayuda a reducir la necesidad de recursos informáticos adicionales para administrar la carga.
Utiliza Safecoin como token para incentivar a sus contribuyentes.
Machine Translated by Google
lista
Lisk es una plataforma de criptomonedas y desarrollo de aplicaciones blockchain. Permite a los
desarrolladores usar JavaScript para crear aplicaciones descentralizadas y alojarlas en sus propias cadenas
Lisk utiliza el mecanismo de prueba de participación delegada (DPOS) para el consenso mediante el cual
se pueden elegir 101 nodos para proteger la red y proponer bloques. Utiliza el backend de Node.js y
JavaScript, mientras que el frontend permite el uso de tecnologías estándar, como CSS3, HTML5 y JavaScrip
Lisk usa la moneda LSK como moneda en la cadena de bloques. Otro derivado de Lisk es Rise, que es
una aplicación descentralizada basada en Lisk y una plataforma de moneda digital. Se centra más en la
seguridad del sistema.
En capítulos posteriores se proporcionará una introducción más práctica a estas plataformas y otras.
Machine Translated by Google
Resumen
Este capítulo introdujo el concepto de descentralización, que es el servicio central que ofrece la
tecnología blockchain. Aunque el concepto de descentralización no es nuevo, ganó una
importancia renovada en el mundo de la cadena de bloques. Como tal, recientemente se han
introducido varias aplicaciones basadas en arquitectura descentralizada. El capítulo comenzó con
una introducción a la idea de descentralización. A continuación, se discutió la descentralización
desde la perspectiva de blockchain. Además, se introdujeron ideas relacionadas con diferentes capas d
Hay varios conceptos y términos nuevos que han surgido con el advenimiento de la tecnología
blockchain y la descentralización desde la perspectiva de blockchain, como DAO, DAPP y varios
otros. En este capítulo también se proporciona una introducción a todos estos términos. Finalmente,
se discutieron las aplicaciones descentralizadas con algunos ejemplos. En el próximo capítulo se
presentarán conceptos fundamentales que son necesarios para entender el ecosistema Blockchain.
Principalmente, se introducirá la criptografía, que proporciona una base crucial para la tecnología block
Machine Translated by Google
Capítulo 3. Criptografía y fundamentos
técnicos
En este capítulo, se le presentarán los conceptos, la teoría y los aspectos prácticos de la criptografía.
Se prestará más atención a los aspectos que son específicamente relevantes en el contexto de la
tecnología blockchain. Además, también se analizarán los conceptos de los mercados financieros a fin
de proporcionar una base para el material cubierto en capítulos posteriores.
También se le presentarán las implementaciones prácticas de algoritmos criptográficos para que pueda
experimentar las funciones criptográficas de manera práctica. Para ello se utiliza la línea de comandos de Op
Antes de comenzar con los fundamentos teóricos, la instalación de OpenSSL se analiza en la siguiente
sección para que pueda realizar un trabajo práctico a medida que lee el material teórico.
En la distribución de Ubuntu Linux, OpenSSL generalmente ya está disponible; sin embargo, se puede
instalar usando los siguientes comandos:
En las próximas secciones, primero, se discutirá la base teórica y luego se presentarán experimentos
prácticos relevantes.
Machine Translated by Google
Introducción
La criptografía es la ciencia de hacer que la información sea segura en presencia de adversarios. Proporciona un medio
de comunicación segura en presencia de adversarios con recursos supuestos ilimitados.
Los cifrados se utilizan para cifrar datos de modo que, si los intercepta un adversario, los datos no tengan sentido para
ellos sin descifrarlos, lo que requiere la clave secreta.
Antes de seguir hablando de la criptografía, hay algunos términos y conceptos matemáticos que deben explicarse
primero para comprender completamente el material proporcionado más adelante en este capítulo. La siguiente
sección introduce estos conceptos. Cabe señalar que esta sección pretende ser una introducción básica. Una
explicación con pruebas y antecedentes relevantes para todos estos términos requerirá matemáticas bastante
complicadas, que están más allá del alcance de este libro. Se pueden encontrar más detalles sobre estos temas en
cualquier libro de texto estándar de teoría de números, álgebra o criptografía.
Machine Translated by Google
Matemáticas
Como el tema de la criptografía se basa en las matemáticas, esta sección presentará algunos conceptos
básicos que lo ayudarán a comprender los conceptos más adelante en el capítulo.
Establecer
Grupo
Un grupo es un conjunto conmutativo con una operación que combina dos elementos del conjunto. La
operación de grupo es cerrada y asociada a un elemento de identidad definido. Además, cada elemento del
conjunto tiene un inverso. Cierre (cerrado) significa que si, por ejemplo, los elementos A y B están en el conjunto,
entonces el elemento resultante después de realizar la operación en los elementos también está en el conjunto.
Asociativo significa que la agrupación de elementos no afecta el resultado de la operación.
Campo
Un campo es un conjunto que contiene tanto grupos aditivos como multiplicativos. Más precisamente, todos
los elementos del conjunto forman un grupo aditivo y multiplicativo. Satisface axiomas específicos para la suma
y la multiplicación. Para todas las operaciones del grupo se aplica también la ley distributiva. La ley dicta que se
producirá la misma suma o producto aunque se reordenen algunos términos o factores.
Un campo finito
Un campo finito es un campo con un conjunto finito de elementos. También conocidas como campos de Galois,
estas estructuras son de particular importancia en criptografía, ya que pueden usarse para producir resultados
precisos y sin errores de operaciones aritméticas. Por ejemplo, los campos primos finitos se utilizan en la
criptografía de curva elíptica para construir problemas de logaritmos discretos.
Ordenar
Este es el número de elementos en un campo. También se conoce como la cardinalidad del campo.
Campos principales
Este es un campo finito con un número primo de elementos. Tiene reglas específicas para la suma y
la multiplicación, y cada elemento distinto de cero en el campo tiene un inverso. Las operaciones de suma
y multiplicación se realizan módulo p.
Anillo
Si se puede definir más de una operación sobre un grupo abeliano, ese grupo se convierte en un anillo. También
hay ciertas propiedades que necesitan ser satisfechas. Un anillo debe tener cierre y asociativo y
Machine Translated
propiedades by Google
distributivas.
Un grupo cíclico
Un grupo cíclico es un tipo de grupo que puede ser generado por un solo elemento llamado generador de grup
En otras palabras, si la operación de grupo se aplica repetidamente a un elemento particular del grupo,
entonces se pueden generar todos los elementos del grupo.
un grupo abeliano
Un grupo abeliano se forma cuando la operación sobre los elementos de un conjunto es conmutativa. La
ley conmutativa básicamente significa que cambiar el orden de los elementos no afecta el resultado de la
operación, por ejemplo, AXB = BX A.
Aritmética modular
También conocida como aritmética de reloj, los números en la aritmética modular se ajustan cuando
alcanzan un cierto número fijo. Este número fijo es un número positivo llamado módulo y todas las
operaciones se realizan con respecto a este número fijo. En una analogía con un reloj, hay números del 1 al 12
Cuando llega a 12, el número 1 comienza de nuevo. En otras palabras, esta aritmética trata con
los residuos después de la operación de división. Por ejemplo, 50 mod 11 es 6 porque 50 / 11 deja
un resto de 6.
Esto completa una introducción básica a algunos conceptos matemáticos; en la siguiente sección, se le
presentará la criptografía.
Machine Translated by Google
Criptografía
Como se discutió anteriormente, la criptografía brinda varios servicios de seguridad, y estos servicios de
seguridad se analizan aquí.
Machine Translated by Google
Confidencialidad
La confidencialidad es la garantía de que la información solo está disponible para las entidades autorizadas.
Machine Translated by Google
Integridad
La integridad es la seguridad de que la información es modificable solo por entidades autorizadas.
Machine Translated by Google
Autenticación
La autenticación proporciona seguridad sobre la identidad de una entidad o la validez de un mensaje. Hay dos
tipos de autenticaciones, discutidas aquí.
autenticación de entidad
1. El primer factor es algo que tenga, como un token de hardware o una tarjeta inteligente. En este caso, un
usuario puede usar un token de hardware además de las credenciales de inicio de sesión para obtener
acceso a un sistema. Esto brinda protección al requerir dos factores de autenticación. Un usuario que
tenga acceso al token de hardware y conozca las credenciales de inicio de sesión podrá acceder al sistema.
Ambos factores deben estar disponibles para obtener acceso al sistema, lo que convierte a este método en
un mecanismo de autenticación de dos factores.
2. El segundo factor es algo que eres, que utiliza características biométricas para identificar al usuario. En
este método, un usuario utiliza la huella dactilar, la retina, el iris o la geometría de la mano para
proporcionar un factor adicional para la autenticación. De esta manera, se puede asegurar que un usuario
estuvo realmente presente durante el mecanismo de autenticación, ya que las características biométricas
son exclusivas de un individuo. Sin embargo, se requiere una implementación cuidadosa para garantizar un
alto nivel de seguridad, ya que algunas investigaciones han sugerido que los sistemas biométricos se pueden
También conocida como autenticación de mensajes, es una garantía de que se verifica la fuente de información.
La autenticación del origen de los datos implica la integridad de los datos porque si se corrobora una fuente,
los datos no deben haber sido alterados. Varios métodos, como los códigos de autenticación de mensajes
(MAC) y las firmas digitales, son los más utilizados. Estos términos se explicarán en detalle más adelante en el
capítulo.
Machine Translated by Google
no repudio
El no repudio es la garantía de que una entidad no puede negar un compromiso o acción anterior
proporcionando evidencia infalsificable. Es un servicio de seguridad que proporciona pruebas infalsificables
de que se ha producido una determinada acción. Esta propiedad es muy necesaria en situaciones discutibles en
las que una entidad ha negado acciones realizadas, por ejemplo, realizar un pedido en un sistema de comercio
electrónico. Este servicio produce evidencia criptográfica en transacciones electrónicas para que, en caso de
disputas, pueda usarse como confirmación de una acción. El no repudio ha sido un área de investigación activa
durante muchos años. Las disputas en las transacciones electrónicas son un problema común y es necesario
abordarlas para aumentar el nivel de confianza de los consumidores en el servicio.
Los principales requisitos de un protocolo de no repudio son la equidad, la eficacia y la puntualidad. En muchos
escenarios, hay múltiples participantes involucrados en una transacción en lugar de solo dos partes. Por
ejemplo, en los sistemas de comercio electrónico, puede haber muchas entidades, como agentes de
compensación, corredores y comerciantes que pueden participar en una sola transacción. En este caso, los
protocolos de no repudio de dos partes no son apropiados. Para abordar este problema, se han desarrollado
protocolos de no repudio de múltiples partes (MPNR).
Machine Translated by Google
Responsabilidad
La rendición de cuentas es la garantía de que las acciones que afectan la seguridad se pueden rastrear hasta la parte responsa
Esto generalmente lo proporcionan los mecanismos de registro y auditoría en los sistemas donde se requiere una
auditoría detallada debido a la naturaleza del negocio, por ejemplo, en los sistemas de comercio electrónico. Los registros
detallados son vitales para rastrear las acciones de una entidad, por ejemplo, cuando una operación se coloca en un
registro de auditoría con el sello de fecha y hora y la identidad de la entidad se genera y se guarda en el archivo de
registro. Este archivo de registro se puede cifrar opcionalmente y puede ser parte de la base de datos o un archivo de
registro de texto ASCII independiente en un sistema.
Machine Translated by Google
primitivas criptográficas
Las primitivas criptográficas son los componentes básicos de un protocolo o sistema de seguridad.
En la siguiente sección, se le presentan los algoritmos criptográficos que son esenciales para la creación de
protocolos y sistemas seguros. Un protocolo de seguridad es un conjunto de pasos que se toman para
lograr los objetivos de seguridad requeridos utilizando los mecanismos de seguridad apropiados.
Entidad: Es una persona o un sistema que envía, recibe o realiza operaciones en datos
Remitente: Remitente es una entidad que transmite los datos.
Receptor: El receptor es una entidad que recibe la entrega de los datos.
Adversario: Es una entidad que trata de eludir el servicio de seguridad
Clave: una clave son algunos datos que se utilizan para cifrar o descifrar datos
Canal: El canal proporciona un medio de comunicación entre entidades.
Hay dos tipos de cifrados simétricos, cifrados de flujo y cifrados de bloque. El Estándar de cifrado de datos (DES)
y el Estándar de cifrado avanzado (AES) son ejemplos comunes de cifrados de bloque, mientras que RC4 y A5
son cifrados de flujo de uso común.
Cifrados de flujo
Estos cifrados son algoritmos de cifrado que aplican algoritmos de cifrado bit a bit al texto sin formato mediante un flujo
de claves. Hay dos tipos de cifrados de flujo: sincrónicos y asincrónicos.
Los cifrados de flujo síncrono son aquellos en los que el flujo de clave depende solo de la clave, mientras que
los cifrados de flujo asíncrono tienen un flujo de clave que también depende de los datos cifrados.
En los cifrados de flujo, el cifrado y el descifrado son básicamente la misma función porque son simples adiciones de
módulo 2 u operaciones XOR. El requisito clave en los cifrados de flujo es la seguridad y la aleatoriedad de los flujos de
claves. Se han desarrollado varias técnicas para generar números aleatorios, y es fundamental que todos los
generadores de claves sean criptográficamente seguros:
Machine Translated
Operación by Google
de un cifrado de flujo
cifrados en bloque
Son algoritmos de cifrado que descomponen un texto a cifrar (texto plano) en bloques de longitud fija y
aplican el cifrado bloque a bloque. Los cifrados de bloque generalmente se construyen utilizando una
estrategia de diseño conocida como cifrado Fiestel. Los cifrados de bloques recientes, como AES
(Rijndael), se han creado utilizando una combinación de sustitución y permutación denominada red de sustitu
Los cifrados Fiestel se basan en la red Fiestel, que es una estructura desarrollada por Horst Fiestel.
Esta estructura se basa en la idea de combinar múltiples rondas de operaciones repetidas para lograr
propiedades criptográficas deseables conocidas como confusión y difusión. Las redes de Fiestel operan
dividiendo los datos en dos bloques (izquierdo y derecho) y procesan estos bloques a través de funciones de
La confusión hace que la relación entre el texto encriptado y el texto sin formato sea compleja. Esto se
logra mediante la sustitución en la práctica. Por ejemplo, 'A' en texto sin formato se reemplaza por 'X' en
texto cifrado. En los algoritmos criptográficos modernos, la sustitución se realiza utilizando tablas de
búsqueda llamadas S-boxes. La propiedad de difusión distribuye el texto sin formato estadísticamente
sobre los datos cifrados, lo que garantiza que incluso si se cambia un solo bit en el texto de entrada, se
cambia al menos la mitad (en promedio) de los bits en el texto cifrado. Se requiere confusión para que sea
muy difícil encontrar la clave de cifrado, incluso si se crean muchos pares de datos cifrados y descifrados
utilizando la misma clave. En la práctica, esto se logra por transposición o permutación.
Una ventaja clave de usar el cifrado Fiestel es que las operaciones de cifrado y descifrado son casi
idénticas y solo requieren invertir el proceso de cifrado para lograr el descifrado. DES es un excelente
ejemplo de cifrados basados en Fiestel:
Machine Translated by Google
Varios modos de operación para los cifrados de bloques son el libro de códigos electrónico (ECB), el
encadenamiento de bloques de cifrado (CBC), el modo de retroalimentación de salida (OFB) o el modo de contador
(CTR). Estos modos se utilizan para especificar la forma en que se aplicaría una función de cifrado al texto sin
formato. Estos modos se explicarán más adelante en esta sección, pero aquí se presentan las primeras cuatro
categorías de modos de cifrado de bloque.
En este modo, el texto sin formato se divide en bloques de longitud fija según el tipo de cifrado utilizado y luego
se aplica la función de cifrado en cada bloque.
En este modo, la función de cifrado genera un flujo de claves que luego se somete a XOR con el flujo de texto
sin formato para lograr el cifrado.
Hashes criptográficos
Las funciones hash se utilizan básicamente para comprimir un mensaje en un resumen de longitud fija. En este modo, los
cifrados de bloque se utilizan como una función de compresión para producir un hash de texto sin formato.
Se trata de un modo básico de funcionamiento en el que los datos cifrados se producen como resultado de aplicar el
algoritmo de cifrado uno a uno por separado a cada bloque de texto plano. Este es el modo más simple, pero no debe usarse
en la práctica, ya que es inseguro y puede revelar información:
En este modo, cada bloque de texto sin formato se somete a XOR con el bloque cifrado anterior. El modo CBC utiliza el
vector de inicialización IV para cifrar el primer bloque. Se recomienda elegir IV al azar:
Machine Translated by Google
Modo contador
El modo CTR usa efectivamente un cifrado de bloque como un cifrado de flujo. En este caso, se
proporciona un nonce único que se concatena con el valor del contador para producir un flujo de clave:
Modo contador
Hay otros modos, como el modo de retroalimentación de cifrado (CFB), el modo de contador de Galois (GCM)
y el modo de retroalimentación de salida, que también se utilizan en varios escenarios.
pasos AES
Durante el procesamiento del algoritmo AES, una matriz de bytes de 4 por 4 conocida como estado se modifica
mediante varias rondas. El cifrado completo requiere de 10 a 14 rondas según el tamaño de la clave. La
siguiente tabla muestra los tamaños de clave y el número requerido de rondas:
Una vez que el estado se inicializa con la entrada al cifrado, se realizan cuatro operaciones en cuatro etapas para cifrar la entrada.
Estas etapas son AddRoundKey, SubBytes, ShiftRows y
Mezclar columnas:
1. En el paso AddRoundKey , la matriz de estado se somete a XOR con una subclave, que se deriva de la
llave maestra.
2. Este es el paso de sustitución donde se usa una tabla de búsqueda (S-box) para reemplazar todos los bytes del est
formación.
3. Este paso se usa para cambiar cada fila excepto la primera en la matriz de estado a la izquierda en un ciclo y
manera incremental.
4. Finalmente, todos los bytes se mezclan en este paso de forma lineal en forma de columna.
Los pasos anteriores describen una ronda de AES. En la ronda final (ya sea 10, 12 o 14 según el tamaño de la clave),
la etapa 4 se reemplaza con Addroundkey para garantizar que los tres primeros pasos no se puedan invertir
simplemente:
Machine Translated by Google
Diagrama de bloques AES, que muestra la primera ronda, en la última ronda no se realiza el paso de mezcla
Varias billeteras de criptomonedas utilizan el cifrado AES para cifrar los datos almacenados localmente. Especialmente
en la billetera bitcoin, se usa AES 256 en el modo CBC.
:~/Crypt$ openssl enc -aes-256-cbc -in message.txt -out message.bin ingrese la contraseña
de cifrado aes-256-cbc: Verificando - ingrese la contraseña de cifrado aes-256-cbc: :~/Crypt$
ls - litros totales 12
Tenga en cuenta que message.bin es un archivo binario; a veces, es deseable codificar este archivo binario en un
formato de texto por razones de compatibilidad/interoperabilidad. El siguiente comando se puede utilizar para hacer
:~/Crypt$ openssl enc -base64 -in mensaje.bin -out mensaje.b64 :~/Crypt$ ls -ltr -rw-rw-
r-- 1 drequinox drequinox 14 21 de septiembre 05:54 mensaje.txt -rw- rw-r-- 1 drequinox
drequinox 32 21 de septiembre 05:57 mensaje.bin -rw-rw-r-- 1 drequinox drequinox 45 21
de septiembre 06:00 mensaje.b64 :~/Crypt$ cat mensaje.b64
U2FsdGVkX193uByIcwZf0Z7J1at+4L+ Fj8/uzeDAtJE= :~/Crypt$
Para descifrar un archivo cifrado con AES, se pueden usar los siguientes comandos. Se toma un ejemplo de
message.bin de un ejemplo anterior:
:~/Crypt$ openssl enc -d -aes-256-cbc -in message.bin -out message.dec ingrese aes-256-cbc
contraseña de descifrado: :~/Crypt$ ls -ltr -rw-rw-r-- 1 drequinox drequinox 14 21 de septiembre
05:54 mensaje.txt -rw-rw-r-- 1 drequinox drequinox 32 21 de septiembre 05:57 mensaje.bin -rw-rw-r--
1 drequinox drequinox 45 21 de septiembre 06:00 mensaje .b64 -rw-rw-r-- 1 drequinox drequinox 14
21 de septiembre 06:06 mensaje.dec :~/Crypt$ cat mensaje.dec datos para cifrar :~/Crypt$
Los lectores astutos se habrán dado cuenta de que no se ha proporcionado ningún vector de inicialización a
pesar de que se requiere en todos los modos de operación de cifrado de bloques, excepto en ECB. La razón
es que OpenSSL deriva automáticamente el vector de inicialización de la contraseña dada. Los usuarios
pueden especificar el vector de inicialización usando el interruptor:
Para decodificar desde base64, se utilizan los siguientes comandos. Tome el archivo message.b64 del ejemplo
anterior:
:~/Crypt$ openssl enc -d -base64 -in message.b64 -out message.ptx :~/Crypt$ ls -ltr -rw-rw-
r-- 1 drequinox drequinox 14 21 de septiembre 05:54 mensaje.txt - rw-rw-r-- 1 drequinox
drequinox 32 21 de septiembre 05:57 mensaje.bin -rw-rw-r-- 1 drequinox drequinox 45 21 de
septiembre 06:00 mensaje.b64 -rw-rw-r-- 1 drequinox drequinox 14 21 de septiembre 06:06
mensaje.dec -rw-rw-r-- 1 drequinox drequinox 32 21 de septiembre 06:16 mensaje.ptx
Machine Translated by Google
Hay muchos tipos de cifrados compatibles con OpenSSL; puede explorar estas opciones basándose en los ejemplos
proporcionados anteriormente. En la siguiente captura de pantalla se muestra una lista de los tipos de cifrado admitidos:
Captura de pantalla que muestra las ricas opciones de biblioteca disponibles en OpenSSL.
Machine Translated by Google
Criptografía asimétrica
La criptografía asimétrica se refiere a un tipo de criptografía en la que la clave que se utiliza para cifrar los datos es
diferente de la clave que se utiliza para descifrar los datos. También conocida como criptografía de clave pública,
utiliza claves públicas y privadas para cifrar y descifrar datos, respectivamente. Se utilizan varios esquemas de
criptografía asimétrica, como RSA, DSA y El-Gammal.
El diagrama explica cómo un remitente encripta los datos utilizando la clave pública de un destinatario y luego
se transmiten a través de la red al receptor. Una vez que llega al receptor, se puede descifrar utilizando la clave
privada del receptor. De esta forma, la clave privada permanece del lado del receptor y no hay necesidad de
compartir claves para realizar el cifrado y descifrado, como ocurre con el cifrado simétrico.
Otro diagrama muestra cómo se puede utilizar la criptografía de clave pública para verificar la integridad del
mensaje recibido por el receptor. En este modelo, el remitente firma los datos usando su clave privada y transmite el
mensaje al receptor. Una vez que el mensaje se recibe en el lado del receptor, se puede verificar su integridad
mediante la clave pública del remitente. Tenga en cuenta que no se realiza ningún cifrado en este modelo. Este
modelo solo se utiliza con fines de autenticación y validación de mensajes:
Machine Translated by Google
Los mecanismos de seguridad que ofrece el criptosistema de clave pública incluyen establecimiento de claves, firmas
digitales, identificación, cifrado y descifrado.
Los mecanismos de establecimiento de claves se ocupan del diseño de protocolos que permiten el establecimiento
de claves a través de un canal no seguro. El servicio de no repudio, una propiedad muy deseable en muchos escenarios,
se puede proporcionar mediante firmas digitales. A veces, es importante no solo autenticar a un usuario, sino también
identificar a la entidad involucrada en una transacción; esto también se puede lograr mediante una combinación de
firmas digitales y protocolos de desafío-respuesta. Finalmente, el mecanismo de cifrado para brindar confidencialidad
también se puede realizar utilizando criptosistemas de clave pública, como RSA, ECC o El Gammal.
Los algoritmos de clave pública son más lentos en el cálculo en comparación con los algoritmos de clave simétrica.
Por lo tanto, no se usan comúnmente en el cifrado de archivos grandes o los datos reales que necesitan cifrado.
Por lo general, se usan para intercambiar claves por algoritmos simétricos y, una vez que las claves se establecen
de forma segura, los algoritmos de claves simétricas se pueden usar para cifrar los datos.
Los algoritmos de criptografía de clave pública se basan en varios problemas matemáticos subyacentes. Hay tres
familias principales de algoritmos asimétricos que se describen aquí.
Machine Translated by Google
factorización de enteros
Estos esquemas se basan en el hecho de que los números enteros grandes son muy difíciles de factorizar.
RSA es el principal ejemplo de este tipo de algoritmo.
Machine Translated by Google
logaritmo discreto
Esto se basa en un problema de aritmética modular en el que es fácil calcular el resultado de la
función módulo, pero es computacionalmente inviable encontrar el exponente del generador. En otras
palabras, es extremadamente difícil encontrar la entrada del resultado. Esta es una función unidireccional.
2 3 mod 10 = 9
Ahora dado que 9 encuentra 2, el exponente del generador 3 es muy difícil. Este problema difícil se usa
comúnmente en el intercambio de claves Diffie-Hellman y en los algoritmos de firma digital.
Machine Translated by Google
Curvas elípticas
Esto se basa en el problema del logaritmo discreto discutido anteriormente, pero en el contexto de
las curvas elípticas. La curva elíptica es una curva cúbica algebraica sobre un campo, que se puede definir
mediante una ecuación que se muestra aquí. La curva no es singular, lo que significa que no tiene vértices
ni autointersecciones. Tiene dos variables a, b, junto con un punto de infinito.
Aquí, a, b son números enteros que pueden tener varios valores y son elementos del campo sobre el que se
define la curva elíptica. Las curvas elípticas se pueden definir sobre números reales, racionales, números
complejos o campos finitos. Para fines criptográficos, se utiliza una curva elíptica sobre campos primos
finitos en lugar de números reales. Además, el primo debe ser mayor que 3. Se pueden generar diferentes
curvas variando el valor de a, b.
Los criptosistemas utilizados de forma más destacada basados en curvas elípticas son el
algoritmo de firmas digitales de curva elíptica (ECDSA) y el intercambio de claves de curva elíptica Diffie-Hellm
Machine Translated by Google
Claves publicas y privadas
Para comprender la criptografía de clave pública, el primer concepto que debe analizarse es la idea de
claves públicas y privadas.
Una clave privada, como sugiere el nombre, es básicamente un número generado aleatoriamente que los
usuarios mantienen en secreto y en privado. La clave privada debe protegerse y no se debe otorgar ningún
acceso no autorizado a esa clave; de lo contrario, se pondrá en peligro todo el esquema de criptografía de
clave pública, ya que esta es la clave que se utiliza para descifrar los mensajes. Las claves privadas pueden
tener varias longitudes según el tipo y la clase de algoritmos utilizados. Por ejemplo, en RSA, por lo
general, se utiliza una clave de 1024 o 2048 bits. El tamaño de clave de 1024 bits ya no se considera seguro
y, en la práctica, se recomienda utilizar al menos 2048 bits.
Una clave pública es la parte pública del par de claves pública-privada. Una clave pública está disponible
públicamente y es publicada por el propietario de la clave privada. Cualquiera que desee enviar al editor
de la clave pública un mensaje cifrado puede hacerlo cifrando el mensaje con la clave pública publicada
y enviándolo al titular de la clave privada. Nadie más podría descifrar el mensaje porque el destinatario
previsto mantiene la clave privada correspondiente de forma segura. Una vez que se recibe el mensaje
cifrado con clave pública, el destinatario puede descifrar el mensaje utilizando la clave privada. Existen
algunas preocupaciones con respecto a las claves públicas, como la autenticidad y la identificación del
editor de las claves públicas.
Machine Translated by Google
RSA
Aquí se analiza una descripción de RSA. RSA fue inventado en 1977 por Ron Rivest, Adi Shamir y Leonard
Adelman, de ahí el nombre RSA. Esto se basa en el problema de factorización de enteros, donde la multiplicación
de dos números primos grandes es fácil pero difícil de factorizar de nuevo a los dos números originales.
El quid del trabajo en el algoritmo RSA es durante el proceso de generación de claves. Un par de claves RSA se
genera realizando los pasos que se describen aquí.
Generación de módulo:
Generar coprime:
Debe cumplir ciertas condiciones, es decir, debe ser mayor que 1 y menor que (p-1) (q-1). En otras palabras,
e debe ser un número tal que ningún número distinto de 1 pueda dividirse en e y (p-1) (q-1). Esto se llama
coprimo, es decir, e es el coprimo de (p-1)(q-1).
El módulo generado en el paso 1 y e generado en el paso 2 es un par que, juntos, es una clave pública. Esta
parte es la parte pública que se puede compartir con cualquier persona; sin embargo, p y q deben mantenerse e
Clave privada llamada d aquí y se calcula a partir de p, q y e. La clave privada es básicamente lo contrario
de e módulo (p-1)(q-1). En forma de ecuación, es esto:
ed = 1 mod(p-1)(q-1)
Por lo general, se usa un algoritmo euclidiano extendido para calcular d; este algoritmo toma p, q y e y calcula
d. La idea clave en este esquema es que cualquiera que conozca p y q puede calcular la clave privada d fácilmente
aplicando el algoritmo euclidiano extendido, pero alguien que no conozca el valor de p y q no puede generar d.
Esto también implica que p y q deben ser lo suficientemente grandes como para que el módulo n se vuelva muy
difícil (inviable computacionalmente) de factorizar.
C = Pe mod n
Esto significa que el texto sin formato P se eleva a un número de veces y luego se reduce al módulo n.
ElMachine Translated
descifrado en RSAby Google
viene dado por la siguiente ecuación:
P = Cd mod n
Esto significa que el receptor que tiene un par de claves públicas (n, e) puede descifrar los datos elevando
C al valor de la clave privada d y reduciéndolo al módulo n.
Para comprender ECC, es necesaria una introducción básica a las matemáticas subyacentes. La curva
elíptica es básicamente un tipo de ecuación polinómica conocida como ecuación de Weierstrass que genera
una curva sobre un campo finito. El campo más utilizado es donde se realizan todas las operaciones
aritméticas módulo a primo p. Los grupos de curvas elípticas constan de puntos en la curva sobre un campo f
Aquí, A y B pertenecen a un campo finito Zp o FP (campo finito primo) junto con un valor especial llamado
punto de infinito. El punto de infinito se usa para proporcionar operaciones de identidad para puntos en la cur
Además, también se debe cumplir una condición que asegure que la ecuación mencionada anteriormente
no tenga raíces repetidas. Esto significa que la curva no es singular.
La condición se describe aquí en la ecuación, que es un requisito estándar que debe cumplirse.
Más precisamente, esto asegura que la curva no sea singular:
Machine
Una Translated by
representación deGoogle
número real de la curva elíptica se puede visualizar como se muestra en el siguiente gráfico.
Esta es una gráfica de ecuación sobre números reales:
Las curvas reales utilizadas en la criptografía de curvas elípticas están sobre campos primos finitos, pero aquí se
muestran sobre números reales, ya que es más fácil visualizar las operaciones cuando se grafican sobre R:
Para construir el problema del logaritmo discreto basado en curvas elípticas, se requiere un grupo cíclico lo
suficientemente grande. Primero, los elementos del grupo se identifican como un conjunto de puntos que
satisfacen la ecuación anterior. Después de esto, las operaciones de grupo deben definirse en estos puntos.
Las operaciones de grupo en curvas elípticas son la suma de puntos y la duplicación de puntos. La suma de puntos
es un proceso en el que se suman dos puntos diferentes y la duplicación de puntos significa que el mismo punto se su
Ambas operaciones se pueden visualizar como se muestra en los siguientes diagramas.
Adición de puntos
La suma de puntos se muestra en el siguiente diagrama. Esta es una representación geométrica de la suma de
puntos en curvas elípticas. En este método, se dibuja una línea a través de la curva que intersecta la curva en dos
Machine
puntos Translated
que by Google
se muestran debajo de P y Q, lo que produce un tercer punto entre la curva y la línea. Este punto se
refleja como P+Q, que representa el resultado de la suma como R. Esto se muestra como P+Q en el siguiente
diagrama:
La operación de grupo denotada por el signo + para la suma produce la siguiente ecuación:
P+Q=R
En este caso, se suman dos puntos para calcular las coordenadas del tercer punto de la curva:
Más precisamente, esto significa que las coordenadas se suman como se muestra en la siguiente ecuación:
Un ejemplo de suma de puntos que se muestra aquí se produce utilizando la calculadora en línea de Certicom. Este
ejemplo muestra la suma y las soluciones de la ecuación sobre el campo finito F23. Esto contrasta con el ejemplo mostrado
anteriormente, que es sobre números reales y solo muestra la curva pero no las soluciones a la ecuación:
En el ejemplo, el gráfico del lado izquierdo muestra los puntos que satisfacen la ecuación que se muestra aquí:
Hay 27 soluciones a la ecuación mostrada anteriormente sobre un campo finito F23. P y Q se eligen para ser
Machine Translated
agregado by Google
para producir el punto R. Los cálculos se muestran en el lado derecho, que calcula el tercer punto R.
Tenga en cuenta que aquí, l se usa para representar la línea que pasa por P y Q.
Como ejemplo para mostrar cómo los puntos que se muestran en el gráfico satisfacen la ecuación, se toma un punto (x, y)
donde x = 3 y y = 6.
El uso de estos valores en la ecuación muestra que la ecuación se cumple de hecho. Esto se muestra de la
siguiente manera:
La siguiente sección introducirá el concepto de duplicación de puntos, que es otra operación que se puede
realizar en curvas elípticas.
duplicación de puntos
Aquí, S es la pendiente de la tangente (línea tangente) que pasa por P. Es la línea superior que se muestra en la
figura anterior. En el ejemplo anterior, la curva se traza sobre reales como un ejemplo simple y no se muestra ninguna
solución para la ecuación.
Aquí se muestra un ejemplo, que muestra las soluciones y la duplicación de puntos de la curva elíptica sobre el campo finito
F23. El gráfico del lado izquierdo muestra los puntos que satisfacen la ecuación:
Machine Translated by Google
Como se mostró anteriormente, en el lado derecho, se muestra un cálculo que encuentra la R después de que P se suma a sí misma
(doblamiento de puntos). No hay Q como aquí, el mismo punto P se usa para doblar. Tenga en cuenta que en el cálculo, l se usa para
representar la línea tangente que pasa por P.
pag + pag + . . . +P = re P = T
Aquí, T es la clave pública (punto en la curva) y d es la clave privada. En otras palabras, la clave pública es un
múltiplo aleatorio del generador, mientras que la clave privada es el número entero que se utiliza para generar
el múltiplo. #E representa el orden de la curva elíptica, lo que básicamente significa el número de puntos que
están presentes en el grupo cíclico de la curva elíptica. Un grupo cíclico está formado por una combinación de
puntos en la curva elíptica y el punto en el infinito.
Un par de claves está vinculado con parámetros de dominio específicos de una curva elíptica. Los parámetros
de dominio incluyen un tamaño de campo, representación de campo, dos elementos del campo a y b, dos
elementos de campo Xg e Yg, orden n del punto G que se calcula como G=(Xg, Yg) y el cofactor h = # E(Fq)/ n.
Un ejemplo práctico usando OpenSSL se describirá más adelante en esta sección.
Hay varios parámetros que se recomiendan y estandarizan para usar como curvas con ECC.
Aquí se muestra un ejemplo de las especificaciones SECP256K1. Esta es la especificación que se ha utilizado
en bitcoin:
Machine Translated by Google
G es el punto base que genera el subgrupo requerido, también conocido como generador. El punto base
se puede representar en forma comprimida o sin comprimir. No hay necesidad de almacenar todos los
puntos de la curva en implementaciones prácticas. El generador comprimido funciona porque los puntos de
la curva se pueden identificar usando solo la coordenada x y el bit menos significativo de la coordenada y .
En la siguiente sección, se muestra un ejemplo que usa OpenSSL para ayudarlo a comprender los
aspectos prácticos de RSA.
En la siguiente sección, se muestra cómo se pueden generar pares de claves públicas y privadas RSA utilizan
Machine
Abrir SSL. Translated by Google
Llave privada
...............................++++++
..................................++++++
Después de ejecutar el comando, se genera un archivo llamado privatekey.pem , que contiene la clave privada generada.
Esto se muestra de la siguiente manera:
Como la clave privada está matemáticamente vinculada a la clave pública, es posible generar o derivar la clave pública a partir
de la clave privada. Tomando el ejemplo de la clave privada anterior, la clave pública se puede generar como se muestra aquí:
:~/Crypt$ openssl rsa -pubout -in privatekey.pem -out publickey.pem escribiendo clave RSA
La clave pública se puede ver usando un lector de archivos o cualquier visor de texto, como se muestra aquí:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiThQcz8trznenpgZP1Bq8w8u0
74A2J2MQX4hCSHf6/hMjLfxdeJNnw0zlcMV2l08YkIA/gSronsv+vfYrZ66lv8cv 6aHAzL6G4/
EAp4BJ7TnTaFUmjfrdH/Z0TN4lTPeJs9/wv7+L176GnD8j5K/9I4SF dMKArqQiGxk4IQYQABIDAxk4IQYQiGxk4I4SF
Machine
-----FIN Translated
CLAVE by Google
PÚBLICA-----
Para ver más detalles sobre los diversos componentes, como el módulo, los números primos que se utilizan en el
proceso, los exponentes y los coeficientes de la clave privada generada, se puede utilizar el siguiente comando (no
se muestra la salida completa porque es demasiado largo):
00:a2:4e:14:1c:cf:cb:6b:ce:77:a7:a6:06:4f:d4:
1a:bc:c3:cb:b4:ef:80:36:27:63:10:5f:88:42:48:
77:fa:fe:13:23:2d:fc:5d:78:93:67:c3:4c:e5:70:
c5:76:97:4f:18:90:80:3f:81:2a:e8:9e:cb:fe:bd:
f6:2b:67:ae:a5:bf:c7:2f:e9:a1:c0:cc:be:86:e3:
f1:00:a7:80:49:ed:39:d3:68:55:26:8d:fa:dd:1f:
f6:74:4c:de:25:4c:f7:89:b3:df:f0:bf:bf:8b:d7:
ser:86:9c:3f:23:e4:af:fd:23:84:85:74:c2:80:ae:
anuncio:71:93:82:18:2a:21:b1:d1
exponente público: 65537 (0x10001) exponente
privado: 00:94:1d:ec:fc:de:25:26:1d:25:d5:39:0e:49:8b:
a7:5a:dc:d3:ea:2b:27:36:44:7b:83:55:ab:63:d1:
fe:ac:6f:71:c7:89:0f:e5:bd:43:c8:4d:d2:bf:10:
4b:24:0e:b1:80:19:5e:f0:95:50:33:39:b7:b0:a2:
6b:24:f1:59:cf:34:f9:34:d3:67:ba:00:b1:6a:2a:
f1:70:5d:66:3f:32:40:3f:76:aa:a5:c4:a3:c4:aa:
53:bf:8a:a0:a9:87:af:c2:05:b5:03:44:77:c4:a4:
19:cc:12:94:f9:b4:ce:da:15:d5:0f:5a:07:c6:ee:
f9:98:36:37:c4:2c:2a:48:01
primo1:
00:d4:61:5d:38:c0:d4:84:8c:4c:bd:b5:82:74:cd:
aa:f2:0c:07:2f:77:f5:46:db:f5:3f:ea:a8:90:19:
a8:c1:79:2a:52:aa:81:04:4a:28:1b:ba:c2:a4:bb:
ec:15:b5:16:20:59:61:28:98:bf:d7:e7:cb:7e:2b:
4d:5e:30:c6:59
primo2:
00:c3:a3:d4:47:d6:0b:79:bb:26:fd:28:e2:88:e4:
a1:57:80:0a:b8:57:62:ee:de:c3:61:61:39:52:56:
f5:ba:a3:ff:8b:6f:33:37:fc:ad:b7:80:57:28:8b:
3f:29:c1:72:91:01:9e:00:2e:8b:0c:76:72:c9:cc:
9c:9e:d0:c8:39
De manera similar, la clave pública se puede explorar usando los siguientes comandos. Las claves públicas y privadas
están codificadas en base64:
Ahora la clave pública se puede compartir abiertamente y cualquier persona que quiera enviarnos un
mensaje puede usar la clave pública para cifrar el mensaje y enviárnoslo. Luego podemos usar la clave privada
correspondiente para descifrar el archivo.
Cifrado
Tomando la clave privada generada en el ejemplo anterior, se puede construir el comando para cifrar
un mensaje de archivo de texto.txt , como se muestra aquí:
:~/Crypt$ openssl rsautl -encrypt -inkey publickey.pem -pubin -in message.txt - out message.rsa
Esto producirá un archivo llamado mensaje.rsa, que está en formato binario. Si abrimos message.rsa en el
editor nano, mostrará algo de basura:
Para descifrar el archivo cifrado con RSA, se puede usar el siguiente comando:
:~/Crypt$ openssl rsautl -decrypt -inkey privatekey.pem -in message.rsa -out message.dec
Ahora, si el archivo se lee con cat, se puede ver el texto sin formato descifrado, como se muestra aquí:
En este ejemplo, primero, se presenta un ejemplo que demuestra la creación de una clave privada utilizando las
funciones ECC disponibles en la biblioteca OpenSSL.
Llave privada
ECC se basa en parámetros de dominio definidos por varios estándares. Podemos ver la lista de todas las curvas
definidas y recomendadas de los estándares disponibles en OpenSSL usando el siguiente comando:
.
.
.
.
brainpoolP384r1: Curva RFC 5639 sobre un campo principal de 384 bits
brainpoolP384t1: Curva RFC 5639 sobre un campo principal de 384 bits
brainpoolP512r1: Curva RFC 5639 sobre un campo principal de 512 bits
brainpoolP512t1: Curva RFC 5639 sobre un campo principal de 512 bits
Machine
Como estoTranslated
produce byuna
Google
salida larga, la salida completa no se muestra y se trunca en el medio. En el
siguiente ejemplo, SECP256k1 se usa para demostrar el uso de ECC.
~/Crypt$ openssl ecparam -name secp256k1 -genkey -noout -out ec-privatekey.pem ~/Crypt$ cat ec-privatekey.pem
El archivo denominado ec-privatekey.pem ahora contiene la clave privada EC que se genera en función de la
curva SECP256K1.
Para generar una clave pública a partir de una clave privada, emita el siguiente comando:
~/Crypt$ openssl ec -in ec-privatekey.pem -pubout -out ec-pubkey.pem leer clave EC escribir clave EC
La lectura del archivo produce el siguiente resultado, que muestra la clave pública generada:
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE0G33mCZ4PKbg5EtwQjk6ucv9Qc9DTr8J
dcGXYGxHdzr0Jt1NInaYE0GGChFMT5pK+wfvSLkYl5ul0oczwWKjng==
-----FIN CLAVE PÚBLICA-----
~/Crypt$ openssl ec -in ec-privatekey.pem -text -noout leer clave EC Clave privada:
(256 bits) priv:
00:91:d4:22:6f:4d:64:08:1f:a5:4a:d2:c5:49:3f:
88:83:6a:d6:08:4c:fd:ec:27:fd:12:cd:ad:eb:91:
e7:68:7f
publicación: 04:d0:6d:f7:98:26:78:3c:a6:e0:e4:4b:70:42:39:
3a:b9:cb:fd:41:cf:43:4e:bf:09:75:c1:97:60:6c:
47:77:3a:f4:26:dd:4d:22:76:98:13:41:86:0a:11:
4c:4f:9a:4a:fb:07:ef:48:b9:18:97:9b:a5:d2:87:
33:c1:62:a3:9e
OID ASN1: secp256k1
De manera similar, la clave pública se puede explorar más con el siguiente comando:
Machine Translated by Google
drequinox@drequinox-OP7010:~/Crypt$ openssl ec -in ec-pubkey.pem -pubin -text - noout
leer clave EC
Clave privada: (256 bits) pub:
04:d0:6d:f7:98:26:78:3c:a6:e0:e4:4b:70:42:39:
3a:b9:cb:fd:41:cf:43:4e:bf:09:75:c1:97:60:6c:
47:77:3a:f4:26:dd:4d:22:76:98:13:41:86:0a:11:
4c:4f:9a:4a:fb:07:ef:48:b9:18:97:9b:a5:d2:87:
33:c1:62:a3:9e
ASN1 OID: secp256k1
drequinox@drequinox-OP7010:~/Crypt$
También es posible generar un archivo con los parámetros requeridos, en este caso, SECP256K1, y
luego explorarlo más a fondo para comprender los parámetros subyacentes:
BgUrgQQACg==
-----FINALIZAR PARÁMETROS EC-----
El archivo ahora contiene todos los parámetros SECP256K1 y se puede analizar con el siguiente comando:
drequinox@drequinox-OP7010:~/Crypt$ openssl ecparam -in secp256k1.pem -text - param_enc explicit -noout Tipo de
campo: prime-field Prime:
00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:
ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:
ff:fc:2f
A: 0
B: 7 (0x7)
Generador (sin comprimir):
04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:
0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:
f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:
0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:
8f:fb:10:d4:b8
Ordenar:
00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:
ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:
36:41:41
Cofactor: 1 (0x1)
El ejemplo anterior muestra el número primo utilizado y los valores de A y B con el generador, el orden y el
cofactor de los parámetros del dominio de la curva SECP256K1 .
Hay otra categoría de primitivas criptográficas que se conoce como funciones hash. Las funciones hash
no se utilizan para cifrar; en cambio, producen un resumen de texto de longitud fija.
Machine Translated by Google
primitivas criptográficas
Esta taxonomía de primitivas criptográficas se puede visualizar como se muestra aquí:
primitivas criptográficas
Machine Translated by Google
Funciones hash
Las funciones hash se utilizan para crear resúmenes de longitud fija de cadenas de entrada arbitrariamente largas.
Las funciones hash no tienen clave y proporcionan el servicio de integridad de datos. Por lo general, se construyen
utilizando técnicas de construcción de funciones hash iteradas y dedicadas. Hay varias familias de funciones hash
disponibles, como MD, SHA1, SHA-2, SHA-3, RIPEMD y Whirlpool. Las funciones hash se usan comúnmente en
firmas digitales y códigos de autenticación de mensajes, como HMAC. Tienen tres propiedades de seguridad, a
saber, resistencia previa a la imagen, segunda resistencia previa a la imagen y resistencia a la colisión. Estas
propiedades se explican más adelante en la sección.
Las funciones hash se utilizan normalmente para proporcionar servicios de integridad de datos. Estos se pueden
utilizar como funciones unidireccionales y para construir otras primitivas criptográficas, como MAC y firmas
digitales. Algunas aplicaciones utilizaron funciones hash como medio para generar números pseudoaleatorios
(PRNG). Las funciones hash no requieren una clave. Hay dos propiedades prácticas y tres de seguridad de las
funciones hash que deben cumplirse según el nivel de requisitos de integridad.
Esta propiedad tiene que ver con el hecho de que una función hash debe poder tomar un texto de entrada largo
de cualquier longitud y generar un mensaje comprimido de longitud fija. Las funciones hash producen una salida
comprimida en varios tamaños de bits, generalmente entre 128 bits y 512 bits.
Fácil de calcular
Las funciones hash son funciones unidireccionales eficientes y rápidas. El requisito es que sean muy rápidos de
calcular, independientemente del tamaño del mensaje. La eficiencia puede disminuir si el mensaje es demasiado
grande, pero la función aún debe ser lo suficientemente rápida para un uso práctico.
h(x) = y
Aquí, h es la función hash, x es la entrada e y es el hash. La primera propiedad de seguridad requiere que y no se
pueda calcular de forma inversa a x. x se considera una imagen previa de y, de ahí el nombre de resistencia previa
a la imagen. Esto también se llama propiedad unidireccional.
Esta propiedad requiere que dado x y h(x) , es casi imposible encontrar cualquier otro mensaje m donde m != ,
x y hash de m = hash de x. h(m) = h(x). Esta propiedad también se conoce como resistencia a la colisión débil.
Machine Translated by Google
Resistencia a colisiones
Esta propiedad requiere que dos mensajes de entrada diferentes no se conviertan en la misma salida. En otras
palabras, h(x) != h(z). Esta propiedad también se conoce como fuerte resistencia a la colisión.
Las funciones hash, debido a su propia naturaleza, siempre tendrán algunas colisiones, y ahí es donde dos
mensajes diferentes generan el mismo resultado, pero no deberían ser computacionalmente factibles de encontrar.
Un concepto conocido como efecto avalancha es deseable en todas las funciones hash. El efecto de avalancha
especifica que un pequeño cambio, incluso un cambio de un solo carácter en el texto de entrada, dará como
resultado una salida hash totalmente diferente.
Las funciones hash generalmente se diseñan siguiendo el enfoque de funciones hash iteradas. En este método, el
mensaje de entrada se comprime en varias rondas bloque por bloque para producir la salida comprimida. Un tipo
popular de función hash iterada es la construcción Merkle-Damgard. Esta construcción se basa en la idea de dividir
los datos de entrada en bloques de igual tamaño y luego alimentarlos a través de las funciones de compresión de
manera iterativa. La resistencia a la colisión de la propiedad de las funciones de compresión asegura que la salida
hash también sea resistente a la colisión. Las funciones de compresión se pueden construir utilizando cifrados de
bloque. Además de Merkle-Damgard, existen otras construcciones de funciones de compresión propuestas por
investigadores, por ejemplo, Miyaguchi-Preneel y Davies Meyer.
Hay múltiples categorías de funciones hash. Se le presentarán estas categorías en la próxima sección.
SHA-1: SHA-1 fue presentado más tarde por NIST como reemplazo de SHA-0. Esta también es una función hash de
160 bits. SHA-1 se usa comúnmente en implementaciones de SSL y TLS. Cabe señalar que SHA-1 ahora se considera
inseguro y está siendo obsoleto por las autoridades de certificación. Ahora se desaconseja su uso en cualquier
implementación nueva. SHA-2: Esta categoría incluye cuatro funciones definidas por el número de bits del hash:
SHA-224, SHA-256, SHA-384 y SHA-512.
SHA-3: Esta es la última familia de funciones SHA. SHA3-224, SHA3-256, SHA3-384 y SHA3-512 son miembros de
esta familia. SHA3 es una versión estandarizada por NIST de Keccak. Keccak utiliza un nuevo enfoque llamado
construcción de esponja en lugar de la transformación de Merkle-Damgard comúnmente utilizada.
RIPEMD: RIPEMD es el acrónimo de RACE Integrity Primitives Evaluation Message Digest. Está
Machine
basado enTranslated
las ideas by
deGoogle
diseño utilizadas para construir MD4. Hay varias versiones de RIPEMD, incluidas 128 bits,
160 bits, 256 bits y 320 bits.
Whirlpool: se basa en una versión modificada del cifrado Rijndael conocido como W. Utiliza la función de
compresión Miyaguchi-Preneel, que es un tipo de función unidireccional que se utiliza para la compresión
de dos entradas de longitud fija en una sola salida de longitud fija. Es una función de compresión de longitud de
bloque único:
En blockchain, las funciones hash juegan un papel muy importante. Especialmente, la función de prueba de trabajo
usa SHA 256 dos veces para verificar el esfuerzo computacional gastado por los mineros. RIPEMD 160 se utiliza
para producir direcciones de bitcoin. Esto se discutirá con más detalle en capítulos posteriores.
En la siguiente sección, se le presentará el diseño de SHA-256 y SHA-3. Ambos se utilizan en bitcoin y Ethereum,
respectivamente. Ethereum no usa el estándar SHA-3 del NIST, sino Keccak, que es el algoritmo original presentado
al NIST. NIST, después de algunas modificaciones, como el aumento en la cantidad de rondas y el relleno de
mensajes más simple, estandarizó Keccak como SHA-3.
SHA-256
SHA-256 tiene un tamaño de mensaje de entrada < 2^64 bits. El tamaño del bloque es de 512 bits y tiene un tamaño de palabra
de 32 bits. La salida es un resumen de 256 bits.
La función de compresión procesa un bloque de mensajes de 512 bits y un valor hash intermedio de 256 bits.
Hay dos componentes principales de esta función: la función de compresión y un programa de mensajes.
Preprocesamiento:
1. Relleno del mensaje, que se utiliza para hacer que la longitud de un bloque sea de 512 bits si es
menor que el tamaño de bloque requerido de 512 bits.
2. Analizar el mensaje en bloques de mensajes que garanticen que el mensaje y su relleno se dividen
en bloques iguales de 512 bits.
3. Establecer el valor hash inicial, que son las ocho palabras de 32 bits obtenidas al tomar los primeros 32
bits de las partes fraccionarias de las raíces cuadradas de los primeros ocho números primos. Estos
valores iniciales se eligen aleatoriamente para inicializar el proceso y brindan un nivel de confianza de
que no existe una puerta trasera en el algoritmo.
Cálculo de hash:
1. Cada bloque de mensajes se procesa en una secuencia y requiere 64 rondas para calcular la salida hash
completa. Cada ronda usa constantes ligeramente diferentes para asegurar que no haya dos rondas
mismo.
En el diagrama anterior, a, b, c, d, e, f, g y h son los registros. Maj y Ch se aplican bit a bit. que se agregan
mod 2^32.
realiza la rotación bit a bit. Las constantes redondas son Wj y Kj ,
La estructura de SHA-3 es muy diferente de la habitual SHA-1 y SHA-2. La idea clave detrás de SHA-3
se basa en permutaciones no codificadas a diferencia de otras construcciones de funciones hash habituales
que utilizan permutaciones codificadas. Keccak tampoco hace uso de la transformación Merkle-Damgard
que se usa comúnmente para manejar mensajes de entrada de longitud arbitraria en funciones hash. En
Keccak se utiliza un enfoque más nuevo llamado construcción de esponja y compresión, que es básicamente
un modelo de permutación aleatoria. Se han estandarizado diferentes variantes de SHA3, como SHA3-224,
SHA3-256, SHA3-384, SHA3-512, SHAKE128 y SHAKE256. SHAKE128 y SHAKE256 son funciones de salida
extensibles que también están estandarizadas por funciones NIST.XOF que permiten que la salida se
extienda a cualquier longitud deseada.
El siguiente diagrama muestra el modelo de esponja y apretón que es la base de SHA3 o Keccak. Como
analogía con la esponja, primero, los datos se absorben en la esponja después de aplicar el relleno, donde
luego se cambian a un subconjunto de estado de permutación usando XOR y luego la salida se extrae de
la función de esponja que representa el estado transformado. Rate es el tamaño del bloque de entrada de
una función de esponja, mientras que la capacidad determina el nivel de seguridad genérico:
Machine Translated by Google
El siguiente comando producirá un hash de 256 bits de mensajes Hello utilizando el algoritmo SHA256:
Tenga en cuenta que incluso un pequeño cambio en el texto, como cambiar el caso de H, da como resultado un gran
cambio en el hash de salida. Esto se conoce como efecto de avalancha, como se discutió anteriormente:
Hola:
18:5f:8d:b3:22:71:fe:25:f5:61:a6:fc:93:8b:2e:26:43:06:ec:30:4e:da:51:80: 07:d1:76
:48:26:38:19:69 hola:
2c:f2:4d:ba:5f:b0:a3:0e:26:e8:3b:2a:c5:b9:e2:9e:1b:16:1e: 5c:1f:a7:42:5e:73:04:33
:62:93:8b:98:24
Las MAC a veces se denominan funciones hash con clave y se pueden usar para proporcionar integridad y autenticación
de mensajes. En otras palabras, se utilizan para proporcionar autenticación de origen de datos. Estas son primitivas
criptográficas simétricas que utilizan una clave compartida entre el emisor y el receptor. Los MAC se pueden construir
utilizando cifrados de bloque o funciones hash.
En este enfoque, los cifrados de bloque se utilizan en el modo de encadenamiento de bloques de cifrado (modo CBC) para
Machine
generar unTranslated
MAC. Seby Google
puede utilizar cualquier cifrado de bloque, por ejemplo, AES en el modo CBC. El MAC del mensaje
es, de hecho, el resultado de la última ronda de la operación CBC. La longitud de la salida MAC es la misma que la
longitud del bloque del cifrado de bloque utilizado para generar MAC. Las MAC se verifican simplemente calculando la
MAC del mensaje y comparándola con la MAC recibida. Si son iguales, se confirma la integridad del mensaje; de lo
contrario, el mensaje se considera alterado. También se debe tener en cuenta que los MAC funcionan como firmas
digitales, pero no pueden proporcionar el servicio de no repudio debido a su naturaleza simétrica.
Similar a la función hash, producen una salida de longitud fija y toman un mensaje arbitrariamente largo como entrada.
En este esquema, el remitente firma un mensaje usando MAC y el receptor lo verifica usando la clave compartida. La
clave se codifica con el mensaje utilizando cualquiera de los dos métodos conocidos como prefijo secreto o método
de sufijo secreto. En el primer método, la clave se concatena con el mensaje, es decir, la clave va primero y el mensaje
después, mientras que en el último método, la clave va después del mensaje:
Hay ventajas y desventajas de ambos métodos. Se han descubierto algunos ataques a ambos esquemas. Hay
esquemas de construcciones HMAC que utilizan varias técnicas, como ipad y opad (relleno interior y relleno exterior)
propuestos por investigadores que se consideran seguros con algunas suposiciones:
Ralph Merkle introdujo el concepto de árbol de Merkle . Aquí se muestra una visualización del árbol de Merkle, lo que facilita su
comprensión. Los árboles de Merkle permiten una verificación segura y eficiente de grandes conjuntos de datos.
Es un árbol binario en el que primero, las entradas se colocan en las hojas (nodo sin hijos), y luego los valores de pares de
nodos hijos se juntan para producir un valor para el nodo principal (nodo interno) hasta que un Se logra un único valor hash
conocido como raíz de Merkle:
Un árbol Merkle
arboles patricia
Para comprender los árboles de Patricia, primero, se le presentará el concepto de un trie. Un trie o un árbol digital es una
estructura de datos de árbol ordenado que se utiliza para almacenar un conjunto de datos.
Algoritmo práctico para recuperar información codificada en alfanumérico (Patricia), también conocido como árbol Radix,
es una representación compacta de un trie en el que un nodo que es el único hijo de un padre se fusiona con su padre.
El árbol Merkle-Patricia, basado en las definiciones de Patricia y Merkle, es un árbol que tiene un nodo raíz que contiene el
valor hash de toda la estructura de datos.
Una tabla hash es una estructura de datos que se utiliza para asignar claves a valores. Internamente, se usa una función hash
para calcular un índice en una matriz de cubos, de los cuales se puede encontrar el valor requerido. Los cubos tienen registros
almacenados en ellos usando una clave hash y están organizados en un orden particular.
Con la definición proporcionada anteriormente en mente, uno puede pensar en la tabla hash distribuida como una tabla de datos
Machine Translated
Estructura donde losby datos
Googlese distribuyen entre varios nodos y los nodos son equivalentes a depósitos en una
red de igual a igual.
El siguiente diagrama muestra visualmente cómo funciona un DHT. El ejemplo muestra que los datos pasan a
través de una función hash, lo que da como resultado la generación de una clave compacta. Esta clave luego
se vincula con los datos (valores) en la red peer-to-peer. Cuando los usuarios de la red solicitan los datos (a
través del nombre del archivo), el nombre del archivo se puede codificar nuevamente para producir la misma clave
y luego se puede solicitar a cualquier nodo en la red que encuentre los datos correspondientes. DHT proporciona
descentralización, tolerancia a fallas y escalabilidad:
Firmas digitales
Las firmas digitales proporcionan un medio para asociar un mensaje con una entidad a partir de la cual se
originó el mensaje. Las firmas digitales se utilizan para proporcionar autenticación y no repudio del origen de
los datos. Se calculan en dos pasos. Los pasos de alto nivel de un esquema de firma digital RSA son los
siguientes:
1. Calcule el valor hash del paquete de datos. Esto proporcionará la garantía de integridad de los datos, ya que
el hash se puede calcular nuevamente en el extremo del receptor y compararlo con el hash original para
verificar si los datos se han modificado en tránsito. Técnicamente, la firma de mensajes puede funcionar sin
primero aplicar hash a los datos, pero no se considera seguro.
2. El segundo paso firma el valor hash con la clave privada del firmante. Como sólo el cantante tiene la
clave privada, se asegura la autenticidad de la firma y de los datos firmados.
Las firmas digitales tienen algunas propiedades importantes, como la autenticidad, la imposibilidad
de falsificar y la no reutilización. Autenticidad significa que las firmas digitales son verificables por una parte
receptora. La propiedad de infalsificación garantiza que solo el remitente del mensaje pueda usar la funcionalidad
de firma usando la clave privada. En otras palabras, nadie más debería poder producir el mensaje firmado que
ha sido producido por el remitente legítimo. La no reutilización significa que lo digital
laMachine
firma noTranslated
se puedeby Google
separar de un mensaje y volver a utilizar para otro mensaje.
Firma digital (izquierda) y proceso de verificación (derecha) (Ejemplo de firmas digitales RSA)
Si un remitente desea enviar un mensaje autenticado a un receptor, se pueden utilizar dos métodos.
Estos dos enfoques para usar firmas digitales con cifrado se presentan aquí.
En este enfoque, el remitente firma digitalmente los datos con la clave privada, agrega la firma a los datos
y luego cifra los datos y la firma digital con la clave pública del receptor. Esto se considera un esquema
más seguro en comparación con el esquema de cifrado y luego firma que se describe a continuación.
En este enfoque, el remitente encripta los datos usando la clave pública del receptor y luego firma
digitalmente los datos encriptados.
Nota
En la práctica, un certificado digital que contiene la firma digital es emitido por una autoridad certificadora
(CA) que asocia una clave pública con una identidad.
En la práctica se utilizan varios esquemas, tales como RSA, algoritmo de firma digital y esquemas de
firma digital basados en el algoritmo de firma digital de curva elíptica. RSA es el más utilizado; sin
embargo, con la tracción de la criptografía de curva elíptica, los esquemas basados en ECDSA también se es
Machine
muy Translated by Google
popular.
Kpb = (p,a,b,q,A,B)
Kpr = d
1. Primero, se elige una clave efímera Ke , donde 0 < Ke < q. Se debe asegurar que Ke es verdaderamente
aleatorio, y no hay dos firmas que tengan la misma clave; de lo contrario, se puede calcular la clave privada.
2. Otro valor R se calcula mediante R = Ke A, es decir, multiplicando A (el punto generador) y la clave efímera
aleatoria.
3. Inicialice una variable r con el valor de la coordenada x del punto R. r = xR.
4. La firma se puede calcular de la siguiente manera:
Aquí, m es el mensaje para el que se calcula la firma y h(m) es el hash del mensaje
metro.
eso es:
Aquí se muestran varios ejemplos prácticos, que muestran cómo se puede generar, usar y verificar
la firma digital RSA usando OpenSSL.
Tanto la generación de hash como la firma se pueden realizar en un solo paso, como se muestra aquí.
Tenga en cuenta que privatekey.pem se genera en los pasos proporcionados anteriormente:
De manera similar, si se usa algún otro archivo de firma que no sea válido, la verificación fallará, como se muestra aquí:
Ahora se le presenta un ejemplo que muestra cómo se puede usar OpenSSL para realizar operaciones relacionadas con ECDSA.
~/Crypt$ openssl ecparam -genkey -name secp256k1 -noout -out eccprivatekey.pem ~/Crypt$ cat eccprivatekey.pem
~/Crypt$ openssl ec -in eccprivatekey.pem -pubout -out eccpublickey.pem leer clave EC escribir clave EC ~/
Crypt$ cat eccpublickey.pem
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEEKKS4E4+TATIeBX8o2J6PxKkjcoWrXPw
NRo/k4Y/CZA4pXvlyTgH5LYmQbU0qUtPM7dAEzOsaoXmetqB+6cM+Q==
-----FIN CLAVE PÚBLICA-----
~/Cripta$
Ahora suponga que un archivo llamado testsign.txt necesita ser firmado y verificado. Esto se puede lograr de la siguiente manera:
2. Ejecute el siguiente comando para generar una firma usando una clave privada para testsign.txt
expediente:
~/Crypt$ openssl req -new -key eccprivatekey.pem -x509 -nodes -days 365 -out ecccertificate.pem Se le pedirá
que ingrese información que se incorporará a su solicitud de certificado.
-----
Nombre del país (código de 2 letras) [AU]: Nombre
del estado o provincia de GB (nombre completo) [Algún estado]: Nombre de la
localidad de Cambridge (p. ej., ciudad) []: Nombre de la organización de Cambridge
(p. ej., empresa) [Internet Widgits Pty Ltd ]: ¡Dr. Equinoccio!
Nombre de la unidad organizativa (p. ej., sección) []: NA Nombre
común (p. ej., FQDN del servidor o SU nombre) []: drequinox Dirección de correo
electrónico []: [email protected]
Cifrado homomórfico
Por lo general, los criptosistemas de clave pública, como RSA, son homomórficos multiplicativos u
homomórficos aditivos, como el criptosistema de Paillier, y se denominan sistemas parcialmente homomórficos.
Los PHE aditivos son adecuados para votaciones electrónicas y aplicaciones bancarias. Hasta hace poco, no
había ningún sistema que admitiera ambas operaciones, pero en 2009, Craig Gentry descubrió un sistema
completamente homomórfico . Como estos esquemas permiten el procesamiento de datos cifrados sin necesidad
de descifrarlos, tienen muchas aplicaciones posibles diferentes, especialmente en escenarios donde se requiere
mantener la privacidad pero también se requiere que los datos sean procesados por partes potencialmente no
confiables, por ejemplo, computación en la nube. y motores de búsqueda en línea. El desarrollo reciente en el
cifrado homomórfico ha sido muy prometedor y los investigadores están trabajando activamente para hacerlo
más eficiente y práctico. Esto es de particular interés en la tecnología blockchain, como se describe más adelante
en el libro, porque puede resolver el problema de la confidencialidad y la privacidad en blockchain.
Cifrado de signos
Signcryption es una primitiva de criptografía de clave pública que proporciona todas las funciones de la
firma digital y el cifrado. Fue inventado por Yuliang Zheng y ahora es un estándar ISO ISO/IEC 29150:2011.
Tradicionalmente, los esquemas de firma y luego cifrado o cifrado y luego firma se utilizan para proporcionar
imposibilidad de falsificación, autenticación y no repudio, pero con Signcryption, todos los servicios de firmas
digitales y cifrado se proporcionan a un costo menor que el de los esquemas de firmar y luego cifrar.
Esto es Costo (firma y cifrado) << Costo (firma) + Costo (Cifrado) en un solo paso lógico.
Las pruebas de conocimiento cero fueron introducidas por GoldWasser, Micali y Rackoff. Estas pruebas se utilizan
para probar la validez de una afirmación sin revelar ningún tipo de información sobre la afirmación. Hay tres
propiedades de ZKP que se requieren, a saber, integridad, solidez y propiedad de conocimiento cero.
La completitud asegura que si cierta afirmación es verdadera, entonces el verificador será convencido de esta
afirmación por el probador. La propiedad de solidez asegura que si una afirmación es falsa, ningún probador
deshonesto puede convencer al verificador de lo contrario. La propiedad de conocimiento cero, como su nombre
lo indica, es la propiedad clave de las pruebas de conocimiento cero mediante las cuales se asegura que no se
revele absolutamente nada sobre la afirmación, excepto si es verdadera o falsa.
Las pruebas de conocimiento cero han despertado un interés especial entre los investigadores en el espacio
de la cadena de bloques debido a sus propiedades de privacidad que son muy deseables en los campos
financieros y muchos otros, como el derecho y la medicina. Un ejemplo reciente de la implementación exitosa
del mecanismo de prueba de conocimiento cero es la moneda criptográfica Zcash. En Zcash, un tipo específico de pr
SeMachine Translated
implementa by Google de conocimiento sucinto no interactivo de conocimiento cero (ZK-Snark).
el argumento
Esto se discutirá en detalle en el Capítulo 5, Monedas alternativas.
firmas ciegas
Las firmas ciegas fueron introducidas por David Chaum en 1982 y se basan en esquemas de firma digital
de clave pública, como RSA. La idea clave detrás de las firmas ciegas es hacer que el firmante firme el mensaje
sin revelar el mensaje. Esto se logra disfrazando o cegando el mensaje antes de firmarlo, de ahí el nombre de
firmas ciegas. Esta firma ciega se puede verificar con el mensaje original como una firma digital normal. Las
firmas ciegas se introdujeron como un mecanismo para permitir el desarrollo de esquemas de efectivo digital.
Esquemas de codificación
Aparte de las primitivas criptográficas, los esquemas de codificación de binario a texto también se
utilizan en varios escenarios. El uso más común es convertir datos binarios en texto para que puedan
procesarse, guardarse o transmitirse a través de un protocolo que no admita el procesamiento de datos binarios.
Por ejemplo, a veces, las imágenes se almacenan en la base de datos como codificación base64, lo que permite
que un campo de texto pueda almacenar una imagen. Un esquema de codificación de uso común es base64.
Otra codificación llamada base58 se popularizó por su uso en bitcoin.
La criptografía es un campo muy amplio y esta sección ha introducido conceptos básicos que son
esenciales para entender la criptografía en general y específicamente desde el punto de vista de la cadena de
bloques y las criptomonedas. En la siguiente sección, se le presentan los conceptos básicos de los mercados finan
La próxima sección describe la terminología general sobre el comercio, los intercambios y el ciclo de vida comercia
Se proporcionará información más relevante en capítulos posteriores donde se analizan casos de uso específicos.
Machine Translated by Google
Mercados financieros y comercio
Los mercados financieros existen para facilitar las transferencias de ahorros de los ahorradores a los inversores. En un
sistema económico, hay dos sectores, a saber, el hogar y el negocio. Los mercados financieros, en esencia, actúan como
intermediarios entre los ahorradores y los inversores. Básicamente, hay tres tipos de mercados, a saber, mercados de
dinero, mercados de crédito y mercados de capital. Los mercados monetarios son mercados a corto plazo en los que se
presta dinero a empresas o bancos para que realicen préstamos interbancarios. El tipo de cambio o FX es otra categoría
de mercados monetarios donde se negocian divisas. Los mercados de crédito consisten principalmente en bancos
minoristas que toman prestado dinero de los bancos centrales y lo prestan a empresas u hogares en forma de hipotecas
o préstamos.
Los mercados de capital facilitan la compra y venta de instrumentos financieros, principalmente acciones y bonos.
Los mercados de capitales se pueden dividir en dos tipos, mercados primarios y secundarios. Las acciones son
emitidas directamente por las empresas a los inversionistas en los mercados primarios, mientras que en los mercados
secundarios, los inversionistas revenden sus valores a los inversionistas a través de las bolsas de valores. Los intercambios
utilizan varios sistemas electrónicos de negociación para facilitar la negociación de instrumentos financieros.
Machine Translated by Google
Comercio
Un mercado es un lugar donde los comerciantes vienen a comerciar. Puede incluir clases de activos.
El comercio se puede definir como una actividad en la que los comerciantes compran o venden varios instrumentos
financieros para generar ganancias y cubrir el riesgo. Los inversores, los prestatarios, los coberturistas, los intercambiadores
de activos y los jugadores son algunos tipos de comerciantes. Los comerciantes tienen una posición corta cuando deben algo,
por ejemplo, si han vendido un contrato y tienen una posición larga cuando compran un contrato. Hay varias formas de realizar
transacciones comerciales, como a través de corredores o directamente en la bolsa o en el mostrador. Los corredores son
agentes que organizan intercambios para sus clientes. Los corredores actúan en nombre de los clientes para negociar a un
precio determinado o al mejor precio posible.
Machine Translated by Google
Intercambios
Los intercambios generalmente se consideran un lugar muy seguro, regulado y confiable para el comercio.
Recientemente, el comercio electrónico ha ganado gran popularidad en comparación con el comercio tradicional
basado en el piso. Ahora los comerciantes envían pedidos a un libro de pedidos electrónico central desde donde los
pedidos, precios y atributos relacionados se publican en todos los sistemas asociados utilizando redes de
comunicación, creando así, en esencia, un mercado virtual. Las transacciones de intercambio solo pueden ser
realizadas por miembros del intercambio. Para operar sin estas limitaciones, las contrapartes pueden participar
directamente en operaciones OTC (Over the Counter).
2. Cantidad.
3. Dirección (compra o venta).
4. El tipo de orden que representa varias condiciones, por ejemplo, órdenes limitadas y stop
órdenes, un ejemplo de las cuales son 1500 acciones ordinarias de Royal Bank of Scotland por GBP £ 15,50.
Las órdenes se negocian sobre la base de precios de oferta y precios de oferta. Los comerciantes muestran su
intención de comprar o vender adjuntando precios de oferta y demanda a sus órdenes. El precio al que comprará un
comerciante se conoce como precio de oferta. El precio al que un comerciante está dispuesto a vender se conoce como pr
Hay diferentes tipos de órdenes; las dos más comunes son las órdenes de mercado y las órdenes limitadas. Una orden
de mercado es una instrucción para operar al mejor precio actualmente disponible en el mercado, y estas órdenes se
ejecutan inmediatamente a precios al contado. Por otro lado, una orden limitada es una instrucción para negociar al
mejor precio disponible, pero solo si no es inferior al precio límite establecido por el comerciante. Esto también puede
ser mayor dependiendo de la dirección de la orden, ya sea de venta o de compra. Todas estas órdenes se gestionan en
un libro de órdenes, que es una lista de órdenes mantenidas por un intercambio, y registra la intención de compra o
venta por parte de los comerciantes.
Una posición es un compromiso de vender o comprar una cantidad de instrumentos financieros, como valores,
divisas o materias primas a un precio determinado. Los contratos, valores, materias primas y divisas que los
comerciantes compran o venden se conocen comúnmente como instrumentos comerciales y se encuentran bajo el
amplio paraguas de las clases de activos. Las clases más comunes son los activos reales, los activos financieros, los
contratos de derivados y los contratos de seguros.
Machine Translated by Google
Componentes de un comercio
Un ticket comercial es la combinación de todos los detalles relacionados con una operación. Sin embargo, existe alguna
variación según el tipo de instrumento y la clase de activo, pero en general, todos los instrumentos tienen los atributos que
se analizan en la siguiente sección.
Nota
El instrumento subyacente
El instrumento subyacente es la base de la operación. Puede ser una moneda, un bono, una tasa de interés, una
materia prima o acciones.
Atributos generales
Esto incluye información de identificación general y características básicas asociadas con cada comercio.
Los atributos comunes incluyen una identificación única, nombre de instrumento, tipo, estado, fecha de negociación y hora.
Económico
Estas son características relacionadas con el valor de la operación, por ejemplo, valor de compra o venta, ticker, intercambio,
precio y cantidad.
Ventas
Ventas se refiere a los detalles relacionados con las características de venta, como el nombre del vendedor, y es solo un
campo de información, por lo general sin ningún impacto en el ciclo de vida comercial.
contraparte
La contraparte es un componente importante de una operación, ya que muestra el otro lado de la operación y se
requiere para liquidar la operación con éxito. Los atributos habituales incluyen el nombre de la contraparte, la dirección, el tipo
de pago, cualquier ID de referencia, la fecha de liquidación y el tipo de entrega.
Machine Translated by Google
Ciclo de vida comercial
Un ciclo de vida comercial general incluye varias etapas, desde la colocación de la orden hasta la ejecución
y luego la liquidación. Este ciclo de vida se describe paso a paso de la siguiente manera:
En la siguiente sección, se le presentan algunos conceptos que son esenciales para comprender las reglas y
regulaciones estrictas y necesarias que rigen la industria financiera. Algunos conceptos se describen aquí y en
capítulos posteriores cuando se analizan casos de uso específicos, y estas ideas lo ayudarán a comprender los
escenarios descritos.
Machine Translated by Google
Anticipadores de pedidos
Los anticipadores de órdenes intentan obtener ganancias antes de que otros comerciantes puedan realizar transacciones. Esto
se basa en la anticipación en la que un comerciante sabe cómo las actividades comerciales de otros comercios afectarán los precios
Los pioneros, los comerciantes técnicos orientados al sentimiento y los exprimidores son algunos ejemplos de
anticipadores de órdenes.
Machine Translated by Google
Manipulación de mercado
La manipulación del mercado es estrictamente ilegal en el Reino Unido y otros países. Los comerciantes fraudulentos
pueden difundir información falsa en el mercado, lo que puede provocar movimientos de precios y, por lo tanto, obtener ganan
Por lo general, la conducta manipuladora del mercado se basa en el comercio e incluye manipulaciones generalizadas y
específicas en el tiempo. Se incluyen en esta categoría las acciones que pueden crear una escasez artificial de existencias,
la impresión de una actividad falsa y la manipulación de precios para obtener beneficios delictivos.
Los dos términos discutidos anteriormente son relevantes para los delitos financieros. y existe la posibilidad de
desarrollar sistemas basados en blockchain que puedan frustrar el abuso del mercado. Esto se discutirá en detalle en
capítulos posteriores, donde se discutirán casos de uso específicos.
Machine Translated by Google
Resumen
Este capítulo tuvo como objetivo presentar conceptos de criptografía y mercados financieros para
brindarle información básica que le permita comprender el material proporcionado en capítulos
posteriores. Primero, se le presentaron los conceptos básicos de la criptografía, y luego se introdujeron
varios esquemas, como cifrados simétricos y asimétricos. Se mostraron ejemplos prácticos que utilizan
la línea de comandos de OpenSSL para que pueda experimentar con varios comandos y experimentar
varias funciones criptográficas de primera mano. Además, se proporcionaron algunos antecedentes
matemáticos al comienzo del capítulo y cuando fue necesario, especialmente con la criptografía de
curva elíptica. Todos los conceptos de criptografía presentados en este capítulo están relacionados con
la tecnología blockchain y se implementan o se ha propuesto implementar en varias blockchains, criptomo
Además, recibió una introducción rápida a la industria financiera, ya que prepara el escenario
para varios ejemplos que se analizarán en relación con la tecnología de contabilidad distribuida más
adelante en el libro. Dado que la criptografía y las finanzas son temas amplios, el material cubierto en
este capítulo pretende ser de naturaleza introductoria (con algunas excepciones) y los temas
específicos se ampliarán con más detalle, cuando sea relevante y necesario, en los próximos capítulos.
Machine Translated by Google
Capítulo 4. Bitcoin
Bitcoin es la primera aplicación de la tecnología blockchain. En este capítulo, se presentará a los lectores la
tecnología bitcoin en detalle.
Bitcoin ha iniciado una revolución con la introducción de la primera moneda digital totalmente descentralizada,
que ha demostrado ser extremadamente segura y estable. Esto también ha despertado un gran interés en la
investigación académica e industrial y ha introducido muchas nuevas áreas de investigación. Desde su introducción
en 2008, bitcoin ha ganado mucha popularidad y actualmente es la moneda digital más exitosa del mundo con miles de
millones de dólares invertidos en ella. Se basa en décadas de investigación en el campo de la criptografía, el dinero
digital y la computación distribuida. En la siguiente sección, se presenta una breve historia con el fin de proporcionar los
antecedentes necesarios para comprender los fundamentos detrás de la invención de bitcoin.
Las monedas digitales siempre han sido un área activa de investigación durante muchas décadas. Las primeras
propuestas para crear efectivo digital se remontan a principios de la década de 1980. En 1982, David Chaum propuso un
esquema que usaba firmas ciegas para construir una moneda digital imposible de rastrear. En este esquema, un banco
emitiría dinero digital firmando un número de serie ciego y aleatorio presentado por el usuario. El usuario podría entonces
utilizar el token digital firmado por el banco como moneda. La limitación de este esquema era que el banco tenía que
realizar un seguimiento de todos los números de serie utilizados. Este era un sistema central por diseño y requería que
los usuarios confiaran en él. Más tarde, en 1990, David Chaum propuso una versión refinada llamada e-cash que no solo
usaba una firma ciega, sino también algunos datos de identificación privada para redactar un mensaje que luego se
enviaba al banco. Este esquema permitió detectar el doble gasto pero no lo evitó. Si se usó el mismo token en dos
ubicaciones diferentes, se revelaría la identidad del que gastó dos veces. El efectivo electrónico solo podía representar
una cantidad fija de dinero. El hashcash de Adam Back , presentado en 1997, se propuso originalmente para frustrar el
correo no deseado. La idea detrás del hashcash era resolver un rompecabezas computacional que fuera fácil de verificar
pero comparativamente difícil de calcular.
La idea era que para un solo usuario y un solo correo electrónico, el esfuerzo computacional adicional no fuera perceptible,
pero alguien que enviara una gran cantidad de correos electrónicos no deseados se desalentaría, ya que el tiempo y los
recursos necesarios para ejecutar la campaña de correo no deseado aumentarían sustancialmente. .
B-money fue propuesto por Wei Dai en 1998, que introdujo la idea de usar Prueba de trabajo para crear dinero. Una
gran debilidad del sistema era que un adversario con mayor poder de cómputo podía generar dinero no solicitado
sin permitir que la red se ajustara a un nivel de dificultad adecuado. El sistema carecía de detalles sobre el mecanismo
de consenso entre los nodos y tampoco se abordaron algunos problemas de seguridad, como los ataques de Sybil.
Al mismo tiempo, Nick Szabo introdujo el concepto de BitGold, que también se basaba en el mecanismo de Prueba
de trabajo pero tenía los mismos problemas que b-money con la excepción de que el nivel de dificultad de la red era
ajustable.
Tomas Sander y Ammon TaShama introdujeron un esquema de efectivo electrónico en 1999 que, por primera vez,
utilizó árboles de Merkle para representar monedas y pruebas de conocimiento cero para probar la posesión de monedas.
En el esquema, se requería un banco central que mantuviera un registro de todos los números de serie utilizados. Este
esquema permitió a los usuarios ser completamente anónimos, aunque a un costo computacional. RPOW (Prueba de
Machine Translated by Google
Work) fue presentado por Hal Finney en 2004 y utilizó el esquema hashcash de Adam Back como prueba de los
recursos computacionales gastados para crear el dinero. Este también era un sistema central que mantenía una base de
datos central para realizar un seguimiento de todos los tokens POW utilizados. Este era un sistema en línea que utilizaba
la atestación remota posible gracias a una plataforma informática confiable (hardware TPM).
Todos los esquemas mencionados anteriormente están diseñados inteligentemente, pero eran débiles en un aspecto
u otro. Especialmente, todos estos esquemas se basan en un servidor central en el que se requiere la confianza del
usuarios
Machine Translated by Google
Bitcoin
En 2008, Satoshi Nakamoto escribió un artículo sobre bitcoin, Bitcoin: A Peer-to-Peer Electronic Cash System . La
primera idea clave presentada en el documento fue que el efectivo electrónico puramente entre pares necesita un
banco intermediario para transferir pagos entre pares.
Bitcoin se basa en décadas de investigación criptográfica, como la investigación en árboles Merkle, funciones
hash, criptografía de clave pública y firmas digitales. Además, ideas como BitGold, b money, hashcash y el
sello de tiempo criptográfico sentaron las bases para la invención de bitcoin. Todas estas tecnologías se combinan
hábilmente en bitcoin para crear la primera moneda descentralizada del mundo.
El problema clave que se ha abordado en bitcoin es una solución elegante al problema de los generales
bizantinos junto con una solución práctica al problema del doble gasto.
El valor de bitcoin ha aumentado significativamente desde 2011, como se muestra en el siguiente gráfico:
La regulación de bitcoin es un tema controvertido y, por mucho que sea el sueño de un libertario, las agencias
de aplicación de la ley y los gobiernos están proponiendo varias regulaciones para controlarlo, como BitLicense
emitida por el departamento de servicios financieros del estado de Nueva York. Esta es una licencia emitida a
empresas que realizan actividades relacionadas con monedas virtuales.
El crecimiento de Bitcoin también se debe al llamado Efecto de Red. También llamado economías de escala del
lado de la demanda, es un concepto que básicamente significa que cuantos más usuarios usen la red, más valiosa
se vuelve. Con el tiempo, se ha visto un aumento exponencial en el crecimiento de la red Bitcoin. Aunque el precio
de bitcoin es bastante volátil, ha aumentado significativamente en los últimos años.
Actualmente (al momento de escribir esto), el precio de bitcoin es de 815 GBP.
Machine Translated by Google
Definición de Bitcoin
Bitcoin se puede definir de varias maneras; es un protocolo, una moneda digital y una plataforma. Es una
combinación de red, protocolos y software peer-to-peer que facilitan la creación y el uso de la moneda digital
llamada bitcoin. Tenga en cuenta que Bitcoin con B mayúscula se usa para referirse al protocolo Bitcoin, mientras
que Bitcoin con b minúscula se usa para referirse a Bitcoin, la moneda. Los nodos de esta red peer-to-peer se
comunican entre sí mediante el protocolo Bitcoin.
La descentralización de la moneda fue posible por primera vez con la invención de bitcoin.
Además, el problema del doble gasto se resolvió de una manera elegante e ingeniosa en bitcoin.
El problema del doble gasto surge cuando, por ejemplo, un usuario envía monedas a dos usuarios diferentes al
mismo tiempo y se verifican de forma independiente como transacciones válidas.
Claves y direcciones
La criptografía de curva elíptica se utiliza para generar pares de claves públicas y privadas en la red Bitcoin.
La dirección de bitcoin se crea tomando la clave pública correspondiente de una clave privada y haciéndola dos
veces, primero con el algoritmo SHA256 y luego con RIPEMD160. El hash de 160 bits resultante se prefija con un
número de versión y finalmente se codifica con un esquema de codificación Base58Check. Las direcciones de
bitcoin tienen entre 26 y 35 caracteres y comienzan con el dígito 1 o 3. Una dirección de bitcoin típica se parece a
una cadena que se muestra aquí:
1ANAguGG8bicicletaEv2fYsTBnRUmx7QUcK58wt
Esto también se codifica comúnmente en un código QR para compartirlo fácilmente. El código QR de la dirección
anterior se muestra en la siguiente imagen:
Actualmente existen dos tipos de direcciones, la comúnmente utilizada P2PKH y otra de tipo P2SH,
comenzando por 1 y 3, respectivamente. En los primeros días, bitcoin usaba Pay-to-Pubkey directo, que ahora ha
sido reemplazado por P2PKH. Sin embargo, el Pago directo a Pubkey todavía se usa en bitcoin para las direcciones
de la base de monedas. Las direcciones no deben usarse más de una vez; de lo contrario, pueden surgir problemas
de privacidad y seguridad. Evitar la reutilización de direcciones evita los problemas de anonimato hasta cierto punto,
Machine
también Translatedde
problemas byseguridad,
Google como la maleabilidad de las transacciones, que requieren diferentes enfoques para
resolverse.
La descripción matemática más detallada y la razón por la que funciona se describe aquí. Si se visualiza el gráfico ECC,
revela que la coordenada y puede estar por debajo del eje x o por encima del eje x y como la curva es simétrica, solo se
requiere almacenar la ubicación en el campo principal.
Las claves privadas generalmente se codifican utilizando el formato de importación de billetera (WIF) para que sean
más fáciles de copiar y usar. WIF se puede convertir en clave privada y viceversa. Los pasos se describen aquí.
Además, el formato de clave privada mini a veces se usa para codificar la clave en menos de 30 caracteres para
permitir el almacenamiento donde el espacio físico es limitado, por ejemplo, grabado en monedas físicas o códigos
QR resistentes a daños. El cliente central de bitcoin también permite el cifrado de la billetera que contiene las claves
privadas.
Las unidades monetarias de Bitcoin se describen a continuación. La denominación más pequeña de bitcoin es el Satos
Codificación Base58Check
Esta codificación se usa para limitar la confusión entre varios caracteres, como 0OIl, ya que pueden tener el mismo
aspecto en diferentes fuentes. La codificación básicamente toma las matrices de bytes binarios y las convierte en
cadenas legibles por humanos. Esta cadena se compone utilizando un conjunto de 58 símbolos alfanuméricos. Se
pueden encontrar más explicaciones y lógica en el archivo fuente base58.h en el código fuente de bitcoin.
Machine Translated by Google
direcciones de vanidad
Como las direcciones de bitcoin se basan en la codificación base 58, es posible generar direcciones que contengan
mensajes legibles por humanos. Un ejemplo se muestra a continuación:
Las direcciones mnemónicas se generan usando un método puramente de fuerza bruta. Un ejemplo se muestra
en la siguiente captura de pantalla:
Machine Translated by Google
Las transacciones no están encriptadas y son visibles públicamente en la cadena de bloques. Los bloques se
componen de transacciones y se pueden ver utilizando cualquier explorador de cadenas de bloques en línea.
Machine Translated by Google
El ciclo de vida de la transacción
1. Un usuario/remitente envía una transacción usando un software de billetera o alguna otra interfaz.
2. El software de la billetera firma la transacción utilizando la clave privada del remitente.
3. La transacción se transmite a la red de Bitcoin mediante un algoritmo de inundación.
4. Los nodos de minería incluyen esta transacción en el siguiente bloque a minar.
5. La minería comienza una vez que un minero que resuelve el problema de Prueba de trabajo transmite el nuevo min
bloque a la red. La prueba de trabajo se explica en detalle más adelante en este capítulo.
6. Los nodos verifican el bloque y lo propagan más, y la confirmación comienza a generarse.
7. Finalmente, las confirmaciones comienzan a aparecer en la billetera del receptor y después de
aproximadamente seis confirmaciones, la transacción se considera finalizada y confirmada. Sin embargo,
seis es solo un número recomendado; la transacción puede considerarse definitiva incluso después de la primera
La idea clave detrás de esperar seis confirmaciones es que la probabilidad de duplicar el gasto prácticamente
se elimina después de seis confirmaciones.
Machine Translated by Google
La estructura de la transacción
Una transacción de alto nivel contiene metadatos, entradas y salidas. Las transacciones se combinan para crear un
bloque. La estructura de la transacción se muestra en la siguiente tabla:
Versión
4 bytes Se utiliza para especificar las reglas que utilizarán los mineros y los nodos para el procesamiento de transacciones.
Número
1 byte -
Contador
9 El número de entradas incluidas en la transacción.
de entrada
bytes
lista de Cada entrada se compone de varios campos, incluido el hash de transacción anterior, el índice Txout anterior, la longitud del script Txin, el script Txin y el número de
variable
entradas secuencia opcional. La primera transacción en un bloque también se denomina transacción de base de monedas. Especifica una o más entradas de transacción.
1 byte -
Afuera
9 Un entero positivo que representa el número de salidas.
encimera
bytes
lista de
Salidas variables incluidas en la transacción.
salidas
lock_time 4 bytes Esto define el momento más temprano en que una transacción se vuelve válida. Es una marca de tiempo de Unix o un número de bloque.
Metadatos: esta parte de la transacción contiene algunos valores, como el tamaño de la transacción, la cantidad de
entradas y salidas, el hash de la transacción y un campo lock_time . Cada transacción tiene un prefijo que especifica el
número de versión.
Entradas: Generalmente, cada entrada gasta una salida anterior. Cada salida se considera una salida de transacción
no gastada (UTXO) hasta que una entrada la consuma.
Salidas: Las salidas tienen solo dos campos y contienen instrucciones para el envío de bitcoins.
El primer campo contiene la cantidad de Satoshis, mientras que el segundo campo es un script de bloqueo que
contiene las condiciones que deben cumplirse para que se gaste la salida. Más adelante en esta sección se analiza
más información sobre el gasto de transacción mediante el bloqueo y desbloqueo de secuencias de comandos y la
producción de resultados.
Una transacción decodificada de muestra, que muestra varios campos descritos anteriormente
El lenguaje de escritura
Bitcoin utiliza un lenguaje simple basado en pilas llamado script para describir cómo se pueden gastar y transferir
bitcoins. No es Turing completo y no tiene bucles para evitar efectos indeseables de secuencias de comandos de larga
ejecución/colgadas en la red de bitcoin. Este lenguaje de secuencias de comandos se basa en una sintaxis similar a Forth
y utiliza una notación pulida inversa en la que cada operando va seguido de sus operadores. Se evalúa de izquierda a
derecha utilizando una pila de último en entrar, primero en salir (LIFO).
Los scripts utilizan varios códigos de operación o instrucciones para definir su funcionamiento. Los códigos de
operación también se conocen como palabras, comandos o funciones. Las versiones anteriores del nodo bitcoin tenían
algunos códigos de operación que ya no se usan debido a errores descubiertos en su diseño.
Las diversas categorías de los códigos de operación de secuencias de comandos son constantes, control de flujo,
pila, lógica bit a bit, empalme y aritmética, criptografía y tiempo de bloqueo.
Un script de transacción se evalúa combinando ScriptSig y ScriptPubKey. ScriptSig es el script de desbloqueo, mientras
que ScriptPubKey es el script de bloqueo. Así es como se evalúa una transacción para ser gastada; primero se desbloquea
y luego se gasta. ScriptSig es proporcionado por el usuario que desea desbloquear la transacción. ScriptPubkey es parte de
la salida de la transacción y especifica las condiciones que deben cumplirse para gastar la salida. En otras palabras, las
salidas están bloqueadas por la ScriptPubKey (secuencia de comandos de bloqueo) que contiene las condiciones, cuando
se cumplen, se desbloqueará la salida y las monedas se podrán canjear.
Aquí se incluye una descripción de los códigos de operación más utilizados. Esta tabla está tomada de la guía del
desarrollador de bitcoin:
Esto toma una clave pública y una firma y valida la firma del hash de la transacción. Si coincide, TRUE se coloca en la pila; de lo contrario, se presiona FALSO.
OP_CHECKSIG
OP_IGUAL Esto devuelve 1 si las entradas son exactamente iguales; de lo contrario, se devuelve 0.
OP_HASH160 La entrada se codifica dos veces, primero con SHA-256 y luego con RIPEMD-160.
OP_VERIFICAR Esto marca la transacción como inválida si el valor de la pila superior no es verdadero.
Esto toma la primera firma y la compara con cada clave pública hasta que se encuentra una coincidencia y repite este proceso hasta que se verifican todas las firmas.
OP_CHECKMULTISIG
Si todas las firmas resultan ser válidas, se devuelve como resultado un valor de 1; de lo contrario, se devuelve 0.
Machine Translated by Google
Tipos de transacción
Hay varios scripts disponibles en bitcoin para manejar la transferencia de valor desde el origen
hasta el destino. Estos scripts varían de muy simples a bastante complejos según los requisitos de la
transacción. Los tipos de transacciones estándar se analizan aquí. Las transacciones estándar se
evalúan utilizando las pruebas IsStandard() e IsStandardTx() y solo las transacciones estándar que pasan
la prueba generalmente pueden extraerse o transmitirse en la red de bitcoin. Sin embargo, las
transacciones no estándar son válidas y están permitidas en la red.
Pay to Public Key Hash (P2PKH): P2PKH es el tipo de transacción más utilizado y se usa para
enviar transacciones a las direcciones de bitcoin. El formato de la transacción se muestra a
continuación:
Raw multisig está obsoleto, y multisig suele ser parte del script de canje de P2SH, mencionado
en el punto anterior.
Pagar a Pubkey: este script es un script muy simple que se usa comúnmente en las
transacciones de coinbase. Ahora está obsoleto y se usó en una versión anterior de bitcoin.
En este caso, la clave pública se almacena dentro del script y se requiere el script de desbloqueo
para firmar la transacción con la clave privada.
<PubKey> OP_CHECKSIG
Machine
DatosTranslated by Google
nulos/OP_RETURN: este script se usa para almacenar datos arbitrarios en la cadena de bloques por una tarif
El límite del mensaje es de 40 bytes. El resultado de este script no se puede canjear porque
OP_RETURN fallará la validación en cualquier caso. ScriptSig no es necesario en este caso.
OP_RETURN <datos>
Todas las transacciones finalmente se codifican en el hexadecimal antes de transmitirse a través de la red bitcoin.
Se muestra una transacción de muestra en hexadecimal que se recupera usando bitcoin-cli en la red de prueba de
bitcoin usando el siguiente comando:
Transacciones de Coinbase
Un minero siempre crea una transacción de base de monedas o una transacción de generación y es la
primera transacción en un bloque. Se utiliza para crear nuevas monedas. Incluye un campo especial, también llamado
coinbase, que actúa como entrada para la transacción de coinbase. Esta transacción también permite hasta 100 bytes
de datos arbitrarios que se pueden usar para almacenar datos arbitrarios. En el bloque de génesis, esto incluía el
comentario más famoso tomado del periódico The Times:
"The Times 03/ ene/ 2009 Canciller al borde del segundo rescate para los bancos"
Machine
Este Translated
mensaje es una by Google
prueba de que el bloque de génesis no se extrajo antes del 3 de enero de 2009.
¿Qué es UTXO?
La salida de transacción no gastada (UTXO) es una salida de transacción no gastada que se puede gastar como entrada para
una nueva transacción. A continuación se describen otros conceptos relacionados con las transacciones en bitcoin.
Tarifa de transacción
Las tarifas de transacción son cobradas por los mineros. La tarifa cobrada depende del tamaño de la transacción.
Las tarifas de transacción se calculan restando la suma de las entradas y la suma de las salidas. Las tarifas se utilizan
como un incentivo para que los mineros los alienten a incluir una transacción de usuario en el bloque que están creando.
Todas las transacciones terminan en el grupo de memoria, desde donde los mineros seleccionan las transacciones en
función de su prioridad para incluirlas en el bloque propuesto. El cálculo de la prioridad se introduce más adelante en este
capítulo; sin embargo, desde el punto de vista de la tarifa de transacción, los mineros recogerán antes una transacción con
una tarifa más alta. Existen diferentes reglas en función de qué tarifa se calcula para varios tipos de acciones, como el envío
de transacciones, la inclusión en bloques y la retransmisión por nodos. Las tarifas no están fijadas por el protocolo Bitcoin y
no son obligatorias; incluso una transacción sin cargo se procesará a su debido tiempo, pero puede llevar mucho tiempo.
Contratos
Como se define en la guía para desarrolladores del núcleo de bitcoin, los contratos son básicamente transacciones
que utilizan el sistema bitcoin para hacer cumplir un acuerdo financiero. Esta es una definición simple pero tiene
consecuencias de gran alcance, ya que permite a los usuarios diseñar contratos complejos que se pueden usar en
muchos escenarios del mundo real. Los contratos permiten el desarrollo de una plataforma completamente descentralizada,
independiente y de riesgo reducido. Se pueden construir varios contratos, como canales de depósito en garantía, arbitraje y
micropagos, utilizando el lenguaje de secuencias de comandos de bitcoin. La implementación actual de un script es muy
limitada, pero aún es posible desarrollar varios tipos de contratos. Por ejemplo, la liberación de fondos solo si varias partes
firman la transacción o tal vez la liberación de fondos solo después de que haya transcurrido cierto tiempo. Ambos escenarios
se pueden realizar utilizando multiSig y opciones de tiempo de bloqueo de transacciones.
Maleabilidad de la transacción
La maleabilidad de las transacciones en bitcoin se introdujo debido a un error en la implementación de bitcoin. Debido a este
error, es posible que un adversario cambie la ID de transacción de una transacción, lo que da como resultado un escenario
en el que parecería que cierta transacción no se ha ejecutado. Esto puede permitir escenarios en los que pueden ocurrir
depósitos o retiros dobles. En otras palabras, este error permite cambiar la ID única de una transacción de bitcoin antes de
que se confirme.
Si la identificación se cambia antes de la confirmación, parecería que la transacción no se realizó en absoluto, lo que
puede permitir depósitos dobles o ataques de retiro.
Grupos de transacciones
También conocidos como grupos de memoria, estos grupos se crean básicamente en la memoria local por parte de los nodos
para mantener una lista temporal de transacciones que aún no se han confirmado en un bloque. Las transacciones son
Machineen
incluidos Translated
un bloquebydespués
Google de pasar la verificación y en función de su prioridad.
Verificación de transacciones
Este proceso de verificación lo realizan los nodos bitcoin. Lo siguiente se describe en la guía para desarrolladores de bitcoin:
7. Rechazar transacciones no estándar ; por ejemplo, ScriptSig solo puede insertar números en
la pila. ScriptPubkey no pasa las comprobaciones de isStandard() .
8. Se rechaza una transacción si ya existe una transacción coincidente en el grupo o en un bloque en el
rama principal.
9. La transacción será rechazada si la salida referenciada para cada entrada existe en cualquier otra
transacción en el pool.
10. Para cada entrada, debe existir una transacción de salida referenciada. Esto se busca en la rama principal y en el grupo
de transacciones para encontrar si falta la transacción de salida para alguna entrada, y esto se considerará una
transacción huérfana. Se agregará al grupo de transacciones huérfanas si aún no hay una transacción coincidente en
el grupo.
11. Para cada entrada, si la transacción de salida referenciada es el coinbase, debe tener al menos 100 confirmaciones; de
lo contrario, la transacción será rechazada.
12. Para cada entrada, si la salida a la que se hace referencia no existe o ya se ha gastado, la transacción
será rechazado.
13. Usando las transacciones de salida a las que se hace referencia para obtener valores de entrada, verifique que cada valor de entrad
como suma, está en el rango permitido de 0-21 millones de BTC.
14. Rechazar la transacción si la suma de los valores de entrada es menor que la suma de los valores de salida.
15. Rechace la transacción si la tarifa de transacción fuera demasiado baja para entrar en un bloque vacío.
Machine Translated by Google
cadena de bloques
Blockchain es un libro público de una lista inmutable, ordenada y con marca de tiempo de todas las transacciones
en la red de bitcoin. Cada bloque se identifica mediante un hash en la cadena y se vincula a su bloque anterior
haciendo referencia al hash del bloque anterior.
80 Encabezado de bloque Esto incluye campos del encabezado del bloque descrito en la siguiente sección.
variable Contador de transacciones El campo contiene el número total de transacciones en el bloque, incluida la transacción coinbase.
4 Versión El número de versión del bloque que dicta las reglas de validación del bloque a seguir.
hash de encabezado
32 Este es un hash doble SHA256 del encabezado del bloque anterior.
de bloque anterior
32 hash raíz de merkle Se trata de un hash SHA256 doble del árbol merkle de todas las transacciones incluidas en el bloque.
Este campo contiene el tiempo de creación aproximado del bloque en el formato de tiempo de época de Unix. Más precisamente, este es el momento en que
4 marca de tiempo
el minero comenzó a codificar el encabezado (el tiempo desde el punto de vista del minero).
4 Mientras tanto Este es un número arbitrario que los mineros cambian repetidamente para producir un hash que cumpla con el umbral objetivo de dificultad.
Machine Translated by Google
Como se muestra en el diagrama anterior, blockchain es una cadena de bloques en la que cada bloque está
vinculado a su bloque anterior haciendo referencia al hash del encabezado del bloque anterior. Esta vinculación
asegura que no se pueda modificar ninguna transacción a menos que el bloque que la registra y todos los bloques
que le siguen también se modifiquen. El primer bloque no está vinculado a ningún bloque anterior y se conoce como
Machine Translated by Google
El bloque de génesis
Este es el primer bloque en la cadena de bloques de bitcoin. El bloque de génesis fue codificado en el software
central de bitcoin. Está en el archivo chainparams.cpp .
https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp
Bitcoin brinda protección contra el doble gasto al hacer cumplir reglas estrictas sobre la verificación de
transacciones y la minería. Los bloques se agregan en la cadena de bloques solo después de una verificación
estricta de las reglas y una solución exitosa de Prueba de trabajo. La altura del bloque es el número de bloques
antes de un bloque en particular en la cadena de bloques. La altura actual (al momento de escribir esto) de la cadena d
La prueba de trabajo se utiliza para proteger la cadena de bloques. Cada bloque contiene una o más transacciones,
de las cuales la primera transacción es una transacción de base de monedas. Existe una condición especial para
las transacciones de coinbase que impide que se gasten hasta al menos 100 bloques para evitar una situación en la
que el bloque pueda declararse obsoleto más adelante.
Los bloques obsoletos se crean cuando se resuelve un bloque y todos los demás mineros que todavía están
trabajando para encontrar una solución al rompecabezas hash están trabajando en ese bloque. Los acertijos de
minería y hash se discutirán en detalle más adelante en el capítulo. Como ya no es necesario trabajar en el bloque,
se considera un bloque obsoleto.
Los bloques huérfanos también se denominan bloques separados y fueron aceptados en un momento dado por la
red como bloques válidos, pero fueron rechazados cuando se creó una cadena más larga comprobada que no incluía
este bloque aceptado inicialmente. No forman parte de la cadena principal y pueden ocurrir en momentos en que dos
mineros logran producir los bloques al mismo tiempo.
La última versión del bloque es la versión 4, que se propuso con BIP65 y se ha utilizado desde el cliente
central de bitcoin 0.11.2 desde la implementación de BIP9 bits en el campo nVersion que se utilizan para indicar
cambios de bifurcación suave.
Debido a la naturaleza distribuida de bitcoin, las bifurcaciones de red pueden ocurrir de forma natural. En los
casos en que dos nodos anuncien simultáneamente un bloque válido, puede resultar en una situación en la que
haya dos cadenas de bloques con transacciones diferentes. Esta es una situación indeseable, pero la red bitcoin
solo puede abordarla aceptando la cadena más larga. En este caso, la cadena más pequeña se considerará huérfana.
Si un adversario logra obtener el 51 % del control del hashrate de la red (cómputo
Machine
poder), Translated
entonces by Google
pueden imponer su propia versión del historial de transacciones.
Las bifurcaciones en blockchain pueden ocurrir con la introducción de cambios en el protocolo de Bitcoin. En el caso de una
bifurcación suave, solo los bloques válidos anteriores ya no son aceptables, lo que hace que la bifurcación suave sea
compatible con versiones anteriores. En el caso de una bifurcación suave, solo los mineros deben actualizarse al nuevo
software de cliente para hacer uso de las nuevas reglas de protocolo. Las actualizaciones planificadas no necesariamente
crean bifurcaciones porque todos los usuarios ya deberían haberse actualizado. Una bifurcación dura, por otro lado, invalida
bloques previamente válidos y requiere que todos los usuarios actualicen. A veces se agregan nuevos tipos de transacciones
como una bifurcación suave, y cualquier cambio, como un cambio en la estructura del bloque o cambios importantes en el proto
El tamaño actual de la cadena de bloques de bitcoin al 4 de febrero de 2017 es de aproximadamente 101 GB.
La siguiente figura muestra el aumento de tamaño de blockchain en función del tiempo:
Se agregan nuevos bloques a la cadena de bloques aproximadamente cada 10 minutos y la dificultad de la red se ajusta
dinámicamente cada 2016 bloques para mantener una adición constante de nuevos bloques a la red.
La dificultad y el objetivo son intercambiables y representan lo mismo. El objetivo anterior representa el valor objetivo
anterior y el tiempo es el tiempo empleado en generar bloques anteriores de 2016. La dificultad de la red básicamente
significa lo difícil que es para los mineros encontrar un nuevo bloque, es decir, lo difícil que es ahora el rompecabezas hash.
Aproximadamente se crea (se extrae) un nuevo bloque cada 10 minutos. Los mineros son recompensados con nuevas
monedas si crean nuevos bloques y se les pagan tarifas de transacción a cambio de incluir transacciones en sus
bloques. Los nuevos bloques se crean a una tasa fija aproximada. Además, la tasa de creación de nuevos bitcoins
disminuye en un 50 %, cada 210 000 bloques, aproximadamente cada 4 años. Cuando se introdujo inicialmente bitcoin,
la recompensa por bloque era de 50 bitcoins; luego, en 2012, se redujo a 25 bitcoins. En julio de 2016, esto se redujo
aún más a 12,5 monedas (12 monedas) y se estima que la próxima reducción será el 4 de julio de 2020. Esto reducirá
aún más la recompensa de monedas a aproximadamente seis monedas.
Aproximadamente se generan 144 bloques, es decir, 1.728 bitcoins por día. La cantidad de monedas reales puede
variar por día; sin embargo, el número de bloques se mantiene en 144 por día. El suministro de Bitcoin también es
limitado y en 2140, se crearán finalmente casi 21 millones de bitcoins y no se podrán crear nuevos bitcoins después
de eso. Sin embargo, los mineros de Bitcoin aún podrán beneficiarse del ecosistema cobrando tarifas de transacción.
Una vez que un nodo se conecta con la red de bitcoin, hay varias tareas que realiza un minero de bitcoin.
Validación de transacciones: las transacciones transmitidas en la red son validadas por nodos completos al
verificar y validar firmas y salidas.
Validación de bloques: los mineros y los nodos completos pueden comenzar a validar los bloques que
reciben evaluándolos según ciertas reglas. Esto incluye la verificación de cada transacción en el bloque junto
con la verificación del valor de nonce.
Crear un nuevo bloque: los mineros proponen un nuevo bloque combinando transacciones emitidas en la red
después de validarlas.
Realizar prueba de trabajo: esta tarea es el núcleo del proceso de minería y aquí es donde los mineros
encuentran un bloque válido al resolver un rompecabezas computacional. El encabezado del bloque contiene un
campo nonce de 32 bits y los mineros deben variar repetidamente el nonce hasta que el hash resultante sea
menor que un objetivo predeterminado.
Obtener recompensa: una vez que un nodo resuelve el rompecabezas hash, transmite inmediatamente los resultados
Machine
otrosTranslated
nodos lobyverifican
Google y aceptan el bloque. Existe una pequeña posibilidad de que otros mineros no acepten
el bloque recién acuñado debido a un choque con otro bloque encontrado aproximadamente al mismo tiempo,
pero una vez aceptado, el minero es recompensado con 12.5 bitcoins (a partir de 2016) y cualquier otro bloque
asociado. tarifas de transacción.
Prueba de trabajo
Esta es una prueba de que se han gastado suficientes recursos computacionales para construir un bloque válido.
La prueba de trabajo (PoW) se basa en la idea de que se selecciona un nodo aleatorio cada vez que se crea un nuevo
bloque. En este modelo, los nodos compiten entre sí para ser seleccionados en proporción a su capacidad de
cómputo. La siguiente ecuación resume el requisito de Prueba de trabajo en bitcoin:
Donde N es un nonce, P_hash es un hash del bloque anterior, Tx representa transacciones en el bloque y Target es
el valor de dificultad de la red objetivo. Esto significa que el hash de los campos concatenados mencionados
anteriormente debe ser menor que el valor hash de destino. La única forma de encontrar este nonce es el método de
fuerza bruta. Una vez que un minero cumple con un cierto patrón de un cierto número de ceros, el bloque es
inmediatamente transmitido y aceptado por otros mineros.
El algoritmo de minería
258522748404.5154
Machine Translated by Google
La tasa de hash
La tasa de hash básicamente representa la tasa de cálculo de hash por segundo. En los primeros
días de bitcoin, solía ser bastante pequeño ya que se usaban CPU, pero ahora con grupos de minería
dedicados y ASIC, esto ha aumentado exponencialmente en los últimos años. Esto ha resultado en una may
El siguiente gráfico de tasa de hash muestra el aumento de la tasa de hash a lo largo del tiempo y
actualmente se mide en hashes Exa. Esto significa que en 1 segundo, los mineros de la red bitcoin
calculan más de 1 000 000 000 000 000 000 hashes por segundo.
UPC
La minería de CPU fue el primer tipo de minería disponible en el cliente bitcoin original. Los usuarios podrían
incluso usar computadoras portátiles o de escritorio para extraer bitcoins. La minería de CPU ya no es rentable
y ahora se utilizan métodos de minería más avanzados, como la minería basada en ASIC.
GPU
Debido a la mayor dificultad de la red bitcoin y la tendencia general de encontrar métodos más rápidos para
minar, los mineros comenzaron a usar GPU o tarjetas gráficas disponibles en las PC para realizar la minería.
Las GPU admiten cálculos más rápidos y en paralelo que generalmente se programan con el lenguaje OpenCL.
Esta resultó ser una opción más rápida en comparación con las CPU. Los usuarios también utilizaron
técnicas como el overclocking para obtener el máximo beneficio de la potencia de la GPU. Además, la
posibilidad de utilizar varias tarjetas gráficas aumentó la popularidad del uso de tarjetas gráficas para la
minería de bitcoins. Sin embargo, la minería de GPU tiene algunas limitaciones, como el sobrecalentamiento y el
requisito de placas base especializadas y hardware adicional para albergar varias tarjetas gráficas.
FPGA
Incluso la minería GPU no duró mucho, y pronto los mineros encontraron otra forma de realizar la minería
utilizando FPGA. Field Programmable Gate Array (FPGA) es básicamente un circuito integrado que se
puede programar para realizar operaciones específicas. Los FPGA generalmente se programan en lenguajes
de descripción de hardware (HDL), como Verilog y VHDL. Double SHA256 se convirtió rápidamente en una
tarea de programación atractiva para los programadores de FPGA y también comenzaron varios proyectos de códi
FPGA ofreció un rendimiento mucho mejor en comparación con las GPU; sin embargo, problemas como la
accesibilidad, la dificultad de programación y el requisito de conocimientos especializados para programar y
configurar FPGA dieron como resultado una corta vida de la era FPGA para la minería de bitcoin. Además, la
llegada de los ASIC resultó en la rápida eliminación de los sistemas basados en FPGA para la minería. El
hardware de minería como el minero X6500, Ztex e Icarus se desarrollaron durante el tiempo en que la minería de
FPGA era rentable. Varios fabricantes de FPGA, como Xilinx y Altera, producen placas de desarrollo y hardware
de FPGA que se pueden usar para programar algoritmos de minería.
ASIC
El circuito integrado específico de la aplicación (ASIC) fue diseñado para realizar la operación SHA-256.
Estos chips especiales fueron vendidos por varios fabricantes y ofrecían una tasa de hash muy alta. Esto
funcionó durante algún tiempo, pero debido al rápido aumento del nivel de dificultad de minería, los ASIC de una s
yaMachine Translated by Google
no es rentable.
Actualmente, la minería está fuera del alcance de los individuos y ahora los centros de minería
profesional que utilizan miles de unidades ASIC en paralelo están ofreciendo contratos de minería a los
usuarios para realizar la minería en su nombre. No hay limitación técnica, es por eso que un solo usuario
no puede ejecutar miles de ASIC en paralelo, pero requerirá centros de datos y hardware dedicados y el
costo para una sola persona puede volverse prohibitivo.
Un grupo de minería se forma cuando los mineros del grupo trabajan juntos para extraer un bloque. El
administrador del grupo recibe la transacción de la base de monedas si el bloque se extrae con éxito, y luego es
responsable de distribuir la recompensa al grupo de mineros que invirtieron recursos para extraer el bloque.
Esto es rentable en comparación con la minería en solitario, donde solo un único minero intenta resolver la
función de inversión de hash parcial (hash puzzle) porque en los pools de minería, la recompensa se paga a
cada miembro del pool independientemente de si ellos (más específicamente, su nodo individual) resolvió el rompe
Hay varios modelos que un administrador de grupo minero puede usar para pagar a los mineros, como el
modelo de pago por acción y el modelo proporcional. En el modelo de pago por acción, el administrador del
pool de minería paga una tarifa fija a todos los mineros que participaron en el ejercicio de minería, mientras
que en el modelo proporcional, la participación se calcula en función de la cantidad de recursos informáticos
gastados para resolver el rompecabezas hash.
Muchos grupos comerciales ahora existen y brindan contratos de servicios de minería a través de la nube e
interfaces web fáciles de usar. Los más utilizados son AntPool, F2Pool y BW.COM. En la siguiente imagen se
muestra una comparación del poder de hash para todos los grupos de minería principales:
La centralización de la minería es una preocupación importante que puede ocurrir si un grupo logra controlar más
del 51 % de la red al generar más del 51 % de la tasa de hash de la red bitcoin. Como se discutió anteriormente en e
Machinede
sección Translated by Google
introducción, el ataque del 51% puede resultar en ataques de doble gasto, y puede afectar el
consenso y, de hecho, imponer otra versión del historial de transacciones en la red de bitcoin.
Esto sucedió una vez en la historia de bitcoin, cuando GHash.IO, un gran grupo minero, logró adquirir
, como
más del 51% de la capacidad de la red. En el mundo académico se han propuesto soluciones
la pruebateóricas,
de trabajo de
dos fases, para desincentivar los grandes consorcios mineros. Este esquema presenta un segundo
rompecabezas criptográfico que da como resultado que los grupos de minería revelen sus claves privadas o
proporcionen una parte considerable del hashrate de su grupo de minería, lo que reduce el hashrate general
del grupo.
Varios tipos de hardware están disponibles comercialmente para propósitos de minería. Actualmente, el
más rentable es la minería ASIC, y varios proveedores ofrecen hardware especializado. La minería en solitario
no es muy rentable ahora a menos que se gaste una gran cantidad de dinero y energía para construir su propia
plataforma o incluso centro de minería. Con el factor de dificultad actual (octubre de 2016), si un usuario logra
producir una tasa de hash de 12 TH/s, puede esperar ganar 0.01366887 BTC (alrededor de $ 8) por día, que es
muy bajo en comparación con la inversión requerida para fuente el equipo que puede producir 12 TH.
Incluyendo los costos de funcionamiento como la electricidad, esto resulta no ser muy rentable.
Machine Translated by Google
la red bitcoin
La red bitcoin es una red P2P donde los nodos intercambian transacciones y bloques. Hay diferentes tipos de nodos
en la red. Hay dos tipos principales de nodos, nodos completos y nodos SPV. Los nodos completos, como su nombre
lo indica, son implementaciones de clientes centrales de bitcoin que realizan las funciones de billetera, minero,
almacenamiento completo de blockchain y enrutamiento de red. Sin embargo, no es necesario realizar todas estas
funciones. Los nodos SPV o los clientes ligeros solo realizan funciones de billetera y enrutamiento de red. La última versión
del protocolo Bitcoin es 70014 y se introdujo con el cliente central de bitcoin 0.13.0.
Algunos nodos prefieren ser solo nodos de blockchain completos y contener blockchain completos y realizar funciones
de enrutamiento de red, pero no realizan minería ni almacenan claves privadas (la función de billetera).
Otro tipo son los nodos mineros en solitario que pueden realizar minería, almacenar blockchain completa y actuar como
un nodo de enrutamiento de red bitcoin.
Hay algunos nodos no estándar pero muy utilizados que se denominan servidores de protocolo de grupo. Estos
nodos hacen uso de protocolos alternativos, como el protocolo de estrato. Algunos nodos realizan solo funciones de
minería y se denominan nodos de minería. Los nodos que solo calculan hashes utilizan el protocolo de estrato para
enviar sus soluciones al grupo de minería. Es posible ejecutar un cliente SPV que ejecute una billetera y una función de
enrutamiento de red sin una cadena de bloques.
La mayoría de los protocolos en Internet se basan en líneas, lo que significa que cada línea está delimitada por un retorno
de carro y un carácter de nueva línea \r \n . Stratum también es un protocolo basado en línea que utiliza sockets TCP
simples y JSON-RPC legible por humanos para operar y comunicarse entre nodos.
La red Bitcoin se identifica por sus diferentes valores mágicos. Se muestra una lista de la siguiente manera:
Los valores mágicos se utilizan para indicar la red de origen del mensaje.
Un nodo completo realiza cuatro funciones: billetera, minero, cadena de bloques y el nodo de enrutamiento de la red.
Machinese
Cuando Translated
inicia unby nodo
Googlecentral de bitcoin, primero, inicia el descubrimiento de todos los pares. Esto se
logra consultando las semillas de DNS que están codificadas en el cliente central de bitcoin y son
mantenidas por miembros de la comunidad de bitcoin. Esta búsqueda devuelve una cantidad de registros
DNS A. El protocolo bitcoin funciona en el puerto TCP 8333 por defecto para la red principal y TCP 18333 para
DNSSeeds en chainparams.cpp
Primero, el cliente envía un mensaje de protocolo Versión que contiene varios campos, como versión,
servicios, marca de tiempo, dirección de red, nonce y algunos otros campos. El nodo remoto responde con
su propio mensaje de versión seguido de intercambio de mensajes verack entre ambos nodos, indicando
que se ha establecido la conexión.
Después de esto, se intercambian mensajes Getaddr y addr para encontrar los pares que el cliente no conoce.
Mientras tanto, cualquiera de los nodos puede enviar un mensaje de ping para ver si la conexión aún está activ
Ahora puede comenzar la descarga del bloque. Si el nodo ya tiene todos los bloques completamente
sincronizados, escucha nuevos bloques usando el mensaje del protocolo Inv ; de lo contrario, primero
verifica si tiene una respuesta a los mensajes inv y si ya tiene inventarios. En caso afirmativo, solicita los
bloques utilizando el mensaje del protocolo Getdata ; si no, solicita inventarios mediante el mensaje
GetBlocks . Este método se utilizó hasta la versión 0.9.3.
Machine Translated by Google
La descarga del bloque inicial puede usar los bloques primero o el método de encabezados primero para
sincronizar bloques según la versión del cliente central de bitcoin. El método de bloques primero es muy lento y se
suspendió desde la versión 0.10.0.
Desde la versión 0.10.0, se introdujo el método de descarga de bloque inicial llamado headers-first. Esto dio como
resultado una mejora importante en el rendimiento y la sincronización de la cadena de bloques, que solía tardar días en
completarse, empezó a tardar solo unas pocas horas. La idea central es que el nuevo nodo primero pide a los pares
Machine Translated
encabezados by Google
de bloques y los valida. Una vez que esto se completa, los bloques se solicitan en paralelo
de todos los pares disponibles, ya que el modelo de la cadena completa ya se ha descargado en forma de
cadena de encabezado de bloque.
En este método, cuando el cliente se inicia, verifica si la cadena de bloques ya está completamente
sincronizada si la cadena de encabezado ya está sincronizada; si no, que es el caso la primera vez que se
inicia el cliente, solicita encabezados de otros pares mediante el mensaje getHeaders . Si la cadena de
bloques está completamente sincronizada, escucha nuevos bloques a través de mensajes Inv , y si ya tiene
una cadena de encabezado completamente sincronizada, solicita bloques mediante mensajes del protocolo
Getdata . El nodo también verifica si la cadena de encabezados tiene más encabezados que bloques y luego
solicita bloques emitiendo el mensaje de protocolo Getdata .
Bitcoin Core Client >= 0.10.0 encabezado y sincronización de bloques, IBD = descarga de bloque inicial y
Machine
nodo Translated by Google
de sincronización significa el nodo desde donde se solicitan los bloques
Los RPC getblockchaininfo y getpeerinfo se actualizaron con una nueva funcionalidad para adaptarse a este cambio.
Se utiliza un RPC, getchaintips, para enumerar todas las ramas conocidas de la cadena de bloques. Esto también
incluye bloques de solo encabezados. Getblockchaininfo se utiliza para proporcionar información sobre el estado
actual de la cadena de bloques. Getpeerinfo se usa para enumerar tanto la cantidad de bloques como los
encabezados que son comunes entre pares.
Wireshark también se puede usar para visualizar el intercambio de mensajes entre pares y puede servir como
una herramienta invaluable para aprender sobre el protocolo Bitcoin. Aquí se muestra una muestra. Este es un
ejemplo básico que muestra los mensajes de versión, verack, getaddr, ping, addr e inv.
En los detalles, se puede ver información valiosa como el tipo de paquete, el nombre del comando y los
resultados de los mensajes del protocolo.
Aquí se muestra un gráfico de protocolo que muestra el flujo de datos entre los dos pares. Esto puede ayudarlo a
comprender cuándo se inicia un nodo y qué tipo de mensajes se utilizan.
En el siguiente ejemplo, el disector bitcoin se utiliza para analizar el tráfico e identificar los comandos del protocolo
Bitcoin.
El intercambio de mensajes como la versión, getaddr y getdata se puede ver en el siguiente ejemplo junto
con el comentario apropiado que describe el nombre del mensaje. Este ejercicio puede ser muy
útilMachine Translated
para aprender by Google
bitcoin y se recomienda que los experimentos se lleven a cabo en la red de prueba de bitcoin, donde
se pueden enviar varios mensajes y transacciones a través de la red y luego ser analizados por Wireshark.
Hay 27 tipos de mensajes de protocolo en total, pero es probable que aumenten con el tiempo a medida que crece el
protocolo. Los mensajes de protocolo más utilizados y su explicación se enumeran a continuación:
Versión: este es el primer mensaje que un nodo envía a la red, publicitando su versión y número de bloques. El nodo
remoto luego responde con la misma información y luego se establece la conexión.
Getblocks: esto devuelve un paquete inv que contiene la lista de todos los bloques que comienzan después del
último hash conocido o 500 bloques.
Estos filtros son utilizados principalmente por clientes SPV de verificación de pago simple para solicitar
transacciones y los bloques Merkle que les interesan. Un bloque Merkle es una versión ligera del bloque, que
incluye un encabezado de bloque, algunos hashes, una lista de indicadores de 1 bit. y un recuento de
transacciones. Esta información se puede usar para construir un árbol Merkle. Esto se logra mediante la
creación de un filtro que coincida solo con las transacciones y los bloques solicitados por el cliente SPV. Una
vez que se han intercambiado los mensajes de versión y se ha establecido la conexión entre pares, los nodos
pueden establecer filtros de acuerdo con sus requisitos. Estos filtros probabilísticos ofrecen un grado variable
de privacidad o precisión según la precisión o la precisión con la que se hayan establecido. Un filtro de
floración estricto solo filtrará las transacciones que haya solicitado el nodo, pero a expensas de la posibilidad
de revelar las direcciones de los usuarios a los adversarios que pueden correlacionar las transacciones con
sus direcciones IP, comprometiendo así la privacidad. Por otro lado, un filtro poco definido puede resultar en
la recuperación de más transacciones no relacionadas pero ofrecerá más privacidad. Además, para los clientes
de SPV, los filtros de floración les permiten usar un ancho de banda bajo en lugar de descargar todas las transac
BIP 37 propuso la implementación de bitcoin de filtros de floración e introdujo tres nuevos mensajes en
el protocolo de Bitcoin.
Filterload: Esto se usa para establecer el filtro de floración en la conexión.
Filteradd: esto agrega un nuevo elemento de datos al filtro actual.
FilterClear: esto elimina el filtro cargado actualmente.
Las claves privadas se pueden generar de diferentes maneras y son utilizadas por diferentes tipos de billeteras. Las billeteras
no almacenan monedas, y no existe el concepto de que las billeteras almacenen saldo o monedas para un usuario. De hecho,
en la red bitcoin no existen monedas ; en cambio, solo la información de la transacción se almacena en la cadena de bloques
(más precisamente, UTXO, salidas no gastadas), que luego se utilizan para calcular la cantidad de bitcoins.
Tipos de billetera
En bitcoin, existen diferentes tipos de billeteras que se pueden usar para almacenar claves privadas. Como programa de
software, también brindan algunas funciones a los usuarios para administrar y realizar transacciones en la red bitcoin.
Monederos no deterministas
Estas carteras contienen claves privadas generadas aleatoriamente y también se denominan carteras Just a Bunch of
Key. El cliente central de bitcoin genera algunas claves cuando se inicia por primera vez y genera claves cuando es
necesario. Administrar una gran cantidad de llaves es muy difícil y un proceso propenso a errores puede provocar el robo y
la pérdida de monedas. Además, es necesario crear copias de seguridad periódicas de las claves y protegerlas adecuadamente
para evitar robos o pérdidas.
Carteras deterministas
En este tipo de billetera, las claves se derivan de un valor inicial a través de funciones hash. Este número inicial se
genera aleatoriamente y se representa comúnmente mediante palabras de código mnemotécnico legibles por humanos .
Las palabras de código mnemotécnico se definen en BIP39. Esta frase se puede utilizar para recuperar todas las claves y
hace que la gestión de claves privadas sea comparativamente más fácil.
Definidas en BIP32 y BIP44, las billeteras HD almacenan claves en una estructura de árbol derivada de una semilla. La semilla
genera la clave principal (clave maestra), que se utiliza para generar claves secundarias y, posteriormente, claves secundarias.
La generación de claves en carteras HD no genera claves directamente; en su lugar, produce cierta información (información
de generación de claves privadas) que se puede utilizar para generar una secuencia de claves privadas. La jerarquía completa
de claves privadas en una billetera HD es fácilmente recuperable si se conoce la clave privada maestra. Es por esta propiedad
que las billeteras HD son muy fáciles de mantener
Machine
y son Translated
altamente by Google
portátiles.
Carteras de cerebro
La clave privada maestra también se puede derivar del hash de las contraseñas que se memorizan. La idea clave es que esta frase de
contraseña se use para derivar la clave privada y, si se usa en billeteras HD, esto puede dar como resultado una billetera HD completa
que se deriva de una única contraseña memorizada. Esto se conoce como billetera cerebral.
Este método es propenso a adivinar contraseñas y ataques de fuerza bruta, pero se pueden usar técnicas como el
estiramiento de claves para ralentizar el progreso realizado por el atacante.
Carteras de papel
Como su nombre lo indica, esta es una billetera de papel con el material clave requerido impreso en ella. Requiere seguridad
física para su almacenamiento. Las billeteras de papel se pueden generar en línea a partir de varios proveedores de servicios, como
https://bitcoinpaperwallet.com/ o https://www.bitaddress.org/.
Carteras de hardware
Otro método es usar un dispositivo a prueba de manipulaciones para almacenar las llaves. Este dispositivo a prueba de manipulaciones
puede fabricarse a medida o, con la llegada de los teléfonos habilitados para NFC, también puede ser un elemento seguro (SE) en los
teléfonos NFC. Las billeteras Trezor y Ledger (varios tipos) son las billeteras de hardware de bitcoin más utilizadas.
Monedero Trezor
Carteras en línea
Las billeteras en línea, como su nombre lo indica, se almacenan completamente en línea y se brindan como un servicio generalmente
a través de la nube. Proporcionan una interfaz web a los usuarios para administrar sus billeteras y realizar diversas funciones, como
realizar y recibir pagos. Son fáciles de usar pero implican que el usuario confíe en el proveedor del servicio de billetera en línea.
billeteras móviles
Las billeteras móviles, como su nombre indica, se instalan en dispositivos móviles. Pueden proporcionar varios métodos para
realizar pagos, sobre todo la capacidad de usar cámaras de teléfonos inteligentes para escanear códigos QR
Machine Translated
rápidamente by Google
y hacer pagos. Las billeteras móviles están disponibles para la plataforma Android
e iOS, por ejemplo, billetera, copago y Jaxx.
Las empresas pueden usar la siguiente captura de pantalla para anunciar que pueden aceptar bitcoins como pago.
Varias soluciones de pago, como xbterminal y terminal POS bitcoin de 34 bytes, están disponibles
comercialmente.
Se han propuesto y finalizado varios BIP para introducir y estandarizar los pagos de bitcoin. En particular, BIP 70
(protocolo de pago seguro) describe el protocolo para la comunicación segura entre un comerciante y los clientes.
Este protocolo utiliza certificados X.509 para la autenticación y se ejecuta en HTTP y HTTPS. Hay tres mensajes
en este protocolo: PaymentRequest, Payment y PaymentACK. Las características clave de esta propuesta son la
defensa contra ataques de intermediarios y la prueba de pago segura. Los ataques de hombre en el medio pueden
resultar en un escenario donde el atacante está sentado entre el comerciante y el comprador y al comprador le parecería
que está hablando con el comerciante, pero de hecho, el hombre en el medio está interactuando con el comprador en
lugar del comerciante. Esto puede resultar en la manipulación de la dirección de bitcoin del comerciante para defraudar
al comprador.
También se han propuesto varios otros BIP, como BIP71 y BIP72, para estandarizar la encapsulación de mensajes de
pago y el esquema de URI para admitir BIP70.
Bitcoin lightning network, una solución para pagos instantáneos escalables fuera de la cadena, se introdujo a principios de
2016, lo que permite pagos fuera de la cadena de bloques. La red utiliza canales de pago que se ejecutan fuera de la cadena
de bloques. Esto permite una mayor velocidad y escalabilidad de bitcoin. Este documento está disponible en https://
lightning.network/ y se alienta a los lectores interesados a leer el documento para comprender la teoría y la justificación
detrás de esta invención.
Machine Translated by Google
Bitcoin inversión y compra y venta de bitcoins
Hay muchos intercambios en línea donde los usuarios pueden comprar y vender bitcoins. Este es un gran negocio en
Internet ahora y ofrece comercio de bitcoins, CFD, apuestas de margen, comercio de margen y varias otras opciones. Los
comerciantes pueden comprar bitcoins o operar abriendo posiciones largas o cortas para obtener ganancias cuando el
precio de bitcoin sube o baja. También son posibles varias otras características, como el intercambio de bitcoins por otras
monedas virtuales, y muchos intercambios de bitcoins en línea brindan esta función. También se encuentran disponibles
datos de mercado avanzados, estrategias comerciales, gráficos y datos relevantes para ayudar a los operadores. Aquí se
muestra un ejemplo de CEX.IO. Otros intercambios ofrecen tipos de servicios similares.
La siguiente captura de pantalla muestra el libro de pedidos en el intercambio donde se enumeran todos los pedidos
de compra y venta:
Aquí se muestra una ejecución de muestra de la instalación del núcleo de bitcoin en Ubuntu; para otras plataformas
puede obtener detalles en www.bitcoin.org.
Machine Translated by Google
Paso 2:
Dependiendo del cliente requerido, los usuarios pueden usar cualquiera de los siguientes comandos, o
pueden ejecutar ambos comandos a la vez:
.......
El código fuente de bitcoin se puede descargar y compilar si los usuarios desean participar en el código de
bitcoin o con fines de aprendizaje. Git se puede usar para descargar el código fuente de bitcoin:
$ mkdir bcsource
$ cd bcsource
Clonación en 'bitcoin'...
drequinox@drequinox-OP7010:~/bcsource$
drequinox@drequinox-OP7010:~/bcsource$ cd bitcoin
drequinox@drequinox-OP7010:~/bcsource/bitcoin$ ./autogen.sh
drequinox@drequinox-OP7010:~/bcsource/bitcoin$ ./configure.sh
drequinox@drequinox-OP7010:~/bcsource/bitcoin$ hacer
Configurando bitcoin.conf
El archivo bitcoin.conf es un archivo de configuración que utiliza el cliente principal de bitcoin para guardar los
ajustes de configuración. Todas las opciones de la línea de comandos para el cliente bitcoind, con la excepción
del interruptor -conf , se pueden configurar en el archivo de configuración, y cuando se inicie bitcoin-qt o
bitcoind, tomará la información de configuración de ese archivo.
En los sistemas Linux, esto generalmente se encuentra en $HOME/.bitcoin/, o también se puede especificar en la línea
de comando usando el interruptor -conf=<archivo> para el software de cliente principal de bitcoind.
Varios servicios de faucet están disponibles para la red de prueba de bitcoin. Un ejemplo es el sandbox de Bitcoin
TestNet, donde los usuarios pueden solicitar que se paguen bitcoins a su dirección de bitcoin de testnet. Se puede
acceder a esto a través de https://testnet.manu.backend.hamburg/. Esto es muy útil para experimentar con
transacciones en la red de prueba.
bitcoind --testnet-daemon
El modo regtest (modo de prueba de regresión) se puede utilizar para crear una cadena de bloques local para realizar pruebas
propósitos
Los siguientes comandos se pueden usar para iniciar un nodo en el modo de prueba de registro:
Los mensajes de registro relevantes se pueden ver en el directorio .bitcoin/regtest en un sistema Linux en debug.log.
8750.00000000
Bitcoind es el software de cliente central que se puede ejecutar como un demonio y proporciona la interfaz JSON RPC.
Bitcoin-cli es la herramienta rica en características de la línea de comandos para interactuar con el daemon; el daemon luego
interactúa con la cadena de bloques y realiza varias funciones. Bitcoin-cli llama solo a funciones JSON-RPC y no realiza
ninguna acción por sí solo en la cadena de bloques.
Machine Translated
Bitcoin-qt es la GUIby del
Google
cliente central de bitcoin. Cuando el software de la billetera se inicia primero,
verifica los bloques en el disco y luego se inicia y muestra la siguiente GUI:
Cliente Bitcoin Core QT, justo después de la instalación, que muestra que la cadena de bloques no está sincronizada
El proceso de verificación no es específico del cliente Bitcoin-qt; también lo realiza el cliente bitcoind .
Una ejecución de muestra de bitcoin-cli getinfo; el mismo formato se puede utilizar para invocar otros comandos
Se puede mostrar una lista de todos los comandos mediante el siguiente comando:
Testnet bitcoin-cli, estas son solo las primeras líneas de la salida, la salida real tiene muchos comandos
Machine
HTTP Translated
REST: a bypartir
Googledel cliente central de bitcoin 0.10.0, la interfaz HTTP REST también está
disponible. De forma predeterminada, se ejecuta en el mismo puerto TCP 8332 que JSON-RPC.
Machine Translated by Google
Programación de Bitcoin y la interfaz de línea de comandos
La programación de Bitcoin es un campo muy rico ahora. El cliente principal de bitcoin expone varios comandos
JSON RPC que se pueden usar para construir transacciones sin procesar y realizar otras funciones a través de
scripts o programas personalizados. Además, está disponible la herramienta de línea de comandos Bitcoin-cli, que
utiliza la interfaz JSON-RPC y proporciona un rico conjunto de herramientas para trabajar con Bitcoin.
Estas API también están disponibles a través de muchos proveedores de servicios en línea en forma de API de bitcoin
y proporcionan una interfaz HTTP REST simple. Las API de Bitcoin, como blockchain.info y bitpay, block.io y muchas
otras, ofrecen una gran variedad de opciones para desarrollar soluciones basadas en bitcoin.
Varias bibliotecas están disponibles para la programación de bitcoin. A continuación se muestra una lista, y aquellos
que estén interesados pueden seguir explorando las bibliotecas.
Hay muchas API de bitcoin en línea disponibles; Las API más utilizadas se enumeran a continuación:
https://bitcore.io/
https://bitcoinjs.org/
https://blockchain.info/api Todas las API ofrecen más o menos el mismo tipo de funcionalidad y resulta difícil
elegir qué API es la mejor.
Machine Translated by Google
Propuestas de mejora de Bitcoin (BIP)
Estos documentos se utilizan para proponer o informar a la comunidad bitcoin sobre las mejoras sugeridas,
los problemas de diseño o información sobre algunos aspectos del ecosistema bitcoin. Hay tres tipos de
propuestas de mejora de bitcoin, abreviadas como BIP:
BIP estándar: se utiliza para describir los principales cambios que tienen un gran impacto en el sistema
bitcoin, por ejemplo, cambios en el tamaño de bloque, cambios en el protocolo de red o cambios en la
verificación de transacciones.
Proceso BIP: una diferencia importante entre los BIP estándar y de proceso es que los BIP estándar
cubren los cambios de protocolo, mientras que los BIP de proceso generalmente se ocupan de
proponer un cambio en un proceso que está fuera del protocolo central de Bitcoin. Estos se implementan
solo después de un consenso entre los usuarios de bitcoin.
BIP informativo: por lo general, se usan solo para asesorar o registrar información sobre el ecosistema de
bitcoin, como problemas de diseño.
Machine Translated by Google
Resumen
Este capítulo introdujo bitcoin y conceptos relacionados. Comenzó con algo de historia y
definiciones básicas relacionadas con bitcoin. Se introdujeron conceptos como claves y direcciones
junto con claves públicas y claves privadas. También se discutió cómo funcionan las transacciones
en la red bitcoin (y conceptos relacionados como scripts, códigos de operación y tipos de
transacciones). Además, también se introdujo blockchain, que sustenta la red bitcoin. Junto con
eso, se presentaron conceptos relacionados como minería, prueba de trabajo, sistemas de minería
y billeteras. Finalmente, también se proporcionó información práctica sobre la configuración de
clientes bitcoin, el uso de bitcoin-cli y una introducción a las diferentes redes bitcoin. En el próximo
capítulo, se presentarán monedas alternativas y conceptos relacionados.
Machine Translated by Google
Capítulo 5. Monedas alternativas
Desde el éxito inicial de bitcoin, se han lanzado muchos proyectos de moneda alternativa. Bitcoin se lanzó en 2009
y el primer proyecto de moneda alternativa (llamado Namecoin) se introdujo en 2011. En 2013 y 2014, el mercado
de altcoin creció exponencialmente y se iniciaron muchos tipos diferentes de proyectos de monedas alternativas.
Algunos de ellos se convirtieron en un éxito, mientras que muchos fueron impopulares y no tuvieron éxito. Algunas
eran estafas de pump and dump que surgieron durante algún tiempo pero pronto desaparecieron.
Los enfoques alternativos a bitcoin se pueden dividir ampliamente en dos categorías, según el propósito principal
de su desarrollo. Si el objetivo principal es construir una plataforma blockchain descentralizada, se denominan
cadenas alternativas; si el único propósito del proyecto alternativo es introducir una nueva moneda virtual, se llama
altcoin. Las cadenas de bloques alternativas se analizarán en detalle en capítulos posteriores de este libro.
Este capítulo está dedicado principalmente a las monedas alternativas (altcoins) cuyo objetivo principal es introducir
una nueva moneda virtual (moneda), aunque también se presentará algún material sobre el tema de los protocolos
alternativos construidos sobre bitcoin para proporcionar varios servicios. Estos incluyen conceptos como Namecoin,
donde el objetivo principal es proporcionar servicios de identidad y nombres descentralizados en lugar de moneda.
Actualmente, a fines de 2016, hay cientos de altcoins en el mercado y tienen un cierto valor monetario.
Muchos de estos proyectos alternativos son bifurcaciones directas del código fuente de bitcoin, aunque algunos
de ellos se han escrito desde cero. Algunas monedas alternativas se propusieron abordar las limitaciones de
bitcoin, como la privacidad. Algunos otros ofrecen diferentes tipos de minería, cambios en los tiempos de bloqueo y
esquemas de distribución.
Por definición, se genera una altcoin en el caso de una bifurcación dura. Si bitcoin tiene una bifurcación dura,
entonces la otra cadena más antigua se considera efectivamente otra moneda. Sin embargo, no existe una regla
establecida sobre qué cadena se convierte en la altcoin. Esto sucedió recientemente con Ethereum, donde una
bifurcación dura provocó la aparición de una nueva moneda ETC (Ethereum classic) además de la moneda Ethereum
(ETH). Ethereum classic es la cadena antigua y Ether es la nueva cadena después de la bifurcación. Una bifurcación
dura tan polémica no es deseable por varias razones. Primero, va en contra del verdadero espíritu de descentralización
ya que la fundación Ethereum, una entidad central, decidió seguir adelante con la bifurcación aunque no todos
estuvieron de acuerdo con la propuesta; segundo, también divide a la comunidad de usuarios debido al desacuerdo
sobre la bifurcación dura. Aunque una bifurcación dura en teoría genera una moneda alternativa, está limitada en lo
que puede ofrecer debido al hecho de que, incluso si el cambio resulta en una bifurcación dura, por lo general no
hay cambios drásticos en torno a los parámetros fundamentales de la moneda. Por lo general, siguen siendo los
mismos. Por esta razón, es deseable escribir una nueva moneda desde cero o bifurcar el bitcoin (o el código fuente
de otra moneda) para crear una nueva moneda con los parámetros y características deseados.
Las altcoins deben poder atraer nuevos usuarios, comercios y mineros; de lo contrario, la moneda no tendrá
valor. La moneda gana su valor, especialmente en el espacio de la moneda virtual, debido al efecto de red y su
aceptabilidad por parte de la comunidad. Si una moneda no logra atraer suficientes usuarios, pronto será olvidada.
Se puede atraer a los usuarios proporcionando una cantidad inicial de monedas y se puede lograr mediante el uso de va
MachineLos
métodos. Translated
métodosby Google
para proporcionar un número inicial de altcoins se analizan a continuación:
Crear una nueva cadena de bloques: las altcoins pueden crear una nueva cadena de bloques y asignar monedas a los
mineros iniciales, pero este enfoque ahora es impopular debido a muchos esquemas de estafa o esquemas de bombeo y
descarga donde los mineros iniciales obtuvieron ganancias con el lanzamiento de una nueva moneda y luego desaparecieron.
Prueba de quema: Otro enfoque para asignar fondos iniciales a una nueva altcoin es la Prueba de quema, también
llamada fijación unidireccional o techo de precio. En este método, los usuarios destruyen de forma permanente una cierta
cantidad de bitcoins en proporción a la cantidad de altcoins a reclamar. Por ejemplo, si se destruyeron 10 bitcoins, las altcoins
pueden tener un valor no mayor que la cantidad de bitcoins destruidos. Básicamente, esto significa que los bitcoins se están
convirtiendo en altcoins quemándolos.
Prueba de propiedad: en lugar de destruir bitcoins de forma permanente, un método alternativo es demostrar que los
usuarios poseen una determinada cantidad de bitcoins. Esta prueba de propiedad se puede usar para reclamar altcoins
vinculando bloques de altcoin a bloques de bitcoin. Por ejemplo, esto se puede lograr mediante la minería combinada en la que,
efectivamente, los mineros de bitcoin pueden extraer bloques de altcoin mientras extraen bitcoin sin ningún trabajo adicional.
Cadenas laterales vinculadas: las cadenas laterales, como su nombre indica, son cadenas de bloques separadas de la red de
bitcoin, pero se pueden transferir bitcoins a ellas. Las altcoins también se pueden transferir de vuelta a la
Invertir y comercializar estas monedas alternativas también es un gran negocio, aunque no tan grande como Bitcoin, pero lo
suficiente como para atraer nuevos inversores y comerciantes y proporcionar liquidez al mercado. La capitalización de mercado
combinada de altcoin se muestra a continuación en el gráfico generado a partir de http://coinmarketcap.com:
Esto muestra que, al momento de escribir este artículo, la capitalización combinada del mercado de altcoins es de más de 2 mil
millones de dólares estadounidenses.
La capitalización de mercado actual (a partir de octubre de 2016) de las 10 monedas principales se muestra a continuación:
Machine Translated by Google
Hay varios factores y nuevos conceptos introducidos con monedas alternativas. Muchos conceptos
se inventaron incluso antes de bitcoin, pero con bitcoin no solo se introdujeron por primera vez
conceptos nuevos, como una solución al problema de los generales bizantinos, sino que también
se utilizaron conceptos anteriores como hashcash y Prueba de trabajo de una manera ingeniosa y
entró en el centro de atención. Desde entonces, con la introducción de proyectos de monedas
alternativas, se han desarrollado e introducido varias técnicas y conceptos nuevos. Para apreciar
el panorama actual de las criptomonedas alternativas, es esencial comprender primero algunos
conceptos teóricos. En la siguiente sección, se presentan al lector algunos conceptos nuevos que se h
Machine Translated by Google
Fundamentos teóricos
En esta sección, se presentan al lector varios conceptos teóricos que se han
desarrollado con la introducción de diferentes altcoins en los últimos años.
Machine Translated by Google
Alternativas a la prueba de trabajo
El esquema de prueba de trabajo (PoW) en el contexto de la criptomoneda se utilizó por primera vez
en bitcoin y sirvió como un mecanismo para garantizar que un minero había completado la cantidad de
trabajo requerida para encontrar un bloque. Esto, a cambio, proporcionó descentralización, seguridad y
estabilidad para la cadena de bloques. Además, este es el vehículo principal en bitcoin para proporcionar
consenso distribuido descentralizado. Se requiere que los esquemas de PoW tengan una propiedad muy
deseada llamada libertad de progreso, lo que básicamente significa que la recompensa por consumir
recursos computacionales debe ser aleatoria y proporcional a la contribución realizada por los mineros.
En este caso, se da alguna posibilidad de ganar la recompensa del bloque incluso a aquellos mineros que
tienen comparativamente menos poder de cómputo. El término libertad de progreso fue introducido por
Arvind Narayanan .et.al en el libro Bitcoin and Cryptocurrency Technologies. Otros requisitos para la
minería de acertijos computacionales incluyen dificultad ajustable y verificación rápida. La dificultad
ajustable garantiza que el objetivo de dificultad para la minería en la cadena de bloques se regule en
respuesta al aumento del poder de hash y la cantidad de usuarios. La verificación rápida es una propiedad
que significa que los acertijos computacionales de minería deberían ser fáciles y rápidos de verificar. Otro
aspecto del esquema PoW, especialmente el que se usa en Bitcoin (Double SHA-256), es que desde la
introducción de los ASIC, el poder se está desplazando hacia los mineros o pools de minería que pueden
permitirse operar granjas ASIC a gran escala y esto desafía al filosofía central de la descentralización de bitc
Se han propuesto algunas alternativas, como los acertijos resistentes a ASIC, y están diseñados de tal
manera que la creación de ASIC para resolver este acertijo es inviable y no da como resultado una mejora
importante en el rendimiento con respecto al hardware básico. Una técnica común utilizada para este
propósito es aplicar una clase de problemas computacionales difíciles llamados acertijos computacionales
difíciles de memoria . La idea central detrás de este método es que, dado que la resolución de acertijos
requiere una gran cantidad de memoria, no es factible implementarlo en sistemas basados en ASIC. Esta
técnica se usó inicialmente en litecoin y Tenebrix, donde la función hash Scrypt se usó como un esquema
PoW resistente a ASIC. A pesar de que este esquema se anunció inicialmente como resistente a ASIC,
recientemente los ASIC de Scrypt ahora están disponibles para refutar la afirmación original de litecoin.
Otro enfoque de la resistencia ASIC es cuando se requiere calcular varias funciones hash para
proporcionar PoW. Esto también se denomina esquema de hashing encadenado. La razón detrás de esta
idea es que el diseño de múltiples funciones hash en un ASIC no es muy factible. El ejemplo más común
es la función de memoria dura X11 implementada en Dash. X11 consta de 11 concursantes SHA3 en los
que un algoritmo envía el hash calculado al siguiente algoritmo hasta que los 11 algoritmos se utilizan en
una secuencia. Estos algoritmos incluyen blake, bmw, groestl, jh, keccak, skein, luffa, cubehash, shavite,
simd y echo.
Inicialmente, este enfoque proporcionó cierta resistencia al desarrollo de ASIC, pero ahora los mineros
de ASIC están disponibles comercialmente y admiten la minería de X11 y esquemas similares. Un ejemplo
reciente es ASIC Baikal Miner, que admite minería X11, X13, X14 y X15. Otros ejemplos incluyen mineros
como iBeLink DM384M X11 miner y Pinidea X11 ASIC miner.
Machine
Quizás Translated
otro enfoque by Google
podría ser diseñar acertijos automutantes que cambien de manera inteligente o aleatoria el
esquema PoW o sus requisitos en función del tiempo. Esto hará que sea casi imposible implementarlo en ASIC, ya que
requerirá que se diseñen múltiples ASIC para cada función y también sería casi imposible manejar esquemas aleatorios en
ASIC. Por el momento, no está claro cómo se puede lograr esto en la práctica.
PoW tiene varios inconvenientes y el mayor de todos es el consumo de energía. Se estima que la electricidad total
consumida por los mineros de bitcoin será equivalente a la de Dinamarca para 2020. Esto es enorme y toda esa energía se
desperdicia de alguna manera; de hecho, no se cumple ningún propósito útil excepto el de la minería.
Los ecologistas han expresado preocupaciones reales sobre esta situación.
Se ha propuesto que los rompecabezas PoW se pueden diseñar de tal manera que sirvan para dos propósitos.
En primer lugar, su propósito principal es en los mecanismos de consenso y, en segundo lugar, realizar algunos cálculos
científicos útiles. De esta manera, los esquemas no solo se pueden usar en la minería, sino que también pueden ayudar a
resolver potencialmente otros problemas científicos. Esta prueba de trabajo útil ha sido puesta en práctica recientemente
por Primecoin, donde el requisito es encontrar cadenas de números primos especiales conocidas como cadenas de
Cunningham y cadenas bit-gemelas. Dado que el estudio de la distribución de números primos tiene un significado especial
en disciplinas científicas como la física, al minar Primecoin, los mineros no solo obtienen la recompensa del bloque, sino
que también ayudan a encontrar los números primos especiales.
Prueba de almacenamiento
También conocida como prueba de irrecuperabilidad, este es otro tipo de prueba de trabajo útil que requiere el
almacenamiento de una gran cantidad de datos. Presentado por Microsoft Research, este esquema proporciona un
beneficio útil del almacenamiento distribuido de datos de archivo. Los mineros deben almacenar un pseudo
subconjunto de datos de gran tamaño seleccionado al azar para realizar la minería.
Prueba de participación
Esta prueba también se llama minería virtual. Este es otro tipo de rompecabezas de minería que se ha propuesto como una
alternativa a los esquemas PoW tradicionales. Se propuso por primera vez en PeerCoin en agosto de 2012. En este
esquema, la idea es que los usuarios deben demostrar la posesión de una cierta cantidad de moneda (monedas),
demostrando así que tienen una participación en la moneda. La forma más simple de participación es donde la minería se
hace comparativamente más fácil para aquellos usuarios que de manera demostrable poseen grandes cantidades de
moneda digital. Los beneficios de este esquema son dos; En primer lugar, adquirir grandes cantidades de moneda digital
es relativamente difícil en comparación con la compra de dispositivos ASIC de gama alta y, en segundo lugar, permite
ahorrar recursos informáticos. Se han propuesto varias formas de participación y se analizan brevemente a continuación.
Prueba de acuñación
La edad de una moneda es el tiempo transcurrido desde que se usaron o guardaron las monedas por última vez. Este es un
enfoque diferente de la forma habitual de prueba de participación, donde la minería se facilita para los usuarios que tienen
la participación más alta en la altcoin. En el enfoque basado en la edad de la moneda, la edad de la moneda (acuñación) se
restablece cada vez que se extrae un bloque. El minero es recompensado por mantener y no gastar monedas durante un perío
seMachine Translated by
ha implementado enGoogle
Peercoin combinado con PoW de forma creativa. La dificultad de los acertijos de minería
(PoW) es inversamente proporcional a la edad de la moneda, lo que significa que si los mineros consumen cierta
edad de la moneda mediante transacciones de apuestas de monedas , los requisitos de PoW se eliminan.
Prueba de depósito
La idea central detrás de este esquema es que los bloques recién acuñados por los mineros no se pueden gastar
durante un cierto período de tiempo. Más precisamente, las monedas se bloquean durante un número determinado de
bloques durante la operación de minería. El esquema funciona al permitir que los mineros realicen minería a costa de
congelar una cierta cantidad de monedas durante algún tiempo. Este es un tipo de prueba de participación.
Prueba de quemadura
Como un gasto alternativo al poder de cómputo, la prueba de quemado de hecho destruye una cierta cantidad de
bitcoins para obtener altcoins equivalentes. Esto se usa comúnmente cuando se inician nuevos proyectos de
monedas como un medio para proporcionar una distribución inicial justa. Esto se puede considerar como un esquema
alternativo de minería donde el valor de las nuevas monedas proviene del hecho de que previamente se ha destruido
una cierta cantidad de monedas.
Prueba de actividad
Este esquema es un híbrido de PoW y Prueba de Participación. En este esquema, los bloques se producen inicialmente
mediante PoW, pero luego cada bloque asigna aleatoriamente tres partes interesadas que deben firmarlo digitalmente.
La validez de los bloques subsiguientes depende de la firma exitosa de bloques previamente elegidos al azar.
Sin embargo, existe un posible problema conocido como el problema de nada en juego en el que sería trivial crear una
bifurcación de la cadena de bloques. Esto es posible porque en PoW se requieren recursos computacionales
apropiados para minar, mientras que en Prueba de participación no existe tal requisito; como resultado, un atacante
puede intentar minar en múltiples cadenas usando la misma moneda.
Rompecabezas no subcontratables
La motivación clave detrás de este rompecabezas es desarrollar resistencia nuevamente al desarrollo de grupos mineros
Los pools de minería, como se discutió anteriormente, ofrecen recompensas a todos los participantes en proporción al
poder de cómputo que consumen. Sin embargo, en este modelo, el operador del pool de minería es una autoridad
central a la que van todas las recompensas y que puede hacer cumplir ciertas reglas. Además, en este modelo, todos
los mineros solo confían entre sí porque están trabajando juntos para lograr un objetivo común con la esperanza de
que el administrador del grupo obtenga la recompensa. Los acertijos no externalizables son un esquema que permite a
los mineros reclamar recompensas por sí mismos; en consecuencia, la formación de grupos se vuelve poco probable
debido a la desconfianza inherente entre los mineros anónimos.
Machine Translated by Google
Algoritmos de ajuste de dificultad y retargeting
Otro concepto que se ha introducido con la llegada de bitcoin y altcoins es la dificultad de los
algoritmos de retargeting. En bitcoin, un objetivo de dificultad se calcula simplemente mediante la
siguiente ecuación; sin embargo, otras monedas han desarrollado sus propios algoritmos o han
implementado versiones modificadas del algoritmo de dificultad de bitcoin:
La idea detrás de la regulación de la dificultad en bitcoin es que una generación de bloques de 2016 debería
tomar alrededor de 2 semanas (el tiempo entre bloques debería ser de alrededor de 10 minutos). Si se tarda
más de 2 semanas en extraer los bloques de 2016, la dificultad se reduce y si se tarda menos de dos semanas
en extraer los bloques de 2016, la dificultad aumenta. Cuando se introdujeron los ASIC debido a una alta tasa
de generación de bloques, la dificultad aumentó exponencialmente y ese es un inconveniente de los algoritmos
PoW que no son resistentes a ASIC. Esto conduce a la centralización del poder minero. Esto también plantea
otro problema; si una nueva moneda comienza ahora con la misma Prueba de trabajo basada en SHA256 que
usa bitcoin, entonces sería fácil para un usuario malicioso simplemente usar un minero ASIC y controlar toda
la red. Este ataque sería más práctico si hay menos interés en la nueva altcoin y alguien decide hacerse cargo
de la red consumiendo recursos informáticos adecuadamente altos. Este puede no ser un ataque factible si
otros mineros con una potencia informática similar también se unen a la red de altcoin porque entonces los
mineros competirán entre sí. Además, los multipools representan una amenaza mayor donde un grupo de
mineros puede cambiar automáticamente a la moneda que se está volviendo rentable. Este fenómeno se
conoce como salto de grupo y puede afectar negativamente a una cadena de bloques y, en consecuencia, al
crecimiento de la moneda alternativa. Los saltos de grupo afectan negativamente a la red porque los saltadores
de grupo se unen a la red solo cuando la dificultad es baja y pueden obtener recompensas rápidas; en el
momento en que la dificultad aumenta (o se reajusta), saltan y luego regresan cuando la dificultad se ajusta
nuevamente. Por ejemplo, si un multipool consume sus recursos extrayendo rápidamente una nueva moneda,
la dificultad aumentará muy rápidamente; cuando el multipool sale de la red monetaria; se vuelve casi
inutilizable debido al hecho de que ahora la dificultad ha aumentado a tal nivel que ya no es rentable para los
mineros solitarios y ya no se puede mantener. La única solución para este problema es iniciar una bifurcación
dura que generalmente no es deseable para la comunidad.
Hay algunos algoritmos que han surgido para abordar este problema y se analizan más adelante.
Todos estos algoritmos se basan en la idea de reajustar varios parámetros en respuesta a cambios en la
tasa de hash; estos parámetros incluyen el número de bloques anteriores, la dificultad de los bloques
anteriores, la relación de ajuste y el número por el cual la dificultad se puede reajustar hacia atrás o hacia
arriba. En la siguiente sección, se presentará a los lectores los pocos algoritmos de dificultad que se utilizan
y se proponen para varias altcoins.
Este algoritmo se utiliza en varias altcoins para regular la dificultad. Esto se introdujo por primera vez en
Megacoin y se usó para ajustar de forma adaptativa la dificultad de la red en cada bloque. La lógica del algoritm
se Machine Translated
muestra de la by Google
siguiente manera:
Básicamente, el algoritmo se ejecuta en un bucle que pasa por un conjunto de bloques predeterminados
(PastBlockMass) y calcula un nuevo valor de reajuste. La idea central detrás de este algoritmo es desarrollar un
mecanismo de regulación de dificultad adaptable que pueda reajustar la dificultad en respuesta a picos rápidos en las
tasas de hash. Kimoto Gravity Well (KGW) asegura que el tiempo entre bloques permanezca aproximadamente igual. En
bitcoin la dificultad se ajusta cada 2016 bloques pero en KGW la dificultad se ajusta en cada bloque.
Este algoritmo es vulnerable a los ataques de distorsión del tiempo, que permiten que un atacante disfrute
temporalmente de menos dificultades para crear nuevos bloques. Este ataque permite una ventana de tiempo en la que la
dificultad se vuelve baja y el atacante puede generar fácilmente muchas monedas a un ritmo rápido.
Dark Gravity Wave (DGW) es un nuevo algoritmo diseñado para abordar ciertas fallas, como el ataque de distorsión de
tiempo en el algoritmo KGW. Esto se introdujo por primera vez en Dash, anteriormente conocido como Darkcoin.
Utiliza múltiples medias móviles exponenciales y medias móviles simples para lograr un mecanismo de reajuste
más fluido. La fórmula se muestra de la siguiente manera:
Esta fórmula se implementa en la moneda Dash y en varias otras monedas alternativas como un mecanismo para
reajustar la dificultad.
La versión 3.0 de DGW es la última implementación de este algoritmo y permite mejorar la dificultad de retargeting
en comparación con KGW.
digiescudo
Este es otro algoritmo de retargeting de dificultad que se ha utilizado recientemente en Zcash con ligeras
variaciones y después de una experimentación adecuada. Este algoritmo funciona pasando por un número fijo de
bloques anteriores para calcular el tiempo que tardaron en generarse y luego reajusta la dificultad a la dificultad del
bloque anterior dividiendo el lapso de tiempo real por el promedio del tiempo objetivo. En este esquema, el retargeting
se calcula mucho más rápido y también la recuperación de un aumento o disminución repentino en el hashrate es rápida.
Este algoritmo protege contra multipools, lo que puede resultar en aumentos rápidos de hashrate. La dificultad de la red
se reajusta cada bloque o cada minuto según la implementación. La innovación clave es tiempos de reajuste más rápidos
en comparación con KGW.
MIDAS
El Sistema de Ajuste de Dificultad de Intervalos Múltiples (MIDAS) es un algoritmo que es comparativamente más
complejo que los algoritmos discutidos anteriormente. Este método responde mucho más rápidamente a cambios bruscos
Machineen
Cambios Translated byde
las tasas Google
hash. Este algoritmo también brinda protección contra ataques de distorsión de tiempo.
Muchas monedas han surgido como un intento de abordar varias limitaciones en bitcoin. A continuación se
proporciona una breve discusión de las limitaciones de bitcoin.
Machine Translated by Google
Limitaciones de Bitcoin
Varias limitaciones en bitcoin también han despertado cierto interés en altcoins, que se
desarrollaron específicamente para abordar las limitaciones en bitcoin. La limitación más destacada
y ampliamente discutida es la falta de anonimato en bitcoin. Esta limitación se analiza en detalle a conti
Machine Translated by Google
Privacidad y anonimato
Dado que la cadena de bloques es un libro de contabilidad público de todas las transacciones y está
abiertamente disponible, se vuelve trivial analizarlo. En combinación con los análisis de tráfico, las
transacciones se pueden vincular a sus direcciones IP de origen, lo que posiblemente revele el autor de una
transacción. Esta es una gran preocupación desde el punto de vista de la privacidad. Aunque en bitcoin es
una práctica común y recomendada generar una nueva dirección para cada transacción, lo que permite cierto
nivel de desvinculación, esto no es suficiente y se han desarrollado y utilizado con éxito varias técnicas para
rastrear el flujo de transacciones a través de la red y vincularlos de nuevo a su creador. Los investigadores han
utilizado varios métodos para analizar cadenas de bloques, como gráficos de transacciones, gráficos de
direcciones y gráficos de entidades, para vincular a los usuarios con las transacciones, lo que plantea
problemas de privacidad. Las técnicas de análisis mencionadas anteriormente pueden enriquecerse aún más
utilizando información disponible públicamente sobre transacciones y vinculándolas con los usuarios reales.
Hay analizadores de bloques de código abierto disponibles que se pueden usar para extraer información de
transacciones, saldos y scripts de la base de datos de la cadena de bloques. Un analizador disponible en https://
github.com/mikispag/rusty-blockparser está escrito en Rust y proporciona capacidades avanzadas de análisis
de blockchain. Una versión anterior de este trabajo se llama BitIodine pero ya no se está desarrollando activamen
Se han realizado varias propuestas para abordar el problema de la privacidad en bitcoin. Estas propuestas se
dividen en tres categorías: protocolos de mezcla, redes de mezcla de terceros y anonimato inherente. A
continuación se presenta una breve discusión de cada categoría.
Protocolos de mezcla
Estos esquemas se utilizan para brindar anonimato a las transacciones de bitcoin. En este modelo, se utiliza
un proveedor de servicios de mezcla (un intermediario o una billetera compartida). Los usuarios envían
monedas a esta billetera compartida como depósito y la billetera compartida luego puede enviar otras
monedas (del mismo valor depositadas por otros usuarios) al destino. Los usuarios también pueden recibir
monedas enviadas por otros a través de este intermediario. De esta forma, el vínculo entre las salidas y las
entradas ya no existe y el análisis del gráfico de transacciones no podrá revelar la verdadera relación entre los em
CoinJoin es un ejemplo de protocolos mixtos, donde dos transacciones se unen para formar una sola
transacción manteniendo las entradas y salidas sin cambios. La idea central detrás de CoinJoin es crear una
transacción compartida firmada por todos los participantes. Esta técnica mejora la privacidad de todos los
participantes involucrados en las transacciones:
Machine Translated by Google
Transacción CoinJoin con tres usuarios que unen su transacción en una sola transacción CoinJoin
más grande
Hay disponibles varios servicios, con diversos grados de complejidad, como CoinShuffle, Coinmux y dark send
in Dash (moneda) que se basan en la idea de transacciones CoinJoin (mezcla). CoinShuffle es una alternativa
descentralizada a los servicios de mezcla tradicionales, ya que no requiere un tercero de confianza.
Los esquemas basados en CoinJoin, sin embargo, tienen algunas debilidades, la más destacada es la
posibilidad de lanzar un ataque de Denegación de Servicio por parte de los usuarios que se comprometieron a
firmar las transacciones inicialmente pero ahora no proporcionan su firma, lo que retrasa o detiene la transacción co
anonimato inherente
Esta categoría incluye monedas que respaldan la privacidad de forma inherente y están integradas en el
diseño de la moneda. El más popular es Zcash, que se analiza en detalle más adelante en este capítulo. Otros
ejemplos incluyen Monero, que utiliza firmas de anillo para proporcionar servicios anónimos.
La siguiente sección presenta varias mejoras que se han realizado, o se proponen, para extender el protocolo
bitcoin.
Machine Translated by Google
Protocolos extendidos además de bitcoin
Se han propuesto e implementado varios protocolos además de bitcoin para mejorar y ampliar el protocolo de
bitcoin y usarlo para otros fines en lugar de solo como una moneda virtual.
monedas de colores
Las monedas de colores son un conjunto de métodos que se han desarrollado para representar activos digitales
en la cadena de bloques de bitcoin. Colorear un bitcoin se refiere coloquialmente a actualizarlo con algunos
metadatos que representan un activo digital (propiedad inteligente). La moneda aún funciona y opera como un
bitcoin, pero además contiene algunos metadatos que representan algunos activos. Este mecanismo permite
emitir y rastrear bitcoins específicos. Los metadatos se pueden registrar utilizando el código de operación
OP_RETURN de bitcoins u opcionalmente en direcciones de firma múltiple. Estos metadatos también se pueden cifrar s
Las monedas de colores se pueden usar para representar una multitud de activos, incluidos, entre otros, productos
básicos, certificados, acciones, bonos y votos. También se debe tener en cuenta que, para trabajar con monedas de
colores, es necesaria una billetera que interprete las monedas de colores y las billeteras de bitcoin normales no funcio
Las billeteras de monedas de colores se pueden configurar en línea utilizando un servicio disponible en https://www.coinprism
Con este servicio, se puede crear y emitir cualquier tipo de activo digital a través de una moneda de color.
La idea de las monedas de colores es muy atractiva, ya que no requiere ninguna modificación del protocolo
bitcoin existente y puede hacer uso de la red segura bitcoin ya existente. Además de la representación tradicional
de los activos digitales, también existe la posibilidad de crear activos inteligentes que se comporten de acuerdo
con los parámetros y condiciones definidos para ellos. Estos parámetros incluyen validación de tiempo,
restricciones de transferibilidad y tarifas. Esto abre la posibilidad de crear smart
contratos
Un caso de uso importante puede ser la emisión de instrumentos financieros en la cadena de bloques. Esto
garantizará tarifas de transacción bajas, una prueba de propiedad válida y matemáticamente segura, una transferencia
rápida sin necesidad de un intermediario y pagos instantáneos de dividendos a los inversores.
contraparte
Este es otro servicio que se puede usar para crear tokens personalizados que actúan como una criptomoneda y
se pueden usar para varios propósitos, como emitir activos digitales además de la cadena de bloques de bitcoin.
Esta es una plataforma bastante poderosa y se ejecuta en cadenas de bloques de bitcoin en su núcleo, pero ha
desarrollado su propio cliente y otros componentes para respaldar la emisión de activos digitales. La arquitectura
consta de un servidor de contraparte, un contrabloque, una billetera contraria y armería_utxsvr. Counterparty
funciona según la misma idea que las monedas de colores al incorporar datos en las transacciones regulares de
bitcoin, pero proporciona una biblioteca mucho más rica y un conjunto de herramientas poderosas para respaldar
el manejo de activos digitales. Esta incrustación también se denomina consenso incrustado porque las transacciones
de la contraparte están incrustadas dentro de las transacciones de bitcoin. El método para incrustar los datos es medi
LaMachine
moneda Translated
producidaby Google
y utilizada por la contraparte se conoce como XCP y los contratos inteligentes la utilizan
como tarifa para ejecutar el contrato. Al momento de escribir su precio es de 2.78 USD. Los XCP se crearon
utilizando el método de prueba de grabación discutido anteriormente.
Nota
Counterparty está disponible en http://counterparty.io/.
Machine Translated by Google
Desarrollo de altcoins
Los proyectos de altcoin se pueden iniciar muy fácilmente desde el punto de vista de la codificación simplemente
bifurcando el código fuente de bitcoin o de otra moneda, pero esto probablemente no sea suficiente. Cuando se
inicia un nuevo proyecto de moneda, hay varias cosas que deben tenerse en cuenta para garantizar un lanzamiento
exitoso y la longevidad de la moneda. Por lo general, el código base está escrito en C++, como en el caso de
bitcoin, pero se puede usar casi cualquier lenguaje para desarrollar proyectos de monedas, por ejemplo, Golang o Ru
Escribir código o bifurcar el código de una moneda existente es la parte trivial, el desafío es cómo iniciar una nueva
moneda para que los nuevos inversores y usuarios puedan sentirse atraídos por ella. En general, se toman los
siguientes pasos para comenzar un nuevo proyecto de monedas.
Desde un punto de vista técnico, en el caso de bifurcar el código de otra moneda, por ejemplo bitcoin, existen
varios parámetros que se pueden cambiar para crear efectivamente una nueva moneda. Estos parámetros deben
modificarse o introducirse para crear una nueva moneda. Estos parámetros pueden incluir, entre otros, los
siguientes.
Algoritmos de consenso
Hay una opción de algoritmo de consenso: Prueba de trabajo (PoW) como se usa en bitcoin o Prueba de
participación (PoS), como en Peercoin.
algoritmos hash
Este es SHA256, Scrypt, X11, X13, X15 o cualquier otro algoritmo hash que sea adecuado para usar como
algoritmo de consenso.
Varias opciones están disponibles en esta categoría para proporcionar mecanismos de retargeting de dificultad.
Los ejemplos más destacados son KGW, DGW, Nite's Gravity Wave y DigiShield. Además, todos estos algoritmos
se pueden modificar según los requisitos para producir resultados diferentes; por lo tanto, muchas variantes son
posibles.
Este es el tiempo transcurrido entre la generación de cada bloque. Para bitcoin los bloques se generan cada 10
minutos, para litecoin son 2,5 minutos. Se puede usar cualquier valor, pero un valor apropiado suele estar entre
unos pocos minutos; si el tiempo de generación es demasiado rápido, podría desestabilizar la cadena de bloques,
si es demasiado lento, es posible que no atraiga a muchos usuarios.
Bloquear recompensas
Una recompensa en bloque es para el minero que resuelve el rompecabezas de minería y se le permite tener
una transacción Coinbase que contiene la recompensa. Esto solía ser 50 monedas en bitcoin inicialmente y ahora mu
Machineestablece
altcoins Translatedeste
by Google
parámetro en un número muy alto; por ejemplo en Dogecoin es de 10.000, actualmente.
Este es otro factor importante; en bitcoin se reduce a la mitad cada 4 años y ahora se establece en 12,5 bitcoins.
Es un número variable que se puede establecer en cualquier período de tiempo o en ninguno, según los requisitos.
Este es otro factor importante que determina cuán alta o baja puede ser la tasa de transacción en la red. Los
tamaños de bloque en bitcoin están limitados a 1 MB, pero en altcoins puede variar según los requisitos.
Tasa de interés
Esta propiedad se aplica solo a los sistemas PoS en los que el propietario de las monedas puede ganar
intereses a una tasa definida por la red a cambio de la cantidad de monedas que se mantienen en la red como
PoS para proteger la red.
edad de la moneda
Este parámetro define cuánto tiempo debe permanecer la moneda sin gastar para que se considere elegible para
apostar.
Este número establece el límite total de monedas que se pueden generar. Por ejemplo en bitcoin el límite es
de 21 millones, mientras que en Dogecoin es ilimitado. Este límite está fijado por la recompensa en bloque y el
cronograma de reducción a la mitad discutido anteriormente.
Hay dos opciones para crear su propia moneda virtual: bifurcar el código fuente de criptomoneda
establecido existente o escribir uno nuevo desde cero. La última opción es menos popular pero la primera
opción es más fácil y ha permitido la creación de muchas monedas virtuales en los últimos años. Básicamente,
la idea es que primero se bifurque el código fuente de una criptomoneda y luego se realicen los cambios
apropiados en diferentes ubicaciones estratégicas en el código fuente para crear efectivamente una nueva moneda.
En la siguiente sección, se presenta a los lectores algunos proyectos de altcoin. No es posible cubrir todas
las monedas alternativas en este capítulo, pero a continuación se analizan algunas monedas seleccionadas.
La selección se basa en la longevidad, la capitalización de mercado y la innovación. Cada moneda se analiza
desde diferentes ángulos, como los fundamentos teóricos, el comercio y la minería.
Machine Translated by Google
moneda de nombre
Namecoin es la primera bifurcación del código fuente de bitcoin. La idea clave detrás de Namecoin no es producir una altcoin, sino
proporcionar una descentralización mejorada, resistencia a la censura, privacidad, seguridad y nombres descentralizados más
rápidos. Los servicios de nombres descentralizados están destinados a dar respuesta a las limitaciones inherentes, como la lentitud
y el control centralizado en los protocolos tradicionales del Sistema de Nombres de Dominio (DNS) utilizados en Internet. Namecoin
también es la primera solución al triángulo de Zooko, que se analizó brevemente en capítulos anteriores.
Namecoin se utiliza esencialmente para proporcionar un servicio para registrar un par clave/valor. Un caso de uso importante de
Namecoin es que puede proporcionar un mecanismo de validación de certificado de seguridad de la capa de transporte (TLS)
descentralizado, impulsado por un consenso distribuido y descentralizado basado en blockchain.
Se basa en la misma tecnología introducida con bitcoin, pero con su propia cadena de bloques y
software de billetera. El código fuente del núcleo de Namecoin está disponible en https://github.com/
namecoin/namecoin-core.
Namecoin también introdujo por primera vez la minería fusionada, que permite a un minero minar en más de una cadena
simultáneamente. La idea es simple pero muy efectiva: los mineros crean un bloque Namecoin y producen un hash de ese bloque.
Luego, el hash se agrega a un bloque de bitcoin y los mineros resuelven ese bloque con una dificultad igual o mayor que la del
bloque de Namecoin para demostrar que se ha contribuido con suficiente trabajo para resolver el bloque de Namecoin.
Más precisamente, la transacción Coinbase se usa para incluir el hash de las transacciones de Namecoin (o cualquier
otra moneda alternativa). La tarea de minería es resolver bloques de bitcoin cuyo Coinbase scripSig contiene un puntero hash al
bloque Namecoin (o cualquier otro altcoin). Esto se muestra en el siguiente diagrama.
Si un minero logra resolver un hash en el nivel de dificultad de la cadena de bloques de bitcoin, el bloque de bitcoin se construye
y se convierte en parte de la red de bitcoin. En este caso, la cadena de bloques de bitcoin ignora el hash de Namecoin. Por otro
lado, si un minero resuelve un bloque en el nivel de dificultad de la cadena de bloques de Namecoin, se crea un nuevo bloque en la
cadena de bloques de Namecoin. El principal beneficio de este esquema es que toda la potencia computacional gastada por los
Aunque Namecoins se puede extraer de forma independiente, por lo general se extraen como parte de la minería de
bitcoin utilizando la técnica de minería combinada como se explicó anteriormente. De esta manera, Namecoin se puede
extraer como un subproducto de la minería de bitcoin. La minería en solitario ya no es rentable, como se desprende del
siguiente gráfico de dificultad; en su lugar, se recomienda fusionar la mina, usar un grupo de minería o incluso usar un
intercambio de criptomonedas para comprar Namecoin.
Varios pools de minería como https://slushpool.com También ofrecemos la opción de minería fusionada. Esto permite
que un minero extraiga principalmente bitcoin, pero también, como resultado, también gane Namecoin.
Otro método que se puede usar para obtener rápidamente algunas Namecoins es intercambiar sus monedas existentes
con Namecoins, por ejemplo, si ya tiene algunos bitcoins u otra criptomoneda que se puede usar para intercambiar
con Namecoin. Un servicio en línea, https://shapeshift.io/, está disponible que brinda este servicio. Este servicio
permite la conversión de una criptomoneda a otra, utilizando una interfaz sencilla y fácil de usar.
Una vez que se hace clic en Iniciar transacción, la transacción comienza y le indica al usuario que envíe los bitcoins
a una dirección de bitcoin específica. Cuando el usuario envía la cantidad requerida, el proceso de conversión
comienza como se muestra:
Machine Translated by Google
Se ingresa el nombre y, luego de presionar el botón Enviar, solicitará información de configuración como DNS, IP o
Identidad:
Scrypt es una función dura de memoria secuencial que es la primera alternativa al algoritmo PoW basado en SHA-256. Originalmente
se propuso como una función de derivación de clave basada en contraseña PBKDF. La idea clave es que si la función requiere una
gran cantidad de memoria para ejecutarse, entonces el hardware personalizado, como los ASIC, requerirá más área de VLSI, lo
que sería inviable de construir. El algoritmo Scrypt requiere que se mantenga en la memoria una gran variedad de bits
pseudoaleatorios y una clave se deriva de esto de forma pseudoaleatoria. El algoritmo se basa en un fenómeno llamado Time-
Memory Tradeoff (TMTO). Si los requisitos de memoria se relajan, el costo computacional aumenta. Dicho de otra manera, TMTO
acorta el tiempo de ejecución de un programa si se le da más memoria. Esta compensación hace que sea inviable para un atacante
obtener más memoria porque es costoso y difícil de implementar en hardware personalizado, o si el atacante elige no aumentar la
memoria, entonces el algoritmo se ejecuta lentamente debido a los altos requisitos de procesamiento.
Scrypt utiliza los siguientes parámetros para generar una clave derivada (Kd):
Antes de aplicar la función principal de Scrypt, el algoritmo toma P y S como entrada y aplica HMAC basado en PBKDF2 y
SHA-256. Luego, la salida se alimenta a un algoritmo llamado ROMix, que utiliza internamente el algoritmo Blockmix utilizando el
cifrado de flujo central Salsa20/8 para llenar la memoria que requiere una gran cantidad de memoria para funcionar, lo que hace
cumplir la propiedad de memoria dura secuencialmente.
La salida de este paso del algoritmo finalmente se envía nuevamente a la función PBKDF2 para producir una clave derivada.
Este proceso se muestra en el siguiente diagrama:
Machine Translated by Google
Algoritmo de cifrado
Parece que, debido a la selección de estos parámetros, el desarrollo de ASIC para Scrypt para la minería de
litecoin resultó no ser muy difícil. En un ASIC para minería de litecoin, se puede desarrollar una lógica
secuencial que toma los datos y nonce como entrada y aplica el algoritmo PBKDF2 con HMAC-SHA256; luego,
el flujo de bits resultante se alimenta a la función SALSA20/8 que produce un
Machine
hash Translated by
que nuevamente seGoogle
alimenta a las funciones PBKDF2 y HMAC-256 para producir una salida hash de 256 bits.
Como es el caso con bitcoin PoW, en Scrypt también si el hash de salida es menor que el hash de destino (ya pasado como
entrada al inicio, almacenado en la memoria y verificado con cada iteración), entonces la función termina; de lo contrario, el
nonce se incrementa y el proceso se repite nuevamente hasta que se encuentra un hash que es más bajo que el objetivo de
dificultad:
Comercio de Litecoin: Al igual que con otras monedas, el comercio de Litecoin se lleva a cabo fácilmente en varios sitios en lí
Machine Translated by
intercambios LaGoogle
capitalización de mercado actual de litecoin es de £161,239,005. El precio actual de
litecoin es £3.25/LTC.
Minería: La minería de Litecoin se puede llevar a cabo solo o en grupos. Por el momento, hay
disponibles ASIC para Scrypt que se usan comúnmente para extraer litecoin.
La minería de Litecoin en una CPU ya no es rentable como ocurre con muchas otras monedas digitales.
Hay proveedores de minería en la nube en línea y mineros ASIC disponibles que se pueden usar para extraer lit
La minería de Litecoin comenzó desde la CPU, progresó a través de plataformas de minería de GPU y,
finalmente, ahora ha llegado a un punto en el que ahora se requieren mineros ASIC especializados como
Asic Scrypt Miner Wolf disponible de EhsMiner con la esperanza de poder hacer algunas monedas. En
general, es cierto que incluso con ASIC es mejor minar en grupos en lugar de solo, ya que la minería en
solitario no es tan rentable como la minería en grupos debido al esquema de recompensas proporcionales
que utilizan los grupos de minería. Estos mineros son capaces de producir una tasa de hash de 2 Gh/s para alg
Código fuente y billetera del software: El código fuente de litecoin está disponible en
https://github.com/litecoin-project/litecoin. La billetera litecoin se puede descargar desde https://
litecoin.org/ y se puede usar como el software de cliente central de bitcoin.
Machine Translated by Google
primacoin
Primecoin es la primera moneda digital en el mercado que introdujo un PoW útil, a diferencia del PoW
basado en SHA256 de bitcoin. Primecoin utiliza la búsqueda de números primos como PoW. No todos los
tipos de números primos cumplen los requisitos para ser seleccionados como PoW. Tres tipos de números
primos (conocidos como cadena de Cunningham de primer tipo, cadena de Cunningham de segundo tipo y
cadenas bit-gemelos) cumplen con los requisitos de un algoritmo PoW para ser utilizado en criptomonedas. La
dificultad se ajusta dinámicamente a través de un esquema de evaluación de dificultad continua en la cadena
de bloques Primecoin. La verificación eficiente de PoW basada en números primos también es de gran
importancia, porque si la verificación es lenta, entonces PoW no es adecuado. Por lo tanto, las cadenas
principales se seleccionan como PoW porque encontrar cadenas principales se vuelve difícil a medida que la
cadena aumenta de longitud, mientras que la verificación sigue siendo lo suficientemente rápida como para
justificar su uso como un algoritmo PoW eficiente. También es importante que una vez que se haya verificado
un PoW en un bloque, no debe ser reutilizable en otro bloque. Esto se logra en Primecoin mediante una
combinación de certificados de Prueba de trabajo y un hash con el encabezado del bloque principal en el
bloque secundario. El certificado PoW se produce al vincular la cadena principal al hash del encabezado del
bloque. También requiere que el origen del encabezado del bloque sea divisible por el hash del encabezado
del bloque. Si es así, se divide y, después de la división, el cociente se utiliza como certificado PoW. Otra
propiedad de la dificultad ajustable de los algoritmos PoW se cumple al introducir un ajuste de dificultad cada
bloque en lugar de cada 2016, como es el caso de bitcoin. Este es un enfoque más suave en comparación con
bitcoin y permite el reajuste en el caso de aumentos repentinos en el poder de hash. Además, la cantidad total de
Machine Translated by Google
Negociación de Primecoin
Primecoins se puede negociar en los principales intercambios comerciales de divisas virtuales. La capitalización
de mercado actual de Primecoin es de £ 828,002 en el momento de escribir este artículo. No es muy grande pero,
debido al hecho de que Primecoin se basa en una idea novedosa y hay una comunidad dedicada detrás, sigue
manteniendo una cierta cuota de mercado.
Machine Translated by Google
Guía de minería
El primer paso es descargar una billetera. Primecoin admite la minería nativa dentro de la billetera, al igual que los clientes
de bitcoin originales, pero también se puede extraer en la nube a través de varios proveedores de servicios de minería en
línea.
Los zk-SNARK deben satisfacer las propiedades de integridad, solidez, concisión y no interactividad.
Completitud significa que existe una estrategia definida para que un probador satisfaga a un verificador de que una
afirmación es verdadera. Por otro lado, la solidez significa que ningún probador puede convencer al verificador de que
una declaración falsa es verdadera. La brevedad significa que los mensajes que pasan entre el probador y el verificador
son de tamaño muy pequeño. Finalmente, la propiedad no interactiva significa que la verificación de la corrección de
una afirmación puede llevarse a cabo sin ninguna interacción o con muy poca interacción. Además, al ser una prueba de
conocimiento cero, también se debe cumplir la propiedad de conocimiento cero (discutida en el Capítulo 3, Criptografía y
fundamentos técnicos) .
Los desarrolladores de Zcash han introducido el concepto de un esquema de pagos anónimos descentralizados
(esquema DAP) que se utiliza en la red Zcash para permitir pagos directos y privados. Las transacciones no revelan
información sobre el origen, destino y monto de los pagos. Hay dos tipos de direcciones disponibles en Zcash, z-
addr y t-addr. Las direcciones Z se basan en pruebas de conocimiento cero y brindan protección de privacidad,
mientras que las direcciones T son similares a las de bitcoin.
Zcash utiliza un esquema PoW eficiente llamado PoW asimétrico (Equihash), que se basa en el Problema de
cumpleaños generalizado. Permite una verificación muy eficiente. Es una función resistente a la memoria y ASIC.
Se ha introducido una idea novedosa (minería lenta inicial) con Zcash, lo que significa que la recompensa del bloque
aumenta gradualmente durante un período de tiempo hasta que alcanza el bloque 20,000.
Esto permite el escalado inicial de la red y la experimentación por parte de los primeros mineros, y el ajuste por parte
de los desarrolladores de Zcash si es necesario. El comienzo lento tuvo un impacto en el precio debido a la escasez,
ya que el precio de ZEC en su primer día de lanzamiento alcanzó aproximadamente los 25 000 USD. Una versión ligeramen
ElMachine Translated
algoritmo by de
de ajuste Google
dificultad Digishield se ha implementado en Zcash. La fórmula se muestra de la siguiente
manera:
(siguiente dificultad) = (última dificultad) x SQRT [(150 segundos) / (último tiempo de resolución)]
Una instantánea de varios atributos de Zcash (después de un comienzo lento inicial) se muestra a continuación:
Machine Translated by Google
Negociación de Zcash
Zcash se puede comprar en los principales intercambios de divisas digitales. Al momento de escribir, el
precio de Zcash es muy alto. Como se muestra en el siguiente gráfico, el precio se disparó hasta
aproximadamente 10 bitcoins por Zcash. Algunos intercambios realizaron pedidos de hasta 2500 BTC por ZE
Machine Translated by Google
Guía de minería
Existen múltiples métodos para minar Zcash. Actualmente, la minería de CPU y GPU es posible. Varios grupos
comerciales de minería en la nube también ofrecen contratos para extraer Zcash. Para realizar minería en solitario
utilizando una CPU, se pueden seguir los siguientes pasos:
Si los requisitos previos ya están instalados, aparecerá un mensaje que indica que los componentes ya son la
versión más reciente. Si aún no está instalado o es anterior al paquete más reciente, la instalación continuará,
se descargarán los paquetes necesarios y se completará la instalación.
2. Luego, ejecute los comandos para clonar Zcash desde git como se muestra en la siguiente captura de pantalla:
Este comando clonará el repositorio Zcash git localmente. La salida se muestra en la siguiente captura de
pantalla:
3. El siguiente paso es descargar las claves de prueba y verificación, utilizando el siguiente comando de
la captura de pantalla:
Machine Translated by Google
4. Una vez que se ejecute este comando, descargará alrededor de 911 MB de claves en el directorio ~/.zcash-params/ . El
directorio contiene archivos para probar y verificar claves:
5. Una vez que los comandos anteriores se completan con éxito, el código fuente se puede construir usando el siguiente
comando:
./zcutil/build.sh -j$(nproc)
Esto producirá una salida muy larga; si todo va bien, producirá un archivo binario zcashd . Tenga en cuenta que este comando toma
nproc como parámetro, que es básicamente un comando que encuentra la cantidad de núcleos o procesadores en el sistema y
muestra esa cantidad. Si no tiene ese comando, reemplace nproc con la cantidad de procesadores en su sistema.
Una vez que se completa la compilación, el siguiente paso es configurar Zcash. Esto se logra creando un archivo de
configuración con el nombre zcash.conf en el directorio ~/.zcash/ .
La configuración anterior habilita varias características. La primera línea agrega el nodo de red principal y
habilita la conectividad de red principal. rpcuser y rpcpassword son el nombre de usuario y la contraseña de la
interfaz RPC. gen = 1 se usa para habilitar la minería. genproclimit es la cantidad de procesadores que se pueden usar
para la minería. La última línea permite un solucionador de minería más rápido; esto no es necesario si desea utilizar
la minería de CPU estándar.
./zcashd --daemon
Una vez iniciado, esto permitirá la interacción con la interfaz RPC a través de la interfaz de línea de comandos
Zcash-cli. Esto es casi lo mismo que la interfaz de línea de comandos de bitcoin. Una vez que el demonio Zcash está
en funcionamiento, se pueden ejecutar varios comandos para consultar diferentes atributos de Zcash. Las transacciones
se pueden ver localmente mediante la CLI o a través de un explorador de blockchain. Un explorador de blockchain para
Zcash está disponible en: https://explorer.zcha.in/.
Generación de direcciones
Ejecutar el comando Zcash-cli con el parámetro getinfo produce el resultado que se muestra en la siguiente
captura de pantalla. Muestra información valiosa como bloques, dificultad y equilibrio:
Minería de GPU
Además de la minería de CPU, también está disponible una opción de minería de GPU. Todavía no hay un minero
de GPU oficial; sin embargo, los desarrolladores de código abierto han producido varias pruebas de conceptos y
mineros en funcionamiento. The Zcash Company realizó una competencia abierta para alentar a los desarrolladores
a crear y enviar mineros de CPU y GPU. No se ha anunciado ninguna entrada ganadora al momento de escribir este
artículo. Los lectores pueden obtener más información visitando el sitio web, https://zcashminers.org/.
Hay otra minería: usar contratos de minería en la nube disponibles de varios proveedores de minería en la nube en línea.
Los proveedores de servicios de minería en la nube realizan la minería en nombre de los clientes. Además de los contratos
de minería en la nube, los mineros pueden usar su propio equipo para minar a través de pools de minería usando estrato u
otros protocolos. Un ejemplo clave es el pool de Zcash de nice hash. Usando este grupo, los mineros pueden vender su
poder de hash. A continuación se muestra un ejemplo de creación y uso de un minero de CPU en un grupo de minería de
Zcash.
Los siguientes pasos se pueden usar para descargar y compilar nheqminer en una distribución de Ubuntu Linux:
compilación de CD
hacer ..
hacer
Una vez que todos los pasos se completan con éxito, nhequminer se puede ejecutar con el siguiente comando:
Nheqminer toma varios parámetros, como la ubicación (-l), el nombre de usuario (-u) y la cantidad de subprocesos
que se utilizarán para la minería (-t).
Uso de la dirección BTC para recibir pagos por vender poder hash
Uso de la dirección Zcash T para recibir pagos por vender poder de hash
Esto completa la introducción a Zcash; los lectores pueden explorar más sobre Zcash en línea, ya que
es muy volátil en este momento y las cosas pueden cambiar muy rápidamente. Una cosa es segura; Las
pruebas de conocimiento cero de Zcash son una gran innovación y allanan el camino para futuras
aplicaciones que requieren privacidad inherente, como la banca, la medicina o la ley.
Machine Translated by Google
Resumen
En este capítulo, se ha presentado a los lectores el panorama general de las criptomonedas. Se han
discutido en detalle algunas monedas alternativas, especialmente Zcash y Namecoin. Las criptomonedas
son un área muy activa para la investigación, especialmente en aspectos de escalabilidad, privacidad y
seguridad. También se han realizado algunas investigaciones para inventar nuevos algoritmos de
retargeting de dificultad para frustrar la amenaza de centralización en las criptomonedas. Se pueden llevar
a cabo más investigaciones en las áreas de privacidad y especialmente escalabilidad. Los lectores ahora
deberían poder apreciar el concepto de altcoins y varias motivaciones detrás de ellos. También se han
discutido algunos aspectos prácticos, como la minería y el inicio de un nuevo proyecto de moneda, que
esperamos brinde a los lectores una base sólida y les permita explorar más estas áreas. Las altcoins son
un campo de investigación fascinante y abren muchas posibilidades para un futuro descentralizado.
Machine Translated by Google
Capítulo 6. Contratos inteligentes
Este capítulo proporciona una introducción a los contratos inteligentes. Este no es un concepto
nuevo, pero, con el advenimiento de blockchain, el interés en este concepto ha revivido, y ahora es un
área activa de investigación en el espacio blockchain. Debido a los beneficios de ahorro de costos que los
contratos inteligentes pueden aportar a la industria de servicios financieros al reducir el costo de las
transacciones y simplificar los contratos complejos, varias instituciones financieras y académicas están
llevando a cabo una investigación rigurosa para formalizar y hacer que la implementación de los contratos int
Machine Translated by Google
Historia
Los contratos inteligentes fueron teorizados por primera vez por Nick Szabo a fines de la década de 1990, pero
pasaron casi 20 años antes de que se apreciara realmente su verdadero potencial y sus beneficios. Szabo describe los
contratos inteligentes de la siguiente manera:
"Un contrato inteligente es un protocolo de transacción computarizado que ejecuta los términos de un
contrato. Los objetivos generales son satisfacer condiciones contractuales comunes (como términos de
pago, gravámenes, confidencialidad e incluso cumplimiento), minimizar las excepciones tanto maliciosas
como accidentales, y minimizar la necesidad de intermediarios de confianza. Los objetivos económicos
relacionados incluyen reducir las pérdidas por fraude, los arbitrajes y los costos de ejecución, y otros costos
de transacción".
Esta idea de contratos inteligentes se implementó de manera limitada en bitcoin en 2009, donde las transacciones de
bitcoin se pueden usar para transferir el valor entre usuarios, a través de una red peer-to-peer donde los usuarios no
necesariamente confían entre sí y no hay necesidad. para un intermediario de confianza.
Machine Translated by Google
Definición
No hay consenso sobre una definición estándar de contratos inteligentes. Es esencial definir qué es un contrato
inteligente, y el siguiente es el intento del autor de proporcionar una definición generalizada de un contrato inteligente.
Nota
Un contrato inteligente es un programa informático seguro e imparable que representa un acuerdo que se
puede ejecutar y hacer cumplir automáticamente.
La disección de esta definición revela aún más que un contrato inteligente es, de hecho, un programa de
computadora que está escrito en un lenguaje que una computadora o máquina de destino puede entender.
Además, engloba los acuerdos entre partes en forma de lógica empresarial. Otra idea clave es que los contratos
inteligentes se ejecutan automáticamente cuando se cumplen ciertas condiciones. Son exigibles, lo que significa
que todos los términos contractuales se ejecutan según lo definido y esperado, incluso en presencia de adversarios.
La ejecución es un término más amplio que abarca la ejecución tradicional en forma de ley, junto con la
implementación de ciertas medidas y controles que hacen posible ejecutar los términos del contrato sin necesidad
de mediación alguna. Cabe señalar que los verdaderos contratos inteligentes no deben basarse en métodos
tradicionales de aplicación. En su lugar, deberían funcionar según el principio de que el código es ley, lo que
significa que no es necesario que un árbitro o un tercero controlen o influyan en la ejecución del contrato inteligente.
Los contratos inteligentes son autoejecutables en lugar de legalmente exigibles. Esto podría considerarse como el
sueño de un libertario, pero es completamente posible y está en línea con el verdadero espíritu de
contratos inteligentes.
Además, son seguros e imparables, lo que significa que estos programas de computadora deben diseñarse
de tal manera que sean tolerantes a fallas y ejecutables en un período de tiempo razonable. Estos programas
deben ser capaces de ejecutar y mantener un estado interno saludable, incluso si los factores externos son
desfavorables. Por ejemplo, imagine un programa de computadora normal que está codificado con cierta lógica y
se ejecuta de acuerdo con las instrucciones codificadas dentro de él, pero si el entorno en el que se ejecuta o los
factores externos en los que se basa se desvían del estado normal o esperado, el programa puede reaccionar.
abortar arbitrariamente o simplemente. Es importante que los contratos inteligentes sean inmunes a este tipo de
problemas.
Seguro e imparable bien pueden considerarse requisitos o características deseables, pero proporcionará
mayores beneficios a largo plazo si la seguridad y las propiedades imparables se incluyen en la definición del
contrato inteligente desde el principio. Esto permitirá a los investigadores centrarse en estos aspectos desde el
principio y ayudará a construir bases sólidas sobre las que se puedan basar futuras investigaciones.
Algunos investigadores también sugieren que los contratos inteligentes no necesitan ser ejecutables
automáticamente; en cambio, pueden ser lo que se llama automatizables, debido a la entrada manual humana
requerida en ciertos escenarios. Si bien es cierto que en algunos casos es deseable la participación y el control
humanos, no es absolutamente necesario; y, para que un contrato sea realmente inteligente, en opinión de los
autores, debe estar completamente automatizado. Ciertas entradas que deben ser proporcionadas por personas puede
el Machine
uso de Translated
oráculos. by
LosGoogle
oráculos se discutirán más adelante en este capítulo con mayor detalle.
Los contratos inteligentes suelen operar mediante la gestión de su estado interno mediante un modelo de
máquina de estado. Esto permite el desarrollo de un marco efectivo para la programación de contratos
inteligentes, donde el estado de un contrato avanza aún más en función de algunos criterios y condiciones predefin
También hay un debate en curso sobre la cuestión de si el código es aceptable como contrato en un tribunal de
justicia. Esto es totalmente diferente en la presentación de la prosa legal tradicional, aunque representan y hacen
cumplir todas las cláusulas contractuales, pero un tribunal de justicia no entiende el código. Esto plantea varias
preguntas sobre cómo un contrato inteligente puede ser legalmente vinculante: ¿puede desarrollarse de tal manera
que sea fácilmente aceptable y comprensible en un tribunal de justicia? ¿Cómo se puede implementar la resolución
de disputas dentro del código? ¿Es posible? Además, los requisitos normativos y de cumplimiento son otro tema
que debe abordarse antes de que los contratos inteligentes puedan utilizarse con la misma eficacia que los
documentos legales tradicionales.
Las preguntas anteriores abren varias posibilidades, como hacer que el código de contrato inteligente sea
legible no solo por máquinas sino también por personas. Si los humanos y las máquinas pueden entender el
código escrito en un contrato inteligente, podría ser más aceptable en situaciones legales, en lugar de solo una
pieza de código que nadie entiende excepto los programadores. Esta propiedad deseable es un área madura
para la investigación y se ha invertido mucho esfuerzo de investigación en esta área para responder preguntas
sobre la semántica, el significado y la interpretación de un contrato.
Los contratos inteligentes están inherentemente obligados a ser de naturaleza determinista. Esta propiedad
permitirá que cualquier nodo de una red ejecute un contrato inteligente y logre el mismo resultado. Si el resultado
difiere incluso ligeramente entre los nodos, entonces no se puede lograr el consenso y todo un paradigma de
consenso distribuido en blockchain puede fallar. Además, también es deseable que el lenguaje del contrato en sí
sea determinista, lo que garantiza la integridad y estabilidad de los contratos inteligentes. Con lo que quiero decir,
determinista en el sentido de que no hay funciones no deterministas utilizadas en el lenguaje que puedan producir
resultados variados en diferentes nodos. Por ejemplo, varias operaciones de punto flotante calculadas por varias
funciones en una variedad de lenguajes de programación pueden producir diferentes resultados en diferentes
entornos de tiempo de ejecución. Otro ejemplo es el de algunas funciones matemáticas en JavaScript que pueden
producir diferentes resultados para la misma entrada en diferentes navegadores y que, a su vez, pueden generar var
Esto es altamente indeseable en los contratos inteligentes porque, si los resultados son inconsistentes entre los
nodos, nunca se logrará el consenso. Una característica determinista asegura que los contratos inteligentes
siempre produzcan el mismo resultado para una entrada específica. En otras palabras, los programas una vez
compilados producen una lógica de negocios sólida y precisa que está completamente en línea con los requisitos
programados en el código de alto nivel.
Ejecutable automáticamente
Exigible Semánticamente
sólido Seguro e imparable.
Machine
Las dos Translated
primerasbypropiedades
Google se requieren como mínimo, mientras que las dos últimas pueden
no ser necesarias o implementables en ciertos escenarios y se pueden relajar. Por ejemplo, un
contrato de derivados quizás no necesite ser semánticamente sólido e imparable, pero al menos
debería ser automáticamente ejecutable y exigible en un nivel básico. Por otro lado, un título de
propiedad debe ser semánticamente sólido y completo, por lo tanto, para que se implemente como
un contrato inteligente, tanto las computadoras como las personas deben entender el lenguaje. Este
problema de interpretación fue abordado por Ian Grigg con su invención de los contratos ricardianos,
que veremos con más detalle en la siguiente sección.
Machine Translated by Google
contratos ricardianos
Los contratos ricardianos se propusieron originalmente en el documento Financial Cryptography in 7 Layers de Ian
Grigg a fines de la década de 1990. Estos contratos se utilizaron inicialmente en un sistema de negociación y pago de
bonos llamado Ricardo. La idea clave es escribir un documento que sea comprensible y aceptable tanto para un tribunal
de justicia como para el software de computadora. Los contratos ricardianos abordan el desafío de la emisión de valor a
través de Internet. Identifica al emisor y captura todos los términos y cláusulas del contrato en un documento para que
sea aceptable como un contrato legalmente vinculante. Basado en la definición original de Ian Grigg en http://iang.org/
papers/ricardian_contract.html, un contrato ricardiano es un documento que tiene varias de las siguientes propiedades:
En la práctica, los contratos se implementan mediante la producción de un solo documento que contiene los términos
del contrato en prosa legal y las etiquetas legibles por máquina requeridas. Este documento está firmado digitalmente
por el emisor utilizando su clave privada. Luego, este documento se codifica utilizando una función de resumen de
mensaje para producir un hash mediante el cual se puede identificar el documento. Luego, las partes utilizan y firman
este hash durante la ejecución del contrato para vincular cada transacción, y el hash del identificador sirve como prueba
de intención. Esto se representa en el siguiente diagrama, generalmente llamado modelo de corbatín .
El siguiente diagrama muestra el Mundo de la Ley en el lado izquierdo desde donde se origina el documento.
Luego se codifica y el resumen del mensaje resultante se usa como un identificador en todo el mundo de la contabilidad.
El mundo de la contabilidad básicamente puede representar uno o varios sistemas de contabilidad, comercio e
información que se utilizan en una empresa para realizar diversas operaciones comerciales. La idea detrás de este flujo
es que el resumen del mensaje generado al codificar el documento se usa primero en una llamada transacción de
génesis, o primera transacción, y luego se usa en cada transacción como un identificador a lo largo de la ejecución
operativa del contrato.
De esta manera, se crea un vínculo seguro entre el contrato escrito original y cada transacción en el Mundo de la
Contabilidad.
Machine Translated by Google
En bitcoin, se puede observar una implementación muy simple de un contrato inteligente que está
completamente orientado a la ejecución del contrato, mientras que un contrato ricardiano está más orientado a
producir un documento que sea comprensible para los humanos, con algunas partes que un programa de
computadora puede comprender. Esto se puede ver como semántica legal frente a rendimiento operativo
(semántica frente a rendimiento), como se muestra en el siguiente diagrama. Esto fue propuesto originalmente por
Machine
paper Translated
Sobre by Googlede los contratos ricardianos e inteligentes.
la intersección
El diagrama que explica el rendimiento versus la semántica son problemas ortogonales como los describe
Ian Grigg; ligeramente modificado para mostrar ejemplos de diferentes tipos de contratos en ambos ejes
Un contrato inteligente se compone de estos dos elementos (rendimiento y semántica) integrados, lo que
completa un modelo ideal de contrato inteligente.
Un contrato ricardiano se puede representar como una tupla de tres objetos, a saber, prosa, parámetros y
código. La prosa representa el contrato legal en lenguaje regular; el código representa el programa que es una
representación comprensible por computadora de la prosa legal; y los parámetros unen las partes apropiadas del
contrato legal al código equivalente.
Los contratos ricardianos se han implementado en muchos sistemas, como CommonAccord, OpenBazaar,
OpenAssets y Askemos.
Machine Translated by Google
Plantillas de contratos inteligentes
Los contratos inteligentes se pueden implementar para cualquier industria donde sea necesario, pero la mayoría
de los casos de uso actuales están relacionados con la industria financiera. El trabajo reciente en el espacio de
contratos inteligentes específico de la industria financiera ha propuesto la idea de plantillas de contratos inteligentes.
La idea es crear plantillas estándar que proporcionen un marco para respaldar acuerdos legales para instrumentos
financieros. Esto fue propuesto por Clack et al en su artículo llamado Plantillas de contratos inteligentes:
fundamentos, panorama de diseño y direcciones de investigación. El documento también proponía que se crearan
lenguajes específicos de dominio para respaldar el diseño y la implementación de plantillas de contratos inteligentes.
Se ha propuesto un lenguaje llamado CLACK, un lenguaje común para el conocimiento de contrato aumentado y se ha
comenzado a investigar para desarrollar el lenguaje. Este lenguaje pretende ser muy rico y proporcionar una gran
variedad de funciones que van desde admitir prosa legal hasta la capacidad de ejecutarse en múltiples plataformas
y funciones criptográficas.
Los contratos en la industria financiera no son un concepto nuevo y varios DSL de idiomas específicos
de dominio ya están en uso en la industria financiera para proporcionar un lenguaje específico para un
dominio específico. Por ejemplo, hay DSL disponibles que respaldan el desarrollo de productos de
seguros, representan derivados de energía o se utilizan para crear estrategias comerciales. La lista
continúa y se puede encontrar una lista completa de lenguajes específicos de dominios financieros en http
Es importante comprender el concepto de lenguajes específicos de dominio. Estos lenguajes se desarrollan con
una expresividad limitada para una aplicación o área de interés particular. Los lenguajes específicos de dominio
(DSL) son diferentes de los lenguajes de programación de propósito general (GPL): los DSL tienen un pequeño
conjunto de funciones que son suficientes y están optimizadas para el dominio en el que están destinados y, a
diferencia de las GPL, generalmente no se usan. para construir grandes programas de aplicación de propósito
general. Según la filosofía de diseño de los DSL, se puede prever que dichos lenguajes se puedan desarrollar
específicamente para escribir contratos inteligentes. Ya se ha hecho algo de trabajo y Solidity es uno de esos
lenguajes que se ha introducido con Ethereum blockchain para escribir contratos inteligentes. Serpent es otro
lenguaje que se introdujo con Ethereum, aunque no se usa tanto como Solidity.
Esta idea de lenguajes específicos de dominio para la programación de contratos inteligentes se puede extender
aún más a un lenguaje gráfico específico de dominio, una plataforma de modelado de contratos inteligentes donde
un experto en el dominio (no un programador) puede usar una interfaz gráfica de usuario y un lienzo para definir y
dibujar. la semántica y el desempeño de un contrato financiero. Una vez que se ha dibujado y completado el flujo,
se puede emular primero para probar y luego implementar desde el mismo sistema a la plataforma de destino, que pu
Este tampoco es un concepto nuevo y se utiliza un enfoque similar en el producto streambase de Tibco, que es un
sistema basado en Java que se utiliza para crear sistemas de comercio de alta frecuencia impulsados por eventos.
Se propone que la investigación también se lleve a cabo en el área del desarrollo de DSL de alto nivel que puedan
usarse para programar un contrato inteligente en una interfaz gráfica de usuario fácil de usar, lo que permite que
un no programador diseñe un contrato inteligente.
Machine Translated by Google
Oráculos
Los oráculos son un componente importante del ecosistema de contratos inteligentes. La limitación de los
contratos inteligentes es que no pueden acceder a datos externos que podrían ser necesarios para controlar la
ejecución de la lógica empresarial; por ejemplo, el precio de las acciones de un valor que el contrato requiere para
liberar los pagos de dividendos. Los oráculos se pueden utilizar para proporcionar datos externos a los contratos
inteligentes. Un Oracle es una interfaz que entrega datos de una fuente externa a contratos inteligentes. Según la
industria y los requisitos, Oracles puede entregar diferentes tipos de datos que van desde informes meteorológicos,
noticias del mundo real y acciones corporativas hasta datos provenientes de dispositivos de Internet de las cosas
(IoT). Los oráculos son entidades confiables que utilizan un canal seguro para transferir datos a un contrato inteligen
Los oráculos también son capaces de firmar digitalmente los datos para probar que la fuente de los datos es auténtic
Los contratos inteligentes luego pueden suscribirse a los Oracles, y los contratos inteligentes pueden extraer los
datos, o los Oracles pueden enviar los datos a los contratos inteligentes. También es necesario que los oráculos
no puedan manipular los datos que proporcionan y deben poder proporcionar datos auténticos. Aunque se confía
en los oráculos, es posible que, en algunos casos, los datos sean incorrectos debido a la manipulación.
Por lo tanto, es necesario que los oráculos no puedan cambiar los datos. Esta validación se puede proporcionar
mediante el uso de varios esquemas notariales, que se analizan más adelante en este capítulo. En este enfoque ya
se ve un tema que quizás no es deseable en algunos casos, y es el tema de la confianza. ¿Cómo confía en un
tercero sobre la calidad y la autenticidad de los datos que proporciona? Esto es especialmente cierto en el mundo
financiero, donde los datos del mercado deben ser precisos y fiables. Puede ser aceptable que un diseñador de
contratos inteligentes acepte datos para un oráculo proporcionados por un tercero confiable de gran reputación,
pero el problema de la centralización aún permanece. Estos tipos de oráculos se pueden llamar oráculos estándar
o simples.
Otro tipo de Oracle, que surgió esencialmente debido a los requisitos de descentralización, puede llamarse
Oracles descentralizados . Estos tipos de oráculos se pueden construir en función de algún mecanismo
distribuido. También se puede prever que los propios oráculos puedan obtener datos de otra cadena de bloques
impulsada por un consenso distribuido, lo que garantiza la autenticidad de los datos. Por ejemplo, una institución
que ejecuta su propia cadena de bloques privada puede publicar su fuente de datos a través de un Oracle que
luego puede ser consumido por otras cadenas de bloques.
Los investigadores también introducen otro concepto de oráculos de hardware donde se requieren datos del
mundo real de dispositivos físicos. Por ejemplo, esto se puede usar en telemetría e IoT. Sin embargo, este enfoque
requiere un mecanismo en el que los dispositivos de hardware no puedan ser manipulados. Esto se puede lograr
mediante el uso de dispositivos a prueba de manipulaciones.
Hay plataformas disponibles ahora para habilitar un contrato inteligente para obtener datos externos usando un Orac
Oracle utiliza diferentes métodos para escribir datos en la cadena de bloques según el tipo de cadena de bloques
utilizada. Por ejemplo, en la cadena de bloques de bitcoin, un oráculo puede escribir datos en una transacción
específica a través de un código de operación OP_RETURN , y un contrato inteligente puede monitorear esa
transacción y leer los datos. Varios servicios en línea como http://www.oraclize.it/ y https://www.realitykeys.com/
están disponibles que proporcionan servicios de Oracle. Además, otro servicio en https://smartcontract.com/ es
Machine Translated
disponible by Google datos externos y la capacidad de realizar pagos mediante contratos inteligentes.
que proporciona
El objetivo de todos estos servicios es permitir que el contrato inteligente obtenga los datos que necesita para
ejecutar y tomar decisiones. Para probar la autenticidad de los datos recuperados por los oráculos de fuentes
externas, se pueden utilizar mecanismos como TLSnotary que producen pruebas de comunicación entre la fuente
de datos y el oráculo. Esto garantiza que los datos devueltos al contrato inteligente se recuperen definitivamente
de la fuente. Puede encontrar más detalles sobre TLSnotary aquí https://tlsnotary.org/.
También se ha propuesto e implementado una idea de Smart Oracle en Codius. Los oráculos inteligentes
son básicamente entidades como los oráculos, pero con la capacidad adicional de ejecución de código de
contrato. Los oráculos inteligentes propuestos por Codius se ejecutan con Google Native Client. que es un
entorno de espacio aislado para ejecutar código nativo x86 que no es de confianza. Codius está disponible en https
Machine Translated by Google
Implementación de contratos inteligentes en una cadena de bloques
Los contratos inteligentes pueden implementarse o no en una cadena de bloques, pero tiene sentido implementarlos
en una cadena de bloques debido al mecanismo de consenso distribuido proporcionado por la cadena de bloques.
Ethereum es un ejemplo de una cadena de bloques que admite de forma nativa el desarrollo y la implementación de contr
Los contratos inteligentes en la cadena de bloques de Ethereum suelen formar parte de una aplicación
más grande, como una organización autónoma descentralizada (DAO).
A modo de comparación, en la cadena de bloques de bitcoin, el campo lock_time en la transacción de bitcoin puede
verse como un habilitador de una versión básica de un contrato inteligente. El campo lock_time permite bloquear una
transacción hasta un tiempo específico o después de una cantidad de bloques, lo que hace cumplir un contrato básico
de que una determinada transacción solo se puede desbloquear si se cumplen ciertas condiciones (tiempo transcurrido o
Sin embargo, esto es de naturaleza muy limitada y solo debe verse como un ejemplo de un contrato inteligente
básico. Además del ejemplo mencionado anteriormente, el lenguaje de secuencias de comandos de bitcoin, aunque
limitado, se puede utilizar para construir contratos inteligentes básicos. Una posibilidad es financiar una dirección de
bitcoin que pueda gastar cualquier persona que demuestre un ataque de colisión de hash. Esta idea se presentó en el
foro de Bitcointalk y se puede encontrar más información en https://bitcointalk.org/index.php?topic=293382.0. Esto
también puede considerarse una forma básica de contrato inteligente.
Machine Translated by Google
el DAO
El DAO es uno de los proyectos de crowdfunding más importantes y comenzó en abril de 2016. Básicamente,
se trataba de un conjunto de contratos inteligentes escritos para proporcionar una plataforma para la inversión.
Debido a un error en el código, este fue pirateado en junio de 2016 y se desvió el equivalente a 50 millones de
dólares de la DAO a otra cuenta. Esto resultó en una bifurcación dura en Ethereum para recuperarse del ataque.
Cabe señalar que la noción de código es ley, o contratos inteligentes imparables, debe verse con cierto
escepticismo ya que la implementación de estos conceptos no está lo suficientemente madura como para
garantizar una confianza plena e incuestionable. Esto es evidente a partir de los eventos recientes en los que
la fundación Ethereum pudo detener y cambiar la ejecución de The DAO mediante la introducción de una
bifurcación dura. Aunque esta bifurcación dura se introdujo por razones genuinas, va en contra del verdadero
espíritu de descentralización y la noción de código es ley. Por otro lado, la resistencia contra esta bifurcación
dura y algunos mineros que decidieron mantener la minería en la cadena original dieron como resultado la
creación de Ethereum Classic. Esta es la cadena de bloques Ethereum original, no bifurcada, donde el código sig
Este ataque destaca los peligros de los contratos inteligentes y la absoluta necesidad de desarrollar
un lenguaje formal para los contratos inteligentes. El ataque también destacó la importancia de realizar
pruebas exhaustivas. Recientemente se han descubierto varias vulnerabilidades en Ethereum en torno al
lenguaje de desarrollo de contratos inteligentes. Por lo tanto, es de suma importancia que se desarrolle un
marco estándar para abordar todos estos problemas. Algunos trabajos ya han comenzado como se discutió
anteriormente, pero esta área está lista para más investigación a fin de abordar las limitaciones en los lenguajes
Machine Translated by Google
Resumen
Este capítulo comenzó presentando una historia de los contratos inteligentes y fue seguido por
una discusión detallada sobre la definición de un contrato inteligente. Como no hay acuerdo sobre la
definición estándar de un contrato inteligente, intentamos introducir una definición que abarque el quid de l
También se proporcionó una introducción a los contratos ricardianos y se explicó la diferencia entre
los contratos ricardianos y los contratos inteligentes, destacando el hecho de que los contratos
ricardianos se ocupan de la definición del contrato, mientras que los contratos inteligentes están
orientados a la ejecución real del contrato. Se discutió el concepto de plantillas de contrato inteligente,
sobre el cual se está realizando actualmente una investigación activa de alta calidad en la academia y la
industria. También se discutieron algunas ideas sobre la posibilidad de crear lenguajes específicos de
dominio de alto nivel para crear contratos inteligentes o plantillas de contratos inteligentes. En secciones
posteriores del capítulo, se introdujeron los conceptos de Oracles seguidos de una breve discusión sobre
la DAO y los problemas de seguridad en la DAO y los contratos inteligentes.
Machine Translated by Google
Capítulo 7. Etéreo 101
Este capítulo pretende ser una introducción a la cadena de bloques de Ethereum. Se le presentarán
los fundamentos y los conceptos teóricos avanzados detrás de Ethereum. Se brindará una discusión
detallada sobre varios componentes, protocolos y algoritmos relevantes para la cadena de bloques de
Ethereum para que pueda comprender la teoría detrás de este paradigma de cadena de bloques.
Además, en este capítulo se tratará una introducción práctica y detallada al software de billetera, la
minería y la configuración de nodos de Ethereum. También se presentará material sobre varios
desafíos, como la seguridad y la escalabilidad que enfrenta Ethereum. Además, se discutirán las dinámic
Machine Translated by Google
Introducción
Ethereum fue conceptualizado por Vitalik Buterin en noviembre de 2013. La idea clave propuesta fue
el desarrollo de un lenguaje completo de Turing que permita el desarrollo de programas arbitrarios
(contratos inteligentes) para blockchain y aplicaciones descentralizadas. Esto contrasta con bitcoin,
donde el lenguaje de secuencias de comandos es muy limitado y solo permite operaciones básicas y ne
Machine Translated by Google
Clientes y lanzamientos de Ethereum
Se han desarrollado varios clientes de Ethereum usando diferentes lenguajes y actualmente los más
populares son go-Ethereum y parity. go-Ethereum se desarrolló con Golang, mientras que la paridad se
creó con Rust. También hay otros clientes disponibles, pero por lo general, el cliente go-Ethereum
conocido como geth es suficiente para todos los propósitos. Mist es una billetera de interfaz gráfica de
usuario (GUI) fácil de usar que ejecuta geth en segundo plano para sincronizarse con la red. Se
proporcionarán más detalles sobre esto más adelante en el capítulo, en la sección de instalación y minería.
Ethereum, al igual que cualquier otra cadena de bloques, se puede visualizar como una máquina de estado basada en
transacciones. Esto se menciona en el artículo amarillo de Ethereum escrito por el Dr. Gavin Wood. La idea es que un estado
de génesis se transforme en un estado final mediante la ejecución de transacciones de forma incremental. La transformación
final se acepta entonces como la versión absoluta e indiscutible del Estado. En el siguiente diagrama, se muestra la función
de transición de estado de Ethereum, donde la ejecución de una transacción resultó en una transición de estado.
En el ejemplo anterior, se inicia una transferencia de 2 Ether desde la dirección 4718bf7a a la dirección 741f7a2. El
estado inicial representa el estado antes de la ejecución de la transacción y el estado final es el aspecto del estado
transformado. Esto se discutirá con más detalle más adelante en el capítulo, pero el objetivo de este ejemplo es presentar
la idea central de la transición de estado en Ethereum.
Machine Translated by Google
Moneda (ETH y ETC)
Como incentivo para los mineros, Ethereum también recompensa su moneda nativa llamada Ether,
abreviada como ETH. Después del hackeo de DAO (descrito más adelante), se propuso una bifurcación
dura para mitigar el problema; por lo tanto, ahora hay dos blockchains de Ethereum: una se llama
Ethereum classic y su moneda está representada por ETC, mientras que la versión hard-fork es ETH, que
continúa creciendo y sobre la cual se está llevando a cabo un desarrollo activo. ETC, sin embargo, tiene
sus propios seguidores con una comunidad dedicada que está desarrollando aún más ETC, que es la
versión original no bifurcada de Ethereum. Este capítulo se centra principalmente en ETH, que
actualmente es la cadena de bloques de Ethereum más activa y oficial.
Machine Translated by Google
tenedores
Con la última versión de Homestead, debido a las principales actualizaciones del protocolo, resultó en una
bifurcación dura. El protocolo se actualizó en el bloque número 1.150.000, lo que resultó en la migración de la
primera versión de Ethereum conocida como Frontier a la segunda versión de Ethereum llamada homestead.
Una bifurcación no intencional reciente que ocurrió el 24 de noviembre de 2016 a las 14:12:07 UTC se debió a un
error en el mecanismo de registro en diario del cliente geth. La bifurcación de la red ocurrió en el bloque número
2,686,351. Este error provocó que geth no pudiera revertir las eliminaciones de cuentas vacías en el caso de la excepc
Esto no fue un problema de paridad (otro cliente popular de Ethereum). Esto significa que a partir del número de
bloque 2686351, la cadena de bloques de Ethereum se divide en dos, una que se ejecuta con clientes de paridad y
la otra con geth. Este problema se resolvió con el lanzamiento de la versión 1.5.3 de geth.
Machine Translated by Google
Gas
Otro concepto clave en Ethereum es el del gas. Se requiere que todas las transacciones en la cadena de
bloques de Ethereum cubran el costo del cálculo que están realizando. El costo está cubierto por algo
llamado gas o criptocombustible, que es un nuevo concepto introducido por Ethereum. Este gas como
tarifa de ejecución es pagado por adelantado por los originadores de la transacción. El combustible se
consume con cada operación. Cada operación tiene asociada una cantidad predefinida de gas. Cada transacción
especifica la cantidad de gas que está dispuesto a consumir para su ejecución. Si se queda sin gas antes de
que se complete la ejecución, cualquier operación realizada por la transacción hasta ese momento se revierte.
Si la transacción se ejecuta con éxito, el gas restante se reembolsa al originador de la transacción.
Este concepto no debe confundirse con el canon minero, que es un concepto diferente al que se utiliza para
pagar el gas como canon a los mineros. Más adelante en el capítulo se proporcionará más información sobre
el concepto y los cálculos relacionados con el gas y las operaciones.
Machine Translated by Google
El mecanismo de consenso
El mecanismo de consenso en Ethereum se basa en el protocolo GHOST propuesto originalmente por Zohar y
Sompolinsky en diciembre de 2013. Aquellos interesados en él pueden explorar el documento original detallado en
http://eprint.iacr.org/2013/881.pdf.
Ethereum usa una versión más simple de este protocolo, donde la cadena que tiene el mayor esfuerzo computacional
gastado en ella para construirla se identifica como la versión definitiva. Otra forma de verlo es encontrar la cadena más
larga, ya que la cadena más larga debe haberse construido consumiendo un esfuerzo de minería adecuado.
Greedy Heaviest Observed Subtree (GHOST) se introdujo por primera vez como un mecanismo para aliviar los
problemas que surgían de los rápidos tiempos de generación de bloques que conducían a bloques obsoletos o
huérfanos. En GHOST, los bloques obsoletos se agregan en los cálculos para determinar la cadena de bloques más
larga y pesada. Los bloques obsoletos se llaman tíos u ommers en Ethereum.
El siguiente diagrama muestra una comparación rápida entre la cadena más larga y la más pesada:
produce bytes sin procesar que son adecuados para el almacenamiento y la transmisión a través de la red. RLP no codifica datos; en
cambio, su objetivo principal es codificar estructuras.
el estado de la cuenta
El estado de la cuenta consta de cuatro campos: nonce, balance, storageroot y codehash y se describe en detalle aquí.
Mientras tanto
Este es un valor que se incrementa cada vez que se envía una transacción desde la dirección. En el caso de cuentas de contrato,
representa el número de contratos creados por la cuenta. Las cuentas de contrato son uno de los dos tipos de cuentas que existen en
Ethereum; se explicarán más adelante en el capítulo con más detalle.
Balance
Este valor representa el número de Weis, que es la unidad más pequeña de la moneda (Ether) en Ethereum que posee la
dirección.
Raíz de almacenamiento
Este campo representa el nodo raíz de un árbol de Merkle Patricia que codifica el contenido de almacenamiento de la cuenta.
código hash
Este es un campo inmutable que contiene el hash del código de contrato inteligente asociado con la cuenta. En el caso de cuentas
normales, este campo contiene el hash Keccak de 256 bits de una cadena vacía.
Este código se invoca a través de una llamada de mensaje.
El estado mundial y su relación con las cuentas trie, las cuentas y el encabezado del bloque se pueden visualizar en el siguiente
diagrama. Muestra la estructura de datos de la cuenta en el medio del diagrama, que contiene un hash raíz de almacenamiento derivado
del nodo raíz del trie de almacenamiento de la cuenta que se muestra a la izquierda.
La estructura de datos de la cuenta se usa luego en el trie de estado mundial, que es un mapeo entre direcciones y estados de cuenta.
Finalmente, el nodo raíz del trie de estado mundial se procesa utilizando el algoritmo Keccak de 256 bits y se convierte en parte de la
estructura de datos del encabezado del bloque, que se muestra en el lado derecho del diagrama como hash de raíz de estado.
Machine Translated by Google
Trie de cuentas (contenido de almacenamiento de la cuenta), tupla de cuenta, trie de estado mundial y hash de raíz de
estado y su relación
Accounts trie es básicamente un árbol de Merkle Patricia que se utiliza para codificar el contenido de almacenamiento de una cuen
El contenido se almacena como una asignación entre hashes de 256 bits de keccak de claves enteras de 256 bits a valores
enteros de 256 bits codificados en RLP.
Machine Translated by Google
Actas
Una transacción en Ethereum es un paquete de datos firmado digitalmente que utiliza una clave privada que
contiene las instrucciones que, cuando se completan, dan como resultado una llamada de mensaje o la creación
de un contrato. Las transacciones se pueden dividir en dos tipos según el resultado que producen:
Transacciones de llamadas de mensajes: esta transacción simplemente produce una llamada de mensajes que
se usa para pasar mensajes de una cuenta a otra.
Transacciones de creación de contratos: como su nombre indica, estas transacciones dan como resultado la
creación de un nuevo contrato. Esto significa que cuando esta transacción se ejecuta con éxito, crea una
cuenta con el código asociado.
Ambas transacciones se componen de una serie de campos comunes, que se describen aquí.
Mientras tanto
Nonce es un número que se incrementa en uno cada vez que el remitente envía una transacción. Debe ser igual al
número de transacciones enviadas y se utiliza como identificador único de la transacción. Un valor nonce solo se
puede usar una vez.
límite de gas
El campo gasLimit contiene el valor que representa la cantidad máxima de gas que se puede consumir para
ejecutar la transacción. El concepto de gas y límite de gas se tratará más adelante en el capítulo con más detalle.
Por ahora, es suficiente decir que esta es la cantidad de tarifa en Ether que un usuario (por ejemplo, el remitente de
la transacción) está dispuesto a pagar por el cómputo.
A
Como sugiere el nombre, el campo para es un valor que representa la dirección del destinatario de la
transacción.
Valor
El valor representa el número total de Wei que se transferirá al destinatario; en el caso de una cuenta de contrato,
esto representa el saldo que tendrá el contrato.
Firma
La firma se compone de tres campos, a saber, v, r y s. Estos valores representan la firma digital (R, S) y alguna
información que se puede utilizar para recuperar la clave pública (V). También de la transacción a partir de la cual
también se puede determinar el remitente de la transacción. La firma se basa en ECDSA
Machine y
esquema Translated
hace usobyde
Google
la curva SECP256k1. La teoría de la criptografía de curva elíptica se analizó en el
Capítulo 3, Criptografía y fundamentos técnicos. En esta sección, ECDSA se presentará en el contexto de su uso
en Ethereum.
V es un valor de un solo byte que representa el tamaño y el signo del punto de la curva elíptica y puede ser 27 o 28. V
se utiliza en el contrato de recuperación ECDSA como ID de recuperación. Este valor se utiliza para recuperar (derivar)
la clave pública de la clave privada. En secp256k1, se espera que el ID de recuperación sea 0 o 1. En Ethereum, esto
se compensa con 27. Más adelante en este capítulo se proporcionarán más detalles sobre la función ECDSARECOVER.
R se deriva de un punto calculado en la curva. Primero, se toma un número aleatorio, que se multiplica con el
generador de la curva para calcular un punto en la curva. La parte de la coordenada x de este punto es R. R se
codifica como una secuencia de 32 bytes. R debe ser mayor que 0 y menor que el límite secp256k1n
(115792089237316195423570985008687907852837564279074904382605163141518161494337).
S se calcula multiplicando R por la clave privada y añadiéndolo al hash del mensaje a firmar y finalmente dividiéndolo
por el número aleatorio elegido para calcular R. S también es una secuencia de 32 bytes. R y S juntos representan
la firma.
Para firmar una transacción se utiliza la función ECDSASIGN , que toma como entrada el mensaje a firmar y la clave
privada y produce V, un valor de un solo byte; R, un valor de 32 bytes y S, otro valor de 32 bytes. La ecuación es la
siguiente:
En eso
El campo Init se usa solo en transacciones destinadas a crear contratos. Esto representa una matriz de bytes de
longitud ilimitada que especifica el código EVM que se utilizará en el proceso de inicialización de la cuenta.
El código contenido en este campo se ejecuta solo una vez, cuando se crea la cuenta por primera vez, y se destruye
inmediatamente después de eso.
Init también devuelve otra sección de código llamada cuerpo, que persiste y se ejecuta en respuesta a las llamadas
de mensajes que puede recibir la cuenta del contrato. Estas llamadas de mensajes pueden enviarse mediante una
transacción o una ejecución de código interno.
Datos
Si la transacción es una llamada de mensaje, se usa el campo de datos en lugar de init, que representa los datos de
entrada de la llamada de mensaje. También tiene un tamaño ilimitado y está organizado como una matriz de bytes.
Esto se puede visualizar en el siguiente diagrama, donde una transacción es una tupla de los campos mencionados
anteriormente, que luego se incluye en un trie de transacción (un árbol de Merkle-Patricia modificado) compuesto por
las transacciones que se incluirán. Finalmente, el nodo raíz de la transacción trie se procesa mediante un Keccak de 256
Machine Translated
algoritmo by Google
y se incluye en el encabezado del bloque junto con una lista de transacciones en el bloque.
Remitente
Transactor original
Gas disponible
precio de la gasolina
Las direcciones generadas como resultado de la transacción de creación del contrato tienen una longitud de 160 bits. Precisamente,
como se define en el papel amarillo, son los 160 bits más a la derecha del hash Keccak de la codificación RLP de la estructura que
contiene solo el remitente y el nonce. Inicialmente, el nonce en la cuenta se establece en cero. El saldo de la cuenta se fija al valor
pasado al contrato. El almacenamiento también está configurado para vaciar.
El código hash es el hash Keccak de 256 bits de la cadena vacía.
La cuenta se inicializa cuando se ejecuta el código EVM (Inicialización del código EVM). En el caso de alguna excepción durante la
ejecución del código, como no tener suficiente gas, el estado no cambia. Si la ejecución es exitosa, la cuenta se crea después del pago
de los costos de gas correspondientes. La versión actual de Ethereum (homestead) especifica que el resultado de la transacción del
contrato es un nuevo contrato con su saldo o no se crea un nuevo contrato sin transferencia de valor. Esto contrasta con las versiones
anteriores, en las que el contrato se podía crear independientemente de que la implementación del código del contrato fuera exitosa o
Una llamada de mensaje requiere varios parámetros para su ejecución, que se enumeran a continuación:
Remitente
El originador de la transacción
Recipiente
La cuenta cuyo código se va a ejecutar.
Gas disponible
Valor
precio de la gasolina
Las llamadas de mensajes dan como resultado una transición de estado. Las llamadas de mensajes también producen datos de salida,
que no se utilizan si se ejecutan transacciones. En los casos en que el código de la máquina virtual activa las llamadas de mensajes, se
utiliza la salida producida por la ejecución de la transacción.
EVM es un entorno de tiempo de ejecución totalmente aislado y aislado. El código que se ejecuta en el EVM no tiene
acceso a ningún recurso externo, como una red o un sistema de archivos.
Como se discutió anteriormente, EVM es una arquitectura basada en pilas. EVM tiene un diseño big-endian y utiliza
palabras de 256 bits de ancho. Este tamaño de palabra permite cálculos de criptografía de curva elíptica y hash de
Keccak de 256 bits.
Hay dos tipos de almacenamiento disponibles para contratos y EVM. El primero se llama memoria, que es una
matriz de bytes. Cuando un contrato finaliza la ejecución del código, la memoria se borra. Es similar al concepto de
RAM. El otro tipo, llamado almacenamiento, se almacena permanentemente en la cadena de bloques. Es una tienda de
valor clave.
La memoria es ilimitada pero está restringida por los requisitos de la tarifa de gas. El almacenamiento asociado con
la máquina virtual es una matriz de palabras direccionables por palabra que no es volátil y se mantiene como parte del
estado del sistema. Las claves y el valor tienen un tamaño y almacenamiento de 32 bytes. El código del programa se
almacena en una memoria virtual de solo lectura (ROM virtual) a la que se puede acceder mediante la instrucción
CODECOPY. La instrucción CODECOPY se utiliza para copiar el código del programa en la memoria principal.
Inicialmente, todo el almacenamiento y la memoria se establecen en cero en el EVM.
El siguiente diagrama muestra el diseño de la EVM donde la ROM virtual almacena el código del programa que se
copia en la memoria principal mediante CODECOPY. A continuación, la EVM lee la memoria principal consultando el
contador del programa y ejecuta las instrucciones paso a paso. El contador de programa y la pila EVM se actualizan
en consecuencia con cada ejecución de instrucción.
Machine Translated by Google
operación EVM
La optimización de EVM es un área activa de investigación e investigaciones recientes han sugerido que EVM
puede optimizarse y ajustarse en un grado muy fino para lograr un alto rendimiento. Ya se está investigando la
posibilidad de utilizar el ensamblado web (WASM). WASM es desarrollado por Google, Mozilla y Microsoft y
ahora está siendo diseñado como un estándar abierto por el grupo de la comunidad W3C.
El objetivo de WASM es poder ejecutar código de máquina en el navegador que resulte en una ejecución a
velocidad nativa. Del mismo modo, el objetivo de EVM 2.0 es poder ejecutar el conjunto de instrucciones EVM
(Opcodes) de forma nativa en las CPU, haciéndolo así más rápido y eficiente.
Entorno de ejecución
Hay algunos elementos clave que requiere el entorno de ejecución para ejecutar el código. Los parámetros
clave los proporciona el agente de ejecución, por ejemplo, una transacción. Estos se enumeran a continuación:
El entorno de ejecución se puede visualizar como una tupla de nueve elementos, de la siguiente manera:
Estado de la máquina
El EVM también mantiene internamente el estado de la máquina. El estado de la máquina se actualiza después de cada ciclo de ejecución
de EVM. Una función de iterador (detallada en la siguiente sección) se ejecuta en la máquina virtual, que genera los resultados de un solo
ciclo de la máquina de estado. El estado de la máquina es una tupla que consta de los siguientes elementos:
Gas disponible
El contador de programa, que es un entero positivo hasta 256
Contenido de la memoria
Número activo de palabras en la memoria
Contenido de la pila
El EVM está diseñado para manejar excepciones y se detendrá (detendrá la ejecución) en caso de que ocurra cualquiera de las siguientes
excepciones:
La función iteradora
La función de iterador mencionada anteriormente realiza varias funciones importantes que se utilizan para establecer el siguiente
estado de la máquina y, finalmente, el estado mundial. Estas funciones incluyen lo siguiente:
Obtiene la siguiente instrucción de una matriz de bytes donde el código de la máquina se almacena en el entorno de ejecución.
El estado de la máquina se puede ver como una tupla que se muestra en el siguiente diagrama:
Machine Translated by Google
La máquina virtual también puede detenerse en condiciones normales si se encuentran códigos de operación STOP o SUICIDE o
El código escrito en un lenguaje de alto nivel como serpent, LLL o Solidity se convierte en el código de bytes que EVM entiende para
que EVM lo ejecute. Solidity es el lenguaje de alto nivel que se ha desarrollado para Ethereum con JavaScript como sintaxis para
escribir código para contratos inteligentes. Una vez que se escribe el código, se compila en un código de bytes que el EVM puede entender
usando el compilador de Solidity llamado solc.
Machine
LLL Translated
(Lisp-like by Google
Low-level language) es otro lenguaje que se utiliza para escribir código de contrato inteligente.
Serpent es un lenguaje de alto nivel similar a Python que se puede usar para escribir contratos inteligentes para Ethere
{
uint x=2; función
suma1(uint x) devuelve (uint y) { y=x+2;
}}
Este programa se convierte en código de bytes, como se muestra aquí. Los detalles sobre cómo compilar código
de solidez con ejemplos se darán en el próximo capítulo.
606060405260e060020a6000350463989e17318114601c575b6000565b346000576029600435603b
565b60408051918252519081900360200190f35b600281015b91905056
Códigos de operación PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0x2 PUSH1 0x0 SSTORE CALLVALUE PUSH1 0x0 JUMPI JUMPDEST PUSH1 0x45
DUP1 PUSH1 0x1A PUSH1 0x0 CODECOPIA PUSH1 0x0
RETORNO PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0xE0 PUSH1 0x2 EXP PUSH1 0x0
PUSH4 0x989E1731 DUP2 EQ PUSH1 0x1C JUMPI JUMPDEST PUSH1 0x0
JUMP JUMPDEST CALLVALUE PUSH1 0x0 JUMPI PUSH1 0x29 PUSH1 0x4 CALLDATALOAD PUSH1 0x3B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD
SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2
SWAP1 SUB PUSH1 0x20 AÑADIR SWAP1 VOLVER JUMPDEST PUSH1 0x2 DUP2 AÑADIR JUMPDEST SWAP2
SALTO POP SWAP1
Hay diferentes códigos de operación que se han introducido en el EVM. Los códigos de operación se dividen en
múltiples categorías según la operación que realizan. La lista de códigos de operación con su significado y uso se
presenta aquí.
Operaciones aritmeticas
Toda la aritmética en EVM es módulo 2^256. Este grupo de códigos de operación se utiliza para realizar
operaciones aritméticas básicas. El valor de estas operaciones va desde 0x00 hasta 0x0b.
Tenga en cuenta que STOP no es una operación aritmética, pero se clasifica en esta lista de operaciones
aritméticas debido al rango de valores (0) en el que se encuentra.
Operaciones lógicas
Las operaciones lógicas incluyen operaciones que se utilizan para realizar comparaciones y operaciones
lógicas booleanas. El valor de estas operaciones está en el rango de 0x10 a 0x1a.
Operaciones criptográficas
Solo hay una operación en esta categoría denominada SHA3. Vale la pena señalar que este no es el SHA3
estándar estandarizado por NIST, sino la implementación original de Keccak.
Machine Translated by Google
Información ambiental
Hay un total de 13 instrucciones en esta categoría. Estos códigos de operación se utilizan para proporcionar
información relacionada con direcciones, entornos de tiempo de ejecución y operaciones de copia de datos.
DIRECCIÓN 0x30 0 1 2 Se utiliza para obtener la dirección de la cuenta que se está ejecutando actualmente
ORIGEN 0x32 0 1 2 Se utiliza para obtener la dirección del remitente de la transacción original
LLAMADOR 0x33 0 1 2 Se utiliza para obtener la dirección de la cuenta que inició la ejecución
CARGA DE DATOS DE LLAMADA 0x35 1 1 3 Recupera los datos de entrada que se pasó un parámetro con la llamada de mensaje
CALLDATASIZE 0x36 0 1 2 Se utiliza para recuperar el tamaño de los datos de entrada pasados con la llamada de mensaje
LLAMADA DATOS COPIA 0x37 3 0 3 Se utiliza para copiar datos de entrada pasados con la llamada de mensaje desde el entorno actual a la memoria.
PRECIO DEL GASOLINA 0x3a 0 1 2 Recupera el precio del gas especificado por la transacción de inicio.
Este conjunto de instrucciones está relacionado con la recuperación de varios atributos asociados con un bloque:
BLOQUEHASH 0x40 1 1 20 Obtiene el hash de uno de los 256 bloques completados más recientemente
ordenador personal 0x58 0 1 2 Se utiliza para recuperar el valor en el contador de programa antes del incremento.
SALTO 0x5b 0 0 1 Sirve para marcar un destino válido para saltos sin efecto en el estado de la máquina durante la ejecución.
Operaciones de inserción
Estas operaciones incluyen operaciones PUSH que se utilizan para colocar elementos en la pila. El rango
de estas instrucciones es de 0x60 a 0x7f. Hay 32 operaciones PUSH disponibles en total en el EVM.
Operación PUSH, que lee de la matriz de bytes del código del programa.
EMPUJAR1. . . 0x60 ... Se utiliza para colocar N elementos de bytes big-endian alineados a la derecha en la pila. N es un valor que varía de 1 byte a 32
0 1 3
EMPUJAR 32 0x7f bytes (palabra completa) en función de la mnemotécnica utilizada.
Operaciones de duplicación
Machine
Como Translated
sugiere by Google
el nombre, las operaciones de duplicación se utilizan para duplicar elementos de la pila. El rango de
valores es de 0x80 a 0x8f. Hay 16 instrucciones DUP disponibles en el EVM. Los elementos colocados en la pila o
eliminados de la pila también cambian gradualmente con la mnemotécnica utilizada; por ejemplo, DUP1 elimina un
elemento de la pila y coloca dos elementos en la pila, mientras que DUP16 elimina 16 elementos de la pila y coloca 17
elementos.
DUP1. . . 0x80 ... Se utiliza para duplicar el elemento de pila n, donde N es el número correspondiente a la instrucción DUP utilizada. X e Y
XY 3
DUP16 0x8f son los elementos eliminados y colocados en la pila, respectivamente.
operaciones de cambio
Las operaciones SWAP brindan la capacidad de intercambiar elementos de pila. Hay 16 instrucciones SWAP
disponibles y con cada instrucción, los elementos de la pila se eliminan y colocan de forma incremental hasta 17
elementos, según el tipo de código de operación utilizado.
INTERCAMBIAR1. . . 0x90 ... Se utiliza para intercambiar el elemento de pila n, donde N es el número correspondiente a la instrucción SWAP utilizada. X e Y
XY 3
SWAP16 0x9f son los elementos eliminados y colocados en la pila, respectivamente.
Operaciones de registro
Las operaciones de registro proporcionan códigos de operación para agregar entradas de registro en el campo de serie de registro de la tupla de subesta
Hay cuatro operaciones de registro disponibles en total y van desde el valor 0x0a hasta el 0xa4.
375,
750, Se usa para agregar un registro de registro con N temas, donde N es el número correspondiente al código de operación de
0x0a
LOG0 . . . REGISTRO utilizado. Por ejemplo, LOG0 significa un registro de registro sin temas y LOG4 significa un registro de registro con
... XY (0) cuatro temas. X e Y representan los elementos 1125, retirados y colocados en la pila, respectivamente. X e Y cambian incrementalmente,
LOG4 desde 2, 0 hasta 6, 0 según la operación LOG utilizada. 1500,
0xa4
1875
Las operaciones del sistema se utilizan para realizar varias operaciones relacionadas con el sistema, como la creación
de cuentas, llamadas de mensajes y control de ejecución. Hay seis códigos de operación disponibles en total en esta categ
CREAR 0xf0 3 1 32000 Se utiliza para crear una nueva cuenta con el código asociado.
LLAMAR 0xf1 7 1 40 Se utiliza para iniciar una llamada de mensaje a una cuenta.
CÓDIGO DE LLAMADA 0xf2 7 1 40 Se utiliza para iniciar una llamada de mensaje a esta cuenta con un código de cuenta alternativo.
Machine Translated by Google
DEVOLVER 0xf3 2 0 0 Detiene la ejecución y devuelve los datos de salida.
DELEGATECALL 0xf4 6 1 40 Lo mismo que CALLCODE pero no cambia los valores actuales del remitente y el valor.
SUICIDIO 0xff 1 0 0 Detiene (detiene) la ejecución y la cuenta se registra para su eliminación posterior
En esta sección, se han discutido todos los códigos de operación EVM. Hay 129 códigos de operación
disponibles en el EVM del lanzamiento de Ethereum en total.
Machine Translated by Google
Contratos precompilados
Hay cuatro contratos precompilados en Ethereum. Aquí está la lista de estos contratos y detalles
Machine Translated by Google
La función de recuperación de clave pública de curva elíptica
ECDSARECOVER (función de recuperación DSA de curva elíptica) está disponible en la dirección 1. Se denomina
ECREC y requiere 3000 de gas para su ejecución. Si la firma no es válida, esta función no devuelve ninguna salida. La
recuperación de clave pública es un mecanismo estándar mediante el cual la clave pública puede derivarse de la clave
privada en la criptografía de curva elíptica.
Se necesitan cuatro entradas: H, que es un hash de 32 bytes del mensaje que se firmará y V, R y S, que representan
la firma ECDSA con el ID de recuperación y producen una clave pública de 64 bytes. V, R y S se han discutido en
detalle anteriormente en este capítulo.
Machine Translated by Google
La función hash SHA-256 bits
La función hash SHA-256 bit es un contrato precompilado que está disponible en la dirección 2 y produce
un hash SHA256 de la entrada. Es casi como una función de transferencia. El requisito de gas para
SHA-256 (SHA256) depende del tamaño de los datos de entrada. La salida es un valor de 32 bytes.
Machine Translated by Google
La función hash RIPEMD-160 bit
La función hash de 160 bits RIPEMD se utiliza para proporcionar un hash de 160 bits RIPEMD y está
disponible en la dirección 3. La salida de esta función es un valor de 20 bytes. El requisito de gas,
similar al SHA-256, depende de la cantidad de datos de entrada.
Machine Translated by Google
La función de identidad
La función de identidad está disponible en la dirección 4 y se indica mediante el ID. Simplemente define la salida
como entrada; en otras palabras, cualquiera que sea la entrada que se le dé a la función ID, generará el mismo
valor. El requerimiento de gas se calcula mediante una fórmula simple: 15 + 3 [Id / 32] donde Id es el dato de entrada.
Esto significa que, en un nivel alto, el requisito de gas depende del tamaño de los datos de entrada, aunque se realicen
algunos cálculos, como se muestra en la ecuación anterior.
Todos los contratos precompilados mencionados anteriormente pueden convertirse en extensiones nativas y
pueden incluirse en los códigos de operación EVM en el futuro.
Machine Translated by Google
cuentas
Las cuentas son uno de los principales bloques de construcción de la cadena de bloques de Ethereum. El
estado se crea o actualiza como resultado de la interacción entre cuentas. Las operaciones realizadas entre y
sobre las cuentas representan transiciones de estado. La transición de estado se logra usando lo que se llama la
función de transición de estado de Ethereum, que funciona de la siguiente manera:
La primera son las cuentas de propiedad externa (EOA) y la otra son las cuentas de contrato. Los EOA son
similares a las cuentas que están controladas por una clave privada en bitcoin. Las cuentas de contrato son
las cuentas que tienen un código asociado junto con la clave privada. Un EOA tiene un saldo de éter, puede
enviar transacciones y no tiene un código asociado, mientras que una cuenta de contrato (CA) tiene un saldo
de éter, un código asociado y la capacidad de activarse y ejecutar código en respuesta a una transacción o
un mensaje. Vale la pena señalar que debido a la propiedad de integridad de Turing de la cadena de bloques
de Ethereum, el código dentro de las cuentas de contrato puede tener cualquier nivel de complejidad. El
código es ejecutado por EVM por cada nodo minero en la red Ethereum. Además, las cuentas de contrato
pueden mantener su propio estado permanente y pueden llamar a otros contratos. Se prevé que en el
comunicado de serenidad se elimine la distinción entre cuentas de propiedad externa y cuentas de contrato.
Machine Translated by Google
Bloquear
Como se discutió anteriormente, los bloques son los principales bloques de construcción de una cadena de bloques. Los bloques de
La lista de transacciones
La lista de transacciones es simplemente una lista de todas las transacciones incluidas en el bloque. Además, la lista de encabezados
de Tíos también se incluye en el bloque. La parte más importante y compleja es el encabezado del bloque, que se analiza aquí.
Machine Translated by Google
Encabezado de bloque
Los encabezados de bloque son los componentes más críticos y detallados de un bloque de Ethereum. El
encabezado contiene información valiosa, que se describe en detalle aquí.
hash padre
Este es el hash Keccak de 256 bits del encabezado del bloque principal (anterior).
Hachís Ommers
Este es el hash Keccak de 256 bits de la lista de bloques Ommers (tíos) incluidos en el bloque.
Beneficiario
El campo Beneficiario contiene la dirección de 160 bits del destinatario que recibirá la recompensa minera una
vez que el bloque se extraiga con éxito.
El campo raíz del estado contiene el hash Keccak de 256 bits del nodo raíz del estado trie. Se calcula después de que
todas las transacciones hayan sido procesadas y finalizadas.
Raíz de transacciones
La raíz de la transacción es el hash Keccak de 256 bits del nodo raíz de la transacción trie. Transaction trie
representa la lista de transacciones incluidas en el bloque.
Raíz de recibos
La raíz de recibos es el hash keccak de 256 bits del nodo raíz del trie de recibo de transacción. Este trie se compone
de recibos de todas las transacciones incluidas en el bloque. Los recibos de transacciones se generan después de
que se procesa cada transacción y contienen información útil posterior a la transacción. En la siguiente sección se
proporcionan más detalles sobre los recibos de transacciones.
La floración de registros es un filtro de floración que se compone de la dirección del registrador y los temas de
registro de la entrada de registro de cada recibo de transacción de la lista de transacciones incluidas en el bloque.
El registro se explica en detalle en la siguiente sección.
Dificultad
El nivel de dificultad del bloque actual.
Número
ElMachine
número Translated by Google
total de todos los bloques anteriores; el bloque de génesis es el bloque cero.
límite de gas
El campo contiene el valor que representa el límite establecido en el consumo de gas por bloque.
gas usado
El campo contiene el gas total consumido por las transacciones incluidas en el bloque.
marca de tiempo
Datos adicionales
El campo de datos adicionales se puede utilizar para almacenar datos arbitrarios relacionados con el bloque.
Mixhash
El campo Mixhash contiene un hash de 256 bits que, una vez combinado con el nonce, se usa para demostrar que
se ha invertido el esfuerzo computacional adecuado para crear este bloque.
Mientras tanto
Nonce es un hash de 64 bits (un número) que se usa para demostrar, en combinación con el campo mixhash, que se ha
invertido el esfuerzo computacional adecuado para crear este bloque.
La siguiente figura muestra la estructura detallada del bloque y el encabezado del bloque:
Elemento Descripción
Picadillo 0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3
Sha3Tíos 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347
Dificultad 17.179.869.184
gas utilizado 0
de la ejecución de cada transacción. Todos los recibos se almacenan en un trie indexado. El hash (Keccak de 256 bits) de la raíz de
este trie se coloca en el encabezado del bloque como la raíz de los recibos. Se compone de cuatro elementos que se describen aquí.
gas usado
Este ítem representa la cantidad total de gas utilizado en el bloque que contiene el recibo de la transacción. El valor se toma
inmediatamente después de que se completa la ejecución de la transacción. Se espera que el gas total utilizado sea un número entero
no negativo.
conjunto de registros
Este campo muestra el conjunto de entradas de registro creadas como resultado de la ejecución de la transacción. Las entradas de
registro contienen la dirección del registrador, una serie de temas de registro y los datos de registro.
El filtro de flores
Se crea un filtro de floración a partir de la información contenida en el conjunto de registros discutidos anteriormente. Una entrada
de registro se reduce a un hash de 256 bytes, que luego se incrusta en el encabezado del bloque a medida que florecen los registros.
La entrada de registro se compone de la dirección del registrador, los temas de registro y los datos de registro. Los temas de registro
se codifican como una serie de estructuras de datos de 32 bytes. Los datos de registro se componen de unos pocos bytes de datos.
Las transacciones se ejecutan después de verificar la validez de las transacciones. Las pruebas iniciales se
enumeran a continuación:
Una transacción debe estar bien formada y codificada en RLP sin bytes finales adicionales
La firma digital utilizada para firmar la transacción es válida
El nonce de la transacción debe ser igual al nonce actual de la cuenta del remitente
El límite de gas no debe ser inferior al gas utilizado por la transacción
La cuenta del remitente contiene saldo suficiente para cubrir el costo de ejecución
El subestado de transacción
Se crea un subestado de transacción durante la ejecución de la transacción que se procesa inmediatamente
después de que se completa la ejecución. Este subestado de transacción es una tupla que se compone de tres elementos.
conjunto de suicidio
Este elemento contiene la lista de cuentas que se eliminan después de ejecutar la transacción.
Serie de registro
Esta es una serie indexada de puntos de control que permiten el seguimiento y la notificación de llamadas de contrato a las
entidades externas al entorno de Ethereum, como las interfaces de aplicaciones. Funciona como un mecanismo de activación
que se ejecuta cada vez que se invoca una función específica o se produce un evento específico. Los registros se crean en
respuesta a eventos que ocurren en el contrato inteligente. También se puede utilizar como una forma más económica de
almacenamiento. Los eventos se cubrirán con ejemplos prácticos en el Capítulo 8, Desarrollo de Ethereum.
saldo de reembolso
Este es el precio total del gas en la transacción que inició la ejecución. Los reembolsos no se ejecutan
inmediatamente; en cambio, se utilizan para compensar parcialmente el costo total de ejecución.
Tupla de subestado
Machine Translated by Google
El mecanismo de validación de bloques
De acuerdo con los tíos y las transacciones. Esto significa que todos los Ommers (Tíos) satisfacen la
propiedad de que efectivamente son Tíos y también si la Prueba de Trabajo para Tíos es válida.
Si el bloque anterior (padre) existe y es válido.
Si la marca de tiempo del bloque es válida. Básicamente, esto significa que la marca de tiempo del bloque
actual debe ser más alta que la marca de tiempo del bloque principal. Además, debe ser menos de 15 minutos
en el futuro. Todos los tiempos de bloque se calculan en tiempo de época (tiempo Unix).
Finalización de bloque
La finalización del bloque es un proceso que ejecutan los mineros para validar el contenido del bloque y aplicar
recompensas. Da como resultado la ejecución de cuatro pasos. Estos pasos se describen aquí en detalle.
Validación de Ommers
Validar Ommers (bloques obsoletos también llamados tíos). En el caso de la minería, determinar Ommers. El
proceso de validación de las cabeceras de bloques obsoletos comprueba si la cabecera es válida y la relación del
Tío con el bloque actual satisface la profundidad máxima de seis bloques. Un bloque puede contener un máximo
de dos tíos.
Validación de transacciones
Validar transacciones. En el caso de la minería, determinar transacciones. El proceso consiste en verificar si el gas
total utilizado en el bloque es igual al consumo de gas final después de la transacción final.
Solicitud de recompensa
Aplicar recompensas, lo que significa actualizar la cuenta del beneficiario con un saldo de recompensas. En Ethereum,
también se otorga una recompensa a los mineros por bloques obsoletos, que es 1/32 de la recompensa del bloque.
Los tíos que están incluidos en los bloques también reciben 7/8 de la recompensa total del bloque. La recompensa de bl
Un bloque puede tener un máximo de dos tíos.
Bloquear dificultad
La dificultad de los bloques aumenta si disminuye el tiempo entre dos bloques, mientras que aumenta si disminuye
el tiempo de bloque entre dos bloques. Esto es necesario para mantener un tiempo de generación de bloques más
o menos constante. El algoritmo de ajuste de dificultad en el lanzamiento de Homestead de Ethereum se muestra
a continuación:
Machine Translated
block_diff by Google
= parent_diff + parent_diff // 2048 * max(1 -
(block_timestamp - parent_timestamp) // 10, -99) + int(2**((block.number //
100000) - 2))
El algoritmo anterior significa que, si la diferencia de tiempo entre la generación del bloque principal y el
bloque actual es inferior a 10 segundos, la dificultad aumenta. Si la diferencia de tiempo es de 10 a 19
segundos, el nivel de dificultad sigue siendo el mismo. Finalmente, si la diferencia de tiempo es de 20
segundos o más, el nivel de dificultad disminuye. Esta disminución es proporcional a la diferencia horaria.
Además del ajuste de dificultad basado en la diferencia de marca de tiempo, también hay otra parte (que
se muestra en la última línea del algoritmo anterior) que aumenta la dificultad exponencialmente después
de cada 100 000 bloques. Esta es la llamada bomba de tiempo de dificultad o la edad de hielo introducida
en la red Ethereum, que hará que sea muy difícil minar en la cadena de bloques de Ethereum en algún
momento en el futuro. Esto alentará a los usuarios a cambiar a la Prueba de participación, ya que la
minería en la cadena POW eventualmente se volverá prohibitivamente difícil. Según la última actualización
y las estimaciones basadas en el algoritmo, el tiempo de generación de bloques será significativamente
alto durante la segunda mitad del año 2017 y en 2021, será tan alto que será prácticamente imposible
minar en la cadena POW. De esta manera, los mineros no tendrán más remedio que cambiar al esquema de
Machine Translated by Google
Éter
Los mineros acuñan Ether como una moneda de recompensa por el esfuerzo computacional que gastan para
asegurar la red mediante la verificación y validación de transacciones y bloques. Ether se utiliza dentro de la cadena
de bloques de Ethereum para pagar la ejecución de contratos en la EVM. Ether se usa para comprar gas como
combustible criptográfico, que se requiere para realizar cálculos en la cadena de bloques de Ethereum.
Se cobran tarifas por cada cálculo realizado por el EVM en la cadena de bloques. En la próxima sección se
muestra un programa de tarifas detallado.
Machine Translated by Google
Gas
Se requiere el pago de gas por cada operación realizada en la cadena de bloques ethereum. Este es un
mecanismo que garantiza que los bucles infinitos no puedan hacer que toda la cadena de bloques se detenga
debido a la naturaleza completa de Turing de la EVM. Se cobra una tarifa de transacción como una cierta cantidad
de Ether y se toma del saldo de la cuenta del originador de la transacción. Se paga una tarifa por las transacciones
que deben incluir los mineros para la minería. Si esta tarifa es demasiado baja, es posible que la transacción nunca se
recoja; cuanto mayor sea la tarifa, mayores serán las posibilidades de que los mineros recojan las transacciones para
incluirlas en el bloque. Por el contrario, si los mineros incluyen en el bloque la transacción que tiene una tarifa adecuada
pagada pero tiene que realizar demasiadas operaciones complejas, puede resultar en una excepción de falta de gas si el
costo del gas no es suficiente. En este caso, la transacción fallará pero aún formará parte del bloque y el originador de la
transacción no recibirá ningún reembolso.
Aquí, gasUsed es el gas total que se supone que utilizará la transacción durante la ejecución y el originador de la
transacción especifica gasPrice como un incentivo para que los mineros incluyan la transacción en el siguiente bloque. Esto
se especifica en Ether. Cada código de operación EVM tiene una tarifa asignada. Es una estimación porque el gas
utilizado puede ser mayor o menor que el valor especificado originalmente por el originador de la transacción. Por
ejemplo, si el cómputo lleva demasiado tiempo o el comportamiento del contrato inteligente cambia en respuesta a
otros factores, entonces la ejecución de la transacción puede realizar más o menos operaciones de las previstas
originalmente y puede resultar en el consumo de más o menos gas. Si la ejecución se queda sin gas, todo se revierte
inmediatamente; de lo contrario, si la ejecución es exitosa y queda algo de gas, entonces se devuelve al originador de
la transacción.
Cada operación cuesta algo de gasolina; aquí se muestra como ejemplo una lista de tarifas de alto nivel de algunas
operaciones:
Machine Translated by Google
Con base en la lista de tarifas anterior y la fórmula discutida anteriormente, un ejemplo de cálculo de la
La operación SHA3 se puede calcular de la siguiente manera:
SHA3 cuesta 30
gas El precio actual del gas es 25 GWei, que es 0,000000025
Ether Multiplicando ambos: 0,000000025 * 30 = 0,00000075 Ether
El gas se cobra en tres escenarios como requisito previo a la ejecución de una operación:
Anteriormente en el capítulo se ha proporcionado una lista de instrucciones y varias operaciones con los valores de gas.
Machine Translated by Google
Mensajes
Los mensajes, tal como se definen en el papel amarillo, son los datos y el valor que se pasan entre
dos cuentas. Un mensaje es un paquete de datos que se pasa entre dos cuentas. Este paquete de datos
contiene datos y valor (cantidad de éter). Puede enviarse a través de un contrato inteligente (objeto
autónomo) o desde un actor externo (cuenta de propiedad externa) en forma de transacción firmada
digitalmente por el remitente.
Los contratos pueden enviar mensajes a otros contratos. Los mensajes solo existen en el entorno de
ejecución y nunca se almacenan. Los mensajes son similares a las transacciones; sin embargo, la principal
diferencia es que son producidos por los contratos, mientras que las transacciones son producidas por
entidades externas (cuentas de propiedad externa) al entorno Ethereum.
Los mensajes se generan cuando los contratos ejecutan CALL o DELEGATECALL Opcodes.
Machine Translated by Google
Llamadas
Una llamada no transmite nada a la cadena de bloques; en cambio, es una llamada local a una
función de contrato y se ejecuta localmente en el nodo. Es casi como una llamada de función local. No
consume gas ya que es una operación de solo lectura. Es similar a un simulacro. Las llamadas se
ejecutan localmente en un nodo y, por lo general, no provocan ningún cambio de estado. Como se
define en el papel amarillo, este es el acto de pasar un mensaje de una cuenta a otra. Si la cuenta de
destino tiene un código EVM asociado, la máquina virtual se iniciará al recibir el mensaje para realizar
las operaciones requeridas. Si el remitente del mensaje es un objeto autónomo, la llamada pasa todos
los datos devueltos por la operación de la máquina virtual.
El estado es alterado por las transacciones. Estos son creados por factores externos y se
firman y luego se transmiten a la red Ethereum.
Machine Translated by Google
Minería
La minería es el proceso mediante el cual se agrega nueva moneda a la cadena de bloques. Este es un incentivo
para que los mineros validen y verifiquen bloques compuestos por transacciones. El proceso de minería ayuda a
proteger la red al verificar los cálculos.
El método actual de minería se basa en la Prueba de trabajo, que es similar a la de bitcoin. Cuando un bloque se
considera válido, debe satisfacer no solo los requisitos generales de consistencia, sino que también debe contener
la Prueba de trabajo para una dificultad determinada.
El algoritmo Prueba de trabajo se reemplazará con el algoritmo Prueba de participación con el lanzamiento de
serenity. Se ha llevado a cabo un trabajo de investigación considerable para construir el algoritmo de prueba de
participación adecuado para la red Ethereum.
Se ha desarrollado un algoritmo llamado Casper, que reemplazará el algoritmo de prueba de trabajo existente
en Ethereum. Este es un depósito de seguridad basado en el protocolo económico donde se requiere que los
nodos coloquen un depósito de seguridad antes de que puedan producir bloques. Los nodos se han denominado
validadores vinculados en Casper, mientras que el acto de colocar el depósito de seguridad se denomina vinculación
Machine Translated by Google
Ethash
Ethash es el nombre del algoritmo de prueba de trabajo utilizado en Ethereum. Originalmente, esto se propuso
como el algoritmo Dagger-Hashimoto, pero mucho ha cambiado desde la primera implementación y el algoritmo
PoW ahora se ha convertido en lo que ahora se conoce como Ethash. Similar a bitcoin, la idea central detrás de la
minería es encontrar un nonce que una vez haya generado el resultado en un nivel de dificultad predeterminado.
Inicialmente, la dificultad era baja cuando Ethereum era nuevo e incluso la minería de CPU y GPU única era rentable
hasta cierto punto, pero ese ya no es el caso. Ahora bien, la minería agrupada es rentable o se utilizan grandes
granjas de minería de GPU para fines de minería.
El esquema de recompensa actual es de 5 Ether por encontrar con éxito un nonce válido. Además de recibir 5
Ethers, el minero exitoso también recibe el costo del gas consumido dentro del bloque y una recompensa adicional
por incluir bloques obsoletos (tíos) en el bloque. Se permite un máximo de dos tíos por bloque y se les otorga 7/8
de la recompensa del bloque normal. Para lograr un tiempo de bloque de 12 segundos, la dificultad del bloque se
ajusta en cada bloque. Las recompensas son directamente proporcionales a la tasa de hash del minero, lo que
básicamente significa qué tan rápido puede hacer hash un minero.
La minería se puede realizar simplemente uniéndose a la red Ethereum y ejecutando un cliente apropiado.
El requisito clave es que el nodo debe estar completamente sincronizado con la red principal antes de que la minería p
comienzo.
La minería de CPU también se puede iniciar usando la consola web 3 geth. La consola Geth se puede iniciar
emitiendo el siguiente comando:
adjuntar
Después de esto, el minero puede iniciarse emitiendo el siguiente comando, que devolverá verdadero
si tiene éxito, o falso en caso contrario. Echa un vistazo al siguiente comando:
Minero.start(4)
Verdadero
El comando anterior iniciará el minero con cuatro subprocesos. Echa un vistazo al siguiente
comando:
Miner.stop
Verdadero
geth --rpc
Una vez que geth está en funcionamiento y la cadena de bloques se ha descargado por completo, se puede ejecutar Ethminer para
comenzar a minar. Ethminer es un minero independiente que también se puede usar en el modo de granja para contribuir a los
grupos de minería. Se puede descargar desde https://github.com/Genoil/cpp ethereum/tree/master/releases:
etminero -G
La ejecución con el interruptor G supone que la tarjeta gráfica adecuada está instalada y configurada correctamente. Si no
se encuentran tarjetas gráficas apropiadas, ethminer devolverá un error, como se muestra en la siguiente captura de pantalla:
La minería de GPU requiere una tarjeta gráfica AMD o Nvidia y un SDK OpenCL aplicable. Para el conjunto de chips NVidia, se puede
descargar desde https://developer.nvidia.com/cuda-downloads. Para conjuntos de chips AMD, está disponible en http://
developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated-parallel processing-app-sdk.
Una vez que las tarjetas gráficas están instaladas y configuradas correctamente, el proceso puede iniciarse emitiendo el comando
ethminer -G .
Ethminer también se puede usar para ejecutar evaluaciones comparativas, como se muestra en la siguiente captura de pantalla. Hay
dos modos que se pueden invocar para la evaluación comparativa. Puede ser CPU o GPU. Los comandos se muestran aquí.
$ ethminer -M -C
$ ethminer -M -G
El siguiente ejemplo de captura de pantalla se muestra para la evaluación comparativa de minería de CPU:
Machine Translated by Google
$ ethminer -M -G --opencl-dispositivo 1
Dado que la minería de GPU se implementa con OpenCL AMD, las GPU basadas en chipset tienden a funcionar más rápido
en comparación con las GPU de NVidia. Debido a los altos requisitos de memoria (creación de DAG), los FPGA y los ASIC no
proporcionarán ninguna ventaja importante sobre las GPU. Esto se hace a propósito para desalentar el desarrollo de hardware
especializado para la minería.
Machine Translated by Google
plataformas mineras
A medida que aumentaba la dificultad con el tiempo para extraer Ether, los mineros comenzaron a construir equipos de
minería con múltiples GPU. Una plataforma de minería generalmente contiene alrededor de cinco tarjetas GPU, y todas
funcionan en paralelo para la minería, lo que mejora las posibilidades de encontrar nonces válidos para la minería.
Las plataformas mineras se pueden construir con algo de esfuerzo y también están disponibles comercialmente de varios provee
Una configuración típica de un equipo de minería incluye los componentes que se analizan en las próximas secciones.
tarjeta madre
Se requiere una placa base especializada con múltiples ranuras PCI-E x1 o x16, por ejemplo, BIOSTAR Hi-Fi o ASRock
H81.
Se requiere un disco duro SSD. Se recomienda la unidad SSD debido a su rendimiento mucho más rápido que el
equivalente analógico. Esto se utilizará principalmente para almacenar la cadena de bloques.
GPU
La GPU es el componente más importante de la plataforma, ya que es el principal caballo de batalla que se utilizará para la
minería. Por ejemplo, puede ser una Sapphire AMD Radeon R9 380 con 4 GB de RAM.
La última versión de Linux Ubuntu generalmente se elige como sistema operativo para la plataforma. También hay otra
variante de Linux disponible, llamada EthOS (disponible en http://ethosdistro.com/), que está especialmente diseñado
para la minería de Ethereum y admite operaciones de minería de forma nativa.
Finalmente, se instala software de minería como Ethminer y geth. Además, también se instala algún software de
administración y monitoreo remoto para que los equipos puedan monitorearse y administrarse de forma remota, si es
necesario. También es importante instalar mecanismos de refrigeración o aire acondicionado adecuados, ya que ejecutar varias
GPU puede generar mucho calor. Esto también requiere la necesidad de usar un software de monitoreo adecuado que pueda
alertar a los usuarios si hay algún problema con el hardware, por ejemplo, si las GPU se sobrecalientan.
Machine Translated by Google
Esta implementación está construida usando Rust y desarrollada por EthCore. EthCore es una
empresa que trabaja en el desarrollo del cliente paritario. La paridad se puede descargar desde https://et
Machine Translated by Google
Clientes ligeros
Los clientes de SPV descargan solo un pequeño subconjunto de la cadena de bloques. Esto permite que los
dispositivos de bajos recursos, como teléfonos móviles, dispositivos integrados o tabletas, puedan verificar
las transacciones. En este caso, no se requiere una cadena de bloques y un nodo completos de ethereum y
los clientes de SPV aún pueden validar la ejecución de las transacciones. Los clientes SPV también se
denominan clientes ligeros. Esta idea es similar a los clientes de bitcoin SPV. Hay una billetera disponible de
Jaxx (https://jaxx.io/ ), que se puede instalar en iOS y Android, que proporciona la funcionalidad SPV (Verificaci
Machine Translated by Google
Instalación
El siguiente procedimiento de instalación describe la instalación de varios clientes de Ethereum en sistemas
Ubuntu. Las instrucciones para otros sistemas operativos están disponibles en Ethereum Wikis. Como los
sistemas Ubuntu se utilizarán en ejemplos más adelante, aquí solo se describe la instalación en Ubuntu.
Después de completar la instalación. Geth se puede iniciar simplemente emitiendo el comando geth en
el símbolo del sistema, ya que viene preconfigurado con todos los parámetros necesarios para
conectarse a la red Ethereum en vivo (red principal):
> geth
instalación ética
Eth es la implementación en C++ del cliente Ethereum y se puede instalar con el siguiente comando
en Ubuntu:
Navegador de niebla
Mist browser es una interfaz fácil de usar para usuarios finales con una interfaz gráfica de usuario rica en
funciones que se utiliza para navegar por DAPPS y para la gestión de cuentas y contratos. La instalación de
niebla se trata en el próximo capítulo.
Cuando se inicia Mist por primera vez, se inicializará geth en segundo plano y se sincronizará con la red.
Dependiendo de la velocidad y el tipo de red, puede tomar desde unas pocas horas hasta algunos días
para sincronizarse completamente con la red. Si se usa TestNet, la sincronización se completa
relativamente más rápido ya que el tamaño de TestNet (Ropsten) no es tan grande como el de MainNet. Se
proporcionará más información sobre cómo conectarse a TestNet en el próximo capítulo.
Machine Translated by Google
Mist browser no es una billetera; de hecho, es un navegador de DAPPS y proporciona una interfaz de
usuario fácil de usar para la creación y gestión de contratos, cuentas y navegación por aplicaciones
descentralizadas. La billetera Ethereum es una DAPP que se lanza con Mist.
Wallet es un programa genérico que puede almacenar claves privadas y cuentas asociadas y, en función
de las direcciones almacenadas en él, puede calcular el saldo existente de Ether asociado con las direcciones
consultando la cadena de bloques.
Otras billeteras incluyen, entre otras, MyEtherWallet, que es una billetera ether de código abierto
desarrollada en JavaScript. MyEtherWallet se ejecuta en el navegador del cliente. Está disponible en
https://www.myetherwallet.com.
Icebox es desarrollado por Consensys. Este es un navegador de almacenamiento en frío que proporciona
almacenamiento seguro de Ether. Depende de si la computadora en la que se ejecuta Icebox está conectada a In
Hay varias billeteras disponibles para ethereum para plataformas de escritorio, móviles y web. En la
siguiente imagen se muestra una billetera Ethereum iOS popular llamada Jaxx:
Machine Translated by Google
Monedero Jaxx Ethereum para iOS que muestra transacciones y saldo actual
Una vez que la cadena de bloques esté sincronizada, Mist se iniciará y mostrará la siguiente
interfaz. En este ejemplo, se muestran cuatro cuentas sin saldo:
Machine Translated by Google
Navegador de niebla
Se pueden crear cuentas nuevas de varias maneras. En el navegador de Mist, se puede crear haciendo clic en el menú Cuentas y
seleccionando Nueva cuenta o haciendo clic en la opción Agregar cuenta en la pantalla Resumen de cuentas de Mist.
La cuenta necesitará una contraseña para ser configurada, como se muestra en la figura anterior; una vez que la cuenta esté configurada, se
Geth
$ cuenta geth nueva Su
nueva cuenta está bloqueada con una contraseña. Por favor, proporcione una contraseña. No olvides
esta contraseña.
Frase de
contraseña: Repita la
frase de contraseña: Dirección: {21c2b52e18353a2cc8223322b33559c1d900c85d}
drequinox@drequinox-OP7010:~$
La consola geth
La consola de JavaScript geth se puede utilizar para realizar varias funciones. Por ejemplo, se puede crear una cuenta
adjuntando geth.
Geth se puede adjuntar con el demonio en ejecución, como se muestra en la siguiente figura:
Una vez que geth se haya conectado correctamente con la instancia en ejecución del cliente de ethereum (en este
caso, paridad), mostrará el símbolo del sistema '>', que proporciona una interfaz de línea de comando interactiva para
interactuar con el cliente de ethereum usando notaciones de JavaScript.
Machine
Por Translated
ejemplo, by Google
se puede agregar una nueva cuenta usando el siguiente comando en la consola geth:
> personal.nuevaCuenta()
Frase de
contraseña: repetir la
frase de contraseña: "0xc64a728a67ba67048b9c160ec39bacc5626761ce"
>
> eth.accounts
["0x024a20cc5feba7f3dc3776075b3e60c20eb1459c",
"0x11bcc1d0b56c57aefc3b52d37e7d6c2c90b8ec35",
"0xdf482f11e3fbb7716e2868786b3afede1c1fb37f",
"0xe49668b7ffbf031bbbdab7a222bdb38e7e3e1b63",
"0xf9834defb35d24c5a61a5fe745149e9470282495"]
Una vez que se complete el intercambio, el Ether transferido estará disponible en la cuenta.
Machine Translated by Google
Instalación de paridad
La paridad es otra implementación del cliente Ethereum. Ha sido escrito utilizando el lenguaje de
programación Rust. El objetivo principal detrás del desarrollo de la paridad es el alto rendimiento, el tamaño
reducido y la confiabilidad. Parity se puede instalar usando los siguientes comandos en un sistema Ubuntu o Mac:
Esto iniciará la descarga e instalación del cliente de paridad. Una vez completada la instalación
de parity, el instalador también ofrecerá la instalación del cliente netstats. El cliente netstat
es un demonio que se ejecuta en segundo plano y recopila estadísticas importantes y las
muestra en stats.ethdev.com.
Una vez que la instalación se completa con éxito, se muestra el siguiente mensaje. El nodo de paridad de Ethereum
se puede iniciar usando parity -j. Si se requiere compatibilidad con geth para usar la billetera Ethereum (navegador
Mist) con paridad, entonces se debe usar el comando parity -geth para ejecutar la paridad. Esto ejecutará la paridad
en modo de compatibilidad con el cliente geth y, en consecuencia, permitirá que Mist se ejecute sobre la paridad.
Machine Translated by Google
Instalación de paridad
Todos los clientes conectados se enumeran en ethstats.net, como se muestra en la siguiente captura de pantalla.
Estos clientes se enumeran con atributos relevantes, como el nombre del nodo, el tipo de nodo, la latencia, el
estado de la minería, la cantidad de pares, la cantidad de transacciones pendientes, el último bloque, la dificultad,
las transacciones del bloque y la cantidad de tíos.
Parity también ofrece una interfaz web fácil de usar desde donde se pueden administrar varias tareas,
como la gestión de cuentas, la gestión de la libreta de direcciones, la gestión de DAPP, la gestión de contratos y
las operaciones de estado y firmantes.
$ paridad ui
Machine
Esto Translated
abrirá la by se
interfaz que Google
muestra a continuación:
Si la paridad se ejecuta en el modo de compatibilidad geth, la interfaz de usuario de paridad está deshabilitada. Para habilitar la interfaz
de usuario junto con la compatibilidad con geth, se puede usar el siguiente comando:
El comando anterior iniciará la paridad en el modo de compatibilidad geth y también habilitará la interfaz de usuario web.
Comercio e inversión
Ether está disponible en varios intercambios para comprar y vender. La capitalización de mercado actual
de Ethereum es de £ 680 277 967 al momento de escribir esto, y un Ether vale £ 7,89. Recientemente, el
precio ha sido muy volátil y se ha reducido significativamente debido a los recientes ataques de Ethereum
y las bifurcaciones posteriores en la red de Ethereum.
El éter se puede comprar en varios intercambios o se puede extraer. Hay servicios en línea disponibles,
como shapeshift.io, que permiten la conversión de una moneda a otra.
Varios intercambios en línea, como kraken, coinbase y muchos más, ofrecen ether para comprar con
moneda fiduciaria utilizando tarjetas de crédito u otra moneda virtual, como bitcoin.
Machine Translated by Google
el papel amarillo
El documento amarillo de Ethereum ha sido escrito por el Dr. Gavin Wood y sirve como una definición
formal del protocolo Ethereum. Cualquiera puede implementar un cliente Ethereum siguiendo las
especificaciones del protocolo definidas en el documento. Este documento puede ser algo difícil de leer,
especialmente para los lectores que no tienen experiencia en álgebra o matemáticas y no están familiarizados
con las notaciones matemáticas.
La lista de todos los símbolos con sus significados utilizados en el documento se proporciona aquí con
la anticipación de que facilitará la lectura del documento. Una vez que se conocen los significados de los
símbolos, se vuelve bastante fácil comprender y apreciar los conceptos y especificaciones descritos en el pa
Machine Translated by Google
Símbolos útiles
Símbolo Significado Símbolo Significado
=
Es igual a Sigma, estado mundial
Y lógico Incremento
: tal que
{} Establecer
() Función de tupla
[] indexación de matrices
O lógico
Machine Translated by Google
+ Suma
- Sustracción
ÿ Suma
Nº de bytes
Exclusivo o
TestNet también se llama Ropsten y es la red de prueba para la cadena de bloques de Ethereum. Esta cadena de
bloques se utiliza para probar contratos inteligentes y DApps antes de implementarse en la cadena de bloques en vivo d
Además, al ser una red de prueba, permite la experimentación y la investigación.
Machine Translated by Google
Redes privadas
Como sugiere el nombre, esta es la red privada que se puede crear generando un nuevo bloque de
génesis. Este suele ser el caso en las redes de registros distribuidos, donde un grupo privado de
entidades inicia su propia cadena de bloques y la usa como una cadena de bloques autorizada.
Más discusión sobre cómo conectarse a la red de prueba y cómo configurar redes privadas se tratará en
el próximo capítulo.
Machine Translated by Google
Protocolos de apoyo
Hay varios protocolos de soporte que están en desarrollo para soportar el ecosistema descentralizado
completo. Esto incluye protocolos de susurro y enjambre. Además de la capa de contratos, que es la
capa central de la cadena de bloques, hay capas adicionales que deben descentralizarse para lograr un
ecosistema descentralizado completo. Esto incluye almacenamiento descentralizado y mensajería
descentralizada. Whisper, desarrollado para ethereum, es un protocolo de mensajería descentralizado,
mientras que Swarm es un protocolo de almacenamiento descentralizado. Ambas tecnologías se están
desarrollando actualmente y se han previsto para proporcionar la base para una web completamente
descentralizada. En la siguiente sección, ambas tecnologías se discuten en detalle.
Susurro
Whisper proporciona capacidades de mensajería punto a punto descentralizadas a la red ethereum. En
esencia, el susurro es un protocolo de comunicación que utilizan los nodos para comunicarse entre sí.
Los datos y el enrutamiento de los mensajes están encriptados dentro de las comunicaciones susurradas.
Además, está diseñado para usarse en transferencias de datos más pequeñas y en escenarios donde no se
requiere comunicación en tiempo real. Whisper también está diseñado para proporcionar una capa de
comunicación que no se puede rastrear y proporciona una "comunicación oscura" entre las partes.
Blockchain se puede usar para la comunicación, pero eso es costoso y realmente no se requiere consenso
para los mensajes intercambiados entre nodos. Por lo tanto, el susurro se puede utilizar como un protocolo qu
Whisper ya está disponible con geth y se puede habilitar usando la opción --shh mientras se ejecuta el cliente
geth ethereum.
Enjambre
Swarm se está desarrollando como una plataforma de almacenamiento de archivos distribuidos. Es una red
de almacenamiento descentralizada, distribuida y peer-to-peer. Los archivos en esta red son direccionados
por el hash de su contenido. Esto contrasta con los servicios centralizados tradicionales, donde el
almacenamiento está disponible solo en una ubicación central. Esto se desarrolla como un servicio de capa
base nativo para la pila Ethereum web 3.0. Swarm está integrado con DevP2P, que es la capa de red
multiprotocolo de Ethereum. Se prevé que Swarm proporcione una capa de almacenamiento distribuido
resistente a DDOS (Distributed Denial of service) y tolerante a fallas para Ethereum Web 3.0. Tanto Whisper
como Swarm están en desarrollo y, aunque se ha lanzado una prueba de concepto y un código alfa para
Swarm, aún no hay una versión de producción estable disponible.
La siguiente figura ofrece una descripción general de alto nivel de cómo Swarm y susurro encajan y
funcionan con blockchain:
Machine Translated by Google
Resumen
Este capítulo comenzó con una discusión sobre la historia de Ethereum, la motivación detrás del desarrollo
de Ethereum y los clientes de Ethereum. Luego, se le presentaron los conceptos básicos de la cadena de
bloques de Ethereum, como el modelo de máquina de estado, el estado del mundo y de la máquina, las cuentas y
Además, también se presentó una introducción detallada a los componentes principales de la máquina virtual
Ethereum (EVM). También se introdujeron y discutieron en detalle otros conceptos como bloques, estructura
de bloques, gas y mensajes. Las últimas secciones del capítulo introdujeron la instalación práctica y la
gestión de clientes ethereum. Se discutieron dos clientes más populares, geth y parity. Se llevará a cabo una
discusión más específica sobre el desarrollo de estos clientes en el próximo capítulo, donde se analiza el
desarrollo utilizando Ethereum. Finalmente, se presentaron protocolos de apoyo y temas relacionados con
los desafíos que enfrenta Ethereum. Ethereum está en desarrollo continuo y una comunidad dedicada de
desarrolladores realiza nuevas mejoras con regularidad. Propuestas de mejora de Ethereum, disponibles en
https://github.com/ethereum/EIPs, son también una indicación de la magnitud de la investigación y el gran
interés de la comunidad en esta tecnología. Además, una iniciativa lanzada recientemente, Enterprise Ethereum
Alliance (EAA) tiene como objetivo desarrollar una plataforma Ethereum de nivel empresarial que será capaz
de cumplir con los requisitos comerciales de nivel empresarial. Con la investigación que se lleva a cabo sobre
temas como la escalabilidad, la optimización, el rendimiento, la capacidad y la seguridad, se prevé que, con el
tiempo, Ethereum evolucione hacia un ecosistema de cadena de bloques más robusto, fácil de usar y estable.
Machine Translated by Google
Capítulo 8. Desarrollo de Ethereum
Este capítulo presenta los conceptos, técnicas y herramientas relacionadas con el desarrollo de Ethereum.
En este capítulo se presentarán varios ejemplos para complementar los conceptos teóricos proporcionados
en capítulos anteriores. Este capítulo cubrirá principalmente la configuración del entorno de desarrollo y
cómo crear contratos inteligentes utilizando la cadena de bloques de Ethereum. Se proporcionarán ejemplos
de tutoriales detallados que lo ayudarán a comprender cómo Ethereum y otras herramientas de apoyo se
pueden usar para desarrollar e implementar contratos inteligentes en la cadena de bloques.
Machine Translated by Google
Configuración de un entorno de desarrollo
La primera tarea es configurar un entorno de desarrollo. La próxima sección presenta la configuración
de ethereum para Test Net y Private Net. Test Net se llama Ropsten y los desarrolladores o usuarios lo
utilizan como una plataforma de prueba para probar contratos inteligentes y otras propuestas
relacionadas con blockchain. La opción Red privada en Ethereum permite la creación de una red
privada independiente que se puede usar como un libro mayor distribuido entre las entidades
participantes y para el desarrollo y prueba de contratos inteligentes. Si bien hay otros clientes
disponibles para Ethereum, como Parity, que se discutió en el capítulo anterior, geth es el cliente líder
para Ethereum y la herramienta común de elección, como tal, este capítulo usará geth en los ejemplos .
Machine Translated by Google
Red de prueba (Ropsten)
El cliente de Ethereum Go, geth, se puede conectar a la red de prueba usando el siguiente comando:
$ geth --TestNet
En la siguiente captura de pantalla se muestra un resultado de muestra. La captura de pantalla muestra el tipo de
red elegido y varios otros datos sobre la descarga de la cadena de bloques.
Private Net permite la creación de una cadena de bloques completamente nueva. Esto es diferente de Test Net o Main Net
en el sentido de que utiliza su bloque on-genesis y su ID de red. Para crear una Red Privada, se necesitan tres componentes:
1. Identificación de la red.
2. Archivo Génesis.
3. Directorio de datos para almacenar datos de blockchain. Aunque no se requiere estrictamente que se mencione el
directorio de datos, si ya hay más de una cadena de bloques activa en el sistema, se debe especificar el directorio
de datos para que se use un directorio separado para la nueva cadena de bloques.
Private Net permite la creación de una cadena de bloques completamente nueva. Esto es diferente de Test Net o Main Net
en el sentido de que utiliza su propio bloque de génesis único e ID de red. En la red principal, geth conoce a los pares de
forma predeterminada y se conecta automáticamente, pero en la red privada, geth debe configurarse especificando los
indicadores y la configuración apropiados para que otros pares puedan detectarlo o descubrir otros pares.
Además de los tres componentes mencionados anteriormente, es deseable que deshabilite el descubrimiento de
nodos para que otros nodos en Internet no puedan descubrir su red privada y sea verdaderamente privada. Si
otras redes tienen el mismo archivo de génesis e ID de red, es posible que se conecten a su red privada. La probabilidad
de tener el mismo ID de red y el mismo bloque de génesis es muy baja, pero, sin embargo, deshabilitar el descubrimiento
de nodos es una buena práctica y se recomienda.
En la siguiente sección, todos estos parámetros se discuten en detalle con un ejemplo práctico.
Identificación de red
El ID de red puede ser cualquier número positivo excepto 1 y 3, que ya están en uso por Ethereum Main Net y Test Net
(Ropsten), respectivamente. Se eligió el ID de red 786 para el ejemplo de red privada que se analiza más adelante en esta
sección.
El archivo de génesis
El archivo de génesis contiene los campos necesarios requeridos para un bloque de génesis personalizado. Este es el
primer bloque de la red y no apunta a ningún bloque anterior. El protocolo Ethereum realiza una verificación rigurosa
para garantizar que ningún otro nodo en Internet pueda participar en el mecanismo de consenso, a menos que tengan el
mismo bloque de génesis.
Aquí se muestra un archivo de génesis personalizado que se usará más adelante en el ejemplo:
{
"nonce": "0x0000000000000042",
"marca de tiempo": "0x0",
"parentHash":"0x000000000000000000000000000000000000000000000000000000000000000000
", Machine Translated by Google
"datos extra": "0x0", "límite de
gas": "0x4c4b40", "dificultad": "0x400",
"mixhash":"0x000000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x00000000000000000000000000000000000000000", "asignación": { }
Este archivo se puede guardar en un archivo de texto con la extensión JSON; por ejemplo, privategenesis.json.
Opcionalmente, el éter se puede preasignar especificando las direcciones de los beneficiarios y la cantidad de
Wei en la asignación, pero generalmente no es necesario ya que, al estar en la red privada, el éter se puede
extraer muy rápidamente.
Directorio de datos
Este es el directorio donde se guardarán los datos de blockchain para la red privada de Ethereum. Por ejemplo, en el
siguiente ejemplo, es ~/.ethereum/privatenet.
En el cliente geth, se especifica una serie de parámetros para iniciar, ajustar aún más la configuración e
iniciar la red privada. Estas banderas se enumeran aquí.
Banderas y su significado
--nodiscover: esta marca garantiza que el nodo no se detecte automáticamente si tiene el mismo archivo de génesis y el
mismo ID de red. --maxpeers: esta bandera se usa para especificar el número de pares que pueden conectarse a la red
privada. Si se establece en 0, nadie podrá conectarse, lo que podría ser deseable en algunos escenarios, como pruebas
privadas. --rpc: Esto se usa para habilitar la interfaz RPC en geth. --rpcapi: este indicador toma una lista de API que se
permitirán como parámetro. Por ejemplo, eth,web3 habilitará la interfaz web3 y eth sobre RPC. --rpcport: Esto configura el
puerto TCP RPC; por ejemplo: 9999. --rpccorsdomain: este indicador especifica la URL que puede conectarse al nodo geth
privado y realizar operaciones RPC. --port: Esto especifica el puerto TCP que se usará para escuchar las conexiones
entrantes de otros pares. --identity: esta bandera es una cadena que especifica el nombre de un nodo privado.
Nodos estáticos
Si es necesario conectarse a un conjunto específico de pares, estos nodos se pueden agregar a un archivo
donde se guardan los datos de la cadena y los archivos del almacén de claves , por ejemplo, en el directorio ~/.ethereum/
privatenet . El nombre del archivo debe ser static-nodes.json. Esto puede ser valioso en una red privada.
Un ejemplo del archivo json se muestra a continuación:
[
Machine Translated by Google
"enodo://
44352ede5b9e792e437c1c0431c1578ce3676a87e1f588434aff1299d30325c233c8d426fc57a253
[email protected]_PPORT.xxx.xxx_TC7" :
Aquí, xxx es la dirección IP pública y TCP_PORT puede ser cualquier puerto TCP válido y disponible en el
sistema. La cadena hexadecimal larga es el ID del nodo.
Machine Translated by Google
Puesta en marcha de la red privada
El comando inicial para iniciar la red privada se muestra a continuación:
Esto producirá una salida similar a la que se muestra en la siguiente captura de pantalla:
Este resultado indica que se ha creado correctamente un bloque de génesis. Para que geth comience, se
puede ejecutar el siguiente comando:
Ahora geth se puede adjuntar a través de IPC al cliente geth en ejecución en una red privada usando el
siguiente comando. Esto le permitirá interactuar con la sesión geth en ejecución en la red privada:
Como se muestra aquí, esto abrirá la consola JavaScript interactiva para la sesión de red privada en ejecución:
Machine Translated by Google
Es posible que haya notado que aparece un mensaje de advertencia cuando se inicia geth .
Nota
ADVERTENCIA: No se ha establecido etherbase ni se han encontrado cuentas por defecto
Este mensaje aparece porque actualmente no hay cuentas disponibles en la nueva red de prueba y ninguna
cuenta está configurada como etherbase para recibir recompensas de minería. Este problema se puede solucionar
creando una nueva cuenta y configurando esa cuenta como etherbase. Esto también será necesario cuando la
minería se lleve a cabo en la red de prueba. Esto se muestra en los siguientes comandos. Tenga en cuenta que
estos comandos se ingresan en la consola de JavaScript geth, como se muestra en la figura anterior.
El siguiente comando crea una nueva cuenta. En este contexto, la cuenta se creará en la Red Privada ID 786:
> personal.nuevacuenta("Contraseña123")
"0x76f11b383dbc3becf8c5d9309219878caae265c3"
Una vez que se crea la cuenta, el siguiente paso es configurarla como una cuenta Etherbase/coinbase para
que la recompensa minera vaya a esta cuenta. Esto se puede lograr usando el siguiente comando:
> minero.setEtherbase(personal.listAccounts[0])
verdadero
Actualmente, la cuenta de etherbase no tiene saldo, como se puede ver usando el siguiente comando:
> eth.getBalance(eth.coinbase).toNumber(); 0
Finalmente, la minería puede comenzar simplemente emitiendo el siguiente comando. Este comando
toma un parámetro que es un número de subprocesos. En el siguiente ejemplo, se asignarán dos subprocesos al
proceso de minería especificando 2 como argumento para la función de inicio:
> minero.start(2)
verdadero
Una vez que comienza la extracción, se lleva a cabo la primera generación de DAG y se produce una salida
similar a la siguiente:
Machine Translated by Google
generación de DAG
Una vez que finaliza la generación de DAG y comienza la extracción, geth producirá un resultado similar al que se
muestra en la siguiente captura de pantalla. Se puede ver claramente que los bloques se están minando con éxito co
Minado 5 bloques. . . mensaje.
Salida minera
> minero.detener
verdadero
En la consola de JavaScript, se puede consultar el saldo actual de ether total, como se muestra aquí.
Después de la minería, se puede ver una cantidad significativa en el siguiente ejemplo. La minería es
extremadamente rápida ya que es una red privada y en el archivo de génesis, la dificultad de la red también se ha es
Si se presionan dos espacios y dos tabuladores en una secuencia, se mostrará una lista completa de los objetos
disponibles. Esto se muestra en la siguiente captura de pantalla:
Machine
Objetos Translated by Google
disponibles
Además, cuando se escribe un comando, se puede autocompletar presionando tabulador dos veces. Si se presionan dos
pestañas, también se muestra la lista de métodos disponibles. Esto se muestra en la siguiente captura de pantalla:
Métodos disponibles
Además del comando mencionado anteriormente, para obtener una lista de los métodos disponibles, después de escribir
cualquier comando; (punto y coma) se ingresa. Se muestra un ejemplo en la siguiente captura de pantalla, que muestra
una lista de todos los métodos disponibles para la red:
Lista de métodos
Hay algunos otros comandos que se pueden usar para consultar la red privada. Algunos ejemplos se muestran a
continuación:
> eth.gasPrecio
20000000000
> eth.blockNumber
587
La depuración puede resultar útil al depurar problemas. Aquí se muestra un comando de muestra; sin embargo, hay muchos
métodos disponibles. El siguiente método devolverá el RLP del bloque 0:
Machine Translated
Codificar by Google
usando RLP:
> depurar.getBlockRlp(0)
"f901f7f901f2a0000000000000000000000000000000000000000000000000
0000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a
7413f0a142fd40d49347940000000000000000000000000000000000000000
a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363
b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5
e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc00162
2fb5e363b421b9010000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
ATURA.
000000000000000000000000000000000000000000000000000000000000088
0000000000000042c0c0"
> personal.unlockAccount
("0x76f11b383dbc3becf8c5d9309219878caae265c3")
Desbloquear cuenta 0x76f11b383dbc3becf8c5d9309219878caae265c3
Frase de contraseña:
Enviar transacciones:
> eth.sendTransaction({desde:
"0x76f11b383dbc3becf8c5d9309219878caae265c3", hasta:
"0xcce6450413ac80f9ee8bd97ca02b92c065d77abc", valor: 1000})
Otra forma es usar el método listAccounts[] , esto se puede hacer como se muestra a continuación:
Obtenga una lista de compiladores. Tenga en cuenta que si no se muestra ningún resultado, significa que no está instalado
ningún compilador de solidity; Los detalles de instalación del compilador de solidity se proporcionan más adelante en este capítulo:
> web3.eth.getCompilers()
["Solidez"]
Esto permitirá una conexión a la sesión geth de Private Net en ejecución , y proporciona todas las funciones,
Machine
tales comoTranslated
billetera,by Google
administración de cuentas e implementación de contratos en Private Net a través de Mist.
Una vez que se inicie Ethereum, mostrará la interfaz que se muestra aquí, lo que indica claramente que se está
ejecutando en el modo PRIVATE-NET.
Mist también puede correr por la red usando RPC. Esto es útil si geth se ejecuta en un nodo diferente y Mist en otro.
Esto se puede lograr ejecutando Mist con la bandera que se muestra aquí:
--rpc http://127.0.0.1:8545
En el ejercicio, se utilizará un contrato simple que puede realizar varios cálculos aritméticos simples sobre el
parámetro de entrada. Los pasos sobre cómo usar Mist para implementar este contrato se muestran aquí. Como la
solidez aún no se ha introducido, el objetivo aquí es permitir que los usuarios experimenten el proceso de
implementación e interacción del contrato. Más adelante en el capítulo se proporcionará más información sobre la
codificación y la solidez, después de lo cual será más fácil comprender el código que se muestra. Aquellos de
ustedes que ya están familiarizados con JavaScript o cualquier otro lenguaje similar encontrarán que el código casi s
uint x; uint
z; función
suma(uint x) devuelve (uint y)
{
z=x+5;
y=z;
z=x-5;
y=z;
y=z;
}
devolver z;
}}
Este código simplemente se puede copiar en Mist en la sección de contratos, como se muestra aquí. En el lado
izquierdo, se puede copiar el código fuente; una vez verificado y cuando no se detecten errores de sintaxis,
aparecerá la opción de implementar el contrato en el menú desplegable del lado derecho donde dice VENDER
CONTRATO PARA IMPLEMENTAR. Simplemente seleccione el contrato y presione el botón Implementar en la parte
inferior de la pantalla.
Machine Translated by Google
Mist te pedirá la contraseña de la cuenta y te mostrará una ventana similar a la de la siguiente captura de
pantalla:
Machine
Crea Translated
un contrato by Google
usando Mist
Una vez implementado y extraído con éxito, aparecerá en la lista de transacciones en Mist, como se muestra aquí:
Una vez que el contrato está disponible, se puede interactuar usando la transacción de ejecución y llamando a las
funciones disponibles a través de Mist.
Como se muestra en la captura de pantalla, ingrese la contraseña apropiada para la cuenta y luego presione
ENVIAR TRANSACCIÓN para enviar la transacción al contrato.
Machine Translated by Google
Herramientas de desarrollo y clientes.
Hay una serie de herramientas disponibles para el desarrollo de Ethereum. El siguiente diagrama muestra la
taxonomía de varias herramientas de desarrollo, clientes, IDE y marcos de desarrollo para Ethereum:
En este capítulo, el enfoque principal estará en geth, solidez del navegador, solidez, solc y trufa. El resto de los
elementos se discutirán brevemente.
Machine Translated by Google
Idiomas
Los contratos se pueden programar en una variedad de idiomas. Hay cuatro idiomas que se pueden utilizar para
redactar contratos:
Mutan: este es un lenguaje de estilo Go, que quedó obsoleto a principios de 2015 y ya no se usa.
LLL: Este es un lenguaje similar a Lisp, de ahí el nombre LLL. Esto tampoco se usa más.
Serpiente: Este es un lenguaje similar a Python simple y limpio. Se utiliza activamente para el
desarrollo de contratos.
Solidez: este lenguaje ahora se ha convertido casi en un estándar para la redacción de contratos para Ethereum
Este lenguaje es el foco de este capítulo y se analiza en detalle en secciones posteriores.
Machine Translated by Google
compiladores
Los compiladores se utilizan para convertir el código fuente del contrato de alto nivel al formato que comprende el
entorno de ejecución de Ethereum. El compilador solidity es el más común en uso y se analiza aquí.
Solc
El compilador de solidez convierte un lenguaje de solidez de alto nivel en el código de bytes de la máquina virtual
Ethereum (EVM) para que EVM pueda ejecutarlo en la cadena de bloques.
El compilador solidity en un sistema operativo Linux Ubuntu se puede instalar usando los siguientes comandos:
Si los PPA aún no están instalados, se pueden instalar ejecutando el siguiente comando:
Para verificar la versión existente del compilador de solidity y verificar que esté instalado, se puede usar el
siguiente comando:
construcción:
97 + 54600 = 54697
Machine Translated by Google
externo:
división(uint256): 230 suma(uint256):
231 diferencia(uint256): 253
interno:
Tenga en cuenta que contrat1.sol se muestra solo como ejemplo; el archivo puede contener cualquier código de solidez
de contrato inteligente. El código del archivo no se muestra aquí.
Solc es utilizado internamente por web3 desde la consola geth para compilar el contrato. La sintaxis se muestra aquí, y
contractsourcecode es el código fuente de solidity:
Esto se analiza en detalle más adelante en el capítulo cuando se le presente el desarrollo de contratos.
Browser solidity es el entorno basado en web para el desarrollo y prueba de contratos utilizando
solidity. No se ejecuta en una cadena de bloques en vivo; de hecho, es un entorno simulado en el
que se pueden implementar, probar y depurar contratos. Está disponible en https://ethereum.github.i
A continuación se muestra una interfaz de ejemplo:
En el lado izquierdo, hay un editor de código con resaltado de sintaxis y formato de código, y en el lado derecho, hay
una serie de herramientas disponibles que se pueden usar para implementar, depurar, probar e interactuar con el
contrato. . Están disponibles varias funciones, como la interacción de transacciones, las opciones para conectarse a
la VM de JavaScript, la configuración del entorno de ejecución, el depurador, la verificación formal y el análisis
estático. Se pueden configurar para conectarse a entornos de ejecución como
Machine
VM Translated by
de JavaScript, Google
Web3 inyectado, donde Mist o un entorno similar ha proporcionado el entorno de
ejecución, o proveedor Web3, que permite la conexión al cliente Ethereum que se ejecuta localmente (por
ejemplo, geth) a través de IPC o RPC a través de HTTP (punto final del proveedor web3) .
remezclar
Después de que Mix IDE se suspendió en agosto de 2016, se inició el proyecto Remix. Remix es un
IDE basado en navegador que se encuentra en pleno desarrollo actualmente y solo la parte del
depurador está disponible a partir de ahora. Este depurador es muy potente y se puede utilizar para
realizar un seguimiento de nivel detallado y un análisis del código de bytes de EVM. En la siguiente
sección, se presentan ejemplos de instalación y uso de Remix.
Instalación
Después de completar con éxito los pasos anteriores, ejecute el siguiente comando:
remezcla de cd
npm instalar
npm ejecutar construir
En este punto, se puede ejecutar npm run start_node o se puede iniciar geth usando los
indicadores apropiados. Una vez que geth está en funcionamiento, se puede ejecutar un servidor web
simple para servir la página web de remezclas. Ahora geth se puede iniciar con el siguiente comando:
$ geth --datadir .ethereum/privatenet/ --networkid 786 --rpc --rpcapi 'web3,eth,debug' --rpcport 8001 --
rpccorsdomain 'http://localhost:7777'
Observe la bandera --rpcapi ; es necesario para permitir web3, eth, depuración sobre RPC.
Si optó por ejecutar geth , entonces se requiere un servidor web simple para navegar a la página web de remix.
Esto se puede lograr simplemente emitiendo un comando de Python, de la siguiente manera. Esto debe ejecutarse desde
el directorio de remezclas .
Una vez que el comando se ejecuta correctamente y el servidor web se está ejecutando, se puede explorar el remix
usando la URL http://localhost:7777 , como se muestra en la siguiente captura de pantalla:
Navegador web que muestra el remix ejecutándose y servido a través de TCP 7777
Remix también está disponible como parte de la solidez del navegador (la solidez del navegador se ha discutido
anteriormente por separado). Se puede conectar a la red privada local proporcionando el punto final del proveedor web3.
Esto se muestra de la siguiente manera:
Machine Translated by Google
La opción del proveedor Web3 en la solidez del navegador para conectarse al nodo geth local es la siguiente:
Machine Translated by Google
Herramientas y bibliotecas
Hay varias herramientas y bibliotecas disponibles para Ethereum. Los más comunes se discuten aquí.
Node.js versión 7
Como se requiere Node js para la mayoría de las herramientas y bibliotecas, se puede instalar usando lo siguiente
Machine Translated by Google
comandos:
El explorador de bloques de Ethereum local es una herramienta útil que se puede utilizar para explorar la cadena de
bloques local. Esto se puede instalar siguiendo estos pasos:
En una máquina Linux Ubuntu, ejecute el siguiente comando para instalar el explorador de bloques Ethereum local:
imran@drequinox-OP7010:~$ cd explorer/
imran@drequinox-OP7010:~/explorer$ npm start >
[email protected] prestart /home/imran/explorer > npm install
Una vez finalizada la instalación se mostrará un resultado similar al siguiente, donde se inicia el servidor HTTP
para Ethereum explorer:
Una vez que el servidor web esté activo, geth debe iniciarse con el siguiente comando:
Explorador de bloques
Alternativamente, el servidor web se puede iniciar usando Python o cualquier otro proveedor apropiado.
En Python, se puede iniciar un servidor web rápido, como se muestra en el siguiente código:
El cliente geth deberá iniciarse con los parámetros apropiados. De lo contrario, puede ocurrir un
error como el que se muestra en la siguiente captura de pantalla:
EthereumJS
A veces, no es posible probar en Test Net y Main Net obviamente no es un lugar para probar el
Machine Translated
contratos by configuración
A veces, la Google de la red privada puede llevar mucho tiempo. EthereumJS testrpc es útil
cuando se requieren pruebas rápidas y no hay disponible una red de prueba adecuada. Utiliza EthereumJS para
simular el comportamiento del cliente geth de Ethereum y permite pruebas de desarrollo más rápidas. Testrpc está
disponible a través de npm como un paquete de nodos.
Antes de instalar testrpc, Node.js ya debería estar instalado y el administrador de paquetes npm también debería
estar disponible.
Para iniciar testrpc, simplemente emita este comando y manténgalo ejecutándose en segundo plano y abra otra
terminal para trabajar en contratos.
$testrpc
Machine Translated by Google
Desarrollo e implementación de contratos
Hay varios pasos que deben tomarse para desarrollar e implementar los contratos. En términos generales,
estos se pueden dividir en cuatro pasos: escritura, prueba, verificación e implementación. Después de la
implementación, el siguiente paso es crear la interfaz de usuario y presentarla a los usuarios finales a través de u
El paso de escritura se ocupa de escribir el código fuente del contrato en solidez. Esto se puede hacer en
cualquier editor de texto. Hay varios complementos y complementos disponibles para Vim en Linux, Atom y
otros editores que brindan resaltado de sintaxis y formato para el código fuente de Solidity.
Las pruebas generalmente se realizan por medios automatizados. Más adelante en el capítulo, se le
presentará la trufa, que utiliza el marco Mocha para probar los contratos. Sin embargo, también se pueden
realizar pruebas manuales. Una vez que el contrato se verifica, funciona y se prueba en un entorno simulado
(por ejemplo, EthereumJS testrpc) o en Private Net, se puede implementar en Ropsten Test Net y, finalmente,
en Live Blockchain (Homestead).
En la siguiente sección, se le presentará la solidez del lenguaje. Esta es una breve introducción a la solidez,
que debe proporcionar los conocimientos básicos necesarios para redactar los contratos. La sintaxis es muy
similar a C y JavaScript, y es bastante fácil de programar.
Machine Translated by Google
Introducción a la solidez
Solidity es un lenguaje específico de dominio de elección para los contratos de programación en Ethereum.
Hay, sin embargo, otros lenguajes, como serpiente, mutan y LLL, pero solidez es el más popular al momento de
escribir esto. Su sintaxis es más cercana a JavaScript y C. Solidity se ha convertido en un lenguaje maduro en
los últimos años y es bastante fácil de usar, pero aún tiene un largo camino por recorrer antes de que pueda
volverse avanzado y rico en funciones como otros bien- lenguas establecidas. Sin embargo, este es el lenguaje
más utilizado disponible para los contratos de programación en la actualidad.
Es un lenguaje tipado estáticamente, lo que significa que la comprobación de la solidez del tipo variable se
lleva a cabo en tiempo de compilación. Cada variable, ya sea estatal o local, debe especificarse con un tipo en
tiempo de compilación. Esto es beneficioso en el sentido de que cualquier validación y verificación se completa
en el momento de la compilación y ciertos tipos de errores, como la interpretación de los tipos de datos, pueden
detectarse antes en el ciclo de desarrollo en lugar de en el tiempo de ejecución, lo que podría ser costoso,
especialmente en el caso del paradigma blockchain/smart contracts. Otras características del lenguaje incluyen
herencia, bibliotecas y la capacidad de definir tipos de datos compuestos.
La solidez también se denomina lenguaje orientado a contratos. En solidez, los contratos son
equivalentes al concepto de clases en otros lenguajes de programación orientados a objetos.
Machine Translated by Google
Tipos
Solidity tiene dos categorías de tipos de datos: tipos de valor y tipos de referencia.
Tipos de valor
booleano
Este tipo de datos tiene dos valores posibles, verdadero o falso, por ejemplo:
booleano v = verdadero;
enteros
Este tipo de datos representa números enteros. Aquí se muestra una tabla, que muestra varias palabras clave
utilizadas para declarar tipos de datos enteros.
En t entero con signo int8 a int256, lo que significa que las palabras clave están disponibles desde int8 hasta int256 en incrementos de 8, por ejemplo, int8, int16, int24.
Por ejemplo, en este código, tenga en cuenta que uint es un alias para uint256:
uint256x; unir
y; int256z;
Estos tipos también se pueden declarar con la palabra clave constant , lo que significa que el compilador no reservará
ninguna ranura de almacenamiento para estas variables. En este caso, cada ocurrencia será reemplazada con el valor
real:
Las variables de estado se declaran fuera del cuerpo de una función y permanecen disponibles durante todo el
contrato dependiendo de la accesibilidad que se les asigne y mientras el contrato persista.
Dirección
Este tipo de datos contiene un valor de 160 bits de longitud (20 bytes). Este tipo tiene varios miembros que se pueden
usar para interactuar y consultar los contratos. Estos miembros se describen aquí:
Balance
ElMachine
miembroTranslated by Google
de saldo devuelve el saldo de la dirección en Wei.
Enviar
Este miembro se utiliza para enviar una cantidad de ether a una dirección (la dirección de 160 bits de Ethereum) y
devuelve verdadero o falso según el resultado de la transacción, por ejemplo, lo siguiente:
Funciones de llamada
La llamada, el código de llamada y la llamada delegada se proporcionan para interactuar con funciones que no tienen interfaz
binaria de aplicación (ABI). Estas funciones se deben usar con precaución ya que no son seguras debido al impacto en la
seguridad del tipo de contratos.
Solidity tiene matrices de bytes de tamaño fijo y de tamaño dinámico. Las palabras clave de tamaño fijo van desde bytes1 a
bytes32, mientras que las palabras clave de tamaño dinámico incluyen bytes y cadenas. los bytes se usan para datos de bytes
sin procesar y la cadena se usa para cadenas codificadas en UTF-8. Como estas matrices se devuelven por el valor, llamarlas
incurrirá en costos de gas. length es un miembro de los tipos de valor de matriz y devuelve la longitud de la matriz de bytes.
bytes32[10] cuentasbancarias;
bytes32[] intercambios;
operaciones.longitud;
literales
Estos se utilizan para representar un valor fijo.
Literales enteros
Los literales enteros son una secuencia de números decimales en el rango de 0-9. Un ejemplo se muestra a continuación:
uint8 x = 2;
Literales de cadena
Machine
Los Translated
literales by Google
de cadena especifican un conjunto de caracteres escritos con comillas simples o dobles. Un ejemplo se
muestra a continuación:
'paquete'
"paquete"
Literales hexadecimales
Los literales hexadecimales tienen como prefijo la palabra clave hex y se especifican entre comillas simples o
dobles. Un ejemplo se muestra a continuación:
(hexágono'AABBCC');
Enumeraciones
Esto permite la creación de tipos definidos por el usuario. Un ejemplo se muestra a continuación:
Se permite la conversión explícita hacia y desde todos los tipos de enteros con enumeraciones.
Tipos de funciones
Funciones internas
Funciones externas
Una función en solidez se puede marcar como una constante. Las funciones constantes no pueden cambiar nada en el
contrato; solo devuelven valores cuando se invocan y no cuestan gasolina. Esta es la implementación práctica del
concepto de llamada como se discutió en el capítulo anterior.
función <nombre de la función> (<tipos de parámetros> <nombre de la variable>) {interna|externa} [constante] [a pagar]
[devoluciones (<tipos de devolución> <nombre de la variable>)]
Tipos de referencia
Como sugiere el nombre, estos tipos se pasan por referencia y se analizan en la siguiente sección.
arreglos
Machine
Las matricesTranslated byun
representan Google
conjunto contiguo de elementos del mismo tamaño y tipo dispuestos en una ubicación de memoria.
El concepto es el mismo que cualquier otro lenguaje de programación. Los arreglos tienen dos miembros llamados length y push:
uint[] ID de pedido;
estructuras
Estas construcciones se pueden usar para agrupar un conjunto de tipos de datos diferentes en un grupo lógico. Estos se pueden utilizar
comercio de estructuras
ubicación de datos
La ubicación de datos especifica dónde se almacenará un tipo de datos complejo en particular. Según el valor predeterminado o la anotación
especificada, la ubicación puede ser almacenamiento o memoria. Esto es aplicable a arreglos y estructuras y se puede especificar usando
las palabras clave de almacenamiento o memoria. Dado que la copia entre la memoria y el almacenamiento puede ser bastante costosa,
especificar una ubicación puede ser útil para controlar el gasto de gas en ocasiones. Calldata es otra ubicación de memoria que se utiliza
para almacenar argumentos de funciones. Los parámetros de las funciones externas utilizan la memoria de datos de llamadas. De forma
predeterminada, los parámetros de las funciones se almacenan en la memoria, mientras que todas las demás variables locales utilizan el
almacenamiento. Las variables de estado, por otro lado, son necesarias para usar el almacenamiento.
Asignaciones
Las asignaciones se utilizan para una asignación de clave a valor. Esta es una forma de asociar un valor con una clave. Todos los
valores en este mapa ya están inicializados con ceros, por ejemplo, los siguientes:
Este ejemplo muestra que las ofertas se declaran como una asignación. Otro ejemplo aclara esto:
Esto es básicamente un diccionario o una tabla hash donde los valores de cadena se asignan a valores enteros. La asignación de ofertas
Variables globales
Solidity proporciona una serie de variables globales que siempre están disponibles en el espacio de nombres global.
Esta función se utiliza para calcular el hash keccak256 del argumento proporcionado a la función:
Esta función devuelve la dirección asociada de la clave pública de la firma de la curva elíptica:
Número de bloque
Estructuras de Control
Las estructuras de control disponibles en Solidity son if - else, do, while, for, break, continue, return.
Eventos
Los eventos en solidity se pueden usar para registrar ciertos eventos en los registros de EVM. Estos son bastante útiles
cuando se requiere que las interfaces externas sean notificadas de cualquier cambio o evento en el contrato. Estos registros
se almacenan en la cadena de bloques en los registros de transacciones. No se puede acceder a los registros desde los
contratos, pero se utilizan como un mecanismo para notificar el cambio de estado o la ocurrencia de un evento (cumplimiento
de una condición) en el contrato.
En un ejemplo simple aquí, el evento valueEvent devolverá verdadero si el parámetro x pasado a la función
Matcher es igual o mayor que 10:
si (x>=precio) {
valorEvento(verdadero);
devolver verdadero;
}
}
}
Herencia
La herencia se apoya en la solidez. La palabra clave is se utiliza para derivar un contrato de otro contrato.
En el siguiente ejemplo, valueChecker2 se deriva del contrato valueChecker . los
Machinederivado
contrato Translatedtiene
by Google
acceso a todos los miembros no privados del contrato principal:
if (x>=precio)
{ valueEvent(true);
devolver verdadero;
}}}
contrato valueChecker2 es valueChecker
En el ejemplo anterior, si uint8 price = 10 se cambia a uint8 private price = 10, el contrato valuechecker2 no podrá
acceder a él . Esto se debe a que ahora que el miembro se declara como privado, no se permite acceder a él
mediante ningún otro contrato.
bibliotecas
Las bibliotecas se implementan solo una vez en una dirección específica y su código se
llama a través de CALLCODE/DELEGATECALL Opcode de EVM. La idea clave detrás de las bibliotecas
es la reutilización del código. Son similares a los contratos y actúan como contratos base para los contratos de
llamadas. Una biblioteca se puede declarar como se muestra en el siguiente ejemplo:
A continuación, se puede llamar a esta biblioteca en el contrato, como se muestra aquí. Primero, debe importarse
y puede usarse en cualquier parte del código. Un ejemplo simple se muestra a continuación:
Hay algunas limitaciones con las bibliotecas; por ejemplo, no pueden tener variables de estado y no pueden
Machine
heredar Translated
o ser by Google
heredado. Además, tampoco pueden recibir Éter; esto contrasta con los contratos que pueden recibir Ether.
Funciones
Las funciones en Solidity son módulos de código que están asociados con un contrato. Las funciones se declaran con un
nombre, parámetros opcionales, modificador de acceso, palabra clave constante opcional y tipo de retorno opcional. Esto se
muestra en el siguiente ejemplo:
En el ejemplo anterior, función es la palabra clave utilizada para declarar la función. orderMatcher es el nombre de la función,
uint x es un parámetro opcional, private es el modificador/especificador de acceso que controla el acceso a la función desde
contratos externos, constant es una palabra clave opcional utilizada para especificar que esta función no cambia nada en el
contrato pero es en su lugar, solo se usa para recuperar valores del contrato, y las devoluciones (valor de retorno booleano) son
el tipo de devolución opcional de la función.
Cómo definir una función: La sintaxis para definir una función se muestra a continuación:
Firma de la función: las funciones en Solidity se identifican por su firma, que son los primeros cuatro bytes del hash
keccak-256 de su cadena de firma completa. Esto también es visible en la solidez del navegador, como se muestra en la
siguiente captura de pantalla. D99c89cb son los primeros cuatro bytes del hash keccak-256 de 32 bytes de la función
denominada Matcher.
En esta función de ejemplo, Matcher tiene el hash de firma de d99c89cb. Esta información es útil para construir interfaces.
Parámetros de entrada de una función: Los parámetros de entrada de una función se declaran en forma de <tipo de
datos> <nombre del parámetro>. Este ejemplo aclara el concepto donde uint x y uint y son parámetros de entrada de la
función checkValues :
contrato miContrato {
Machine Translated función
by Google
comprobarValores(uint x, uint y) { } }
Parámetros de salida de una función: Los parámetros de salida de una función se declaran en forma de <tipo
de datos> <nombre del parámetro>. Este ejemplo muestra una función simple que devuelve un valor uint :
contrato miContrato {
z=x+y; } }
Una función puede devolver múltiples valores. En la función de ejemplo anterior, getValue solo devuelve un valor,
pero una función puede devolver hasta 14 valores de diferentes tipos de datos. Los nombres de los parámetros
de retorno no utilizados se pueden omitir opcionalmente.
Llamadas a funciones internas: Las funciones dentro del contexto del contrato actual se pueden llamar
internamente de manera directa. Estas llamadas se realizan para llamar a las funciones que existen dentro de un
mismo contrato. Estas llamadas dan como resultado llamadas JUMP simples en el nivel de código de bytes de EVM
Llamadas de funciones externas: Las llamadas de funciones externas se realizan a través de llamadas de
mensajes de un contrato a otro contrato. En este caso, todos los parámetros de la función se copian en la
memoria. Si se realiza una llamada a una función interna utilizando la palabra clave this , también se considera
una llamada externa. La variable this es un puntero que se refiere al contrato actual. Es explícitamente
convertible a una dirección y todos los miembros de un contrato se heredan de la dirección.
Funciones de respaldo: esta es una función sin nombre en un contrato sin argumentos y datos de retorno.
Esta función se ejecuta cada vez que se recibe ether. Se requiere que se implemente dentro de un contrato si el
contrato está destinado a recibir ether; de lo contrario, se lanzará una excepción y se devolverá ether. Esta
función también se ejecuta si ninguna otra firma de función coincide en el contrato. Si se espera que el contrato
reciba ether, entonces la función de respaldo debe declararse con el modificador payable. Se requiere el pago ; de
lo contrario, esta función no podrá recibir ningún éter. Esta función se puede llamar usando el método address.call()
como, por ejemplo, en lo siguiente:
función () {
lanzar;
}
En este caso, si se llama a la función de reserva de acuerdo con las condiciones descritas anteriormente; llamará
a throw, que hará retroceder el estado al que estaba antes de realizar la llamada. También puede ser alguna otra
construcción además de tirar; por ejemplo, puede registrar un evento que se puede usar como una alerta para
retroalimentar el resultado de la llamada a la aplicación que llama.
Funciones modificadoras: estas funciones se utilizan para cambiar el comportamiento de una función y se
pueden llamar antes que otras funciones. Por lo general, se utilizan para verificar algunas condiciones o
verificación antes de ejecutar la función. _(guión bajo) se utiliza en las funciones modificadoras que se
Machine Translatedcon
reemplazado by Google
el cuerpo real de la función cuando se llama al modificador. Básicamente, simboliza la
función que debe protegerse . Este concepto es similar a las funciones de guardia en otros idiomas.
Función constructora: esta es una función opcional que tiene el mismo nombre que el contrato y se ejecuta una vez
que se crea un contrato. Los usuarios no pueden llamar a las funciones de constructor más adelante, y solo se
permite un constructor en un contrato. Esto implica que no hay ninguna funcionalidad de sobrecarga disponible.
Especificadores de visibilidad de función (modificadores de acceso): Las funciones se pueden definir con cuatro
especificadores de acceso de la siguiente manera: Externo: Estas funciones son accesibles desde otros
contratos y transacciones. No se pueden llamar internamente a menos que se use la palabra clave this .
Público: Por defecto, las funciones son públicas. Se pueden llamar internamente o mediante mensajes.
Interno: las funciones internas son visibles para otros contratos derivados del contrato principal.
Privado: las funciones privadas solo son visibles para el mismo contrato en el que se declaran.
Otras palabras clave/funciones importantes throw: throw se usa para detener la ejecución. Como resultado, se
revierten todos los cambios de estado. En este caso, no se devuelve gas al originador de la transacción porque se
consume todo el gas restante.
Versión pragmática
Para abordar los problemas de compatibilidad que puedan surgir de versiones futuras de la versión del compilador de
solidity, se puede usar pragma para especificar la versión del compilador compatible como, por ejemplo, en lo siguiente:
Esto garantizará que el archivo fuente no se compile con versiones inferiores a la 0.5.0 y versiones a partir de la 0.6.0.
Importar
Importar en solidez permite importar símbolos de los archivos de solidez existentes al alcance global actual. Esto es
similar a las declaraciones de importación disponibles en JavaScript, como por ejemplo, en lo siguiente:
Importar "nombre-módulo";
Comentarios
Se pueden agregar comentarios en el archivo de código fuente de Solidity de manera similar al lenguaje C. Los
comentarios de varias líneas se incluyen entre /* y */, mientras que los comentarios de una sola línea comienzan con //.
UnMachine Translated
programa by Google
de solidez de ejemplo es el siguiente, que muestra el uso de pragma, importación y comentarios:
Esto completa una breve introducción al lenguaje de solidez. El lenguaje es muy rico y está en constante mejora. La
documentación detallada y las pautas de codificación están disponibles en línea.
Machine Translated by Google
Introducción a Web3
Web3 es una biblioteca de JavaScript que se puede usar para comunicarse con un nodo Ethereum a
través de la comunicación RPC. Web3 funciona exponiendo métodos que se han habilitado sobre RPC. Esto
permite el desarrollo de interfaces de usuario que hacen uso de la biblioteca web3 para interactuar con los
contratos desplegados sobre la cadena de bloques.
Para exponer los métodos a través de geth, se puede usar el siguiente comando:
$ geth --datadir .ethereum/privatenet/ --networkid 786 --rpc --rpcapi 'web3,eth,debug' --rpcport 8001 --
rpccorsdomain 'http://localhost:7777'
Tenga en cuenta el indicador --rpcapi que permite los métodos web3, eth y debug .
Esta es una biblioteca poderosa y se puede explorar más al adjuntar una instancia de geth . Más
adelante en la sección, se le presentarán los conceptos y las técnicas para hacer uso de web3 a través
de interfaces JavaScript/HTML.
Una vez que se ejecuta la consola geth JavaScript, se puede consultar web3, por ejemplo:
Se puede implementar un contrato simple usando geth e interactuar con web3 a través de la interfaz de línea
de comandos que proporciona geth (consola o adjunto). Los siguientes son los pasos para lograrlo. Como
ejemplo, se utilizará el siguiente código fuente:
si (x>=precio) {
valorEvento(verdadero);
devolver verdadero;
}
}
}
Ahora abra la consola geth que se ha abierto anteriormente y siga estos pasos:
indefinido
Tenga en cuenta que el código fuente debe estar en una sola línea, lo que significa que no
debe haber saltos de línea. Esto se puede lograr en Linux usando el siguiente comando:
> eth.getCompilers()
["Solidez"]
> var
simplecontractcompiled=eth.compile.solidity(simplecontractsource) indefinido
>var simplecontratointeractor=eth.contrato
(simplecontractcompiled.valueChecker.info.abiDefinition); indefinido
> simplecontratointeractor.abi [{
constante: falso,
entradas: [{
nombre: "x",
tipo: "uint8"
}],
nombre: "Matcher",
resultados: [{ nombre:
"", tipo: "bool"
}],
a pagar: falso, tipo:
"función" }, { anónimo:
falso, entradas: [{ indexado:
falso, nombre:
"returnValue", tipo: "bool"
}],
nombre: "valueEvent", tipo:
"evento"
}]
Machine Translated
7. Verifique by Google
el código de valueChecker en formato hexadecimal:
Esto devolverá la siguiente salida. Puede ser ligeramente diferente para usted:
"0x6060604052600a60005534610000575b60878061001c6000396000f36060604
05260e060020a6000350463f9d55e218114601c575b6000565b3460005760296004
35603d565b604080519115158252519081900360200190f35b6000805460ff83161
0608157604080516001815290517f3eb1a229ff7995457774a4bd31ef7b13b6f449
1ad1ebb8961af120b8b4b6239c9181900360200190a15060015b5b91905056"
8. Ahora ingrese el siguiente código; tenga en cuenta que el campo de datos contiene el código para
contrato simple compilado:
}
});
Primero, enumere las cuentas usando el siguiente comando para obtener los ID de cuenta:
> personal.listAccounts
["0x76f11b383dbc3becf8c5d9309219878caae265c3",
"0xcce6450413ac80f9ee8bd97ca02b92c065d77abc"]
Ingrese el siguiente comando con la cuenta que se desbloqueará, como se muestra aquí:
> personal.unlockAccount
("0x76f11b383dbc3becf8c5d9309219878caae265c3")
Desbloquear cuenta 0x76f11b383dbc3becf8c5d9309219878caae265c3
Frase de contraseña:
verdadero
Machine Translated
Después by Google la cuenta, ingrese nuevamente el código anterior; decir, aparece un mensaje de error:
de desbloquear
En este caso, trate de aumentar el gas. Si se ingresa un valor de gas demasiado grande, aparecerá un mensaje
de error, de la siguiente manera:
9. Una vez que la cuenta se haya desbloqueado con éxito, inicie el minero para poder minar el contrato (no es
necesario desbloquear la cuenta para comenzar a minar. El desbloqueo de la cuenta es necesario para minar el
contrato y crearlo en la cadena de bloques):
> minero.start()
verdadero
[objeto Objeto]
indefinido
indefinido
> [objeto Objeto]
0x94a1107f2585f0ab931c71f2f8f02e9f5ab888c0
Esto muestra la dirección del contrato recién creado después de que se haya extraído el contrato.
10. Para facilitar la interacción con el contrato, se puede asignar la dirección de la cuenta
a una variable:
11. Hay una serie de métodos que ahora se exponen, y el contrato se puede consultar más
ahora, por ejemplo:
12. Después de esto, se puede crear un objeto llamado instancia de contrato simple, que se utilizará para
métodos de llamada:
instanciacontratosimple = web3.eth.contract(contratosimplecompilado
Machine Translated by Google
.valueChecker.info.abiDefinition).at(dirección de contrato simple);
13. Hay varios métodos que se han expuesto ahora, y se puede ver una lista de la siguiente manera:
> instanciacontratosimple.Matcher.
simplecontractinstance.Matcher.apply
simplecontractinstance.Matcher.constructor
simplecontractinstance.Matcher.request
simplecontractinstance.Matcher.arguments
simplecontractinstance.Matcher.estimateGas
simplecontractinstance.Matcher.sendTransaction
simplecontratoinstance.Matcher.bind
instanciadecontratosimple.Matcher.getData
instanciadecontratosimple.Matcher.toString
simplecontratoinstance.Matcher.call
simplecontractinstance.Matcher.length
simplecontractinstance.Matcher.uint8
simplecontratoinstancia.Matcher.caller
simplecontratoinstancia.Matcher.prototipo
14. El contrato se puede consultar más como se muestra aquí. En el siguiente ejemplo, el Matcher
La función se llama con los argumentos. Recuerda que en el código hay una condición que
comprueba que, si el valor es igual o mayor a 10, entonces la función devuelve verdadero; de lo
contrario, devuelve falso. Esto se puede ver de la siguiente manera:
Antes de usar la interfaz JsonRPC a través de HTTP, se debe iniciar geth con los conmutadores apropiados, como
se muestra aquí:
--rpcapiweb3
El comando curl de Linux se puede usar con el fin de comunicarse a través de HTTP, como se muestra aquí
en algunos ejemplos.
Recuperar la lista de cuentas: Por ejemplo, para recuperar la lista de cuentas usando el método
personal_listAccounts , se puede usar el siguiente comando:
{"jsonrpc":"2.0","id":4,"resultado":
["0x76f11b383dbc3becf8c5d9309219878caae265c3","0xcce6450413ac80f9
ee8bd97ca02b92c065d77abc"]}
En el comando curl anterior, --request se usa para especificar el comando de solicitud, POST es la solicitud y --
data se usa para especificar los parámetros y valores y, finalmente, localhost:8001 es donde se abre el punto
final HTTP de geth .
Machine Translated by Google
La interfaz de HTML y JavaScript
Es deseable interactuar con los contratos de manera amigable a través de una página web. Es posible
interactuar con los contratos utilizando la biblioteca web3.js desde páginas web basadas en HTML/JS/CSS. El
contenido HTML se puede servir usando cualquier servidor web HTTP, mientras que web3.js puede conectarse
a través de RPC local al cliente Ethereum en ejecución (geth) y proporcionar una interfaz para los contratos en
la cadena de bloques. Esta arquitectura se puede visualizar en el siguiente diagrama:
Si web3.js aún no está instalado, siga estos pasos; de lo contrario, vaya al siguiente paso.
Instalando web3.js
Web3 se puede instalar a través de npm simplemente emitiendo el siguiente comando:
web3.min.js, descargado a través de npm, se puede consultar en los archivos HTML. Esto se puede
encontrar en node_modules, por ejemplo, /home/drequinox/netstats/node_modules/web3/dist/web3.min.js.
Opcionalmente, el archivo se puede copiar en el directorio donde se encuentra la aplicación principal y se puede
utilizar desde allí. Una vez que el archivo se remite correctamente en HTML o JS, se debe inicializar web3
proporcionando un proveedor HTTP.
Este suele ser el enlace al punto final HTTP del host local expuesto por el cliente geth en ejecución . Esto se
puede lograr usando el siguiente código:
web3.setProvider(nuevo web3.providers.HttpProvider('http://localhost:8001'));
Machine
Una Translated
vez que by Google
se establece el proveedor, se puede realizar una mayor interacción con los contratos y la cadena de
bloques utilizando el objeto web3 y sus métodos disponibles.
} más
{
web3 = new Web3(new
Web3.providers.HttpProvider("http://localhost:8001"));
}
Ejemplo
En la siguiente sección, se presentará un ejemplo que hará uso de web3.js para permitir la interacción con los
contratos a través de una página web a través de un servidor web HTTP simple. Esto se puede lograr siguiendo
estos pasos:
simplecontratocompilado={ comprobador
de valor: {
código:
"0x6060604052600a60005534610000575b60878061001c6000396000f360606040
5260e060020a6000350463f9d55e218114601c575b6000565b34600057602960043
5603d565b604080519115158252519081900360200190f35b6000805460ff83161
0608157604080516001815290517f3eb1a229ff7995457774a4bd31ef7b13b6f449
1ad1ebb8961af120b8b4b6239c9181900360200190a15060015b5b91905056", información:
{
abiDefinición:
[{ constante: falso,
entradas: [{ nombre: "x",
tipo: "uint8" }], nombre:
"Matcher", salidas:
[{ nombre: "", tipo: "bool" }],
pago: falso , tipo:
"función" }, { anónimo:
falso,
Machine Translated
entradas:by Google
[{ indexado:
falso, nombre:
"returnValue", tipo: "bool" }],
nombre: "valueEvent", tipo:
"evento" }], compilerOptions: "--
combined-json bin,abi,userdoc,
devdoc --add- std --
optimize",compilerVersion:
"0.4.6", developerDoc: { métodos: {} }, idioma: "Solidity", languageVersion: "0.4.6", fuente: "pragma
solidity ^0.4. 0; contract valueChecker { uint price=10; event valueEvent(bool returnValue); function
Matcher (uint8 x) devuelve (bool) { if (x>=price) { valueEvent(true); return true; } } }", userDoc : { métodos:
{} } } } }
Este archivo contiene varios elementos. El más importante es ABI (interfaz binaria de aplicaciones), que se
puede consultar mediante geth, como se muestra anteriormente en el paso 6 durante la implementación del c
proceso.
3. Cree un archivo llamado simplecontract.js, como se muestra aquí:
f5ab888c0";
instanciadecontratosimple =
web3.eth.contract(contratosimplecompilado.valueChecker .info.abiDefinition).at(direccióncontratosimple);
código var = web3.eth.getCode(dirección de contrato simple); console.log("Saldo del
contrato: " web3.eth.getBalance(dirección del contrato simple)); console.log("código de
+ () {
contrato simple" + código); llamada de funciónMatchertrue
Machine Translatedvarby Google
txn = instanciadecontratosimple.Matcher.call(12);{
};
console.log("valor de retorno: " } function + txn);
callMatcherfalse() { var txn =
instanciadecontratosimple.Matcher.call(1);{ };
console.log("valor de retorno: " }
+ txn);
Este archivo es el archivo JavaScript principal que contiene el código para crear un objeto web3 . También
proporciona métodos que se utilizan para interactuar con el contrato en la cadena de bloques. Aquí se da una
explicación del código.
Este código primero verifica si ya hay un proveedor disponible; en caso afirmativo, establecerá el proveedor en el
proveedor actual. De lo contrario, establece el proveedor web3 en localhost: 8001; aquí es donde se ejecuta la instancia
local de geth .
Esta línea de código simplemente usa console.log para imprimir la base de monedas llamando al método web3.eth.coinbase .
Una vez que esta llamada es exitosa, significa que el objeto web3 se ha creado correctamente y HttpProvider está disponible.
Se puede usar cualquier otra llamada para verificar la disponibilidad, pero como ejemplo simple, se usó web3.eth.coinbase
en el ejemplo anterior.
Esta declaración asignará el valor de la dirección del contrato desplegado en la cadena de bloques. Después de la
ejecución exitosa de la variable de declaración, simplecontratodirección contendrá la dirección del contrato. Esta es la
dirección del contrato creado en el paso 9 en el ejemplo anterior cuando se implementa el contrato. Simplemente use esa
dirección en el código aquí.
Machine
Crear Translated
el objeto by Google
principal del contrato
Este fragmento de código creará un objeto que se usará más adelante en el código para interactuar con el contrato
en la cadena de bloques. simplecontrato instancia expondrá las funciones del contrato. web3.eth.contract toma la matriz
ABI como argumento. Esto se puede pasar usando simplecontractcompiled.valueChecker.info.abiDefinition. Finalmente, .a
toma como argumento la dirección del contrato.
Las declaraciones anteriores se utilizan para consultar el código del contrato. Esta es una
simple llamada web3.eth.getCode que toma como argumento la dirección del contrato en la cadena de bloques.
Finalmente, console.log se usa para imprimir el código del contrato al imprimir la variable de código.
Una vez que el objeto web3 se crea correctamente y se crea una instancia de contrato simple , las llamadas a las
funciones del contrato se pueden realizar fácilmente como se muestra en el siguiente ejemplo:
llamada de funciónMatchertrue () {
+ txn);
+ txn);
Toma un argumento x de tipo uint8 y devuelve un valor booleano, ya sea verdadero o falso.
En el ejemplo anterior, se usa console.log para imprimir el valor devuelto por la llamada a la función. Una vez que el resultado de la
llamada está disponible en la variable txn , se puede usar en cualquier parte del programa, por ejemplo, como parámetro para otra
función de JavaScript.
<html>
<head>
<title>SimpleContract Interactor</title> <script src="./web3.min.js"></
script> <script src="./simplecontractcompiled.js"></script> <script
src= "./simplecontract.js"></script> </head> <body> <button
onclick="callMatchertrue()">callTrue</button> <button onclick="callMatcherfalse()">callFalse</
button> < /cuerpo> </html>
Se recomienda que se esté ejecutando un servidor web adecuado para servir el contenido HTML (index.html como ejemplo).
Alternativamente, el archivo se puede buscar desde el sistema de archivos, pero eso puede causar algunos problemas con
proyectos más grandes; como buena práctica, utilice siempre un servidor web. Se puede iniciar un servidor web rápido en
Python usando el siguiente comando. Este servidor servirá el contenido HTML desde el mismo directorio desde el que se
ha ejecutado. Python no es necesario; incluso puede ser un servidor Apache o cualquier otro contenedor web.
Ahora se puede usar cualquier navegador para ver la página web a través del puerto TCP 7777. Esto se muestra en el siguiente
ejemplo. Cabe señalar que el resultado que se muestra aquí está en la ventana de la consola del navegador. La consola del
navegador debe estar habilitada para ver el resultado.
Machine Translated by Google
Como los valores están codificados en el código por simplicidad, se han creado dos botones en index.html.
Ambos botones llaman a funciones con valores codificados. Esto es solo para demostrar que los parámetros se
pasan al contrato a través de web3 y los valores se devuelven en consecuencia.
Hay dos funciones que se llaman detrás de los botones anteriores. El método callMatchertrue() tiene un valor
codificado de 12, que se envía al contrato usando esto:
instanciadecontratosimple.Matcher.call(12)
El valor devuelto se imprime en la consola usando el siguiente código, que primero invoca la función Matcher y
luego asigna el valor a la variable txn para que se imprima más tarde en la consola:
+ txn);
instanciadecontratosimple.Matcher.call(1)
+ txn);
Machine
Este Translated
ejemplo by Google
demuestra cómo se puede usar la biblioteca web3 para interactuar con los contratos en
la cadena de bloques.
Machine Translated by Google
marcos de desarrollo
Hay varios marcos de desarrollo ahora disponibles para Ethereum. Como se vio en los ejemplos
discutidos anteriormente, puede llevar bastante tiempo implementar el contrato a través de los medios manua
Aquí es donde se pueden usar trufas y marcos similares, como embarcar, para hacer que el proceso sea
más simple y rápido. El marco más utilizado se llama trufa. En la siguiente sección, se le presentará el marco
de la trufa.
Trufa
Truffle es un entorno de desarrollo que facilita y simplifica la prueba y el despliegue de contratos de
Ethereum. Truffle proporciona compilación y vinculación de contratos junto con un marco de prueba
automatizado que utiliza Mocha y Chai. También facilita la implementación de los contratos en cualquier
cadena de bloques PrivateNet, pública o Test Net Ethereum. Además, se proporciona una canalización de
activos, lo que facilita el procesamiento de todos los archivos JavaScript, dejándolos listos para que los use u
Instalación
Antes de la instalación, se supone que el nodo está disponible, lo que se puede consultar como se
muestra aquí. Si el nodo no está disponible, primero se requiere la instalación del nodo para instalar truffle:
La instalación de truffle es muy sencilla y se puede realizar mediante el siguiente comando a través de npm:
Esto tomará un rato; una vez instalado, truffle se puede utilizar para mostrar ayuda y asegurarse de que se
ha instalado correctamente.
Machine Translated by Google
Ayuda de trufa
https://github.com/ConsenSys/truffle.git
Inicializando trufa
Truffle se puede inicializar ejecutando el siguiente comando. Primero, cree un directorio para el proyecto, por
ejemplo:
mkdir testdapp
Una vez que el comando tenga éxito, creará la estructura de directorios que se muestra aquí. Esto se puede
ver usando el comando de árbol en Linux:
drequinox@drequinox-OP7010:~/testdapp$ árbol
.
ÿÿÿ app
ÿ ÿÿÿ imágenes ÿ
ÿÿÿ index.html
ÿÿÿ javascripts
ÿ ÿÿ
app.jsÿÿÿ
ÿ hojas
ÿÿÿ contratos
de estilo ÿÿ
ÿÿÿ
ÿÿÿ ConvertLib.sol
ÿ ÿ Metain.
ÿÿÿ
aplicación.css
ÿÿÿ
Migraciones.sol ÿÿÿ
migraciones ÿ ÿÿÿ
1_initial_migration.js ÿ
2_deploy_contracts.js ÿÿÿ test ÿ
ÿÿÿ
metacoin.jsarchivos
truffle.js 7 directorios, 10
ÿÿÿ
ÿÿÿ
Este comando crea cuatro directorios principales, llamados aplicación, contratos, migraciones y prueba. Como se ve
en el ejemplo anterior, se han creado un total de 7 directorios y 10 archivos. En la siguiente sección, se presentará una
explicación de todos estos archivos y directorios.
Aplicación: este directorio contiene todos los archivos de la aplicación, incluidos archivos HTML, imágenes, hojas
de estilo y archivos JavaScript. Esta carpeta contiene más subdirectorios, imágenes, javascripts y hojas de estilo
que contienen archivos de aplicaciones relevantes.
Machine Translated
Contratos: by directorio
este Google contiene archivos de código fuente de contrato de solidez. Aquí es donde
truffle buscará archivos de contrato de solidez durante la migración.
Migración: este directorio tiene todos los scripts de implementación.
Prueba: como sugiere el nombre, este directorio contiene archivos de prueba relevantes para
aplicaciones y contratos.
Finalmente, la configuración de truffle se almacena en el archivo truffle.js , que se crea en la carpeta raíz del proyecto desde donde se
ejecutó truffle init . Cuando se ejecuta truffle init , se creará un proyecto de muestra llamado MetaCoin. Como ejemplo, primero se le
presentará cómo usar varios comandos en truffle para probar e implementar MetaCoin. Más adelante, se mostrarán más ejemplos sobre
cómo usar la trufa para proyectos personalizados.
Tanto las bibliotecas como los contratos se pueden compilar usando truffle. Se espera que el nombre del archivo de contrato sea el
mismo que el nombre del contrato dentro del archivo. Por ejemplo, del proyecto MetaCoin de muestra creado anteriormente, el archivo
llamado MetaCoin.sol en el directorio de contratos tiene el mismo nombre que el contrato MetaCoin en el archivo. Esto también se aplica a
los archivos de biblioteca y distingue entre mayúsculas y minúsculas.
MetaCoin.sol
contrato MetaCoin {
mapeo (dirección => uint) saldos;
Una vez que la compilación finalice con éxito, todos los objetos se escribirán en el directorio de compilación .
El directorio de salida se parece a lo que se muestra aquí:
ÿÿÿ
Migraciones.sol.js 1
directorio, 3 archivos
Como se muestra en el ejemplo anterior, el directorio de compilación se crea automáticamente con los contratos
Machine Translated
subdirectorio, by Googletres archivos JavaScript.
que contiene
Migración
Este es el proceso mediante el cual truffle implementa contratos en la cadena de bloques. Este proceso se basa
en los archivos disponibles en el directorio de migraciones .
~/testdapp$ cd migraciones/ ~/
testdapp/migrations$ ls -ltr -rw-rw-r-- 1
drequinox drequinox 124 12 de diciembre 12:57 2_deploy_contracts.js -rw-rw-r-- 1 drequinox drequinox
72 12 de diciembre 12:57 1_initial_migration.js ~/testdapp/migrations$ cat 2_deploy_contracts.js
module.exports = function(implementador) { deployment.deploy(ConvertLib); deployment.autolink();
deployment.deploy(MetaCoin); }; drequinox@drequinox-OP7010:~/testdapp/migrations$ cat
1_initial_migration.js module.exports = function(implementador) { deployment.implementación(Migraciones); };
Como se muestra en el resultado anterior, hay dos archivos que contienen el código que especifica qué
contratos se deben implementar.
Los nombres de archivo siguen una convención en la que deben tener un prefijo numérico. Este prefijo es necesario
para mantener un registro de todas las migraciones. El sufijo en el nombre del archivo puede ser cualquier nombre
descriptivo. Primero, es importante cambiar el archivo truffle.js para que apunte a la red apropiada. El archivo truffle.js
contiene información valiosa sobre la compilación y el rpc de la aplicación. En este caso, geth ya se está ejecutando y
simplemente se puede señalar para usar el cliente disponible:
módulo.exportaciones =
{ compilación:
{ "index.html": "index.html", "app.js":
[ "javascripts/app.js" ], "app.css": [ "hojas
de estilo/app.css" ], "imágenes/":
"imágenes/" }, rpc: { host: "localhost",
puerto: 8001
Machine
} Translated by Google
};
En el archivo anterior, se debe cambiar rpc para que apunte a la red adecuada. Una vez que se cambia rpc (en el
ejemplo, geth se ejecuta en el puerto 8001 en lugar del 8545 habitual), la migración de truffle se puede ejecutar con el
siguiente comando. También es importante que la minería se ejecute en el nodo Ethereum al que se ha apuntado rpc ; de
lo contrario, el contrato no será minado.
Podría mostrar un mensaje de error, como se muestra aquí. Si esto ocurre, significa que la cuenta que truffle está utilizando
para implementar un contrato en la cadena de bloques está bloqueada y debe desbloquearse:
en Object.InvalidResponse (/usr/lib/node_modules/truffle/node_modules/ether
budín/node_modules/web3/lib/web3/errors.js:35:16)
en /usr/lib/node_modules/truffle/node_modules/ether pudding/node_modules/
web3/lib/web3/requestmanager.js:86:36 en exportaciones.XMLHttpRequest.request.onreadystatechange
(/usr/lib/node_modules/truffle/node_modules/web3/lib/web3/httpprovider.js:114:13)
en exportaciones.XMLHttpRequest.dispatchEvent
(/usr/lib/node_modules/truffle/node_modules/xmlhttprequest/lib/XMLHttpRequest.js :591:25) en setState
La cuenta se puede desbloquear usando los siguientes comandos en la consola de JavaScript geth .
Primero, enumere las cuentas para ver todas las cuentas y luego seleccione la cuenta que debe desbloquearse.
Truffle asume la cuenta de coinbase de forma predeterminada. Seleccione la cuenta apropiada, de la siguiente manera:
> personal.listAccounts
["0x76f11b383dbc3becf8c5d9309219878caae265c3",
"0xcce6450413ac80f9ee8bd97ca02b92c065d77abc"]
LaMachine Translated
cuenta se by Google usando el siguiente comando:
puede desbloquear
> personal.unlockAccount("0x76f11b383dbc3becf8c5d9309219878caae265c3")
Desbloquear cuenta 0x76f11b383dbc3becf8c5d9309219878caae265c3
Frase de contraseña:
verdadero
Una vez que se desbloquea la cuenta, la migración se puede ejecutar nuevamente con el siguiente comando:
Mostrará un resultado similar al que se muestra aquí. Cabe señalar que se debe iniciar la minería para que finalice la
migración. La migración realizará varios pasos al encontrar los archivos disponibles en el directorio de migraciones . Como
se muestra en el ejemplo, 1_initial_migration.js y 2_deploy_contracts.js se han utilizado para proporcionar pasos y requisitos
de migración para truffle:
Una vez que el comando se completa con éxito, devolverá un símbolo del sistema que muestra el mensaje de ahorro
de artefactos.
La implementación se puede verificar usando algunos comandos que se muestran aquí a través de la consola de JavaScript geth :
> eth.getBalance("0x0be9c5de978fa927b93a5c4faab31312cea5704a") 0
> eth.getCode("0x0be9c5de978fa927b93a5c4faab31312cea5704a")
"0x606060405260e060020a60003504637bd703e8811461003457806390b98a1114610056578063f
8b2cb4f1461007d575b610000565b346100005761004460043561009f565b6040805191825251908
1900360200190f35b3461000057610069600435602435610119565b6040805191151582525190819
00360200190f35b34610000576100446004356101b1565b60408051918252519081900360200190f
35b6000732ba8a4a75a6b845bf482923cff29ecc98cd68d906396e4ee3d6100c4846101b1565b600
26000604051602001526040518360e060020a0281526004018083815260200182815260200192505
05060206040518083038186803b156100005760325a03f415610000575050604051519150505b919
050565b600160a060020a03331660009081526020819052604081205482901015610142575060006
101ab565b600160a060020a033381166000818152602081815260408083208054889003905593871
6808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa9
52ba7f163c4a11628f55a4df523b3ef929081900390910190a35060015b92915050565b600160a06
0020a0381166000908152602081905260409020545b91905056"
Machine
Tenga Translated
en cuenta quebyla
Google
dirección del contrato recién implementado se tomó de la salida del comando truffle migrate
que se mostró anteriormente. (MetaCoin: 0x0be9c5de978fa927b93a5c4faab31312cea5704a)
Interacción con el contrato: Truffle también proporciona una consola (interfaz de línea de comandos) que
permite la interacción con los contratos. Todos los contratos implementados ya están instanciados y listos
para usar en la consola. Esta es una interfaz basada en REPL que significa Leer, Evaluar e Imprimir Bucle. De
manera similar, en el cliente geth (a través de la conexión o la consola), REPL se usa mediante la exposición
de JSRE (entorno de tiempo de ejecución de JavaScript). Se puede acceder a la consola emitiendo el
siguiente comando:
Consola de trufa
Una vez que la consola está disponible, se pueden ejecutar varios métodos para consultar el contrato. Se
puede mostrar una lista de métodos escribiendo el siguiente comando y completando el tabulador:
Métodos expuestos
También se pueden llamar otros métodos para interactuar con el contrato; por ejemplo, para recuperar la
dirección del contrato, se puede llamar al siguiente método en la consola de truffle:
trufa (predeterminado)>
Machine Translated by Google
MetaCoin.implementada().getBalance.call(web3.eth.accounts[0])
{ [Cadena: '8750'] s: 1, e: 3, c: [ 8750 ] }
trufa (predeterminado)>
MetaCoin.deployed().sendCoin("0xcce6450413ac80f9ee8bd97ca02b92c 065d77abc",50,
{de:"0x76f11b383dbc3becf8c5d9309219878caae265c 3"})
'0xb8969149fcfb54ec9beac31af1fc86c386f9aa42cb13d2eb9bf946993198
6e0f'
Esto devolverá el hash de la transacción y, cuando tenga éxito, aumentará el saldo del objetivo en 50.
La cuenta objetivo es el argumento que se pasa en la función sendCoin .
Saldo de la cuenta de destino: Se puede recuperar usando el siguiente comando:
trufa (predeterminado)>
MetaCoin.deployed().getBalance.call(web3.eth.accounts[1])
{ [String: '1250'] s: 1, e: 3, c: [ 1250 ] trufa (predeterminado)> }
La prueba es una característica poderosa de la trufa y se puede invocar ejecutando el siguiente comando:
Esto leerá las pruebas del directorio de prueba y realizará las pruebas en consecuencia. El marco de prueba
utilizado por truffle se llama Mocha y usa un marco de aserción llamado Chai.
A continuación se muestra una prueba de muestra. Esta prueba solo ejecuta dos pruebas. En el archivo
original, hay tres pruebas, pero por simplicidad, aquí solo se usan dos. Además, la prueba puede fallar en la
mayoría de los sistemas; por lo tanto, se ha eliminado del archivo por simplicidad. Un caso de prueba fallido se d
Además, debe tenerse en cuenta que la minería debe estar en ejecución para que se ejecuten las pruebas.
Machine
Salida Translated
de prueba de by Google
trufa que muestra dos pruebas exitosas
Estas dos pruebas se basan en el archivo producido por truffle init. En el siguiente archivo, solo se muestra una
prueba para simplificar, cuando truffle crea tres pruebas para el proyecto MetaCoin predeterminado. Las pruebas se
pueden eliminar del archivo editando el archivo metacoin.js en un editor de texto:
Todos los archivos de prueba deben estar presentes en el directorio de pruebas en el directorio del proyecto . Las pruebas
se especifican dentro de sus bloques.
En el caso de prueba anterior, cuando el contrato es, debe tener un saldo de 10000 en él. Esta prueba básicamente
prueba si el saldo de 10000 está disponible después de implementar el contrato o no. Para explicar el concepto, se
puede simular el error, por ejemplo, si el archivo metacoin.js es cambiando la afirmación:
Esto inducirá una falla de aserción artificial porque en aserción, la cantidad esperada es 1000, mientras que,
cuando se implementa el contrato, tiene un saldo de 10,000. Cuando se ejecuta la prueba, lo siguiente
seMachine
muestraTranslated
una salidabyque
Google
indica que las pruebas han fallado. Este cambio se realiza solo con fines de demostración para
permitirle ver qué pruebas pueden fallar y, de ser así, qué tipo de resultados se producen.
El comando de prueba de truffle toma algunos parámetros opcionales, especialmente --verbose-rpc, que puede ser muy útil
para comprender la comunicación RPC entre el cliente de Ethereum y truffle.
A veces, durante la ejecución de la prueba, puede aparecer un mensaje de error como el que se muestra aquí:
Error: se excedió el tiempo de espera de 120000ms. Asegúrese de que se llame a la devolución de llamada done()
en esta prueba.
Este error ocurre cuando el nodo Ethereum no está minando o la implementación de los contratos demora más de 2
minutos. Esta es la razón por la que se produce el tiempo de espera; por lo tanto, es importante que las pruebas se ejecuten
a través de un nodo de minería si está en PrivateNet. También en Ropsten, a veces puede llevar más de 2 minutos.
Alternativamente, se puede usar ethereumjs-testrpc , que se usa comúnmente con truffle y proporciona un cliente Ethereum RPC
simulado rápido.
Construir
La trufa incorporada se usa para iniciar la interfaz para los navegadores. Funciona importando contratos
compilados y contratos implementados relevantes y configuraciones de clientes de Ethereum. Todos los objetos,
después de la construcción, se guardan en el directorio ./build . Todas las configuraciones de compilación están presentes
en el archivo truffle.js , que guía a truffle sobre qué compilar. De forma predeterminada, este archivo viene solo con las
configuraciones build: y rpc:.
Una vez que se complete la compilación, se creará el directorio de compilación si aún no existe y se creará una estructura de
árbol similar a la que se muestra aquí. Esto se crea en base al archivo truffle.js :
construir/
Machine
ÿÿÿ Translated by Google
app.css
ÿÿÿ app.js ÿÿÿ
contratos ÿ ÿÿÿ
ConvertLib.sol.js
ÿ ÿÿÿ MetaCoin.sol.js ÿ
ÿÿÿ
Migraciones.sol.js ÿÿÿ
imágenes ÿÿÿ index.html
Una vez que la compilación se complete con éxito, todos los archivos de interfaz estarán listos. Esto se puede ver en
el navegador usando el comando de servicio de truffle . El comando de servicio crea un servidor web para presentar el
contenido HTML. El comando se puede ejecutar como se muestra aquí.
Tenga en cuenta que el comando se ejecuta con el indicador -p para especificar el puerto TCP 7777. Esto es necesario
porque geth, en el ejemplo proporcionado anteriormente, se ejecuta con la opción --rpccorsdomain 'http://localhost:7777' .
Esto significa que solo se permite el contenido servido a través de TCP 7777. De manera predeterminada, el servicio
se ejecuta en el puerto 8080, que podría estar en uso por algún otro proceso en el sistema, ya que TCP 8080 es un
puerto muy común para aplicaciones web.
Servicio de trufa
Una vez que el servidor de trufas está en funcionamiento en un puerto apropiado, el contenido se puede
explorar usando un navegador y apuntando a la URL http://localhost:7777.
Machine Translated by Google
Otro ejemplo
Aquí se muestra un ejemplo, donde se crea un contrato simple en solidez con migraciones y pruebas.
El contrato es muy simple y solo realiza la adición:
2. Inicializar trufa:
$ trufa inicial
3. Eliminar archivos de directorios. Esto es necesario para eliminar los archivos de proyecto predeterminados
de MetaCoin creados por truffle.
Adición.sol:
{ uint8x;
función sumarx(uint8 y, uint8 z ) {
Machine Translated by} Google
x = y + z;
devolver x;
}}
Migraciones.sol: pragma
solidez ^0.4.2; contrato Migraciones {
{
if (mensaje.remitente == propietario) _;
} función Migraciones() {
propietario = mensaje.remitente; }
función setCompleted(uint
completado) restringido {
last_completed_migration = completado;
1_migración_inicial.js:
2_deploy_contratos.js:
module.exports = function(implementador)
{ deployment.deploy(Addition); deployment.autolink(); };
7. Una vez que todos los archivos estén en su lugar, compile todos los contratos usando truffle compile. Opcionalmente,
use el indicador -- compile-all para volver a compilar los contratos incluso si ya se han compilado.
Esto es necesario solo si es necesario volver a compilar los contratos:
8. Migre a la red de prueba de Ethereum usando truffle migrate. Esto desplegará el contrato en la red. Tenga en cuenta
que, en este punto, truffle.js deberá actualizarse nuevamente con el puerto 8001 para apuntar a la red privada:
Finalmente, las pruebas se pueden realizar usando el siguiente comando. Estas pruebas se basan en el archivo
Addition.js que se mostró anteriormente:
Este comando primero implementará el contrato en la red Ethereum (PrivateNet en este ejemplo).
Por ejemplo, para recuperar la dirección del contrato implementado, se puede llamar al siguiente método:
Para llamar a las funciones desde dentro del contrato, el método implementado se usa con funciones de contra
Aquí se muestra un ejemplo, en el que se llama a la función addx y se pasan dos parámetros:
truffle(default)> Addition.deployed().addx(100,100)
'0xae6f51782c1bcf04ec34dd54ee31da626dc138993ea813bc6c3c1fe0790b130e' truffle(default)>
'0xb9f8633fbd626466ee2c2f24952a5fca3134f4e7d08f39a4d26ac2689e22b653'
La idea detrás de este programa es proporcionar un servicio para legalizar un documento. Esto puede usarse
como prueba de que, en un momento determinado en el pasado, el reclamante ha tenido acceso a cierta inform
Esto puede ser muy útil para los documentos de patente. Por ejemplo, si a alguien se le ocurrió una idea,
puede crear un hash de ese documento y guardarlo en la cadena de bloques. Debido a la naturaleza
inmutable de blockchain, puede servir como prueba permanente de que cierta idea (documentos) existió
en un momento determinado. Hay muchas maneras en que esto se puede lograr, pero la idea clave es la
misma y funciona según el principio de que las funciones hash proporcionan un resumen del texto o documen
Esto se puede lograr de varias maneras; la idea clave es crear un hash del documento o cadena de texto
y guardarlo en la cadena de bloques. Una vez que el texto se ha convertido y guardado, se pueden
rechazar más solicitudes para guardar ese mismo texto comparando el hash del documento con el hash ya alm
Para este ejemplo, se usarán la solidez del navegador, la trufa y TestNet (que ya ejecuta el ID de red 786,
creado anteriormente). Primero, se escribirá el código para el contrato. Esto se puede hacer utilizando
cualquier editor de texto apropiado o entorno de desarrollo integrado. La solidez del navegador también se
puede utilizar, ya que también proporciona un entorno simulado para la prueba. Este ejemplo le brindará la
oportunidad de aprender cómo se puede desarrollar un proyecto de contrato a partir de una idea en un
código fuente de contrato de solidez y finalmente a la implementación.
contrato PatentIdea {
A continuación, se define un mapeo, que mapea byte32 a booleano, y esto es básicamente un hashmap
(diccionario) de bytes32 mapeado al valor booleano:
bool yaAlmacenado;
Esta es una variable declarada con el nombre ya almacenado , que es de tipo booleano y puede tener un valor
verdadero o falso. Esta variable se usa para contener el valor de retorno de la función SaveIdeaHash :
evento ideahashed(bool);
También se declara un evento, que se utilizará para capturar la falla o el éxito de la función hash
(SaveIdeaHash). Cuando se activa el evento, devolverá un valor booleano verdadero o falso.
Se declara una función llamada saveHash , que toma la variable hash de tipo bytes32 como parámetros y la guarda en el
mapa hash. Esto dará lugar a un cambio del estado del contrato. Tenga en cuenta que la accesibilidad de la función
se cambia a privada, ya que solo se requiere internamente en el contrato y no necesita exponerse públicamente:
hash[hash] = verdadero;
}
Se declara otra función, saveIdeaHash, y toma la idea variable de tipo cadena y devuelve un booleano (verdadero o
falso) según el resultado de la función:
Esta función tiene una variable declarada hashIdea, a la que se le asigna un valor después de llamar a la
función HashtheIdea descrita más adelante. Tenga en cuenta que esta función también puede devolver un valor si se g
noMachine Translated
se muestra by Google
aquí por simplicidad.
La siguiente función es la función beforeHashed , que se declara para tomar la variable denominada hash de tipo bytes32 y
devuelve un booleano (ya sea verdadero o falso) después de verificar el hash en el mapa hash.
Esto se declara nuevamente como una constante y la accesibilidad se establece en privado:
devolver hashes[hash]; } }
La siguiente función es isAlreadyHashed, que verifica si la idea ya está codificada. Esto toma la idea del parámetro de
entrada de tipo cadena, también declarada como una constante, lo que significa que no puede cambiar el estado del contrato
y devuelve verdadero o falso según el resultado de la ejecución de la función nombrada ya Hashed . Luego, esta función
llama a la función beforeHashed descrita anteriormente para verificar desde el mapa de hash si el hash ya está almacenado
allí. Esto significaría que la misma cadena (idea) ya ha sido codificada y almacenada (patentada):
Finalmente, aquí se muestra la función HashtheIdea , que toma la variable idea de tipo string y es de tipo constante , lo que
significa que no puede cambiar el estado del contrato. También se declara como privado ya que no hay necesidad de
exponer esta función públicamente porque se usa solo internamente en el contrato. Esta función devuelve el valor de tipo
bytes32:
Esta función llama a la función integrada de solidity sha3 y le pasa una cadena en una idea variable. Esta función
devuelve el hash sha3 de la cadena. La función sha3 es un alias para la función keccak256() disponible en solidity, que
calcula el hash Keccak-256 de la cadena que se le pasa. Tenga en cuenta que este no es el estándar SHA-3 de NIST; en
cambio, es Keccak-256, que es la propuesta original del NIST para la competencia estándar SHA-3. Más tarde, NIST lo
modificó ligeramente y lo estandarizó como el estándar SHA-3. La función hash estándar SHA-3 real devolverá un hash
diferente en comparación con Keccak-256 ( función sha3 de Ethereum ).
hash[hash] = verdadero;
}
yaAlmacenado=verdadero; idea
hash (falso); volver
yaAlmacenado;
}
saveHash(idea hash); idea hash
(verdadero);
}
devolver hashes[hash];
}
function HashtheIdea (cadena de ideas) constantes devoluciones privadas (bytes32) { return sha3 (idea); } }
Este código fuente se puede simular en la solidez del navegador para verificar que funciona correctamente.
Aquí se muestran algunos ejemplos.
Una vez digitado el código fuente del contrato y completada la verificación de sintaxis, en el panel
lateral derecho se mostrará una pantalla similar a la siguiente.
Este código se puede mejorar de muchas maneras. Por ejemplo, la fecha también se puede almacenar en
una asignación con el hash del documento y se puede devolver cuando se consulta. Se puede ampliar
agregando estructuras y más información relacionada con la patente, pero este ejemplo pretendía ser simple
y fácil de entender; por lo tanto, se evitó demasiada complejidad. Las mejoras adicionales a este código se
dejan como ejercicio.
Machine Translated by Google
Después de hacer clic en Crear, se expondrán dos funciones del contrato, como se muestra en la siguiente captura de
pantalla:
Si se vuelve a pasar la misma cadena a la función, no se guardará, como se muestra en la siguiente captura
de pantalla:
Una vez que el contrato está escrito y simulado en la solidez del navegador, el siguiente paso es usar truffle
para inicializar un nuevo proyecto e implementarlo y probarlo en PrivateNet (ID 786), ya creado en secciones
anteriores.
Una vez que se crea el proyecto de muestra, elimine los contratos de muestra:
En la carpeta de contratos , cree un archivo llamado PatentIdea.sol y coloque el código fuente en el archivo que se
muestra anteriormente.
rpc: {
En la carpeta ~/ideapatent/migrations , edite el archivo 2_deploy_contracts.js para que tenga el siguiente aspecto:
deployment.deploy(PatentIdea);
deployment.autolink(); };
Este archivo se modifica para especificar el nombre del contrato que se implementará. Tomar nota de
deployment.deploy(PatentIdea);.
Una vez que se implementa el contrato, se puede interactuar con él usando la consola de trufas.
Una vez que la consola está en funcionamiento, las funciones del contrato implementado se pueden llamar como se muestra aq
trufa (predeterminado)>
Este ejemplo demostró cómo se puede crear un contrato desde cero, simularlo e implementarlo en la red privada. Para
implementar esto en TestNet (Ropsten) o blockchain en vivo, se puede realizar un ejercicio similar. Simplemente señale el
RPC apropiado y use truffle migrate para implementar en la cadena de bloques de su elección.
Oráculos
Como se discutió en el Capítulo 6, Contratos inteligentes, los oráculos son fuentes de datos del mundo real en contratos intelig
Hay varios servicios disponibles para proporcionar Oracles para contratos inteligentes. Uno bastante destacado es
Oraclize, que está disponible en http://www.oraclize.it/. Esto es especialmente útil si
el Machine
contratoTranslated by Google
inteligente necesita, por ejemplo, precios en vivo de una fuente de terceros o cualquier otro dato de la
vida real, como las condiciones climáticas en una ciudad en particular. Hay muchos casos de uso en los que los
oráculos pueden proporcionar una fuente de datos confiable para contratos inteligentes para permitirles tomar
decisiones de acuerdo con eventos de la vida real. Oraclize facilita que los contratos inteligentes accedan a Internet
para obtener los datos necesarios.
Para utilizar Oraclize en Ethereum, se debe enviar una transacción al contrato de Oraclize junto con el pago
correspondiente y la consulta. Como resultado, Oraclize recuperará los resultados en función de la consulta
proporcionada en la transacción de solicitud y los enviará a la dirección del contrato. Una vez que la transacción
se devuelve al contrato, se llamará al método de devolución de llamada o a la función de respaldo.
A nivel práctico en solidez, primero se necesita importar la librería de Oraclize y luego se pueden utilizar todos los
métodos que se han heredado de ella. Actualmente, oraclize está disponible para usarse solo en PrivateNet
(Ropsten) y Live Main Net Ethereum blockchain.
La estructura de esqueleto de un contrato de solidez usando oraclize se parece a la que se muestra aquí. Tenga en
cuenta que la importación solo funciona en el entorno de desarrollo proporcionado en la Web por oraclize; por lo
general, este archivo debe importarse manualmente:
oraclize_query("URL", "api.somewebsite.net/price?stock=XYZ");
Oraclize también puede hacer uso del notario de TLS para garantizar que la alimentación sea segura y demostrablemente
honesta.
Como se discutió en el Capítulo 1, Blockchain 101, para beneficiarse completamente de las plataformas descentralizadas,
es deseable que descentralice la capa de almacenamiento y comunicación. Tradicionalmente, el contenido web se sirve
a través de servidores centralizados, pero esa parte también se puede descentralizar mediante sistemas de archivos
distribuidos.
El contenido HTML que se muestra en los ejemplos anteriores se puede almacenar en una red IPFS distribuida y
descentralizada para lograr una descentralización mejorada.
Instalación de IPFS
$ rizo https://dist.ipfs.io/go-ipfs/v0.4.4/go-
ipfs_v0.4.4_linux-amd64.tar.gz -O
2. Descomprima el archivo gz :
3. Mueva el archivo ipfs a una carpeta adecuada para que esté disponible en la ruta:
$ mv go-ipfs/ipfs/usr/local/bin/ipfs
4. Inicialice el nodo IPFS:
/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/léame
5. Ingrese el siguiente comando para asegurarse de que IPFS se haya instalado correctamente:
Machine Translated by Google
Nota
Tenga en cuenta que la URL apunta al sistema de archivos IPFS.
9. Finalmente, para que los cambios sean permanentes, se puede utilizar el siguiente comando:
El ejemplo anterior demostró cómo se puede usar IPFS para proporcionar almacenamiento descentralizado para la parte web
(interfaz de usuario) de los contratos inteligentes.
IPFS se puede usar con blockchains de otra manera. Como el almacenamiento es un gran problema para las cadenas de
bloques, es deseable que pueda guardar grandes cantidades de datos en otro lugar y colocar los enlaces a esos datos en la
transacción de la cadena de bloques. De esta manera, no habrá necesidad de almacenar grandes cantidades de datos en la cadena
de bloques y, como resultado, inflarlos. IPFS se puede usar para lograr exactamente eso colocando los datos en IPFS y luego
almacenando los enlaces de IPFS en transacciones de blockchain para hacer referencia a los datos almacenados.
El propio protocolo de enjambre de Ethereum también está bajo un fuerte desarrollo y funciona con principios similares.
Sin embargo, Swarm está actualmente en desarrollo e IPFS está más desarrollado comparativamente y parece una mejor opción
en este momento. IPFS funciona muy bien y puede convertirse en la plataforma elegida para el almacenamiento descentralizado
de implementaciones. Swarm permite a los usuarios ejecutar un cliente ligero almacenando todos los datos de la cadena de
bloques en él. Esto está disponible con la versión actual de geth, y una guía detallada está disponible en https://swarm-
guide.readthedocs.io/en/latest/introduction.html. Como se encuentra en un proceso de desarrollo intenso, solo se ha dado una
pequeña introducción a esta tecnología, ya que es probable que evolucione muy rápidamente.
Resumen
Este capítulo proporcionó ejemplos prácticos detallados y detallados sobre cómo configurar un
entorno de desarrollo de Ethereum y crear contratos inteligentes. Este capítulo comenzó con una
introducción a varios métodos que se pueden usar para crear redes privadas de Ethereum con fines
de prueba y desarrollo. Después de esto, se presentó una introducción al lenguaje Solidity para permitirle
comprender los fundamentos y la sintaxis del lenguaje. Se discutieron en detalle técnicas prácticas de
implementación utilizando tecnologías y herramientas como geth y web3. Además, se presentaron ejemplos
detallados paso a paso de desarrollo e implementación de contratos inteligentes. Además, se analizaron
los marcos de desarrollo con ejemplos prácticos para que pueda experimentar el ciclo de vida de desarrollo
de contratos inteligentes de la cadena de bloques de Ethereum. Este es un capítulo largo y al seguir los
ejercicios de cerca, obtendrá una comprensión profunda del desarrollo, las pruebas y la implementación
de contratos en Ethereum. Finalmente, se discutieron varios conceptos y herramientas relacionados con
el almacenamiento descentralizado, la comunicación descentralizada y los oráculos. Dado que Ethereum
y las tecnologías y marcos relacionados están en constante y rápido desarrollo, se prevé que herramientas
y técnicas más avanzadas evolucionarán con el tiempo; sin embargo, es probable que los fundamentos
discutidos en este capítulo sigan siendo los mismos. Además, no es posible discutir todas y cada una de
las herramientas y marcos disponibles para Ethereum en este capítulo, pero todas las herramientas y
técnicas discutidas son de uso general y deberían proporcionar una base sólida para que haga una
transición a un nivel más avanzado. Hay algunos temas que no se han tratado a propósito en este capítulo,
como la seguridad de los contratos inteligentes, la verificación formal de los contratos inteligentes, la
cadena de bloques como servicio en la nube y los casos de uso específicos de los contratos inteligentes
para diversas industrias. Todos estos conceptos serán discutidos en capítulos posteriores. Espero que hay
Machine Translated by Google
Capítulo 9. Hiperlibro
Hyperledger no es una cadena de bloques, pero es un proyecto iniciado por la fundación Linux en diciembre de
2015 para avanzar en la tecnología de cadenas de bloques. Este proyecto es un esfuerzo de colaboración de sus
miembros para construir un marco de libro mayor distribuido de código abierto que se puede usar para desarrollar
e implementar aplicaciones y sistemas de cadena de bloques entre industrias. El enfoque clave es construir y
ejecutar plataformas que admitan transacciones comerciales globales. El proyecto también se enfoca en mejorar
la confiabilidad y el rendimiento de los sistemas blockchain.
Los proyectos bajo Hyperledger pasan por varias etapas de desarrollo, desde la propuesta hasta la
incubación y la graduación a un estado activo. Los proyectos también pueden estar en desuso o en estado de
fin de vida donde ya no se desarrollan activamente. Para que un proyecto pueda pasar a la etapa de incubación,
debe tener una base de código completamente funcional junto con una comunidad activa de desarrolladores.
Machine Translated by Google
Proyectos
Actualmente, hay seis proyectos bajo el paraguas de Hyperledger: Fabric, Iroha, Sawtooth Lake,
blockchain explorer, Fabric chaintool y Fabric SDK Py. Corda es la incorporación más reciente que se espera
que se agregue al proyecto Hyperledger. El proyecto Hyperledger actualmente tiene 100 miembros y es muy
activo con más de 120 colaboradores, con reuniones periódicas y charlas que se organizan en todo el mundo.
A continuación se presenta una breve introducción de todos estos proyectos, después de la cual brindaremos
más detalles sobre el diseño, la arquitectura y la implementación de Fabric y Sawtooth Lake.
Machine Translated by Google
Tela
Fabric es un proyecto de cadena de bloques propuesto por IBM y DAH (Digital Asset Holdings). Esto
tiene como objetivo proporcionar una base para el desarrollo de soluciones de cadena de bloques y se
basa en una arquitectura conectable donde varios componentes, como el algoritmo de consenso, se
pueden conectar al sistema según sea necesario. Está disponible en https://github.com/hyperledger/fabric
Machine Translated by Google
Lago de dientes de sierra
Sawtooth Lake es un proyecto de cadena de bloques propuesto por Intel en abril de 2016 con algunas
innovaciones clave centradas en el desacoplamiento de los libros mayores de las transacciones, el uso
flexible en múltiples áreas comerciales que utilizan familias de transacciones y el consenso conectable. El
desacoplamiento se puede explicar de manera más precisa diciendo que las transacciones se desacoplan
de la capa de consenso haciendo uso de un nuevo concepto llamado familias de transacciones. En lugar
de que las transacciones se acoplen individualmente con el libro mayor, se utilizan familias de
transacciones, lo que permite una mayor flexibilidad, una semántica rica y un diseño sin restricciones de
la lógica empresarial. Las transacciones siguen los patrones y estructuras definidos en las familias de
transacciones. Intel también ha presentado un nuevo algoritmo de consenso abreviado como PoET, prueba
de tiempo transcurrido, que utiliza el entorno de ejecución confiable (TEE) de la arquitectura Intel Software
Guard Extensions (Intel's SGX) para proporcionar un proceso de elección de líder seguro y aleatorio.
También admite configuraciones con permiso y sin permiso. Este proyecto está disponible en https://github.co
Machine Translated by Google
Iroha
Iroha fue propuesto por Soramitsu, Hitachi, NTT Data y Colu en septiembre de 2016. Iroha tiene como
objetivo crear una biblioteca de componentes reutilizables que los usuarios puedan elegir para ejecutar en
sus registros distribuidos basados en Hyperledger. El principal objetivo de Iroha es complementar otros
proyectos de Hyperledger proporcionando componentes reutilizables escritos en C++ con énfasis en el
desarrollo móvil. Este proyecto también ha propuesto un algoritmo de consenso novedoso llamado
Sumeragi, que es un algoritmo de consenso tolerante a fallas bizantino basado en cadena. Iroha está
disponible en https://github.com/hyperledger/iroha. Iroha ha propuesto y está trabajando en varias
bibliotecas, que incluyen, entre otras, una biblioteca de firmas digitales (ed25519), una biblioteca hash
SHA-3, una biblioteca de serialización de transacciones, una biblioteca P2P, una biblioteca de servidor API, un
Machine Translated by Google
Explorador de cadenas de bloques
Este proyecto tiene como objetivo construir un explorador de cadenas de bloques para Hyperledger que se pueda usar
para ver y consultar las transacciones, los bloques y los datos asociados de la cadena de bloques. También proporciona
información de la red y la capacidad de interactuar con el código de cadena.
Actualmente hay otros dos proyectos que están en incubación: Fabric chaintool y Fabric SDK Py.
Estos proyectos están destinados a respaldar Hyperledger Fabric.
Machine Translated by Google
Herramienta de cadena de tela
El compilador de código de cadena de Hyperledger se está desarrollando para admitir el desarrollo de código de
cadena de Fabric. El objetivo es construir una herramienta que lea en una estructura de búfer de protocolo de
Google de alto nivel y produzca un código de cadena. Además, empaqueta el código de cadena para que pueda
implementarse directamente. Se prevé que esta herramienta ayude a los desarrolladores en varias etapas de
desarrollo, como la compilación, las pruebas, el empaquetado y la implementación. Está disponible en https://github.c
Machine Translated by Google
Tejido SDK Py
El objetivo de este proyecto es construir una biblioteca SDK basada en Python que se pueda usar para
interactuar con la cadena de bloques (Fabric). Está disponible en https://github.com/hyperledger/fabric-sdk-py.
Machine Translated by Google
Corda
Corda es el último proyecto que R3 ha aportado al proyecto Hyperledger. Fue de código abierto el 30
de noviembre de 2016. Corda está fuertemente orientado hacia la industria de servicios financieros y se
ha desarrollado en colaboración con los principales bancos y organizaciones de la industria financiera.
Al momento de escribir, aún no está en incubación bajo el proyecto Hyperledger. Técnicamente, Corda
no es una cadena de bloques, pero tiene características clave similares a las de una cadena de bloques,
como el consenso, la validez, la singularidad, la inmutabilidad y la autenticación.
En las siguientes secciones de este capítulo, Fabric (IBM), Sawtooth Lake (Intel) y Corda (R3) se
analizarán con más detalle.
Machine Translated by Google
Hyperledger como protocolo
Hyperledger tiene como objetivo construir una nueva plataforma blockchain impulsada por casos de uso de la
industria. Dado que la comunidad ha realizado una serie de contribuciones al proyecto Hyperledger, la plataforma
de cadena de bloques Hyperledger está evolucionando hacia un protocolo para transacciones comerciales. Hyperledger
también se está convirtiendo en una especificación que se puede utilizar como referencia para crear plataformas de
cadenas de bloques en comparación con las soluciones de cadenas de bloques anteriores que abordan solo un tipo esp
En la siguiente sección, se presenta una arquitectura de referencia que ha sido publicada por el proyecto
Hyperledger. Dado que este trabajo se encuentra en un desarrollo continuo y riguroso, se esperan algunos cambios,
pero se espera que los servicios básicos permanezcan sin cambios.
Machine Translated by Google
Arquitectura de referencia
Hyperledger ha publicado un libro blanco con una arquitectura de referencia que puede servir como guía para
construir registros distribuidos autorizados. La arquitectura de referencia consta de dos componentes
principales: los servicios de Hyperledger y las API, los SDK y la CLI de Hyperledger. Los servicios de Hyperledger
brindan varios servicios, como servicios de identidad, servicios de políticas, servicios de cadena de bloques y serv
Por otro lado, las API, los SDK y las CLI de Hyperledger proporcionan una interfaz para los servicios de cadena
de bloques a través de interfaces de programación de aplicaciones, kits de desarrollo de software o interfaces
de línea de comandos adecuados. Además, un flujo de eventos, que es básicamente un canal gRPC, se ejecuta
en todos los servicios. Puede recibir y enviar eventos. Los eventos son predefinidos o personalizados. La
validación de pares o código de cadena puede emitir eventos a los que la aplicación externa puede responder o esc
Arquitectura de Hyperledger, tal como se propone en el último borrador V2.0.0 del libro blanco de Hyperledger.
(Fuente: libro blanco de Hyperledger)
Machine Translated by Google
Requisitos
Hay ciertos requisitos de un servicio de blockchain. La arquitectura de referencia está impulsada por las
necesidades y requerimientos planteados por los participantes del proyecto Hyperledger y tras estudiar los
casos de uso de la industria. Hay varias categorías de requisitos que se han deducido del estudio de casos de
uso industrial y se analizan en las siguientes secciones.
Enfoque modular
El requisito principal de Hyperledger es una estructura modular. Se espera que, como tejido intersectorial
(blockchain), se utilice en muchos escenarios empresariales. Como tal, las funciones relacionadas con el
almacenamiento, la política, el código de cadena, el control de acceso, el consenso y muchos otros servicios de
cadena de bloques deberían poder conectarse. Los módulos deben ser plug and play y los usuarios deben poder
eliminar y agregar fácilmente un módulo diferente que cumpla con los requisitos del negocio.
Por ejemplo, si una cadena de bloques comercial debe ejecutarse solo entre partes que ya son de confianza
y realiza operaciones comerciales muy básicas, entonces quizás no sea necesario tener un soporte
criptográfico avanzado para la confidencialidad y la privacidad y, por lo tanto, los usuarios deberían poder
eliminar esa funcionalidad ( módulo) o reemplazarlo con un módulo más apropiado que se adapte a sus necesidades
Del mismo modo, si los usuarios necesitan ejecutar una cadena de bloques entre industrias, la confidencialidad
y la privacidad pueden ser de suma importancia. En este caso, los usuarios deberían poder conectar un
mecanismo (módulo) criptográfico y de control de acceso avanzado a la cadena de bloques (tejido).
Privacidad y confidencialidad
La privacidad y confidencialidad de las transacciones y contratos es de suma importancia en una cadena
de bloques empresarial. Como tal, la visión de Hyperledger es proporcionar una amplia gama de protocolos y
algoritmos criptográficos y se espera que los usuarios puedan elegir los módulos apropiados de acuerdo con los
requisitos de su negocio. La estructura debe poder manejar algoritmos criptográficos complejos sin comprometer
el rendimiento.
Identidad
Para brindar servicios de privacidad y confidencialidad, también se requiere un modelo PKI flexible que
pueda usarse para manejar la funcionalidad de control de acceso. También se espera que la fuerza y el tipo
de mecanismos criptográficos varíen según las necesidades y requisitos de los usuarios. En ciertos escenarios,
puede ser necesario que un usuario oculte su identidad y, como tal, se espera que Hyperledger proporcione esta
funcionalidad.
Auditabilidad
La auditabilidad es otro requisito de Hyperledger Fabric. Se espera que se mantenga un registro de auditoría
inmutable de todas las identidades, operaciones relacionadas y cualquier cambio.
Machine Translated by Google
interoperabilidad
Actualmente hay muchas soluciones de cadenas de bloques disponibles, pero no pueden comunicarse entre
sí y esto puede ser un factor limitante en el crecimiento de un ecosistema empresarial global basado en
cadenas de bloques. Se prevé que muchas redes de cadenas de bloques operarán en el mundo de los
negocios para necesidades específicas, pero es importante que puedan comunicarse entre sí. Debería haber
un conjunto común de estándares que todas las cadenas de bloques puedan seguir para permitir la comunicac
Se espera que se desarrolle un protocolo que permita el intercambio de información entre muchos Fabrics.
Portabilidad
El requisito de portabilidad se refiere a la capacidad de ejecutarse en múltiples plataformas y
entornos sin necesidad de cambiar nada a nivel de código. Se prevé que Hyperledger sea portátil, no
solo a nivel de infraestructura, sino también a nivel de código, bibliotecas y API para que pueda admitir
un desarrollo uniforme en varias implementaciones de Hyperledger.
Machine Translated by Google
Tela
Para comprender varios proyectos en incubación en el proyecto Hyperledger, es importante comprender
primero los fundamentos de Hyperledger. Algunas terminologías que son específicas de Hyperledger
necesitan aclaración antes de que los lectores conozcan material más detallado. Primero está el concepto de
Fabric.
Fabric se puede definir como una colección de componentes que proporcionan una capa de base que se
puede utilizar para ofrecer una red de cadena de bloques. Hay varios tipos y capacidades de una red de
estructura, pero todas las estructuras comparten atributos comunes, como la inmutabilidad y están
impulsadas por el consenso. Algunas estructuras pueden proporcionar un enfoque modular para construir
redes de cadenas de bloques. En este caso, la red blockchain puede tener múltiples módulos enchufables
para realizar varias funciones en la red. Por ejemplo, los algoritmos de consenso pueden ser un módulo
conectable en una red de cadena de bloques donde, según los requisitos de la red, se puede elegir un
algoritmo de consenso adecuado y conectarlo a la red. Los módulos pueden basarse en alguna especificación
particular de la estructura y pueden incluir API, control de acceso y varios otros componentes. Los tejidos
también se pueden diseñar para que sean privados o públicos y pueden permitir la creación de múltiples
redes comerciales. Como ejemplo, bitcoin es una aplicación que se ejecuta sobre su estructura (red de cadena
de bloques). Como se discutió anteriormente, la cadena de bloques puede tener o no permiso y lo mismo se
aplica a la estructura en la terminología de Hyperledger.
Fabric es también el nombre que recibe la contribución de código realizada por IBM a la fundación
Hyperledger y se denomina formalmente Hyperledger Fabric. IBM también ofrece blockchain como
servicio (IBM Blockchain) a través de su servicio en la nube Bluemix.
Machine Translated by Google
Tela de hiperlibro
Fabric es la contribución original de IBM al proyecto Hyperledger. El objetivo de esta contribución
es permitir un enfoque modular, abierto y flexible para construir redes de cadenas de bloques.
Varias funciones en el tejido son conectables y también permite el uso de cualquier lenguaje para
desarrollar contratos inteligentes. Esto es posible porque se basa en tecnología de contenedores que
puede albergar cualquier idioma. Chaincode (contrato inteligente) está aislado en un contenedor seguro
que incluye un sistema operativo seguro, un lenguaje de código de cadena, un entorno de tiempo de
ejecución y SDK para Go, Java y Node.js. También se pueden admitir otros idiomas si es necesario. Los
contratos inteligentes se denominan código de cadena en Fabric. Esta es una característica muy poderosa
en comparación con los lenguajes específicos de dominio en Ethereum, o el lenguaje de secuencias de
comandos muy limitado en bitcoin. Es una red autorizada que tiene como objetivo abordar cuestiones
como la escalabilidad, la privacidad y la confidencialidad. La idea clave detrás de esto es la tecnología
modular, que permitiría flexibilidad en el diseño y la implementación. Esto puede resultar en lograr
escalabilidad, privacidad y otros atributos deseados. Las transacciones en fabric son privadas,
confidenciales y anónimas para los usuarios generales, pero aún así pueden ser rastreadas y vinculadas a
los usuarios por auditores autorizados. Como red autorizada, todos los participantes deben estar
registrados en los servicios de membresía para poder acceder a la red blockchain. Este libro mayor también p
Machine Translated by Google
Arquitectura de tela
Fabric está lógicamente organizado en tres categorías principales según el tipo de servicio prestado.
Estos incluyen servicios de membresía, servicios de blockchain y servicios de código de cadena. En la siguiente
sección, todas estas categorías y componentes asociados se discuten en detalle. La versión estable actual de
Hyperledger Fabric es v0.6, sin embargo, la última versión v1.0 está disponible pero aún no es estable. En la versión
1.0, se han realizado muchos cambios en la arquitectura, y en secciones posteriores de este capítulo también se
discutirán algunos cambios que se han realizado en la versión 1.0.
Servicios de membresía
Estos servicios se utilizan para proporcionar capacidad de control de acceso para los usuarios de la red de estructura.
La siguiente lista muestra las funciones que realizan los servicios de membresía:
2. Registro de usuario.
3. Asigne los permisos apropiados a los usuarios según sus roles.
Los servicios de membresía hacen uso de la Infraestructura de clave pública (PKI) para respaldar las operaciones
de autorización y administración de identidades. Los servicios de membresía se componen de varios componentes:
Autoridad de registro (RA): Servicio que autentica a los usuarios y evalúa la identidad de los participantes del
tejido para la emisión de certificados.
Autoridad certificadora de inscripción: Los certificados de inscripción (Ecerts) son certificados a largo plazo
emitidos por ECA a los participantes registrados con el fin de proporcionar identificación a las entidades que
participan en la red.
Autoridad de certificación de transacciones: para enviar transacciones en las redes, los participantes deben
tener un certificado de transacción. TCA es responsable de emitir certificados de transacción a los titulares de
certificados de inscripción y se deriva de Ecerts.
Autoridad de certificación TLS: para asegurar la comunicación a nivel de red entre nodos en Fabric, se utilizan
certificados TLS. La autoridad de certificación TLS emite certificados TLS para garantizar la seguridad de los
mensajes que se transmiten entre varios sistemas en la red blockchain.
Los servicios de cadena de bloques son el núcleo de Hyperledger Fabric. Los componentes dentro de esta categoría
son los siguientes.
administrador de consenso
El administrador de consenso es responsable de proporcionar la interfaz para el algoritmo de consenso. Este sirve
como un adaptador que recibe la transacción de otras entidades de Hyperledger y las ejecuta bajo criterios según el
tipo de algoritmo elegido. El consenso es conectable y actualmente hay tres tipos de algoritmos de consenso disponibles
en Fabric, a saber, el protocolo PBFT por lotes, SIEVE
MachineyTranslated
algoritmo NOOPS. by Google
Blockchain y el estado mundial son dos elementos principales del libro mayor distribuido. Blockchain es simplemente una lista
enlazada de bloques (como se presentó en capítulos anteriores) y el libro mayor mundial es una base de datos clave-valor.
Los contratos inteligentes utilizan esta base de datos para almacenar estados relevantes durante la ejecución de las transacciones.
La cadena de bloques consiste en bloques que contienen transacciones. Estas transacciones contienen código de cadena, que
ejecuta transacciones que pueden resultar en la actualización del estado mundial. Cada nodo guarda el estado mundial en el disco en
RocksDB. El siguiente diagrama muestra un bloque típico en Hyperledger Fabric con los campos relevantes:
estructura de bloque
Hash anterior: este es el hash del bloque anterior, que se calcula después de serializar el mensaje del bloque y luego crear el
resumen del mensaje aplicando el algoritmo SHA3 SHAKE256.
Metadatos de consenso: Este es un campo opcional que puede ser utilizado por el protocolo de consenso para proporcionar
información relevante sobre el consenso.
Datos no hash: estos son algunos metadatos que se almacenan con el bloque pero no se codifican. Esta característica
hace posible tener diferentes datos en diferentes pares. También brinda la capacidad de descartar datos sin ningún impacto
en la cadena de bloques.
El protocolo P2P en Hyperledger Fabric se crea con Google RPC (gRPC). Utiliza buffers de protocolo para definir la estructura de
los mensajes.
Machine
Los Translated
mensajes by Google
se pasan entre los nodos para realizar varias funciones. Hay cuatro tipos principales de mensajes en
Hyperledger Fabric: descubrimiento, transacción, sincronización y consenso.
Los mensajes de descubrimiento se intercambian entre los nodos cuando se inician para descubrir otros pares en la red.
Los mensajes de transacción se pueden dividir en dos tipos: transacciones de implementación y transacciones
de invocación. El primero se usa para implementar un nuevo código de cadena en el libro mayor, y el segundo se usa
para llamar a funciones desde el contrato inteligente. Las transacciones pueden ser transacciones de código de cadena
públicas, confidenciales y confidenciales. Las transacciones públicas están abiertas y disponibles para todos los
participantes. Las transacciones confidenciales solo pueden ser consultadas por los propietarios y participantes de la
transacción. Las transacciones confidenciales de código de cadena tienen un código de cadena cifrado y solo se pueden de
Los nodos de validación ejecutan el consenso, validan las transacciones y mantienen la cadena de bloques. Los nodos no
validadores, por otro lado, proporcionan verificación de transacciones, servidor de flujo y servicios REST. También actúan
como un proxy entre los transactores y los nodos de validación. Los pares utilizan los mensajes de sincronización para
mantener la cadena de bloques actualizada y sincronizada con otros nodos. Los mensajes de consenso se utilizan en la
gestión de consenso y en la transmisión de cargas útiles a pares de validación. Estos son generados internamente por el
marco de consenso.
Para guardar el estado del libro mayor, se utiliza RocksDB y se almacena en cada par. RocksDB es una base de datos
de alto rendimiento disponible en http://rocksdb.org/.
Estos servicios permiten la creación de contenedores seguros que se utilizan para ejecutar el código de cadena.
Los componentes de esta categoría son los siguientes:
Eventos
Los eventos en la cadena de bloques pueden ser activados por nodos de validación y contratos inteligentes.
Las aplicaciones externas pueden escuchar estos eventos y reaccionar ante ellos si es necesario a través de
adaptadores de eventos. Son similares al concepto de eventos introducido en solidez en el último capítulo.
API y CLI
Una interfaz de programación de aplicaciones proporciona una interfaz en el tejido al exponer varias API REST. Además,
también están disponibles las interfaces de línea de comandos que proporcionan un subconjunto de API REST y permiten
pruebas rápidas e interacción limitada con la cadena de bloques.
Machine Translated by Google
Componentes de la tela
Hay varios componentes que pueden formar parte de la cadena de bloques. Estos componentes incluyen, entre
otros, el libro mayor, el código de cadena, el mecanismo de consenso, el control de acceso, los eventos, la supervisión
y gestión del sistema, las billeteras y los componentes de integración del sistema.
Pares o nodos
Hay dos tipos principales de pares que se pueden ejecutar en una red de estructura: con validación y sin validación.
En pocas palabras, un nodo de validación ejecuta el consenso, crea y valida una transacción y contribuye a
actualizar el libro mayor y mantener el código de cadena.
Un par que no valida no ejecuta transacciones y solo construye transacciones que luego se reenvían a los nodos
de validación.
Ambos nodos administran y mantienen los certificados de usuario emitidos por los servicios de membresía.
Aplicaciones en blockchain
Una aplicación típica en Fabric se compone simplemente de una interfaz de usuario, generalmente escrita
en JavaScript/HTML, que interactúa con el código de cadena de back-end (contrato inteligente) almacenado en el libro
mayor a través de una capa API.
Machine Translated by Google
Hyperledger proporciona varias API e interfaces de línea de comandos para permitir la interacción con el libro mayor.
Estas API incluyen interfaces para identidad, transacciones, código de cadena, libro mayor, red, almacenamiento y eventos.
Chaincode generalmente se escribe en Golang o Java. Chaincode puede ser público, confidencial o de acceso
controlado. Estos códigos sirven como un contrato inteligente con el que los usuarios pueden interactuar a través de las
API. Los usuarios pueden llamar a funciones en el código de cadena que resultan en un cambio de estado y, en consecuencia,
actualizan el libro mayor. También hay funciones que solo se usan para consultar el libro mayor y no dan como resultado ning
La implementación de Chaincode se realiza creando primero la interfaz shim de chaincode en el código. Puede estar en
código Java o Golang. Se requieren las siguientes cuatro funciones para implementar el código de cadena:
Init (): esta función se invoca cuando se implementa chaincode en el libro mayor. Esto inicializa el código de cadena
y da como resultado un cambio de estado, que en consecuencia actualiza el libro mayor.
Invoke(): esta función se utiliza cuando se ejecutan contratos. Toma un nombre de función como
Machine Translated
parámetros bycon
junto Google
una matriz de argumentos. Esta función da como resultado un cambio de estado y escribe en el libro
mayor.
Consulta (): esta función se utiliza para consultar el estado actual de un código de cadena implementado. Esta función no
realiza ningún cambio en el libro mayor.
Main (): esta función se ejecuta cuando un compañero implementa su propia copia del código de cadena. El código
de cadena se registra con el compañero usando esta función.
modelo de aplicación
Cualquier aplicación de blockchain para Hyperledger Fabric sigue la arquitectura MVC-B. Esto se basa en el popular patrón de
diseño MVC. Los componentes de este modelo son Model, View, Control y Blockchain:
Ver lógica: Esto se refiere a la interfaz de usuario. Puede ser un escritorio, una aplicación web o una interfaz móvil.
Lógica de control: este es el orquestador entre la interfaz de usuario, el modelo de datos y las API.
Modelo de datos: este modelo se utiliza para administrar los datos fuera de la cadena.
Lógica de cadena de bloques: se utiliza para administrar la cadena de bloques a través del controlador y el modelo de datos
Machine Translated
a través by Google
de transacciones.
Debido al hecho de que la versión actual v0.6 de Hyperledger está bajo una fuerte refactorización para
compilar la V1.0, no se han introducido ejercicios prácticos en esta sección.
Se espera que para cuando se publique este libro, la información sobre la configuración práctica de
Hyperledger Fabric ya estará desactualizada. Como tal, se alienta a los lectores a estar atentos a las
actualizaciones en https://hyperledgerfabric.readthedocs.io/en/latest/.
Además, el servicio IBM Bluemix ofrece aplicaciones de muestra para blockchain en su oferta de blockchain
como servicio. Está disponible en https://console.ng.bluemix.net/docs/services/blockchain/
ibmblockchain_tutorials.html. Este servicio permite a los usuarios crear sus propias redes de cadena de
bloques en un entorno fácil de usar.
Machine Translated by Google
Lago de dientes de sierra
Sawtooth Lake puede ejecutarse tanto en modo autorizado como no autorizado. Se trata de un libro mayor
distribuido que propone dos conceptos novedosos: el primero es la introducción de un nuevo algoritmo
de consenso llamado Prueba de tiempo transcurrido (PoET); y el segundo es la idea de familias de
transacciones. En el siguiente apartado se hace una breve descripción de estas novedosas propuestas.
Machine Translated by Google
Poeta
PoET es un novedoso algoritmo de consenso que permite seleccionar aleatoriamente un nodo en
función del tiempo que el nodo ha esperado antes de proponer un bloque. Esto contrasta con otros
algoritmos de prueba de trabajo basados en elecciones de líderes y loterías, donde se utiliza una
enorme cantidad de electricidad y recursos informáticos para ser elegido como proponente de bloque,
por ejemplo en el caso de bitcoin. PoET es un tipo de algoritmo de Prueba de trabajo pero, en lugar de
gastar recursos informáticos, utiliza un modelo informático confiable para proporcionar un mecanismo
para cumplir con los requisitos de Prueba de trabajo. PoET utiliza la arquitectura SGX de Intel para
proporcionar un entorno de ejecución confiable para garantizar la aleatoriedad y la seguridad
criptográfica del proceso. Cabe señalar que la implementación actual de Sawtooth Lake no requiere
hardware real basado en SGX TEE, ya que se simula solo con fines experimentales y, como tal, no debe u
Machine Translated by Google
Familias de transacciones
Un paradigma de contrato inteligente tradicional proporciona una solución que se basa en un conjunto
de instrucciones de propósito general para todos los dominios. Por ejemplo, en el caso de Ethereum, se ha
desarrollado un conjunto de códigos de operación para la máquina virtual Ethereum (EVM) que se puede usar
para construir contratos inteligentes para abordar cualquier tipo de requisitos para cualquier industria. Si bien
este modelo tiene sus méritos, cada vez es más claro que este enfoque no es muy seguro, ya que proporciona
una interfaz única en el libro mayor con un lenguaje poderoso y expresivo, lo que potencialmente ofrece una
mayor superficie de ataque para el código malicioso. Esta complejidad y paradigma de máquina virtual genérica
ha resultado en varias vulnerabilidades que los piratas informáticos encontraron y explotaron recientemente. Un
ejemplo reciente es el ataque DAO y otros ataques de denegación de servicios (DoS) que aprovecharon las
limitaciones de algunos códigos de operación EVM. Un modelo que se muestra en la siguiente figura describe el
modelo de contrato inteligente tradicional, donde se ha utilizado una máquina virtual genérica para proporcionar la in
Para abordar este problema, Sawtooth Lake ha propuesto la idea de familias de transacciones. Una familia
de transacciones se crea al descomponer la capa lógica en un conjunto de reglas y una capa de composición
para un dominio específico. La idea clave es que la lógica empresarial se compone de familias de transacciones,
lo que proporciona una forma más segura y potente de crear contratos inteligentes. Las familias de transacciones
contienen las reglas específicas del dominio y otra capa que permite crear transacciones para ese dominio. Otra
forma de verlo es que las familias de transacciones son una combinación de un modelo de datos y un lenguaje
de transacciones que implementa una capa lógica para un dominio específico. el modelo de datos
Machine el
representa Translated by Google
estado actual de la cadena de bloques (libro mayor), mientras que el lenguaje de transacción modifica el estado del
libro mayor. Se espera que los usuarios construyan sus propias familias de transacciones de acuerdo con los requisitos de su negocio.
El siguiente diagrama representa este modelo, donde cada dominio específico, como los servicios financieros, la gestión de
derechos digitales (DRM), la cadena de suministro y la industria de la salud, tiene su propia capa lógica compuesta por operaciones
y servicios específicos de ese dominio. Esto hace que la capa lógica sea tanto restrictiva como poderosa al mismo tiempo. Las
familias de transacciones aseguran que las operaciones relacionadas solo con el dominio requerido estén presentes en la lógica de
control, eliminando así la posibilidad de ejecutar operaciones innecesarias, arbitrarias y potencialmente dañinas.
Intel ha proporcionado tres familias de transacciones con Sawtooth: registro de punto final, Integerkey y MarketPlace.
Sawtooth_bond se ha desarrollado como una prueba de concepto para demostrar una plataforma de comercio de bonos. Está
disponible en https://github.com/hyperledger/sawtooth-core/tree/master/extensions/bond.
Machine Translated by Google
Consenso en diente de sierra
Sawtooth tiene dos tipos de mecanismos de consenso basados en la elección de la red. PoET,
como se discutió anteriormente, es una función de lotería basada en un entorno ejecutado de confianza
que elige un líder al azar en función del tiempo que un nodo ha esperado para la propuesta de bloque.
Hay otro tipo de consenso llamado votación de quórum, que es una adaptación de los protocolos de
consenso creados por Ripple y Stellar. Este algoritmo de consenso permite la finalidad de transacción
instantánea, lo que suele ser deseable en redes autorizadas.
Machine Translated by Google
Entorno de desarrollo
En esta sección, se brinda una introducción rápida sobre cómo configurar un entorno de desarrollo para el lago
Sawtooth. Hay algunos requisitos previos necesarios para configurar el entorno de desarrollo. Los ejemplos en esta
sección asumen un sistema Ubuntu en ejecución y lo siguiente:
Una vez que ambos requisitos previos anteriores se hayan descargado e instalado correctamente, el siguiente paso es
clonar el repositorio.
Esto producirá una salida similar a la que se muestra en la siguiente captura de pantalla:
Una vez que Sawtooth se haya clonado correctamente, el siguiente paso es iniciar el entorno. Primero, ejecute el
siguiente comando para cambiar el directorio a la ubicación correcta y luego inicie el cuadro vagabundo :
$ cd sawtooth-core/herramientas
$ vagrant up
$ alto vagabundo
$ vagabundo destruir
Halt detendrá la máquina vagabunda , mientras que destroy detendrá y eliminará las máquinas vagabundas .
Finalmente, el validador de transacciones se puede iniciar usando los siguientes comandos. Primero ssh en la caja vagabunda de
dientes de sierra.
$ vagabundo ssh
Primero construya el núcleo del lago de diente de sierra usando el siguiente comando:
Cuando la compilación se haya completado con éxito, para ejecutar el validador de transacciones, emita los siguientes comandos:
$ /project/sawtooth-core/docs/source/tutorial/genesis.sh
Esto creará el bloque de génesis y borrará todos los archivos de datos y claves existentes. Esto debería mostrar un resultado
similar a la siguiente captura de pantalla:
El siguiente paso es ejecutar el validador de transacciones y cambiar el directorio como se muestra a continuación:
$ cd /proyecto/diente de sierra
El nodo del validador se puede detener presionando Ctrl + C. Una vez que el validador está en funcionamiento, se pueden
iniciar varios clientes en otra ventana de terminal para comunicarse con el validador de transacciones y enviar transacciones.
Por ejemplo, en la siguiente captura de pantalla, el cliente de mercado se inicia para comunicarse con el validador de
transacciones. Tenga en cuenta que las claves en /keys/mkt.wif se crean con el siguiente comando:
Esta demostración es solo un ejemplo básico derivado de la documentación del lago Sawtooth. Sin embargo, el desarrollo
usando Sawtooth Lake es un proceso bastante complicado y se podría dedicar un capítulo completo a eso.
Sawtooth Lake también se encuentra en desarrollo continuo y, por lo tanto, se recomienda que los lectores estén atentos a la
documentación disponible en http://intelledger.github.io/ con el fin de mantenerse al día con los últimos desarrollos.
Machine Translated by Google
Corda
Corda no es una cadena de bloques. Las soluciones tradicionales de blockchain, como se discutió anteriormente,
tienen el concepto de transacciones que se agrupan en un bloque y cada bloque se vincula criptográficamente a
su bloque principal, lo que proporciona un registro inmutable de transacciones. Este no es el caso de Corda:
Corda ha sido diseñado completamente desde cero con un nuevo modelo para brindar todos los beneficios de la
cadena de bloques, pero sin una cadena de bloques tradicional. Ha sido desarrollado puramente para la industria
financiera para resolver los problemas que surgen del hecho de que cada organización maneja sus propios libros
de contabilidad y, por lo tanto, tiene su propia visión de la verdad, lo que genera contradicciones y riesgos
operativos. Además, los datos también se duplican en cada organización, lo que da como resultado un mayor
costo de administración de infraestructuras individuales y complejidad. Estos son los tipos de problemas dentro
de la industria financiera que Corda pretende resolver mediante la construcción de una plataforma de base de dato
Objetos de estado
Los objetos de estado representan la unidad de datos más pequeña que representa un acuerdo financiero. Se crean o
eliminan como resultado de la ejecución de una transacción. Se refieren al código del contrato ya la prosa jurídica. La prosa
legal es opcional y proporciona un vínculo legal al contrato. Sin embargo, el código de contrato es obligatorio para gestionar
el estado del objeto. Se requiere para proporcionar un mecanismo de transición de estado para el nodo de acuerdo con la
lógica comercial definida en el código del contrato. Los objetos de estado contienen una estructura de datos que representa
el estado actual del objeto. Por ejemplo, en el siguiente diagrama, un objeto de estado representa el estado actual del
objeto. En este caso, se trata de un simple acuerdo simulado entre la Parte A y la Parte B en el que la Parte ABC ha pagado
a la Parte XYZ 1000 GBP. Esto representa el estado actual del objeto; sin embargo, el código de contrato referido puede
cambiar el estado a través de transacciones. Los objetos de estado se pueden considerar como una máquina de estado, que
son consumidos por transacciones para crear objetos de estado actualizados.
Actas
Las transacciones se utilizan para realizar transiciones entre diferentes estados. Por ejemplo, el objeto de estado que se
muestra en el diagrama anterior se crea como resultado de una transacción. Corda utiliza un modelo basado en UTXO
de estilo bitcoin para su procesamiento de transacciones. El concepto de transición de estado por transacciones es
Machine
igual que Translated
en bitcoin.byAl
Google
igual que Bitcoin, las transacciones pueden tener ninguna entrada, una o varias entradas y
salidas únicas o múltiples. Todas las transacciones están firmadas digitalmente. Además, Corda no tiene un
concepto de minería porque no usa bloques para organizar transacciones en una cadena de bloques. En cambio,
los servicios de notario se utilizan para proporcionar un ordenamiento temporal de las transacciones. En Corda, se
pueden desarrollar nuevos tipos de transacciones utilizando el código de bytes de JVM, lo que lo hace muy flexible y
Consenso
El modelo de consenso en Corda es bastante simple y se basa en los servicios notariales que se analizan en una
sección posterior. La idea general es que las transacciones sean evaluadas por su singularidad por el servicio
notarial y, si son únicas, se firmen como válidas. Puede haber servicios notariales agrupados únicos o múltiples
ejecutándose en una red Corda. Los notarios pueden utilizar varios algoritmos de consenso como PBFT o Raft
para llegar a un consenso.
Hay dos conceptos principales con respecto al consenso en Corda: consenso sobre la validez del estado y
consenso sobre la singularidad del estado. El primer concepto se relaciona con la validación de la transacción,
asegurando que todas las firmas requeridas estén disponibles y que los estados sean apropiados. El segundo
concepto es un medio para detectar un ataque de doble gasto y garantiza que una transacción no se haya gastado
y sea única.
Flujos
Los flujos en Corda son una idea novedosa que permite el desarrollo de flujos de trabajo descentralizados.
Toda la comunicación en la red Corda es manejada por estos flujos. Estos son protocolos de construcción
de transacciones que se pueden usar para definir cualquier flujo financiero de cualquier complejidad usando
código. Los flujos se ejecutan como una máquina de estado asíncrona e interactúan con otros nodos y usuarios.
Durante la ejecución, se pueden suspender o reanudar según se requiera.
Machine Translated by Google
Componentes
La red Corda tiene múltiples componentes. Todos estos componentes se describen en la siguiente sección.
Nodos
Nodos en una red Corda operados bajo un modelo sin confianza y administrados por diferentes organizaciones.
Los nodos se ejecutan como parte de una red peer-to-peer autenticada. Los nodos se comunican
directamente entre sí mediante el Protocolo avanzado de cola de mensajes (AMQP), que es un estándar
internacional aprobado (ISO/IEC 19464) y garantiza que los mensajes entre diferentes nodos se transfieran de
forma segura. AMQP trabaja sobre Transport Layer Security (TLS) en Corda, asegurando así la privacidad e
integridad de los datos comunicados entre nodos.
Los nodos también utilizan una base de datos relacional local para el almacenamiento. Los mensajes en la red
están codificados en un formato binario compacto. Se entregan y administran mediante el intermediario de
mensajes Apache Artemis (Active MQ). Un nodo puede servir como servicio de mapas de red, notario, Oracle o u
El siguiente diagrama muestra una vista de alto nivel de dos nodos que se comunican entre sí:
En el diagrama anterior, el nodo 1 se comunica con el nodo 2 a través de un canal de comunicación TLS
mediante el protocolo AMQP y los nodos tienen una base de datos relacional local para el almacenamiento.
servicio de permisos
Se utiliza un servicio de permisos para aprovisionar certificados TLS para seguridad. Para participar en la
red, los participantes deben tener una identidad firmada emitida por una autoridad de certificación raíz.
Las identidades deben ser únicas en la red y el servicio de permisos se utiliza para firmar estas identidades.
La convención de nomenclatura utilizada para reconocer a los participantes se basa en el estándar X.500. Esto
asegura la unicidad del nombre.
Este servicio se utiliza para proporcionar un mapa de red en forma de documento de todos los nodos de la red.
Este servicio publica direcciones IP, certificados de identidad y una lista de servicios ofrecidos por los
nodos. Todos los nodos anuncian su presencia registrándose en este servicio cuando se inician por primera vez
laMachine Translated
solicitud by Google
de conexión es recibida por un nodo, la presencia del nodo solicitante se verifica primero
en el mapa de la red. Dicho de otra manera, este servicio resuelve las identidades de los participantes en
nodos físicos.
servicio notarial
En una cadena de bloques tradicional, la minería se utiliza para determinar el orden de los bloques que
contienen transacciones. En Corda, los servicios de notario se utilizan para proporcionar servicios de
ordenación de transacciones y sellado de tiempo. Puede haber varios notarios en una red y se identifican
mediante claves públicas compuestas. Los notarios pueden utilizar diferentes algoritmos de consenso como BFT
Los servicios notariales firman las transacciones para indicar la validez y finalidad de la transacción, que
luego se conserva en la base de datos.
Los notarios se pueden ejecutar en una configuración de equilibrio de carga para distribuir la carga entre los
nodos por motivos de rendimiento; y, para reducir la latencia, se recomienda que los nodos se ejecuten
físicamente más cerca de los participantes de la transacción.
servicio oracle
Los servicios de Oracle firman una transacción que contiene un hecho, si es cierto, o pueden ellos mismos
proporcionar datos fácticos. Permiten la alimentación del mundo real en los libros mayores distribuidos.
Actas
Las transacciones en una red Corda nunca se transmiten globalmente, sino en una red semiprivada. Se
comparten solo entre un subconjunto de participantes que están relacionados con la transacción. Esto
contrasta con las soluciones tradicionales de blockchain como Ethereum y bitcoin, donde todas las
transacciones se transmiten a toda la red a nivel mundial. Las transacciones se firman digitalmente y consumen
estados o crean nuevos estados.
Referencias de entrada: esta es una referencia a los estados que la transacción va a consumir y usar
como entrada.
Estados de salida: estos son nuevos estados creados por la transacción.
Archivos adjuntos: esta es una lista de hashes de archivos zip adjuntos. Los archivos zip pueden
contener código y otra documentación relevante relacionada con la transacción. Los archivos en sí no
forman parte de la transacción, sino que se transfieren y almacenan por separado.
Comandos: Un comando representa la información sobre la operación prevista de la
transacción como parámetro del contrato. Cada comando tiene una lista de claves públicas que
representa a todas las partes que deben firmar una transacción.
Firmas: Esto representa la firma requerida por la transacción. El número total de firmas requeridas
es directamente proporcional al número de claves públicas para los comandos.
Tipo: Hay dos tipos de transacciones, a saber, Normal o Cambio de notario. Las transacciones de cambio
de notario se utilizan para reasignar un notario para un estado.
Marca de tiempo: Este campo representa un intervalo de tiempo durante el cual se ha realizado la transacci
Machine
EstosTranslated by Google
son verificados y aplicados por servicios notariales. Además, se espera que si se requieren tiempos
estrictos, lo cual es deseable en muchos escenarios de servicios financieros, los notarios deben sincronizarse
con un reloj atómico.
Resúmenes: Esta es una descripción de texto que describe las operaciones de la transacción.
Bóvedas
Las bóvedas se ejecutan en un nodo y son similares al concepto de billeteras en bitcoin. Como las transacciones
no se transmiten globalmente, cada nodo tendrá solo la parte de los datos en sus bóvedas que se considere
relevante para ellos. Las bóvedas almacenan sus datos en una base de datos relacional estándar y, como tal, se
pueden consultar mediante SQL estándar. Las bóvedas pueden contener datos en el libro mayor y fuera del libro mayor,
lo que significa que también puede tener una parte de los datos que no están en el libro mayor.
CorDapp
El modelo central de Corda consiste en objetos de estado, transacciones y protocolos de transacción, que cuando
se combinan con código de contrato, API, complementos de billetera y componentes de interfaz de usuario dan
como resultado la construcción de una aplicación distribuida de Corda (CorDapp).
Los contratos inteligentes en Corda se escriben usando Kotlin o Java. El código está destinado a JVM. JVM se ha
modificado ligeramente para lograr resultados deterministas de ejecución del código de bytes de JVM. Hay tres
componentes principales en un contrato inteligente de Corda de la siguiente manera:
1. Código ejecutable que define la lógica de validación para validar los cambios en los objetos de estado.
2. Los objetos de estado representan el estado actual de un contrato y pueden ser consumidos por una transacción
o producido (creado) por una transacción.
3. Los comandos se utilizan para describir los datos operativos y de verificación que definen cómo se
puede verificar una transacción.
Machine Translated by Google
Entorno de desarrollo
El entorno de desarrollo para Corda se puede configurar fácilmente siguiendo los siguientes pasos.
en http://www.oracle.com/technetwork/java/javase/downloads/index.html.
2. Edición comunitaria de IntelliJ IDEA, que es gratuita y está disponible en
https://www.jetbrains.com/idea/download .
3. Zip independiente de la plataforma de base de datos H2 y está
disponible en http://www.h2database.com/html/download.html.
4. Git, disponible en https://git-scm.com/downloads.
5. Lenguaje Kotlin, que está disponible para IntelliJ, y se puede encontrar más información en
https://kotlinlang.org/.
6. Gradle es otro componente que se usa para construir Corda.
Una vez que se instalan todas estas herramientas, se puede iniciar el desarrollo de contratos inteligentes.
CorDapps se puede desarrollar utilizando una plantilla de ejemplo disponible en https://github.com/corda/cordapp-te
La documentación detallada sobre cómo desarrollar un código de contrato está disponible en https://docs.corda.net/
Una vez que se clona el repositorio, se puede abrir en IntelliJ para un mayor desarrollo. Hay múltiples muestras
disponibles en el repositorio, como un banco de Corda, swaps de tasas de interés, demostración y demostración
de comerciantes. Los lectores pueden encontrarlos en el directorio /samples en corda y pueden explorarse usando
IntelliJ IDEA IDE.
Machine Translated by Google
Resumen
En este capítulo, proporcionamos una introducción al proyecto Hyperledger. En primer lugar, se
discutieron las ideas centrales detrás del proyecto Hyperledger y se proporcionó una breve
introducción a todos los proyectos en incubación en Hyperledger. Se discutieron en detalle tres
proyectos principales de Hyperledger, a saber, Hyperledger Fabric, Sawtooth Lake y Corda. Todos
estos proyectos se encuentran actualmente en un intenso desarrollo y se esperan cambios en los
próximos lanzamientos. Debido a esto, no se dieron ejercicios prácticos en profundidad. Sin embargo,
se espera que los conceptos centrales de todos los proyectos mencionados anteriormente permanezcan
sin cambios o solo cambien muy levemente. Se alienta a los lectores a visitar los enlaces relevantes
proporcionados dentro del capítulo para ver las últimas actualizaciones. Es obvio que están sucediendo
muchas cosas en este espacio y proyectos como Hyperledger de la fundación Linux están jugando un
papel clave en el avance de la tecnología blockchain. Cada uno de los proyectos discutidos en este
capítulo tiene enfoques novedosos para resolver los problemas que enfrentan varias industrias, y
también se abordan las limitaciones actuales dentro de la tecnología blockchain, como la escalabilidad
y la privacidad. Se espera que pronto se propongan más proyectos al proyecto Hyperledger, y se prevé
que con este esfuerzo colaborativo y abierto, la tecnología blockchain avanzará enormemente y beneficiar
Machine Translated by Google
Capítulo 10. Cadenas de bloques alternativas
Este capítulo está destinado a proporcionar una introducción a las soluciones alternativas de blockchain.
Con el éxito de bitcoin y la posterior realización del potencial de la tecnología blockchain, comenzó una explosión
cámbrica que resultó en el desarrollo de varios protocolos, aplicaciones y plataformas de blockchain. Algunos
proyectos no ganaron mucha tracción, pero muchos lograron crear un lugar sólido en este espacio.
En este capítulo, los lectores conocerán cadenas de bloques y plataformas alternativas que son nuevas cadenas de
bloques por sí mismas o complementan otras cadenas de bloques existentes. Estas nuevas plataformas se basan en
la idea de proporcionar SDK y herramientas para facilitar el desarrollo y la implementación de soluciones blockchain.
El éxito de Ethereum y bitcoin ha resultado en varios proyectos que surgieron aprovechando las tecnologías y
conceptos subyacentes introducidos por ellos. Estos nuevos proyectos agregan valor al abordar las limitaciones en
las cadenas de bloques actuales o mejorar las soluciones existentes al proporcionar una capa adicional de
herramientas fáciles de usar además de ellas.
En la primera sección de este capítulo, se brindará una introducción a las nuevas soluciones de cadena de bloques,
y las secciones posteriores cubrirán varias plataformas y kits de desarrollo que complementan las cadenas de bloques
Por ejemplo, BlockApps STRATO es una plataforma compatible con Ethereum para el desarrollo de
aplicaciones de cadena de bloques, y Kadena es una nueva cadena de bloques privada con ideas novedosas como
Scalable BFT. Varios conceptos como cadenas laterales, cadenas de transmisión y vinculación también se han
introducido por primera vez con este crecimiento de las tecnologías de cadena de bloques. Este capítulo cubrirá
todas estas tecnologías y conceptos relacionados en detalle. Por supuesto, no es posible cubrir todas las cadenas
alternativas (altchains) y plataformas, pero todas aquellas plataformas se han incluido en este capítulo que están
relacionadas con blockchains, cubiertas en los capítulos anteriores, o que se espera que ganen fuerza en un futuro cer
Machine Translated by Google
cadenas de bloques
Esta sección brindará una introducción a las nuevas soluciones de blockchain. Primero, en la siguiente
sección se analiza una nueva cadena de bloques llamada Kadena.
Machine Translated by Google
Kadena
Kadena es una cadena de bloques privada de reciente introducción que ha abordado con éxito los problemas de
escalabilidad y privacidad en los sistemas de cadena de bloques. También se ha introducido un nuevo lenguaje
incompleto de Turing llamado Pact con Kadena que permite el desarrollo de contratos inteligentes. Una innovación clave
en Kadena es su algoritmo de consenso BFT escalable, que tiene el potencial de escalar a miles de nodos sin degradación
del rendimiento. BFT escalable se basa en el algoritmo Raft original y es un sucesor de Tangaroa y Juno. Tangaroa, que
es un nombre dado a una implementación de Raft con tolerancia a fallas (una BFT Raft), se desarrolló para abordar los
problemas de disponibilidad y seguridad que surgieron del comportamiento de los nodos bizantinos en el algoritmo de
Raft, y Juno era una bifurcación de Tangaroa. que fue desarrollado por JPMorgan. Los algoritmos de consenso se analizan
en el Capítulo 1, Blockchain 101 con más detalle. Ambas propuestas tienen una limitación fundamental: no pueden escalar
mientras mantienen un alto nivel de alto rendimiento. Como tal, Juno no pudo ganar mucha tracción. Las cadenas de
bloques privadas tienen la propiedad más deseable de mantener un alto rendimiento a medida que aumenta la cantidad
de nodos, pero las propuestas antes mencionadas carecen de esta característica. Kadena resuelve este problema con su
algoritmo BFT escalable patentado, que se espera que se amplíe a miles de nodos sin ninguna degradación del rendimiento.
Además, la confidencialidad es otro aspecto importante de Kadena que permite la privacidad de las transacciones en la
cadena de bloques. Esto se logra mediante el uso de una combinación de rotación de claves, cifrado simétrico en cadena,
hash incremental y protocolo Double Ratchet.
La rotación de claves se utiliza como un mecanismo estándar para garantizar la seguridad de la cadena de bloques
privada. Se utiliza como práctica recomendada para frustrar cualquier ataque si las claves se han visto comprometidas,
cambiando periódicamente las claves de cifrado. Hay un soporte nativo para la rotación de claves en el lenguaje de contratos
El cifrado simétrico en cadena permite el cifrado de datos de transacciones en la cadena de bloques. Estas
transacciones pueden ser descifradas automáticamente por los participantes de una transacción privada en particular.
El protocolo Double Ratchet se utiliza para proporcionar funciones de cifrado y gestión de claves.
El protocolo de consenso BFT escalable garantiza que se haya logrado una replicación y un consenso adecuados antes
de la ejecución del contrato inteligente. El consenso se logra siguiendo el proceso que se describe a continuación:
1. Primero, el usuario firma una nueva transacción y la transmite a través de la red blockchain, que es recogida
por un nodo líder que la agrega a su registro inmutable. En este punto, también se calcula un hash incremental
para el registro. El hash incremental es un tipo de función hash que básicamente permite el cálculo de mensajes
hash en el escenario en el que, si un mensaje original anterior que ya tiene un hash cambia ligeramente, el nuevo
mensaje hash se calcula a partir del hash ya existente. Este esquema es más rápido y requiere menos recursos
en comparación con una función hash convencional en la que se requiere generar un mensaje hash completamente
nuevo incluso si el mensaje original solo ha cambiado muy poco.
2. Una vez que el nodo líder escribe la transacción en el registro, firma la replicación y
hash incremental y lo transmite a otros nodos.
3. Otros nodos, después de recibir la transacción, verifican la firma del nodo líder, agregan el
Machine Translated by
transacciones en Google
sus propios registros y transmiten sus propios hashes incrementales calculados (pruebas de
quórum) a otros nodos. Finalmente, la transacción se confirma en el libro mayor de forma permanente después de
recibir una cantidad adecuada de pruebas de otros nodos.
Una versión simplificada de este proceso se muestra en el siguiente diagrama, donde el nodo líder registra las nuevas
transacciones y luego las replica en los nodos seguidores:
Una vez que se logra el consenso, la ejecución del contrato inteligente puede comenzar y toma una serie de pasos, de
la siguiente manera:
Pact ha sido abierto por Kadena y está disponible para descargar en http://kadena.io/
pact/downloads.html. Esto se puede descargar como un binario independiente que proporciona un REPL para el lenguaje
Pact. A continuación se muestra un ejemplo en el que se ejecuta Pact emitiendo el comando ./pact en la consola de Linux:
Machine Translated by Google
El contrato inteligente en Pact generalmente se compone de tres secciones: conjuntos de claves, módulos
y tablas. Primero, keyset define esquemas de autorización relevantes para tablas y módulos. En segundo lugar,
el módulo define cuál es el código de contrato inteligente que engloba la lógica empresarial en forma de
funciones y pactos. Los pactos dentro de los módulos se componen de múltiples pasos y se ejecutan secuencial
Pact se puede utilizar en varios modos de ejecución. Estos modos incluyen definición de contratos, ejecución
de transacciones y consultas. El modo de definición de contrato permite crear un contrato en la cadena de
bloques a través de un único mensaje de transacción. El modo de ejecución de transacciones implica la
ejecución de módulos de código de contrato inteligente que representan la lógica comercial. La consulta se
ocupa simplemente de sondear el contrato en busca de datos y se ejecuta localmente en los nodos por motivos d
Pact utiliza una sintaxis similar a LISP y representa en el código exactamente lo que se ejecutará en la cadena
de bloques tal como se almacena en la cadena de bloques en un formato legible por humanos. Esto contrasta
con el EVM de Ethereum, que se compila en un código de bytes para su ejecución, lo que dificulta verificar qué
código se está ejecutando en la cadena de bloques. Además, es Turing incompleto, admite variables inmutables
y no permite valores nulos, lo que mejora la seguridad general de la ejecución del código de transacción.
No es posible cubrir la sintaxis y las funciones completas de Pact en este capítulo, sin embargo, a continuación
se muestra un pequeño ejemplo que muestra la estructura general de un contrato inteligente escrito en Pact.
Este ejemplo muestra un módulo de suma simple que define una función llamada suma que toma tres
parámetros. Cuando se ejecuta el código, suma los tres valores y muestra el resultado.
Como se muestra en el ejemplo anterior, el resultado de la ejecución coincide exactamente con el diseño y la estructura
del código, lo que permite una mayor transparencia y limita la posibilidad de ejecución de código malicioso.
Kadena es una nueva clase de cadenas de bloques privadas que presenta el concepto novedoso de
determinismo generalizado donde, además de la seguridad de origen de datos estándar basada en claves
públicas/privadas, también se proporciona una capa adicional de consenso totalmente determinista. Proporciona seguridad
criptográfica en todas las capas de la cadena de bloques, incluidas las transacciones y la capa de consenso.
Nota
La documentación relevante y el código fuente de Pact se pueden encontrar aquí: https://github.com/kadena io/pact.
Machine Translated by Google
Onda
Introducido en 2012, Ripple es un sistema de cambio de divisas y liquidación bruta en tiempo real. En Ripple,
los pagos se liquidan sin esperas, a diferencia de las redes de liquidación tradicionales, donde la liquidación
puede tardar días. Tiene una moneda nativa llamada Ripples (XRP). También admite pagos que no sean XRP.
Este sistema se considera similar a un antiguo mecanismo tradicional de transferencia de dinero conocido
como Hawala. Este sistema funciona haciendo uso de agentes que toman el dinero y una contraseña del
remitente, luego se comunican con el agente del beneficiario y le indican que libere los fondos a la persona que
puede proporcionar la contraseña. Luego, el beneficiario se comunica con el agente local, le dice la contraseña y
Una analogía con el agente es Gateway en Ripple. Esta es solo una analogía muy simple, el protocolo real es
bastante complejo pero principalmente es el mismo.
La red Ripple se compone de varios nodos que pueden realizar diferentes funciones según su tipo. Primero,
nodos de usuario: estos se usan en transacciones de pago y pueden pagar o recibir pagos. Segundo, nodos
validadores: estos participan en el mecanismo de consenso. Cada servidor mantiene un conjunto de nodos
únicos, que necesita consultar mientras logra el consenso. El servidor involucrado en el mecanismo de
consenso confía en los nodos en la Lista de nodos únicos (UNL) y aceptará votos solo de esta lista de nodos
únicos. Ripple a veces no se considera verdaderamente descentralizado ya que hay operadores de red y
reguladores involucrados. Sin embargo, puede considerarse descentralizado debido al hecho de que cualquier
persona puede formar parte de la red mediante la ejecución de un nodo de validación. Además, el proceso de
consenso también está descentralizado porque cualquier cambio propuesto en el libro mayor debe decidirse
siguiendo un esquema de votación por mayoría absoluta. Sin embargo, este es un tema candente entre
investigadores y entusiastas y existen argumentos en contra y a favor de cada escuela de pensamiento.
Ripple mantiene un libro mayor distribuido global de todas las transacciones que se rige por un
novedoso algoritmo de consenso de baja latencia llamado Ripple Protocol Consensus Algorithm (RPCA). El
proceso de consenso funciona logrando un acuerdo sobre el estado de un libro mayor abierto que contiene
transacciones al buscar la verificación y aceptación de los servidores de validación de manera iterativa hasta
que se logra un número adecuado de votos. Una vez que se reciben suficientes votos (supermayoría,
inicialmente el 50 % y aumentando gradualmente con cada iteración hasta al menos el 80 %), los cambios se
validan y el libro mayor se cierra. En este punto, se envía una alerta a toda la red indicando que el libro mayor est
En una red Ripple, hay una serie de componentes que trabajan juntos para lograr un consenso y formar una red de
pago. Estos componentes se analizan individualmente a continuación:
Servidor: Este componente sirve como participante en el protocolo de consenso. Se requiere el software del
servidor Ripple para poder participar en el protocolo de consenso.
Libro mayor: Este es un registro principal de los saldos de todas las cuentas en la red. Un libro mayor contiene
varios elementos, como el número de libro mayor, la configuración de la cuenta, las transacciones, la marca de tiempo y
una bandera que indica la validez del libro mayor.
Último libro mayor cerrado: un libro mayor se cierra una vez que se logra el consenso mediante la validación de nodos.
Libro mayor abierto: Este es un libro mayor que aún no ha sido validado y no se ha llegado a un consenso sobre su
estado. Cada nodo tiene su propio libro mayor abierto, que contiene las transacciones propuestas.
Lista de nodos únicos: esta es una lista de nodos únicos de confianza que utiliza un servidor de validación para
buscar votos y el consenso posterior.
Proponente: como su nombre indica, este componente propone nuevas transacciones para ser incluidas en el proceso
de consenso. Por lo general, es un subconjunto de nodos (UNL definido anteriormente) que puede proponer transacciones
al servidor de validación.
Actas
Las transacciones son creadas por los usuarios de la red para actualizar el libro mayor. Se espera que una transacción esté
firmada digitalmente y sea válida para que se considere candidata en el proceso de consenso.
Cada transacción cuesta una pequeña cantidad de XRP, que sirve como mecanismo de protección contra los ataques de
denegación de servicio causados por el spam. Hay diferentes tipos de transacciones en la red Ripple.
Se utiliza un solo campo dentro de la estructura de datos de transacción de Ripple llamado TransactionType para
representar el tipo de transacción. Las transacciones se ejecutan mediante un proceso de cuatro pasos. Primero, se
preparan las transacciones mediante las cuales se crea una transacción sin firmar siguiendo los estándares.
El segundo paso es la firma, donde la transacción se firma digitalmente para autorizarla. Después de esto, el verdadero
elMachine
envío aTranslated
la red se by Googlea través del servidor conectado. Finalmente, se realiza la verificación para garantizar
produce
que la transacción se valide con éxito.
Aproximadamente, las transacciones se pueden clasificar en tres tipos, a saber, relacionadas con pagos,
relacionadas con pedidos y relacionadas con cuentas y valores. Todos estos tipos se describen en la siguiente secci
Pagos relacionados
Hay varios campos en esta categoría que resultan en ciertas acciones. Todos estos campos se describen a
continuación:
1. Pago: esta transacción es la más utilizada y permite que un usuario envíe fondos a otro.
2. PaymentChannelClaim: se usa para reclamar Ripples (XRP) de un canal de pago. A
El canal de pago es un mecanismo que permite pagos recurrentes y unidireccionales entre las partes.
Esto también se puede usar para establecer el tiempo de vencimiento del canal de pago.
3. PaymentChannelCreate: esta transacción crea un nuevo canal de pago y le agrega XRP en
gotas. Una sola gota equivale a 0.000001 de un XRP.
4. PaymentChannelFund: esta transacción se usa para agregar más fondos a un canal existente.
Similar a la transacción PaymentChannelClaim , esto también se puede usar para modificar el tiempo de
vencimiento del canal de pago.
1. OfferCreate: esta transacción representa una orden de límite, lo que representa una intención de cambio de
moneda. Da como resultado la creación de un nodo Oferta en el libro mayor de consenso si no se puede
cumplir por completo.
2. OfferCancel: se utiliza para eliminar un nodo de oferta creado previamente del libro mayor de consenso,
lo que indica el retiro de la orden.
Este tipo de transacción incluye los campos que se enumeran a continuación. Cada campo es responsable de
realizar una determinada función.
1. AccountSet: esta transacción se utiliza para modificar los atributos de una cuenta en Ripple
libro de consenso.
2. SetRegularKey: Esto se usa para cambiar o configurar la clave de firma de transacciones para una cuenta.
Una cuenta se identifica mediante una dirección Ripple base-58 derivada de la clave pública maestra de la
cuenta.
3. SignerListSet: Esto se puede usar para crear un conjunto de firmantes para usar en firmas múltiples
actas.
4. TrustSet: se utiliza para crear o modificar una línea de confianza entre cuentas.
Una transacción en Ripple se compone de varios campos que son comunes a todos los tipos de transacciones. Estas
Machine
Los camposTranslated
se enumeranbyde
Google
la siguiente manera con la descripción:
Varias API de desarrolladores están disponibles con Ripple para permitir que entidades externas se conecten a la
red de Ripple. Dos componentes clave, el protocolo Interledger y Ripple connect, funcionan en armonía para habilitar
una red de pagos distribuida, segura, escalable e interoperable.
El protocolo Interledger se ha desarrollado específicamente para permitir la interoperabilidad entre dos libros
diferentes. Se puede usar para conectar libros de contabilidad y cadenas de bloques de varias organizaciones
diferentes, incluidas, entre otras, redes de pago, instituciones financieras, cámaras de compensación y bolsas de valor
Interledger es un protocolo simple que se compone de cuatro capas: Aplicación, Transporte, Interledger y Ledger.
Cada capa es responsable de realizar varias funciones bajo ciertos protocolos. Estas funciones y protocolos se
describen en la siguiente sección.
Capa de aplicación
Los protocolos que se ejecutan en esta capa gobiernan los atributos clave de una transacción de pago. Los
ejemplos de protocolos de capa de aplicación incluyen el protocolo de configuración de pago simple (SPSP)
y el esquema de pago web abierto (OWPS). SPSP es un protocolo de Interledger que permite el pago seguro
en diferentes libros de contabilidad mediante la creación de conectores entre ellos. OWPS es otro esquema
que permite pagos de consumidores a través de diferentes redes. Una vez que los protocolos de esta capa se hayan
ejecutado correctamente, se invocarán los protocolos de la capa de transporte para iniciar el proceso de pago.
Capa de transporte
Esta capa es responsable de administrar las transacciones de pago. Protocolos como el protocolo de transporte
optimista (OTP), el protocolo de transporte universal (UTP) y el protocolo de transporte atómico (ATP) están
disponibles actualmente para esta capa. OTP es el protocolo más simple, que gestiona las transferencias de pago sin
ninguna protección de depósito en garantía, mientras que UTP brinda protección de depósito en garantía. ATP es el
protocolo más avanzado, que no solo proporciona un mecanismo de transferencia en custodia, sino que además
utiliza notarios de confianza para asegurar aún más las transacciones de pago.
Machine
capa Translated
de libro mayor by Google
Esta capa proporciona servicios de enrutamiento e interoperabilidad. Esta capa contiene protocolos
como el protocolo Interledger (ILP), el protocolo de cotización Interledger (ILQP) y el protocolo de
control Interledger (ILCP). El paquete ILP proporciona el destino final de la transacción en una transferencia.
ILQP se utiliza para realizar solicitudes de cotización por parte de los remitentes antes de la transferencia real.
ILCP se utiliza para intercambiar datos relacionados con la información de enrutamiento y errores de pago entre
Esta capa contiene protocolos que permiten la comunicación y ejecución de transacciones de pago
entre conectores. Los conectores son básicamente objetos que implementan el protocolo para reenviar
pagos entre diferentes libros de contabilidad. Puede admitir varios protocolos, como el protocolo Simple
Ledger, varios protocolos de cadena de bloques, protocolos heredados y diferentes protocolos propietarios.
Ripple connect consta de varios módulos Plug and Play que permiten la conectividad entre libros de
contabilidad mediante el uso de ILP. Permite el intercambio de datos necesarios entre las partes antes de la
transacción, la visibilidad, la gestión de tarifas, la confirmación de entrega y la comunicación segura mediante
la seguridad de la capa de transporte. Una aplicación de terceros puede conectarse a la red Ripple a través de va
En general, Ripple es una solución dirigida a la industria financiera y hace posibles los pagos en tiempo
real sin ningún riesgo de liquidación. Como se trata de una plataforma rica en funciones, no es posible cubrir
todos sus aspectos en este capítulo. La documentación de Ripple y muy rica para la plataforma está disponible
en https://ripple.com/.
Estelar
Stellar es una red de pago basada en tecnología blockchain y un novedoso modelo de consenso llamado
Acuerdo Bizantino Federado (FBA). Logística de Amazon funciona mediante la creación de quórums de partes
de confianza. Stellar Consensus Protocol (SCP) es una implementación de FBA.
Los problemas clave identificados en el documento técnico de Stellar son el costo y la complejidad de
la infraestructura financiera actual. Esta limitación justifica la necesidad de una red financiera global que
aborde estos problemas sin comprometer la integridad y seguridad de la transacción financiera. Este
requisito ha resultado en la invención del Stellar Consensus Protocol (SCP), que es un mecanismo de
consenso demostrablemente seguro.
Tiene cuatro propiedades principales: control descentralizado, que permite la participación de cualquier
persona sin un partido central; baja latencia, que aborda el requisito tan deseado de procesamiento rápido de
transacciones; confianza flexible, que permite a los usuarios elegir en qué partes confían para un propósito
específico y, finalmente, seguridad asintótica, que hace uso de firmas digitales y funciones hash para
proporcionar el nivel requerido de seguridad en la red.
La red Stellar permite la transferencia y representación del valor de un activo por su moneda digital nativa,
llamada Lumens, abreviada como XLM. Los lúmenes se consumen cuando se realiza una transacción.
Machineen
difundido Translated
la red, quebytambién
Googlesirve como elemento disuasorio contra los ataques de denegación de servicio (DOS).
En esencia, la red Stellar mantiene un libro mayor distribuido que registra cada transacción y se replica en cada servidor Stellar.
El consenso se logra verificando las transacciones entre servidores y actualizando el libro mayor con actualizaciones. El libro
mayor de Stellar también puede actuar como un libro de órdenes de intercambio distribuido al permitir que los usuarios almacenen
sus ofertas para comprar o vender divisas.
Hay varias herramientas, SDK y software que componen la red Stellar. El software central está disponible en https://github.com/
stellar/stellar-core.
Rizoma
Antes de discutir Rootstock en detalle, es importante definir e introducir algunos conceptos que son fundamentales para el diseño
de Rootstock. Estos conceptos incluyen cadenas laterales, cadenas de transmisión y vinculación bidireccional. El concepto de cadena
lateral fue desarrollado originalmente por Blockstream.
La vinculación bidireccional es un mecanismo mediante el cual el valor (monedas) puede transferirse entre una cadena de
bloques y viceversa. No hay una transferencia real de monedas entre cadenas. La idea gira en torno al concepto de bloquear la
misma cantidad y valor de monedas en una cadena de bloques de bitcoin (cadena principal) y desbloquear la cantidad equivalente
de tokens en la cadena secundaria.
Teniendo esta definición en mente, las cadenas laterales se pueden definir como se describe en la siguiente sección.
Teniendo esta definición en mente, las cadenas laterales se pueden definir como se describe en la siguiente sección.
Cadena lateral
Esta es una cadena de bloques que se ejecuta en paralelo con una cadena de bloques principal y permite la transferencia de valor entre
ellas. Esto significa que los tokens de una cadena de bloques se pueden usar en la cadena lateral y viceversa. Esto también se
Cadena de transmisión
Este es un concepto relativamente nuevo, donde el control sobre el desbloqueo de los bitcoins bloqueados (en la cadena
principal) se otorga a los mineros que pueden votar cuándo desbloquearlos. Esto contrasta con las cadenas laterales, donde el
consenso se valida a través del mecanismo de verificación de pago simple para transferir las monedas a la cadena principal.
Rootstock es una plataforma de contrato inteligente que tiene una vinculación bidireccional con la cadena de bloques de bitcoin.
La idea central es aumentar la escalabilidad y el rendimiento del sistema bitcoin y permitirle trabajar con contratos inteligentes.
Rootstock ejecuta una máquina virtual determinista completa de Turing llamada Rootstock Virtual Machine (RVM). También es
compatible con la máquina virtual Ethereum y permite que los contratos compilados con solidez se ejecuten en Rootstock. Los
contratos inteligentes también pueden ejecutarse con el tiempo, una seguridad probada de la cadena de bloques de bitcoin. La
cadena de bloques de Rootstock funciona fusionando la minería con bitcoins. Esto permite que RSK blockchain alcance el mismo
nivel de seguridad que bitcoin. Esto es especialmente cierto para
Machine
evitando Translated
los by Google
gastos dobles y logrando la firmeza de la liquidación. Permite escalabilidad, hasta 100 transacciones
por segundo.
RSK ha lanzado recientemente una red de prueba llamada Turmeric. Está disponible en http://www.rsk.co/.
Quórum
Esta es una solución de cadena de bloques creada mediante la mejora de la cadena de bloques de Ethereum existente. Hay
varias mejoras, como la privacidad de las transacciones y un nuevo mecanismo de consenso que se ha introducido en Quorum.
Quorum ha introducido un nuevo modelo de consenso conocido como QuorumChain, que se basa en un mecanismo de votación
por mayoría y basado en el tiempo. También se presenta otra característica llamada Constellation, que es un mecanismo de
propósito general para enviar información y permite la comunicación encriptada entre pares. Además, la concesión de permisos a
nivel de nodo se rige por contratos inteligentes. También proporciona un mayor nivel de rendimiento en comparación con las
cadenas de bloques públicas de Ethereum.
Varios componentes conforman el ecosistema blockchain de Quorum. Estos se enumeran en la siguiente sección.
administrador de transacciones
Este componente permite el acceso a datos de transacciones cifradas. También administra el almacenamiento local y la
comunicación con otros administradores de transacciones en la red.
Enclave criptográfico
Como su nombre indica, este componente se encarga de proporcionar servicios criptográficos para garantizar la privacidad de
las transacciones. También es responsable de realizar funciones clave de gestión.
Cadena de quórum
Esta es la innovación clave en Quorum. Es un mecanismo de consenso tolerante a fallas bizantinas que permite la verificación
y circulación de votos a través de transacciones en la red blockchain. En este esquema, se utiliza un contrato inteligente para
administrar el proceso de consenso y se puede otorgar a los nodos derechos de voto para votar sobre qué nuevo bloque
debe aceptarse. Una vez que los votantes reciben un número apropiado de votos, el bloque se considera válido. Los nodos
pueden tener dos roles, a saber, votante o creador. El nodo Voter puede votar, mientras que el nodo Maker es el que crea un
nuevo bloque. Un nodo puede tener derechos, ninguno o solo uno.
Gerente de Redes
Este componente proporciona una capa de control de acceso para la red autorizada.
Un nodo en la red de quórum puede asumir varios roles, por ejemplo, un nodo Maker al que se le permite crear nuevos bloques.
La privacidad de las transacciones se proporciona mediante criptografía y el concepto de que ciertas transacciones están
destinadas a ser vistas solo por sus participantes relevantes. Esta idea es similar a la idea de Corda de las transacciones
privadas que se discutió en el último capítulo. Como permite transacciones tanto públicas como privadas en la cadena de
bloques, la base de datos estatal se ha dividido en dos bases de datos
Machine Translated
representando by Googlepúblicas y privadas. Como tal, hay dos árboles Patricia-Merkle separados que representan
transacciones
el estado público y privado de la red. Se utiliza un hash de estado de contrato privado para proporcionar evidencia de
consenso en transacciones privadas entre las partes de la transacción.
La transacción en una red de quórum consta de varios elementos, como el destinatario, la firma digital del
remitente, que se utiliza para identificar al autor de la transacción, el monto de éter opcional, la lista opcional de
participantes que pueden ver la transacción y un campo que contiene un hash en caso de transacciones privadas.
Una transacción pasa por varios pasos antes de que pueda llegar a su destino. Estos pasos se describen a continuación
en detalle:
1. Las aplicaciones de usuario (DAPP) envían la transacción al nodo de quórum a través de una API expuesta por la
red blockchain. Esto también contiene la dirección del destinatario y los datos de la transacción.
2. Luego, la API encripta la carga útil y aplica cualquier otro algoritmo criptográfico necesario en
para garantizar la privacidad de la transacción, y se envía al administrador de transacciones. El hash de la carga útil
cifrada también se calcula en este paso.
3. Después de recibir la transacción, el administrador de transacciones valida la firma del remitente de la transacción y
almacena el mensaje.
4. El hash de la carga útil cifrada previamente se envía al nodo Quorum.
5. Una vez que el nodo Quorum comienza a validar un bloque que contiene la transacción privada, solicita
datos más relevantes del Transaction manager.
6. Una vez que el administrador de transacciones recibe esta solicitud, envía la carga útil cifrada y
claves simétricas relevantes al nodo de quórum del solicitante.
7. Una vez que el nodo Quorum tiene todos los datos, descifra la carga útil y la envía al EVM para su
ejecución. Así es como Quorum logra la privacidad con el cifrado simétrico en la cadena de bloques, mientras
que puede usar el protocolo Ethereum nativo y EVM para la transferencia y ejecución de mensajes, respectivamente.
8. Anteriormente se ha propuesto un concepto similar, pero bastante diferente en algunos aspectos, en forma de
Hydrachain, que se basa en la cadena de bloques de Ethereum y permite la creación de registros distribuidos
autorizados.
Tezos
Tezos es un libro mayor criptográfico automodificable genérico, lo que significa que no solo permite un
consenso descentralizado sobre el estado de la cadena de bloques, sino que también permite un consenso sobre cómo
evolucionan el protocolo y los nodos con el tiempo. Tezos se ha desarrollado para abordar las limitaciones en el protocolo
de bitcoin, como los problemas que surgen de las bifurcaciones duras, el costo y la centralización de la energía minera
debido a la Prueba de trabajo, la capacidad limitada de secuencias de comandos y los problemas de seguridad. Ha sido
desarrollado en un lenguaje puramente funcional llamado OCaml.
La arquitectura del libro mayor distribuido de Tezos se divide en tres capas: la capa de red, consenso
Machine
capa Translated
y capa by Google
de transacción. Esta descomposición permite que el protocolo evolucione de forma descentralizada.
Para ello, se implementa en Tezos un shell de red genérico que se encarga de mantener la cadena de bloques, que
se representa mediante una combinación de capa de consenso y transacción.
Este shell proporciona una capa de interfaz entre la red y el protocolo. También se ha introducido un concepto
de protocolo inicial, que se utiliza como mecanismo para permitir que las partes interesadas de la red aprueben
cualquier cambio en el protocolo. La cadena de bloques de Tezos parte de un protocolo inicial en comparación
con una cadena de bloques tradicional que parte de un bloque de génesis.
Este protocolo semilla es responsable de definir los procedimientos para las modificaciones en la cadena de bloques e
incluso el propio protocolo de modificación. El mecanismo de recompensa en Tezos se basa en un algoritmo de prueba
de participación (PoS), por lo tanto, no hay requisitos de minería.
El lenguaje de escritura de contrato se ha desarrollado en Tezos para escribir contratos inteligentes, que es un
lenguaje completo de Turing basado en pila. Los contratos inteligentes en Tezos son formalmente verificables, lo que
permite probar matemáticamente la corrección del código.
Storj
Los modelos existentes para el almacenamiento basado en la nube son todas soluciones centralizadas, que pueden
o no ser tan seguras como los usuarios esperan que sean. Es necesario contar con un sistema de almacenamiento en la
nube que sea seguro, de alta disponibilidad y sobre todo descentralizado. Storj tiene como objetivo proporcionar
almacenamiento distribuido, descentralizado y basado en blockchain. Es una nube compartida por la comunidad en lugar
de una organización central. Permite la ejecución de contratos de almacenamiento entre nodos que actúan como agentes
autónomos. Estos agentes (nodos) ejecutan diversas funciones, como la transferencia de datos, la validación y realizan
comprobaciones de integridad de datos. El concepto central se basa en tablas hash distribuidas (DHT) -Kademlia, sin
embargo, este protocolo se ha mejorado al agregar nuevos tipos de mensajes y funcionalidades en Storj. También
implementa un mecanismo de publicación/suscripción (pub/sub) de igual a igual conocido como Quasar, que garantiza
que los mensajes lleguen con éxito a los nodos que están interesados en los contratos de almacenamiento. Esto se logra
a través de un mecanismo de selección de parámetros de contrato de almacenamiento basado en un filtro de floración llam
Storj almacena archivos en un formato cifrado repartido por la red. Antes de que el archivo se almacene en la red, se
cifra mediante el cifrado simétrico AES-256-CTR y luego se almacena pieza por pieza de manera distribuida en la red.
Este proceso de diseccionar el archivo en partes se denomina fragmentación y da como resultado una mayor
disponibilidad, seguridad, rendimiento y privacidad de la red.
Además, si un nodo falla, el fragmento aún está disponible porque, de manera predeterminada, un solo fragmento
se almacena en tres ubicaciones diferentes en la red.
Mantiene una cadena de bloques, que sirve como un libro mayor compartido e implementa funciones de seguridad
estándar, como criptografía de clave pública/privada y funciones hash similares a cualquier otra cadena de bloques.
Como el sistema se basa en compartir el disco duro entre pares, cualquiera puede contribuir compartiendo su espacio
adicional en el disco y recibir pagos con la propia criptomoneda de Storj llamada Storjcoinx (SJCX). SJCX se desarrolló
como un activo de contraparte y utiliza la cadena de bloques de bitcoin para las transacciones.
ElMachine
código Translated
Storj estáby Google en https://github.com/Storj/.
disponible
Seguro de limpieza
Este es otro sistema de almacenamiento distribuido similar a Storj. A los usuarios se les paga en Safecoin por su
contribución de espacio de almacenamiento a la red. Este mecanismo de pago se rige por la prueba de recurso, que
garantiza que el espacio en disco comprometido por un usuario en la red está disponible, de lo contrario, el pago de
Safecoin se reducirá en consecuencia. Los archivos se cifran y se dividen en pequeñas porciones antes de
transmitirse a la red para su almacenamiento. Otro concepto de almacenamiento en caché oportunista se ha
introducido con Maidsafe, que es un mecanismo para crear copias de los datos a los que se accede con frecuencia
físicamente más cerca de donde provienen las solicitudes de acceso, lo que da como resultado un alto rendimiento
de la red. Otra característica novedosa de la red SAFE es que elimina automáticamente cualquier dato duplicado en
la red, lo que reduce los requisitos de almacenamiento. Además, también se ha introducido el concepto de agitación,
que básicamente significa que los datos se mueven constantemente a través de la red para que los datos no puedan
ser atacados por adversarios malintencionados. También mantiene varias copias de datos en la red para proporcionar
redundancia en caso de que un nodo se desconecte o falle.
BigChainDB
Esta es una base de datos blockchain escalable. No es estrictamente una cadena de bloques en sí misma,
sino que complementa la tecnología de cadenas de bloques al proporcionar una base de datos descentralizada.
En esencia, es una base de datos distribuida pero con los atributos adicionales de una cadena de bloques, como
la descentralización, la inmutabilidad y el manejo de activos digitales. También permite el uso de NoSQL para
consultar la base de datos. Su objetivo es proporcionar una base de datos en un ecosistema descentralizado donde
no solo se descentraliza el procesamiento (cadena de bloques) o el sistema de archivos (por ejemplo, IPFS), sino que
también se descentraliza la base de datos. Esto hace que todo el ecosistema de aplicaciones descentralizadas sea
descentralizado. Esto está disponible en https://www.bigchaindb.com/.
multicadena
Multichain se ha desarrollado como una plataforma para el desarrollo y despliegue de cadenas de bloques
privadas. Se basa en el código de bitcoin y aborda problemas de seguridad, escalabilidad y privacidad. Es una
plataforma de cadena de bloques altamente configurable que permite a los usuarios establecer diferentes parámetros
de cadena de bloques. Admite control y privacidad a través de una capa de permisos granular. La instalación de
Multichain es muy rápida y los enlaces a los archivos de instalación están disponibles en http://www.multichain.com/d
menta
Núcleo de menta
Machine
Este es unTranslated
motor debyconsenso
Google que permite la replicación segura de transacciones en cada nodo de la red.
Este es un protocolo de interfaz de aplicación que permite interactuar con cualquier lenguaje de programación
para procesar transacciones.
Tendermint permite desacoplar el proceso de solicitud y el proceso de consenso, lo que permite que cualquier
aplicación se beneficie del mecanismo de consenso.
El algoritmo de consenso de Tendermint es un mecanismo basado en rondas donde los nodos validadores
proponen nuevos bloques en cada ronda. Se utiliza un mecanismo de bloqueo para garantizar la protección contra
un escenario en el que se seleccionan dos bloques diferentes para comprometerse a la misma altura de la cadena
de bloques. Cada nodo de validación mantiene un libro mayor replicado local completo de bloques que contienen
transacciones. Cada bloque contiene un encabezado, que consiste en el hash del bloque anterior, la marca de
tiempo de la propuesta de bloque, la altura del bloque actual y el hash raíz Merkle de todas las transacciones presente
Tendermint se ha utilizado recientemente en Cosmos, que es una red de cadenas de bloques que permite
la interoperabilidad entre diferentes cadenas que se ejecutan en el algoritmo de consenso BFT. Las cadenas de
bloques en esta red se llaman zonas. La primera zona en Cosmos se llama centro de Cosmos, que de hecho es
una cadena de bloques pública y es responsable de proporcionar el servicio de conectividad a otras cadenas de
bloques. Para este propósito, el centro utiliza el protocolo de comunicación Inter Blockchain (IBC). El protocolo
IBC admite dos tipos de transacciones llamadas IBCBlockCimmitTx e IBCPacketTx. El primer tipo se usa para
proporcionar prueba del hash de bloque más reciente en una cadena de bloques a cualquier parte, mientras que
el último tipo se usa para proporcionar autenticación de origen de datos. Un paquete de una cadena de bloques
a otra se publica publicando primero una prueba en la cadena de destino. La cadena receptora (objetivo) comprueba
esta prueba para verificar que la cadena emisora haya publicado el paquete. Además, tiene su propia moneda
nativa llamada Atom. Este esquema aborda los problemas de escalabilidad e interoperabilidad al permitir que
varias cadenas de bloques se conecten al centro.
BlockApps es una plataforma que proporciona un amplio conjunto de herramientas para crear aplicaciones
de cadena de bloques. Esta plataforma está escrita en Haskell y se basa en una arquitectura modular. La
solución es escalable y facilita la implementación de contratos inteligentes y aplicaciones de cadena de
bloques. Está disponible en http://www.blockapps.net/.
Instalación
BlockApps se puede instalar a través de npm usando el comando que se muestra a continuación:
sudo es opcional, si no se requieren derechos administrativos. Esto producirá una salida similar a la que se muestra
en la siguiente captura de pantalla:
Una vez completada la instalación, se pueden crear aplicaciones siguiendo los pasos que se muestran en la siguiente
sección. A continuación se muestra un ejemplo que muestra cómo inicializar una nueva aplicación en BlockApps,
implementarla en BlockApps TestNet e interactuar con ella.
$ inicio de bloque
Solicitará varios parámetros: el nombre de la aplicación, su nombre, correo electrónico, URL de API (apiUrl) y perfil
de blockchain. Esto se muestra en la siguiente captura de pantalla.
Una vez que el comando se ejecuta y se completa correctamente, creará un directorio de aplicaciones con
plantillas y ejemplos. En este caso, se creará un directorio llamado testApp con directorios relevantes y contratos
de muestra.
Machine Translated by Google
iniciar bloque
El siguiente paso es instalar testApp , lo que se puede lograr ejecutando el siguiente comando:
Se requiere la generación de una nueva clave para firmar las transacciones. Las claves se pueden generar usando el siguiente comando:
$ bloque genkey
Una vez emitida, se deberá ingresar una contraseña para proteger la clave. Una vez proporcionada, se creará la clave y se creará un archivo
JSON. Tenga en cuenta que el nombre del archivo JSON es la dirección real de la cuenta en la cadena de bloques. Además, mostrará el mensaje
de la transacción extraída, indicando el éxito y el despliegue de la clave y la transacción (creación de cuenta) respectivamente.
El Machine Translated
proceso se by la
muestra en Google
siguiente captura de pantalla:
Generar clave
Ahora, en este punto, se puede consultar la nueva cuenta usando curl. Simplemente pase la dirección como argumento en la URL
y el resultado se devolverá en formato JSON.
Alternativamente, se puede ejecutar una consulta a través de cualquier navegador web como se muestra en la siguiente captura de pantalla:
En el siguiente paso, se describirá el proceso para subir el nuevo contrato a la cadena de prueba. Tenga en cuenta que todos los
contratos se colocan en el directorio ./app/contracts en el directorio testApp . Como muestra, se ha elegido el contrato de Greeter.sol para
implementarlo en la red. BlockApps proporciona un método sencillo para lograr esta implementación.
Todos los contratos deben colocarse en el directorio de contratos para que el comando de compilación funcione.
Machine Translated
encontrarlos by Google
y compilar.
Los contratos se pueden compilar usando el comando que se muestra en la siguiente captura de pantalla. Tenga
en cuenta que toma ese nombre de archivo de contrato como argumento. Después de una compilación exitosa,
todos los archivos JSON relevantes se escribirán en el directorio ./meta .
Machine Translated by Google
Finalmente, el contrato se puede cargar usando el siguiente comando. Este comando espera que el argumento se
pase al contrato tal como se define en el código del contrato. En el ejemplo, esperaba una cadena de texto como se
muestra en la siguiente captura de pantalla de ejemplo:
Tenga en cuenta que, en caso de que no se pasen o falten los argumentos correctos, se producirá un error
similar a la siguiente captura de pantalla:
Machine Translated by Google
Una vez que la implementación es exitosa, se puede verificar que el ether se transfirió del contrato existente al nuevo contrato. Tenga
en cuenta que el saldo ha bajado. Esto se muestra en la siguiente captura de pantalla:
Después de la implementación del contrato, se puede consultar mediante un navegador web o cualquier herramienta CLI como
cURL. La URL http://strato-dev4.blockapps.net/eth/v1.2/account? address=05ee3af04e903f413402d5438b9de3827b1f4e70 debe
pasarse al navegador web. Esto se muestra en la siguiente captura de pantalla. Tenga en cuenta que el código en formato binario
también está disponible en la salida.
Machine Translated by Google
Además, BlockApps tiene una función disponible para ejecutar un servidor HTTP local, que se puede iniciar con el
siguiente comando:
Una vez que se inicia el servidor web, los contratos compilados se pueden ver y consultar mediante la página
web local disponible, como se muestra en la siguiente captura de pantalla:
Machine Translated by Google
Como se demostró en el ejemplo anterior, es más fácil crear, implementar y administrar contratos con BlockApps. BlockApps
tiene como objetivo proporcionar herramientas e infraestructura central para aplicaciones de blockchain, y no solo blockchain.
Machine Translated by Google
eris
Eris no es una sola cadena de bloques, es una plataforma modular abierta desarrollada por Monax para el desarrollo de
aplicaciones de ecosistemas basadas en cadenas de bloques. Ofrece varios marcos, SDK y herramientas que permiten
acelerar el desarrollo y la implementación de aplicaciones de cadena de bloques. La idea central detrás de la plataforma
de aplicaciones Eris es permitir el desarrollo y la gestión de aplicaciones del ecosistema con un backend de cadena de
bloques. Permite la integración con múltiples cadenas de bloques y permite que varios sistemas de terceros interactúen
con otros sistemas. Esta plataforma hace uso de contratos inteligentes escritos en lenguaje sólido. Puede interactuar con
cadenas de bloques como Ethereum o bitcoin. La interacción puede incluir comandos de conectividad, inicio, parada,
desconexión y creación de nuevas cadenas de bloques.
La complejidad relacionada con la configuración y la interacción con las cadenas de bloques se ha abstraído en Eris.
Todos los comandos están estandarizados para diferentes cadenas de bloques, y los mismos comandos se pueden usar
en toda la plataforma, independientemente del tipo de cadena de bloques al que se dirijan.
Una aplicación de ecosistema puede consistir en la plataforma Eris, lo que permite que la puerta de enlace API
permita que las aplicaciones heredadas se conecten a sistemas de gestión clave, motores de consenso y motores de
aplicaciones. La plataforma Eris proporciona varios conjuntos de herramientas que se utilizan para proporcionar diversos s
Estos módulos se describen a continuación:
Eris también ha desarrollado varios SDK que permiten el desarrollo y la gestión de aplicaciones de ecosistemas.
Estos SDK contienen contratos inteligentes que han sido completamente probados y abordan necesidades y requisitos
específicos del negocio. Por ejemplo, SDK de finanzas, SDK de seguros y SDK de logística. También hay un SDK base
que sirve como kit de desarrollo básico para administrar el ciclo de vida de una aplicación de ecosistema.
Monax ha desarrollado su propio cliente de cadena de bloques autorizado llamado Eris:db. Es un sistema de cadena
de bloques basado en prueba de participación (PoS) que permite la integración con varias redes de cadenas de bloques
diferentes. Eris:db consta de tres componentes:
Capa de permisos: al ser un libro mayor autorizado, Eris proporciona un mecanismo de control de acceso que
se puede utilizar para asignar roles específicos a diferentes entidades en la red.
Interfaz: Esto proporciona varias herramientas de línea de comandos e interfaces RPC para permitir la interacción
con la red de cadena de bloques de back-end.
LaMachine Translated
diferencia by Google
clave entre la cadena de bloques de Ethereum y Eris:db es que Eris:db utiliza un algoritmo práctico de
tolerancia a fallas bizantinas, que se implementa como una prueba de participación basada en depósitos (sistema DPOS),
mientras que Ethereum usa una prueba de trabajo (PoW). . Además, Eris:db usa el esquema de curva ECDSA ed22519
mientras que Ethereum usa el algoritmo secp256k1. Finalmente, está autorizado con una capa de control de acceso en la
parte superior, mientras que Ethereum es una cadena de bloques pública.
Eris es una plataforma de aplicaciones rica en funciones que ofrece una gran selección de conjuntos de
herramientas y servicios para desarrollar aplicaciones basadas en blockchain. Está disponible en https://monax.io/.
Machine Translated by Google
Resumen
Este capítulo comenzó con la introducción de cadenas de bloques alternativas y se divide en dos
secciones principales que analizan las cadenas de bloques y las plataformas. La tecnología Blockchain
es un área muy próspera, ya que estos cambios son bastante rápidos en las soluciones existentes y
casi todos los días se introducen nuevas tecnologías o herramientas relevantes. En este capítulo, se
discutió una cuidadosa selección de plataformas y cadenas de bloques. Se discutieron varias soluciones
que complementan el material cubierto en capítulos anteriores, por ejemplo, BlockApps, que admite el
desarrollo de Ethereum. También se discutieron nuevas cadenas de bloques como Kadena, varios
protocolos nuevos como Ripple y conceptos como cadenas laterales y cadenas de transmisión. El
material cubierto en este capítulo pretende proporcionar una base sólida para una investigación más
profunda en las áreas que interesan a los lectores. Como se dijo antes, blockchain es un campo que se
mueve muy rápido y hay muchos otros proyectos de propuestas de blockchain como Tauchain,
Hydrachain, Elements, créditos y muchos más que no se han discutido en este capítulo. Se anima a los
lectores a estar atentos a los desarrollos en este campo para mantenerse al día con los avances en esta á
Machine Translated by Google
Capítulo 11. Blockchain: fuera de las moneda
Las monedas digitales fueron la primera aplicación de la tecnología blockchain, posiblemente
sin darse cuenta de su verdadero potencial. Con la invención de bitcoin, se introdujo por primera vez
el concepto de cadena de bloques, pero no fue hasta 2013, con la llegada de Blockchain 2.0 , que se
dieron cuenta de los beneficios reales de la cadena de bloques con su posible aplicación en muchas
industrias diferentes. Desde entonces, se han propuesto una serie de casos de uso de la tecnología
blockchain en diferentes industrias, que incluyen, entre otros, finanzas, Internet de las cosas, gestión
de derechos digitales, gobierno y leyes. En este capítulo, se han seleccionado para discusión cuatro
industrias principales, a saber, Internet de las cosas (IoT), gobierno, salud y finanzas. Los lectores
conocerán todos estos campos y se presentarán varios casos de uso relacionados.
Machine Translated by Google
Internet de las Cosas
El Internet de las cosas o IoT para abreviar ha ganado mucho terreno recientemente debido a su
potencial para transformar las aplicaciones comerciales y la vida cotidiana. IoT se puede definir como
una red de objetos físicos computacionalmente inteligentes que son capaces de conectarse a Internet,
detectar eventos o entornos del mundo real, reaccionar ante esos eventos, recopilar datos relevantes y
comunicarlos a través de Internet. Esta simple definición tiene enormes implicaciones y ha dado lugar
a conceptos interesantes, como dispositivos portátiles, hogares inteligentes, redes inteligentes,
automóviles conectados inteligentes y ciudades inteligentes, que se basan en este concepto básico de un
dispositivo IoT. Después de diseccionar la definición de IoT anterior, hay cuatro funciones que salen a la
luz como realizadas por un dispositivo IoT. Estos incluyen sentir, reaccionar, recolectar y comunicar. Todas
estas funciones se realizan mediante el uso de varios componentes en el dispositivo IoT.
Un IoT típico puede consistir en muchos objetos físicos que se conectan entre sí y a un servidor en la
nube centralizado. Esto se muestra en el siguiente diagrama:
Machine Translated by Google
Los elementos de IoT se distribuyen en múltiples capas y existen varias arquitecturas de referencia que se
pueden usar para desarrollar sistemas de IoT. En general, se puede usar un modelo de cinco capas para
describir IoT, que contiene una capa de objeto físico, una capa de dispositivo, una capa de red, una capa de servicio
Cada capa o nivel es responsable de varias funciones e incluye varios componentes. Estos se describen en
detalle a continuación.
Machine Translated by Google
Capa de objetos físicos
Estos incluyen cualquier objeto físico del mundo real, incluidas personas, animales, automóviles, árboles,
refrigeradores, trenes, fábricas, hogares y, de hecho, cualquier cosa que se requiera para ser monitoreada y
controlada se puede conectar a la IoT.
Machine Translated by Google
Capa de dispositivo
Esta capa contiene elementos que componen el IoT, como sensores, transductores, actuadores, teléfonos
inteligentes, dispositivos inteligentes y etiquetas de identificación por radiofrecuencia (RFID). Puede haber
muchas categorías de sensores, como sensores corporales, sensores domésticos y sensores ambientales,
según el tipo de trabajo que realizan. Este es el núcleo de un ecosistema IoT donde se utilizan varios
sensores para detectar entornos del mundo real. Esto incluye sensores que pueden monitorear la
temperatura, la humedad, el flujo de líquidos, los productos químicos, el aire, la presión y mucho más. Por
lo general, se requiere un convertidor analógico a digital (ADC) en un dispositivo para convertir la señal
analógica del mundo real en una señal digital que un microprocesador pueda entender.
Los actuadores en esta capa proporcionan los medios para permitir el control de entornos externos, por
ejemplo, arrancar un motor o abrir una puerta. Estos componentes también requieren convertidores de
digital a analógico para convertir una señal digital en analógica. Esto es especialmente relevante cuando
el dispositivo IoT requiere el control de un componente mecánico.
Machine Translated by Google
Capa de red
Esta capa está compuesta por varios dispositivos de red que se utilizan para proporcionar conectividad a
Internet entre dispositivos y hacia la nube o servidores que forman parte del ecosistema IoT. Estos
dispositivos pueden incluir puertas de enlace, enrutadores, concentradores y conmutadores. Esta capa puede incl
El primero es el medio de comunicación horizontal, que incluye radio, Bluetooth, WiFi, Ethernet, LAN,
ZigBee y PAN y se puede utilizar para proporcionar una comunicación entre dispositivos IoT. En segundo
lugar, tenemos comunicación con la siguiente capa, que suele ser a través de Internet y proporciona
comunicación entre máquinas y personas u otras capas superiores. La primera capa se puede incluir
opcionalmente en la capa del dispositivo, ya que reside físicamente en la capa del dispositivo donde los
dispositivos pueden comunicarse entre sí en la misma capa.
Machine Translated by Google
Capa de gestión
Esta capa proporciona la capa de gestión para el ecosistema IoT. Esto incluye plataformas que permiten
el procesamiento de datos recopilados de los dispositivos IoT y los convierten en información significativa.
Además, en esta capa se incluyen la gestión de dispositivos, la gestión de la seguridad y la gestión del
flujo de datos. También gestiona la comunicación entre el dispositivo y las capas de aplicación.
Machine Translated by Google
Capa de aplicación
Esta capa incluye aplicaciones que se ejecutan sobre la red IoT. Esto puede incluir una serie de aplicaciones según los requisitos,
como el transporte, la atención médica, las finanzas, los seguros o la gestión de la cadena de suministro. Esto, por supuesto, no es una
lista exhaustiva por ningún tramo de la imaginación; hay una gran cantidad de aplicaciones de IoT que pueden caer en esta capa:
Con la disponibilidad de sensores, hardware y ancho de banda baratos, IoT ha ganado popularidad en los últimos años y actualmente
tiene aplicaciones en muchas áreas diferentes, que incluyen atención médica, seguros, gestión de la cadena de suministro, domótica,
automatización industrial y gestión de infraestructura.
Además, los avances en tecnología como la disponibilidad de IPv6, procesadores más pequeños y potentes y un mejor
acceso a Internet también han jugado un papel vital en la popularidad de IoT. Los beneficios de IoT van desde el ahorro de
costos hasta permitir que las empresas tomen decisiones vitales y, por lo tanto, mejoren el rendimiento en función de los datos
proporcionados por los dispositivos IoT. Los datos sin procesar de millones de cosas (dispositivos IoT) se analizan y brindan
información significativa que ayuda a tomar decisiones comerciales oportunas y efectivas.
El modelo normal de IoT se basa en un paradigma centralizado donde los dispositivos IoT generalmente se conectan con una
infraestructura en la nube o servidores centrales para informar y procesar los datos relevantes. Esta centralización plantea ciertas
posibilidades de explotación, incluida la piratería y el robo de datos. Además, no tener el control de los datos personales en un solo
proveedor de servicios centralizado también aumenta la posibilidad de problemas de seguridad y privacidad. Si bien existen métodos
y técnicas para construir un ecosistema de IoT altamente seguro basado en el modelo normal de IoT, hay ciertos beneficios mucho
más deseables que la cadena de bloques puede aportar a IoT. Un modelo de IoT basado en blockchain difiere del paradigma de red de
IoT tradicional. Según IBM, blockchain para IoT puede ayudar a generar confianza, reducir costos y
Machinelas
acelerar Translated by Google Además, la descentralización, que es el núcleo de la tecnología blockchain,
transacciones.
puede eliminar los puntos únicos de falla en una red IoT. Por ejemplo, un servidor central quizás no sea
capaz de hacer frente a la cantidad de datos que miles de millones de dispositivos IoT (cosas) están
produciendo a alta frecuencia. Además, el modelo de comunicación entre pares proporcionado por blockchain
puede ayudar a reducir los costos porque no es necesario construir centros de datos centralizados de alto
costo o implementar una infraestructura de clave pública compleja para la seguridad. Los dispositivos pueden
comunicarse entre sí directamente o a través de enrutadores.
Según una estimación de varios investigadores y empresas, para 2020 habrá aproximadamente 22 mil
millones de dispositivos conectados a Internet. Con esta explosión de miles de millones de dispositivos que
se conectan a Internet, es difícil imaginar que las infraestructuras centralizadas puedan hacer frente a las altas
demandas de ancho de banda, servicios y disponibilidad sin incurrir en gastos excesivos. El IoT basado en
blockchain podrá resolver problemas de escalabilidad, privacidad y confiabilidad en el modelo IoT actual.
Blockchain permite que las cosas se comuniquen y realicen transacciones entre sí directamente y
con la disponibilidad de negociación de contratos inteligentes y las transacciones financieras también pueden
ocurrir directamente entre los dispositivos en lugar de requerir un intermediario, autoridad o intervención
humana. Por ejemplo, si una habitación en un hotel está vacante, puede alquilarse, negociar el alquiler y
puede abrir la cerradura de la puerta para un ser humano que haya pagado la cantidad correcta de fondos.
Otro ejemplo podría ser que si una lavadora se queda sin detergente, podría pedirlo en línea después de
encontrar el mejor precio y valor según la lógica programada en su contrato inteligente.
El modelo IoT de cinco capas mencionado anteriormente se puede adaptar a un modelo basado en blockchain
agregando una capa de blockchain encima de la capa de red. Esta capa ejecutará contratos inteligentes y
proporcionará servicios de seguridad, privacidad, integridad, autonomía, escalabilidad y descentralización al eco
La capa de gestión en este caso puede consistir solo en software relacionado con el análisis y el
procesamiento, y la seguridad y el control se pueden trasladar a la capa de la cadena de bloques. Esto se
puede visualizar en el siguiente diagrama:
Machine Translated by Google
En este modelo, otras capas tal vez permanecerían igual, pero se introducirá una capa de cadena de bloques adicional
como un software intermedio entre todos los participantes de la red IoT.
También se puede visualizar como una red IoT peer-to-peer después de abstraer todas las capas mencionadas
anteriormente. Esto se muestra en el siguiente diagrama donde todos los dispositivos se comunican y negocian entre sí
sin una entidad central de comando y control:
También puede resultar en un ahorro de costos debido a una administración de dispositivos más fácil mediante el
uso de un enfoque descentralizado basado en blockchain. La red IoT se puede optimizar para el rendimiento mediante
el uso de blockchain. En este caso, no habrá necesidad de almacenar datos de IoT de forma centralizada para millones
de dispositivos porque los requisitos de almacenamiento y procesamiento se pueden distribuir a todos los dispositivos de IoT
Esto puede resultar en la eliminación completa de la necesidad de grandes centros de datos para procesar y almacenar
los datos de IoT.
Machine
IoT basadoTranslated by Googletambién puede frustrar los ataques de denegación de servicio donde los piratas
en blockchain
informáticos pueden apuntar a un servidor centralizado o centro de datos más fácilmente, pero con la
naturaleza distribuida y descentralizada de blockchain, tales ataques ya no son posibles. Además, si como
se estima habrá miles de millones de dispositivos conectados a Internet en un futuro cercano, será casi
imposible administrar la seguridad y las actualizaciones de todos esos dispositivos desde los servidores
tradicionales de propiedad central. Blockchain puede proporcionar una solución a este problema al permitir
que los dispositivos se comuniquen entre sí directamente de manera segura e incluso solicitar actualizaciones
de firmware y seguridad entre sí. En una red blockchain, estas comunicaciones se pueden registrar de forma
inmutable y segura, lo que proporcionará auditabilidad, integridad y transparencia al sistema. Esto no es posib
En resumen, hay claros beneficios que se pueden obtener con la convergencia de IoT y blockchain y ya
se están realizando muchas investigaciones y trabajos en la academia y la industria. Ya hay varios
proyectos propuestos que brindan soluciones de IoT basadas en blockchain. Por ejemplo, IBM Blue
Horizon e IBM Bluemix son plataformas de IoT que admiten plataformas de IoT de cadena de bloques.
Varias empresas emergentes como Filament ya han propuesto ideas novedosas sobre cómo construir una
red descentralizada que permita a los dispositivos en IoT realizar transacciones entre sí de forma directa y
autónoma impulsada por contratos inteligentes.
En la siguiente sección, se proporciona un ejemplo práctico sobre cómo construir un dispositivo IoT
simple y conectarlo a la cadena de bloques de Ethereum. Este dispositivo IoT está conectado a la cadena de
bloques de Ethereum y se usa para abrir una puerta (en este caso, la cerradura de la puerta está representada
por un LED) cuando un usuario envía la cantidad adecuada de fondos en la cadena de bloques. Este es un
ejemplo simple y requiere una versión más rigurosamente probada para implementarlo en producción, pero
demuestra cómo se puede conectar, controlar y responder a un dispositivo IoT en respuesta a ciertos
eventos en una cadena de bloques de Ethereum.
Machine Translated by Google
Experimento de cadena de bloques IoT
Este ejemplo utiliza un dispositivo Raspberry que es una computadora de placa única (SBC).
Raspberry Pi es una computadora de placa única desarrollada como una computadora de bajo costo para
promover la educación informática, pero también ha ganado mucha más popularidad como herramienta preferida
para construir plataformas IoT. Una Raspberry Pi 3 modelo B se muestra en la siguiente figura:
Raspberry Pi modelo B
En la siguiente sección, se analizará un ejemplo en el que se usará una Raspberry Pi como dispositivo IoT
conectado a la cadena de bloques de Ethereum y realizará una acción en respuesta a la invocación de un contrato
inteligente.
Primero, se debe configurar la Raspberry Pi. Esto se puede hacer usando NOOBS, que proporciona un método
sencillo para instalar Raspbian o cualquier otro sistema operativo. Este se puede descargar e instalar desde el enlace
https://www.raspberrypi.org/downloads/noobs/. Alternativamente, solo se puede instalar Raspbian desde el enlace
https://www.raspberrypi.org/downloads/raspbian/. Otra alternativa disponible en https://github.com/debian-pi/
raspbian-ua-netinst también se puede usar para instalar una versión mínima sin GUI del sistema operativo Raspbian.
A los efectos del ejemplo, se utilizó NOOBS para instalar Raspbian, por lo que el resto del ejercicio asume que
Raspbian está instalado en la tarjeta de memoria SD de Raspberry Pi.
Una vez instalado el sistema operativo Raspbian, el siguiente paso es descargar el binario geth apropiado para la
plataforma ARM de Raspberry Pi. La plataforma se puede confirmar ejecutando lo siguiente
Machine Translated
Comando by Googlede terminal en el sistema operativo Raspberry Pi Raspbian. El resultado del
en una ventana
comando muestra en qué arquitectura se está ejecutando el sistema operativo. En este caso es armv71,
por lo que se descargará el binario para geth compatible con ARM .
arquitectura de frambuesa pi
1. descarga de geth : tenga en cuenta que en el siguiente ejemplo se descarga una versión específica;
sin embargo, hay otras versiones disponibles que se pueden descargar desde https://
geth.ethereum.org/downloads/.
wget https://gethstore.blob.core.windows.net/builds/geth-linux-
arm7-1.5.6-2a609af5.tar.gz
Se debe usar el mismo bloque de génesis que se creó anteriormente en el Capítulo 8, Desarrollo
de Ethereum. El archivo de génesis se puede copiar desde el otro nodo de la red. Esto se muestra en la
siguiente captura de pantalla. Alternativamente, se puede generar un bloque de génesis completamente
nuevo. Esto se discutió en detalle en el Capítulo 8, Desarrollo de Ethereum.
Machine Translated by Google
archivo de génesis
Una vez que el archivo genesis.json se copia en la Raspberry Pi, se puede ejecutar el siguiente comando para generar el bloque
de génesis. Es importante que se use exactamente el mismo bloque de génesis que se generó anteriormente; de lo contrario, los
nodos se ejecutarán efectivamente en redes separadas:
Después de la creación del bloque de génesis, es necesario agregar pares a la red. Esto se puede lograr mediante la creación
de un archivo llamado static-nodes.json, que contiene la ID de enodo del par al que se conectará geth en la Raspberry Pi para la
sincronización.
Esta información se puede obtener desde la consola geth JavaScript ejecutando el siguiente comando que se muestra, este
comando debe ejecutarse en el par al que se va a conectar Raspberry:
> Admin.nodeInfo
Después de este paso, se pueden seguir las instrucciones adicionales que se presentan a continuación para conectar
Raspberry Pi al otro nodo en la red privada. En el ejemplo, la Raspberry Pi se conectará a la red ID 786 creada en el Capítulo
8, Desarrollo de Ethereum. La clave es usar el mismo archivo de génesis creado anteriormente y diferentes números de
puerto. Sin embargo, los diferentes puertos no son un requisito estricto. Si los dos nodos se ejecutan en una red privada y
se requiere acceso desde un entorno externo a la red, se utilizará una combinación de DMZ/enrutador y reenvío de puertos.
Por lo tanto, se recomienda utilizar diferentes puertos TCP para permitir que el reenvío de puertos funcione correctamente.
El cambio de identidad, que no se introdujo anteriormente, en el siguiente comando permite especificar un nombre de
identificación para el nodo.
Una vez que se inicia geth , debe seguir ejecutándose y se debe iniciar otra instancia de geth desde el nodo Raspberry Pi.
En Raspberry Pi, se requiere ejecutar el siguiente comando para iniciar geth y sincronizarlo con otros nodos (en este caso,
solo un nodo). El siguiente es el comando:
$ ./geth --networkid 786 --maxpeers 5 --rpc --rpcapi web3,eth,debug,personal,net --port 30302 --identity "raspberry"
--rpccorsdomain "*"
Machine
Esto Translated
debería byun
producir Google
resultado similar al que se muestra en la siguiente captura de pantalla. Cuando la salida
contiene la fila que muestra la sincronización de bloques iniciada, significa que el nodo se ha conectado correctamente
a su par.
Esto se puede verificar aún más ejecutando comandos en la consola geth en ambos nodos, como se muestra en la
siguiente captura de pantalla. geth se puede adjuntar simplemente ejecutando el comando en la Raspberry Pi:
$ get adjuntar
De manera similar , se puede adjuntar geth ejecutando el siguiente comando en el primer nodo:
Una vez que la consola esté disponible, se puede ejecutar admin.peers para revelar los detalles sobre otros nodos
conectados, como se muestra en la siguiente captura de pantalla:
Machine Translated by Google
Una vez que ambos nodos estén en funcionamiento, se pueden instalar requisitos previos adicionales para configurar
el experimento. Se requiere la instalación de Node.js y las bibliotecas JavaScript relevantes. Las bibliotecas y
dependencias requeridas se enumeran a continuación. Primero, Node.js y npm deben actualizarse en el sistema operativo
Raspberry Pi Raspbian. Para ello se pueden seguir los siguientes pasos:
Esto debería mostrar un resultado similar al siguiente. La salida es bastante grande, por lo que solo se muestra la
parte superior de la salida en la siguiente captura de pantalla:
Instalación de Node.js
2. Ejecute la actualización a través de apt-get:
La verificación se puede realizar ejecutando el siguiente comando para garantizar que se instalen las versiones
correctas de Node.js y npm , como se muestra en la siguiente captura de pantalla a continuación:
Machine Translated by Google
Cabe señalar que estas versiones no son una necesidad; cualquier versión más reciente de npm y node funcionará.
Los ejemplos de este capítulo utilizan npm 4.0.5 y node v7.4.0.
3. Instale Ethereum web3 npm, que es necesario para habilitar el código JavaScript para acceder a la
cadena de bloques:
Cuando se instalan todos los requisitos previos, se puede realizar la configuración del hardware. Para este propósito,
se construye un circuito simple utilizando una placa de prueba y algunos componentes electrónicos.
1. LED: la abreviatura de diodo emisor de luz, se puede utilizar como indicación visual de un
evento.
2. Resistencia: se requiere un componente de 330 ohmios que proporcione resistencia al paso de corriente en función de
su clasificación. No es necesario entender la teoría detrás de este experimento; cualquier texto estándar de ingeniería
electrónica cubre todos estos temas en detalle.
3. Protoboard: proporciona un medio para construir un circuito electrónico sin necesidad de
soldadura.
4. Zapatero en forma de T: se inserta en la placa de prueba como se muestra en la figura a continuación y
proporciona una vista etiquetada de todos los pines GPIO (E/S de propósito general) para Raspberry Pi.
5. Conector de cable de cinta: se utiliza simplemente para proporcionar conectividad entre Raspberry Pi
Machine
y la Translated by Google
placa de prueba a través de GPIO. Todos estos componentes se muestran en la siguiente imagen:
Componentes necesarios
Circuito
Como se muestra en la siguiente imagen, la pata positiva (pata larga) del LED está conectada al pin número
21 del GPIO y la negativa (pata corta) está conectada a la resistencia, que luego se conecta al pin de tierra
(GND). del GPIO. Una vez que se configuran las conexiones, el cable plano se puede usar para conectar
simplemente al conector GPIO en la Raspberry Pi.
Machine Translated by Google
Una vez que las conexiones están configuradas correctamente y la Raspberry Pi se ha actualizado con las bibliotecas y
geth apropiados, el siguiente paso es desarrollar un contrato inteligente simple que espera un valor. Si el valor que se
le proporciona no es el que espera, no desencadena un evento; de lo contrario, si el valor pasado coincide con el valor
correcto, el evento se activa y el programa cliente JavaScript que se ejecuta a través de Node.js puede leerlo. Por
supuesto, el contrato de solidez puede ser muy complejo y también puede tratar con el éter que se le envía y si la
cantidad de éter es igual a la cantidad requerida, entonces el evento puede desencadenarse; pero en este ejemplo, el
objetivo es demostrar el uso de contratos inteligentes para desencadenar eventos que luego pueden ser leídos por
programas JavaScript que se ejecutan en Node.js, que a su vez pueden desencadenar acciones en dispositivos IoT
utilizando varias bibliotecas.
Hay dos métodos mediante los cuales el nodo Raspberry puede conectarse a la cadena de bloques privada
a través de la interfaz web3. El primero es donde el dispositivo raspberry ejecuta su propio geth y mantiene
su propio libro mayor, pero con dispositivos con recursos limitados no es posible ejecutar un nodo geth
completo , o incluso un nodo ligero en algunas circunstancias. En ese caso, el proveedor web3 se puede
inicializar para conectarse al canal RPC adecuado. Esto se mostrará más adelante en el programa cliente
JavaScript Node.js. En el siguiente diagrama se muestra una comparación de ambos enfoques:
Machine Translated by Google
Arquitectura de aplicación de la aplicación IoT de alquiler de habitaciones (dispositivo IoT con libro mayor local)
Machine Translated by Google
Arquitectura de aplicación de la aplicación IoT de alquiler de habitaciones (dispositivo IoT sin libro mayor local)
Existen problemas de seguridad obvios que surgen de la exposición pública de las interfaces RPC, por lo que se recomienda
que esta opción se use solo en redes privadas y, si es necesario, se implementen las medidas de seguridad adecuadas,
como permitir solo la IP conocida. direcciones para conectarse a la interfaz geth RPC. Esto se puede lograr mediante una
combinación de la desactivación de los mecanismos de detección de pares y las interfaces de escucha del servidor HTTP-
RPC. Puede encontrar más información sobre esto en la ayuda de geth. Las medidas tradicionales de seguridad de la red,
como los cortafuegos, la seguridad de la capa de transporte (TLS) y los certificados, también se pueden usar, pero no se han
tratado en este ejemplo.
Ahora Truffle se puede usar para implementar el contrato en la red privada ID 786 a la que en este punto está conectada la
Raspberry Pi. Se puede realizar un despliegue de trufa simplemente usando el siguiente comando mostrado; se supone
que truffle init y otros preliminares discutidos en el Capítulo 8, Ethereum Development ya se han realizado:
$ trufa migrar
Despliegue de trufa
Una vez que el contrato se implementa correctamente, se puede desarrollar un código JavaScript que se conectará a la
cadena de bloques a través de web3, escuchará los eventos del contrato inteligente en la cadena de bloques y encenderá el
LED a través de Raspberry Pi. El código JavaScript se muestra de la siguiente manera:
} más
{
web3 = new Web3(new
Web3.providers.HttpProvider("http://localhost:9002"));
Machine Translated by Google
} var Gpio = require('onoff').Gpio; var led = new
Gpio(21,'fuera'); var base de monedas = web3.eth.
base de monedas; var ABIString =
'[{"constante":falso,"entradas":
[{"nombre":"x","tipo":"uint8"}],"nombre":"getRent","salidas": [{ "nombre":"","tipo":"bool"}],"a
pagar":falso,"tipo":"función"}, {"anónimo":falso,"entradas":
[{"indexado":falso ,"name":"returnValue","type":"bool"}],"name":"roomRented","type":"event"}]'; var
ABI = JSON.parse(ABISTring); var dirección de contrato = '0x151ce17c28b20ce554e0d944deb30e0447fbf78d';
web3.eth.cuentapredeterminada = web3.eth.cuentas[0]; var simpleiot = web3.eth.contract(ABI).at(ContractAddress); var event =
simpleiot.roomRented( {}, function(error, resultado) { if (!error) { led.writeSync(1); } });
Esto iniciará el programa, que se ejecutará en Node.js y escuchará los eventos del contrato inteligente.
Una vez que el programa se ejecuta correctamente, se puede invocar el contrato inteligente utilizando la
consola Truffle como se muestra en la siguiente captura de pantalla.
En este caso se llama a la función .getRent con el parámetro 10, que es el valor esperado.
Después de extraer el contrato, se activará roomRented , que encenderá el LED. En este ejemplo, es un
LED simple, pero puede ser cualquier dispositivo físico, como la cerradura de una habitación, que se
puede controlar a través de un actuador. Si todo funciona bien, el LED se encenderá como resultado
de la invocación de la función de contrato inteligente como se muestra en la siguiente imagen:
Machine Translated by Google
Como se demostró en el ejemplo anterior, se puede construir una red privada de dispositivos IoT que ejecuta
un cliente geth en cada uno de los nodos y puede escuchar eventos de contratos inteligentes y desencadenar
una acción en consecuencia. El ejemplo que se muestra es simple a propósito, pero demuestra los principios
subyacentes de una red Ethereum que se puede construir utilizando dispositivos IoT junto con un control
inteligente de los dispositivos físicos basado en contratos.
Los documentos de viaje legibles por máquina y específicamente los pasaportes biométricos han allanado el
camino para el control fronterizo automatizado; sin embargo, los sistemas actuales están limitados hasta cierto
punto y la tecnología blockchain puede brindar soluciones. Un documento de viaje legible por máquina (MRTD)
está definido en el documento ICAO 9303 por la Organización de Aviación Civil Internacional (ICAO) y ha sido
implementado por muchos países alrededor del mundo.
Cada pasaporte contiene varios atributos de seguridad e identidad que se pueden utilizar para identificar al
propietario del pasaporte y también para eludir los intentos de manipulación de los pasaportes. Estos incluyen
funciones biométricas como escaneo de retina, huellas dactilares, reconocimiento facial y funciones estándar
especificadas por la OACI, incluida la zona legible por máquina (MRZ) y otros atributos de texto que son visibles en
la primera página del pasaporte.
Un problema clave con los sistemas de control fronterizo actuales es la centralización por la cual los
sistemas están controlados por una sola entidad y el hecho de que los datos no se comparten fácilmente entre
las agencias de aplicación de la ley. Esto hace que sea difícil rastrear a las personas sospechosas. Otro tema
está relacionado con la implementación inmediata de la lista negra de un documento de viaje, por ejemplo,
cuando existe una necesidad inmediata de rastrear y controlar los documentos de viaje sospechosos.
Actualmente, no existe ningún mecanismo disponible para poner en lista negra o revocar inmediatamente un pasaport
Blockchain puede proporcionar una solución a este problema al mantener una lista negra en un contrato
inteligente que se puede actualizar según sea necesario y cualquier cambio será inmediatamente visible para
todas las agencias y puntos de control fronterizo, lo que permite un control inmediato sobre el movimiento de
un documento de viaje sospechoso. Se podría argumentar que los mecanismos tradicionales como las PKI y las
redes P2P también se pueden usar para este propósito, pero no brindan los beneficios que puede brindar una
cadena de bloques. Con blockchain, todo el sistema se puede simplificar sin el requisito de redes complejas y
configuraciones de PKI, lo que también dará como resultado una reducción de costos. Además, los sistemas
basados en blockchain proporcionarán una inmutabilidad criptográficamente garantizada que ayuda con la auditoría
y desalienta cualquier actividad fraudulenta.
La base de datos completa de todos los documentos de viaje quizás no se pueda almacenar en la cadena de
bloques actualmente debido a problemas de escalabilidad, pero se puede usar una base de datos distribuida de
back-end como BigChainDB, IPFS o Swarm para ese propósito. En este caso, se puede almacenar un hash del
documento de viaje con la identificación biométrica de una persona en un contrato inteligente simple y luego se
puede usar un hash del documento para hacer referencia a los datos detallados disponibles en el sistema de
archivos distribuidos, como IPFS. . De esta manera, cuando un documento de viaje se incluye en una lista negra en
cualquier lugar de la red, esa información estará disponible de inmediato con la garantía criptográfica de su
autenticidad e integridad en todo el libro mayor distribuido. Esta funcionalidad también puede proporcionar un
apoyo efectivo en las actividades antiterroristas, desempeñando así un papel vital en la función de seguridad nacional
UnMachine Translated
contrato simple by
en Google
solidez puede tener una matriz definida para almacenar identidades y registros biométricos
asociados. Esta matriz se puede utilizar para almacenar la información de identificación de un pasaporte. La
identidad puede ser un hash de la zona legible por máquina (MRZ) del pasaporte o documento de viaje concatenado
con el registro biométrico del chip RFID. Se puede usar un campo booleano simple para identificar pasaportes en la
lista negra. Una vez que pasa esta verificación inicial, los sistemas tradicionales pueden realizar una verificación
biométrica más detallada y, finalmente, cuando se toma una decisión con respecto a la entrada del titular del
pasaporte, esa decisión se puede propagar de nuevo a la cadena de bloques, lo que permite que todos los
participantes en la red compartan de inmediato el resultado de la decisión.
Un enfoque de alto nivel para construir un sistema de control de fronteras basado en blockchain se puede
visualizar como se muestra en la siguiente figura. En este escenario, el pasaporte se presenta para escanear a un
escáner RFID y de páginas que lee la página de datos y extrae información legible por máquina junto con un hash
de los datos biométricos almacenados en el chip RFID. En esta etapa, también se toma una foto en vivo y un
escaneo de retina del titular del pasaporte. Luego, esta información se transmite a la cadena de bloques, donde un
contrato inteligente es responsable de verificar la legitimidad del documento de viaje al verificar primero su propia
lista de pasaportes en la lista negra y luego solicitar más datos de la base de datos de IPFS para comparar. Tenga
en cuenta que los datos biométricos, como la fotografía o el escaneo de retina, no se almacenan en la cadena de
bloques, sino que solo se almacena una referencia a estos datos en el backend (IPFS o BigChainDB) en la cadena de b
Si los datos del pasaporte presentado coinciden con lo que se encuentra en el IPFS como archivos o
en BigChainDB y también pasa la verificación lógica del contrato inteligente, entonces se puede abrir la puerta fronteri
Después de la verificación, esta información se propaga a través de la cadena de bloques y está disponible
instantáneamente para todos los participantes en la cadena de bloques de control fronterizo. Estos participantes
pueden ser un consorcio mundial de departamentos de seguridad nacional de varias naciones.
Machine Translated by Google
Votación
Votar en cualquier gobierno es una función clave y permite a los ciudadanos participar en el proceso electoral
democrático. Si bien la votación ha evolucionado con el tiempo hacia un proceso mucho más maduro y seguro, todavía
tiene limitaciones que deben abordarse para lograr el nivel de madurez deseado. Por lo general, las limitaciones en los
sistemas de votación actuales giran en torno al fraude, las debilidades en los procesos operativos y, especialmente, la
transparencia. A lo largo de los años, se han construido mecanismos de votación seguros que hacen uso de máquinas
de votación especializadas que prometían seguridad y privacidad, pero aún tenían vulnerabilidades que podían
explotarse para subvertir los mecanismos de seguridad de esas máquinas.
Esto puede tener serias implicaciones para todo el proceso de votación y puede generar desconfianza en el
gobierno por parte del público.
Los sistemas de votación basados en blockchain pueden resolver estos problemas al introducir seguridad y
transparencia de extremo a extremo en el proceso. La seguridad se proporciona en forma de integridad y autenticidad
de los votos mediante el uso de criptografía de clave pública que viene de serie en una cadena de bloques. Además,
la inmutabilidad garantizada por blockchain garantiza que los votos emitidos una vez no puedan volver a emitirse.
Esto se puede lograr mediante una combinación de características biométricas y un contrato inteligente que mantiene
una lista de votos ya emitidos. Por ejemplo, un contrato inteligente puede mantener una lista de votos ya emitidos
con la identificación biométrica (por ejemplo, una huella digital) y puede usar eso para detectar y evitar la doble
emisión. En segundo lugar, las pruebas de conocimiento cero también se pueden usar en la cadena de bloques para pro
Machine Translated by Google
Identificación ciudadana (tarjetas de identificación)
En la actualidad, varios países del mundo emiten identificaciones electrónicas o tarjetas de identificación nacional.
Estas tarjetas son seguras y poseen muchas funciones de seguridad que frustran los intentos de
duplicación o manipulación. Sin embargo, con el advenimiento de la tecnología blockchain, se pueden realizar
varias mejoras en este proceso.
La identidad digital no se limita solo a las tarjetas de identificación emitidas por el gobierno, es un
concepto que también se aplica en las redes sociales y los foros en línea. Puede haber múltiples
identidades utilizadas para diferentes propósitos. Una identidad digital en línea basada en blockchain
permite controlar el intercambio de información personal. Los usuarios pueden ver quién usó sus datos y con
qué propósito y pueden controlar el acceso a ellos. Esto no es posible con las infraestructuras actuales que
están controladas de forma centralizada. El beneficio clave es que una sola identidad emitida por el gobierno se
puede usar fácilmente y de manera transparente para múltiples servicios a través de una sola cadena de bloques
del gobierno. En este caso, la cadena de bloques sirve como una plataforma en la que el gobierno proporciona
diversos servicios, como pensiones, impuestos o beneficios, y se utiliza una única identificación para acceder a
todos estos servicios. Blockchain en este caso proporciona un registro inmutable de cada cambio y transacción
realizada por una identificación digital, lo que garantiza la integridad y transparencia del sistema. Además, los
ciudadanos pueden certificar certificados de nacimiento, matrimonios, escrituras y muchos otros documentos en la
Actualmente, hay implementaciones exitosas de esquemas de identidad en varios países que funcionan bien
y existe el argumento de que tal vez la cadena de bloques no sea realmente necesaria en los sistemas de
gestión de identidad. Aunque existen varios beneficios, como la privacidad y el control sobre el uso de la
información de identidad, pero debido a la inmadurez actual de la tecnología blockchain, quizás no esté lista para
su uso en los sistemas de identidad del mundo real. Sin embargo, varios gobiernos están llevando a cabo
investigaciones para explorar el uso de blockchain para la gestión de identidades.
Además, leyes como el derecho al olvido pueden ser bastante difíciles de incorporar a blockchain debido a su
naturaleza inmutable.
Machine Translated by Google
Misceláneas
Otras funciones gubernamentales en las que se puede implementar la tecnología blockchain para mejorar
los costos y la eficiencia incluyen la recaudación de impuestos, la gestión y el desembolso de beneficios,
la gestión de registros de propiedad de la tierra, el registro de eventos de vida (matrimonios, nacimientos), el
registro de vehículos motorizados y las licencias. Esta no es una lista exhaustiva y, con el tiempo, muchas
funciones y procesos de un gobierno se pueden adaptar a un modelo basado en blockchain. Los beneficios
clave de blockchain, como la inmutabilidad, la transparencia y la descentralización, pueden ayudar a mejorar
la mayoría de los sistemas gubernamentales tradicionales.
Machine Translated by Google
Salud
La industria de la salud ha sido identificada como otra industria importante que puede beneficiarse al
adaptar la tecnología blockchain. Blockchain proporciona un sistema inmutable, auditable y transparente
que las redes P2P tradicionales no pueden. Además, blockchain proporciona una infraestructura más sencilla
y rentable en comparación con las redes PKI complejas tradicionales. En el cuidado de la salud, pueden surgir
problemas importantes, como compromisos de privacidad, filtraciones de datos, altos costos y fraude, debido
a la falta de interoperabilidad, procesos demasiado complejos, transparencia, auditabilidad y control. Otro tema
candente son los medicamentos falsificados; especialmente en los países en desarrollo, esta es una de las principa
Con la adaptabilidad de blockchain en el sector de la salud, se pueden obtener varios beneficios, que van desde
ahorro de costos, mayor confianza, procesamiento más rápido de reclamos, alta disponibilidad, ausencia de
errores operativos debido a la complejidad de los procedimientos operativos y prevención de la distribución de med
Desde otro ángulo, las cadenas de bloques que brindan una moneda digital como incentivo para la minería
pueden usarse para proporcionar poder de procesamiento para resolver problemas científicos que pueden
ayudar a encontrar curas para ciertas enfermedades. Los ejemplos incluyen FoldingCoin, que recompensa a
sus mineros con tokens FLDC por compartir el poder de procesamiento de su computadora para resolver
problemas científicos que requieren cálculos particularmente grandes. FoldingCoin está disponible en http://
foldingcoin.net/. Otro proyecto similar se llama CureCoin, que está disponible en https://www.curecoin.net/.
Todavía está por verse qué tan exitosos serán estos proyectos en el logro de sus objetivos, pero la idea es muy pro
Machine Translated by Google
Finanzas
Blockchain tiene muchas aplicaciones en la industria financiera. Blockchain en finanzas es el tema más candente
en la industria actualmente y los principales bancos y organizaciones financieras están investigando para encontrar
formas de adaptar la tecnología blockchain, especialmente debido a su potencial altamente deseado para ahorrar cost
Machine Translated by Google
Seguro
En la industria de seguros, la tecnología blockchain puede ayudar a detener reclamos fraudulentos, aumentar
la velocidad del procesamiento de reclamos y permitir la transparencia. Imagine un libro mayor compartido
entre todas las aseguradoras que pueda proporcionar un mecanismo rápido y eficiente para manejar reclamos
entre compañías. También con la convergencia de IoT y blockchain, se puede imaginar un ecosistema de
dispositivos inteligentes donde todas estas cosas pueden negociar y administrar sus propias pólizas de seguro
controladas por contratos inteligentes en blockchain.
Blockchain puede reducir el costo general y el esfuerzo necesarios para procesar reclamos. Las
reclamaciones se pueden verificar y pagar automáticamente a través de contratos inteligentes y la identidad
asociada del titular de la póliza de seguro. Por ejemplo, un contrato inteligente con la ayuda de Oracles y
posiblemente IoT puede garantizar que cuando ocurra el accidente, pueda registrar datos de telemetría
relacionados y, en función de esta información, pueda liberar el pago. También puede retener el pago si el
contrato inteligente después de evaluar las condiciones de pago concluye que el pago no debe liberarse. Por
ejemplo en un escenario donde el vehículo no fue reparado por un taller autorizado o fue usado fuera de un
área designada y así sucesivamente. Puede haber muchas condiciones que un contrato inteligente puede
evaluar para procesar reclamos y la elección de estas reglas depende de la aseguradora, pero la idea general es
que los contratos inteligentes en combinación con IoT y Oracles pueden automatizar toda la industria de seguros
Varias empresas emergentes, como Dynamis, han propuesto plataformas de seguros entre pares
basadas en contratos inteligentes que se ejecutan en la cadena de bloques Ethereum. Inicialmente, se
propone que se utilice para el seguro de desempleo y no requiere aseguradores en el modelo. Está disponible e
Machine Translated by Google
Liquidación posterior al comercio
Para comprender mejor el problema, se describe brevemente el ciclo de vida comercial. El ciclo de vida de una
operación consta de tres pasos: ejecución, compensación y liquidación. La ejecución se relaciona con el
compromiso de negociación entre dos partes y se puede ingresar al sistema a través de terminales de gestión de
pedidos de la oficina principal o intercambios. La compensación es el siguiente paso mediante el cual la transacción
se iguala entre el vendedor y el comprador en función de ciertos atributos, como el precio y la cantidad. En esta
etapa también se identifican las cuentas que están involucradas en el pago. Finalmente, la liquidación es donde
finalmente el valor se intercambia por pago entre el comprador y el vendedor.
En el modelo de ciclo de vida comercial tradicional, se requiere una cámara de compensación central para
facilitar el comercio entre las partes que asumen el riesgo crediticio de ambas partes. El esquema actual es algo
complicado, en el que un vendedor y un comprador tienen que tomar una ruta compleja para poder comerciar
entre sí. Esto se compone de varias empresas, corredores, cámaras de compensación y custodios, pero con
blockchain, un único libro mayor distribuido con contratos inteligentes apropiados puede simplificar todo este
proceso y puede permitir que los compradores y vendedores se comuniquen directamente entre sí.
En particular, el proceso de liquidación posterior a la negociación demora de dos a tres días y depende de las
cámaras de compensación centrales y los sistemas de reconciliación. Con el enfoque de libro mayor compartido,
todos los participantes en la cadena de bloques pueden ver de inmediato una única versión de la verdad sobre el
estado del comercio. Además, es posible la liquidación entre pares, lo que da como resultado la reducción de la
complejidad, el costo, el riesgo y el tiempo que lleva liquidar la operación. Finalmente, los intermediarios pueden
eliminarse por completo haciendo uso de contratos inteligentes apropiados en la cadena de bloques.
Machine Translated by Google
Prevención de delitos financieros
Conozca a su cliente (KYC) y Anti Money Laundering (AML) son los habilitadores clave para la prevención
de delitos financieros. En el caso de KYC, actualmente cada institución mantiene su propia copia de los datos
del cliente y realiza la verificación a través de proveedores de datos centralizados. Este puede ser un proceso
que requiere mucho tiempo y puede provocar retrasos en la incorporación de un nuevo cliente. Blockchain
puede proporcionar una solución a este problema al compartir de forma segura un libro mayor distribuido entre
todas las instituciones financieras que contiene identidades verificadas y precisas de los clientes. Este libro
mayor distribuido solo puede actualizarse por consenso entre los participantes, proporcionando así
transparencia y auditabilidad. Esto no solo puede reducir los costos, sino que también permite cumplir con los
requisitos normativos y de cumplimiento de una manera mejor y más consistente.
En el caso de AML, debido a la naturaleza inmutable, compartida y transparente de la cadena de bloques, los
reguladores pueden acceder fácilmente a una cadena de bloques privada donde pueden obtener datos para los
informes reglamentarios relevantes. Esto también resultará en la reducción de la complejidad y los costos
relacionados con el actual paradigma regulatorio de informes donde los datos se obtienen de varios sistemas
heredados y dispares y se agregan y formatean juntos para fines de informes. Blockchain puede proporcionar
una vista compartida única de todas las transacciones financieras en el sistema que son criptográficamente
seguras, auténticas y auditables, lo que reduce los costos y la complejidad asociados con los métodos de
informes regulatorios empleados actualmente.
Machine Translated by Google
Medios de comunicación
Los temas clave en la industria de los medios giran en torno a la distribución de contenido, la gestión de
derechos y el pago de regalías a los artistas. Por ejemplo, la música digital se puede copiar muchas veces sin
ninguna restricción y cualquier intento de aplicar la protección contra copias ha sido pirateado de una forma u
otra. No hay control sobre la distribución del contenido que produce un músico o compositor; se puede copiar
tantas veces como sea necesario sin ninguna restricción y, en consecuencia, tiene un impacto en los pagos de
regalías. Además, los pagos no siempre están garantizados y se basan en las cifras tradicionales de tiempo aire.
Todos estos problemas que giran en torno a la protección contra copias y los pagos de regalías se pueden
resolver conectando a los consumidores, artistas y todos los actores de la industria, lo que permite la transparenci
Blockchain puede proporcionar una red en la que se garantiza criptográficamente que la música digital es
propiedad solo de los consumidores que pagan por ella. Este mecanismo de pago está controlado por un
contrato inteligente en lugar de una agencia o autoridad de medios centralizada. Los pagos se realizarán
automáticamente según la lógica integrada en el contrato inteligente y la cantidad de 'descargas'. Además, la
copia ilegal de archivos de música digital se puede detener por completo porque todo se graba y se posee de
manera inmutable y transparente en blockchain. Un archivo de música, por ejemplo, se puede almacenar con la
información del propietario y la marca de tiempo que se puede rastrear en toda la red de la cadena de bloques.
Además, los consumidores que poseen una copia legal de algún contenido están vinculados criptográficamente
al contenido que tienen y no pueden transferirse a otro propietario a menos que el propietario lo autorice. Los
derechos de autor y las transferencias se pueden administrar fácilmente a través de la cadena de bloques una
vez que todo el contenido digital se registra de forma inmutable en la cadena de bloques. Los contratos inteligentes
Machine Translated by Google
Resumen
Hay muchas aplicaciones de la tecnología blockchain y, como se analiza en el capítulo, se pueden
implementar en varias industrias para generar múltiples beneficios para las soluciones existentes. En
este capítulo, se han discutido cinco industrias principales que pueden beneficiarse de blockchain.
Primero se habló de IoT, que es otra tecnología revolucionaria en sí misma; y al combinarlo con
blockchain, se pueden abordar varias limitaciones fundamentales, lo que genera enormes beneficios para la
industria de IoT. Se ha prestado más atención a IoT, ya que es el candidato más grande y más preparado para
adaptar la tecnología blockchain. Ya han surgido casos prácticos de uso y plataformas en forma de plataforma
como servicio (PaaS) para IoT basado en blockchain, como IBM Watson IoT blockchain.
IBM Blue Horizon ahora también está disponible para experimentación, que es una red IoT descentralizada
basada en blockchain. En segundo lugar, se discutieron las aplicaciones en el sector gubernamental
mediante las cuales varios procesos gubernamentales, como la seguridad nacional, las tarjetas de
identificación y los desembolsos de beneficios, pueden hacerse transparentes, seguros y más sólidos.
Además, se discutieron problemas en el sector financiero con las posibles soluciones que puede brindar la
tecnología blockchain. Aunque el sector financiero está explorando las posibilidades de usar blockchain con
gran energía y entusiasmo, todavía está lejos de los sistemas basados en blockchain listos para la producción.
Finalmente, también se trataron algunos aspectos del sector de la salud y la industria musical. Todos estos
casos de uso y muchos más en la industria se basan en pilares proporcionados por los atributos centrales de
la tecnología blockchain, como la descentralización, la transparencia, la confiabilidad y la seguridad. Sin
embargo, se deben abordar ciertos desafíos antes de que la tecnología blockchain se pueda adaptar por compl
Machine Translated by Google
Capítulo 12. Escalabilidad y otros desafíos
Este capítulo tiene como objetivo proporcionar una introducción a varios desafíos que deben abordarse antes de
que las cadenas de bloques puedan convertirse en una tecnología convencional. Aunque se han desarrollado varios
casos de uso y sistemas de prueba de concepto y la tecnología funciona bien para muchos de los escenarios, todavía
es necesario abordar algunas limitaciones fundamentales que están presentes en las cadenas de bloques para que
esta tecnología sea más adaptable.
En la parte superior de la lista de estos problemas se encuentra la escalabilidad y luego la privacidad. Ambas son
limitaciones importantes para abordar, especialmente porque se prevé que las cadenas de bloques también se
utilicen en industrias que exigen privacidad. Existen requisitos específicos sobre la confidencialidad de las
transacciones en finanzas, derecho y salud, mientras que la escalabilidad es generalmente una preocupación
cuando las cadenas de bloques no cumplen con los niveles de rendimiento adecuados que esperan los usuarios.
Estos dos problemas se están convirtiendo en factores que inhiben la aceptación más amplia de la tecnología
blockchain. En este capítulo se presentará una revisión de la investigación actualmente propuesta y en curso en
estas dos áreas específicas. Además de la privacidad y la seguridad, otros desafíos incluyen la regulación, la
integración, la adaptabilidad y la seguridad en general. Aunque, en bitcoin blockchain, la seguridad es probablemente
a prueba de balas y ha resistido la prueba del tiempo, todavía hay algunas advertencias que pueden permitir que la
seguridad se vea comprometida hasta cierto punto en algunos escenarios sutiles. Además, existen algunas
preocupaciones de seguridad razonables en otras cadenas de bloques, como Ethereum, con respecto a los contratos
inteligentes, los ataques de denegación de servicio y la gran superficie de ataque. Todo esto será discutido en detalle e
Machine Translated by Google
Escalabilidad
Este problema ha sido foco de intenso debate, investigación rigurosa y atención de los medios durante los
últimos años. Este es el problema más importante que podría significar la diferencia entre una adaptabilidad
más amplia de las cadenas de bloques o un uso privado limitado solo por consorcios. Como resultado de una
investigación sustancial en esta área, se han propuesto muchas soluciones, que se analizan en la siguiente
sección.
Desde una perspectiva teórica, el enfoque general para abordar el problema de la escalabilidad generalmente
gira en torno a las mejoras a nivel de protocolo. Por ejemplo, una solución comúnmente mencionada para la
escalabilidad de bitcoin es aumentar su tamaño de bloque. Otras propuestas incluyen soluciones fuera de la
cadena que descargan cierto procesamiento a redes fuera de la cadena, por ejemplo, redes estatales fuera de la
cadena. Con base en las soluciones mencionadas anteriormente, en general, las propuestas se pueden dividir en
dos categorías: soluciones en cadena que se basan en la idea de cambiar los protocolos fundamentales en los
que opera la cadena de bloques y soluciones fuera de la cadena que hacen uso de la red y el procesamiento.
recursos fuera de la cadena para mejorar la cadena de bloques.
Miller y otros han propuesto recientemente otro enfoque para abordar las limitaciones en blockchains en su
documento de posición On Scaling Decentralized Blockchains. En este documento, se muestra que una cadena
de bloques se puede dividir en varias capas abstractas llamadas planos. Cada avión es responsable de realizar
funciones específicas. Estos incluyen el plano de red, el plano de consenso, el plano de almacenamiento, el plano
de vista y el plano lateral. Esta abstracción permite abordar los cuellos de botella y las limitaciones en cada plano
de forma individual y estructurada. A continuación se proporciona una breve descripción general de cada capa
con algunas referencias al sistema bitcoin.
Primero se discute el plano de la red. Una función clave del plano de red es la propagación de transacciones. Se ha
identificado en el documento mencionado anteriormente que en bitcoin, este plano infrautiliza el ancho de banda
de la red debido a la forma en que un nodo realiza la validación de la transacción antes de la propagación y la
duplicación de la propagación de la transacción, primero en la fase de transmisión de la transacción y luego
después de la minería. en un bloque Cabe señalar que este problema fue abordado por BIP 152 (relé de bloque comp
La segunda capa se llama el plano de consenso. Esta capa es responsable de extraer y lograr el consenso. Los
cuellos de botella en esta capa giran en torno a las limitaciones en los algoritmos de Prueba de trabajo, por lo que
el aumento de la velocidad de consenso y el ancho de banda da como resultado el compromiso de la seguridad
de la red debido a un aumento en la cantidad de bifurcaciones.
El plano de almacenamiento es la tercera capa, que almacena el libro mayor. Los problemas en esta capa giran
en torno a la necesidad de que cada nodo mantenga una copia de todo el libro mayor, lo que genera ciertas
ineficiencias, como un mayor ancho de banda y requisitos de almacenamiento. Bitcoin tiene un método disponible
llamado poda, que permite que un nodo funcione sin necesidad de descargar la cadena de bloques completa. Esta
funcionalidad ha resultado en importantes mejoras desde el punto de vista del almacenamiento.
El siguiente en la lista es el plano de vista, que propone una optimización que se basa en la propuesta que
Machine
Los Translated
mineros by Google
de bitcoin no necesitan la cadena de bloques completa para operar, y se puede construir una vista a
partir del libro de contabilidad completo como una representación del estado completo del sistema, que es suficiente
para que los mineros funcionen. La implementación de vistas eliminará la necesidad de nodos de minería para
almacenar la cadena de bloques completa.
Finalmente, el plano lateral ha sido propuesto por los autores del trabajo de investigación mencionado anteriormente.
Este plano representa la idea de transacciones fuera de la cadena en las que el concepto de pago o canales de
transacción se utiliza para descargar el procesamiento de transacciones entre los participantes, pero aún está respaldado
por la cadena de bloques principal de bitcoin.
El modelo mencionado anteriormente se puede utilizar para describir las limitaciones y mejoras en los diseños
actuales de blockchain de manera estructurada. Además, hay varias estrategias generales que se han propuesto en
los últimos años que pueden abordar las limitaciones en los diseños actuales de blockchain, como Ethereum y bitcoin.
Estos enfoques también se caracterizan y discuten individualmente en la siguiente sección.
Machine Translated by Google
Aumento del tamaño del bloque
Esta es la propuesta más debatida para aumentar el rendimiento de blockchain (rendimiento de procesamiento
de transacciones). Actualmente, bitcoin puede procesar solo de tres a siete transacciones por segundo, lo cual
es un factor inhibidor importante en la adaptación de la cadena de bloques de bitcoin para el procesamiento de micr
El tamaño del bloque en bitcoin está codificado para ser de 1 MB, pero si se aumenta el tamaño del
bloque, puede contener más transacciones y puede resultar en un tiempo de confirmación más rápido. Hay
varias propuestas de mejora de Bitcoin (BIP) hechas a favor del aumento del tamaño del bloque. Estos incluyen
BIP 100, BIP 101, BIP 102, BIP 103 y BIP 109. En Ethereum, el tamaño del bloque no está limitado por la
codificación; en cambio, está controlado por el límite de gas. En teoría, no hay límite en el tamaño de un bloque
en Ethereum porque depende de la cantidad de gas, que puede aumentar con el tiempo. Esto es posible porque
los mineros pueden aumentar el límite de gas para bloques posteriores si se alcanzó el límite en el bloque
anterior.
Machine Translated by Google
Reducción de intervalo de bloque
Otra propuesta es reducir el tiempo entre cada generación de bloques. El tiempo entre bloques se puede
reducir para lograr una finalización más rápida de los bloques, pero puede resultar en una menor seguridad
debido al mayor número de bifurcaciones. Ethereum ha logrado un tiempo de bloqueo de aproximadamente 14
segundos y, en ocasiones, puede aumentar. Esta es una mejora significativa con respecto a la cadena de
bloques de bitcoin, que tarda 10 minutos en generar un nuevo bloque. En Ethereum, el problema de la gran
cantidad de bloques huérfanos resultantes de tiempos más pequeños entre bloques se mitiga mediante el uso
del protocolo Greedy Heaviest Observed Subtree (GHOST) mediante el cual los bloques huérfanos (tíos)
también se incluyen en la determinación de la cadena válida. Una vez que Ethereum pase a la prueba de
participación, esto se volverá irrelevante ya que no se requerirá minería y se puede lograr la finalización casi inme
Machine Translated by Google
Tablas de búsqueda de Bloom invertibles
Este es otro enfoque que se ha propuesto para reducir la cantidad de datos necesarios para
transferir entre los nodos de bitcoin. Las tablas de búsqueda Invertible Bloom (IBLT) fueron
propuestas originalmente por Gavin Andresen, y la atracción clave de este enfoque es que no da como
resultado una bifurcación dura de bitcoin si se implementa. La idea clave se basa en el hecho de que no
es necesario transferir todas las transacciones entre nodos; en su lugar, solo se transfieren aquellos que
aún no están disponibles en el grupo de transacciones del nodo de sincronización. Esto permite una
sincronización más rápida del grupo de transacciones entre nodos, lo que aumenta la escalabilidad genera
Machine Translated by Google
fragmentación
La fragmentación no es una técnica nueva y se ha utilizado en bases de datos distribuidas para escalabilidad
como MongoDB y MySQL. La idea clave detrás de la fragmentación es dividir las tareas en múltiples partes que
luego son procesadas por múltiples nodos. Esto da como resultado un rendimiento mejorado y requisitos de
almacenamiento reducidos. En las cadenas de bloques, se emplea un esquema similar mediante el cual el estado
de la red se divide en múltiples fragmentos. El estado generalmente incluye saldos, código, nonce y
almacenamiento. Los fragmentos son particiones débilmente acopladas de una cadena de bloques que se
ejecutan en la misma red. Hay algunos desafíos relacionados con la comunicación entre fragmentos y el consenso
sobre la historia de cada fragmento. Esta es un área abierta para la investigación.
Machine Translated by Google
Canales estatales
Este es otro enfoque propuesto para acelerar la transacción en una red blockchain. La idea básica es utilizar canales
laterales para actualizar el estado y procesar transacciones fuera de la cadena principal; una vez que se finaliza el estado,
se vuelve a escribir en la cadena principal, descargando así las operaciones que consumen mucho tiempo de la cadena
de bloques principal. Los canales estatales funcionan mediante la realización de los siguientes tres pasos:
1. Primero, una parte del estado de la cadena de bloques está bloqueada bajo un contrato inteligente, lo que garantiza el acue
lógica de negocios entre los participantes.
2. Ahora se inicia el procesamiento de transacciones fuera de la cadena y la interacción entre los participantes que
actualizar el estado solo entre ellos por ahora. En este paso, se puede realizar casi cualquier número de transacciones
sin necesidad de la cadena de bloques y esto es lo que hace que el proceso sea rápido y el mejor candidato para
resolver los problemas de escalabilidad de la cadena de bloques. Sin embargo, se podría argumentar que esta no es
una solución real en blockchain como, por ejemplo, fragmentación, pero el resultado final es una red más rápida, liviana
y robusta que puede resultar muy útil en redes de micropagos, redes IoT y muchas otras aplicaciones.
3. Una vez que se alcanza el estado final, el canal de estado se cierra y el estado final se vuelve a escribir en la cadena de
bloques principal. En esta etapa, la parte bloqueada de la cadena de bloques también se desbloquea.
Las cadenas de bloques privadas son intrínsecamente rápidas porque no se requiere una descentralización real y
los participantes en la red no necesitan minar; en cambio, solo pueden validar transacciones. Esto se puede
considerar como una solución al problema de escalabilidad en las cadenas de bloques públicas; sin embargo,
esta no es la solución al problema de escalabilidad. Además, debe tenerse en cuenta que las cadenas de bloques
privadas solo son adecuadas en áreas y configuraciones específicas.
Machine Translated by Google
Prueba de participación
En lugar de utilizar la Prueba de trabajo, las cadenas de bloques basadas en el algoritmo de Prueba de participación son fundamentalmente más r
Cadenas laterales
Las cadenas laterales pueden mejorar la escalabilidad indirectamente al permitir que muchas cadenas laterales se ejecuten junto con la cadena
de bloques principal al tiempo que permiten el uso de cadenas laterales quizás comparativamente menos seguras y más rápidas para realizar
transacciones, pero aún vinculadas a la cadena de bloques principal. La idea central de las cadenas laterales se llama clavija bidireccional, que
permite la transferencia de monedas de una cadena principal a una cadena lateral y viceversa.
subcadenas
Esta es una técnica relativamente nueva propuesta recientemente por Peter R. Rizun que se basa en la idea de bloques débiles que se crean en
capas hasta que se encuentra un bloque fuerte. Los bloques débiles se pueden definir como aquellos bloques que no se han podido extraer al
cumplir con los criterios de dificultad de la red estándar, pero han hecho suficiente trabajo para cumplir con otro objetivo de dificultad más
débil. Los mineros pueden construir subcadenas superponiendo bloques débiles, a menos que se encuentre un bloque que cumpla con el
objetivo de dificultad estándar. En este punto, la subcadena se cierra y se convierte en el bloque fuerte. Las ventajas de este enfoque incluyen
un tiempo de espera reducido para la primera verificación de una transacción. Esta técnica también da como resultado una posibilidad reducida
de bloques huérfanos y acelera el procesamiento de transacciones. Esta es también una forma indirecta de abordar el problema de la
escalabilidad. Las subcadenas no requieren ninguna bifurcación suave o bifurcación dura para implementarse, pero necesitan la aceptación de
la comunidad.
Cadenas de árboles
También hay otras propuestas para aumentar la escalabilidad de bitcoin, como las cadenas de árboles que cambian el diseño de la
cadena de bloques de un modelo secuencial lineal a un árbol. Este árbol es básicamente un árbol binario que desciende de la cadena principal
de bitcoin. Este enfoque es similar a la implementación de la cadena lateral, eliminando la necesidad de un cambio de protocolo importante o un
aumento del tamaño del bloque. Permite mejorar el rendimiento de las transacciones. En este esquema, las propias cadenas de bloques se
fragmentan y distribuyen por la red para lograr la escalabilidad. Además, no se requiere minería para validar los bloques en las cadenas de
árboles; en cambio, los usuarios pueden verificar de forma independiente el encabezado del bloque. Sin embargo, esta idea aún no está lista
Además de las técnicas generales mencionadas anteriormente, Christian Decker también ha propuesto algunas mejoras específicas de bitcoin en su
libro Sobre la escalabilidad y seguridad de Bitcoin. Esta propuesta se basa en la idea de acelerar el tiempo de propagación ya que el mecanismo
de propagación de información actual da como resultado bifurcaciones de blockchain. Estas técnicas incluyen la minimización de la verificación,
la canalización de la propagación de bloques y el aumento de la conectividad. Estos cambios no requieren cambios fundamentales a nivel de
protocolo; en cambio, estos cambios se pueden implementar de forma independiente en el software del nodo bitcoin. Con respecto a la
minimización de la verificación, se ha observado que el proceso de verificación de bloques está contribuyendo al retraso de la propagación. La
razón detrás de esto es que un nodo tarda mucho en verificar la unicidad del bloque y las transacciones dentro del bloque. Se ha sugerido que
un
Machine
node puedeTranslated
enviar el by Googlede inventario tan pronto como se completen las comprobaciones iniciales de prueba de trabajo
mensaje
y validación de bloques. De esta manera, la propagación se puede mejorar simplemente realizando la primera comprobación
de dificultad y sin esperar a que finalice la validación de la transacción. Además de la propuesta anterior, también se ha
sugerido la canalización de la propagación de bloques, que se basa en la idea de anticipar la disponibilidad de un bloque. En
este esquema, la disponibilidad de un bloque ya se anuncia sin esperar la disponibilidad real del bloque, lo que reduce el
tiempo de ida y vuelta entre nodos. Finalmente, el problema de las largas distancias entre el originador de la transacción y los
nodos también contribuye a la ralentización de la propagación de bloques. Se ha demostrado en la investigación realizada por
Christian Decker que el aumento de la conectividad puede reducir el retraso en la propagación de bloques y transacciones.
Esto es posible porque, si en algún momento el nodo bitcoin está conectado a muchos otros nodos, se reducirá la distancia
entre los nodos y se puede acelerar la propagación de la información en la red.
Lo más probable es que una solución elegante a los problemas de escalabilidad sea una combinación de algunos o
todos los enfoques generales mencionados anteriormente. Varias iniciativas tomadas para abordar los problemas de
escalabilidad y seguridad en las cadenas de bloques ya están casi listas para su implementación. Por ejemplo, el testigo
segregado de bitcoin es una propuesta que puede ayudar enormemente con la escalabilidad y solo necesita una bifurcación
blanda para que se implemente. La idea clave detrás del llamado segwit es separar los datos de la firma de las transacciones,
lo que resuelve el problema de la maleabilidad de la transacción y permite aumentar el tamaño del bloque.
Otra propuesta, Bitcoin NG, que se basa en la idea de microbloques y elección de líder, ha ganado cierta atención
recientemente. La idea central es dividir los bloques en dos tipos, a saber, bloques líderes (también llamados bloques clave)
y microbloques. Los bloques líderes son responsables de la Prueba de trabajo, mientras que los microbloques contienen
transacciones reales. Los microbloques no requieren ninguna Prueba de trabajo y son generados por el líder electo en cada
ciclo de generación de bloques. Este ciclo de generación de bloques es iniciado por un bloque líder. El único requisito es
firmar los microbloques con la clave privada del líder electo. El líder elegido (minero) puede generar los microbloques a una
velocidad muy alta, lo que resulta en un mayor rendimiento y velocidad de transacción.
Por otro lado, recientemente, un artículo malva de Ethereum escrito por Vitalik Buterin ha sido presentado en Ethereum
Devcon 2 en Shanghái; describe la visión de un Ethereum escalable. La propuesta de malva se basa en una combinación de
fragmentación e implementación del algoritmo de prueba de participación.
Ciertos objetivos, como la ganancia de eficiencia a través de la Prueba de participación, el tiempo de bloque máximamente
rápido, la finalidad económica, la escalabilidad, la comunicación entre fragmentos y la resistencia a la censura se han identificad
Machine Translated by Google
Privacidad
La privacidad de las transacciones es una propiedad muy deseada de las cadenas de bloques. Sin embargo,
debido a su propia naturaleza, especialmente en las cadenas de bloques públicas, todo es transparente, lo
que inhibe su uso en varias industrias donde la privacidad es de suma importancia, como las finanzas, la
salud y muchas otras. Se han hecho diferentes propuestas para abordar el tema de la privacidad y ya se han log
Varias técnicas, como la ofuscación de indistinguibilidad, el uso de cifrado homomórfico, pruebas de
conocimiento cero y firmas de anillo. Todas estas técnicas tienen sus ventajas y desventajas y se analizan
en las siguientes secciones.
Machine Translated by Google
Ofuscación de indistinguibilidad
Esta técnica criptográfica puede servir como solución mágica para todos los problemas de privacidad y
confidencialidad en las cadenas de bloques, pero la tecnología aún no está lista para los despliegues de
producción. La ofuscación de indistinguibilidad (IO) permite la ofuscación del código, que es un tema de
investigación muy maduro en criptografía y, si se aplica a las cadenas de bloques, puede servir como un
mecanismo de ofuscación irrompible que convertirá los contratos inteligentes en una caja negra. La idea
clave detrás de IO es lo que los investigadores llaman un rompecabezas multilineal, que básicamente ofusca
el código del programa mezclándolo con elementos aleatorios, y si el programa se ejecuta según lo previsto,
producirá el resultado esperado, pero cualquier otra forma de ejecución generaría el El programa se ve
aleatorio y basura. Esta idea fue propuesta por primera vez por Sahai y otros en su artículo de investigación
Candidate Indistinguibility Ofuscation and Functional Encryption for All Circuits.
Machine Translated by Google
Cifrado homomórfico
Este tipo de cifrado permite realizar operaciones sobre datos cifrados. Imagine un escenario en el que
los datos se envían a un servidor en la nube para su procesamiento. El servidor lo procesa y devuelve la
salida sin saber nada sobre los datos que ha procesado. Esta también es un área madura para la
investigación y el cifrado completamente homomórfico que permite todas las operaciones en datos
cifrados aún no se puede implementar completamente en producción; sin embargo, ya se han logrado
importantes avances en este campo. Una vez implementado en cadenas de bloques, puede permitir el
procesamiento de texto cifrado, lo que permitirá la privacidad y la confidencialidad de las transacciones
de forma inherente. Por ejemplo, los datos almacenados en la cadena de bloques se pueden cifrar mediante
el cifrado homomórfico y se pueden realizar cálculos sobre esos datos sin necesidad de descifrarlos, lo
que proporciona un servicio de privacidad en las cadenas de bloques. Este concepto también ha sido
implementado en un proyecto llamado Enigma por el Media Lab del MIT. Enigma es una red peer-to-peer
que permite que varias partes realicen cálculos en datos cifrados sin revelar nada sobre los datos.
Machine Translated by Google
Pruebas de conocimiento cero
Las pruebas de conocimiento cero se han implementado recientemente en Zcash con éxito, como se vio en
capítulos anteriores. Más específicamente, se han implementado SNARK para garantizar la privacidad en la
cadena de bloques. La misma idea se puede implementar en Ethereum y otras cadenas de bloques también.
La integración de Zcash en Ethereum ya es un proyecto de investigación muy activo que está siendo llevado a
cabo por el equipo de I+D de Ethereum y Zcash Company.
Machine Translated by Google
Canales estatales
La privacidad mediante canales estatales también es posible, simplemente debido al hecho de que todas las transacciones
se ejecutan fuera de la cadena y la cadena de bloques principal no ve la transacción en absoluto, excepto la salida del
estado final, lo que garantiza la privacidad y la confidencialidad.
Machine Translated by Google
Computación multiparte segura
El concepto de computación multiparte segura no es nuevo y se basa en la noción de que los datos se dividen
en múltiples particiones entre las partes participantes bajo un mecanismo de intercambio secreto que luego
realiza el procesamiento real de los datos sin necesidad de reconstruirlos en una sola máquina.
La salida producida después del procesamiento también se comparte entre las partes.
Machine Translated by Google
Uso de hardware para proporcionar confidencialidad.
Las plataformas informáticas de confianza se pueden utilizar para proporcionar un mecanismo mediante
el cual se puede lograr la confidencialidad de las transacciones en una cadena de bloques, por ejemplo, mediante
el uso de Intel Software Guard Extension (SGX), que permite que el código se ejecute en un entorno protegido por
hardware denominado enclave . . Una vez que el código se ejecuta con éxito en el enclave aislado, puede producir
una prueba llamada cotización que los servidores en la nube de Intel pueden certificar. Sin embargo, es preocupante
que confiar en Intel resulte en cierto nivel de centralización y no esté en línea con el verdadero espíritu de la
tecnología blockchain. Sin embargo, esta solución tiene sus méritos y, en realidad, muchas plataformas ya usan
chips Intel de todos modos, por lo que confiar en Intel puede ser aceptable en algunos escenarios.
Si esta tecnología se aplica en contratos inteligentes, una vez que un nodo haya ejecutado el contrato
inteligente, puede producir la cotización como prueba de ejecución correcta y exitosa y otros nodos solo tendrán
que verificarla. Esta idea se puede ampliar aún más utilizando cualquier Trusted Execution Environment (TEE)
que puede proporcionar la misma funcionalidad que un enclave y está disponible incluso en dispositivos móviles
con Near Field Communication (NFC) y un elemento seguro.
Machine Translated by Google
Coinjoin
Coinjoin es una técnica que se utiliza para anonimizar las transacciones de bitcoin
mezclándolas de forma interactiva. La idea se basa en formar una sola transacción a partir de múltiples
entidades sin causar ningún cambio en las entradas y salidas. Elimina el vínculo directo entre remitentes
y destinatarios, lo que significa que una sola dirección ya no puede asociarse con transacciones, lo
que podría conducir a la identificación de los usuarios. Coinjoin necesita la cooperación entre múltiples
partes que estén dispuestas a crear una sola transacción mezclando pagos. Por lo tanto, debe tenerse
en cuenta que, si un solo participante en el esquema Coinjoin no cumple con el compromiso asumido
de cooperar para crear una sola transacción al no firmar las transacciones según lo requerido, entonces
puede resultar en un ataque de denegación de servicio. En este protocolo, no hay necesidad de un único
tercero de confianza. Este concepto es diferente de mezclar un servicio que actúa como un tercero de
confianza o intermediario entre los usuarios de bitcoin y permite la mezcla de transacciones. Esta mezcla
de transacciones da como resultado la prevención del rastreo y la vinculación de pagos a un usuario en p
Machine Translated by Google
Transacciones confidenciales
Las transacciones confidenciales hacen uso de los compromisos de Pedersen para brindar confidencialidad.
Los esquemas de compromiso permiten que un usuario se comprometa con algún valor mientras lo
mantiene en secreto con la capacidad de revelarlo más tarde. Dos propiedades que deben cumplirse
para diseñar un esquema de compromiso son la vinculación y la ocultación. La vinculación garantiza
que el autor de la confirmación no pueda cambiar el valor elegido una vez confirmado, mientras que la
propiedad de ocultación garantiza que cualquier adversario no pueda encontrar el valor original con el que
se comprometió el autor de la confirmación. Los compromisos de Pedersen también permiten operaciones de
suma y preservan la propiedad conmutativa de los compromisos, lo que lo hace específicamente útil para
proporcionar confidencialidad en las transacciones de bitcoin. En otras palabras, admite el cifrado homomórfico
de valores. El uso de esquemas de compromiso permite ocultar los valores de pago en una transacción de
bitcoin. Este concepto ya está implementado en Elements Project (https://elementsproject.org/).
Machine Translated by Google
Mimble Wimble
El esquema MimbleWimble se propuso de manera un tanto misteriosa en el canal IRC de bitcoin y desde
entonces ha ganado mucha popularidad. MimbleWimble amplía la idea de las transacciones confidenciales y
Coinjoin, que permite la agregación de transacciones sin necesidad de interactividad. Sin embargo, no admite
el uso del lenguaje de secuencias de comandos de bitcoin junto con otras características del protocolo estándar
de Bitcoin. Esto lo hace incompatible con el protocolo Bitcoin existente. Por lo tanto, puede implementarse
como una cadena lateral de bitcoin o por sí solo como una criptomoneda alternativa.
Este esquema puede abordar problemas de privacidad y escalabilidad a la vez. Los bloques creados con la
técnica MimbleWimble no contienen transacciones como en las cadenas de bloques de bitcoin tradicionales;
en cambio, estos bloques se componen de tres listas: una lista de entrada, una lista de salida y algo llamado
excesos , que son listas de firmas y diferencias entre salidas y entradas. La lista de entrada es básicamente
referencias a las salidas antiguas, y la lista de salida contiene salidas de transacciones confidenciales.
Estos bloques son verificables por los nodos mediante el uso de firmas, entradas y salidas para garantizar la
legitimidad del bloque. A diferencia de bitcoin, las salidas de transacciones de MimbleWimble solo contienen
claves públicas, y la diferencia entre las salidas antiguas y nuevas la firman todos los participantes involucrados
Machine Translated by Google
Seguridad
Aunque las cadenas de bloques son generalmente seguras y utilizan criptografía asimétrica y
simétrica según se requiere en toda la red de cadenas de bloques, todavía hay algunas advertencias que pueden
comprometer la seguridad de la cadena de bloques.
Los ataques de eclipse de información en bitcoin pueden resultar en el doble de gasto. La idea detrás de los
ataques de eclipse es que se engaña al nodo bitcoin para que se conecte solo con las direcciones IP del nodo
atacante. Esto abre la posibilidad de un ataque del 51 % por parte del atacante. Esto se ha abordado hasta
cierto punto en el cliente bitcoin v0.10.1.
Machine Translated by Google
Seguridad de contrato inteligente
Recientemente, se ha iniciado mucho trabajo en la seguridad de los contratos inteligentes y, especialmente, se está
discutiendo e investigando la verificación formal de los contratos inteligentes. Todo esto se desencadenó especialmente
debido al infame hackeo de DAO. La verificación formal es un proceso de verificación de un programa de computadora
para garantizar que cumple con ciertas declaraciones formales. Este es ahora un nuevo concepto y hay una serie de
herramientas disponibles para otros lenguajes que logran esto; por ejemplo, Frama-C está disponible para analizar
programas C. La idea clave detrás de la verificación formal es convertir el programa fuente en un conjunto de
declaraciones que sea comprensible para los probadores automatizados. Para este propósito, se usa comúnmente
Why3, y un verificador formal de solidez también hace uso de eso. Un verificador experimental pero operativo ya está
disponible en la solidez del navegador.
La seguridad de los contratos inteligentes es de suma importancia ahora, y también se han tomado muchas otras
iniciativas para idear métodos que puedan analizar programas de solidez y encontrar errores. Un ejemplo reciente
y seminal es Oyente, que es una herramienta creada por investigadores y se presentó en su artículo Making Smart
Contracts Smarter. En este documento se han descubierto y analizado varios errores de seguridad en los contratos
inteligentes. Estos incluyen la dependencia del pedido de transacciones, la dependencia de la marca de tiempo, las
excepciones mal manejadas, como la explotación del límite de profundidad de la pila de llamadas y la vulnerabilidad
de reingreso. El error de dependencia de orden de transacción básicamente explota los escenarios en los que el
estado percibido de un contrato podría no ser el estado del contrato al que cambia después de la ejecución.
Esta debilidad es un tipo de condición de carrera. También se denomina carga anticipada y es posible debido al hecho
de que se puede manipular el orden de las transacciones dentro de un bloque. Como todas las transacciones aparecen
primero en el grupo de memoria, las transacciones allí se pueden monitorear antes de que se incluyan en el bloque.
Esto permite enviar una transacción antes que otra transacción, lo que lleva a controlar el comportamiento de un
contrato inteligente.
Los errores de dependencia de la marca de tiempo son posibles en escenarios en los que la marca de tiempo del
bloque se utiliza como fuente de alguna toma de decisiones dentro del contrato, pero los mineros pueden manipular
las marcas de tiempo. El límite de profundidad de la pila de llamadas es otro error que puede aprovecharse debido al
hecho de que la profundidad máxima de la pila de llamadas de EVM es de 1024 fotogramas. Si se alcanza la profundidad
de la pila mientras se ejecuta el contrato, en ciertos escenarios, la instrucción de envío o llamada puede fallar, lo que
resulta en la falta de pago de los fondos. El error de profundidad de la pila de llamadas se solucionó en la bifurcación
dura EIP50. El error de reingreso se aprovechó en el ataque DAO para desviar millones de dólares a un DAO infantil. El
error de reingreso básicamente significa que una función puede llamarse repetidamente antes de que se haya
completado la invocación anterior (primera) de las funciones. Esto es particularmente inseguro en las funciones de retiro
Además de los errores mencionados anteriormente, hay varios otros problemas que deben tenerse en cuenta al
redactar contratos. Estos errores incluyen el hecho de que si envía fondos a otro contrato, trátelo con cuidado
porque el envío puede fallar e incluso si se usa throw como un mecanismo general , no funcionará.
Otros errores de software estándar, como el desbordamiento y el subdesbordamiento de enteros, también son
bastante significativos y cualquier uso de variables enteras debe implementarse cuidadosamente con solidez. Por ejemp
ElMachine
programaTranslated
dondebyseGoogle
usa uint8 para analizar elementos de una matriz con más de 255 elementos puede
generar un bucle sin fin. Esto ocurre porque uint8 está limitado a 256 números.
En los siguientes apartados se mostrarán dos ejemplos de verificación de contratos utilizando Why3 y
Oyente respectivamente.
Una vez que se compila la solidez y está disponible en la pestaña de verificación formal, se puede copiar
en el IDE en línea de Why3 disponible en http://why3.lri.fr/try/. El siguiente ejemplo muestra que verifica e
informa con éxito los errores de desbordamiento de enteros. Esta herramienta se encuentra en pleno
desarrollo, pero sigue siendo bastante útil. Además, esta herramienta o cualquier otra herramienta similar
no es una panacea. Incluso la verificación formal generalmente no debe considerarse una panacea porque
las especificaciones en primer lugar deben definirse adecuadamente:
Machine Translated by Google
por qué3
Herramienta Oyente
Actualmente, Oyente está disponible como una imagen de Docker para facilitar la prueba y la instalación.
Está disponible en https://github.com/ethereum/oyente, y se puede descargar y probar rápidamente. En el
siguiente ejemplo, se ha probado un contrato simple tomado de la documentación de Solidity que contiene un
error de reingreso y se muestra que Oyente analiza con éxito el código y encuentra el error:
Este código de muestra contiene un error de reingreso que básicamente significa que si un contrato está
interactuando con otro contrato o transfiriendo ether, en realidad está entregando el control a ese otro
contrato. Esto permite que el contrato llamado vuelva a llamar a la función del contrato desde el que ha
sido llamado sin esperar a que se complete. Por ejemplo, este error puede permitir volver a llamar a la función
de retiro que se muestra en el ejemplo anterior una y otra vez, lo que da como resultado obtener Ethers varias
veces. Esto es posible porque el valor compartido no se establece en 0 hasta el final de la función, lo que
significa que cualquier invocación posterior será exitosa, lo que resultará en retiros una y otra vez.
SeMachine
muestra Translated
un ejemplo by
de Google
Oyente ejecutándose para analizar el contrato que se muestra a continuación y, como se puede ver en el
siguiente resultado, el análisis ha encontrado correctamente el error de reingreso. Se propone que el error se maneje mediante una
combinación del patrón Checks-Effects-Interactions descrito en la documentación de solidity:
Resumen
En este capítulo, los lectores han sido introducidos a los aspectos de seguridad, confidencialidad y privacidad
de la tecnología blockchain. Se discutió la privacidad, que es otro factor inhibidor importante en la adaptación
de cadenas de bloques públicas para diversas industrias. A continuación, se discutió la seguridad de los
contratos inteligentes, que es un tema muy candente en la actualidad. Es un tema profundo y extenso, pero se
ha dado una breve introducción sobre varios aspectos, lo que debería servir como base sólida para futuras
investigaciones en esta área. Por ejemplo, la verificación formal por sí sola es un área extensa para la
investigación. Además, también se han proporcionado ejemplos de verificación formal para dar a los lectores
una idea de qué herramientas están disponibles. Cabe señalar que las herramientas mencionadas anteriormente
están en pleno desarrollo y carecen de varias características deseables. Además, la documentación es bastante
escasa; por lo tanto, se alienta a los lectores a estar atentos a los desarrollos, especialmente en torno a la
verificación formal y los desarrollos relacionados con el documento malva de Ethereum, ya que se desarrollará
rápidamente muy pronto. El campo de la seguridad de la cadena de bloques y especialmente la seguridad de los
contratos inteligentes está tan maduro ahora que se puede escribir un libro completo sobre el tema. Hay muchos
expertos e investigadores en la academia y el sector comercial explorando esta área y pronto habrá muchas herram
Machine Translated by Google
Capítulo 13. Panorama actual y lo que
sigue
La tecnología Blockchain cambiará la forma en que llevamos a cabo nuestro negocio diario. Ha
desafiado los modelos comerciales existentes y promete grandes beneficios en términos de ahorro
de costos y mayor eficiencia y transparencia. Este capítulo explorará los últimos desarrollos, las
tendencias emergentes, los problemas y las predicciones futuras sobre esta tecnología. Además,
en el capítulo se discutirán en detalle algunos temas relacionados con problemas de investigación abiert
Machine Translated by Google
Tendencias emergentes
La tecnología Blockchain está experimentando cambios rápidos y un desarrollo intenso debido al profundo interés
de los académicos y el sector comercial. A medida que la tecnología madura, recientemente han comenzado a
surgir algunas tendencias. Por ejemplo, las cadenas de bloques privadas han ganado bastante atención
recientemente debido a sus casos de uso específicos en las finanzas. Además, las cadenas de bloques empresariales
son otra nueva tendencia que tiene como objetivo desarrollar soluciones de cadenas de bloques que cumplan con los
requisitos de eficiencia, seguridad e integración a nivel empresarial. Algunas de las tendencias se enumeran a continua
Machine Translated by Google
Cadenas de bloques específicas de la aplicación (ASBC)
Actualmente, se nota una inclinación hacia los ASBC, por lo que una cadena de bloques o libro mayor
distribuido se desarrolla específicamente para una sola aplicación en mente y se enfoca en una industria
específica, por ejemplo, everledger, que es una cadena de bloques que se ha desarrollado para ser
utilizada para proporcionar un historial de rastreo inmutable y un registro de auditoría para diamantes y
otros artículos de alto valor. Este enfoque frustra cualquier intento de fraude porque todo lo relacionado
con la propiedad, la autenticidad y el valor de los artículos se verifica y registra en la cadena de bloques.
Esto es muy valioso para las agencias de seguros y de aplicación de la ley.
Machine Translated by Google
Cadenas de bloques de nivel empresarial
Dado que las cadenas de bloques en su forma original no están listas para su uso a nivel empresarial debido
a problemas de privacidad y escalabilidad, ha surgido una tendencia reciente en el desarrollo de cadenas de
bloques de nivel empresarial, mediante la cual varias empresas han comenzado a proporcionar soluciones de
cadenas de bloques de nivel empresarial que están listas para ser utilizadas. implementado e integrado a nivel
empresarial. Los requisitos como las pruebas, la documentación, la integración y la seguridad ya se abordan en
este tipo de solución y se pueden implementar con cambios mínimos o nulos a nivel empresarial. Esto contrasta
con las cadenas de bloques públicas, que no están reguladas y no cumplen con los requisitos de seguridad
específicos de nivel empresarial. Esto también implica que, por lo general, se supone que las cadenas de bloques
de nivel empresarial se implementan en configuraciones privadas; sin embargo, la implementación pública de
blockchain de nivel empresarial también es una posibilidad. 2016 ha sido un año en el que muchas empresas
emergentes de tecnología han comenzado a ofrecer soluciones blockchain de nivel empresarial, como bloq,
tylmez, chain y muchas otras. Esta tendencia continúa creciendo y 2017 verá más iniciativas tecnológicas como esta
Machine Translated by Google
Cadenas de bloques privadas
Ethereum se puede usar tanto en modo privado como público, mientras que hay algunos proyectos que se han
desarrollado únicamente como cadenas de bloques privadas, como Hyperledger y Corda.
Machine Translated by Google
Inauguración
En los últimos años han surgido muchas start-ups tecnológicas que están trabajando en proyectos blockchain
y están ofreciendo soluciones específicas para esta tecnología. En 2016, especialmente, se ha visto un
aumento significativo en la cantidad de nuevas empresas que ofrecen consultoría y soluciones de blockchain.
Machine Translated by Google
Fuerte interés de investigación
La tecnología Blockchain ha estimulado un intenso interés de investigación tanto en la academia como en
el sector comercial. En los últimos años, el interés ha aumentado considerablemente y ahora las principales
instituciones e investigadores de todo el mundo están explorando esta tecnología. Este aumento en el
interés se debe especialmente al hecho de que la tecnología blockchain puede ayudar a que las empresas
sean eficientes, reduzcan costos y hagan que las cosas sean transparentes. El interés académico se centra
en abordar problemas difíciles en criptografía, mecanismos de consenso, rendimiento y abordar otras
limitaciones en blockchains. Dado que la tecnología blockchain se encuentra bajo el paraguas más amplio
de los sistemas distribuidos, muchos investigadores de la investigación informática distribuida han centrado
su investigación en la tecnología blockchain. Por ejemplo, UCL tiene un departamento dedicado, el Centro
de Investigación de UCL para Tecnologías Blockchain, que se enfoca en la investigación de tecnología
blockchain. Otro ejemplo es el grupo de computación distribuida ETH Zurich que ha publicado una
investigación fundamental sobre la tecnología blockchain. Una revista reciente llamada Ledger Journal ha
publicado recientemente su primer número de trabajos de investigación. Está disponible en http://
www.ledgerjournal.org/ojs/index.php/ledger. Ahora hay equipos y departamentos dedicados a la investigación
y el desarrollo de blockchain en varios institutos académicos y comerciales. Aunque las iniciativas
mencionadas anteriormente no son una lista exhaustiva por ningún tramo de la imaginación, sigue siendo
una indicación sólida de que este es un tema de sumo interés para los investigadores, y se espera que se
vea más investigación y desarrollo en 2017 y más allá. Otra organización llamada The Initiative for
CryptoCurrencies and Contracts (IC3), también está realizando investigaciones en tecnologías de contratos
inteligentes y blockchain. IC3 tiene como objetivo abordar los problemas de rendimiento, confidencialidad y
seguridad en blockchains y contratos inteligentes y ejecuta múltiples proyectos para abordar estos problemas
Machine Translated by Google
Estandarización
La tecnología Blockchain aún no está lo suficientemente madura como para poder integrarse fácilmente con los sistemas exist
Incluso, tal como está la tecnología actual, dos redes de cadenas de bloques no pueden comunicarse fácilmente entre sí.
La estandarización ayudará a mejorar los aspectos de interoperabilidad, adopción e integración de la tecnología
blockchain. Recientemente se han hecho algunos intentos para abordar esto y el más notable de estos intentos es el
establecimiento de ISO/TC 307, que es un comité técnico con el objetivo de estandarizar la tecnología blockchain y de
contabilidad distribuida. El objetivo del comité gira en torno a aumentar la interoperabilidad y el intercambio de datos entre
usuarios, aplicaciones y sistemas. Por otro lado, la reciente creación de consorcios y esfuerzos colaborativos de código
abierto como R3 e Hyperledger ha ayudado con la estandarización de esta tecnología al compartir ideas, herramientas y
código con otros participantes. R3 trabaja con un consorcio de más de 80 bancos que tienen objetivos similares, lo que en
cierto modo da como resultado la estandarización. Hyperledger, por otro lado, tiene una arquitectura de referencia que se
puede usar para construir sistemas de cadena de bloques y cuenta con el respaldo de la fundación Linux y muchos otros
participantes de la industria. Otro ejemplo es el estándar abierto de cadena, que es un protocolo desarrollado para redes
financieras. El estándar de cadena OS1 ya está disponible, que se creó en colaboración con las principales instituciones
financieras de todo el mundo. Este estándar permite una liquidación más rápida de transacciones y un enrutamiento inmediato
de transacciones entre pares. Su objetivo es abordar los requisitos reglamentarios, de seguridad y de privacidad en las
tecnologías de cadena de bloques. OS1 también proporciona un marco para el desarrollo de contratos inteligentes y permite
al participante cumplir fácilmente con los requisitos de AML y KYC.
Los esfuerzos de estandarización de contratos inteligentes también han comenzado con un artículo fundamental escrito
por Lee y otros, que define formalmente las plantillas de contratos inteligentes y presenta una visión para la investigación
futura y las necesidades en investigación y desarrollo relacionados con contratos inteligentes. Este documento está
disponible en https://arxiv.org/abs/1608.00771v2. Además, se ha llevado a cabo una discusión sobre este tema en el Capítulo
12, Escalabilidad y otros desafíos y el Capítulo 6, Contratos inteligentes.
Todos los esfuerzos mencionados anteriormente son una clara indicación de que muy pronto surgirán estándares en la
industria que harán que la adopción de la tecnología blockchain sea más fácil y rápida. Los estándares también darán como
resultado un crecimiento exponencial de la industria de la cadena de bloques porque la disponibilidad de los estándares
eliminará obstáculos como la interoperabilidad.
Machine Translated by Google
Mejoras
En los últimos años se han realizado varias mejoras y sugerencias para desarrollar aún más las
cadenas de bloques existentes. La mayoría de estas sugerencias se han realizado en respuesta a
vulnerabilidades de seguridad y para abordar las limitaciones inherentes a la tecnología blockchain.
Existen ciertas limitaciones en la tecnología de cadena de bloques, como la escalabilidad, la
privacidad y la interoperabilidad, que deben abordarse antes de que pueda generalizarse como
cualquier otra tecnología. Recientemente, se han realizado tremendos esfuerzos para abordar los
problemas de escalabilidad en la tecnología blockchain, que se analizaron en el capítulo anterior.
Además, los desarrolladores realizan regularmente propuestas de mejora específicas de blockchain,
como BIP (propuestas de mejora de bitcoin) y EIP (propuestas de mejora de Ethereum), para abordar
diversas preocupaciones en estos sistemas. Algunas propuestas de mejora recientes y notables para
ambas cadenas se discutirán más adelante en este capítulo. Además, los avances recientes, como los
canales estatales, son ejemplos de que la tecnología blockchain está mejorando rápidamente y muy pron
Machine Translated by Google
Implementaciones del mundo real
Muchas pruebas de concepto se han desarrollado en los últimos años, especialmente en 2016, utilizando
tecnología blockchain. Surgieron algunas implementaciones específicas de la aplicación, como everledger para
el seguimiento de diamantes y filamentos para Internet de las cosas (IoT), pero todavía faltan en varias áreas.
Las implementaciones concretas, de la vida real y de un extremo a otro aún no están disponibles, especialmente
en la industria financiera. Esto parece no estar demasiado lejos ahora que ya se han desarrollado muchas
pruebas de concepto y se ha demostrado que funcionan; la siguiente etapa es implementarlos en escenarios de
la vida real. Por ejemplo, recientemente, un grupo de siete bancos acordó construir una Cadena Comercial Digital (DT
Machine Translated by Google
consorcios
2016 ha sido visto como un año en el que comenzaron los consorcios y los esfuerzos compartidos de
código abierto. Se espera que esta tendencia crezca y pronto surgirán más y más consorcios, comités y
esfuerzos de código abierto. Un buen ejemplo es R3, que ha desarrollado Corda con un consorcio de las
organizaciones financieras más grandes del mundo.
Machine Translated by Google
Respuestas a los desafíos
Ya, debido al intenso esfuerzo de investigación y al interés de la comunidad en la tecnología
blockchain, han comenzado a surgir respuestas a varios desafíos. Por ejemplo, el concepto de canales
estatales se ha desarrollado como respuesta a problemas de escalabilidad y privacidad en la cadena de
bloques. Usando canales estatales, la red Lightning de bitcoin y Raiden de Ethereum ya están casi listos
para su implementación. Además, surgieron varias soluciones de cadenas de bloques, como Kadena,
que abordaron directamente los problemas de confidencialidad en las cadenas de bloques. También se
han desarrollado otros conceptos, como Zcash, Coinjoin y transacciones confidenciales, que se
analizaron en capítulos anteriores. Esta tendencia también continuará creciendo en los próximos años e
incluso si se abordan casi todos los desafíos fundamentales en la tecnología blockchain, nunca se detendrá
Machine Translated by Google
Convergencia
La convergencia de otras tecnologías con blockchains trae consigo grandes beneficios. En esencia,
las cadenas de bloques brindan resiliencia, seguridad y transparencia que, cuando se combinan
con otras tecnologías, dan como resultado una tecnología muy poderosa que se complementa entre sí.
Por ejemplo, IoT puede obtener grandes beneficios cuando se implementa a través de cadenas de bloques,
como integridad, descentralización y escalabilidad. Se espera que la inteligencia artificial (IA) obtenga
beneficios de la tecnología blockchain y, de hecho, dentro de la tecnología blockchain, la IA se puede
implementar en forma de agentes autónomos (AA). Más ejemplos y las tecnologías convergentes
mencionadas anteriormente se discutirán en detalle en secciones posteriores de este capítulo.
Machine Translated by Google
Educación de la tecnología blockchain.
Si bien la tecnología blockchain ha despertado un gran interés entre tecnólogos, desarrolladores
y científicos en casi todas las industrias del mundo, hay una falta de recursos de aprendizaje
formales y material educativo. Como se trata de una nueva tecnología, varias instituciones de
renombre, como la Universidad de Princeton, ofrecen ahora varios cursos que presentan la
tecnología a cualquiera que quiera aprender sobre esta tecnología. Por ejemplo, la Universidad
de Princeton ha iniciado un curso sobre criptomonedas y monedas digitales que se imparte en
línea y es bastante popular. Muchas organizaciones privadas también ofrecen cursos de
capacitación similares en línea y presenciales. Se verán más esfuerzos como este en un futuro cercan
Machine Translated by Google
Empleo
Está surgiendo una tendencia reciente en el mercado laboral en la que los reclutadores ahora buscan expertos y
desarrolladores de blockchain que puedan programar para blockchain. Esto es especialmente relevante para la
industria financiera y, recientemente, muchas empresas emergentes y grandes organizaciones han comenzado a
contratar especialistas en blockchain. Por supuesto, se espera que esta tendencia crezca a medida que la
tecnología gane más aceptación y madurez. También existe la preocupación por la falta de desarrolladores de
blockchain, que seguramente se abordará a medida que la tecnología progrese y más y más desarrolladores
adquieran experiencia sobre la base del autoaprendizaje o obtengan capacitación formal de algunos proveedores de
Machine Translated by Google
Cripto-economía
Están surgiendo nuevos campos de investigación con blockchains, en particular, la criptoeconomía, que
es el estudio de los protocolos que rigen la economía digital descentralizada. Con la llegada de las
cadenas de bloques y las criptomonedas, la investigación en esta área también ha crecido. La
criptoeconomía ha sido definida como una combinación de matemáticas, criptografía, economía y teoría de
Machine Translated by Google
Investigación en criptografía
Aunque la criptografía fue un área de gran interés e investigación durante muchas décadas antes de la
invención de bitcoin, la tecnología blockchain ha dado lugar a un renovado interés en este campo. Con
la llegada de las cadenas de bloques y las tecnologías relacionadas, también hay un aumento
significativo en el interés por la criptografía. Especialmente en el área de la criptografía financiera, se
llevan a cabo y se publican regularmente nuevas investigaciones. Se están investigando tecnologías
como las pruebas de conocimiento cero, el cifrado completamente homomórfico y el cifrado funcional
para su uso en cadenas de bloques. En forma de Zcash, ya se han implementado pruebas de conocimiento
cero por primera vez a nivel práctico. Se puede ver que las cadenas de bloques y las criptomonedas han
ayudado con el avance de la criptografía y especialmente de la criptografía financiera.
Machine Translated by Google
Nuevos lenguajes de programación
También hay un mayor interés en el desarrollo de lenguajes de programación para desarrollar
contratos inteligentes. Los esfuerzos se centran más en lenguajes específicos de dominio, por ejemplo,
solidity para Ethereum y Pact para Kadena. Esto es solo un comienzo y es probable que se desarrollen
muchos lenguajes nuevos a medida que avanza la tecnología.
Machine Translated by Google
Investigación y desarrollo de hardware
Cuando se dio cuenta en 2010 de que los métodos actuales no son eficientes para extraer bitcoins, los mineros
comenzaron a orientarse hacia la optimización del hardware de minería. Estos esfuerzos iniciales incluyeron el uso
de unidades de procesamiento gráfico (GPU) y luego se usaron matrices de puertas programables en campo (FPGA)
después de que las GPU alcanzaron su límite. Muy rápidamente después de eso, surgieron los circuitos integrados
específicos de la aplicación (ASIC), que aumentaron significativamente el poder de la minería. Se espera que esta
tendencia crezca aún más, ya que ahora hay más investigación para optimizar aún más los ASIC al paralelizar y dismi
Además, también se espera que crezcan las iniciativas de programación de GPU porque ahora surgen nuevas
criptomonedas con bastante regularidad y muchas de ellas utilizan algoritmos de prueba de trabajo que pueden
beneficiarse de las capacidades de procesamiento de GPU. Por ejemplo, recientemente Zcash ha despertado el
interés en las plataformas de minería de GPU y la programación relacionada utilizando NVidia CUDA y OpenCL. El
objetivo es utilizar varias GPU en paralelo para optimizar las operaciones de minería. Además, se han realizado
algunas investigaciones en el campo del uso de hardware informático de confianza, como las extensiones Intel's
Software Guard (SGX), para abordar los problemas de seguridad en las cadenas de bloques. Además, el SGX de
Intel se ha utilizado en un algoritmo de consenso novedoso llamado Prueba de tiempo transcurrido (PoET) que se
ha discutido en capítulos anteriores. También se ha desarrollado otro proyecto, la computadora 21 bitcoin , que sirve
como plataforma para que los desarrolladores aprendan la tecnología bitcoin y desarrollen fácilmente aplicaciones para la plata
Se espera que la tendencia de investigación y desarrollo de hardware continúe y pronto se explorarán muchos más
escenarios de hardware.
Machine Translated by Google
Investigación en métodos formales y seguridad.
Con la realización de problemas de seguridad y vulnerabilidades en los lenguajes de programación de
contratos inteligentes, ahora existe un gran interés en la verificación y prueba formal de los contratos
inteligentes antes de las implementaciones de producción. Para ello, ya se están realizando varios esfuerzos, inclu
Hawk es otro ejemplo que se ha desarrollado para permitir la confidencialidad de los contratos inteligentes.
Machine Translated by Google
Alternativas a las cadenas de bloques
A medida que la tecnología blockchain avanzó en los últimos años, los investigadores comenzaron
a pensar en la posibilidad de crear plataformas que puedan brindar las garantías y los servicios
que brinda una cadena de bloques, pero sin la necesidad de una cadena de bloques. Esto ha
resultado en el desarrollo de Corda de R3, que de hecho no es realmente una cadena de bloques
porque no se basa en el concepto de bloques que contienen transacciones; en cambio, se basa en el
concepto de un objeto de estado que atraviesa toda la red Corda de acuerdo con los requisitos y reglas
de los participantes de la red que representan el estado más reciente de la red. Otros ejemplos incluyen
IOTA, que es una cadena de bloques de IoT que utiliza un gráfico acíclico dirigido (DAG) como un libro
mayor distribuido llamado Tangle, en lugar de una cadena de bloques convencional con bloques. Se afirma
que este libro mayor ha abordado problemas de escalabilidad junto con un alto nivel de seguridad que
incluso protege contra ataques basados en computación cuántica. Cabe señalar que bitcoin también está
algo protegido contra ataques cuánticos porque el ataque cuántico solo puede funcionar en claves públicas
expuestas que solo se revelan en la cadena de bloques si se realizan transacciones de envío y recepción.
Si la clave pública no se revela, como es el caso de las direcciones no utilizadas o las direcciones que
pueden haber sido utilizadas solo para recibir bitcoins, entonces se puede garantizar la seguridad cuántica.
Además, en bitcoin, es bastante fácil cambiar a otro protocolo de firma cuántica si es necesario.
Machine Translated by Google
Esfuerzos de interoperabilidad
La reciente comprensión de las limitaciones en torno a la interoperabilidad de las cadenas de bloques ha
resultado en el desarrollo de sistemas que pueden funcionar en varias cadenas de bloques. Un ejemplo reciente
es Qtum, que es una cadena de bloques compatible con las cadenas de bloques Ethereum y bitcoin. Hace uso
del mecanismo UTXO de bitcoin para la transferencia de valor y una máquina virtual Ethereum para contratos
inteligentes. Esto significa que los proyectos de Ethereum se pueden trasladar a Qtum sin necesidad de realizar nin
Machine Translated by Google
Cadena de bloques como servicio
Con el nivel actual de madurez de las plataformas en la nube, muchas empresas han comenzado
a proporcionar Blockchain como servicio (BaaS). Los ejemplos más destacados son Azure de
Microsoft, donde Ethereum blockchain se proporciona como un servicio, y la plataforma bluemix de IBM, qu
Se espera que esta tendencia crezca en los próximos años y surgirán más empresas que brinden
BaaS. EgaaS (Gobierno electrónico como servicio) es otro ejemplo que, de hecho, es BaaS pero
proporciona cadenas de bloques específicas de la aplicación para funciones de gobierno. El objetivo de
este proyecto es organizar y controlar cualquier actividad sin circulación de documentos ni sobrecarga buro
Machine Translated by Google
Esfuerzos para reducir el consumo de electricidad
Es claramente evidente a partir de la cadena de bloques de bitcoin que el mecanismo de Prueba de trabajo es muy ineficien
Por supuesto, este cálculo asegura la red bitcoin, pero no hay ningún otro beneficio de este cálculo y
desperdicia mucha energía eléctrica. Para reducir este desperdicio, ahora hay más enfoque en opciones más
ecológicas, como los algoritmos de prueba de participación que no necesitan enormes recursos como el algoritmo de
prueba de trabajo de bitcoin. Se espera que esta tendencia crezca, especialmente con la prueba de participación
planificada para Ethereum.
Machine Translated by Google
Propuestas de mejora
Dos tecnologías principales de blockchain, a saber, bitcoin y Ethereum, tienen un mecanismo
formal para proponer mejoras en los protocolos existentes. Estas se denominan propuestas de mejora,
BIP y EIP. Ambos mecanismos han permitido la participación de desarrolladores y entusiastas de la
tecnología de todo el mundo y han ayudado a Bitcoin y Ethereum a evolucionar hacia una tecnología
más madura y segura con el tiempo. En las secciones a continuación, se discuten propuestas de
mejora notables para ambas cadenas de bloques.
Machine Translated by Google
BIP
En esta sección, se discutirán algunos de los últimos BIP.
PBI 152
Esta propuesta es una sugerencia de mejora para introducir bloques compactos en la red bitcoin con el fin
de ahorrar ancho de banda. En su estado actual, el protocolo bitcoin no es eficiente en ancho de banda y
esta propuesta tiene como objetivo abordar ese problema al permitir la retransmisión de bloques compactos entre
Se requieren varios cambios, como nuevas estructuras de datos y mensajes, para implementar esta
propuesta. Actualmente, esta propuesta se encuentra en estado de borrador. Está disponible en GitHub en
https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki.
PBI 151
Esta propuesta de mejora se ha realizado para introducir el cifrado de comunicaciones peer-to-peer. Esta
propuesta se ha realizado en respuesta a varios problemas de seguridad en el protocolo Bitcoin, como la
posibilidad de análisis y manipulación del tráfico. Esta propuesta ayudará a frustrar los intentos de identificar a
los usuarios a través de IP de origen y contenido de transacciones en la red de bitcoin. En el BIP se han
propuesto varios mensajes nuevos para solicitar y habilitar el cifrado entre los nodos participantes. Está
disponible en https://github.com/bitcoin/bips/blob/master/bip-0151.mediawiki.
PBI 150
Esta propuesta presenta un método para la autenticación entre pares. Esto permitirá abordar los ataques man-
in-the-middle y proporcionará una garantía de que los pares se están conectando a un nodo legítimo. Está
disponible en GitHub en https://github.com/bitcoin/bips/blob/master/bip-0150.mediawiki.
PBI 147
Esta propuesta se ha realizado para abordar la maleabilidad del elemento de pila ficticia. La maleabilidad de la
firma es un problema conocido y puede ser realizada por cualquier nodo de retransmisión simplemente
cambiando la firma asociada con una transacción. Esta es una propuesta de mejora de nivel de capa de
consenso que necesitará una bifurcación suave para implementar. BIP 147 está documentado en GitHub en
https://github.com/bitcoin/bips/blob/master/bip 0147.mediawiki.
PBI 146
Esta mejora se realiza para solucionar el problema de la maleabilidad de la codificación de firmas. Esto
requiere que se implemente una bifurcación suave. Si se implementa, esto resolverá el problema de la
maleabilidad de la firma que está relacionado con una limitación fundamental en el mecanismo de codificación
de la firma ECDSA. Esta limitación es inherente a ECDSA. En segundo lugar, debido al hecho de que si una
firma ha fallado, la evaluación del script de verificación aún continuará y permitiría establecer cualquier valor
en la firma. Este BIP es una propuesta para resolver este problema. Está documentado en https://github.com/bitco
Machine Translated by Google
0146.mediawiki.
Hay muchos otros BIP creados para sugerir mejoras en el protocolo Bitcoin. En este
apartado sólo se han presentado las cinco últimas propuestas. Hay casi 90 propuestas
de mejora para bitcoin que se han hecho en los últimos años y este proceso continúa.
Machine Translated by Google
EIP
Ethereum tiene su propia versión de propuestas de mejora, llamadas EIP. Varios de los EIP recientes se analizan a
continuación.
PIE 170
Esta propuesta de mejora se ha realizado para abordar ciertas vulnerabilidades que pueden surgir del uso
excesivo de gas desencadenado por un tamaño de código de contrato grande durante la etapa de preprocesamiento
o cuando se lee el código del disco. La propuesta es limitar el tamaño del código del contrato a 23.999 bytes. La
discusión adicional con respecto a esta propuesta ha resultado en mejorar aún más esta propuesta y ha sido aceptada.
Esto, sin embargo, aún no se ha implementado.
PIE 150
Esta propuesta de mejora se realizó en respuesta a los ataques de denegación de servicio en la cadena de
bloques de Ethereum. Ya se ha implementado como una bifurcación dura desde el bloque 2463000 de la cadena de
bloques Ethereum en vivo. Este EIP abordó los problemas derivados de los ataques de spam de transacciones, por
ejemplo, llamando repetidamente a EXTCODESIZE Opcode, lo que provocó la ralentización del proceso de validación
de la cadena de bloques. El EIP es para aumentar el costo del gas de varios de los códigos de operación para frustrar
los ataques de denegación de servicio que resultan del uso repetido excesivo de estos códigos de operación.
PIE 161
Esta propuesta se ha realizado para permitir la eliminación de cuentas vacías de la cadena de bloques de Ethereum.
Esto se implementó como respuesta a un ataque de denegación de servicio en la cadena de bloques de Ethereum
en el que los atacantes crearon una gran cantidad de cuentas vacías. Esto fue posible debido al bajo costo de
creación de la cuenta. Esto se denomina compensación de prueba estatal, que permitirá la eliminación de cuentas
vacías al realizar una instrucción CALL a las cuentas.
PIE 160
Esta sugerencia se ha hecho para aumentar el costo de EXP Opcode. La idea central detrás de esta propuesta de
mejora es hacer que el costo de la operación EXP sea proporcional a la complejidad de la operación. Esta propuesta
ha ayudado a frustrar los ataques de denegación de servicio que surgieron de la invocación de operaciones
computacionalmente costosas.
PIE 155
Esta propuesta de mejora se realiza para eliminar la posibilidad de reproducir una transacción de una cadena
diferente en la cadena de bloques principal de Ethereum en vivo. Por ejemplo, si se realiza una transacción en la
red Ethereum, entonces se podrá reproducir en la red clásica de Ethereum; este EIP aborda este problema.
Además, cualquier transacción que ya se haya realizado en la red de prueba no debería poder reproducirse en la
red principal en vivo.
Machine
Todas lasTranslated by Google
mejoras mencionadas anteriormente dieron como resultado una bifurcación dura y se implementaron
como respuesta a los recientes ataques de denegación de servicio de Ethereum. Las propuestas de mejora son un
mecanismo clave para introducir nuevas mejoras y correcciones de errores a nivel de protocolo en la cadena de
bloques de Ethereum. Hay alrededor de 11 propuestas de mejora implementadas o propuestas para Ethereum.
Todos estos están documentados en GitHub en https://github.com/ethereum/EIPs/.
Machine Translated by Google
Otros desafíos
Además de la seguridad y la privacidad, discutidas en el capítulo anterior, hay varios otros obstáculos que deben
abordarse antes de que se pueda lograr la adopción generalizada de blockchains. Estos incluyen regulación, control
gubernamental, tecnología inmadura, integración con sistemas existentes y costos de implementación.
La regulación se considera uno de los mayores desafíos que deben abordarse. El problema central es que las cadenas de
bloques y especialmente las criptomonedas no son reconocidas como moneda legal por ningún gobierno. Aunque, en
algunos casos, ha sido clasificado como dinero en EE. UU. y Alemania, todavía está lejos de ser aceptado como una moneda
normal. Además, las cadenas de bloques en su estado actual no se reconocen como una plataforma que puedan utilizar las
instituciones financieras. Ningún organismo regulador financiero lo ha aceptado todavía como una plataforma que puede ser
autorizada para su uso. Sin embargo, existen varias iniciativas tomadas por las autoridades reguladoras de todo el mundo
para investigar y proponer regulaciones.
Bitcoin en su estado actual está totalmente desregulado, a pesar de que los gobiernos han hecho algunos intentos
de gravar el bitcoin. En el Reino Unido, según la directiva del IVA de la UE, las transacciones de bitcoin están exentas
del Impuesto al Valor Agregado (IVA), pero esto puede cambiar después del Brexit. Sin embargo, el Impuesto a las
Ganancias de Capital (CGT) aún puede ser aplicable en algunos escenarios.
Se espera algún intento de regulación muy pronto por parte de las autoridades reguladoras financieras en general
con respecto a la tecnología blockchain, especialmente después del reciente anuncio de la Autoridad de Conducta Financiera
(FCA) en el Reino Unido de que puede aprobar algunas empresas que utilizan blockchain.
Es una preocupación general que la tecnología blockchain no esté realmente lista para implementaciones de producción.
Aunque la cadena de bloques de bitcoin se ha convertido en una sólida plataforma de cadena de bloques y se utiliza
en la producción, no es adecuada para todos los escenarios. Esto es especialmente cierto en el caso de entornos
sensibles como las finanzas y la salud. Sin embargo, es probable que cambie muy pronto, ya que se están realizando
grandes esfuerzos discutidos anteriormente en el capítulo para mejorar la tecnología y abordar las limitaciones técnicas,
como la escalabilidad y la privacidad. La seguridad también es otra preocupación general que ha sido destacada por
muchos investigadores y es especialmente aplicable a los sectores de finanzas y salud. Un informe reciente de la Agencia
de la Unión Europea para la Seguridad de las Redes y la Información (ENISA) ha resaltado las preocupaciones específicas
de los registros distribuidos que deben abordarse. Algunas preocupaciones destacadas en el informe incluyen la gestión
inteligente de contratos, la gestión de claves, el lavado de dinero y las herramientas antifraude. Además, en el informe se
ha destacado la necesidad de regulación, auditoría, control y gobernanza.
La integración con los sistemas heredados existentes también es una preocupación principal. No está claro cómo se
pueden integrar las cadenas de bloques con los sistemas financieros existentes.
Los obstáculos para la adopción están más o menos relacionados con la regulación, la seguridad y la interoperabilidad.
La integración con los sistemas existentes se puede llevar a cabo de varias maneras.
Machine Translated by Google
Lado oscuro
Con los atributos clave de resistencia a la censura y descentralización, la tecnología blockchain puede
ayudar a mejorar la transparencia y la eficiencia en muchos ámbitos de la vida, pero esta naturaleza un
tanto no regulada de esta tecnología significa que los delincuentes también pueden utilizarla para actividades
ilegales. Por ejemplo, compare un escenario en el que si se publica algún contenido ilegal en Internet, se
puede cerrar de inmediato acercándose a las autoridades competentes y a los proveedores de servicios del
sitio web, pero esto no es posible en las cadenas de bloques. Una vez que algo está en la cadena de bloques,
Esto significa que cualquier contenido inaceptable, una vez publicado en la cadena de bloques, no se puede
eliminar. Si la cadena de bloques se usa para distribuir contenido inmoral, entonces no hay forma de que nadi
Esto plantea un serio desafío y parece que algo de regulación y control es beneficioso en este
escenario, pero ¿cómo se puede regular una cadena de bloques? Esa es otra pregunta importante.
Puede que no sea prudente crear primero las leyes reguladoras y luego ver si la tecnología blockchain se
adapta a eso porque podría interrumpir la innovación y el progreso en esta tecnología. Sería más sensato
dejar que la tecnología blockchain crezca primero, al igual que Internet, y cuando alcance una masa crítica,
los órganos rectores pueden solicitar la aplicación de alguna regulación sobre la implementación y el uso
de la tecnología blockchain.
Hay varios ejemplos en los que la Dark Web se usa junto con bitcoin para realizar actividades ilegales.
Por ejemplo, SilkRoad, que se usaba para vender drogas ilegales a través de Internet, usaba bitcoin para
pagos y la web oscura usando URL de cebolla que solo son visibles con Tor. Aunque SilkRoad se cerró
después de meses de esfuerzos por parte de las fuerzas del orden, comenzaron a surgir nuevos sitios
similares. Ahora existen otras alternativas que ofrecen servicios similares; como tal, en general, este tipo de
problema sigue siendo una gran preocupación. Imagine que un sitio web ilegal está en IPFS y una cadena
de bloques; no hay una manera fácil de apagarlo. Está claro que la ausencia de control y regulación puede
alentar la actividad delictiva y seguirán surgiendo problemas similares como SilkRoad . Un mayor desarrollo
de las capacidades de transacciones totalmente anónimas, como Zcash, podría proporcionar otra capa de
protección para los delincuentes, pero al mismo tiempo puede ser bastante útil en varios escenarios
legítimos. Realmente depende de quién esté usando la tecnología; el anonimato puede ser bueno en muchos
escenarios, por ejemplo, en la industria de la salud donde los registros de los pacientes deben mantenerse
privados y anónimos, pero puede no ser apropiado si los delincuentes también pueden usarlo para ocultar su
Una solución podría ser introducir bots inteligentes o AA o incluso contratos que estén programados con
una lógica regulatoria integrada en ellos. Lo más probable es que sean programados por los reguladores y
las agencias de aplicación de la ley y vivan en la cadena de bloques como un medio para proporcionar
gobernanza y control. Por ejemplo, una cadena de bloques podría diseñarse de tal manera que cada contrato
inteligente tenga que pasar por un contrato de controlador que analice la lógica del código y proporcione un
mecanismo regulatorio para controlar el comportamiento del contrato inteligente. También es posible que
las autoridades reguladoras inspeccionen el código de cada contrato inteligente y, una vez que un código
de contrato inteligente tiene un cierto nivel de autenticidad adjunto en forma de certificados emitidos por un
regulador, se puede implementar en la red blockchain. . Este concepto de firma binaria es similar al concepto
ya establecido de firma de código en el que los ejecutables se firman digitalmente como un medio para
confirmar que el código es de buena fe y no es malicioso. Esta idea es más aplicable en el contexto de cadena
Machine
donde seTranslated
requierebyun
Google
cierto grado de control por parte de una autoridad reguladora, por ejemplo,
en finanzas. Significa que se requiere cierto grado de confianza en un tercero de confianza
(regulador) que puede no ser deseable debido a la desviación del concepto de descentralización total.
Sin embargo, para abordar esto, la propia cadena de bloques se puede utilizar para proporcionar un
mecanismo de emisión de certificados y firma digital descentralizado, transparente y seguro.
Machine Translated by Google
Investigación de cadena de bloques
Si bien se han realizado importantes innovaciones en la tecnología de cadena de bloques en los últimos años, el
área aún está madura para futuras investigaciones. Algunos temas de investigación seleccionados se enumeran
a continuación con información sobre los desafíos existentes y el estado del arte. También se presentan algunas
ideas sobre cómo abordar estos problemas.
Machine Translated by Google
Contratos inteligentes
Se han realizado grandes avances en esta área para definir los requisitos clave de los contratos inteligentes
y el desarrollo de plantillas. Sin embargo, se requiere más investigación en el área de hacer que los
contratos inteligentes sean más seguros y protegidos.
Machine Translated by Google
Problemas de centralización
Especialmente en relación con la centralización de la minería de bitcoin, existe una creciente preocupación sobre cómo
se puede descentralizar realmente bitcoin de nuevo.
Machine Translated by Google
Limitaciones en funciones criptográficas
La criptografía utilizada en la cadena de bloques de bitcoin es extremadamente segura y ha resistido la
prueba del tiempo. En otras cadenas de bloques se utilizan técnicas de seguridad similares y también son muy
seguras. Sin embargo, persisten problemas de seguridad específicos, como la posibilidad de generación y uso de
nonces de firma duplicados en esquemas de firma digital de curva elíptica (que conducen a un ataque de
recuperación de clave privada), colisiones en funciones Hash y la posibilidad de ataques cuánticos que pueden
romper los algoritmos criptográficos subyacentes. un interesante campo de investigación.
Machine Translated by Google
Algoritmos de consenso
La investigación en algoritmos de prueba de participación o alternativas a la prueba de trabajo también es un
área importante de investigación. Esto es especialmente relevante debido al hecho de que se espera que el
consumo de energía de la red bitcoin actual alcance casi 14 gigavatios para 2020. También se ha sugerido que
en lugar de realizar un tipo de trabajo ineficiente o de un solo propósito como es el caso de la Prueba de trabajo
de bitcoin , la potencia de la red se puede utilizar para resolver algunos problemas matemáticos o científicos.
Además, las alternativas como los algoritmos de prueba de participación ya han ganado mucha tracción y se
implementarán en las principales cadenas de bloques, por ejemplo, Casper de Ethereum. Sin embargo, hasta
ahora, la Prueba de trabajo sigue siendo la mejor opción para asegurar una cadena de bloques pública.
Machine Translated by Google
Escalabilidad
Ya se ha llevado a cabo una discusión detallada sobre la escalabilidad en el último capítulo; Brevemente,
es suficiente decir en esta sección que, si bien ya se han logrado algunos avances, aún se necesita más
investigación para permitir la escalabilidad en la cadena y mejorar aún más las soluciones fuera de la cadena,
como los canales estatales. Se han propuesto algunas iniciativas, como el aumento del tamaño del bloque y las
cadenas de bloques solo para transacciones (sin bloques), para abordar los problemas de escalabilidad que
aumentan la capacidad de la propia cadena de bloques en lugar de utilizar canales secundarios. Los ejemplos de
implementación sin bloques incluyen IOTA (Tangle). Es un gráfico acíclico dirigido (DAG) que se usa para almacenar
transacciones en comparación con las soluciones tradicionales de blockchain donde se usa un bloque para
almacenar transacciones. Esto lo hace inherentemente más rápido en comparación con las cadenas de bloques
basadas en bloques, como Bitcoin, donde el tiempo de espera entre las generaciones de bloques es de al menos apro
Machine Translated by Google
Ofuscación de código
A partir de febrero de 2017, esta es la incorporación más reciente al proyecto Hyperledger. El objetivo de
este proyecto es proporcionar BaaS bajo demanda que hará que las implementaciones y la gestión de
múltiples cadenas de bloques sean cómodas y sencillas para los usuarios. Se prevé que Cello admitirá
todas las cadenas de bloques Hyperledger futuras y actuales, como Fabric y Sawtooth Lake.
Machine Translated by Google
Qtum
Este proyecto se basa en la idea de combinar las capacidades de las cadenas de bloques de bitcoin y Ethereum.
Qtum utiliza la base de código de bitcoin, pero utiliza EVM de Ethereum para la ejecución de contratos inteligentes.
Los contratos inteligentes de Ethereum pueden ejecutarse utilizando el modelo UTXO (transacciones no gastadas) de bitcoin.
Está disponible en https://qtum.org/.
Machine Translated by Google
Bitcoin-NG
Esta es otra propuesta para abordar los problemas de escalabilidad, rendimiento y velocidad en la
cadena de bloques de bitcoin. El protocolo Next Generation (NG) se basa en un mecanismo de elección
de líder que verifica las transacciones tan pronto como ocurren, en comparación con los protocolos de Bitcoin,
donde el tiempo entre bloques y el tamaño del bloque son las limitaciones clave en relación con la escalabilidad.
Machine Translated by Google
Solidus
Esta es una nueva criptomoneda que brinda una solución para la minería egoísta al tiempo que aborda los
problemas de escalamiento y rendimiento. También aborda cuestiones de confidencialidad. Se basa en un
consenso bizantino sin permiso. El protocolo en su estado actual es comparativamente complejo y es un área
abierta para la investigación.
Machine Translated by Google
Halcón
Este es un proyecto que tiene como objetivo abordar los problemas de privacidad de los contratos
inteligentes en blockchains. Es un sistema de contrato inteligente que permite el cifrado de transacciones
en la cadena de bloques. Hawk puede generar un protocolo seguro para la interacción con cadenas de
bloques automáticamente sin necesidad de programar manualmente el protocolo criptográfico.
Machine Translated by Google
pregonero
Este es un proyecto que tiene como objetivo proporcionar información auténtica del mundo real en contratos inteligentes.
Este sistema se basa en la tecnología de hardware confiable SGX de Intel. Este es un paso más en el diseño de Oracle
mediante el cual los contratos inteligentes pueden solicitar datos de fuentes en línea mientras se preserva la confidencialid
Machine Translated by Google
SETLCoin
Este es un sistema construido por Goldman Sachs y está registrado para patente bajo la aplicación
Cryptographic Currency for Securities Liquidation . Como sugiere su nombre, esta moneda de criptomoneda
se puede utilizar para una liquidación rápida y eficiente. La tecnología utiliza billeteras virtuales para
intercambiar activos a través de la red entre pares y permite la liquidación inmediata a través de la propieda
Machine Translated by Google
TEEChan
Esta es una idea novedosa de usar entornos de ejecución confiables (TEE) para proporcionar una solución
escalable y eficiente para escalar la cadena de bloques de bitcoin. Esto es similar al concepto de canales
de pago en el que los canales fuera de la cadena se utilizan para una transferencia de transacciones más rápida.
El atractivo clave de esta idea es que se puede implementar en la cadena de bloques de bitcoin sin necesidad de
realizar ningún cambio en la red de bitcoin porque es una solución fuera de la cadena. Sin embargo, hay una
pequeña advertencia de que esta solución requiere confiar en Intel para la atestación (verificación) remota, ya
que las CPU SGX de Intel se utilizan para proporcionar TEE. Esta no es una propiedad deseable en cadenas de
bloques descentralizadas; sin embargo, debe tenerse en cuenta que la confidencialidad de las transacciones aún
se conserva incluso si se utiliza la certificación remota, ya que el certificador remoto (Intel) no puede ver el
contenido de la comunicación entre los usuarios. Esta limitación hace que sea discutible si se trata de una solución
Machine Translated by Google
Halcón
Falcon es un proyecto que ayuda a Bitcoin a escalar al proporcionar una red de retransmisión rápida
para transmitir bloques de Bitcoin a través de la red. La idea central gira en torno a una técnica para reducir
los bloques huérfanos, ayudando así con la escalabilidad general de la red bitcoin. La técnica utilizada
para este propósito se ha denominado enrutamiento directo a nivel de aplicación.
Machine Translated by Google
bletchley
Este proyecto ha sido presentado por Microsoft, lo que indica el compromiso de Microsoft con la tecnología
blockchain. Bletchley permite el uso de los servicios en la nube de Azure para construir cadenas de bloques de
una manera fácil de usar. Un concepto importante introducido por Bletchley se llama cryptlets, que se puede
considerar como una versión avanzada de los oráculos que residen fuera de la cadena de bloques y se pueden
llamar mediante contratos inteligentes utilizando canales seguros. Estos pueden escribirse en cualquier idioma y ej
Hay dos tipos de cryptlets: cryptlets de utilidad y cryptlets de contrato. El primer tipo se usa para
proporcionar servicios básicos como el cifrado y la obtención de datos básicos de fuentes externas, mientras
que el último es una versión más inteligente que se crea automáticamente cuando se crea un contrato inteligente
en la cadena y reside fuera de la cadena pero aún vinculado a el contrato en cadena. Debido a esta existencia
fuera de la cadena, no es necesario ejecutar los cryptlets de contrato en todos los nodos de la red de la cadena
de bloques, por lo que este enfoque da como resultado un mayor rendimiento de la cadena de bloques.
Machine Translated by Google
Casper
Este es el algoritmo de prueba de participación para Ethereum en desarrollo. Ya se han realizado
importantes investigaciones en esta área y se espera que se implementen en 2017. Los nodos se
convierten en validadores vinculados en una red Ethereum basada en Casper y deben pagar un
depósito de seguridad para que puedan proponer nuevos bloques.
Machine Translated by Google
Metrópoli
Este es el próximo lanzamiento de Ethereum para el cual ya se ha completado mucho trabajo. Se requerirá
una bifurcación dura para implementar esta versión. Se han lanzado una serie de EIP que incluyen todas
las mejoras importantes para esta versión. Las mejoras incluyen mover la verificación de firma y la lógica
nonce a contratos inteligentes, lo que brindará más flexibilidad a los desarrolladores con respecto a la
elección de esquemas de seguridad. Otra mejora está relacionada con el hash de bloque y los cambios
de raíz de estado que dan como resultado la simplificación del protocolo y permiten el procesamiento de
transacciones en paralelo. Otras propuestas incluyen soporte de enteros grandes para funciones
criptográficas (criptografía de curva elíptica). Todas las mejoras anteriores, junto con varias otras, están
cubiertas por EIP86, EIP98, EIP96, EIP100, EIP101, EIP116, EIP195, EIP140 y EIP 141. Aún no hay fecha de
lanzamiento y no está claro si todos los EIP se implementarán en el nuevo lanzamiento; sin embargo, el
objetivo principal de esta versión es la simplificación de protocolos, la privacidad y la flexibilidad para los de
Machine Translated by Google
Herramientas varias
Algunas herramientas que no se han discutido anteriormente se enumeran a continuación y se presentan
brevemente para que los lectores conozcan la gran cantidad de opciones de desarrollo disponibles para
blockchains. Esta lista incluye plataformas, utilidades y herramientas que se pueden usar para el desarrollo de blo
Machine Translated by Google
Extensión Solidity para Microsoft Visual Studio
Esta extensión proporciona Intellisense, finalización automática y plantillas para aplicaciones
descentralizadas, y funciona dentro del IDE familiar de Visual Studio, lo que facilita que los
desarrolladores se familiaricen con el desarrollo de Ethereum.
Machine Translated by Google
metamáscara
Este es un navegador DAPP que es similar a Mist desde el punto de vista de la navegación DAPP, pero permite
a los usuarios ejecutar aplicaciones descentralizadas de Ethereum dentro del navegador sin el requisito de
ejecutar un nodo Ethereum completo. Esto está disponible en https://metamask.io/ y se puede instalar como
un complemento de Chrome.
Machine Translated by Google
estratis
Esta es una plataforma de desarrollo de cadenas de bloques que permite la creación de cadenas de bloques
privadas personalizadas y funciona junto con la cadena de bloques principal de Stratis (cadena de Stratis) por
razones de seguridad. Permite el aprovisionamiento de las principales cadenas de bloques como bitcoin, Ethereum
y Lisk con facilidad. Además, permite el desarrollo utilizando tecnologías C# .Net. También está disponible a
través de Microsoft Azure como BaaS. Está disponible en https://stratisplatform.com/.
Machine Translated by Google
Embarcar
Este es un marco de desarrollo para Ethereum que permite una funcionalidad similar a la trufa,
discutida en capítulos anteriores. Permite la implementación automática de contratos inteligentes, una
integración más sencilla con JavaScript y, especialmente, una integración más sencilla con IPFS. Este es
un marco muy rico en características y hay muchas más funcionalidades disponibles. Se puede instalar a
través de npm. Este marco está disponible en GitHub: https://github.com/iurimatias/embark-framework.
Machine Translated by Google
TORDILLO
Este es otro marco para Ethereum que permite un desarrollo e implementación más sencillos de contratos
inteligentes al encargarse de tareas más complejas. Se puede utilizar para la gestión de paquetes, la creación de
contratos y la creación de secuencias de comandos de implementación. Esto también está disponible a través de npm.
También está disponible a través de GitHub en https://github.com/nexusdev/dapple.
Machine Translated by Google
Meteorito
Este es un marco de desarrollo de pila completa para aplicaciones de una sola página. Se puede
utilizar para el desarrollo de Ethereum DAPP. Hay un entorno de desarrollo disponible en Meteor y
permite un desarrollo más fácil y manejable de DAPP complejos. Está disponible en https://
www.meteor.com/ y la información de creación de DAPP específica de Ethereum está disponible en
https://github.com/ethereum/wiki/wiki/Dapp-using-Meteor.
Machine Translated by Google
uPort
Esta plataforma se basa en Ethereum y proporciona un sistema de gestión de identidad descentralizado.
Esto permite a los usuarios tener control total sobre su identidad e información personal. Esto se basa
en la idea de que los sistemas de reputación permiten a los usuarios certificarse entre sí y generar
confianza. Esto está disponible en https://www.uport.me/.
Machine Translated by Google
INFURA
Este proyecto tiene como objetivo proporcionar nodos Ethereum e IPFS de nivel empresarial. INFURA
consta de nodos Ethereum, nodos IPFS y una capa de servicio llamada Ferryman que proporciona servicios
de enrutamiento y equilibrio de carga.
Machine Translated by Google
Convergencia con otras industrias
La convergencia de blockchain con IoT se ha discutido extensamente en el último capítulo. Brevemente, se puede
decir que debido a la autenticidad, integridad, privacidad y naturaleza compartida de las cadenas de bloques, las
redes de IoT se beneficiarán enormemente de la tecnología de cadenas de bloques. Esto se puede realizar en
forma de una red IoT que se ejecuta en una cadena de bloques y hace uso de una red de malla descentralizada
para la comunicación a fin de facilitar la comunicación de máquina a máquina (M2M) en tiempo real. Todos estos
datos que se generan como resultado de la comunicación M2M se pueden utilizar en el proceso de aprendizaje
automático para aumentar la funcionalidad de DAO con inteligencia artificial o AA simples. Los AA pueden actuar
como agentes en un entorno de Inteligencia Artificial Distribuida (DAI) proporcionado por una cadena de bloques
y pueden aprender con el tiempo utilizando procesos de aprendizaje automático.
La IA es un campo de la informática que se esfuerza por crear agentes inteligentes que puedan tomar
decisiones racionales en función de los escenarios y el entorno que observan a su alrededor. El aprendizaje
automático juega un papel vital en la IA al hacer uso de datos sin procesar como recurso de aprendizaje. Un
requisito clave en los sistemas basados en IA es la disponibilidad de datos auténticos que puedan usarse para
el aprendizaje automático y la construcción de modelos. La explosión de datos que provienen de dispositivos
IoT, teléfonos inteligentes y otra adquisición de datos significa que la inteligencia artificial y el aprendizaje
automático se están volviendo cada vez más poderosos. Sin embargo, existe un requisito de autenticidad de
los datos. Una vez que los consumidores, productores y otras entidades están en una cadena de bloques, los
datos que se generan como resultado de la interacción entre estas entidades se pueden usar fácilmente como
entrada para los motores de aprendizaje automático con garantía de autenticidad. Aquí es donde la IA converge
con las cadenas de bloques. Se podría argumentar que si un dispositivo IoT es pirateado, puede enviar datos con
formato incorrecto a la cadena de bloques. Este problema se mitiga porque un dispositivo IoT es parte de la
cadena de bloques (como un nodo) y tiene todas las propiedades de seguridad aplicadas como un nodo normal
en la red de la cadena de bloques. Estas propiedades incluyen la incentivación del buen comportamiento, el
rechazo de transacciones mal formadas y la verificación estricta de las transacciones y otras verificaciones que
forman parte del protocolo blockchain. Por lo tanto, incluso si un dispositivo IoT es pirateado de alguna manera, la r
Además, la posibilidad de combinar oráculos inteligentes, contratos inteligentes inteligentes y AA dará lugar a
organizaciones autónomas descentralizadas con inteligencia artificial (AIDAO) que pueden actuar en nombre de
los humanos para administrar organizaciones enteras por su cuenta. Este es otro lado de la IA que puede
convertirse en norma en el futuro. Sin embargo, se requiere más investigación para hacer realidad esta visión.
Además, también se prevé la convergencia de la tecnología blockchain con otros campos como la impresión
3D, la realidad virtual, la realidad aumentada y la industria del juego. Por ejemplo, en un juego multijugador en
línea, el enfoque descentralizado de blockchain permite una mayor transparencia y puede garantizar que
ninguna autoridad central obtenga una ventaja injusta manipulando las reglas del juego. Todos estos temas
son áreas activas de investigación en la actualidad y se espera un mayor interés y desarrollo en estas áreas en un
futuro próximo.
Machine Translated by Google
Futuro
Se prevé que el año 2017 sea el año en que la tecnología blockchain se implemente en entornos de producción del mundo
real y pase de la etapa de prueba de concepto y teórica de años anteriores.
Se hacen pocas predicciones cuidadosas en la sección que se basan en el avance actual y la velocidad del progreso en el
campo en cuestión. Es probable que todas estas predicciones se hagan realidad entre los años 2020 y 2050: IoT se ejecutará
en varias cadenas de bloques y dará lugar a una economía M2M.
Los registros médicos se compartirán de forma segura mientras se preserva la privacidad de los pacientes entre
varias cadenas de bloques privadas administradas por consorcios de proveedores de salud. Bien puede ser una única
cadena de bloques privada compartida entre todos los proveedores de servicios.
Las elecciones se llevarán a cabo a través de aplicaciones web descentralizadas con un backend de blockchain de
manera transparente y segura.
Las instituciones financieras ejecutarán muchas cadenas de bloques privadas para compartir datos entre
participantes y para procesos internos.
Las instituciones financieras harán uso de cadenas de bloques semiprivadas que proporcionarán información de
identidad para las funciones contra el lavado de dinero y conocer a su cliente y se compartirán entre muchas o todas
las instituciones financieras de todo el mundo.
Las actividades relacionadas con la inmigración y el control fronterizo se registrarán en la cadena de bloques
y el control de pasaportes se realizará a través de una cadena de bloques compartida entre todos los puertos de
entrada y las agencias fronterizas de todo el mundo.
La investigación en criptografía y sistemas distribuidos alcanzará nuevos niveles y las universidades y los
establecimientos educativos ofrecerán cursos dedicados a la criptoeconomía, las criptomonedas y las cadenas de
bloques.
Las DAO con inteligencia artificial (Machina Economicus) prevalecerán sobre las cadenas de bloques que tomarán
decisiones racionales en nombre de los humanos.
Los ciudadanos utilizarán diariamente una cadena de bloques regulada disponible públicamente para realizar
sus actividades cotidianas.
BaaS se proporcionará como estándar a cualquier persona que desee administrar su negocio o sus transacciones
diarias en una cadena de bloques. De hecho, podría preverse que, al igual que Internet, las cadenas de bloques se
integrarán perfectamente en nuestra vida diaria y las personas las utilizarán sin saber mucho sobre la tecnología y la
infraestructura subyacentes.
Las cadenas de bloques se utilizarán normalmente para proporcionar servicios de DRM (gestión de derechos digitales)
para las artes y los medios y se pueden utilizar para entregar contenido a los consumidores, lo que permite la
comunicación directa entre el consumidor y el productor. Esto eliminará la necesidad de que una parte central gobierne
la gestión de licencias y derechos de bienes valiosos.
Las criptomonedas existentes, como bitcoin, seguirán creciendo en valor y, con la disponibilidad de canales estatales y
los esfuerzos de escalabilidad, se espera que esta tendencia crezca.
La inversión en criptomonedas aumentará considerablemente y surgirá una nueva sociedad criptoeconómica.
Resumen
Las cadenas de bloques van a cambiar el mundo. La revolución ya ha comenzado y solo se espera que
crezca a escala exponencial. Este capítulo ha explorado varios proyectos y el estado actual de la tecnología
blockchain. Primero, se discutieron algunas tendencias que se espera que continúen a medida que la
tecnología progrese más. Muchos investigadores y organizaciones de todo el mundo están muy interesados
en la investigación de la tecnología blockchain y en este capítulo también se han introducido algunos
temas de investigación. Además, también se ha discutido la convergencia con otros campos como el IoT y
la IA. Finalmente, se han hecho algunas predicciones sobre el crecimiento de la tecnología blockchain.
Es probable que la mayoría de estas predicciones se hagan realidad en la próxima década, mientras que
algunas pueden tardar más. La tecnología Blockchain tiene el potencial de cambiar el mundo y ya se han
visto algunos signos positivos en forma de implementaciones exitosas de prueba de concepto y un número
creciente de entusiastas y desarrolladores interesados en esta tecnología. Muy pronto, las cadenas de
bloques estarán entrelazadas con nuestras vidas tal como lo está Internet ahora. Este capítulo es solo una
modesta descripción general del vasto y tremendo potencial de las cadenas de bloques y, en un futuro
cercano, se espera un crecimiento exponencial de esta tecnología.
Ethereum uses the Ethash algorithm for mining, which is memory-hard and aims to be ASIC-resistant, encouraging more decentralized mining as it prevents mining centralization seen in Bitcoin due to ASICs in its Double SHA-256 PoW . This approach makes security in Ethereum potentially more decentralized, as it allows more individual miners to participate. However, some degree of centralization still exists due to the cost of maintaining equipment for mining, which is a challenge common to both blockchains .
In Ethereum, the trie data structure—specifically the Merkle-Patricia trie—provides both security and efficiency in transaction processing by organizing and compressing blockchain data. This trie system ensures that changes to data are efficiently stored and allows for rapid verification processes, as it leverages a hashing mechanism to validate data integrity . This means that verification of any part of the data structure can provide confirmation of the entire data's integrity, making it secure and efficiently organized for throughput and access .
Ethereum implements the Ethash algorithm, which is memory-hard and designed to be resistant to ASIC mining. This makes the mining process more dependent on memory than processing power, complicating the development of specialized ASIC hardware and leveling the playing field for those with general-purpose computing hardware . This resistance increases participation as it allows more individuals to mine Ethereum without the need for expensive, specialized equipment .
Remix IDE is a web-based development tool used for writing, deploying, debugging, and managing Ethereum smart contracts. It offers features such as syntax highlighting, format checking, a built-in compiler, and debugging tools which make it particularly useful for developers. These features allow for real-time interaction with code, error identification, and troubleshooting . Remix also facilitates the connection to the Ethereum network, providing a practical interface for testing and deploying smart contracts .
'Freedom of progress' in Proof of Work consensus refers to the idea that rewards from mining are random and proportional to the computational resources a miner invests, ensuring no single miner, regardless of computational power disparity, is guaranteed to continuously mine blocks. This ensures smaller miners can still occasionally generate blocks and receive rewards, maintaining a more decentralized mining environment .
In blockchain alternatives like IOTA, the Directed Acyclic Graph (DAG) structure, known as the Tangle, replaces the traditional linear blockchain. DAG allows for parallel processing of transactions, increasing scalability and reducing bottlenecks associated with block creation. In the Tangle, each transaction directly confirms previous transactions, making the system more efficient as the network grows. This structure also supports low-fee microtransactions, suitable for IoT applications, and enhances security even against quantum computing threats due to its non-linear transactions .
Privacy challenges in blockchain technology include the public visibility of transactions and the linkage of transaction data to identities. Projects like Hawk aim to address these privacy issues by allowing the execution of smart contracts in a confidential manner. Hawk achieves this by not storing value transfer details on the blockchain itself but rather in an off-chain protocol, thus preserving the privacy of the transaction participants .
Gas in Ethereum represents a unit of computational work executed for transactions and smart contracts, and gas limits define the maximum amount of gas that can be spent on a single transaction. This mechanism ensures that transaction processing on the network remains manageable, as users must specify the gas price they are willing to pay, influencing how quickly or slowly miners pick up and process their transactions .
The establishment of standards such as ISO/TC 307 has contributed significantly to blockchain's strategic development by promoting interoperability and data sharing among various blockchain platforms. This standardization addresses concerns over compatibility, data handling, and operational consistency, which in turn fosters wider adoption by providing a framework that users and businesses can trust and implement seamlessly in diverse systems . Standards also streamline regulations and compliance measures, reducing barriers to entry and facilitating growth and innovation in the industry .
The Byzantine Generals Problem is significant in blockchain technology as it highlights the challenges of achieving consensus in a distributed network where participants may fail or act maliciously. It relates to consensus mechanisms because these mechanisms, such as Proof of Work or Practical Byzantine Fault Tolerance (pBFT), are designed to ensure all non-faulty nodes agree on the same transaction history, thereby securing the blockchain against double-spending and ensuring the integrity of the ledger .