Ethereum para desarrolladores web. Parte 1

Comenzaremos nuestro viaje con una breve introducción a la tecnologia Ethereum y blockchain en general, comenzando con Bitcoin. Explicaremos que hace una blockchain
y cuándo tiene sentido utilizar una. También cubriremos algunos conceptos básicos de criptografía y luego proporcionamos una descripción general del desarrollo de aplicaciones descentralizadas antes de implementar la nuestra en el siguiente post Ethereum para desarrolladores web. Parte 2.

nociones de criptografia

Antes de entrar en blockchains, repasaremos dos conceptos de criptografía que son clave en los bloques de construcción en la mayoría de las cadenas de bloques: los hashes y la criptografía de clave pública. No dude en omitie esta sección si ya está familiarizado con ellos.

funciones hash

Una función hash criptográfica es una función determinista pura que mapea entradas de un gran espacio en salidas de un conjunto fijo. Estas salidas generalmente se denominan hash de la entrada. Por ejemplo, la entrada podría ser el texto completo del prólogo de este post, y su hash podría ser el hexadecimal 01cc88cda97d50346743ae58bb3ebe75 desde el espacio de valores de 128 bits. Sin entrar en formalismos complejos, una función hash segura debería ser resistente a la colisión. Esto significa que debería ser prácticamente imposible encontrar dos entradas que producen el mismo hash. Las funciones hash también deben ser no invertibles: dado sólo el hash, debería ser prácticamente imposible encontrar la entrada que produzca dicho hash. Además, un pequeño cambio en la entrada debería producir un gran cambio en el hash de salida: dos entradas similares deben tener resúmenes muy diferentes. Las funciones hash deben también ser relativamente rápidas de calcular a partir de su entrada, por lo que verificar que una entrada coincida con su hash debe ser una tarea poco costosa computacionalmente hablando.

Las funciones hash son fundamentales para mantener la integridad de una cadena de bloques y también forman la base para el mecanismo de consenso de prueba de trabajo. Veremos ambos usos.

criptografia de clave publica

La criptografía de clave pública o asimétrica es un sistema de cifrado que se basa en pares de claves: una clave privada, conocida solo por su propietario, y una clave pública correspondiente, compartida con el mundo. Una cadena cifrada con la clave pública solo se puede descifrarse con la clave privada. Cualquiera que desee enviar un mensaje secreto a un usuario puede utilizar la clave pública del destinatario para cifrarla, sabiendo que solo el titular de la clave privada puede descifrarla. Los pares de claves también se pueden utilizar a la inversa como firmas digitales. Un usuario puede enviar un mensaje, junto con su hash cifrado con su clave privada. Cualquier destinatario puede usar la clave pública para verificar que el hash fue firmado por el propietario de la clave privada. Estas firmas son el mecanismo de autenticación en las cadenas de bloques públicas. Cada clave pública tiene una clave privada asociada que su propietario debe mantener segura y otorga acceso a los activos de propiedad en la cadena de bloques. La criptografía de clave pública se puede implementar a través de muchos algoritmos diferentes, uno de los más populares son Rivest – Shamir – Adleman (más conocido como RSA). Ethereum, sin embargo, se basa en un algoritmo de firma digital de curva elíptica, o ECDSA. Este algoritmo también permite recuperar la clave pública, dado un mensaje y su firma. Armados con estos dos conceptos de criptografía, ahora finalmente podemos comenzar y
asumir cómo se construye una cadena de bloques.

blockchain 101

Una cadena de bloques es un libro mayor digital público indeleble descentralizado. Podemos pensar en una blockchain como una base de datos distribuida, donde, una vez que se ha confirmado un registro, nunca puede ser eliminado o alterado y donde ninguna autoridad tiene control sobre esta base de datos, que se replica en todos los nodos de una red peer-to-peer. Lo que es realmente almacenado en esta base de datos puede variar: podría ser una moneda, un registro de activos, o incluso código ejecutable.

transacciones y bloques

