Tutorial de Introducción a la Blockchain

Solidity

En este tutorial voy a explicar qué es la blockchain de una forma sencilla, a modo de introducción, siendo algo que necesitarás entender antes de embarcarte en el mundo del desarrollo Web3.

Qué es una Blockchain

Una blockchain es un tipo especial de base de datos cuya función es la de almacenar datos. Esta base de datos se compone de una serie de bloques de datos que se relacionan entre sí. Por ejemplo, podríamos tener el bloque 1, el bloque 2 y el bloque 3. Estos bloques se enlazan entre sí criptográficamente, de forma que el primer bloque referencie al segundo bloque y el segundo bloque referencie al tercero. Este es el motivo de que se llame cadena de bloques.

Una blockchain consta de dos partes, que son los metadatos y las transacciones:

  • Metadatos: Por un lado tienes los metadatos, como el timestamp o fecha de creación del bloque, la referencia al bloque anterior o una firma criptográfica de todas las transacciones ocurridas.
  • Transacciones: Las transacciones describen cómo se modifican los datos. Por ejemplo, en la blockchain de Bitcoin, una transacción podría definir cómo cierta cantidad de Bitcoin se transfiere de una cuenta a otra. Sin embargo, estas modificaciones de datos no se limitan a temas financieros, sino que pueden hacer referencia a cualquier tipo de datos.

Tal y como vemos, no hay nada revolucionario en esto, ya que esto es algo que puede soportar cualquier base de datos tradicional.

Cuáles son las ventajas de la blockchain

Tal y como hemos visto, con una blockchain podemos hacer lo mismo que con otra base de datos cualquiera. Sin embargo, su estructura tiene las siguientes ventajas:

  • Inmutabilidad: Solamente es posible agregar datos a la blockchain, siendo imposible modificar o eliminar los datos, difiriendo mucho del concepto de base de datos tradicional, en donde las operaciones CRUD son habituales. Una vez se agregue un bloque nuevo, será imposible modificarlo.
  • Descentralización: Una blockchain  no funciona en una única computadora, sino que funciona sobre una red compuesta por múltiples ordenadores o computadores que reciben el nombre de nodos. Existen bases de datos distribuidas, pero a diferencia de una cadena de bloques, estas base de datos no funcionan en una red pública, sino que lo hacen en redes privadas.
  • Seguridad: Las cadenas de bloques son muy seguras gracias a los sistemas que permiten agregar nuevos bloques a la misma, ya sea Proof of Work (POW) o Proof of Stake (POS).
  • Resistente a la censura: La naturaleza descentralizada de la blockchain, hace que sea imposible que uno o unos pocos actores controlen la red.

Hemos dicho que las cadenas de bloques funcionan sobre redes públicas, por lo que cualquiera puede ejecutar nodos sobre ellas. Sin embargo, ¿cómo es posible que sean seguras? Fue aquí en donde nació el concepto de minado, de forma que si quieres agregar datos a la blockchain, tendrás que agregar un nuevo bloque con las transacciones que describan todos los cambios de los datos que quieres agregar a la cadena de bloques.

Al proceso de inclusión de bloques se le denomina minado, y cualquier nodo puede ser un nodo minero. Al minar, compites contra otros mineros de la red para resolver una ecuación matemática. El primer minero que la resuelva, tendrá el derecho de agregar el siguiente bloque a la red. A esta forma de agregar bloques se le llama Proof of Work (POW). Este sistema es tremendamente complicado de hackear, ya que funciona de forma descentralizada.

Cuáles son las desventajas de la blockchain

Las desventajas de las cadenas de bloques frente a las bases de datos tradicionales están bastante claras:

  • Velocidad: El hecho de tener que sincronizar los datos por toda la red, distribuida globalmente, hace que las blockchains sean por lo general muy lentas.
  • Escalabilidad: Debido a la sincronización de la que hemos hablado, será complicado que una blockchain pueda soportar más transacciones que aquel número de transacciones por minuto para el que ha sido diseñada. Existen muchas iniciativas para arreglar este problema, como por ejemplo las capas Layer 2 de la red de Ethereum o las nuevas versiones de Ethereum.
  • Precio: El precio de almacenamiento de datos es superior al de las bases de datos tradicionales, ya que tienes que pagar al minero por el servicio de adición de datos a la blockchain. Por este motivo suele evitarse almacenar grandes cantidades de datos en las cadenas de bloques.
  • Privacidad: Dado que las cadenas de bloques son públicas, cualquier persona podrá ver lo que se almacena en la cadena de bloques.

