Revisão técnica do MetaMask Snap: experiência de desenvolvimento, limitações de capacidade, segurança e análise de potencial de negócios

Avançado12/24/2023, 8:22:48 AM
Este artigo apresenta os recursos avançados do MetaMask Snap, explorando como esta tecnologia permite que a carteira MetaMask alcance aplicações mais diversas por meio de plug-ins. Enfatiza como rompe as restrições das carteiras tradicionais, mantendo a segurança, liberando maior potencial.

O que é MetaMask Snap?

Há alguns dias, a ConsenSys anunciou o lançamento público do MetaMask Snaps Open Beta. MetaMask Snaps são essencialmente plug-ins que ampliam os recursos da carteira MetaMask. Esses “Snaps” são aplicativos desenvolvidos por terceiros que podem ser instalados para adicionar novas funcionalidades.

Se comparássemos a transformação do MetaMask com o WeChat pela ConsenSys, então 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 da ConsenSys e a base de utilizadores da MetaMask, alterará o panorama do setor de 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 suas capacidades e limitações? Eles estão seguros? Como é a experiência do desenvolvedor? Todos esses fatores podem determinar o potencial futuro dos MetaMask Snaps.

Desde o ano passado, a LXDAO esteve profundamente envolvida na pesquisa da implementação de Snaps. Vários membros se envolveram no desenvolvimento do Snap e participaram de hackathons relacionados. Hoje, vamos nos aprofundar nessas questões de uma perspectiva técnica e até mesmo desenvolver um Snap para oferecer a você uma experiência prática de desenvolvedor.

Primeiros passos com MetaMask Snap

Instalando MetaMask Snap

Geralmente, você pode instalar Snaps no mercado oficial do MetaMask Snap ou diretamente no site de um projeto. Por exemplo, com o UniPass, ao visitar a página do aplicativo, haverá um botão para conectar sua MetaMask.

Clicar nele inicia a instalação do Snap:

Usando MetaMask Snap

Depois de instalado, você pode começar a usar o produto e seus recursos. Nesse caso, o UniPass criará uma conta de contrato inteligente para você, que você pode controlar por meio de sua MetaMask EOA (conta de propriedade externa).

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

Após a confirmação através do MetaMask, você pode prosseguir com a transação. Nesse cenário, a MetaMask ganha controle sobre a carteira UniPass AA por meio do Snap, eliminando a necessidade da UniPass desenvolver seu próprio plugin de carteira. Isso também permite a integração de usuários de baixo custo via MetaMask.

Que insights podemos obter deste processo de instalação e uso?

  1. Controle de permissão refinado: Snaps oferecem configurações de permissão complexas, abrangendo conexões de carteira, solicitações de rede e muito mais. Eles foram projetados com uma abordagem do “Princípio do Menor Privilégio”, colocando a segurança em primeiro lugar.
  2. Gerenciamento de pacotes via NPM: Conforme indicado por npm:@unipasswallet/unipass-snap, o Snap depende do NPM para gerenciamento de pacotes e versões, isso pode ter problemas de segurança, que detalharemos mais tarde.
  3. UI de alta flexibilidade, mas concisa: Snaps são altamente adaptáveis, permitindo que os projetos desenvolvam e ditem seus próprios recursos e lógica. No entanto, a interface do usuário precisa de algum refinamento.
  4. Experiência simples e confiável: Snaps fornecem uma experiência de usuário tranquila e confiável, atendendo aos padrões Beta e de nível de produção.

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

Os Snaps são seguros?

Análise de tempo de execução do código Snap

Snaps são baseados em NPM, o que implica que são aplicativos web e JavaScript. Como sabemos, o JavaScript é altamente flexível, mas suscetível a ataques como XSS e phishing. Então, como o MetaMask Snap enfrenta esses desafios?

Após a pesquisa, descobrimos que a MetaMask financiou e integrou o Hardened JavaScript da Agoric (ou Secure EcmaScript) como uma solução de sandbox “totalmente virtualizada”. Agoric elaborou uma API de restrição de JavaScript e apresentou um projeto de proposta ao TC-39: Proposta TC-39.

Em termos simples, Hardened JavaScript é um subconjunto mais seguro do JavaScript padrão. Ao ajustar alguns dos recursos do JavaScript e limitar as chamadas de API, vários riscos são reduzidos. Ele cria uma sandbox segura para execução do código e segue o “Princípio do Menor Privilégio” no planejamento de permissões de código.