En una cadena de bloques, cada cambio de estado es parte de una transacción. Piense en una transacción como en una operación de escritura atómica de un usuario en la base de datos global que puede alterar uno o más registros. Cualquier usuario de la red puede enviar una transacción para que se ejecute. La forma en que se procesan las transacciones es parte de las reglas de transición de estado de blockchain. La cadena de bloques pasa de un estado a otro procesando cada transacción que recibe. Por ejemplo, una cadena de bloques que administra una moneda puede procesar transacciones como transferencias de su moneda entre dos cuentas: reduce el saldo del remitente y aumenta el del destinatario en la misma cantidad. Otras blockchains incluso permiten transacciones
para crear y ejecutar programas completos en la cadena. Cuando un usuario envía una transacción, debe firmarla criptográficamente con su llave privada. De esta manera, blockchain puede hacer cumplir que solo un usuario específico puede mover un determinado activo o alterar un determinado registro. Esto introduce una noción de propiedad por parte del titular de una clave.

Las transacciones se agrupan en bloques, que luego se encadenan para forman la cadena de bloques real. Los bloques constituyen la historia de la cadena de bloques, cada uno de
ellos empaquetan un conjunto de transacciones que cambian su estado. Cómo se eligen las transacciones y su orden en cada bloque depende de las reglas de consenso de blockchain, que veremos adelante. Cuando se agrega un bloque a la cadena de bloques, se propaga a través de la red peer-to-peer a todos los nodos. Cada nodo volverá a ejecutar todas las transacciones en el bloque localmente para comprobar si efectivamente son válidas, rechazando el bloque si detectan alguna ilegalidad. Esto significa que cada transacción se ejecuta realmente una vez por cada nodo en toda la red. Esto permite que la cadena de bloques esté completamente descentralizada, ya que cada nodo verifica todas las transacciones que se ejecutan. Sin embargo, tiene un costo: los gastos computacionales imponen un límite al número de transacciones por segundo que se pueden procesar por la red. En otras palabras, el rendimiento se negocia a cambio de la descentralización.

Las cadenas de bloques públicas no requieren que sus usuarios se registren. Pueden simplemente crear un nuevo par de claves para comenzar a firmar transacciones para participar en la red. Sin embargo, pueden requerir que sus usuarios tengan una moneda asociada a la blockchain para que sus transacciones sean procesadas.

Dado este alto costo de procesar un cambio en una cadena de bloques, todas las transacciones requieren una tarifa a pagar. Esta tarifa generalmente se paga en una moneda nativa de la cadena de bloques (como como bitcoin en la red Bitcoin o ether en Ethereum). Independientemente de quien sea el beneficiario de esta tarifa, que veremos mas adelante, el objetivo de la tarifa es evitar que los atacantes inunden la red con transacciones que deben ser procesadas por todos los nodos, y para proporcionar un incentivo a los nodos que agregan nuevos bloques a la cadena.

cadena de hashes

Las cadenas de bloques son resistentes a los cambios al mantener un hash de todo su historial en cada bloque. Cada bloque de la cadena se identifica mediante un hash calculado sobre sus propias transacciones y metadatos, así como sobre el hash del bloque anterior:

Cada bloque es identificado por el hash del bloque previo, mas todas sus propias transacciones.

Con este esquema, cualquier cambio en cualquier transacción en cualquier bloque de la cadena provocará que todos los hash posteriores cambien, haciendo que cualquier modificación sea trivial de detectar. Por ejemplo, si un atacante intentó alterar una transacción que ocurrió hace diez bloques, no solo el hash de ese bloque cambiaría, sino también el del siguiente bloque (ya que se calcula en base a el bloque anterior hash) y así sucesivamente hasta la cabeza de la cadena. Sin embargo, para que este mecanismo sea útil para evitar que un atacante modifique la blockchain y distribuya una copia falsa en la red, debe ser difícil para el atacante regenerar todos los bloques. Ahí es donde entra la prueba de trabajo.

logrando consenso

