Série para iniciantes em Web3: Clicar no MetaMask acidentalmente aciona outra carteira? Situação atual da solução de conflitos de carteiras

Confusão ao despertar da carteira

Conectar uma carteira é um passo crucial para entrar no mundo do Web3, pois os usuários do Web3 frequentemente precisam conectar uma carteira em alguns sites de DApp. No entanto, mesmo essa ação simples pode causar sérios inconvenientes aos usuários.

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

Conectar Carteira

Imagine uma cena assim: um novo usuário da Web3 (por curiosidade, ele instalou muitas carteiras de plug-ins) visitou um site DApp e queria usar sua própria carteira de plug-in do navegador para se conectar a ela. No entanto, quando ele clica no botão “Conectar carteira” fornecido pelo site e escolhe uma carteira para usá-la para se conectar ao DApp, ele pode descobrir que a carteira que aparece não é a que escolheu. Isso provavelmente o deixará confuso e sufocado, pensando que seu computador está infectado, e por isso ele executou uma ação inesperada.

A carteira de blockchain é uma entrada importante para se conectar à blockchain, e para ocupar essa entrada, cada carteira usa todas as maneiras que podem imaginar. Entre eles, a alteração de variáveis globais pelas carteiras é o que mais incomoda os desenvolvedores e usuários de DApp.

Na lógica de implementação da carteira do navegador atual, é comum injetar uma variável global no navegador para expor as funcionalidades fornecidas pela carteira (por exemplo, a carteira da plataforma Ethereum injeta suas funcionalidades em “ethereum”), permitindo que os DApps chamem os métodos fornecidos pela carteira para interagir com ela.

No entanto, como muitas carteiras se injetam na mesma variável ethereum, as carteiras registradas posteriormente substituirão as registradas anteriormente, de modo que apenas a última registrada pode ser ativada desta forma.

Às vezes, os usuários do DApp têm que desativar temporariamente outros plugins de carteira ou instalar apenas uma carteira para poder usar a carteira que desejam. Isso vai contra a ideia inicial dos desenvolvedores de carteiras. Mesmo que uma nova carteira seja melhor, é difícil atrair usuários que já estão usando outras carteiras.

Alguns amigos podem estar se perguntando por que precisamos necessariamente injetar na mesma variável? Suponha que haja duas carteiras: A e B. Na verdade, desde que A injete a si mesma em ‘a’ e B injete a si mesma em ‘b’, para chamar a carteira desejada, basta chamar o método fornecido no objeto correspondente, evitando assim o problema de chamar B quando se deseja chamar A. Isso realmente resolve o problema da concorrência, mas o problema é que, se um DApp deve suportar a conexão de várias carteiras, todos os nomes das carteiras que os desenvolvedores desejam adaptar devem ser previamente definidos no código e, quando o usuário seleciona uma carteira, os métodos correspondentes a essa carteira são chamados, o que torna a manutenção do código relacionado bastante problemática. No entanto, injetar todas as carteiras em um único objeto pode evitar essa dificuldade.

Solução

Para sair do dilema acima mencionado, existem duas normas semelhantes na comunidade.

Solução do Ethereum: EIP-6963

A comunidade Ethereum propôs a EIP-6963 em maio de 2023.

A lógica básica aqui é simples: descartar variáveis globais e usar eventos convencionados para resolver o problema de registro e descoberta da carteira.

Especificamente, após o carregamento bem-sucedido da carteira de plug-in, o evento unificado ‘eip6963:announceProvider’ é acionado para notificar o DApp sobre a disponibilidade de uma nova carteira. O DApp, por sua vez, obtém informações sobre as carteiras disponíveis atualmente por meio da escuta desse evento.

Desta forma, evita-se os problemas causados pelo uso direto de variáveis globais, através de uma lógica de escuta de eventos abstrata, e consegue-se descobrir automaticamente as carteiras disponíveis no ambiente do usuário. Assim, o dilema resolve-se por si só.

Padrão de carteira da comunidade

EIP-6963 é um padrão na ecologia do Ethereum, mas não se limita ao Ethereum, outras plataformas de blockchain também podem enfrentar problemas semelhantes. Por exemplo, as carteiras da rede Solana geralmente injetam a si mesmas na variável ‘solana’, o que também pode causar situações de concorrência.

Então, seria possível que o ecossistema Solana também adotasse esse padrão? Embora o EIP-6963 tenha sido desenvolvido para resolver problemas de descoberta de carteiras no ecossistema Ethereum, as ideias nele contidas podem ser aplicadas a todas as plataformas de blockchain. Assim, poderíamos ir mais longe e fornecer um padrão comum para que todas as carteiras e DApps das plataformas de blockchain possam desfrutar da conveniência oferecida pelo EIP-6963, tanto os desenvolvedores quanto os usuários de todas as plataformas de blockchain. Teoricamente, isso não seria um problema, e alguns desenvolvedores já estão trabalhando nisso, ou seja, o Wallet Standard.

O trabalho central realizado pelo Wallet Standard é fornecer duas funções: ‘registerWallet’ e ‘getWallets’, a primeira para carteira e a segunda para DApp.

A carteira chama ‘registerWallet’, passando um objeto de carteira que encapsula as funcionalidades fornecidas pela carteira (como o método Connect, usado para conectar a carteira). Dentro da função, um evento RegisterWalletEvent é acionado primeiro, e na verdade, os parâmetros desse evento são uma função de retorno usada para que o DApp seja notificado quando o evento RegisterWalletEvent for acionado. Essa função de retorno, na verdade, passa o objeto da carteira, permitindo assim que o DApp obtenha uma referência ao objeto da carteira e, assim, interaja com a carteira.

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

