Sobre la Blockchain

Cómo Decentraland utiliza la blockchain de Ethereum.

Todas las blockchains son en esencia bases de datos descentralizadas que se distribuyen entre las máquinas de una red. Las transacciones se agrupan en "bloques" y se procesan secuencialmente para formar una cadena de eventos.

Ethereum es una de las blockchains más populares. Lo que la diferencia de otras, como Bitcoin, es que utiliza la blockchain como almacenamiento para más que solo un registro de transacciones de moneda. Ethereum puede almacenar información más compleja para distinguir distintos tipos de tokens o incluso manejar tokens únicos con características específicas. La blockchain de Ethereum también ejecuta smart contracts; estos permiten ejecutar transacciones más complejas que también pueden depender de eventos acordados.

Decentraland utiliza la blockchain de Ethereum para registrar la propiedad de los activos digitales y otros objetos negociables que pueden ser leídos y a los que puede reaccionar una escena 3D.

La blockchain no se utiliza para almacenar el estado de la escena, la posición del jugador ni nada que necesite cambiar en tiempo real mientras un jugador interactúa con una escena; todo eso se almacena ya sea localmente en la máquina de cada jugador o en un servidor privado propiedad del dueño de la escena. Los desarrolladores de cada escena deben elegir qué información vale la pena almacenar en la blockchain y qué almacenar en un servidor privado.

Carteras

Los tokens de Ethereum se mantienen en wallets. Una wallet de Ethereum puede contener varios tokens, incluyendo Ether, MANA, LAND y otros tokens que pueden ser usados por juegos o experiencias en Decentraland.

Hay muchos proveedores de wallets donde puedes mantener los tokens de Decentraland. Para usar el Marketplace, o para entrar en Decentraland, debes usar una wallet que esté integrada en tu navegador web, así que recomendamos que uses:

Cada wallet tiene una clave pública y una clave privada. El hash de tu clave pública es la dirección única de tu wallet, usada para enrutar transacciones e identificar a un jugador. Tu clave privada es usada por tu wallet para firmar cada transacción que envías a la red y certificar que realmente fue enviada por ti. Tu clave privada también se utiliza para restaurar tu wallet en caso de que olvides tu contraseña, así que guárdala en un lugar seguro y no la compartas con nadie.

En Decentraland, las identidades de los jugadores se construyen alrededor de las wallets. Dado que las claves públicas de las wallets son únicas, tu escena puede usarlas para identificar a un usuario de Decentraland de forma persistente. Las wallets también pueden contener distintos tokens que pueden darle a un jugador un avatar único, un wearable, permisos para entrar en escenas que elijan restringir el acceso, un arma especial para usar en un juego, etc.

Transacciones

Las transacciones realizan cambios en la información que está almacenada en la blockchain. Las transacciones típicas implican tokens que cambian de propietario, por ejemplo el usuario A que le da su token LAND al usuario B a cambio de una cantidad de tokens MANA. En la red de Ethereum, sin embargo, una transacción también puede significar cambiar la información que está almacenada sobre un token sin cambiar su propietario. Por ejemplo, cambiar la descripción de un parcel o fusionar varios parcellas en un Estate.

Todas las transacciones que ocurren en la main chain de Ethereum tienen un costo que se paga en tokens Ether. Esta tarifa se denomina 'gas' y se paga al usuario de la red que 'mina' la transacción.

Cuando solicitas que se lleve a cabo una transacción, fijas el precio del gas que estás dispuesto a pagar para que la transacción sea minada. Las transacciones que ofrecen precios más altos se minan más rápido, ya que los mineros les dan prioridad. Los precios de mercado para estas transacciones oscilan regularmente; tienden a ser más caros cuando hay un mayor uso de la red. Asegúrate de que lo que ofreces no esté por debajo del precio de mercado, de lo contrario tu transacción podría permanecer en una pool sin procesar indefinidamente.

Todas las transacciones deben ser firmadas por una dirección de Ethereum, usando la clave privada de la dirección. Esto es lo que certifica que la transacción fue llevada a cabo por esa dirección.

Validación de transacciones

Las transacciones en la blockchain no son inmediatas; requieren tiempo para ser "minadas" por uno de los nodos de la red y luego para ser propagadas al resto de las máquinas. Cuantas más transacciones se solicitan en la red, más tiempo tardan en validarse.

En términos breves, así es como se valida una transacción:

  1. Ocurre una nueva transacción; entra en una pool de transacciones no confirmadas.

  2. Una de las máquinas de la red resuelve con éxito un algoritmo para minar un nuevo "bloque" que contiene un puñado de transacciones de esta pool, incluida ésta. Adjunta este nuevo bloque al final de la cadena.

  3. El bloque se comparte con otras máquinas de la red. Cada máquina verifica que cada transacción en un bloque sea válida y comprueba el hash del bloque para asegurar que es legítimo, luego lo añade a su propia versión de la cadena.

  4. El nuevo bloque se propaga por toda la red. Existe un entendimiento universal compartido de que esta transacción ha tenido lugar.