La forma en que se ordenan e incluyen las transacciones en los bloques de blockchain dependerá del algoritmo de consenso de la red. Dado que se trata de una base de datos, necesitamos una forma para que todos los actores se pongan de acuerdo sobre cómo se agregan los cambios a la cadena. Por ejemplo, si un vendedor ofrece un activo en la cadena de bloques y dos compradores se apresuran a comprarlo, ¿cómo puede una red descentralizada decidir quién lo obtuvo primero? Peor aún, ¿cómo evitamos que el vendedor les diga a ambos compradores que ellos hicieron la compra? ¿Les cobramos dos veces? Necesitamos una forma de determinar cómo se eligen y ordenan las transacciones para tener un solo estado de la cadena de bloques. En otras palabras, necesitamos una forma de establecer un consenso sobre qué bloques se agregan a la cadena.
Muchas cadenas de bloques públicas como Bitcoin o Ethereum se basan en un algoritmo de consenso conocido como prueba de trabajo. Una prueba de trabajo es una prueba criptográfica de que un cantidad de ciclos de CPU se gastaron en realizar un cálculo; en este caso, calcular un número difícil basado en un bloque. Para que se agregue un bloque a la cadena de bloques, debe ir acompañado de su prueba de trabajo. Cualquier nodo puede proponer un nuevo bloque y, si lo envían con su prueba de trabajo, se agrega a la cadena de bloques. El nodo que agrega un bloque recibe una recompensa a cambio de su esfuerzo. Los nodos que cumplen este rol en la red se llaman mineros, y cada vez que se agrega un nuevo bloque, todos compiten para agregar el siguiente para obtener la recompensa correspondiente.

El mecanismo de estas pruebas es bastante simple. El identificador para cada bloque de la cadena es un hash que incluye el identificador del bloque anterior, todas las transacciones en el bloque, y un nonce. Al cambiar el nonce, el has del bloque calculado será completamente diferente. Para agregar un nuevo bloque a la cadena, este identificador debe tener una cierta estructura (comenzar con n ceros). Ya que no es posible predecir cómo se verá un hash, un minero solo puede intentar calcular el bloque
hash repetidamente mientras cambia el nonce hasta que llega a un hash que coincide con los requisitos. Esto requiere muchos intentos y, por lo tanto, se considera una prueba de trabajo.

Recuerde que toda la infraestructura se ejecuta en una red descentralizada de igual a igual. Esto permite que los nodos se unan y abandonen la red como deseen sin necesidad de un servidor centralizado. Aquí, el algoritmo de prueba de trabajo proporciona una forma para que los nuevos nodos sepan cuál es la cadena real: solo necesitan buscar la cadena con el mayor potencia de cálculo acumulada invertida. Esto también evita que un actor malintencionado simplemente altere un registro en la cadena y vuelva a calcular todos los hashes de bloque subsiguientes, como discutimos en la sección anterior. Para hacer esto, el atacante tendría que resolver todas las pruebas de trabajo del bloque que
cambiado en adelante, lo que requiere más potencia de cálculo que el resto de los mineros en la red. El algoritmo de consenso está estrechamente relacionado con la finalidad de la red. Decimos que una transacción es definitiva cuando sabemos que se ha incluido en la cadena de bloques y no ha habido cambio. Una transacción agregada en el bloque más reciente está lejos de ser considerada definitiva: Si un minero logra extraer dos bloques en una fila comenzando desde el penúltimo, puede generar una nueva cadena que reemplace el último bloque y no incluya esa transacción. Esto se denomina reorganización y no es infrecuente en las cadenas de prueba de trabajo. Para saber que una transacción es definitiva, tenemos que esperar a que se extraigan varios bloques además de en el que se incluyó, para asegurarse de que no cambie. El número de bloques dependen de la cadena en particular y de cuánta confianza necesitamos.

Existen otros mecanismos de consenso además de la prueba de trabajo. Revisaremos la prueba de autoridad y prueba de participación como alternativas para construir cadenas más rápidas y pequeñas

rendimiento

Resolver una prueba de trabajo es computacionalmente costoso por diseño. Esto por sí mismo impone una limitacion del rendimiento de una cadena de bloques, al obligar a resolver un rompecabezas difícil cada vez que se agrega un lote de transacciones. Sin embargo, existe otra razón para limitar el número y la complejidad de las transacciones por segundo agregadas a la cadena: verificabilidad. Para mantener la cadena de bloques
descentralizada, todos los nodos de la red deben poder verificar que cada transacción
es legítima y se lleva a cabo de acuerdo con las normas establecidas. Si la red acepta una gran cantidad de transacciones por segundo, entonces solo los dispositivos potentes podrían verificar la cadena, dejando fuera de la red a cualquier usuario que no pueda
acceder al hardware necesario. Por tanto, el bajo rendimiento está relacionado con la garantía de acceso a la cadena de bloques.
En particular, Ethereum está diseñado para manejar alrededor de 15 transacciones por segundo. Tenga en cuenta que las transacciones pueden ser más o menos complejas en Ethereum, ya que pueden ejecutarse cálculos arbitrarios, por lo que este límite está realmente relacionado con cuánto esfuerzo se requiere para ejecutar y verificar cada una de las transacciones del bloque. Tenga en cuenta que estas pocas transacciones por segundo se comparten entre todos los usuarios y aplicaciones en la red, que es un límite muy bajo incluso para una sola web tradicional. Veremos algunos enfoques alrededor de esta limitación mas adelante.

