Lançamento impactante da versão 2.x do Solana Web3.js, o design modular melhora significativamente o desempenho.

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

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 mudanças significativas. Este artigo irá apresentar um resumo das suas principais alterações.

Embora a versão 2.x tenha sido apenas recentemente lançada e o uso ainda não esteja disseminado, muitos bibliotecas amplamente utilizadas ainda não foram migradas, mas conhecer essas mudanças com antecedência é, sem dúvida, benéfico para a preparação para futuras atualizações.

Web3 Novato: 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 era mais simples e direta de usar. A versão 1.x requer apenas um pacote @solana/web3.js que inclui todas as funcionalidades, encapsulando uma grande quantidade de operações comuns com base no design orientado a classes. Por exemplo, a classe Connection oferece dezenas de métodos, quase abrangendo todas as funcionalidades necessárias para os desenvolvedores.

No entanto, esse design também traz alguns problemas. Embora as funcionalidades que os desenvolvedores realmente utilizam possam ser apenas uma pequena parte, toda a base de código será baixada para o dispositivo do usuário, o que pode levar a tempos de carregamento mais longos.

Em comparação, a versão 2.x adotou uma abordagem de design modular. A equipe oficial dividiu o antigo repositório de código 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 em vez disso uma abordagem de função única, o que ajuda na otimização durante a construção do código JavaScript. O código não utilizado será removido e não será baixado para os dispositivos dos usuários.

De acordo com a documentação oficial, usar a nova versão do DApp geralmente pode resultar em uma otimização de cerca de 30% no tamanho do código. Se apenas algumas funções forem utilizadas, a proporção de otimização pode ser ainda maior.

Esta mudança impôs exigências mais altas à qualidade da documentação da equipe Solana. Como ajudar os desenvolvedores a localizar rapidamente as funcionalidades necessárias tornou-se uma questão chave. Atualmente, parece que a semântica dos nomes dos pacotes é boa, pois a partir do nome é possível entender em termos gerais a sua utilização, 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 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 integradas no runtime (como gerar pares de chaves), mas a documentação carece de descrições relevantes, o que pode deixar alguns desenvolvedores confusos.

Uma outra característica importante da versão 2.x é a zero dependência. Isso pode não ser importante para muitos usuários, mas, olhando para 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 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 Connection oferece uma grande quantidade de métodos. Mas a sua funcionalidade principal é criar um emissor de solicitações configurando o endereço de solicitação RPC e, em seguida, enviar vários pedidos através dele.

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

javascript import { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } from '@solana/web3.js';

const rpc = createSolanaRpcApi({ httpEndpoint: ' wsEndpoint: 'wss://api.mainnet-beta.solana.com', });

const { sendAndConfirmTransaction } = rpc;

Neste código, quando chamamos sendAndConfirmTransaction para enviar a transação, uma solicitação HTTPS é automaticamente iniciada, e uma conexão WSS é estabelecida para subscrever 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, que eram comuns 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 utiliza o API Web Crypto do JavaScript sempre que possível, utilizando a implementação nativa de Ed25519. Muitos métodos do API Web Crypto são assíncronos. No entanto, essa mudança não é difícil de aceitar, já que, com o final de 2023 se aproximando, 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, todos 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 da versão 1.x utilizando a função pipe:

javascript import { pipe } from '@solana/functional'; import { getTransferSolInstruction } from '@solana/system-program'; importar { addSignatureToTransaction, createTransaction, getBase58SignerFromPrivateKey, getSignatureFromSignedTransaction, getTransactionMessage, signTransaction, } from '@solana/transactions';

const transaction = pipe( createTransaction(), addSignatureToTransaction(getTransferSolInstruction({})), );

const signedTransaction = signTransaction(transaction, [signer]); const signature = getSignatureFromSignedTransaction(signedTransaction); const message = getTransactionMessage(signedTransaction);

const txid = await sendAndConfirmTransaction({ signedTransaction });

É evidente 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 é 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 personalização ficou mais forte.

As transações são iniciadas através de HTTPS RPC e, em seguida, confirmadas através da assinatura de WSS RPC. É possível perceber que a nova abordagem depende fortemente de WSS, e acredita-se que a aplicação de WSS se tornará cada vez mais ampla no futuro, o que realmente impõe requisitos mais elevados à estabilidade do serviço 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 hooks do React, incorporando funcionalidades como signIn.

Resumo

A publicação da versão 2.x do @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.

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

SOL3.54%
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
  • 8
  • Partilhar
Comentar
0/400
SchrodingerWalletvip
· 10h atrás
Deixa os pros primeiro entrarem nas armadilhas.
Ver originalResponder0
AirdropFatiguevip
· 20h atrás
Ah, a migração ou não não tem grande impacto.
Ver originalResponder0
DegenGamblervip
· 08-06 03:11
Finalmente subiu para 2.0~ só assistindo ao espetáculo
Ver originalResponder0
ser_we_are_ngmivip
· 08-06 01:10
Para que serve a atualização? O 1.x já está bom.
Ver originalResponder0
LayerHoppervip
· 08-06 01:10
Já devia ter sido atualizado.
Ver originalResponder0
PumpAnalystvip
· 08-06 00:55
Do ponto de vista técnico, esta atualização tem algo de estranho. Não recomendo que os idiotas atualizem apressadamente.
Ver originalResponder0
NotAFinancialAdvicevip
· 08-06 00:52
Esta atualização é apenas uma confusão.
Ver originalResponder0
BearMarketBardvip
· 08-06 00:42
Parece que vieram buscar a foice.
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)