Estas desventajas no deberían desanimarte a la hora de aprender a usar cadenas de bloques o a crear contratos con lenguajes como Solidity.

Cuáles son las Blockchains más utilizadas

Existe la confusión de que las criptomonedas y las cadenas de bloques son lo mismo, cuando las criptomonedas son solamente una aplicación de las cadenas de bloques. A continuación veremos cuáles fueron las primeras cadenas de bloques, que a día de hoy son las más utilizadas.

Blockchain de Bitcoin

Bitcoin fue la primera criptomoneda en introducir la tecnología de cadena de bloques. El caso es que no es una mala idea estudiar cómo funciona Bitcoin para entender las cadenas de bloques. A modo de curiosidad, puedes consultar el white paper de Bitcoin, en donde se explica por qué fue creado y cuál es su utilidad.

Bitcoin permite la transferencia de Bitcoin entre diferentes direcciones de la red de Bitcoin. Las direcciones de Bitcoin son identificadores que se componen de caracteres alfanuméricos. Cada una de estas direcciones está asociada a un balance, de forma que el dueño de la dirección pueda enviar Bitcoin a otra dirección o recibir Bitcoin en su propia dirección desde otras direcciones. A estas operaciones se les denomina transacciones, siendo almacenadas en bloques enlazados entre sí, tal y como hemos explicado antes.

Para computar el balance de una dirección, debes recorrer todos los bloques de la red y tener en consideración todas las transacciones relevantes. Los balances de las direcciones se gestionan mediante wallets. Cualquiera puede crear tandas direcciones como desee. Las direcciones se crean con cada bloque añadido, por lo que dejarán de ser creadas cuando el último bloque de Bitcoin sea minado.

Bitcoin no solamente puede realizar transacciones financieras, ya que también puede soportar otras operaciones mediante un lenguaje llamado Bitcoin scripting, pero no es demasiado utilizado, ya que resulta ser muy limitado. Este es el motivo por el que la red de Ethereum fue creada, introduciendo el lenguaje Solidity.

Blockchain de Ethereum

Bitcoin fue revolucionaria, pero no deja de ser muy sencilla. Este fue el motivo por el que Vitalik Buterin creó la Blockchain de Ethereum, que es una Blockchain de segunda generación que no solamente es capaz de procesar transacciones financieras sencillas, sino que también puede procesar otras operaciones arbitrarias, posibilitando así la creación de aplicaciones más sofisticadas sobre la red.

Ethereum usa la misma tecnología que Bitcoin, ya que en la red de Ethereum también tenemos usa serie de bloques, constando cada uno de ciertas transacciones. Inicialmente también había mineros agregando bloques mediante un algoritmo de Proof of Stake (POS). También tiene direcciones asociadas a una criptomoneda, que en este caso es el Ether. Si dispones de una dirección de Ethereum, podrás aceptar Ether en tu dirección o enviarlo a otra dirección.

Sobre la tecnología de Ethereum, que a priori es sencilla, funciona otra tecnología llamada Ethereum Virtual Machine (EVM). Esta máquina virtual permite la ejecución de pequeños programas denominados Smart Contracts, que pueden ejecutar código y manipular la criptomoneda de Ethereum para crear así aplicaciones como wallets multifirma o exchanges. Una wallet multifirma es una wallet que requiere la aprobación de varios usuarios para permitir la ejecución de ciertas transacciones de la wallet. Si sigues al completo la guía definitiva de Solidity, hacia la parte final veremos cómo crear una wallet multifirma.

Los smart contracts se ejecutan en al blockchain y una vez creados nada podrá eliminarlos o impedir que se ejecuten, por lo que requieren que seas un desarrollador minucioso a la hora de crearlos. Los Smart Contracts son difíciles de hackear siempre y cuando no contengan bugs.

Qué es un hash criptográfico

Los hashes criptográficos se usan mucho en el mundo de las Blokchains, ya que por ejemplo, cada transacción se identifica de forma única mediante un hash. Un hash criptográfico es como un UUID, que es un identificador único e irrepetible que identifica un elemento de forma única en toda la Blockchain, tal y como una huella dactilar de identifica a ti como persona.