de bitcoin a ethereum

Hasta ahora hemos definido una cadena de bloques como una base de datos pública, pero no hemos entrado en qué puede contener esa base de datos. La primera cadena de bloques famosa se utilizó para rastrear la propiedad de una moneda digital, el bitcoin.
La mayor parte de lo que hoy entendemos como blockchain fue introducido en 2008 por Satoshi Nakamoto en su artículo “Bitcoin: un sistema de efectivo electrónico de igual a igual”. 7 El paper es breve y fácil de leer, y contiene la mayoría de los conceptos de blockchain que se utilizan en la actualidad. Eso introduce una “versión puramente peer-to-peer de efectivo electrónico”, sin ningún tipo de propietario o emisor. Con todo, la cadena de bloques de Bitcoin es una base de datos pública descentralizada que realiza un seguimiento del saldo en bitcoins de sus usuarios y admite transacciones para mover fondos desde una dirección a otra. Es una implementación de pagos electrónicos descentralizados. Vale la pena mencionar que, además de las transferencias simples, Bitcoin también admite un Lenguaje de script. Este lenguaje permite construcciones como los timelocks, que restringen una transferencia desde que se ejecuta hasta cierto momento en el futuro, o firma múltiple de transacciones, que requieren que varias cuentas estén de acuerdo para mover un activo. Sin embargo, lo que se puede construir con este lenguaje aún es limitado. Es con el objetivo de admitir cálculos arbitrarios en la red que Ethereum
nació.

smart contracts

Ethereum fue introducido por Vitalik Buterin en 2013 y lanzado por primera vez en 2015. Su principal diferenciador era el concepto de código arbitrario que podía ejecutarse en el
blockchain en forma de contratos inteligentes. Un contrato inteligente es un programa corto cargado a la cadena de bloques, que puede reaccionar a las transacciones que se le envían ejecutando una lógica arbitraria. Cada contrato inteligente también tiene su propio estado arbitrario, que se puede actualizar en cualquier transacción y puede conservar cualquier dato. Y, por supuesto, un contrato inteligente también puede mantener ETH, la moneda nativa de la red Ethereum. En otras palabras, la red Ethereum tiene una moneda digital (el éther) y código ejecutable (smart contracts) con su propio estado. Esta flexibilidad permite a Ethereum implementar muchas construcciones diferentes. Por ejemplo, una moneda completamente nueva se puede implementar fácilmente como un smart contract. El contrato solo necesita realizar un seguimiento del saldo de cada usuario y proporcionar los métodos para ser transferirlos. Esto permite que se creen nuevas criptomonedas sobre Ethereum con poco esfuerzo. Sin embargo, recuerde que todas las transacciones son ejecutadas por todos los nodos de la red para ser verificado. Esto significa que, si bien los contratos inteligentes pueden ejecutar arbitrariamente código, este código debe ser determinista. Siempre debe producir el mismo resultado, no importa
cuándo o dónde se ejecuta. Tampoco puede depender de ninguna fuente externa a la cadena de bloques; de lo contrario, la validez de la cadena de bloques se vuelve dependiente de esas fuentes externas. Un contrato inteligente solo puede consultar o interactuar con otros contratos inteligentes dentro de la Red Ethereum.

gas

Permitir que cualquier usuario envíe una transacción con código arbitrario que se ejecutará en cada nodo de la red es potencialmente peligroso. Un usuario malintencionado podría enviar un fragmento de código extremadamente caro de ejecutar o uno que nunca termina. Para protegerse contra esto, Ethereum introduce un concepto llamado gas. Piense en el gas como la medida de la potencia informática necesaria para procesar una transacción. En una transacción, las operaciones complejas consumirán más gas que las más simples. Por ejemplo, alterar eel almacenamiento del contrato es mucho más caro que una simple expresión aritmética. Una transacción enviada a la red requiere una asignación de gas para ser enviada. Este gas se paga con ETH. Cada línea de código ejecutada por la transacción consume un poco de su gas, y si cae a cero, el procesamiento se detiene inmediatamente, y la transacción falla. Sin embargo, su remitente todavía debe pagar el costo del proceso de tales operaciones.
El remitente de una transacción también puede establecer el precio del gas, indicando lo que está dispuesto a pagar más (o menos) que otros usuarios por la ejecución de su transacción. Esta es una forma para que su transacción se incluya en la cadena de bloques más rápido (o más barato) que otros usuarios, haciéndolo más (o menos) atractivo para los mineros.

