Snap multi-resolver: Resolvendo o problema de múltiplos resolvers

Vencedor do ETHLisbon Hackathon

6 min de leitura
Snap multi-resolver: Resolvendo o problema de múltiplos resolvers

MetaMask Snaps é o roteiro para tornar a MetaMask a carteira mais extensível do mundo. Como desenvolvedor, você pode trazer seus recursos e APIs para a MetaMask de formas totalmente novas. Os desenvolvedores Web3 são o núcleo desse crescimento, e esta série tem como objetivo destacar os novos MetaMask Snaps sendo construídos hoje.

Multi-resolver Snap

Repositório do Snap: https://github.com/idriss-crypto/multiresolver

Por que você criou o multi-resolver snap?

A experiência do usuário no web3 tem sido negligenciada há muito tempo. Uma área em que vemos progresso é a abstração de contas. Parece que surge um novo serviço de nomenclatura quase toda semana. O objetivo desses serviços é simplificar a forma como interagimos uns com os outros nesse espaço: nomes são mais reconhecíveis do que endereços de carteira e, portanto, formam uma camada base para sistemas de identidade e reputação.

Além disso, padrões de nomenclatura originais podem beneficiar a popularidade dos projetos. Por exemplo, vamos chamar um projeto de "x". O novo padrão de nomenclatura proposto por esse projeto poderia ser chamado de x-domains ou x-names. O sucesso do projeto ajudaria automaticamente a expandir o serviço de nomenclatura, enquanto o sucesso do serviço de nomenclatura faria o mesmo pelo projeto — uma situação em que todos ganham. Agora, ficamos com um cenário fragmentado do namespace. Claro, há pessoas que tentam usar todos os serviços de nomenclatura, o que resulta em uma corrida por nomes no namespace limitado que temos em alguns serviços de nomenclatura baseados em domínio. Outros serviços de nomenclatura utilizam identificadores mais familiares, como e-mails, números de telefone ou handles sociais mais gerais (nome de usuário no Twitter, handle do Instagram) que as pessoas já possuem, para eliminar possíveis mercados em torno dessas identidades. A maioria das pessoas acaba com um, talvez dois handles de diferentes serviços de nomenclatura. Devido à variedade de opções, os desenvolvedores precisam integrar múltiplos resolvedores de serviços de nomenclatura em suas aplicações.

Quando um novo serviço de nomenclatura conquista uma parcela significativa do mercado, ele também deve ser integrado à aplicação para não excluir os usuários desse serviço. Da perspectiva do usuário, procurar aplicações alternativas com funcionalidade semelhante que também suportem o serviço de nomenclatura de sua escolha é frustrante. Por que não permitir que as pessoas usem o que já conhecem E oferecer uma solução que ajude os desenvolvedores a se concentrarem em criar a melhor aplicação possível?

O Multi-resolver Snap faz exatamente isso.

Nos explique a implementação técnica?

O resumo

O snap foi desenvolvido para o MetaMask Flask 10.20. A versão atual utiliza as permissões endowment:network-access e snap_confirm. A primeira é usada em uma versão preliminar para solicitar endereços resolvidos e traduzir IDs do Twitter em nomes de usuário do Twitter. A segunda exibe uma tela de confirmação ao usuário destacando o endereço resultante antes de uma transação ser criada.

Os resolvedores atualmente suportados são IDriss e ENS. O Snap é executado no localhost.

Integração pelo lado do dApp

Para que um desenvolvedor integre este Snap e, portanto, todos os resolvedores disponíveis, é necessário conectar-se primeiro a uma carteira e ao snap:

const connectSnap = async (
  snapId: string = defaultSnapOrigin,
  params: Record<'version' | string, unknown> = {},
) => {
  await window.ethereum.request({
    method: 'wallet_enable',
    params: [
      {
        wallet_snap: {
          [snapId]: {
            ...params,
          },
        },
      },
    ],
  });
};
Copiar

A invocação acontece por meio do método resolve_send e pode ser chamada através de:

const resolveInput = async (id_?: string) => {
  return await window.ethereum.request({
    method: 'wallet_invokeSnap',
    params: [
      defaultSnapOrigin,
      {
        method: 'resolve_send',
        identifier: id_,
      },
    ],
  });
};
Copiar

que retorna o endereço resolvido. Aqui, id_ é o identificador que o usuário insere em um campo de envio.

Usando o novo multiChainProvider, conectar-se ao snap é tão simples quanto conectar-se à carteira com as permissões necessárias:

import { MultiChainProvider } from "@metamask/multichain-provider";

const provider = new MultiChainProvider();
const { approval } = await provider.connect({
  requiredNamespaces: {
    eip155: {
      chains: [chains],
      methods: [
        permissions
      ],
    },
  },
});
const session = await approval();
Copiar

O método resolve_send mencionado acima pode ser renomeado para eth_sendTransaction, permitindo que aplicações usem o Multi-resolver Snap sem precisar alterar nenhuma integração. Sempre que eth_sendTransaction for chamado, o Snap é interposto e resolve o input antes de criar a transação. As aplicações devem aceitar inputs do tipo String em vez de retornar um erro sempre que um input do usuário não corresponder a um endereço. O snap cuida do resto!

Quais são os próximos passos se você implementar isso?

