Análise da atualização do Solana Web3.js 2.0: design modular melhora desempenho e segurança

Solana Web3.js 2.x versão: Análise da atualização da biblioteca JavaScript rica em funcionalidades

Solana Web3.js, como uma biblioteca JavaScript rica em funcionalidades, lançou oficialmente a versão 2.x em novembro deste ano. Em comparação com a versão 1.x, a nova versão trouxe muitas mudanças significativas. Este artigo irá resumir e analisar essas principais mudanças.

Embora a versão 2.x tenha sido recentemente lançada e a utilização ainda não seja alta, muitas bibliotecas amplamente utilizadas ainda não mudaram, mas entender essas mudanças é crucial para o trabalho de migração no futuro.

Comparação de Versões

A utilização da versão 1.x é relativamente simples. Ela contém apenas um pacote: @solana/web3.js, com todas as funcionalidades concentradas nele. O design orientado a classes encapsula uma grande quantidade de operações comuns, como a classe Connection, que oferece dezenas de métodos, cobrindo quase todas as funcionalidades necessárias para os desenvolvedores.

No entanto, este design também traz alguns problemas. Embora os desenvolvedores geralmente usem apenas uma pequena parte das funcionalidades, toda a biblioteca de código é baixada para o dispositivo do usuário, e devido ao grande volume de código da biblioteca, isso pode levar algum tempo.

A versão 2.x adotou uma abordagem diferente. A equipe oficial dividiu o código original em vários módulos pequenos, 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ções únicas. Essa mudança favorece a otimização durante a construção do código JavaScript, onde o código não utilizado será removido e não será baixado nos dispositivos dos usuários. De acordo com a documentação oficial, DApps que utilizam a nova versão geralmente podem alcançar uma otimização de 30% no tamanho do código, e se apenas algumas funcionalidades forem utilizadas, a proporção de otimização pode ser ainda maior.

Série para iniciantes em Web3: agora atualize @solana/web3.js 2.x para iniciar a programação funcional

Essa mudança impôs uma maior exigência sobre a qualidade da documentação da equipe Solana. Como ajudar os desenvolvedores a encontrar rapidamente as funcionalidades necessárias tornou-se uma questão crucial. Atualmente, os nomes dos pacotes possuem uma boa semântica, permitindo entender aproximadamente sua finalidade apenas pelo nome, o que, em certa medida, alivia a dificuldade de migração dos desenvolvedores.

No entanto, devido ao lançamento recente, muitos projetos ainda não migraram. Exemplos da versão 2.x no Solana Cookbook também são relativamente escassos. Além disso, a nova versão tende a usar funcionalidades integradas em tempo de execução (como geração de pares de chaves), mas a documentação carece de uma descrição detalhada dessas partes, levando a confusões em alguns aspectos para os desenvolvedores.

Uma característica importante da versão 2.x é a ausência de dependências. Embora isso possa não ser o mais importante para muitos usuários, a partir do 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, mais entradas e dependências externas aumentariam consideravelmente a possibilidade de eventos de segurança. Com o lançamento da versão 2.x, a equipe de desenvolvimento do Web3.js decidiu utilizar mais funções 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.

Pontos de mudança importantes

conectar

Na versão 1.x, a classe Connection oferece uma grande quantidade de métodos. Embora a sua função principal seja criar um emissor de requisições configurando o endereço de requisição RPC e, em seguida, enviar vários tipos de requisições através dele.

A versão 2.x adotou uma abordagem mais funcional para implementar esta funcionalidade:

javascript import { createSolanaRpc } from "@solana/web3.js";

const rpc = createSolanaRpc("");

Ao chamar sendAndConfirmTransaction para enviar a transação, o sistema iniciará automaticamente uma solicitação HTTPS e estabelecerá uma conexão WSS para assinar o estado da transação, retornando o hash da transação após a confirmação.

par de chaves

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

Por exemplo, agora você pode 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 de Ed25519. Muitos métodos da API Web Crypto são assíncronos. No entanto, essa mudança não é inaceitável; em 2024, no final do ano, os desenvolvedores JavaScript já estão muito familiarizados com Promises.

enviar transação

Os usuários da versão 1.x devem estar muito familiarizados com as classes Transaction e VersionedTransaction. Na versão 2.x, essas duas classes não existem mais.

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 outro lugar.

Por exemplo, o comando transfer agora precisa chamar a função getTransferSolInstruction no @solana-program/system.

Devido à não disponibilização de classes, o Web3.js oferece uma forma de programação funcional comum chamada pipe. Abaixo está um exemplo de como implementar a funcionalidade de transferência originalmente do 1.x usando a função pipe:

javascript import { pipe } from '@solana/functional'; import { generateKeyPair } from '@solana/web3.js'; import { getTransferSolInstruction } from '@solana/system-program'; import { createTransaction } from '@solana/transactions';

const transaction = pipe( createTransaction(), addInstruction(getTransferSolInstruction({ fromPubkey: sender.publicKey, toPubkey: recipient, lamports: amount, })), setRecentBlockhash(blockhash), addSigners([sender]) );

const signature = await rpc.sendAndConfirmTransaction(transaction);

Pode-se ver que as transações não são mais iniciadas através da Connection, mas sim através de um RPC Provider que definimos, gerando uma função específica que é 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 é agora mais forte.

As transações são iniciadas através do HTTPS RPC e, em seguida, confirmadas pelos resultados das transações através da assinatura do WSS RPC. Pode-se sentir que a nova abordagem depende muito do WSS, acreditamos que a aplicação do WSS será cada vez mais ampla no futuro, o que também coloca requisitos mais altos sobre a estabilidade dos serviços dos fornecedores de RPC.

React

É interessante notar 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 de @solana/web3.js reflete plenamente o compromisso da equipe Solana com o desenvolvimento e melhoria contínuos. Ela oferece aos desenvolvedores uma maneira eficiente, flexível e personalizável de interagir com a rede Solana, ajudando a impulsionar a adoção e o desenvolvimento da plataforma. Embora o uso atual não seja alto, acredita-se que, com o tempo, cada vez mais projetos migrarão para esta nova versão.

Web3 novato série: agora atualize @solana/web3.js 2.x para iniciar programação funcional

SOL0.19%
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
BearMarketSurvivorvip
· 16h atrás
Relatório da linha de frente: A atualização parece ter sido o primeiro tiro disparado em um ninho vazio.
Ver originalResponder0
OPsychologyvip
· 16h atrás
Não se apresse a trocar antes que a atualização esteja estável.
Ver originalResponder0
RugResistantvip
· 16h atrás
hum, potenciais pontos de segurança detectados... precisa de uma auditoria completa, para ser honesto
Ver originalResponder0
mev_me_maybevip
· 16h atrás
Ah, a Solana também começou a jogar com modularização.
Ver originalResponder0
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)