Análise Técnica do MetaMask Snap: Experiência de Desenvolvimento, Limitações de Capacidade, Segurança e Análise de Potencial de Negócios

AvançadoDec 24, 2023
Este artigo apresenta as funcionalidades avançadas do MetaMask Snap, explorando como esta tecnologia permite que a carteira MetaMask alcance aplicações mais diversas através de plugins. Enfatiza como rompe as restrições das carteiras tradicionais enquanto mantém a segurança, liberando um maior potencial.
Análise Técnica do MetaMask Snap: Experiência de Desenvolvimento, Limitações de Capacidade, Segurança e Análise de Potencial de Negócios

O que é o MetaMask Snap?

Há alguns dias, a ConsenSys anunciou o lançamento público do MetaMask Snaps Open Beta. Os Snaps MetaMask são essencialmente plugins que alargam as capacidades da carteira MetaMask. Estes “Snaps” são aplicações desenvolvidas por terceiros que podem ser instaladas para adicionar novas funcionalidades.

Se comparássemos a transformação do Consensys da MetaMask para o WeChat, o Snap poderia ser visto como o Mini Programa WeChat. Como resultado, torna-se evidente que a MetaMask, com a sua ambição, combinada com a escala do Consensys e a base de utilizadores da MetaMask, irá alterar o panorama do setor das carteiras.

O site oficial já listou 35 Snaps disponíveis e lançou uma Snap App Store: https://snaps.metamask.io/.

Lista Parcial de Snaps

Aspecto técnico do MetaMask Snap

Então, como são os MetaMask Snaps do ponto de vista técnico? Quais são as suas capacidades e limitações? Estão seguros? Como é a experiência do programador? Todos estes fatores podem determinar o potencial futuro dos MetaMask Snaps.

A partir do ano passado, a LXDAO esteve profundamente envolvida na investigação da implementação dos Snaps. Vários membros envolveram-se no desenvolvimento do Snap e participaram em hackathons relacionados. Hoje, vamos nos aprofundar nestas questões de uma perspectiva técnica e até desenvolver um Snap para lhe dar uma experiência prática de programador.

Começar a usar o MetaMask Snap

A instalar o MetaMask Snap

Geralmente, pode instalar Snaps a partir do mercado oficial do MetaMask Snap, ou diretamente do site de um projeto. Por exemplo, com o UniPass, assim que visitar a página da aplicação, haverá um botão para ligar a sua MetaMask.

Clicar nele inicia a instalação do Snap:

Usando o MetaMask Snap

Uma vez instalado, pode começar a usar o produto e as suas funcionalidades. Neste caso, o UniPass criará uma conta de contrato inteligente para si, que pode controlar através da sua MetaMask EOA (Conta de Propriedade Externa).

Quando inicia uma transferência, o UniPass aciona um pop-up Snap para confirmar se deseja executar a operação para a carteira UniPass AA.

Depois de confirmar através da MetaMask, pode prosseguir com a transação. Neste cenário, a MetaMask ganha o controlo sobre a carteira UniPass AA através do Snap, eliminando a necessidade do UniPass desenvolver o seu próprio plugin de carteira. Isto também permite a integração de utilizadores de baixo custo através da MetaMask.

Que informações podemos obter deste processo de instalação e utilização?

  1. Controlo de permissões refinado: Os snaps oferecem configurações de permissão complexas, abrangendo conexões de carteira, solicitações de rede e muito mais. Foram concebidos com uma abordagem do “Princípio do Menos Privilégio”, colocando a segurança em primeiro lugar.
  2. Gestão de Pacotes via NPM: Conforme indicado por npm:@unipasswallet/unipass-snap, o Snap depende do NPM para gestão de pacotes e versões, isto pode ter problemas de segurança, que detalharemos mais adiante.
  3. Alta flexibilidade mas UI concisa: Os snaps são altamente adaptáveis, permitindo que os projetos desenvolvam e ditem as suas próprias características e lógica. No entanto, a interface do utilizador poderia usar algum refinamento.
  4. Experiência simples e fiável: Os Snaps proporcionam uma experiência de utilizador suave e fiável, cumprindo os padrões Beta e a nível de produção.

A segurança tem sempre precedência quando se trata de produtos de carteira. Vamos mergulhar no design de segurança dos Snaps.

Os Snaps são seguros?

Análise de tempo de execução do Snap Code

