Solana Web3.js versão 2.x: uma grande atualização em design modular e programação funcional

robot
Geração do resumo em andamento

Solana Web3.js 2.x versão: uma nova experiência de programação funcional

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 traz uma série de mudanças significativas, e este artigo irá resumir as suas principais alterações.

Embora a versão 2.x tenha sido recentemente lançada e o uso ainda não esteja generalizado, muitas bibliotecas amplamente utilizadas ainda não foram migradas. No entanto, entender essas mudanças antecipadamente será muito benéfico para o trabalho de migração no futuro.

Série para iniciantes em Web3: Atualize agora @solana/web3.js 2.x para habilitar 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, com todas as funcionalidades concentradas nele. É 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, quase cobrindo todas as funcionalidades necessárias para os desenvolvedores. Além disso, o rico código de exemplo no livro de receitas Solana também oferece grande conveniência para os desenvolvedores.

No entanto, este design também traz alguns problemas: embora as funcionalidades realmente utilizadas pelos desenvolvedores possam representar apenas uma pequena parte, 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 a um certo tempo de carregamento.

Em comparação, a versão 2.x adotou uma abordagem de design modular. A equipe oficial dividiu o antigo código 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, optando por uma abordagem de função única, o que ajuda bastante na otimização ao construir códigos em JavaScript. 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 geralmente pode resultar em uma otimização de 30% no tamanho; se apenas algumas funcionalidades forem utilizadas, a proporção de otimização pode ser ainda maior.

Essa mudança também impôs uma maior exigência à qualidade da documentação da equipe Solana. Como permitir que os desenvolvedores localizem rapidamente as funcionalidades necessárias tornou-se uma questão chave. Até agora, parece que a nomenclatura de cada pacote possui uma boa semanticidade, permitindo que se deduza em grande medida seu uso a partir do nome, o que, em certa medida, reduz a dificuldade de migração para os desenvolvedores.

No entanto, como a nova versão foi lançada há pouco tempo, muitos projetos ainda não concluíram a migração. Os exemplos sobre a versão 2.x no Solana Cookbook também são relativamente limitados. Além disso, a nova versão tende a usar funcionalidades integradas em tempo de execução (como a geração de pares de chaves), mas a descrição dessas partes na documentação não é suficientemente detalhada, o que pode deixar os desenvolvedores confusos.

Uma outra característica importante da versão 2.x é a ausência de dependências. Isso pode não afetar muito o usuário comum, 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, um excesso de entradas e dependências externas pode aumentar significativamente o risco de incidentes de segurança. Com o lançamento da versão 2.x, a equipe de desenvolvimento do Web3.js decidiu aproveitar mais as funcionalidades nativas, reduzindo a introdução de dependências externas e Polyfills. Embora possa haver mudanças no futuro, atualmente a versão 2.x eliminou todas as dependências externas.

Pontos de Mudança Importantes

conectar

Na versão 1.x, a classe Connection oferece uma grande variedade de métodos. No entanto, a sua função principal continua a ser a criação de um emissor de solicitações configurando o endereço RPC, e depois enviando vários pedidos através dele.

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

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

const rpc = createSolanaRpc("");

Quando chamamos sendAndConfirmTransaction para enviar uma transação, ele inicia automaticamente uma solicitação HTTPS e estabelece 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 à 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-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, para os desenvolvedores de JavaScript que estão familiarizados com Promises, essa mudança não deve ser difícil de se adaptar.

Enviar transação

As classes Transaction e VersionedTransaction 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 existem mais, os métodos estáticos da 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 a forma pipe, comum na programação funcional. Abaixo está um exemplo de como implementar a funcionalidade de transferência do 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: quantidade })) );

const signature = await sendAndConfirmTransaction(rpc, transaction, [senderKeypair]);

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. 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 de HTTPS RPC e, em seguida, confirmadas através da assinatura 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 ampla no futuro, o que também exige uma maior estabilidade dos serviços dos fornecedores de RPC.

React suporta

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

Resumo

A publicação da versão 2.x de @solana/web3.js demonstra o compromisso da equipe Solana com o desenvolvimento e a melhoria contínuos. A nova versão oferece aos desenvolvedores uma forma eficiente, flexível e personalizável de interagir com a rede Solana, que promete 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

Ver original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Recompensa
  • 5
  • Compartilhar
Comentário
0/400
RugPullSurvivorvip
· 07-12 23:48
Mudou, mas não mudou nada... é melhor reescrever tudo.
Ver originalResponder0
Degen4Breakfastvip
· 07-12 23:48
Finalmente levantou-se.
Ver originalResponder0
digital_archaeologistvip
· 07-12 23:40
Gota dependência de boas avaliações
Ver originalResponder0
AirdropHunterWangvip
· 07-12 23:32
Só isso? As funcionalidades ainda são poucas, certo?
Ver originalResponder0
metaverse_hermitvip
· 07-12 23:31
Ah, esta migração realmente dá dor de cabeça.
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)