aplicaciones decentralizadas

Los contratos inteligentes permiten la construcción de aplicaciones descentralizadas, que serán nuestro principal enfoque a lo largo de estos posts. Las aplicaciones descentralizadas, o DApps, son un aplicaciones del lado del cliente no respaldadas por un servidor, sino por un conjunto de contratos inteligentes en la blockchain. En lugar de enviar solicitudes HTTP a un servidor web, los usuarios de la aplicación enviar transacciones a un contrato inteligente en la red Ethereum. Incluso es posible alojar la propia aplicación web en un sistema de almacenamiento de archivos descentralizados,
aplicación completamente independiente de cualquier infraestructura centralizada. En lugar de consultar datos de un almacén de datos centralizado, las aplicaciones descentralizadas usan la cadena de bloques como la fuente de la verdad. Los datos utilizados para completar la aplicación se almacenan en la cadena de bloques o en una ubicación de almacenamiento remota a la que se hace referencia desde la cadena de bloques. Asimismo, la lógica empresarial de la aplicación está codificada en un conjunto de contratos inteligentes. Los usuarios realizan acciones persistentes en la aplicación enviando transacciones a su contrato.

experiencia de ususario

¿Cómo interacciona una DApp con un usuario? Algunas DApps favorecerán la descentralización sobre la facilidad de uso y requieren que los usuarios accedan a ellas con un navegador especializado o una extensión de navegador. Estas extensiones actúan como wallets, contienen las claves del usuario y también como puerta de enlace a la cadena de bloques proporcionando una conexión a un nodo Ethereum. Debajo del capó, inyectan un objeto javascript que proporciona métodos de bajo nivel para acceder a datos de blockchain y el envío de transacciones en nombre del usuario. Siempre que la aplicación solicita enviar una transacción, al usuario se le presenta una ventana emergente para aprobarla. Esto mueve mucha complejidad de la DApp a la extensión, pero también requiere un gran esfuerzo del usuario para configurar, instalando la extensión, creando y haciendo una copia de seguridad de una cuenta, y comprando ETH para comenzar a operar. Usaremos este enfoque para construir nuestra primera DApp
en el post siguiente. Otras DApps tienen un enfoque más fácil de usar, administrando las claves en nombre de el usuario. Incluso es posible que un usuario esté usando una DApp sin siquiera darse cuenta, sobre todo si su complejidad se maneja entre bastidores. Sin embargo, esto también significa que el usuario ya no tiene el control de sus propias claves, pero delega esto en la aplicación. Además, si cada aplicación gestiona su propio conjunto de claves, la interoperabilidad es mucho más difícil, ya que el usuario teiene una identidad diferente en cada servicio. Exploraremos los enfoques fáciles de usar, junto con los desafíos que plantean mas adelante En general, las buenas aplicaciones ofrecen diferentes experiencias a diferentes usuarios, dependiendo de qué tan familiarizados estén con Ethereum. Independientemente de la administración de claves, todas las DApps deben tener en cuenta los tiempos de confirmación largos en la red. En las aplicaciones web tradicionales, una acción en forma de solicitud HTTP tarda unos milisegundos en llegar al servidor web y volver. Sin embargo, en Ethereum, una transacción puede tardar varios segundos en extraerse e incluso más en confirmarse. Las DApps deben tener esto en cuenta al diseñar sus interfaces y estar preparadas para manejar reorganizaciones también.

grados de decentralizacion

