Revisión técnica de MetaMask Snap: experiencia de desarrollo, limitaciones de capacidad, seguridad y análisis de potencial comercial

AvanzadoDec 24, 2023
Este artículo presenta las funciones avanzadas de MetaMask Snap y explora cómo esta tecnología permite que la billetera MetaMask implemente aplicaciones más diversas a través de complementos. Enfatiza cómo rompe las limitaciones de las billeteras tradicionales manteniendo la seguridad, liberando un mayor potencial.
Revisión técnica de MetaMask Snap: experiencia de desarrollo, limitaciones de capacidad, seguridad y análisis de potencial comercial

¿Qué es MetaMask Snap?

Hace unos días, ConsenSys anunció el lanzamiento público de MetaMask Snaps Open Beta. MetaMask Snaps son esencialmente complementos que amplían las capacidades de la billetera MetaMask. Estos “Snaps” son aplicaciones desarrolladas por terceros que se pueden instalar para agregar nuevas funcionalidades.

Si tuviéramos que comparar la transformación de MetaMask por parte de ConsenSys con WeChat, entonces Snap podría verse como el Mini Programa WeChat. Como resultado, resulta evidente que MetaMask, con su ambición, combinada con la escala de ConsenSys y la base de usuarios de MetaMask, alterará el panorama del sector de las billeteras.

El sitio web oficial ya enumera 35 Snaps disponibles y lanzó una Snap App Store: https://snaps.metamask.io/.

Lista parcial de instantáneas

Aspecto técnico de MetaMask Snap

Entonces, ¿cómo son los MetaMask Snaps desde un punto de vista técnico? ¿Cuáles son sus capacidades y limitaciones? ¿Están seguros? ¿Cómo es la experiencia del desarrollador? Todos estos factores podrían determinar el potencial futuro de MetaMask Snaps.

Desde el año pasado, LXDAO ha estado profundamente involucrado en la investigación de la implementación de Snaps. Varios miembros participaron en el desarrollo de Snap y participaron en hackatones relacionados. Hoy, profundizaremos en estas preguntas desde una perspectiva técnica e incluso desarrollaremos un Snap para brindarle una experiencia práctica de desarrollador.

Primeros pasos con MetaMask Snap

Instalación de MetaMask Snap

Generalmente puedes instalar Snaps desde el mercado oficial de MetaMask Snap o directamente desde el sitio web de un proyecto. Por ejemplo, con UniPass, una vez que visites la página de la aplicación, habrá un botón para conectar tu MetaMask.

Al hacer clic en él se inicia la instalación de Snap:

Usando MetaMask Snap

Una vez instalado, puede comenzar a utilizar el producto y sus funciones. En este caso, UniPass creará una cuenta de contrato inteligente para usted, que podrá controlar a través de su EOA (Cuenta de propiedad externa) de MetaMask.

Cuando inicia una transferencia, UniPass activa una ventana emergente Snap para confirmar si desea ejecutar la operación para la billetera UniPass AA.

Después de confirmar a través de MetaMask, puede continuar con la transacción. En este escenario, MetaMask obtiene control sobre la billetera UniPass AA a través de Snap, eliminando la necesidad de que UniPass desarrolle su propio complemento de billetera. Esto también permite la incorporación de usuarios de bajo costo a través de MetaMask.

¿Qué información podemos obtener de este proceso de instalación y uso?

  1. Control de permisos detallado: los Snaps ofrecen configuraciones de permisos complejas, que abarcan conexiones de billetera, solicitudes de red y más. Han sido diseñados con un enfoque de "Principio de privilegio mínimo", priorizando la seguridad.
  2. Administración de paquetes a través de NPM: como lo indica npm:@unipasswallet/unipass-snap, Snap depende de NPM para la administración de paquetes y versiones, esto podría tener problemas de seguridad, que detallaremos más adelante.
  3. Alta flexibilidad pero interfaz de usuario concisa: los Snaps son altamente adaptables, lo que permite que los proyectos desarrollen y dicten sus propias características y lógica. Sin embargo, la interfaz de usuario podría necesitar algunas mejoras.
  4. Experiencia simple y confiable: Snaps brinda una experiencia de usuario fluida y confiable, cumpliendo con los estándares Beta y de nivel de producción.

La seguridad siempre tiene prioridad cuando se trata de productos de billetera. Profundicemos en el diseño de seguridad de Snaps.

¿Son seguras las instantáneas?

Análisis en tiempo de ejecución del código Snap