Un hash se representa de forma alfanumérica. Si se modificase un único carácter del mismo, dejaría de cobrar sentido. Para crear un hash usamos funciones criptográficas conocidas, como los algoritmos sha2, sha3. Estos algoritmos reciben datos como entrada y los transforman en hashes criptográficos. Estos hashes siempre tendrán el mismo tamaño.

La creación de un hash es unidireccional, ya que es posible obtener un hash a partir de una entrada, pero no es posible obtener dicha entrada a partir del hash.

El algoritmo que usa Ethereum es el Keccak256, muy parecido al algoritmo sha3, aunque con ciertas diferencias. Puedes encontrar las diferencias entre ambos algoritmos aquí. Para más información acerca de las funciones criptográficas, puedes consultar esta guía de Wikipedia, en donde se explican detalladamente.

Como desarrollador, no necesitarás saber cómo funcionan los algoritmos criptográficos internamente, sino solamente entender el concepto de hash.

Qué es una dirección de una blockchain

Tanto en la red de Ethereum como en la de Bitcoin, la función de las direcciones es la de enviar o recibir Ether y Bitcoin respectivamente. Vamos a ver cómo se crean estas direcciones y para ello nos centraremos en la Blockchain de Ethereum.

Creación de direcciones

Para crear una dirección, comenzamos con una clave privada, que es un número aleatorio que deberás guardar de forma secreta, como si fuese una contraseña. Mediante criptografía elíptica generamos otra clave llamada clave pública, que consta de 128 caracteres. Puedes obtener la clave pública a partir de una clave privada fácilmente, pero no es posible hacer esto al revés

Mediante el algoritmo Keccak256, se computa la clave pública, obteniendo como resultado una cadena de 64 caracteres. Se obtienen los últimos 40 caracteres y finalmente se agrega 0x como prefijo, obteniendo una cadena de 42 caracteres, que será la que habitualmente uses para hacer referencia a tu dirección.

Podrás darle esta dirección a cualquiera que quieras que te envíe Ether o también podrás usar la clave privada para enviar Ether a otra dirección, firmando así la transacción. Estas direcciones no se crean en la blockchain, sino en aplicaciones externas llamadas wallets.

Tipos de direcciones

Es importante aclarar que existen dos tipos de direcciones, que son las EOA (Externally Owned Accounts) y las direcciones asociadas a un contrato:

  • Direcciones EOA: Son controladas por humanos o por una porción de código localizado fuera de la cadena de bloques. Disponen de una clave privada y permiten firmar transacciones.
  • Direcciones con contrato: Son direcciones asociadas a un Smart Contract. No tienen claves privadas y no pueden iniciar transacciones. Siempre será una dirección EOA la que inicie una transacción. Las direcciones de contrato reaccionan a las transacciones de a cuerdo con el código del Smart Contract.

Campos de una dirección

Las direcciones EOA y las de contrato constan de estos campos:

  • Balance: Es el saldo de Ether asociado a la dirección. Tanto las direcciones EOA como las de contrato pueden poseer algo de Ether.
  • Data: Para direcciones de contrato, esos son los datos del contrato inteligente. Para direcciones EOA, está vacío.
  • Code: Para direcciones de contrato, este es el código del contrato inteligente, para direcciones EOA, está vacío.
  • Nonce: Para direcciones EOA, esta es la cantidad de transacciones enviadas por dirección. Esto evita lo que llamamos ataque de repetición, en el que la misma transacción se envía varias veces hasta que se agotan los fondos de una dirección. Para las cuentas de contrato, este campo es la cantidad de Smart Contracts que fueron creados por esta dirección. Esto significa que un Smart Contract puede crear otros Smart Contracts.

Qué es una wallet y cómo se crea

Una wallet es un software externo a la blockchain que gestiona direcciones, siendo instalado y controlado por los usuarios. Puedes tener tu wallet en diferentes formatos, ya que existen wallets que puedes tener en tu navegador o wallets que funcionen como una aplicación de tu teléfono o PC, así como wallets físicas. Cuando usas Ethereum, lo más habitual es usar wallets como metamask, que es una extensión de navegador, aunque por temas de seguridad, las wallets físicas como Ledger o Safepal se han extendido mucho.

Generación de una wallet

