Grande atualização da versão 2.x do Solana Web3.js: divisão de funcionalidades e melhoria de desempenho sem dependências.

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

Solana Web3.js, como uma poderosa biblioteca JavaScript, lançou oficialmente a versão 2.x em novembro. Em comparação com a versão 1.x, a nova versão trouxe várias mudanças significativas, este artigo irá resumir as principais atualizações.

Apesar de a versão 2.x ter sido lançada recentemente e seu uso ainda ser baixo, muitos bibliotecas amplamente utilizadas ainda não foram migradas, mas entender essas mudanças é crucial para o trabalho de migração futuro.

Web3 Novato Série: Agora atualize @solana/web3.js 2.x para ativar 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, que inclui todas as funcionalidades. É baseada em um design orientado a classes, encapsulando uma grande quantidade de operações comuns. Por exemplo, a classe Connection fornece dezenas de métodos, cobrindo praticamente todas as funcionalidades necessárias para os desenvolvedores. Além disso, o rico código de exemplo no cookbook do Solana oferece uma grande conveniência para os desenvolvedores.

No entanto, este design também traz alguns problemas. Embora as funcionalidades que os desenvolvedores realmente utilizam possam representar apenas uma pequena parte, toda a biblioteca de código será baixada para o dispositivo do usuário e, devido ao grande volume de código da biblioteca, isso pode causar algum atraso no carregamento.

A versão 2.x adotou uma abordagem diferente. A equipe oficial dividiu o repositório de código original em vários módulos pequenos, como @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers e @solana/transactions. Ao mesmo tempo, a nova versão abandonou a implementação baseada em classes, adotando mais um modo de função única. Essa mudança é benéfica 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, as DApps que utilizam a nova versão conseguem, em geral, uma otimização de 30% no tamanho, e para aplicações que utilizam apenas algumas funcionalidades, a proporção de otimização é ainda maior.

Esta mudança também impôs exigências mais altas à qualidade da documentação da equipa Solana. Como permitir que os desenvolvedores encontrem rapidamente as funcionalidades necessárias tornou-se um problema chave. Atualmente, parece que os novos nomes dos pacotes têm uma boa semântica, permitindo entender aproximadamente a sua utilização apenas pelo nome, o que, em certa medida, reduz a dificuldade de migração dos desenvolvedores.

No entanto, como a nova versão foi lançada recentemente, muitos projetos ainda não migraram. Existem também relativamente poucos exemplos sobre a versão 2.x no Solana Cookbook. Além disso, a nova versão tende a usar funcionalidades embutidas no runtime (como a geração de pares de chaves), mas a documentação é insuficiente na descrição dessas partes, levando os desenvolvedores a sentirem-se confusos em certos aspectos.

Uma característica importante da versão 2.x é a ausência de dependências. Isso pode não ser tão importante para muitos usuários, mas considerando o ataque à cadeia de suprimento que ocorreu no início de dezembro deste ano nas versões @solana/web3.js 1.95.5 e 1.95.6, reduzir entradas externas e dependências pode diminuir 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 usar 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.

Principais alterações

Método de Conexão

Na versão 1.x, a classe Connection fornece uma grande variedade de métodos. A sua principal função é criar um emissor de pedidos configurando o endereço de pedidos RPC e, em seguida, enviar vários pedidos através dele.

A versão 2.x adotou uma abordagem mais funcional:

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

const rpc = createSolanaRpc("");

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

tratamento de chave par

O tratamento relacionado a chaves públicas e privadas também passou por mudanças significativas. As classes Keypair e PublicKey, comuns na versão 1.x, não existem mais, sendo substituídas por uma série de funções.

Por exemplo, agora 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 utiliza o API Web Crypto do JavaScript o máximo possível, utilizando a implementação nativa de Ed25519. Muitos métodos do API Web Crypto são assíncronos. No entanto, para os desenvolvedores modernos de JavaScript familiarizados com Promises, essa mudança não é difícil de aceitar.

envio de transação

As classes Transaction e VersionedTransaction, que você conhecia na 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 são mais mantidos, 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 pipe comum na programação funcional. Aqui está um exemplo de como implementar a funcionalidade de transferência original da versão 1.x usando a função pipe:

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

const transaction = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ fromPubkey: sender, toPubkey: recipient, lamports: amount })) );

const signature = await rpc.sendTransaction(transaction);

Pode-se ver que as transações não são mais iniciadas através da Connection, mas sim geradas por um função específica definida pelo nosso RPC Provider, que é chamada para iniciar a transação. Comparado com a versão 1.x, a quantidade de código aumentou ligeiramente, mas oferece uma 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 o novo método depende mais do WSS, acreditando que a aplicação do WSS será mais ampla no futuro, o que também impõe exigências mais altas à estabilidade dos serviços dos fornecedores de RPC.

React suporta

É importante mencionar que o projeto @solana/web3.js também inclui uma biblioteca chamada @solana/react, que oferece alguns Hooks do React, com funcionalidades integradas como signIn.

Resumo

A versão 2.x do @solana/web3.js demonstra plenamente a determinação da equipe Solana em continuar a melhorar e desenvolver. A nova versão 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 ainda esteja em fase inicial, à medida que mais projetos migram e a comunidade se adapta, acredita-se que a versão 2.x terá um papel ainda maior no futuro.

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

SOL0.85%
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
  • 5
  • Republicar
  • Partilhar
Comentar
0/400
GweiWatchervip
· 08-09 18:00
O antigo não atualizado passou.
Ver originalResponder0
TheShibaWhisperervip
· 08-09 18:00
Quando é que vai estar tudo atualizado? Estou farto.
Ver originalResponder0
SchrodingerWalletvip
· 08-09 17:54
Mais uma rodada de migração, que chato.
Ver originalResponder0
SorryRugPulledvip
· 08-09 17:50
Outra atualização e ainda temos que migrar, estou preocupado.
Ver originalResponder0
DaoTherapyvip
· 08-09 17:42
Vamos esperar pela atualização primeiro.
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)