Os desenvolvedores de DApp não precisam escrever o código para ouvir e receber objetos de carteira. Esta parte já foi integrada no ‘getWallets’ pelo Wallet Standard. No entanto, o ‘getWallets’ apenas ouve os eventos, e os desenvolvedores ainda precisam considerar como lidar com esses eventos. Por exemplo, onde colocar as carteiras obtidas? Algumas carteiras podem ser carregadas antes do DApp, enquanto outras podem ser carregadas posteriormente. Como manter o estado dessas carteiras? O Wallet Standard aborda esses detalhes e também fornece o pacote ‘@wallet-standard/react’, no qual os desenvolvedores podem usar diretamente os React Hooks fornecidos para obter os dados desejados, incluindo a lista de carteiras, a carteira conectada atualmente, os métodos fornecidos pela carteira, etc.

Recursos Padrão da Carteira

Além de obter o objeto Wallet básico, o Wallet Standard também define alguns formatos de recursos.

Na verdade, todas as carteiras têm algumas funcionalidades básicas, como ligar, ouvir eventos de carteira, etc. O Wallet Standard fornece recursos como ‘standard:connect’ e ‘standard:events’. Após os fornecedores de carteira implementarem esses recursos, o DApp pode determinar diretamente com base nesses valores se a carteira suporta determinadas operações.

A “standard:*” mentioned above is a built-in defined feature, in fact, their values are not particularly rigid, so they can be extended arbitrarily. Different chain platforms will also have their unique features, such as Solana, which can be directly agreed upon as “solana:*”. Common features on the Solana platform include “solana:signTransaction”, “solana:signMessage”, etc.

Estado atual do Wallet Standard

Atualmente, há realmente não muitos projetos que implementaram o padrão Wallet Standard, vale a pena mencionar Solana e Sui.

No adaptador Solana do Ant Design Web3, também é suportada a deteção automática de carteiras compatíveis com o Wallet Standard. Os desenvolvedores apenas precisam ativar o ‘autoAddRegisteredWallets’, sem a necessidade de configurar uma grande quantidade de metadados da carteira, melhorando significativamente a experiência de desenvolvimento e uso do usuário.

A lógica de conexão da carteira ZAN.TOP também encontrou os mesmos problemas no início, mas agora, graças à configuração fornecida pelo Ant Design Web3, foi facilmente adaptada ao padrão EIP-6963. Todos já devem ter experimentado isso ao vincular o endereço _wxdyh.

A realização do ecossistema blockchain em várias áreas

Atualmente, as diferentes plataformas de blockchain têm atitudes diferentes em relação ao padrão Wallet Standard (ou EIP-6963). Aqui estão alguns exemplos:

Bitcoin

Até agora, parece que o Bitcoin não tem um padrão semelhante. Há um projeto que implementou o padrão Wallet Standard, mas não recebeu muita atenção e não há contribuições de código recentes.

Atualmente, os desenvolvedores só podem manter manualmente o estado ou usar alguns pacotes de desenvolvimento para auxiliar no trabalho. Por exemplo, na implementação do adaptador Bitcoin em Ant Design Web3, para diferentes carteiras, ele será obtido de diferentes variáveis globais e armazenado em um estado unificado. Na verdade, isso significa que os desenvolvedores de bibliotecas assumiram a trabalhosa tarefa de manter o estado. Além disso, isso apenas resolve o problema de conflito de carteiras, mas ainda não consegue perceber automaticamente o problema das carteiras disponíveis.

Ethereum

A plataforma Ethereum já tem o padrão EIP-6963, e a maioria das bibliotecas e carteiras relacionadas já oferece suporte.

Solana

Como mencionado acima, a oficialidade forneceu a implementação:

Sui

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

Suporte da biblioteca de desenvolvimento DApps

wagmi

wagmi provides support for EIP-6963 through the mipd() library, and the specific method can be found in the wagmi documentation.

RainbowKit

O RainbowKit()a lógica interna é baseada em wagmi, portanto, já oferece suporte embutido ao EIP-6963.

Ant Design Web3

O adaptador Ethereum e Solana do Ant Design Web3 suporta muito bem esses dois padrões e é muito conveniente para os desenvolvedores ativarem.

Para os desenvolvedores de DApp Ethereum, basta adicionar a configuração eip6963, com atenção para as linhas 23-25 relacionadas com o EIP-6963.

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

E se você é um desenvolvedor de DApp no ecossistema Solana, o processo é semelhante. Ele fornece a propriedade autoAddRegisteredWallets:

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

Sumário

EIP-6963 e Wallet Standard podem melhorar muito a experiência do usuário ao conectar a carteira, reduzindo a barreira de entrada para novos fornecedores de carteiras. Esperamos que no futuro mais plataformas de blockchain, carteiras e desenvolvedores de DApp possam fornecer ou implementar padrões relacionados, o que é benéfico para o desenvolvimento do Web3 numa direção melhor.

Este artigo foi escrito por gin-lsl da equipe ZAN (conta oficial @zan_team).

Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
  • Recompensa
  • 2
  • Republicar
  • Partilhar
Comentar
Adicionar um comentário
Adicionar um comentário
TheLittleBuddhavip
· 2024-06-17 13:18
Tudo em All in 🙌牛回速归 🐂伏击百倍币 📈大佬带带我 💰把握趋势,狂赚2024!💸
Ver originalResponder0
JinXinlongvip
· 2024-06-17 11:37
Emboscada moeda de 100x 📈
Ver originalResponder0
  • Fixar