Sidechains

Decentraland se asocia con Maticarrow-up-right para crear una sidechain (un tipo especial de blockchain) que podrá manejar transacciones más rápido y barato que la red principal de Ethereum. Esta sidechain será ideal para las transacciones dentro del juego, ya que los cambios pueden ocurrir más cerca del tiempo real y a muy bajo costo. Para transacciones que involucren objetos valiosos, seguiremos recomendando la main chain de Ethereum, ya que será más segura.

Cada desarrollador que trabaje en una escena podrá elegir si usar la mainchain, la sidechain o una combinación de ambas para diferentes transacciones.

La sidechain se mantendrá interoperable con la mainchain de Ethereum. Podrás cargar tokens desde la main chain hacia la side chain y viceversa. Las transacciones que ocurran en la sidechain eventualmente se reflejan en la mainchain cuando los tokens "exit" de nuevo a la mainchain.

Trigger transactions from a scene

El código de tu escena puede trigger transacciones, tanto en la mainchain de Ethereum como en la sidechain de Decentraland. Podrías tener una tienda en tu escena que venda tokens (como NFTs), o tener un juego que recompense a los jugadores con ítems de juego por alcanzar ciertos objetivos.

El usuario siempre debe aprobar estas transacciones explícitamente en su cliente de Ethereum. Por ejemplo, al usar Metamask, Metamask solicita al usuario aceptar cada transacción antes de que se procese.

Tipos de tokens

Diferentes tipos de tokens pueden manejarse en la red de Ethereum. Han surgido algunos estándares que agrupan tokens que comparten las mismas características.

En Decentraland, puedes usar tokens para representar objetos relacionados con tu juego o experiencia, como un arma o un trofeo. Como los tokens se mantienen en la wallet de un jugador, acompañan al jugador de escena en escena, por lo que cada escena puede elegir si y cómo quiere reaccionar ante cada tipo de token existente.

Leer Qué son los NFTsarrow-up-right en nuestro blog para una mirada más a fondo sobre la aparición y evolución de los tokens no fungibles.

Tokens fungibles

Si un objeto es fungible, entonces puede sustituirse o intercambiarse por cualquier objeto similar. Las monedas fiduciarias, como el dólar estadounidense, son fungibles. Un billete de un dólar puede intercambiarse por cualquier otro billete de un dólar.

Tokens criptográficos como Bitcoin, Ethereum y MANA son todos fungibles porque una unidad de token puede intercambiarse por cualquier otra unidad de token.

También podrías crear tokens fungibles personalizados para usar en escenas de Decentraland y usarlos para representar objetos que son todos iguales y no tienen propiedades distintivas o personalizables entre sí. Podrías, por ejemplo, crear un juego que gire en torno a coleccionar una gran cantidad de objetos idénticos y representarlos mediante un token fungible. También podrías usar un token fungible para representar un billete dorado que dé a los jugadores que lo posean acceso a una región o servicio específico.

ERC20 es el estándar más aceptado para tokens fungibles en la Red de Ethereum. MANA está construido sobre este estándar.

Tokens no fungibles

Los tokens no fungibles (o NFTs) tienen características que hacen que cada unidad sea objetivamente diferente de las demás. Los parcellas de LAND en Decentraland son NFTs, ya que la ubicación de cada parcela es única. La adyacencia a otras parcelas, carreteras o distritos hace que estas ubicaciones sean relevantes para los propietarios de los tokens.

En Decentraland, puedes usar NFTs para representar ítems dentro del juego como avatares, wearables, armas y otros elementos de inventario. Podrías, por ejemplo, usar un solo tipo de NFT para representar todas las armas en tu juego y diferenciarlas estableciendo propiedades diferentes en esos NFT.

Los NFTs pueden usarse para proveer bienes digitales escasos y demostrables. Debido a la escasez legítima posibilitada por la blockchain, los compradores pueden estar seguros de que el arte que adquieren es, de hecho, raro. Esto le da al arte digital un valor real que antes no habíamos visto.

Los ítems de juego tendrán una historia que se almacena en la blockchain. Esta historia podría hacer que un objeto sea más valioso, por ejemplo si se usó para lograr grandes logros o fue usado por alguien admirado.

Dependiendo del contrato que describa el token, cada NFT podría ser inmutable o podrías permitir que los jugadores personalicen y cambien ciertas características sobre ellos si así lo desean.

ERC721 es el estándar más aceptado para tokens no fungibles en la Red de Ethereum. Los tokens LAND siguen el estándar ERC721.

Smart Contracts

Un contract consiste tanto en código (sus métodos) como en datos (su estado) que residen en una dirección específica en la blockchain de Ethereum.

Los métodos en un contract siempre se llaman mediante una transacción que tiene el a campo configurado a la dirección del contract. El código que ejecuta el método del contract puede incluir llamadas a otros contratos; estos disparan más transacciones que tienen el de campo configurado a la dirección del contract.