Como mencionamos, una DApp se puede descentralizar completamente: se puede alojar en una ubicación de almacenamiento, cargar sus datos desde la cadena de bloques y confíar en contratos inteligentes para cualquier lógica de negocios. Una vez lanzada, no existe una parte centralizada que pueda detener o alterar la aplicación y ningún servicio que pueda fallar impidiendo el acceso a ella. Estas aplicaciones incluso son resistentes a la censura por parte de cualquier agente. Sin embargo, esto tiene un costo. El almacenamiento descentralizado puede ser lento u ocasional no disponible si no hay suficientes réplicas del contenido. La ejecucion de consultas en la red Ethereum pueden ser demasiado lentas para algunos casos de uso. Y en algunos escenarios, incluso el obstáculo de configurar una cuenta Ethereum puede ser enorme para nuestros usuarios.
Afortunadamente, podemos intercambiar algunos grados de descentralización a cambio de mejorar la experiencia del usuario.
Por ejemplo, en lugar de cargar datos desde la propia cadena de bloques, podemos configurar un servidor centralizado que actúa como caché, proporcionando un acceso mucho más rápido a los datos que necesitamos en el cliente. La aplicación web aún puede volver a la cadena si este servidor se apaga o incluso validar los datos que proporciona la cadena de bloques cuando sea necesario para una operación crítica. Exploraremos estas soluciones más adelante. Otro ejemplo es transmitir las transacciones de nuestros usuarios a la red, para que no necesiten configurar una cuenta, comprar ETH para pagar las tarifas del gas o incluso interactuar con la red Ethereum en absoluto. Podemos crear una clave efímera para el lado del cliente y usarla para firmar transacciones que enviamos a la cadena de bloques en su nombre desde un servidor. Esto alivia muchos de los problemas relacionados con la incorporación de usuarios. Exploraremos esto
y otras alternativas mas adelante. Incluso podemos crear aplicaciones totalmente centralizadas que interactúen con un sistema descentralizado, impulsado por contratos inteligentes en la cadena de bloques Ethereum. El valor de la blockchain aquí no está en la capa de aplicación, sino en el protocolo. Gestionando los activos de los usuarios en una capa descentralizada, garantizamos que sus datos están seguros y pueden en cualquier momento, migrar de forma transparente a otra aplicación además del mismo sistema sin confianza. Con todo, la conclusión es que la descentralización no es todo o nada. Podemos y tenemos que elegir el grado apropiado de descentralización a implementar en nuestras aplicaciones, sabiendo que se trata de una compensación con su facilidad de uso.

¿porque una blockchain?

La primera pregunta que debe hacerse al implementar una cadena de bloques
sistema es si realmente necesita una cadena de bloques. En tecnología, es fácil dejarse llevar por la exageración: es posible que esté utilizando un Clúster de Kubernetes para escalar horizontalmente la carga sobre su aplicación web que se ejecuta perfectamente en una sola caja, o puede estar utilizando un algoritmo de aprendizaje automático de última generación para inferir tendencias de su conjunto de datos con menos de 100 entradas que serían mejor visualizar en una hoja de cálculo de Excel. Se han gastado millones en el desarrollo de aplicaciones móviles para presentar información estática, ya que era más genial que una simple respuesta del sitio web. Blockchain no es una excepción a las exageraciones, con el factor agravante de que puede usarse como un instrumento también para los especuladores financieros. Recuerda siempre que solo porque tienes un martillo nuevo y reluciente en las manos, no todo se convierte en un clavo. Debes no tratar de introducir una cadena de bloques en cada sistema, sino diseñar una solución y luego
considere si realmente se beneficiaría de una cadena de bloques.

ventajas y casos de uso

