Serie para novatos de Web3: ¿Hacer clic en MetaMask activa accidentalmente otra billetera? Situación actual de la solución de conflictos entre billeteras

La confusión al abrir la billetera

Conectar la billetera es un paso clave para ingresar al mundo de Web3, los usuarios de Web3 a menudo necesitan conectar la billetera en algunos sitios web de DApp. Sin embargo, esta simple acción también puede causar graves molestias a los usuarios.

Web3新手系列:点击MetaMask误唤起其他钱包?钱包冲突解决方案现状

Conectar Billetera

Imagínate esta situación: un nuevo usuario de Web3 (por curiosidad, ha instalado varias billeteras de plugins) visita un sitio web de DApp y quiere usar su billetera de plugin de navegador para conectarse a ella. Pero cuando hacen clic en el botón ‘Conectar billetera’ proporcionado por el sitio web y seleccionan una billetera para usarla para conectar con la DApp, es posible que descubran que la billetera emergente no es la que eligieron. Esto podría hacer que se sientan confundidos y sofocados, pensando que su computadora está infectada con un virus y que han realizado acciones inesperadas.

La billetera de cadena de bloques es una entrada importante para conectarse a la cadena de bloques, y para asegurar esta entrada, cada billetera utiliza diversas formas que se les ocurren. Uno de los problemas más preocupantes para los desarrolladores y usuarios de DApp es la manipulación de las variables globales por parte de las diferentes billeteras.

En la lógica de implementación de la billetera del navegador actual, se inyecta una variable global en el navegador para exponer las funciones proporcionadas por la billetera (por ejemplo, la billetera de la plataforma Ethereum inyectará sus funciones en ‘ethereum’) para que las DApp puedan llamar a los métodos proporcionados por la billetera para interactuar con ella.

Sin embargo, debido a que muchas billeteras se inyectarán en la misma variable ethereum, resulta en que la billetera registrada más tarde sobrescribirá la anterior, de modo que solo se pueda invocar de esta manera la última registrada.

A veces, los usuarios de DApp se ven obligados a desactivar temporalmente otros complementos de billetera o instalar solo una billetera directamente para poder usar la billetera que desean. De esta manera, se alejan mucho de la idea original del desarrollador de la billetera. Además, incluso si una nueva billetera es excepcional, es difícil atraer a los usuarios que ya están utilizando otras billeteras.

Algunos amigos pueden preguntarse por qué es necesario inyectarse en la misma variable. Supongamos que hay dos billeteras: A y B. En realidad, solo necesita que A se inyecte en “a” y B se inyecte en “b”. Para llamar a la billetera deseada, simplemente llame al método proporcionado en el objeto correspondiente, y no ocurrirá el problema de llamar a A pero invocar a B. Esto puede resolver el problema de competencia, pero el inconveniente es que si una DApp debe admitir la conexión de varias billeteras, todos los nombres de billeteras que el desarrollador desea adaptar deben definirse previamente en el código y, cuando el usuario selecciona una billetera, se deben llamar a los métodos relacionados con esa billetera, lo que hace que el mantenimiento del código sea bastante engorroso. Inyectar todas las billeteras en el mismo objeto puede evitar este problema.

Solución

Para salir del dilema anterior, hay dos estándares similares en la comunidad.

Solución de Ethereum: EIP-6963

La comunidad de Ethereum propuso la EIP-6963 en mayo de 2023.

La lógica básica aquí es simple, abandonar las variables globales y utilizar eventos convencionales para resolver el problema de registro y descubrimiento de la billetera.

En concreto, una vez cargada la billetera de complementos con éxito, se activa el evento unificado ‘eip6963:announceProvider’ para notificar a la DApp que hay nuevas billeteras disponibles. La DApp, a su vez, se entera de qué billeteras están actualmente disponibles escuchando este evento.

De esta manera, a través de una lógica de escucha de eventos abstracta, se evitan los problemas causados por el uso directo de variables globales, y se puede descubrir automáticamente la billetera disponible en el entorno del usuario en este momento. De esta manera, el dilema se resuelve por sí mismo.