Como próximo passo, este snap será disponibilizado como open-source para incentivar outros desenvolvedores a encontrar bugs, melhorar o código e até adicionar seus próprios resolvedores personalizados. A abertura do código-fonte vai desbloquear o verdadeiro potencial deste Snap: nenhum desenvolvedor ou entidade precisará integrar todos os serviços de nomenclatura emergentes por conta própria. Um arquivo contribute.md incentiva esse processo. Além disso, o desenvolvimento adicional pela equipe do MetaMask Snaps será acompanhado.

Especificamente, duas coisas beneficiam muito este snap:

  1. A permissão endowment:transaction-insight para transferências entre contas, a fim de remover a chamada adicional de snap_confirm antes que uma transação seja acionada, e

  2. Injeções de UI no MetaMask. O objetivo é implementar o snap no campo de envio para que os usuários possam utilizar o multi-resolver sem precisar se conectar a um site.

Por fim, busca-se uma integração completa com o resolvedor IDriss. A integração completa permite que os usuários enviem cripto e NFTs para qualquer e-mail, número de telefone e nome de usuário do Twitter sem precisar estar registrados no livro IDriss.

Pode nos contar um pouco sobre você e sua equipe?

Meu nome é Lennard, e tenho interesse no espaço blockchain desde 2017. Há mais de um ano, venho desenvolvendo e co-fundando a IDriss, um mapeamento descentralizado de e-mails, números de telefone e nomes de usuário do Twitter para endereços de carteira. De forma mais ampla, meu foco é desenvolver ferramentas para um web3 mais utilizável, o que me motivou a criar este snap.

Quando você teve seu primeiro contato com o MetaMask Snaps e como foi essa experiência?

A equipe do Snaps está muito presente em conferências este ano (2022), então já me cruzei com eles algumas vezes. A primeira vez que interagi com a base de código foi após uma das apresentações deles na EthCC 2022 em Paris. Embora os recursos ainda fossem limitados, a documentação já era promissora, e tenho muita esperança no futuro do MetaMask Snaps.

O que diferencia o MetaMask Snaps de outras carteiras?

Ainda não vi uma abordagem semelhante para incluir colaboradores externos no desenvolvimento de carteiras. Embora algumas outras carteiras tenham disponibilizado seu código como open-source, os Snaps permitem que desenvolvedores expandam a funcionalidade da MetaMask diretamente. Tenho certeza de que essa abordagem será adotada por outros projetos também, pois pode ser melhor mantida.

Nos conte como é desenvolver Snaps com a MetaMask para você e sua equipe?

Foi uma ótima oportunidade desenvolver este snap durante um hackathon. Ter a equipe do MetaMask Snaps por perto ajudou sempre que surgiram dúvidas. Uma coisa que ainda falta é a capacidade de personalizar a UI da MetaMask. Além disso, alguns problemas de dependência são difíceis de depurar, o que acaba consumindo a maior parte do tempo de desenvolvimento.

O que o MetaMask Snaps significa para você?

Os Snaps oferecem um playground para que desenvolvedores integrem seus projetos ou ideias diretamente na MetaMask de forma permissionless. Para mim, isso significa que o crescimento de qualquer projeto pode ser acelerado, pois os usuários podem de repente aproveitar mais benefícios usando as ferramentas (carteiras) que já possuem.

Que oportunidades você enxerga no MetaMask Snaps e nas possibilidades que ele abre para o espaço Web3?

Os Snaps podem ajudar a prevenir golpes por meio de insights de transações, criar uma experiência mais inclusiva em termos de redes com keyrings e permitir uma experiência web3 mais amigável ao usuário usando resolvedores personalizados combinados com melhorias de UI. Juntos, esses avanços trarão mais pessoas para o espaço.

Algum conselho que gostaria de compartilhar com desenvolvedores interessados em experimentar o MetaMask Snaps?

Vá a hackathons! É a melhor forma de interagir diretamente com a equipe e obter feedback imediato.

Desenvolvendo com MetaMask Snaps

Para começar com o MetaMask Snaps:

  1. Confira a documentação para desenvolvedores

  2. Instale o MetaMask Flask

  3. Confira um guia do MetaMask Snaps

  4. Fique conectado conosco no Twitter, nas discussões do GitHub e no Discord

Fique de olho em nossa equipe no próximo hackathon perto de você! Bom BUIDLing ⚒️

Aviso legal: Os MetaMask Snaps são geralmente desenvolvidos por terceiros que não a Consensys Software. O uso de MetaMask Snaps desenvolvidos por terceiros é feito a seu próprio critério e risco, com o entendimento de que você será o único responsável por qualquer perda ou dano resultante de tais atividades. A Consensys não oferece nenhuma garantia expressa ou implícita, seja verbal ou escrita, em relação a MetaMask Snaps desenvolvidos por terceiros e se isenta de toda responsabilidade por Snaps desenvolvidos por terceiros. O uso de software relacionado a blockchain envolve riscos, e você os assume integralmente ao usar o MetaMask Snaps.

Traduzido por IA. Pode conter erros. Por favor, verifique sempre as informações.

Avalie a tradução
  • MetaMask
    MetaMask

    A principal carteira cripto de autocustódia e portal para a Web3, desenvolvida pela Consensys.

    Ler todos os artigos