Atualização importante da versão 2.x do Solana Web3.js: divisão de funcionalidades e otimização de desempenho

robot
Geração de resumo em curso

Solana Web3.js 2.x versão: divisão de funcionalidades e otimização de desempenho

Solana Web3.js, como uma biblioteca JavaScript rica em funcionalidades, lançou a versão 2.x em novembro deste ano. A nova versão apresenta mudanças significativas em relação à 1.x, e este artigo fará um resumo das principais alterações.

Embora a versão 2.x tenha sido lançada há pouco tempo e o uso ainda não seja alto, muitos bibliotecas amplamente utilizadas ainda não mudaram, mas entender essas mudanças é muito útil para o trabalho de migração no futuro.

Comparação de Versões

A versão antiga é relativamente simples de usar, basta um pacote @solana/web3.js que contém tudo. É baseado em um design orientado a classes, encapsulando uma grande quantidade de operações comuns. Por exemplo, a classe Connection oferece dezenas de métodos, cobrindo quase todas as funcionalidades necessárias para os desenvolvedores.

No entanto, esse design também traz alguns problemas. Mesmo que os desenvolvedores usem apenas uma pequena parte das funcionalidades, toda a biblioteca de código será baixada para o dispositivo do usuário, e devido à grande quantidade de código da biblioteca, isso pode levar a um tempo de carregamento considerável.

A versão 2.x adotou uma estratégia diferente. A equipe oficial dividiu o repositório de código original em vários pequenos módulos, como @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, entre outros. Ao mesmo tempo, a nova versão abandonou a implementação baseada em classes, adotando mais uma abordagem de função única. Este design é benéfico para a otimização do código JavaScript durante a construção, pois o código não utilizado será removido e não será baixado para o dispositivo do usuário. De acordo com a documentação oficial, o uso da nova versão do DApp pode normalmente resultar em uma otimização de cerca de 30% em tamanho; se apenas uma pequena parte das funcionalidades for utilizada, a proporção de otimização pode ser ainda maior.

Esta mudança também trouxe desafios para o trabalho de documentação da equipe Solana, como fazer com que os desenvolvedores encontrem rapidamente as funcionalidades necessárias tornou-se um problema importante. Atualmente, os nomes dos pacotes têm uma boa semântica, e a partir dos nomes é possível compreender de forma geral as suas utilidades, o que, até certo ponto, reduz a dificuldade de migração para os desenvolvedores.

No entanto, devido ao lançamento recente, muitos projetos ainda não realizaram a migração. Há poucos exemplos sobre a versão 2.x no Solana Cookbook. A nova versão tende a usar funcionalidades embutidas no runtime (como a geração de pares de chaves), mas a documentação é insuficiente em relação a essas partes, o que pode deixar os desenvolvedores confusos.

Uma outra característica importante da versão 2.x é a ausência de dependências. Embora isso possa não ser tão relevante para muitos usuários, o ataque à cadeia de suprimentos que ocorreu no início de dezembro deste ano nas versões @solana/web3.js 1.95.5 e 1.95.6 mostra que mais entradas e dependências externas aumentam significativamente a probabilidade de ocorrência de eventos de segurança. Com o lançamento da versão 2.x, a equipe de desenvolvimento do Web3.js decidiu utilizar mais funcionalidades nativas, eliminando a introdução de dependências externas e Polyfills. Embora possa haver mudanças no futuro, atualmente a versão 2.x já eliminou todas as dependências externas.

Web3 Novato Série: Agora atualize @solana/web3.js 2.x para habilitar programação funcional

Pontos de mudança importantes

conectar

Na versão 1.x, a classe Connection oferece uma vasta gama de métodos. No entanto, a sua principal função é criar um emissor de solicitações configurando o endereço RPC, e depois enviar várias solicitações através dele.

A versão 2.x implementou esta funcionalidade de uma forma mais funcional. Por exemplo, ao chamar sendAndConfirmTransaction para enviar uma transação, uma solicitação HTTPS é automaticamente iniciada, e uma conexão WSS é estabelecida, subscrevendo o estado da transação. Após a confirmação da transação, o hash da transação é retornado.

par de chaves

A parte relacionada com a chave pública e a chave privada também sofreu grandes alterações. As classes Keypair e PublicKey, comuns na versão 1.x, deixaram de existir e foram substituídas por algumas funções.

Por exemplo, pode-se usar await generateKeyPair() para gerar um par de chaves, em vez do anterior Keypair.generate(). É importante notar que o novo generateKeyPair retorna uma Promise, em vez de retornar diretamente o par de chaves. Isso se deve ao fato de que a nova implementação aproveita ao máximo a API Web Crypto do JavaScript, utilizando a implementação nativa do Ed25519. Muitos métodos da API Web Crypto são assíncronos. No entanto, essa mudança não é difícil de aceitar; em 2024, os desenvolvedores JavaScript já estão muito familiarizados com Promises.

Enviar transação

As classes Transaction e VersionedTransaction da versão 1.x não existem mais na 2.x.

Os métodos relacionados ao System Program fornecidos na versão anterior também não existem mais, portanto, os métodos estáticos na classe SystemProgram precisam ser importados de outros lugares. Por exemplo, o comando transfer precisa chamar a função getTransferSolInstruction do @solana-program/system.

Devido à não disponibilização de classes, o Web3.js oferece a forma pipe, comum na programação funcional. Os desenvolvedores podem usar a função pipe para implementar a funcionalidade de transferência da versão 1.x.

É importante notar que as transações não são mais iniciadas através da Connection, mas sim através de um RPC Provider definido pelo desenvolvedor que gera uma função específica, e então essa função é chamada para iniciar a transação. Em comparação com a versão 1.x, a quantidade de código aumentou, mas a personalização se tornou mais robusta.

As transações são iniciadas através de HTTPS RPC e, em seguida, confirmadas através da subscrição de WSS RPC. É possível sentir que a nova abordagem depende muito do WSS e acredita-se que a aplicação do WSS se tornará cada vez mais ampla no futuro, o que também eleva as exigências sobre a estabilidade dos serviços dos fornecedores de RPC.

React

Vale a pena mencionar que o projeto @solana/web3.js também inclui uma biblioteca chamada @solana/react, que fornece alguns React Hooks, com funcionalidades integradas como signIn.

Resumo

A publicação da versão 2.x do @solana/web3.js reflete o compromisso da equipe Solana com o desenvolvimento e a melhoria contínuas. Oferece aos desenvolvedores uma forma eficiente, flexível e personalizável de interagir com a rede Solana, ajudando a promover a adoção e o desenvolvimento da plataforma.

Web3 Novato Série: Agora atualize @solana/web3.js 2.x para ativar a programação funcional

SOL-1.35%
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
  • 4
  • Partilhar
Comentar
0/400
SignatureVerifiervip
· 08-04 17:28
smh... outro lançamento apressado que requer uma extensa auditoria de segurança
Ver originalResponder0
BearMarketSurvivorvip
· 08-04 17:27
O desempenho otimizado resulta em mais idiotas.
Ver originalResponder0
AlwaysAnonvip
· 08-04 17:20
Oh, finalmente foi atualizado.
Ver originalResponder0
DefiPlaybookvip
· 08-04 17:08
De acordo com a previsão da curva de crescimento do TVL, a otimização da arquitetura modular 2.x resulta em um aumento de desempenho de 27,8%
Ver originalResponder0
  • Pino
Negocie cripto em qualquer lugar e a qualquer hora
qrCode
Digitalizar para transferir a aplicação Gate
Novidades
Português (Portugal)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)