Norma de la comunidad: Wallet Standard

EIP-6963 es un estándar en el ecosistema de Ethereum, pero no se limita a Ethereum, otras plataformas de cadena también pueden tener problemas similares. Por ejemplo, las billeteras en la cadena Solana suelen inyectarse en la variable ‘solana’, lo que también puede causar situaciones de competencia.

Entonces, ¿se puede lograr que el ecosistema de Solana cumpla con este estándar? Aunque EIP-6963 solo busca resolver el problema de descubrimiento de billeteras en el ecosistema de Ethereum, la idea subyacente puede aplicarse a todas las plataformas de cadena. Entonces, ¿podríamos ir más lejos y proporcionar un estándar común para que todas las billeteras y DApp de todas las plataformas de blockchain lo cumplan, permitiendo a los desarrolladores y usuarios de todas las plataformas de cadena disfrutar de la conveniencia que ofrece EIP-6963? En teoría, no hay ningún problema en absoluto, y algunos desarrolladores ya lo están haciendo, a través de Wallet Standard.

El trabajo central realizado por el estándar de billetera es proporcionar dos funciones: ‘registerWallet’ y ‘getWallets’, la primera se utiliza para billeteras y la segunda para DApp.

La billetera llama a ‘registerWallet’, pasando un objeto de billetera que encapsula las funciones proporcionadas por la billetera (como el método Connect, que se utiliza para conectar la billetera). Internamente, la función primero desencadenará un evento RegisterWalletEvent, cuyos parámetros en realidad son una función de retroceso utilizada para que la DApp llame cuando se activa el evento RegisterWalletEvent. Esta función de retroceso realmente pasará el objeto de la billetera, lo que permitirá que la DApp obtenga una referencia al objeto de la billetera y, por lo tanto, interactúe con la billetera.

Web3新手系列:点击MetaMask误唤起其他钱包?钱包冲突解决方案现状

Los desarrolladores de DApp no necesitan escribir su propio código para escuchar y recibir objetos de billetera, ya que esta parte ya está integrada en “getWallets”. Sin embargo, getWallets solo escucha eventos, y los desarrolladores aún deben considerar cómo manejar los eventos. ¿Dónde se deben colocar las billeteras obtenidas? Algunas billeteras se cargan antes de que se cargue la DApp, mientras que otras pueden cargarse más tarde. ¿Cómo se mantiene el estado de estas billeteras? Para abordar estos detalles, Wallet Standard también proporciona el paquete “@wallet-standard/react”, que permite a los desarrolladores acceder directamente a los datos deseados utilizando los React Hooks proporcionados, incluida la lista de billeteras, la billetera conectada actualmente, los métodos proporcionados por la billetera, entre otros.

Características estándar de la billetera

Además de obtener el objeto Wallet de forma básica, Wallet Standard también define algunos formatos de características.

De hecho, todas las billeteras tienen algunas funciones básicas como la conexión y la escucha de eventos de la billetera. El estándar de billetera proporciona características como ‘standard:connect’ y ‘standard:events’. Después de que los proveedores de billeteras implementen estas características, las DApp pueden determinar directamente si la billetera admite ciertas operaciones según estos valores.

La “standard:*” mencionada anteriormente es una característica incorporada definida por sí misma y, de hecho, no hay requisitos particularmente estrictos para sus valores, por lo que se pueden ampliar libremente. Las diferentes plataformas de cadena también tendrán sus características únicas, como Solana, que acuerda directamente con “solana:*”. Las características comunes de Solana incluyen “solana:signTransaction”, “solana:signMessage” y otras.

Estado actual del estándar de billetera

Actualmente, hay pocas proyectos que hayan implementado el estándar Wallet Standard, entre ellos Solana y Sui son dignos de mención.