Los snaps se basan en NPM, lo que implica que son aplicaciones web y JavaScript. Como sabemos, JavaScript es muy flexible pero susceptible a ataques como XSS y phishing. Entonces, ¿cómo aborda MetaMask Snap estos desafíos?

Tras investigar, descubrimos que MetaMask ha financiado e integrado JavaScript reforzado de Agoric (o Secure EcmaScript) como una solución de espacio aislado "totalmente virtualizada". Agoric redactó una API de restricción de JavaScript y presentó un borrador de propuesta al TC-39: propuesta TC-39.

En términos simples, JavaScript reforzado es un subconjunto más seguro de JavaScript estándar. Al ajustar algunas de las capacidades de JavaScript y limitar las llamadas API, se reducen varios riesgos. Crea una zona de pruebas segura para ejecutar el código y sigue el "Principio de mínimo privilegio" en la planificación de permisos del código.

Para obtener detalles técnicos más detallados sobre JavaScript reforzado, consulte: https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf.

Agoric y MetaMask han desarrollado conjuntamente LavaMoat (https://github.com/LavaMoat/lavamoat) proyecto para mejorar la seguridad de Snaps. LavaMoat aborda principalmente los riesgos de seguridad de las dependencias externas en proyectos de JavaScript.

Tanto Agoric como MetaMask se han sometido a pruebas de seguridad de caja blanca y negra y han publicado informes de seguridad detallados. (Más detalles: https://agoric.com/blog/technology/purple-teaming-how-metamask-and-agoric-hunted-bugs-to-harden-javascript). Por lo tanto, a nivel de ejecución de código, tenemos amplias razones para creer que los Snaps son seguros.

Código abierto y código auditado

Además de la autorización explícita del usuario y el diseño con privilegios mínimos, para ser reconocido oficialmente, los Snaps deben ser de código abierto, lo que reduce la probabilidad de código malicioso. También observamos que los Snaps que figuran en el sitio web oficial se han sometido a auditorías de seguridad de terceros, lo que mejora aún más su credibilidad.

¿Existe algún riesgo de seguridad con los Snaps administrados a través de NPM?

Actualmente, los Snaps se administran en función de los paquetes y versiones de NPM. NPM es una herramienta de gestión de paquetes ampliamente utilizada para el desarrollo web, que permite a los desarrolladores y equipos de proyectos lanzar nuevos paquetes y códigos de forma independiente.

MetaMask no tiene control sobre los lanzamientos de versiones en la plataforma NPM. Existe la posibilidad de que los cambios de la última versión no sean de código abierto ni estén auditados, ¿no es así?

Tras una aclaración oficial, todos los cambios en las versiones del paquete NPM deben ser revisados por el equipo oficial y agregados a una lista blanca antes de poder instalarlos. Por lo tanto, incluso si un equipo de proyecto lanza un nuevo paquete NPM, los usuarios no pueden instalarlo hasta que aparezca oficialmente en la lista. Sin duda, este enfoque aumenta el costo de actualizar las versiones de Snap, pero de hecho es la solución más segura. Refleja la filosofía de diseño de MetaMask Snap de priorizar la seguridad por encima de todo.

Capacidades técnicas y limitaciones de MetaMask Snap

MetaMask Snap se anunció oficialmente recientemente, ¡pero en realidad ha estado en desarrollo durante más de cuatro años! El concepto inicial de MetaMask Snap fue lanzado por Dan Finlay el 10 de octubre de 2019 en Medium. Artículo mediano.

Equilibrar la seguridad, la flexibilidad y la eficiencia es un desafío importante. Es evidente que MetaMask ha invertido muchos recursos y preparación en este esfuerzo.

En la actualidad, se exponen principalmente tres API principales:

  1. Interoperabilidad: permite a los desarrolladores crear billeteras para otras cadenas basadas en MetaMask.
  2. Transaction Insights: permite a los desarrolladores recuperar datos de transacciones antes de que un usuario inicie una transacción, para la evaluación de riesgos.
  3. Notificaciones: permite enviar mensajes directos a los usuarios a través de Snaps, aunque esto parece requerir soporte del sitio web y parece algo limitado.

A continuación se muestra una breve introducción a las capacidades y efectos específicos que abre MetaMask Snap, para brindarle una comprensión más vívida.

Capacidad de notificación

La interfaz Snap_notify puede mostrar notificaciones dentro de MetaMask o el navegador. Los Snaps pueden enviar mensajes directos a los usuarios a través de esta interfaz, como se muestra en la imagen a continuación.

Capacidad de información sobre transacciones

Cuando un usuario interactúa con un contrato inteligente, MetaMask activa el evento onTransaction de Snap. MetaMask pasa la transacción sin firmar sin firmar al método del controlador onTransaction. Luego, los Snaps pueden devolver una interfaz en la página de confirmación secundaria de la transacción, personalizando el contenido mostrado.

A través de esta capacidad, se pueden implementar funciones como auditoría segura de la información de las transacciones y visualización de información ampliada.

Interfaz de diálogo y capacidades de interfaz personalizada

La capacidad de diálogo permite que Snaps abra una ventana separada directamente, similar a los cuadros de diálogo tradicionales Alerta/Confirmar/Preguntar. Se utilizan para recordatorios, confirmaciones y envíos de información, respectivamente.

A través de Dialog, podrá personalizar interfaces y operaciones interactivas simples para integrarlas con su DApp.

¿Qué no puede lograr MetaMask Snap en este momento?

Por razones de seguridad, Snap actualmente no admite marcos de interfaz de terceros y solo proporciona un UIKit limitado. Aquí, todavía usamos Insight como ejemplo, mostrando la biblioteca de componentes de la interfaz de usuario disponible para los desarrolladores.

Como se muestra en la imagen, las funciones actuales incluyen Encabezado (texto grande), Texto (texto pequeño), Panel (una tarjeta de un solo uso), Divisor, Copiable (haga clic para copiar) y un subconjunto de funciones de Markdown (negrita y cursiva). ). Por lo tanto, las capacidades interactivas parecen temporalmente inalcanzables y el HTML incrustado no se puede utilizar para las interacciones. Sin embargo, después de plantear una pregunta en el Discord oficial, afirmaron que estas limitaciones son por razones de seguridad y podrían relajarse en próximas versiones.

Además, por razones de seguridad, las solicitudes externas solo se admiten a través del método Fetch y no admiten protocolos de solicitud adicionales como WebSocket. Debido a limitaciones de seguridad, capacidad y privacidad, tampoco es posible acceder a la información del cliente, como la URL actual que activó Snap, lo que dificulta la implementación de una gama más amplia de funciones.

La mayoría de estos problemas surgen de preocupaciones de seguridad. Creemos que a medida que la seguridad se valide con el tiempo, se otorgarán más permisos.

Con la introducción de estas API, MetaMask esencialmente ha evolucionado hasta convertirse en un producto de plataforma abierta. Se siente como cuando WeChat lanzó su cuenta oficial y sus miniprogramas, pasando de ser solo una herramienta de chat.

En 2019, MetaMask ya previó el panorama actual del mercado con numerosas cadenas públicas, grupos de proyectos y requisitos de billetera personalizados. En lugar de que cada proyecto desarrolle su propio complemento y los usuarios tengan que instalar varios complementos, es más eficiente desarrollar basado en MetaMask Snap. En el primer lote de Snaps, vimos billeteras de ecosistemas distintos a EVM, como Sui Wallet, Solana Wallet y Arweave Wallet. Dada su base de usuarios existente, MetaMask Snap seguramente tendrá un impacto significativo en el panorama de las billeteras.

De hecho, el potencial de MetaMask Snap podría ser incluso mayor de lo que imaginamos y extenderse más allá de las billeteras. También podemos ver los esfuerzos del equipo de EthSign, que creó un administrador de contraseñas universal llamado KeyChain basado en MetaMask Snaps. Todas las contraseñas del navegador se pueden cifrar y almacenar utilizando la clave de la billetera. Al proteger su billetera, básicamente está asegurando todas sus contraseñas.

También hay una creación del equipo Web3MQ. Web3MQ es una red de retransmisión de comunicación descentralizada de alto rendimiento. Web3MQ Snap actuará como su cliente para facilitar las interacciones de mensajes, notificaciones, alertas y funciones push. Se integrará con otras DApps que estén conectadas a Web3MQ, como herramientas de chat o juegos basados en blockchain, entre otros. Con la ayuda de Web3MQ Snap, los mensajes y las actualizaciones se enviarán automáticamente a los usuarios de Metamask Snap, eliminando la necesidad de autorización adicional del usuario. Esto establece una conexión sin confianza entre los usuarios y entre los usuarios y las aplicaciones.

Las instantáneas están muy centradas en los desarrolladores. Con la API abierta, ¿cómo es la experiencia del desarrollador? Profundicemos en la creación de un Snap para descubrirlo.

Crear un complemento para realizar pruebas

Proceso de pensamiento

Es bien sabido que la mayoría de los usuarios a menudo no conocen los contratos inteligentes con los que interactúan, incluidas las siguientes preocupaciones:

  1. Si el contrato de transacción ha sido reemplazado por un sitio de phishing.
  2. Si el contrato de transacción es actualizable.
  3. Si el contrato inteligente se implementó recientemente y muchos no lo han verificado.
  4. Si el contrato de transacción es de código abierto.

Para los usuarios promedio, esperar que revisen el código de solidez de los contratos antes de cada operación es una tarea difícil. Esta situación es ideal para que la función Transaction Insight analice contratos inteligentes, como usar IA para una auditoría de seguridad preliminar, posiblemente filtrando el 80% de los ataques de phishing básicos.

Configurar el entorno de desarrollo

Instalación de billetera

Primero, instale MetaMask Flask.

MetaMask Flask es una versión centrada en el desarrollador de la extensión MetaMask, que se utiliza principalmente para obtener una vista previa de nuevas funciones y el desarrollo de funcionalidades experimentales. Recuerde, es para desarrollo, no para uso diario. No importe sus claves privadas de uso diario. Estamos usando Flask aquí principalmente para obtener una vista previa de nuestro Snap desarrollado localmente.

Se recomienda desactivar temporalmente su billetera MetaMask habitual y otras billeteras del navegador después de instalar o crear un nuevo perfil de Chrome para evitar conflictos.

Creación de la cuenta

Después de instalar la billetera, cree una nueva como una billetera MetaMask normal. Esta es una billetera de prueba, así que no importe su billetera de uso diario.

A continuación, debemos depositar algunas monedas de prueba en la billetera recién creada, que se pueden obtener a través de grifos. El Snap analizado en este artículo utiliza Goerli, por lo que el siguiente contenido se centrará principalmente en Goerli.

Para inicializar un Snap basado en una plantilla, siga la documentación oficial. Primero, use la CLI @metamask/create-snap para crear un nuevo proyecto Snap. Al mismo tiempo, inicializaremos usando la plantilla oficial:

hilo crear @metamask/snap transacción-insights-snap && cd transacción-insights-snap

Estructura de archivos instantáneos

Los archivos Snap principales están en ./packages/snap. La estructura del directorio es:

El archivo de configuración de Snap está en snap.mainfest.json, y el cuerpo principal de Snap está en ./src/index.ts, lo cual es bastante sucinto.

Habilitación de permisos

Primero, habilite los permisos. Agregue las siguientes tres líneas a snap.mainfest.json:

jsonCopiar código

“Permisos iniciales”: {

“dotación: conocimiento de la transacción”: {}, // conocimiento de la transacción

“dotación: proveedor-ethereum”: {}, // Acceso a RPC

“dotación: acceso a la red”: {} //

En el archivo de manifiesto, también puede actualizar la description y proposedName para modificar la descripción y el nombre del proyecto.

Obteniendo transacciones

Para esta demostración, todo lo que se necesita es modificar el archivo index.ts para completar todas las funcionalidades. A continuación se muestra un fragmento de código simplificado. Para obtener el código ejecutable completo, visite: https://github.com/LidamaoHub/insights.

tsxCopiar codigo

importar { OnTransactionHandler, OnRpcRequestHandler } desde ' @metamask/snaps-types';

importar { heading, panel, text, copyable, divider } desde ' @metamask/snaps-ui';

exportar const onTransaction: OnTransactionHandler = async ({ transaction }) => {

// transaction incluye valores to (dirección del contrato) y data (datos de interacción)

// Código de ejemplo para obtener información de auditoría para el contrato siguiente

información constante = espera de recuperación (http://contract-info.audit.dev/?address=${transaction.to});

// A continuación se muestra un código de muestra de UI

devolver {

contenido: [

 texto( 

 `${info.riskList.length} elemento de riesgo`, 

 ), 

 encabezado(`${info.riskList.length ? 'Risk List' : ''}`), 

 ...info.riskList.map((elemento, i) => text(`${i + 1} ${item.text}`)), 

 divider(), 

 text( 

 `Más información de auditoría de la siguiente URL`, 

 ), 

 copyable( 

 `https://contract- info.audit.dev/mm${info.token}`, 

 )

]

};

};

Para obtener funciones más detalladas, consulte la documentación para desarrolladores de MetaMask Snap.

Después de la instalación, cada transacción mostrará alertas de riesgo similares:

La experiencia de desarrollo con Snaps actualmente es bastante fluida y con muy pocos problemas. Las plantillas oficiales también son ricas y diversas. Los desarrolladores experimentados generalmente pueden comenzar y desarrollar el Snap requerido en unas pocas horas. Sin embargo, el mayor obstáculo para los lanzamientos oficiales dirigidos a una audiencia mayoritaria serán las auditorías de seguridad. No todos los desarrolladores independientes o equipos pequeños tienen los recursos para realizar auditorías de sus Snaps. Por lo tanto, se espera que la cantidad y diversidad de Snaps no experimente un crecimiento explosivo durante un tiempo considerable.

Soporte para desarrolladores

Si puede ejecutar con éxito el ejemplo anterior, felicidades, ¡es un desarrollador principiante calificado de Snap!

El año pasado, MetaMask lanzó oficialmente MetaMask Grants DAO para financiar proyectos de alto valor dentro del ecosistema MetaMask. Es una iniciativa experimental impulsada por los empleados, cuyo objetivo es ofrecer subvenciones a desarrolladores externos globales para crear experiencias impactantes dentro del ecosistema MetaMask. Una parte de las ganancias trimestrales de MetaMask se canalizan a este DAO, y su presupuesto anual actual asciende a 2,4 millones de dólares.

Cualquier proyecto que enriquezca el ecosistema MetaMask puede solicitar una subvención MetaMask oficial de MetaMask Grants DAO. Para obtener más información, visite https://metamaskgrants.org/.

Vale la pena mencionar que LXDAO tiene el honor de haber solicitado y recibido una subvención de MetaMask este año y ha participado activamente en el desarrollo de proyectos relacionados, ¡contribuyendo al ecosistema MetaMask!

Conclusión

Hemos analizado qué es Snap desde una perspectiva técnica, sus consideraciones de seguridad, limitaciones y experiencia del desarrollador. En resumen:

  • Las instantáneas son similares a los miniprogramas WeChat, lo que abre un abanico más amplio de posibilidades para MetaMask.
  • La seguridad es relativamente confiable. El código se ejecuta en un entorno limitado de pruebas. El código debe ser de código abierto y auditado. El equipo oficial ha creado una lista blanca de instalación para la autorización de instalación.
  • Debido a preocupaciones de seguridad, la superficie API actual es algo limitada. Sin embargo, todavía permite una amplia gama de Snaps imaginativos.
  • Con cuatro años de perfeccionamiento y pruebas en el mundo real, la experiencia del desarrollador es de primera categoría. Sin embargo, debido a las precauciones de seguridad incorporadas, incluido un mecanismo de lista blanca y auditorías obligatorias, no espere que una avalancha de Snaps inunde el mercado en el corto plazo. Pero esto es comprensible, los miniprogramas de WeChat tuvieron un comienzo lento con API muy limitadas, se dispararon desde 2018 y ahora hay más de 450 millones de DAU y más de 7 millones de miniprogramas.

Actualmente, MetaMask Snap todavía está experimentando iteraciones rápidas. Se prevé que en el futuro se abrirán más permisos y capacidades. Hay esperanzas de que se introduzca un mecanismo más abierto pero seguro, como un sistema de auditoría seguro y sin permisos de bajo costo, para permitir que más desarrolladores participen a un costo menor. Si se aborda este problema, se puede esperar un aumento de la demanda en el futuro. Incluso podrían surgir puestos dedicados de desarrollador de Snap.

Aprovechando la enorme base de usuarios de MetaMask, los desarrolladores independientes también pueden encontrar oportunidades únicas. Mantengamos los ojos bien abiertos para ver las próximas innovaciones revolucionarias que Snaps traerá a la mesa.

Por último, gracias por tu artículo. Creo que contribuirá significativamente a crear conciencia sobre el estado actual de MetaMask Snaps.

Continúe siguiendo nuestro Twitter:https://twitter.com/LXDAO_Official@lxdao_official. Lanzaremos más contenido relacionado con MetaMask Snap, como talleres, ¡así que estad atentos!

Descargo de responsabilidad:

  1. Este artículo se reimprime de [medio]. Todos los derechos de autor pertenecen al autor original [LXDAO]. Si hay objeciones a esta reimpresión, comuníquese con el equipo de Gate Learn ( gatelearn@gate.io ) y ellos lo manejarán de inmediato.
  2. Descargo de responsabilidad: los puntos de vista y opiniones expresados en este artículo son únicamente los del autor y no constituyen ningún consejo de inversión.
  3. Las traducciones del artículo a otros idiomas están a cargo del equipo de Gate Learn. A menos que se mencione, está prohibido copiar, distribuir o plagiar los artículos traducidos.
即刻開始交易
註冊並交易即可獲得
$100
和價值
$5500
理財體驗金獎勵!
立即註冊