La función principal de una wallet es la de generar direcciones, que se crean a partir de una clave privada generada aleatoriamente. Como hemos explicado, a partir de esta clave privada se crea la clave pública y de esta se deriva la dirección. Puedes tener más de una dirección en tu wallet, pudiendo usar una para ahorrar Ether y otra para operaciones más inseguras desde tu navegador. Es importante destacar que a partir de una misma clave privada podrás generar más de una dirección, lo que se denomina como HD Wallet (Hierarchical Deterministic Wallet). Si tienes dos direcciones generadas a partir de la misma clave privada, es imposible saber que han sido generadas a partir de la misma.

Si quieres saber más cosas acerca del proceso de generación de wallets, puedes consultar más información acerca del protocolo BIP32 y del protocolo BIP39. Además, también puedes probar este generador de wallets.

Almacenamiento de una wallet

La creación de wallets es un proceso descentralizado. Técnicamente, dado que las claves privadas se generan de forma aleatoria, es posible generar la misma dirección dos veces, pudiendo así robar el Ether que un usuario tenga en su dirección. Sin embargo esto es altamente improbable, por no decir imposible, por lo que no merece la pena preocuparse. Deberías preocuparte de almacenar tu clave privada de forma segura. Para ello, es recomendable almacenar tu clave privada en wallets físicas de difícil acceso, además de tener copias de seguridad.

Crear copias de seguridad de tus claves privadas en papel sería muy poco práctico, siendo el motivo de que existan frases mnemónicas que representan tu clave privada mediante 12 o más palabras.

Además de crear direcciones, la otra función de las wallets es la de firmar transacciones usando tu clave privada invirtiendo cierta cantidad de Ether. A continuación veremos cómo funciona este proceso.

Transacciones en la Blockchain

A continuación vamos a ver cuáles son los tipos de transacciones existentes, así como los campos de los que se componen cada una de ellas.

Qué es una transacción

Una transacción de Ethereum es un paquete de datos que describe una acción que puedes realizar en la blockchain. Estas transacciones son inmutables e irreversibles una vez ejecutadas.

Tipos de transacciones

Existen tres tipos de transacciones que una dirección puede ejecutar sobre la Blockchain:

  • Envío de Ether a una wallet.
  • Ejecución de un Smart Contract.
  • Creación de un Smart Contract

Campos de una transacción

Las transacciones contienen ciertos metadatos que se almacenan junto con los datos de la transacción en sí misma. Esta sería la representación de una transacción en formato JSON:

Estos son los campos de los que se compone una transacción:

  • Campo from: La dirección que envía y firma un transacción.
  • Campo to: La dirección del destinario de la transacción, siempre que envíes Ether a alguien. Si ejecutas un Smart Contract, será la dirección del Smart Contract, estando vacío si lo estás creando.
  • Campo gas: Describe cuánto estás dispuesto a pagar a los mineros para ejecutar la transacción en la Blockchain.
  • Campo value: Solamente se usa si envíes Ether a alguien más, representando la cantidad de Ether.
  • Campo data: La función del Smart Contract que quieres ejecutar junto con sus parámetros de entrada.
  • Campo nonce: Es opcional y permite sobrescribir una operación anterior.

Ciclo de vida de una transacción

Vamos a ver cuál es el ciclo de vida de una transacción cuando esta se ejecuta en la blockchain:

  1. Primero tu wallet crea la transacción y rellena todos los campos de la misma.
  2. Seguidamente, la wallet firma la transacción usando la clave privada asociada a tu dirección.
  3. Luego la wallet envía la transacción a la Blockchain de Ethereum.
  4. Después, un minero almacenará la transacción y la incluirá en el próximo bloque. Este proceso llevará una cantidad de tiempo variable, aunque en la red de Ethereum suelen ser unos segundos.

Es importante destacar que no importa quién sea el minero que incluya la transacción. Si se intenta modificar la transacción o su firma, la red de Ethereum detectará que la transacción es inválida y la rechazará.

Después de que la transacción sea almacenada y agregada a un bloque, podrás verla reflejada en la cadena de bloques, viendo los datos actualizados.

Para comprobar si una transacción se ha ejecutado correctamente, puedes usar herramientas como Etherscan.

Qué es un Smart Contract y cómo funciona

Los Smart Contracts son pequeños programas que funcionan sobre una cadena de bloques. En el caso de Ethereum, sobre la Blockchain de Ethereum.

Cómo funcionan los Smart Contracts

Los Smart Contracts se referencian mediante una dirección de Ethereum y tienen asociado un código y ciertos datos. Funcionan sobre la Blockchain.