Os snaps são baseados no NPM, o que implica que são aplicações web e JavaScript. Como sabemos, o JavaScript é altamente flexível mas suscetível a ataques como XSS e phishing. Então, como é que o MetaMask Snap enfrenta estes desafios?

Ao pesquisar, descobrimos que a MetaMask financiou e integrou o Hardened JavaScript da Agoric (ou Secure ECMAScript) como uma solução de sandbox “totalmente virtualizada”. A Agoric elaborou uma API de restrição JavaScript e apresentou um projecto de proposta ao TC-39: Proposta TC-39.

Em termos simples, o Hardened JavaScript é um subconjunto mais seguro do JavaScript padrão. Ao ajustar algumas das capacidades do JavaScript e limitar as chamadas à API, reduz vários riscos. Cria uma sandbox segura para executar o código e segue o “Princípio do Menor Privilégio” no planeamento de permissões de código.

Para detalhes técnicos mais detalhados sobre JavaScript endurecido, consulte: https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf.

A Agoric e a MetaMask co-desenvolveram o LavaMoat (https://github.com/LavaMoat/lavamoat) projeto para aumentar a segurança dos Snaps. O LavaMoat aborda principalmente os riscos de segurança das dependências externas em projetos JavaScript.

Tanto a Agoric como a MetaMask foram submetidas a testes de segurança de caixa preta e caixa branca e publicaram relatórios de segurança detalhados. (Mais detalhes: https://agoric.com/blog/technology/purple-teaming-how-metamask-and-agoric-hunted-bugs-to-harden-javascript). Portanto, ao nível da execução do código, temos razões amplas para acreditar que os Snaps são seguros.

Código Open Source e Auditado

Além da autorização explícita do utilizador e do design de privilégio mínimo, para serem oficialmente reconhecidos, os Snaps devem ser de código aberto, reduzindo a probabilidade de código malicioso. Observamos também que os Snaps listados no site oficial foram submetidos a auditorias de segurança de terceiros, aumentando ainda mais a sua credibilidade.

Existe um risco de segurança com Snaps geridos via NPM?

Atualmente, os Snaps são geridos com base em pacotes NPM e versionamento. O NPM é uma ferramenta de gestão de pacotes amplamente utilizada para o Desenvolvimento Web, permitindo aos programadores e equipas de projeto lançar novos pacotes e código de forma independente.

A MetaMask não tem controlo sobre os lançamentos de versões na plataforma NPM. Existe a possibilidade de as alterações mais recentes da versão não serem de código aberto ou auditadas, não é?

Após esclarecimento oficial, todas as alterações às versões do pacote NPM precisam de ser revistas pela equipa oficial e adicionadas a uma lista de permissões antes de poderem ser instaladas. Portanto, mesmo que uma equipa de projeto lança um novo pacote NPM, não pode ser instalado pelos utilizadores até que esteja oficialmente listado. Esta abordagem aumenta sem dúvida o custo de atualização das versões do Snap mas é de facto a solução mais segura. Reflete a filosofia de design do MetaMask Snap de priorizar a segurança acima de tudo.

Capacidades técnicas e limitações do MetaMask Snap

O MetaMask Snap foi recentemente anunciado oficialmente, mas está em desenvolvimento há mais de quatro anos! O conceito inicial do MetaMask Snap foi lançado por Dan Finlay em 10 de outubro de 2019, no Medium. Artigo Médio.

Equilibrar segurança, flexibilidade e eficiência é um desafio significativo. É evidente que a MetaMask investiu muitos recursos e preparação neste empreendimento.

Actualmente, três APIs principais estão expostas principalmente:

  1. Interoperabilidade: Permite aos programadores construir carteiras para outras cadeias com base no MetaMask.
  2. Informações sobre transações: Permite aos programadores recuperar dados da transação antes que um utilizador inicie uma transação, para avaliação de risco.
  3. Notificações: Permite mensagens diretas aos utilizadores através de Snaps, embora isso pareça exigir suporte ao website e pareça um pouco limitado.

Abaixo está uma breve introdução às capacidades e efeitos específicos abertos pelo MetaMask Snap, para lhe dar uma compreensão mais vívida.

Capacidade de notificação

A interface Snap_NotiFY pode exibir notificações no MetaMask ou no navegador. Os Snaps podem enviar mensagens diretas aos utilizadores através desta interface, conforme mostrado na imagem abaixo.

Capacidade do Transaction Insights

Quando um utilizador interage com um contrato inteligente, a MetaMask aciona o evento OnTransaction do Snap. A MetaMask passa a transação bruta não assinada para o método do manipulador onTransaction. Os Snaps podem então devolver uma interface na página de confirmação secundária da transação, personalizando o conteúdo apresentado.

Através desta capacidade, podem ser realizadas funcionalidades como auditoria segura de informações sobre transações e exibições de informações alargadas.

Interface de diálogo e capacidades de interface personalizada

A capacidade de diálogo permite que os Snaps abrem diretamente uma janela separada, semelhante às caixas de diálogo tradicionais Alerta/Confirmar/Prompt. São utilizados para lembretes, confirmações e envios de informações, respetivamente.

Através do Dialog, poderá personalizar interfaces interativas simples e operações para integrar com o seu DApp.

O que o MetaMask Snap não pode alcançar neste momento?

Por razões de segurança, o Snap atualmente não suporta estruturas frontend de terceiros e fornece apenas um UIKit limitado. Aqui, ainda usamos o Insight como exemplo, mostrando a biblioteca de componentes da interface do usuário disponível para desenvolvedores.

Como mostrado na imagem, os recursos atuais incluem Título (texto grande), Texto (texto pequeno), Painel (um cartão de uso único), Divisor, Copiável (clique para copiar) e um subconjunto de recursos Markdown (negrito e itálico). Portanto, as capacidades interativas parecem temporariamente inatingíveis e o HTML incorporado não pode ser usado para interações. No entanto, depois de fazerem uma pergunta no Discord oficial, afirmaram que essas limitações são por razões de segurança e podem ser relaxadas nas próximas versões.

Além disso, por razões de segurança, os pedidos externos são suportados apenas através do método Fetch e não suportam protocolos de pedido adicionais, como o WebSocket. Devido às limitações de segurança, capacidade e privacidade, também não é possível aceder a informações do cliente, como o URL atual que acionou o Snap, tornando difícil implementar uma gama mais ampla de funcionalidades.

A maioria destes problemas decorre de preocupações com a segurança. Acreditamos que à medida que a segurança for validada ao longo do tempo, serão concedidas mais permissões.

Com a introdução destas APIs, a MetaMask evoluiu essencialmente para um produto de plataforma aberta. Parece como quando o WeChat lançou a sua Conta Oficial e Mini-programas, transformando-se apenas numa ferramenta de chat.

Em 2019, a MetaMask já previa o cenário atual do mercado com inúmeras cadeias públicas, festas de projeto e requisitos de carteira personalizada. Em vez de cada projeto desenvolver o seu próprio plugin e os utilizadores terem de instalar vários plugins, é mais eficiente desenvolver com base no MetaMask Snap. No primeiro lote de Snaps, vimos carteiras de outros ecossistemas que não o EVM, como Sui Wallet, Solana Wallet e Arweave Wallet. Dada a sua base de utilizadores existente, o MetaMask Snap está fadado a impactar significativamente o cenário da carteira.

Na verdade, o potencial do MetaMask Snap pode ser ainda maior do que imaginamos, estendendo-se para além das carteiras. Também podemos ver os esforços da equipa EthSign, que criou um gestor de palavras-passe universal chamado KeyChain baseado no MetaMask Snaps. Todas as palavras-passe do navegador podem ser encriptadas e armazenadas usando a chave da carteira. Ao proteger a sua carteira, está essencialmente a proteger todas as suas palavras-passe.

Há também uma criação da equipa Web3MQ. O Web3MQ é uma rede de relé de comunicação descentralizada de alto desempenho. O Web3MQ Snap servirá como seu cliente para facilitar as interações de mensagens, notificações, alertas e funções push. Vai integrar-se com outros DApps que estão ligados ao Web3MQ, tais como ferramentas de chat ou jogos baseados em blockchain, entre outros. Com a ajuda do Web3mQ Snap, as mensagens e atualizações serão automaticamente enviadas aos utilizadores do Metamask Snap, eliminando a necessidade de autorização adicional do utilizador. Isto estabelece uma ligação sem confiança entre utilizadores e entre utilizadores e aplicações.

Os Snaps são altamente centrados no desenvolvimento. Com a API aberta, como está a experiência do programador? Vamos mergulhar na criação de um Snap para descobrir.

Criando um Snap para Testar

Processo de Pensamento

É sabido que a maioria dos utilizadores muitas vezes não conhece os contratos inteligentes com os quais estão a interagir, incluindo as seguintes preocupações:

  1. Se o contrato de transação foi substituído por um site de phishing.
  2. Se o contrato de transação é atualizável.
  3. Se o contrato inteligente foi implantado recentemente e não foi verificado por muitos.
  4. Se o contrato de transação é de código aberto.

Para os utilizadores médios, esperar que revisem o código de solidez dos contratos antes de cada operação é uma tarefa difícil. Esta situação é ideal para a funcionalidade Transaction Insight analisar contratos inteligentes, como usar IA para uma auditoria de segurança preliminar, possivelmente filtrando 80% dos ataques básicos de phishing.

Configurar o Ambiente de Desenvolvimento

Instalação da carteira

Primeiro, instale o MetaMask Flask.

O MetaMask Flask é uma versão centrada no desenvolvimento da extensão MetaMask, usada principalmente para pré-visualizar novas funcionalidades e desenvolvimento de funcionalidades experimentais. Lembre-se, é para desenvolvimento, não para uso diário. Não importe as suas chaves privadas de uso diário. Estamos a usar o Flask aqui principalmente para pré-visualizar o nosso Snap desenvolvido localmente.

Recomenda-se desativar temporariamente a sua carteira normal MetaMask e outras carteiras de navegador depois de instalar ou criar um novo perfil do Chrome para evitar conflitos.

Criação de contas

Depois de instalar a carteira, crie uma nova tal como uma carteira normal MetaMask. Esta é uma carteira de teste, por isso não importe a sua carteira de uso diário.

Em seguida, precisamos de depositar algumas moedas de teste na carteira recém-criada, que podem ser obtidas através de torneiras. O Snap discutido neste artigo usa o Goerli, pelo que o conteúdo a seguir incidirá principalmente no Goerli.

Para inicializar um Snap com base num modelo, siga a documentação oficial. Primeiro, use a CLI @metamask/create-snap para criar um novo projeto Snap. Ao mesmo tempo, inicializaremos usando o modelo oficial:

yarn create @metamask/snap tranaction-insights-snap & & cd transaction-insights-snap

Estrutura de Ficheiros Snap

Os principais ficheiros Snap estão em. /pacotes/snap. A estrutura do directório é:

O ficheiro de configuração do Snap está em snap.mainfest.json, e o corpo principal do Snap está dentro. /src/index.ts, o que é bastante sucinto.

Activar Permissões

Primeiro, habilite as permissões. Adicione as três linhas seguintes ao snap.mainfest.json:

Código JSONCopy

“InitialPermissions”: {

“endowment:transaction-insight”: {},//Perspetiva da transação

“endowment:ethereum-provider”: {},//Acesso ao RPC

“dota:acesso à rede”: {}//

No arquivo de manifesto, também pode atualizar a descrição e o ProposedName para modificar a descrição e o nome do projeto.

Obtendo Transações

Para esta demonstração, tudo o que é necessário é modificar o ficheiro index.ts para completar todas as funcionalidades. Abaixo está um trecho de código simplificado. Para obter o código executável completo, visite: https://github.com/LidamaoHub/insights.

Código TSXCopy

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

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

export const onTransaction: onTransactionHandler = async ({ transaction }) = > {

// transação inclui valores como (endereço do contrato) e dados (dados de interação)

//Exemplo de código para buscar informações de auditoria para o contrato abaixo

const info = aguardar busca (http://contract-info.audit.dev/?address=${transaction.to});

//Abaixo está um código de amostra de UI

retorno {

conteúdo: [

 texto (

 `${info.riskList.length} item de risco`,

 ),

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

 ... Info.RiskList.map (item, i) = > texto (`${i + 1} ${item.text}`)),

 divisor (),

 texto (

 `Mais informações de auditoria do seguinte url`,

 ),

 copiável (

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

 )

]

};

};

Para recursos mais detalhados, consulte a documentação do desenvolvedor do MetaMask Snap.

Após a instalação, todas as suas transações exibirão alertas de risco semelhantes:

A experiência de desenvolvimento com Snaps é atualmente bastante tranquila, com muito poucos problemas. Os modelos oficiais também são ricos e diversificados. Os programadores experientes podem normalmente começar e desenvolver o Snap necessário dentro de algumas horas. No entanto, o maior gargalo para lançamentos oficiais que atendem a um público mainstream serão as auditorias de segurança. Nem todos os programadores independentes ou pequenas equipas têm os recursos para conduzir auditorias aos seus Snaps. Portanto, espera-se que a quantidade e a diversidade de Snaps não experimentem um crescimento explosivo durante um tempo considerável.

Suporte ao Desenvolvedor

Se conseguir executar com sucesso o exemplo acima, parabéns, é um programador iniciante qualificado do Snap!

No ano passado, a MetaMask lançou oficialmente o MetaMask Grants DAO para financiar projetos de alto valor dentro do ecossistema MetaMask. É uma iniciativa experimental orientada pelos funcionários, destinada a oferecer subsídios a programadores externos globais para a construção de experiências impactantes no ecossistema MetaMask. Uma parte dos lucros trimestrais da MetaMask são canalizados para este DAO, e o seu orçamento anual atual é de 2,4 milhões de dólares.

Qualquer projeto que enriqueça o ecossistema MetaMask pode candidatar-se a um Subsídio MetaMask oficial do MetaMask Grants DAO. Para mais informações, visite https://metamaskgrants.org/.

Vale a pena mencionar que a LXDAO tem a honra de ter solicitado e recebido uma bolsa da MetaMask este ano, e participou ativamente no desenvolvimento de projetos relacionados, contribuindo para o ecossistema MetaMask!

Conclusão

Dissecámos o que é o Snap de uma perspectiva técnica, as suas considerações de segurança, limitações e experiência do programador. Em resumo:

  • Os Snaps são como os Mini Programas do WeChat, desbloqueando uma tela mais ampla de possibilidades para o MetaMask.
  • A segurança é relativamente confiável. O código é executado num ambiente de sandbox restrito. O código tem de ser de código aberto e auditado. A equipa oficial criou uma lista de permissões de instalação para autorização de instalação.
  • Devido a preocupações de segurança, a superfície atual da API é um pouco limitada. No entanto, ainda permite uma grande variedade de Snaps imaginativos.
  • Com quatro anos de refinamento e testes no mundo real, a experiência do programador é de primeira. No entanto, devido a precauções de segurança incorporadas, incluindo um mecanismo de lista branca e auditorias obrigatórias, não espere que um dilúvio de Snaps inunde o mercado tão cedo. Mas isso é compreensível, os Mini Programas WeChat tiveram um início lento com APIs muito limitadas, explodiram desde 2018, e agora existem mais de 450 milhões de DAU e 7M+ mini-programas.

Atualmente, o MetaMask Snap ainda está a sofrer iterações rápidas. Prevê-se que mais permissões e capacidades serão abertas no futuro. Há esperança para a introdução de um mecanismo mais aberto mas seguro, como um sistema de auditoria de baixo custo seguro e sem permissão, de modo a permitir que mais desenvolvedores participem a um custo mais baixo. Se este problema for resolvido, pode haver um aumento esperado na procura no futuro. Podem até surgir posições de programador dedicadas do Snap.

Aproveitando a enorme base de utilizadores da MetaMask, os promotores indie também podem encontrar oportunidades únicas. Vamos manter os olhos abertos para as próximas inovações revolucionárias que os Snaps trarão para a mesa.

Por último, obrigado pelo seu artigo. Acredito que contribuirá significativamente para aumentar a consciencialização sobre o estado atual dos MetaMask Snaps.

Por favor, continue a seguir o nosso Twitter: < a href= "https://twitter.com/LXDAO_Official" " > @lxdao_official. Estaremos a lançar mais conteúdo relacionado com o MetaMask Snapchat, como workshops, por isso, fique ligado!

Isenção de responsabilidade:

  1. Este artigo foi reimpresso de [medium]. Todos os direitos de autor pertencem ao autor original [LXDAO]. Se houver objeções a esta reimpressão, contacte a equipa do Gate Learn(gatelearn@gate.io), e eles vão lidar com isso imediatamente.
  2. Isenção de responsabilidade: As opiniões e opiniões expressas neste artigo são exclusivamente do autor e não constituem nenhum conselho de investimento.
  3. As traduções do artigo para outras línguas são feitas pela equipa do Gate Learn. A menos que mencionado, é proibido copiar, distribuir ou plagiar os artigos traduzidos.
learn.articles.start.now
learn.articles.start.now.voucher
learn.articles.create.account