Para especificações técnicas mais detalhadas sobre Hardened JavaScript, consulte: https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf.

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

Tanto Agoric quanto MetaMask passaram por 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, no nível de execução do código, temos muitos motivos para acreditar que os Snaps são seguros.

Código aberto e código auditado

Além da autorização explícita do usuário e do design com privilégios mínimos, 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 passaram por auditorias de segurança de terceiros, aumentando ainda mais sua credibilidade.

Existe risco de segurança com Snaps gerenciados via NPM?

Atualmente, os Snaps são gerenciados com base em pacotes e versionamento NPM. NPM é uma ferramenta de gerenciamento de pacotes amplamente utilizada para desenvolvimento Web, permitindo que desenvolvedores e equipes de projeto liberem novos pacotes e códigos de forma independente.

MetaMask não tem controle sobre o lançamento de versões na plataforma NPM. Existe a possibilidade de que as alterações de versão mais recentes não sejam de código aberto ou auditadas, não é?

Após esclarecimento oficial, todas as alterações nas versões do pacote NPM precisam ser revisadas pela equipe oficial e adicionadas a uma lista de permissões antes de serem instaladas. Portanto, mesmo que uma equipe de projeto libere um novo pacote NPM, ele não poderá ser instalado pelos usuários até que seja oficialmente listado. Esta abordagem sem dúvida aumenta o custo de atualização das versões do Snap, mas é de fato 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

MetaMask Snap foi anunciado oficialmente recentemente, mas na verdade 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 nesta empreitada.

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

  1. Interoperabilidade: permite que os desenvolvedores criem carteiras para outras redes baseadas em MetaMask.
  2. Transaction Insights: permite que os desenvolvedores recuperem dados de transações antes que um usuário inicie uma transação, para avaliação de risco.
  3. Notificações: permite mensagens diretas aos usuários por meio de Snaps, embora pareça exigir suporte do site e pareça um tanto limitado.

Abaixo está uma breve introdução aos recursos 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 usuários por meio desta interface, conforme mostrado na imagem abaixo.

Capacidade de insights de transação

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

Através desta capacidade, recursos como auditoria segura de informações de transações e exibições estendidas de informações podem ser realizados.

Interface de diálogo e recursos de interface personalizada

O recurso Diálogo permite que o Snaps abra uma janela separada diretamente, semelhante às tradicionais caixas de diálogo Alerta/Confirmação/Prompt. Eles são usados para lembretes, confirmações e envio de informações, respectivamente.

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

O que o MetaMask Snap não consegue alcançar no momento?

Por motivos de segurança, o Snap atualmente não oferece suporte a estruturas de front-end de terceiros e fornece apenas um UIKit limitado. Aqui, ainda usamos o Insight como exemplo, apresentando a biblioteca de componentes de UI disponível para desenvolvedores.

Conforme mostrado na imagem, os recursos atuais incluem Título (texto grande), Texto (texto pequeno), Painel (um cartão descartável), Divisor, Copiável (clique para copiar) e um subconjunto de recursos Markdown (negrito e itálico). Portanto, os recursos interativos parecem temporariamente inatingíveis e o HTML incorporado não pode ser usado para interações. No entanto, após fazerem uma pergunta no Discord oficial, eles 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, as solicitações externas são suportadas apenas através do método Fetch e não suportam protocolos de solicitação adicionais, como WebSocket. Devido a limitações de segurança, capacidade e privacidade, também não é possível acessar informações do cliente, como a URL atual que acionou o Snap, tornando um desafio a implementação de uma gama mais ampla de recursos.

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

Com a introdução dessas APIs, o MetaMask evoluiu essencialmente para um produto de plataforma aberta. É semelhante a quando o WeChat lançou sua conta oficial e miniprogramas, deixando de ser apenas uma ferramenta de chat.

Em 2019, a MetaMask já previa o cenário atual do mercado com inúmeras redes públicas, partes de projetos e requisitos de carteira personalizados. Em vez de cada projeto desenvolver seu próprio plugin e os usuários terem que instalar vários plugins, é mais eficiente desenvolver com base no MetaMask Snap. No primeiro lote de Snaps, vimos carteiras de outros ecossistemas além do EVM, como Sui Wallet, Solana Wallet e Arweave Wallet. Dada a sua base de usuários existente, o MetaMask Snap certamente terá um impacto significativo no cenário da carteira.

