¿Cómo vas a usar cajas en Algorand?
Los desarrolladores con los que trabajo a veces dicen “cualquier cosa es posible de construir”. Este es un aspecto emocionante del desarrollo de software y una de las principales razones por las que la gente se enamora de la programación: te permite construir todo lo que puedas imaginar.
Desafortunadamente, es más probable que los ingenieros de digan “cualquier cosa es posible de construir…
…pero es difícil.
…pero es arriesgado.
… pero va a ser costoso de mantener”.
Los contratos inteligentes en son una tecnología incipiente. Cumplen su objetivo principal de permitir que las personas creen aplicaciones distribuidas, pero sigue siendo un camino desafiante hacia el verdadero éxito.
Por estas razones, muchas aplicaciones supuestamente descentralizadas en dependen, lamentablemente, de servicios fuera de la cadena para parte de su implementación. El nacimiento de la “web 2.5” en lugar de la “web 3.0”, a medida que el mundo avanza hacia la verdadera descentralización.
En Algorand, este desafío es lo más importante, y cada actualización de la máquina virtual de Algorand (AVM) sirve a los desarrolladores que se basan en nuestra cadena de bloques. Nuestro objetivo es facilitar el desarrollo de aplicaciones seguras, eficaces y totalmente descentralizadas. Punto final.
Nuestro último lanzamiento de AVM no es una excepción. Hemos introducido una nueva forma flexible de almacenamiento para Smart Contracts: cajas. Un Smart Contract puede crear tantas cajas como necesite, del tamaño que necesite (hasta 32K), cuando las necesite.
Por ejemplo, supongamos que Alice quiere ofrecer un servicio de Oracle a precios simbólicos. Ella crea un contrato inteligente al que los usuarios pueden llamar para obtener el precio actual de un token.
Dado el conjunto cada vez mayor de tokens disponibles en Algorand, ya sean nativos o puenteados, el contrato de Oracle de Alice necesitará una cantidad cada vez mayor de almacenamiento persistente a lo largo del tiempo.
Las cajas son la solución perfecta: el contrato inteligente de Alice asigna una caja por token que rastrea.
Cuando se crea CoolCoin, el contrato de Oracle puede crear una nueva caja “CoolCoin”. Este cuadro almacenará el precio de CoolCoin. Este valor puede ser leído y actualizado por el contrato de Oracle de Alice a partir de entonces. Los usuarios que quieren saber el precio de CoolCoin llaman al contrato de Oracle para obtener el precio.
Esperemos que esto suene tan sencillo como lo es. Los cuadros ofrecen una forma directa de implementar un mapa para almacenar todos sus pares clave-valor.
Antes de las cajas, los desarrolladores de Smart Contract que necesitaban más almacenamiento tenían que recurrir a trucos como crear aplicaciones o cuentas ficticias solo para poder usar su estado, administrando cuidadosamente los permisos para evitar introducir vulnerabilidades en el proceso.
Por supuesto, el almacenamiento digital tiene un costo, y en es más costoso debido a su naturaleza distribuida (y duplicada).
Un ejemplo ilustrativo simple: Alice y Bob se acaban de casar y quieren guardar una pequeña foto de su boda en la cadena. Pueden crear un contrato inteligente de administración de almacenamiento que les permita crear una caja y almacenar la foto en ella. Pueden volver a introducir el contrato inteligente en una de sus cuentas para que solo ellos puedan controlar la caja.
Si almacenan la foto de tamaño máximo que pueden (32K), les costará alrededor de 13 Algo, aproximadamente $ 3-4 al momento de escribir.
El almacenamiento de Algorand se paga mediante un aumento del requisito de saldo mínimo de una cuenta. En otras palabras, Alice necesita mantener al menos 13 Algo en su cuenta de contrato para continuar almacenando la imagen allí. Si en el futuro Alice y Bob se divorcian y Alice quiere grabar digitalmente la fotografía de su boda, puede eliminarla y liberar su 13 Algo para otros usos.
Casi cualquier cosa. Las cajas presentan un paradigma tan flexible y poderoso que es probable que la mayoría de los contratos inteligentes utilicen cajas en el futuro.
Un ejemplo convincente del uso de cajas es la protección de reproducción para puentes. Los puentes criptográficos son una tecnología poderosa que permite transferir valor a través de cadenas de bloques, lo que hace que el mundo criptográfico realmente no tenga fronteras. Sin embargo, debido a la complejidad de tratar con múltiples cadenas, los puentes deben diseñarse cuidadosamente para que no estén sujetos a piratería. Un tipo de pirateo de puente es un ataque de repetición.
Un ataque de repetición es cuando un atacante envía la misma transacción dos veces. El mensaje duplicado parece correcto, pero solo uno de ellos debería pasar.
En un nivel alto, un puente bloquea un activo en la cadena de bloques de envío y acuña un activo correspondiente en la cadena de bloques de recepción. Un ataque de repetición exitoso en un puente duplicaría los activos de acuñación en la cadena de bloques receptora para un único activo bloqueado en la cadena de bloques emisora.
Para protegerse contra los ataques de repetición, el contrato inteligente de acuñación en la cadena de bloques receptora debe rastrear cada transacción que ya ha procesado y verificar cualquier transacción nueva con todas las transacciones anteriores para asegurarse de que no sea un duplicado. Recordar lo que ya se ha ejecutado derrota el ataque.
El seguimiento de cada transacción requiere un almacenamiento proporcional al número de transacciones que procesa un puente. Esto puede convertirse en un número enorme si el puente tiene éxito. Las cajas se adaptan perfectamente a necesidades de almacenamiento ilimitadas como esta: una caja por transacción.
Otro caso de uso de interés para las cajas es un sistema de gobierno, como está previsto que adopte xBacked.
Digamos que un protocolo está controlado por un conjunto de gobernadores que pueden proponer actualizaciones para que sean votadas por todos los gobernadores. Puede haber muchos gobernadores y un gobernador individual puede hacer varias propuestas, por lo que puede haber muchas propuestas activas en un momento dado.
Los datos en esta situación no se asignan naturalmente al estado local o global. No sería posible almacenar todas las propuestas en el estado global de una aplicación, ya que tiene un tamaño limitado. No sería posible almacenar cada propuesta en el estado local del proponente, ya que un proponente puede hacer varias propuestas que podrían exceder el tamaño de su estado local.
Con los recuadros, la solución parece bastante simple: un recuadro por propuesta, por ejemplo, “Propuesta de hacer el bien de Anne”. El cuadro contiene el texto de la propuesta y las opciones de voto.
Pero, ¿dónde deben almacenarse los votos en sí? El contrato debe rastrear quién ya ha votado para asegurarse de que no vuelva a votar. Por lo tanto, puede crear un cuadro por voto, por ejemplo, “Voto de Alicia para la propuesta de hacer el bien de Ana”. Esta sería una caja muy pequeña, y habría muchos de ellos (tantos como votos).
Sin cajas, los desarrolladores se habrían visto obligados a hacer compromisos como permitir solo un voto abierto a la vez, de modo que la información se ajuste al estado global del contrato. Estas limitaciones ya no existen, y las posibilidades técnicas que abren las cajas están estimulando nuevas ideas en todo el ecosistema.
Las cajas no solo fortalecen las dapps existentes al simplificar su arquitectura, sino que también permiten nuevos casos de uso y operaciones seguras de interoperabilidad. Las cajas son un cambio de juego para Algorand. La cantidad de proyectos que han estado llamando sin descanso a mi puerta para preguntarme cuándo se lanzarán las cajas es solo el último indicador.
El AVM se creó desde el principio teniendo en cuenta el desarrollo de contratos inteligentes seguros y de alto rendimiento: intercambios atómicos nativos, activos, contratos inteligentes y, ahora, almacenamiento ilimitado de contratos inteligentes. AVM se ha convertido en una de las plataformas de contratos inteligentes más potentes y versátiles del sector.
Para obtener todos los detalles técnicos sobre las cajas y cómo usarlas, consulte el artículo del portal para desarrolladores: https://developer.algorand.org/articles/smart-contract-storage-boxes/