Un contract no puede desencadenar ninguna acción por sí solo ni en base a un evento temporal. Todas las acciones realizadas por un smart contract siempre surgen de una transacción que llama a una de las funciones del contract.

Puedes usar smart contracts para condicionar transacciones basadas en condiciones personalizadas. Por ejemplo, los jugadores podrían apostar por el resultado de un juego y los pagos correspondientes ocurrirían tan pronto como el resultado del juego se informe al contract.

Todo el código de un smart contract es público para quien quiera leerlo. Esto permite a los desarrolladores crear reglas verificables públicamente.

Todos los Tokens son definidos por un smart contract que especifica sus características y lo que se puede hacer con él. Decentraland ha escrito y mantiene varios smart contracts. Los tokens LAND y MANA están definidos por los LANDregistry y MANAtoken contracts respectivamente.

Puedes encontrar la dirección de cada contrato creado por Decentraland en Decentraland smart contractsarrow-up-right.

Puedes leer el código completo de cada uno de esos contratos, ya que es información pública en la blockchain. Puedes encontrar el contract por nombre en Etherscanarrow-up-right y leer su contenido allí.

dApps

dApps (aplicaciones descentralizadas) son aplicaciones que se construyen sobre smart contracts y la blockchain.

Una dApp puede ser tan simple como algo que valida que tu wallet posee cierto token y te permite usar un servicio. O puede ser una aplicación completa con su propia UI, como el Marketplace de Decentraland.

Red de prueba Sepolia

Antes de desplegar un smart contract, crear un nuevo tipo de token o una escena de Decentraland que dependa de transacciones en la red de Ethereum, necesitas asegurarte de que no tenga errores o fallas que usuarios malintencionados puedan explotar.

La red de prueba Sepolia es una versión alternativa de Ethereum que está hecha específicamente para ejecutar pruebas.

Los tokens en la red Sepolia no tienen valor real, por lo que puedes permitirte cometer errores sin correr ningún riesgo real. Puedes reponer cualquier token perdido de forma gratuita usando un faucet:

Si estás desarrollando una escena que dispara transacciones, probar estas transacciones en la red Sepolia es gratuito, ya que los tokens que envías no tienen valor. En mainnet, de otro modo, tendrías que pagar al menos una tarifa real de gas en Ether por cada transacción de prueba que realices.

Una vez que confíes en que tu código funciona como se espera y no puede ser explotado, puedes desplegar en la mainnet de Ethereum.

Reorganizaciones de la blockchain

Ocasionalmente, múltiples máquinas crearán nuevos bloques alternativos aproximadamente al mismo tiempo. Esto es un problema, porque bifurca la cadena en dos versiones divergentes que podrían contradecirse entre sí. Cuando ocurre una bifurcación, Ethereum lo resuelve dando siempre prioridad a la cadena más larga y descartando cualquier cadena más corta. Aunque es posible que existan dos cadenas rivales al mismo tiempo, pronto una de las dos cadenas añadirá otro bloque y superará a la otra. Debido al tiempo que toma resolver los algoritmos de minería, se vuelve cada vez más difícil para las cadenas rivales seguir creciendo en perfecta sincronía entre sí. Tarde o temprano una prevalecerá sobre la otra.

Cuando una cadena supera a la otra y se resuelve la disputa, las máquinas que habían adoptado la cadena más corta necesitan hacer ajustes. Esto es lo que se conoce como una "reorg". Necesitan revertir todas las transacciones incluidas en los bloques de la rama en la que están hasta llegar al punto en que ocurrió la bifurcación. Luego necesitan añadir los nuevos bloques de la rama más larga que se considera legítima.

Las transacciones revertidas pueden volver a la pool de transacciones pendientes hasta que sean retomadas por un minero (o sean descartadas). También se revierten las tarifas de gas pagadas por estas transacciones.

Los bloques que acaban de añadirse al final de una cadena tienen una probabilidad sustancial de ser revertidos debido a los mecanismos explicados arriba. A medida que se añaden bloques posteriores al final de la cadena, es cada vez menos probable que los bloques más atrás en la blockchain puedan ser revertidos, porque eso requeriría una reorg mayor. Debido a esto, cada nuevo bloque que se añade al final de la cadena después de una transacción se considera una confirmación para esa transacción.

Al crear aplicaciones (o escenas) que usan información fuera de la blockchain, debes ser consciente de la ocurrencia de reorgs. Podrías querer considerar las transacciones como verificadas solo cuando haya ocurrido un cierto número de confirmaciones y la transacción ya no esté al final de la cadena.

Usar varias confirmaciones hará que la información sea muy estable, pero las transacciones tardarán mucho en reflejarse.

Usando pocas confirmaciones, los cambios se reflejarán más rápido, pero a veces habrá contratiempos que parecerán deshacer transacciones cuando ocurran reorgs. Si estas transacciones tienen consecuencias fuera de la cadena en tu escena, entonces puede que necesites de algún modo revertir también esas consecuencias.

Última actualización