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 maneiras 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 criados hoje.
Composooor Snap
Repositório do Snap: https://github.com/kairos-loan/composooor/tree/main/packages/snap
Por que você o criou?
Durante nossa experiência desenvolvendo protocolos financeiros baseados em smart contracts e outros aplicativos blockchain, percebemos um padrão recorrente. Cada vez mais aplicativos utilizam recursos offchain (como computação ou armazenamento de dados) verificados na lógica do contrato, devido às limitações técnicas das blockchains. Exemplos incluem order books, árvores de Merkle de airdrops, listas ordenadas, atributos de tokens, entre outros.
Em cada caso, informações valiosas são armazenadas ou computadas offchain, mas podem ser utilizadas e têm grande impacto nas interações onchain. Para tornar isso possível, os contratos usam diferentes técnicas criptográficas, como hashes ou assinaturas, para verificar a validade. Os Dapps então exigem frontends/APIs com lógica específica capaz de fornecer as informações relevantes para o contrato. Infelizmente, esse padrão compromete a composabilidade — por exemplo, um aplicativo DeFi que depende de um order book proprietário hospedado na AWS não pode ser facilmente integrado por outro smart contract.
Cansados dessas limitações, decidimos criar um padrão e uma infraestrutura para permitir que todos os aplicativos sejam facilmente integrados a qualquer coisa. Acreditamos firmemente que facilitar as integrações novamente abre muitas oportunidades para o ecossistema.
Você pode nos guiar pela implementação técnica?
Introdução
O Composooor metamask snap é usado para padronizar e gerenciar a comunicação entre um cliente web, um ou múltiplos recursos arbitrários offchain, e um número arbitrário de smart contracts que implementam o padrão composooor. Todos os recursos padrão são facilmente acessíveis em um pacote npm que, na maioria dos casos, torna o uso dos superpoderes do composooor uma questão de uma única linha de código.
Passo a passo
Ao preparar uma transação, nossa carteira metamask snap solicitará uma estimativa de gas na chamada do contrato onchain desejado.
Se o contrato precisar de dados ou computação feita offchain para funcionar, ele reverterá com um erro padronizado contendo especificações sobre como encontrar esses dados ausentes. O erro padronizado tem a seguinte aparência:
error MissingOffchainDataError(
address registryAddress,
string url,
bytes abiArgs
);
esse erro é exposto pelo ComposooorRegister, que os contratos devem estender para acessar recursos offchain.
A carteira Metamask snap pode então decodificar esse erro e encontrar os dados ausentes, seja buscando-os em um protocolo descentralizado, em uma API, ou executando algum código obtido dessas fontes para produzi-los. Para o hackathon ETHDenver, implementamos a opção mais simples, que é a chamada de API.
const responseData = await fetch(error.url + `?args=${error.abiArgs}`);A carteira então estimará o gas novamente, desta vez adicionando uma instrução para armazenar os dados obtidos no registro padronizado do contrato correspondente antes de chamar o método desejado.
const callToRegisterData: Call = {
callee: error.registryAddress,
functionSelector: utils.id('recordParameter(bytes)').slice(0, 10) as PrefixedBy0x,
data: defaultAbiCoder.encode(['bytes'], [data]) as PrefixedBy0x,
};
Durante a execução da transação, o mesmo contrato ou outro pode precisar de outro recurso offchain para funcionar. Se for o caso, a carteira repete as etapas de preparação da transação até que nenhum recurso offchain seja mais necessário. Isso permite uma composabilidade infinita entre protocolos que acessam ricos recursos offchain.
Quando a estimativa de gas é bem-sucedida, o usuário recebe a solicitação de assinatura da transação preparada, para ser executada com sucesso com todos os recursos necessários incluídos.
Como é integrar um aplicativo habilitado para composooor / criar o seu próprio.
No ETHDenver, demonstramos como o composooor reduz a complexidade do código do padrão usual de aplicativo híbrido em pelo menos 80-90%.
Lado do smart contract
Importe com import "@composooor/ComposooorRegister.sol";. Exemplo de uso:
contract Example is ComposooorRegister {
function action() public {
bytes memory data = consumeParameter("http://api.api/number", abi.encode(arguments));
(uint256 offchainNumber) = abi.decode(data, (uint256));
(...)
}
}
ComposooorRegister é desenvolvido em Solidity.
Lado do front-end
O composooor snap gera os maiores retornos no lado do front-end: ele reduz integrações que tipicamente têm 200+ linhas para… 0! A lógica do snap cuida de tudo.
Demo
Criamos uma demo totalmente integrada na forma de um dapp react-wagmi. Esse dapp permite comprar um NFT pagando apenas uma pequena fração do preço antecipadamente e fazendo um empréstimo para pagar o restante posteriormente. Onchain, não menos que 8 contratos estão envolvidos na transação. No meio do processo, o marketplace de NFTs exige uma assinatura offchain do vendedor do NFT. O composooor snap é capaz de identificar o erro, decodificá-lo e fornecer as informações onchain (após serem obtidas em uma API), apesar da complexidade da transação. O Composooor tornou este aplicativo muito mais simples de implementar.
Quais são os próximos passos se você fosse implementar isso?
Parte de uma inovação como essa — que faz os desenvolvedores ganharem tempo considerável e habilita novos casos de uso em blockchain — é a adoção. Implementaríamos e implantaríamos múltiplos aplicativos voltados ao usuário usando o Composooor snap nos bastidores e trabalhando com o snap correspondente. Se esses aplicativos ganhassem tração, faríamos parcerias para compô-los com outros aplicativos, iniciando um ciclo virtuoso de adoção impulsionado pela experiência de desenvolvimento simplificada. Ao longo do caminho, o snap e o padrão evoluiriam para um produto mais geral e padronizado, alinhado à visão original: conectar blockchains de forma síncrona a recursos arbitrários, de maneira agnóstica em relação à descentralização e aos casos de uso.
Você pode nos contar um pouco sobre você e sua equipe?
Somos uma equipe desenvolvendo um protocolo de empréstimo para usar NFTs como garantia com uma abordagem mais eficiente em termos de capital. Optamos por uma arquitetura que utiliza componentes offchain, como um order book. Essa escolha permite melhorar a eficiência de capital e a experiência do usuário, mas pode limitar a interoperabilidade com outros protocolos. Por isso desenvolvemos o Composooor snap, que permite fácil integração com outros protocolos. Esperamos que essa biblioteca seja utilizada por outras equipes, abrindo novas possibilidades e facilitando o trabalho delas.
Que oportunidades você enxerga com o MetaMask Snaps e as possibilidades que ele desbloqueia para o espaço Web3?
As carteiras são um dos principais pilares/blocos de construção inevitáveis da web3, e a MetaMask é a carteira padrão de fato para a maioria dos usuários. Permitir que os desenvolvedores aproveitem isso para novos casos de uso arbitrários me parece crucial. O ponto principal é que não conseguimos imaginar ou nos preparar para todas as inovações das quais as carteiras precisarão fazer parte — então dar algum acesso a elas é como a transição do Bitcoin para o Ethereum: habilitar casos de uso arbitrários sobre sua tecnologia tem um potencial positivo exponencial e imprevisível. Por isso é difícil responder a essa pergunta, mas o que mais me entusiasma são os aplicativos que fazem a carteira fazer mais do que apenas assinar mensagens e otimizar as interações de forma contextualmente rica para o usuário.
Algum conselho que você gostaria de compartilhar com desenvolvedores interessados em experimentar o MetaMask Snaps?
Utilize o template fornecido e tenha cuidado para solicitar corretamente cada aprovação do usuário necessária, usando o mínimo possível.
Desenvolvendo com MetaMask Snaps
Para começar com o MetaMask Snaps:
Confira a documentação para desenvolvedores
Instale o MetaMask Flask
Confira um guia do MetaMask Snaps
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 BUIDL ⚒️
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, e 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 utilizar o MetaMask Snaps.