Después del descargo de responsabilidad anterior, ahora podemos centrarnos en dónde brillan las cadenas de bloques y algunos casos de uso adecuados para blockchains públicas o Ethereum en particular. Las finanzas descentralizadas son uno de los casos de uso más populares. La primera cadena de bloques, Bitcoin, fue construida como una plataforma de pagos descentralizada, pero las aplicaciones financieras de una cadena de bloques puede llegar mucho más lejos. Los contratos inteligentes se pueden utilizar para admitir muchos tipos de flujos de trabajo financieros, como intercambios descentralizados, derivados, negociación de márgenes, seguros, créditos, préstamos, inversiones, mercados de predicción, etc. Estos artefactos tradicionalmente requerían que los usuarios depositaran su confianza y sus activos en una institución: esto aumentó la barrera de entrada, y la institución a menudo cobraba una tarifa considerable por sus servicios. Ahora, un contrato inteligente en una cadena de bloques auditable públicamente puede actuar como una institución que apoya estos servicios financieros, actuando sobre criptomonedas dentro de la cadena de bloques.
En general, las cadenas de bloques brillan en escenarios donde se necesitaba una tercera parte confiable, ya que actúan como una plataforma neutral creíble para que varios participantes interactúen de forma segura. Esto se aplica no solo a las aplicaciones financieras, sino también siempre que sea necesario para verificar públicamente la transparencia de un proceso. Por ejemplo, en una subasta en línea, es posible verificar que las ofertas de todos los participantes se procesen al enviarlas (cifrado) a la cadena de bloques. Si un participante ve que su oferta no fue considerada, solo pueden mostrar una prueba de su oferta en la cadena de bloques. Al eliminar la necesidad de un tercero de confianza, los contratos inteligentes se pueden utilizar para crear plataformas o protocolos sin confianza. En lugar de construir sobre una capa patentada, donde
las reglas del juego pueden ser cambiadas unilateralmente por el propietario, puedes construir sobre una plataforma descentralizada. Un buen ejemplo es un mercado: las grandes empresas tradicionales que operan mercados de aplicaciones y servicios pueden modificar sus términos y condiciones en cualquier momento. Por otro lado, un mercado coordinado por un contrato es inmutable y no lo gestiona nadie más que la propia cadena de bloques. Las cadenas de bloques también se pueden utilizar para probar la existencia de un dato. Al enviar un hash firmado de un documento en la cadena de bloques, cualquiera puede demostrar que los datos se publicaron en una fecha determinada. Pero, lo que es más interesante, las cadenas de bloques también permiten verificar que un determinado dato no se haya publicado. Por ejemplo, si se usa una cadena de bloques
para almacenar revocaciones de certificados, cualquiera puede probar fácilmente que un certificado no fue revocado simplemente mostrando que la revocación nunca se cargó en la cadena, lo que actúa como una base de datos global neutral. Tener activos digitales registrados en una blockchain garantiza que se mantienen independientemente de la organización que los creó. Incluso puede permitir el comercio de esos activos a través de los límites del sistema donde se creó originalmente.
Algunos grupos también están explorando nuevos mecanismos de gobernanza mediante la construcción de Organizaciones Autónomas Descentralizadas (DAO) en Ethereum. En un DAO, un conjunto de participantes tiene algún tipo de poder de voto y puede presentar propuestas que luego son decididas a través de un mecanismo codificado en el contrato inteligente DAO. La cadena de bloques asegura la transparencia absoluta del proceso y permite experimentar rápidamente con nuevas formas de organizar grupos en torno a un propósito común. Sin embargo, a pesar de todas las ventajas que provienen de una blockchain pública, también existen importantes limitaciones impuestas a lo que se puede construir.

limitaciones

Una de las mayores limitaciones que impone una blockchain pública, como ya mencionamos, es el rendimiento de la transacción. Procesar una docena de transacciones por segundo a menudo no es suficiente para una sola aplicación, mucho menos para todas las aplicaciones integradas en la misma cadena para compartir. Sin embargo, este es el costo de la descentralización. Como el propio Vitalik Buterin dice: “Las cadenas de bloques no tratan de reducir los costos computacionales (al menos en relación con servidores centralizados). Las cadenas de bloques tratan de incurrir en un sacrificio en forma de aumento de costos computacionales para lograr una disminución en los costos sociales ”.
Sin embargo, hay mucho trabajo para escalar las cadenas de bloques públicas. Si una docena transacciones por segundo es muy pocas para compartir entre todas las aplicaciones en una cadena de bloques, entonces podemos construir más blockchains e interconectarlas. O podemos procesar lotes de transacciones fuera de blockchain y luego liquidarlas todas juntas en una sola transacción. Exploraremos más sobre estos enfoques mas adelante.