En el adaptador Solana de Ant Design Web3, también soporta la detección automática de Billetera adaptados a Billetera Standard, y los desarrolladores básicamente solo necesitan abrirlo a través de un “autoAddRegisteredWallets”, sin necesidad de configurar muchos Billetera Metadatos, y la experiencia de desarrollo y la experiencia de usuario son subir directas.

La lógica de conexión de la Billetera ZAN.TOP también encontró problemas similares en las primeras etapas, pero ahora, gracias a la configuración proporcionada por Ant Design Web3, se ha adaptado fácilmente al estándar EIP-6963. Probablemente ya hayan experimentado esto al vincular la dirección _wxdyh.

Implementación del ecosistema blockchain en cada área

Actualmente, las plataformas de blockchain tienen actitudes diferentes hacia el estándar Wallet Standard (o EIP-6963). Aquí hay algunos ejemplos:

Bitcoin

Hasta ahora, no parece haber un estándar similar para Bitcoin. Hay un proyecto que ha implementado el estándar Wallet Standard, pero no ha recibido mucha atención y no ha presentado nuevo código en mucho tiempo.

Actualmente, los desarrolladores solo pueden mantener manualmente el estado o utilizar algunos paquetes de desarrollo para ayudar en el trabajo. Por ejemplo, en la implementación del adaptador de Bitcoin en Ant Design Web3, se obtendrá de diferentes variables globales según la billetera y se almacenará en un estado unificado. Esto es básicamente que los desarrolladores de la biblioteca se hagan cargo del engorroso trabajo de mantenimiento del estado. Además, esto solo resuelve el problema de conflicto de billeteras, todavía existe el problema de no poder detectar automáticamente las billeteras disponibles.

Ethereum

La plataforma Ethereum ya tiene el estándar EIP-6963, y la mayoría de las bibliotecas y billeteras también lo admiten.

Solana

Como se mencionó anteriormente, el equipo oficial ha proporcionado la implementación:

Sui

Sui 目前已经对 Wallet Standard 提供了实现,在官方文档上可以找到使用方法:

Soporte de biblioteca de desarrollo de DApps

wagmi

wagmi ha proporcionado soporte para EIP-6963 a través de la biblioteca mipd(), se puede consultar la documentación de wagmi para obtener más detalles.

RainbowKit

El kit RainbowKit() se basa en la lógica interna de wagmi, por lo que también proporciona soporte incorporado para EIP-6963.

Ant Design Web3

Los adaptadores de Ethereum y Solana de Ant Design Web3() admiten muy bien ambos estándares y son muy fáciles de usar para los desarrolladores.

Para los desarrolladores de DApp de Ethereum, simplemente agreguen la configuración eip6963, presten atención a las líneas 23-25 relacionadas con EIP-6963:

Web3新手系列:点击MetaMask误唤起其他钱包?钱包冲突解决方案现状

Y si eres un desarrollador de DApp en el ecosistema de Solana, el proceso es similar. Proporciona la propiedad autoAddRegisteredWallets:

Web3新手系列:点击MetaMask误唤起其他钱包?钱包冲突解决方案现状

Resumen

EIP-6963 y Wallet Standard pueden mejorar en gran medida la experiencia del usuario al conectar la billetera, soltando las barreras de entrada para los nuevos proveedores de billeteras. Espero que en el futuro más plataformas de cadena, así como desarrolladores de billeteras y DApp, puedan proporcionar o implementar estándares relacionados, lo que es beneficioso para que Web3 avance en una dirección más larga.

Este artículo fue escrito por gin-lsl de ZAN Team (X Official Account @zan_team).

Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
  • Recompensa
  • 2
  • Republicar
  • Compartir
Comentar
Añadir un comentario
Añadir un comentario
TheLittleBuddhavip
· 2024-06-17 13:18
Todo dentro All in 🙌牛回速归 🐂伏击百倍币 📈大佬带带我 💰把握趋势,狂赚2024!💸
Ver originalesResponder0
JinXinlongvip
· 2024-06-17 11:37
Ataque sorpresa a moneda 100x 📈
Ver originalesResponder0
  • Anclado