Na verdade, o potencial do MetaMask Snap pode ser ainda maior do que imaginamos, indo além das carteiras. Também podemos ver os esforços da equipe EthSign, que criou um gerenciador de senhas universal chamado KeyChain baseado em MetaMask Snaps. Todas as senhas do navegador podem ser criptografadas e armazenadas usando a chave da carteira. Ao proteger sua carteira, você está essencialmente protegendo todas as suas senhas.

Há também uma criação da equipe Web3MQ. Web3MQ é uma rede de retransmissão de comunicação descentralizada de alto desempenho. O Web3MQ Snap servirá como cliente para facilitar interações de mensagens, notificações, alertas e funções push. Ele se integrará com outros DApps conectados ao Web3MQ, como ferramentas de chat ou jogos baseados em blockchain, entre outros. Com a ajuda do Web3MQ Snap, mensagens e atualizações serão automaticamente enviadas aos usuários do Metamask Snap, eliminando a necessidade de autorização adicional do usuário. Isso estabelece uma conexão confiável entre usuários e entre usuários e aplicativos.

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

Criando um Snap para teste

Processo de pensamento

É bem sabido que a maioria dos usuários muitas vezes não conhece os contratos inteligentes com os quais estão interagindo, 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 pode ser atualizado.
  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 usuários comuns, esperar que eles revisem o código de solidez dos contratos antes de cada operação é uma tarefa difícil. Esta situação é ideal para o recurso Transaction Insight analisar contratos inteligentes, como usar IA para uma auditoria preliminar de segurança, possivelmente filtrando 80% dos ataques básicos de phishing.

Configurando o Ambiente de Desenvolvimento

Instalação de carteira

Primeiro, instale o MetaMask Flask.

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

É recomendado desativar temporariamente sua carteira MetaMask normal e outras carteiras de navegador após instalar ou criar um novo perfil do Chrome para evitar conflitos.

Criação de conta

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

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

Para inicializar um Snap baseado em um template, 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:

fio criar @metamask/snap transaction-insights-snap && cd transaction-insights-snap

Estrutura de arquivo instantâneo

Os principais arquivos Snap estão em ./packages/snap. A estrutura do diretório é:

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

Habilitando permissões

Primeiro, ative as permissões. Adicione as três linhas a seguir a snap.mainfest.json:

jsonCopiar código

