Saltar al contenido

Composooor Snap: Un habilitador de componibilidad para apps híbridas onchain y offchain

Ganador del Hackathon ETHDenver

6 min de lectura
Composooor Snap: Un habilitador de componibilidad para apps híbridas onchain y offchain

MetaMask Snaps es la hoja de ruta para convertir a MetaMask en la wallet más extensible del mundo. Como desarrollador, puedes llevar tus funciones y APIs a MetaMask de formas completamente nuevas. Los desarrolladores de Web3 son el núcleo de este crecimiento, y esta serie tiene como objetivo destacar los novedosos MetaMask Snaps que se están construyendo hoy en día.

Composooor Snap

Repositorio del Snap: https://github.com/kairos-loan/composooor/tree/main/packages/snap

¿Por qué lo construiste?

Durante nuestra experiencia desarrollando protocolos financieros basados en smart contracts y otras aplicaciones blockchain, notamos un patrón recurrente. Cada vez más aplicaciones utilizan recursos offchain (como cómputo o almacenamiento de datos) verificados en la lógica del contrato, debido a las limitaciones técnicas de las blockchains. Algunos ejemplos incluyen libros de órdenes, árboles de Merkle para airdrops, listas ordenadas, atributos de tokens, entre otros.

En cada caso, información valiosa se almacena o calcula offchain, pero puede utilizarse y tiene grandes efectos en las interacciones onchain. Para hacer esto posible, los contratos emplean distintas técnicas criptográficas, como hashes o firmas, para verificar la validez. Las dapps requieren entonces frontends o APIs con lógica específica capaz de generar la información relevante para el contrato. Lamentablemente, este patrón rompe la componibilidad; por ejemplo, una aplicación DeFi que depende de un libro de órdenes propietario alojado en AWS no puede ser integrada fácilmente por otro smart contract.

Hartos de esas limitaciones, decidimos desarrollar un estándar e infraestructura que permita integrar fácilmente cualquier aplicación en cualquier contexto. Creemos firmemente que facilitar las integraciones nuevamente abre muchas oportunidades para el ecosistema.

¿Puedes explicarnos la implementación técnica?

Introducción

El Composooor MetaMask Snap se utiliza para estandarizar y gestionar la comunicación entre un cliente web, uno o varios recursos arbitrarios offchain, y un número arbitrario de smart contracts que implementan el estándar Composooor. Todos los recursos estándar son fácilmente accesibles a través de un paquete npm que, en la mayoría de los casos, permite usar los superpoderes de Composooor con una sola línea de código.

Paso a paso

  • Al preparar una transacción, nuestra wallet con MetaMask Snap solicitará una estimación de gas en el contrato onchain deseado.

  • Si el contrato necesita datos o cómputo offchain para funcionar, revertirá con un error estandarizado que contiene especificaciones sobre cómo encontrar esa información faltante. El error estandarizado tiene este aspecto:

error MissingOffchainDataError(
    address registryAddress,
    string url,
    bytes abiArgs
);
Copiar

Este error es expuesto por el ComposooorRegister, que los contratos deben extender para acceder a los recursos offchain.

  • La wallet con MetaMask Snap puede entonces decodificar este error y encontrar la información faltante, ya sea obteniéndola de un protocolo descentralizado, de una API, o ejecutando código obtenido de esas fuentes para producirla. Para el hackathon de ETHDenver, implementamos la opción más sencilla: la llamada a una API.

const responseData = await fetch(error.url + `?args=${error.abiArgs}`);
  • La wallet volverá a estimar el gas, esta vez añadiendo una instrucción para almacenar los datos obtenidos en el registro estandarizado del contrato correspondiente, antes de llamar al método deseado.

const callToRegisterData: Call = {
    callee: error.registryAddress,
    functionSelector: utils.id('recordParameter(bytes)').slice(0, 10) as PrefixedBy0x,
    data: defaultAbiCoder.encode(['bytes'], [data]) as PrefixedBy0x,
};
Copiar
  • Durante la ejecución de la transacción, el mismo u otro contrato puede necesitar otro recurso offchain para funcionar. En ese caso, la wallet repite los pasos de preparación de la transacción hasta que no se necesite ningún recurso offchain adicional. Esto permite una componibilidad infinita entre protocolos que acceden a ricos recursos offchain.

  • Cuando la estimación de gas es exitosa, se le presenta al usuario la firma de la transacción preparada, lista para ejecutarse con todos los recursos necesarios incluidos.

Cómo se ve la integración de una aplicación con Composooor o la creación de la tuya propia.

En ETHDenver demostramos cómo Composooor reduce la complejidad del código del patrón habitual de aplicaciones híbridas en al menos un 80-90%.

Lado del smart contract

Importa con import "@composooor/ComposooorRegister.sol";. Ejemplo de uso:

contract Example is ComposooorRegister {
    function action() public {
        bytes memory data = consumeParameter("http://api.api/number", abi.encode(arguments));
        (uint256 offchainNumber) = abi.decode(data, (uint256));
        (...)
    }
}
Copiar

ComposooorRegister está desarrollado con Solidity.

Lado del frontend

El Composooor Snap ofrece el mayor beneficio en el lado del frontend: reduce integraciones que típicamente superan las 200 líneas a… ¡0! La lógica del Snap se encarga de todo.

Demo

