Grande atualização da versão 2.x do Solana Web3.js: design modular melhora desempenho e segurança

Solana Web3.js versão 2.x: Atualização significativa de uma biblioteca JavaScript rica em funcionalidades

O Solana Web3.js, como uma poderosa biblioteca JavaScript, lançou oficialmente a versão 2.x em novembro deste ano. Esta atualização trouxe mudanças significativas, vamos resumir brevemente as principais novidades.

Embora a versão 2.x tenha sido lançada recentemente e a taxa de adoção ainda não seja generalizada, muitas bibliotecas amplamente utilizadas ainda não foram migradas. No entanto, entender essas mudanças antecipadamente é muito benéfico para a preparação para futuras atualizações.

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

Comparação de Versões

É inegável que a versão antiga é mais simples e direta de usar. A versão 1.x contém apenas um pacote @solana/web3.js, onde todas as funcionalidades estão concentradas. É 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, praticamente cobrindo todas as funcionalidades necessárias para os desenvolvedores. Além disso, o cookbook da Solana também fornece uma rica coleção de códigos de exemplo, facilitando a busca das funcionalidades necessárias pelos desenvolvedores.

No entanto, este design também traz alguns problemas. Embora as funcionalidades que os desenvolvedores realmente usam possam ser apenas uma pequena parte, todo o repositório de código será baixado para o dispositivo do usuário, e devido à grande quantidade de código na biblioteca, isso pode levar algum tempo.

Em comparação, a versão 2.x adotou uma abordagem de design modular. 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. Esse design é muito útil para a otimização durante a construção do código JavaScript, pois o código não utilizado será removido e não será baixado para os dispositivos dos usuários. De acordo com as estatísticas da documentação oficial, os DApps que utilizam a nova versão conseguem, basicamente, uma otimização de 30% em volume; se apenas uma pequena parte das funcionalidades for utilizada, a proporção de otimização pode ser ainda maior.

Essa mudança também impôs exigências mais altas à qualidade da documentação da equipe Solana, e como permitir que os desenvolvedores encontrem rapidamente as funcionalidades necessárias tornou-se um problema importante. Pelo que parece, pelo menos os nomes dos pacotes têm uma boa semântica, permitindo entender aproximadamente suas finalidades apenas pelos nomes. Isso pode, em certa medida, reduzir a dificuldade de migração para os desenvolvedores.

Claro, devido ao fato de que foi lançado há pouco tempo, muitos projetos ainda não migraram. Existem relativamente poucos exemplos sobre a versão 2.x no Solana Cookbook. Além disso, como a nova versão tende a usar funções integradas em tempo de execução (como a geração de pares de chaves), a documentação é insuficiente em relação a essas partes, o que pode causar confusão para os desenvolvedores em alguns pontos.

Uma outra característica importante da versão 2.x é a ausência de dependências. Isso pode não ser relevante para muitos usuários, mas, considerando 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, mais entradas e dependências externas aumentam significativamente a probabilidade 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 mudanças possam ocorrer no futuro, pelo menos atualmente a versão 2.x eliminou todas as dependências externas.

Pontos de Mudança Importantes

conectar

Como mencionado anteriormente, a versão 1.x fornece uma variedade de métodos através da Connection. No entanto, sua principal função ainda é criar um emissor de requisições configurando o endereço RPC, e então enviar vários tipos de requisições através dele.

Na versão 2.x, foi adotada uma abordagem mais funcional para implementar:

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

const rpc = createSolanaRpc("");

Quando chamamos "sendAndConfirmTransaction" para enviar uma transação, uma solicitação HTTPS é automaticamente iniciada, e uma conexão WSS é estabelecida, assinando o status da transação. Após a confirmação da transação, o hash da transação é retornado.

par de chaves

A parte relacionada à chave pública e à chave privada também sofreu mudanças significativas. As classes Keypair e PublicKey, comumente usadas na versão 1.x, não existem mais, sendo substituídas por algumas funções.

Por exemplo, pode usar "await generateKeyPair()" para gerar um par de chaves, enquanto anteriormente gerava o par de chaves diretamente através de "Keypair.generate()".

Você pode ter notado que o novo generateKeyPair retorna uma Promise, em vez de retornar diretamente o par de chaves como antes. Isso ocorre porque 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, que está prestes a terminar, os desenvolvedores JavaScript já estão muito familiarizados com Promises.

enviar transação

Os usuários da versão 1.x devem estar bastante familiarizados com as classes "Transaction" e "VersionedTransaction". Quando você começa a entender o Solana, a relação entre elas pode parecer confusa.

Na versão 2.x, essas duas classes também não existem mais.

Os métodos relacionados ao System Program fornecidos na versão anterior também não existem mais, portanto, todos os métodos estáticos na classe "SystemProgram" precisam ser importados de outro lugar.

Por exemplo, o comando "transfer" requer a chamada da função "getTransferSolInstruction" no "@solana-program/system".

Devido à não disponibilização de classes, o Web3.js oferece a forma "pipe" comum na programação funcional. Abaixo está um exemplo da funcionalidade de transferência originalmente da versão 1.x implementada através da função pipe:

javascript import { pipe } from "@solana/web3.js"; import { getTransferSolInstruction } from "@solana/system-program";

const transaction = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ de: senderPublicKey, para: recipientPublicKey, quantidade: lamports, })), setComputeUnitLimit(200_000), addSignature(senderSignature) );

const signature = await sendAndConfirmTransaction(rpc, transaction);

Pode-se notar que as transações não são mais iniciadas através da Connection, mas sim através de um função única gerada pelo nosso RPC Provider, que é então chamada para iniciar a transação. Em comparação com a versão 1.x, a quantidade de código aumentou, mas a vantagem é que a personalização é mais forte.

As transações são iniciadas através de HTTPS RPC e, em seguida, confirmadas através da subscrição de WSS RPC. Pode-se sentir que a nova abordagem depende muito do WSS, acreditando que a aplicação do WSS se tornará cada vez mais abrangente no futuro, o que realmente impõe maiores exigências à estabilidade do serviço dos fornecedores de RPC.

React

Curiosamente, o projeto @solana/web3.js também inclui uma biblioteca chamada @solana/react, que oferece alguns Hooks do React, incorporando funcionalidades como signIn.

Resumo

O lançamento da versão 2.x de @solana/web3.js reflete plenamente o compromisso da equipe Solana com o desenvolvimento e a melhoria contínuos. Ele 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.

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

SOL1.06%
Ver original
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
  • Recompensa
  • 6
  • Compartilhar
Comentário
0/400
RetiredMinervip
· 08-01 03:21
Já com alguma idade, ainda a mexer em novas versões.
Ver originalResponder0
IntrovertMetaversevip
· 07-31 08:40
A atualização é rápida, mas ninguém a usa.
Ver originalResponder0
LeverageAddictvip
· 07-29 23:23
Matar o velho grupo de projeto
Ver originalResponder0
OnchainHolmesvip
· 07-29 23:22
Finalmente esperei e fui embora.
Ver originalResponder0
TokenVelocityTraumavip
· 07-29 23:21
A atualização e tal é muito cansativa, até logo.
Ver originalResponder0
ProofOfNothingvip
· 07-29 23:13
Uhul, já foi atualizado, pode experimentar.
Ver originalResponder0
  • Marcar
Faça trade de criptomoedas em qualquer lugar e a qualquer hora
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)