Para crear un Smart Contract, necesitarás usar un lenguaje como Solidity, valiéndote de variables y de funciones. Luego compilarás este código en otro código llamado EVM Bytecode. La EVM (Ethereum Virtual Machine) es la parte te Ethereum encargada de ejecutar Smart Contracts. La EVM no sabe ejecutar Solidity, sino que solamente es capaz de interpretar las instrucciones básicas en EVM Bytecode.

Una vez hayas compilado un Smart Contract necesitarás desplegar el EVM Bytecode en la Blockchain a través de una transacción. Un minero procesará la transacción y cuando sea firmada y agregada a la cadena de bloques, ya podrás interactuar con el Smart Contract. Para ello crearás otras transacciones en donde especificarás las funciones del Smart Contract que quieres ejecutar.

Una función podrá llamar a otras funciones del Smart Contract, así como a otras funciones de otros Smart Contracts de la Blockchain. Como ves, los Smart Contract son sencillos pero a su vez complejos y potentes.

Ventajas de los Smart Contracts

Los Smar Contracts tienen propiedades que los hacen muy diferentes de otros programas. Estas son las ventanas que tienen los Smart Contracts:

  • Inmutabilidad: Una vez agregados a la cadena de bloques, su código será inmutable, siendo imposible actualizarlo. De este modo tendrás la garantía de que el código se ejecutará tal cual fue creado.
  • No censurables: Los Smart Contracts son resistentes a la censura. Una vez son agregados a la Blockchain, nadie podrá modificarlos o eliminarlos; ni siquiera su creador.
  • Seguridad: Los Smart Contracts son muy seguros siempre y cuando no contengan bugs, siendo casi imposible hackearlos.
  • No necesitas servidores: Los Smart Contracts no necesitan funcionar sobre ningún servidor. Funcionan de forma distribuida. Bastará con desplegarlos en la Blockchain y olvidarte.
  • Transferencias sencillas: Los Smart Contracts te permiten transferir fondos de forma muy sencilla. Se transferirá Ether, que es la criptomoneda de Ethereum. No necesitas complejas integraciones con plataformas de pago.

Desventajas de los Smart Contracts

Estas son las desventanas que tienen los Smart Contracts:

  • Son caros: Resulta caro ejecutar Smart Contracts, ya que necesitas pagar con GAS.
  • Son lentos: Los Smart Contracts se ejecutan de una forma muy lenta debido a su naturaleza distribuida. Una transacción de la red de Ethereum suele tardar alrededor de 15 segundos en ser firmada y agregada a la cadena de bloques por parte de un minero.
  • Son limitados: Los Smart Contracts son muy limitados en cuanto a las operaciones que pueden realizar si los comparamos con otras aplicaciones, pudiendo almacenar únicamente pequeñas cantidades de informaciín.
  • Integración: No puedes llamar a ninguna API que se encuentre fuera de la cadena de bloques.
  • Planificación: No puedes ejecutar un Smart Contract en el futuro, planificando su funcionamiento por adelantado. Los Smart Contracts funcionan bajo demanda.

Qué es el GAS de una Blockchain

Cuando envías una transacción a la Blockchain necesitas pagar cierta recompensa a los mineros. La ventaja es que de este modo se previene el spamming. Quien paga es el dueño de la dirección que envía la transacción. Quien recibirá estos honorarios será el minero que mine el bloque en el que se incluya tu transacción.

Para calcular cuánto se paga, se necesita entender el concepto de GAS. Cuando ejecutas un Smart Contract en la red de Ethereum, se ejecutan ciertas operaciones en la EVM de Ethereum. Cada una de estas operaciones es más o menos intensiva. Esta intensidad de cuantifica mediante el GAS, que es una unidad de medida. El resultado de todas las operaciones de una transacción dará como resultado la cantidad de GAS que se ha utilizado una vez finalizada.

Cuando tengamos el coste total de GAS, convertiremos este valor a Ether. No puedes pegar con algo llamado GAS, sino que pagarás con Ether usando esta fórmula:

CosteEnEther = PrecioGas * GasUsado

Para saber el precio del GAS necesitarás saber el precio que estás dispuesto a pagar por él. Si defines un precio de GAS bajo, tu transacción ni siquiera se ejecutará, por lo que deberás usar un precio razonable en base al uso actual de la red. También puedes usar un precio más alto para que tu transacción se ejecute antes.

Esto ha sido todo.


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”