Creamos una demo completamente integrada en forma de una dapp con React y Wagmi. Esta dapp permite comprar un NFT pagando solo una pequeña fracción del precio por adelantado y tomando un préstamo para pagar el resto más adelante. Onchain, participan nada menos que 8 contratos en la transacción. En el proceso, el marketplace de NFTs requiere una firma offchain del vendedor del NFT. El Composooor Snap es capaz de detectar el error, decodificarlo y proporcionar la información onchain (tras obtenerla de una API), a pesar de la complejidad de la transacción. Composooor hizo que esta aplicación fuera mucho más sencilla de implementar.

¿Cuáles son los próximos pasos si implementaras esto?

Parte de que una innovación así permita a los desarrolladores ganar tiempo considerable y habilitar nuevos casos de uso en blockchain depende de su adopción. Implementaríamos y desplegaríamos múltiples aplicaciones orientadas al usuario que utilicen el Composooor Snap en segundo plano, trabajando con el Snap correspondiente. Si esas aplicaciones ganan tracción, buscaríamos alianzas para componerlas con otras aplicaciones, iniciando un efecto volante de adopción impulsado por la experiencia de desarrollo simplificada. En el camino, el Snap y el estándar evolucionarían hacia un producto más general y estandarizado que se ajuste a la visión original: conectar blockchains de forma sincrónica con recursos arbitrarios, de manera agnóstica respecto a la descentralización y los casos de uso.

¿Puedes contarnos un poco sobre ti y tu equipo?

Somos un equipo que está construyendo un protocolo de préstamos para usar NFTs como colateral con un enfoque más eficiente en términos de capital. Decidimos optar por una arquitectura que utiliza componentes offchain, como un libro de órdenes. Esta elección permite mejorar la eficiencia del capital y la experiencia del usuario, pero puede limitar la interoperabilidad con otros protocolos. Por eso desarrollamos el Composooor Snap, que facilita la integración con otros protocolos. Esperamos que esta librería sea utilizada por otros equipos, abriendo nuevas posibilidades y facilitando su trabajo.

¿Qué oportunidades ves con MetaMask Snaps y las posibilidades que desbloquea para el espacio Web3?

Las wallets son uno de los pilares fundamentales e ineludibles de Web3, y MetaMask es la wallet predeterminada de facto para la mayoría de los usuarios. Permitir a los desarrolladores aprovechar esto para nuevos casos de uso arbitrarios me parece crucial. El punto principal es que no podemos imaginar ni anticipar todas las innovaciones en las que las wallets deberán participar, por lo que darles cierto acceso es como la transición de Bitcoin a Ethereum: habilitar casos de uso arbitrarios sobre tu tecnología tiene un potencial positivo imprevisto y exponencialmente acumulativo. Por eso es difícil responder esta pregunta, pero lo que más me entusiasma son las aplicaciones que hacen que la wallet haga más que simplemente firmar mensajes y optimizan las interacciones de forma contextualmente enriquecida para el usuario.

¿Algún consejo que quieras compartir con los desarrolladores interesados en probar MetaMask Snaps?

Aprovecha la plantilla proporcionada, asegúrate de solicitar correctamente cada aprobación de usuario necesaria y utiliza el menor número posible de ellas.

Construyendo con MetaMask Snaps

Para comenzar con MetaMask Snaps:

  1. Consulta la documentación para desarrolladores

  2. Instala MetaMask Flask

  3. Revisa una guía de MetaMask Snaps

  4. Mantente conectado con nosotros en Twitter, GitHub discussions y Discord

¡Estén atentos a nuestro equipo en el próximo hackathon cerca de ti! ¡Feliz BUIDLing! ⚒️

Aviso legal: Los MetaMask Snaps son generalmente desarrollados por terceros distintos a Consensys Software. El uso de MetaMask Snaps desarrollados por terceros se realiza bajo tu propio criterio y riesgo, y con el acuerdo de que serás el único responsable de cualquier pérdida o daño que resulte de dichas actividades. Consensys no ofrece ninguna garantía expresa ni implícita, ya sea verbal o escrita, respecto a los MetaMask Snaps desarrollados por terceros, y declina toda responsabilidad por los Snaps desarrollados por terceros. El uso de software relacionado con blockchain conlleva riesgos, y los asumes en su totalidad al utilizar MetaMask Snaps.

Traducido por IA. Puede contener errores. Por favor, verifique siempre la información.

Califica la traducción

Este artículo fue escrito por:

  • MetaMask

    MetaMask, anteriormente Consensys Software Inc, es la plataforma financiera self-custodial más grande del mundo, que ofrece a las personas un único lugar para guardar, gastar, ahorrar y hacer crecer su dinero tanto en criptoactivos como en activos tradicionales. La compañía está construyendo la plataforma de consumo donde esto ocurre, reuniendo pagos, ahorros, inversiones y activos digitales en una experiencia fluida y unificada. Habiendo crecido a partir de la wallet self-custodial más utilizada del mundo, MetaMask otorga a los usuarios control directo sobre su dinero y activos, con presencia en aproximadamente 190 países. MetaMask ha desempeñado un papel fundamental en el crecimiento de Ethereum desde 2016. Hoy, MetaMask se sitúa en el centro de la economía blockchain, construyendo el sistema operativo para el Open Money y poniendo a las personas en pleno control de su vida financiera.

    Leer todos los artículos