Otro desafío importante para las cadenas de bloques es la incorporación de usuarios. Mientras la descentralización ofrece muchos beneficios en términos de disminución de los costos sociales, eliminando terceras partes y al proporcionar privacidad, también dificulta el acceso a la plataforma. No hay una autoridad central para salvarle mientras hace algo erroneo en la plataforma y a nadie puede pedir su ayuda si extravió sus claves privadas y perdió todos sus fondos. Además, para interactuar con la red Ethereum, primero debe tener ether en su poder, sin mencionar una wallet para guardarlos, lo que hace que el proceso de configuración sea más largo y engorroso de lo que la mayoría de los usuarios están dispuestos a aceptar.
La incorporación se está abordando como uno de los principales puntos débiles en el uso de criptomonedas en aplicaciones, con muchas empresas que ofrecen soluciones centralizadas o actúan como custodios de los activos de los usuarios finales. Las aplicaciones descentralizadas también estan experimentando con flujos de incorporación de usuarios más suaves, para que los usuarios no se salgan de embotellamiento cuando se le pide que descargue una extensión de navegador dedicada para interactuar con la aplicación. Repasaremos muchas de estas técnicas para facilitar la incorporación de usuarios. Tenga en cuenta que las limitaciones y los casos de uso que hemos definido hasta ahora se aplican a blockchains que son de naturaleza pública, es decir, redes donde cualquier participante puede unirse para verificar el historial, enviar transacciones, consultar los datos actuales o incluso actuar como minero. Sin embargo, hay otro conjunto de blockchains que no hemos explorado hasta ahora.

blockchains no publicas

Cuando definimos por primera vez una cadena de bloques, la describimos como un libro de contabilidad digital público. Sin embargo, desde que apareció Bitcoin, ha habido un extenso trabajo en blockchains autorizadas, que desafían nuestra definición anterior al eliminar la naturaleza pública de la cadena.
Estas cadenas de bloques limitan qué nodos pueden unirse a la red o cuáles se les permite actuar como mineros o enviar transacciones. Por ejemplo, un patrón creciente en el mundo empresarial es el de las blockchains de consorcio. Estas cadenas de bloques son gestionadas por un grupo (consorcio) de diferentes instituciones. Cada miembro del consorcio controla un nodo en la red que actúa como un nodo validador en lista blanca y participa en un consenso basado en un algoritmo de votos para agregar nuevos bloques. Esto elimina la necesidad de una prueba de trabajo, ya que el consenso se alcanza votando entre un conjunto predefinido de nodos.

Algunas empresas están dando un paso más y optan por proyectos blockchains totalmente privados, que son internos de la empresa, y solo un nodo tiene permiso para agregar nuevos bloques. Estas cadenas se utilizan principalmente para auditabilidad y para fines de rastreo.


Estas cadenas de bloques autorizadas también pueden limitar no solo los nodos que actúan como mineros sino también qué nodos se unen a la red y pueden verificar las transacciones, o cuáles cuentas pueden enviar transacciones para su procesamiento. Estos cambios permiten que las cadenas de bloques corporativas tengan un ratio de transacción mucho mayor que las cadenas de bloques públicas. Además, al restringir el conjunto de nodos que pueden participar en la red, se protegen automáticamente contra el spam y puede anularse el requisito de pagar las tarifas de transacción.
Esto permite que las cadenas de bloques corporativas se adapten a un conjunto diferente de casos de uso. Por ejemplo, las cadenas corporativas se utilizan a menudo para liquidar transacciones globales entre las diferentes empresas que forman el consorcio, sin restricciones en el número de transacciones por segundo impuestas por blockchains públicas. Aquí, el valor de la blockchain radica en su auditabilidad y en eliminar la necesidad de una única parte de confianza para mantener los datos compartidos entre el consorcio. Si bien hay algunos desacuerdos sobre si estas cadenas autorizadas pueden
ser considerados verdaderos blockchains o no, el hecho es que la tecnología blockchain está haciendo su camino hacia el mundo empresarial. Sin embargo, a lo largo de ests posts nos centraremos en solo blockchains públicas, específicamente Ethereum. No obstante, gran parte del aprendizaje de las cadenas de bloques públicas también se pueden aplicar a las cadenas corporativas.

resumen

Este post sirvió como introducción al mundo de blockchain y Ethereum. Ahora debería tener un conocimiento básico de lo que es una cadena de bloques, cuando tiene sentido usar una, y cuáles son sus limitaciones. Introdujimos conceptos básicos a los que volveremos constantemente a lo largo de los posts, como contratos inteligentes, transacciones, bloques, reorganizaciones, consenso y nodos. Pasamos de Bitcoin a Ethereum y mencionamos brevemente los permisos de las blockchains como alternativa a las cadenas públicas. Después de toda esta teoría, en el próximo post nos vamos a poner manos a la obra, implementando nuestra primera DApp Ethereum. Esto le dará una mejor comprensión del concepto de aplicación descentralizada que presentamos en este post, y luego profundizaremos sobre sus diferentes en los posts siguientes.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s