“permissões iniciais”: {

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

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

“dotação:acesso à rede”: {} //

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

Buscando transações

Para esta demonstração, basta modificar o arquivo 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';

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

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

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

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

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

retornar {

contente: [

 text( 

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

 ), 

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

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

 divisor(), 

 text( 

 `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 poucos problemas. Os modelos oficiais também são ricos e diversificados. Desenvolvedores experientes geralmente podem começar e desenvolver o Snap necessário em poucas horas. No entanto, o maior gargalo para lançamentos oficiais que atendam ao público mainstream serão as auditorias de segurança. Nem todos os desenvolvedores independentes ou equipes pequenas têm recursos para realizar auditorias em seus Snaps. Portanto, espera-se que a quantidade e a diversidade de Snaps não experimentem um crescimento explosivo por um tempo considerável.

Suporte ao desenvolvedor

Se você conseguiu executar com sucesso o exemplo acima, parabéns, você é um desenvolvedor 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 dirigida por funcionários, com o objetivo de oferecer subsídios a desenvolvedores externos globais para a construção de experiências impactantes dentro do ecossistema MetaMask. Uma parte dos lucros trimestrais da MetaMask é canalizada para este DAO, e seu orçamento anual atual é de US$ 2,4 milhões.

Qualquer projeto que enriqueça o ecossistema MetaMask pode solicitar um MetaMask Grant oficial do MetaMask Grants DAO. Para obter mais informações, visite https://metamaskgrants.org/.

Vale ressaltar que a LXDAO está honrada por ter se candidatado e recebido uma bolsa da MetaMask este ano, e tem participado ativamente no desenvolvimento de projetos relacionados, contribuindo para o ecossistema MetaMask!

Conclusão

Dissecamos o que é o Snap de uma perspectiva técnica, suas considerações de segurança, limitações e experiência do desenvolvedor. Resumindo:

  • Os Snaps são semelhantes aos Mini Programas WeChat, abrindo uma gama mais ampla de possibilidades para MetaMask.
  • A segurança é relativamente confiável. O código é executado em um ambiente sandbox restrito. O código precisa ser de código aberto e auditado. A equipe oficial configurou uma lista de permissões de instalação para autorização de instalação.
  • Devido a questões de segurança, a superfície atual da API é um tanto limitada. No entanto, ainda permite uma grande variedade de Snaps criativos.
  • Com quatro anos de refinamento e testes no mundo real, a experiência do desenvolvedor é excelente. No entanto, devido às 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 miniprogramas WeChat tiveram um início lento com APIs muito limitadas, explodiram desde 2018 e agora existem mais de 450 milhões de DAU e mais de 7 milhões de miniprogramas.

Atualmente, o MetaMask Snap ainda está passando por 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, porém seguro, como um sistema de auditoria seguro e sem permissão, de baixo custo, para permitir que mais desenvolvedores participem a um custo menor. Se esta questão for resolvida, poderá haver um aumento esperado na procura no futuro. Podem até surgir cargos dedicados de desenvolvedor Snap.

Aproveitando a enorme base de usuários do MetaMask, os desenvolvedores independentes também podem encontrar oportunidades únicas. Vamos ficar atentos às próximas inovações revolucionárias que o Snaps trará para a mesa.

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

Continue acompanhando nosso Twitter:https://twitter.com/LXDAO_Official@lxdao_official . Estaremos lançando mais conteúdo relacionado ao MetaMask Snap, como workshops, fique ligado!

Isenção de responsabilidade:

  1. Este artigo foi reimpresso de [meio]. Todos os direitos autorais pertencem ao autor original [LXDAO]. Se houver objeções a esta reimpressão, entre em contato com a equipe do Gate Learn ( gatelearn@gate.io ) e eles cuidarão disso imediatamente.
  2. Isenção de responsabilidade: As opiniões e pontos de vista expressos neste artigo são exclusivamente do autor e não constituem qualquer conselho de investimento.
  3. As traduções do artigo para outros idiomas são feitas pela equipe do Gate Learn. A menos que mencionado, é proibido copiar, distribuir ou plagiar os artigos traduzidos.

Revisão técnica do MetaMask Snap: experiência de desenvolvimento, limitações de capacidade, segurança e análise de potencial de negócios

Avançado12/24/2023, 8:22:48 AM
Este artigo apresenta os recursos avançados do MetaMask Snap, explorando como esta tecnologia permite que a carteira MetaMask alcance aplicações mais diversas por meio de plug-ins. Enfatiza como rompe as restrições das carteiras tradicionais, mantendo a segurança, liberando maior potencial.

O que é MetaMask Snap?

Há alguns dias, a ConsenSys anunciou o lançamento público do MetaMask Snaps Open Beta. MetaMask Snaps são essencialmente plug-ins que ampliam os recursos da carteira MetaMask. Esses “Snaps” são aplicativos desenvolvidos por terceiros que podem ser instalados para adicionar novas funcionalidades.

Se comparássemos a transformação do MetaMask com o WeChat pela ConsenSys, então 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 da ConsenSys e a base de utilizadores da MetaMask, alterará o panorama do setor de 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 suas capacidades e limitações? Eles estão seguros? Como é a experiência do desenvolvedor? Todos esses fatores podem determinar o potencial futuro dos MetaMask Snaps.

Desde o ano passado, a LXDAO esteve profundamente envolvida na pesquisa da implementação de Snaps. Vários membros se envolveram no desenvolvimento do Snap e participaram de hackathons relacionados. Hoje, vamos nos aprofundar nessas questões de uma perspectiva técnica e até mesmo desenvolver um Snap para oferecer a você uma experiência prática de desenvolvedor.

Primeiros passos com MetaMask Snap

Instalando MetaMask Snap

Geralmente, você pode instalar Snaps no mercado oficial do MetaMask Snap ou diretamente no site de um projeto. Por exemplo, com o UniPass, ao visitar a página do aplicativo, haverá um botão para conectar sua MetaMask.

Clicar nele inicia a instalação do Snap:

Usando MetaMask Snap

Depois de instalado, você pode começar a usar o produto e seus recursos. Nesse caso, o UniPass criará uma conta de contrato inteligente para você, que você pode controlar por meio de sua MetaMask EOA (conta de propriedade externa).

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

Após a confirmação através do MetaMask, você pode prosseguir com a transação. Nesse cenário, a MetaMask ganha controle sobre a carteira UniPass AA por meio do Snap, eliminando a necessidade da UniPass desenvolver seu próprio plugin de carteira. Isso também permite a integração de usuários de baixo custo via MetaMask.

Que insights podemos obter deste processo de instalação e uso?

  1. Controle de permissão refinado: Snaps oferecem configurações de permissão complexas, abrangendo conexões de carteira, solicitações de rede e muito mais. Eles foram projetados com uma abordagem do “Princípio do Menor Privilégio”, colocando a segurança em primeiro lugar.
  2. Gerenciamento de pacotes via NPM: Conforme indicado por npm:@unipasswallet/unipass-snap, o Snap depende do NPM para gerenciamento de pacotes e versões, isso pode ter problemas de segurança, que detalharemos mais tarde.
  3. UI de alta flexibilidade, mas concisa: Snaps são altamente adaptáveis, permitindo que os projetos desenvolvam e ditem seus próprios recursos e lógica. No entanto, a interface do usuário precisa de algum refinamento.
  4. Experiência simples e confiável: Snaps fornecem uma experiência de usuário tranquila e confiável, atendendo aos padrões Beta e de nível de produção.

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

Os Snaps são seguros?

Análise de tempo de execução do código Snap

Snaps são baseados em NPM, o que implica que são aplicativos web e JavaScript. Como sabemos, o JavaScript é altamente flexível, mas suscetível a ataques como XSS e phishing. Então, como o MetaMask Snap enfrenta esses desafios?

Após a pesquisa, descobrimos que a MetaMask financiou e integrou o Hardened JavaScript da Agoric (ou Secure EcmaScript) como uma solução de sandbox “totalmente virtualizada”. Agoric elaborou uma API de restrição de JavaScript e apresentou um projeto de proposta ao TC-39: Proposta TC-39.

Em termos simples, Hardened JavaScript é um subconjunto mais seguro do JavaScript padrão. Ao ajustar alguns dos recursos do JavaScript e limitar as chamadas de API, vários riscos são reduzidos. Ele cria uma sandbox segura para execução do código e segue o “Princípio do Menor Privilégio” no planejamento de permissões de código.

Para especificações técnicas mais detalhadas sobre Hardened JavaScript, consulte: https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf.

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

Tanto Agoric quanto MetaMask passaram por 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, no nível de execução do código, temos muitos motivos para acreditar que os Snaps são seguros.

Código aberto e código auditado

Além da autorização explícita do usuário e do design com privilégios mínimos, 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 passaram por auditorias de segurança de terceiros, aumentando ainda mais sua credibilidade.

Existe risco de segurança com Snaps gerenciados via NPM?

Atualmente, os Snaps são gerenciados com base em pacotes e versionamento NPM. NPM é uma ferramenta de gerenciamento de pacotes amplamente utilizada para desenvolvimento Web, permitindo que desenvolvedores e equipes de projeto liberem novos pacotes e códigos de forma independente.

MetaMask não tem controle sobre o lançamento de versões na plataforma NPM. Existe a possibilidade de que as alterações de versão mais recentes não sejam de código aberto ou auditadas, não é?

Após esclarecimento oficial, todas as alterações nas versões do pacote NPM precisam ser revisadas pela equipe oficial e adicionadas a uma lista de permissões antes de serem instaladas. Portanto, mesmo que uma equipe de projeto libere um novo pacote NPM, ele não poderá ser instalado pelos usuários até que seja oficialmente listado. Esta abordagem sem dúvida aumenta o custo de atualização das versões do Snap, mas é de fato 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

MetaMask Snap foi anunciado oficialmente recentemente, mas na verdade 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 nesta empreitada.

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

  1. Interoperabilidade: permite que os desenvolvedores criem carteiras para outras redes baseadas em MetaMask.
  2. Transaction Insights: permite que os desenvolvedores recuperem dados de transações antes que um usuário inicie uma transação, para avaliação de risco.
  3. Notificações: permite mensagens diretas aos usuários por meio de Snaps, embora pareça exigir suporte do site e pareça um tanto limitado.

Abaixo está uma breve introdução aos recursos 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 usuários por meio desta interface, conforme mostrado na imagem abaixo.

Capacidade de insights de transação

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

Através desta capacidade, recursos como auditoria segura de informações de transações e exibições estendidas de informações podem ser realizados.

Interface de diálogo e recursos de interface personalizada

O recurso Diálogo permite que o Snaps abra uma janela separada diretamente, semelhante às tradicionais caixas de diálogo Alerta/Confirmação/Prompt. Eles são usados para lembretes, confirmações e envio de informações, respectivamente.

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

O que o MetaMask Snap não consegue alcançar no momento?

Por motivos de segurança, o Snap atualmente não oferece suporte a estruturas de front-end de terceiros e fornece apenas um UIKit limitado. Aqui, ainda usamos o Insight como exemplo, apresentando a biblioteca de componentes de UI disponível para desenvolvedores.

Conforme mostrado na imagem, os recursos atuais incluem Título (texto grande), Texto (texto pequeno), Painel (um cartão descartável), Divisor, Copiável (clique para copiar) e um subconjunto de recursos Markdown (negrito e itálico). Portanto, os recursos interativos parecem temporariamente inatingíveis e o HTML incorporado não pode ser usado para interações. No entanto, após fazerem uma pergunta no Discord oficial, eles 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, as solicitações externas são suportadas apenas através do método Fetch e não suportam protocolos de solicitação adicionais, como WebSocket. Devido a limitações de segurança, capacidade e privacidade, também não é possível acessar informações do cliente, como a URL atual que acionou o Snap, tornando um desafio a implementação de uma gama mais ampla de recursos.

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

Com a introdução dessas APIs, o MetaMask evoluiu essencialmente para um produto de plataforma aberta. É semelhante a quando o WeChat lançou sua conta oficial e miniprogramas, deixando de ser apenas uma ferramenta de chat.

Em 2019, a MetaMask já previa o cenário atual do mercado com inúmeras redes públicas, partes de projetos e requisitos de carteira personalizados. Em vez de cada projeto desenvolver seu próprio plugin e os usuários terem que instalar vários plugins, é mais eficiente desenvolver com base no MetaMask Snap. No primeiro lote de Snaps, vimos carteiras de outros ecossistemas além do EVM, como Sui Wallet, Solana Wallet e Arweave Wallet. Dada a sua base de usuários existente, o MetaMask Snap certamente terá um impacto significativo no cenário da carteira.

Na verdade, o potencial do MetaMask Snap pode ser ainda maior do que imaginamos, indo além das carteiras. Também podemos ver os esforços da equipe EthSign, que criou um gerenciador de senhas universal chamado KeyChain baseado em MetaMask Snaps. Todas as senhas do navegador podem ser criptografadas e armazenadas usando a chave da carteira. Ao proteger sua carteira, você está essencialmente protegendo todas as suas senhas.

Há também uma criação da equipe Web3MQ. Web3MQ é uma rede de retransmissão de comunicação descentralizada de alto desempenho. O Web3MQ Snap servirá como cliente para facilitar interações de mensagens, notificações, alertas e funções push. Ele se integrará com outros DApps conectados ao Web3MQ, como ferramentas de chat ou jogos baseados em blockchain, entre outros. Com a ajuda do Web3MQ Snap, mensagens e atualizações serão automaticamente enviadas aos usuários do Metamask Snap, eliminando a necessidade de autorização adicional do usuário. Isso estabelece uma conexão confiável entre usuários e entre usuários e aplicativos.

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

Criando um Snap para teste

Processo de pensamento

É bem sabido que a maioria dos usuários muitas vezes não conhece os contratos inteligentes com os quais estão interagindo, 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 pode ser atualizado.
  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 usuários comuns, esperar que eles revisem o código de solidez dos contratos antes de cada operação é uma tarefa difícil. Esta situação é ideal para o recurso Transaction Insight analisar contratos inteligentes, como usar IA para uma auditoria preliminar de segurança, possivelmente filtrando 80% dos ataques básicos de phishing.

Configurando o Ambiente de Desenvolvimento

Instalação de carteira

Primeiro, instale o MetaMask Flask.

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

É recomendado desativar temporariamente sua carteira MetaMask normal e outras carteiras de navegador após instalar ou criar um novo perfil do Chrome para evitar conflitos.

Criação de conta

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

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

Para inicializar um Snap baseado em um template, 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:

fio criar @metamask/snap transaction-insights-snap && cd transaction-insights-snap

Estrutura de arquivo instantâneo

Os principais arquivos Snap estão em ./packages/snap. A estrutura do diretório é:

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

Habilitando permissões

Primeiro, ative as permissões. Adicione as três linhas a seguir a snap.mainfest.json:

jsonCopiar código

“permissões iniciais”: {

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

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

“dotação:acesso à rede”: {} //

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

Buscando transações

Para esta demonstração, basta modificar o arquivo 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';

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

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

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

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

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

retornar {

contente: [

 text( 

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

 ), 

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

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

 divisor(), 

 text( 

 `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 poucos problemas. Os modelos oficiais também são ricos e diversificados. Desenvolvedores experientes geralmente podem começar e desenvolver o Snap necessário em poucas horas. No entanto, o maior gargalo para lançamentos oficiais que atendam ao público mainstream serão as auditorias de segurança. Nem todos os desenvolvedores independentes ou equipes pequenas têm recursos para realizar auditorias em seus Snaps. Portanto, espera-se que a quantidade e a diversidade de Snaps não experimentem um crescimento explosivo por um tempo considerável.

Suporte ao desenvolvedor

Se você conseguiu executar com sucesso o exemplo acima, parabéns, você é um desenvolvedor 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 dirigida por funcionários, com o objetivo de oferecer subsídios a desenvolvedores externos globais para a construção de experiências impactantes dentro do ecossistema MetaMask. Uma parte dos lucros trimestrais da MetaMask é canalizada para este DAO, e seu orçamento anual atual é de US$ 2,4 milhões.

Qualquer projeto que enriqueça o ecossistema MetaMask pode solicitar um MetaMask Grant oficial do MetaMask Grants DAO. Para obter mais informações, visite https://metamaskgrants.org/.

Vale ressaltar que a LXDAO está honrada por ter se candidatado e recebido uma bolsa da MetaMask este ano, e tem participado ativamente no desenvolvimento de projetos relacionados, contribuindo para o ecossistema MetaMask!

Conclusão

Dissecamos o que é o Snap de uma perspectiva técnica, suas considerações de segurança, limitações e experiência do desenvolvedor. Resumindo:

  • Os Snaps são semelhantes aos Mini Programas WeChat, abrindo uma gama mais ampla de possibilidades para MetaMask.
  • A segurança é relativamente confiável. O código é executado em um ambiente sandbox restrito. O código precisa ser de código aberto e auditado. A equipe oficial configurou uma lista de permissões de instalação para autorização de instalação.
  • Devido a questões de segurança, a superfície atual da API é um tanto limitada. No entanto, ainda permite uma grande variedade de Snaps criativos.
  • Com quatro anos de refinamento e testes no mundo real, a experiência do desenvolvedor é excelente. No entanto, devido às 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 miniprogramas WeChat tiveram um início lento com APIs muito limitadas, explodiram desde 2018 e agora existem mais de 450 milhões de DAU e mais de 7 milhões de miniprogramas.

Atualmente, o MetaMask Snap ainda está passando por 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, porém seguro, como um sistema de auditoria seguro e sem permissão, de baixo custo, para permitir que mais desenvolvedores participem a um custo menor. Se esta questão for resolvida, poderá haver um aumento esperado na procura no futuro. Podem até surgir cargos dedicados de desenvolvedor Snap.

Aproveitando a enorme base de usuários do MetaMask, os desenvolvedores independentes também podem encontrar oportunidades únicas. Vamos ficar atentos às próximas inovações revolucionárias que o Snaps trará para a mesa.

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

Continue acompanhando nosso Twitter:https://twitter.com/LXDAO_Official@lxdao_official . Estaremos lançando mais conteúdo relacionado ao MetaMask Snap, como workshops, fique ligado!

Isenção de responsabilidade:

  1. Este artigo foi reimpresso de [meio]. Todos os direitos autorais pertencem ao autor original [LXDAO]. Se houver objeções a esta reimpressão, entre em contato com a equipe do Gate Learn ( gatelearn@gate.io ) e eles cuidarão disso imediatamente.
  2. Isenção de responsabilidade: As opiniões e pontos de vista expressos neste artigo são exclusivamente do autor e não constituem qualquer conselho de investimento.
  3. As traduções do artigo para outros idiomas são feitas pela equipe do Gate Learn. A menos que mencionado, é proibido copiar, distribuir ou plagiar os artigos traduzidos.
Comece agora
Inscreva-se e ganhe um cupom de
$100
!