Lançamento da versão 2.x do Solana Web3.js: Desagregação de funcionalidades e otimização de desempenho

Solana Web3.js 2.x versão: Desagregação de funcionalidades e otimização de desempenho

Solana Web3.js, como uma biblioteca JavaScript rica em recursos, lançou oficialmente a versão 2.x em novembro. Em comparação com a versão 1.x, a nova versão sofreu mudanças significativas. Este artigo irá resumir as principais alterações.

Embora a versão 2.x tenha acabado de ser lançada e seu uso ainda não esteja disseminado, muitos dos bibliotecas amplamente utilizadas ainda não foram migradas, entender essas mudanças será útil para futuros trabalhos de migração.

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

Comparação de Versões

A versão antiga é relativamente simples de usar, contendo apenas um pacote @solana/web3.js, com todas as funcionalidades concentradas nele. É baseada em um design orientado a classes, encapsulando uma grande quantidade de operações comuns. Por exemplo, a classe Connection oferece dezenas de métodos que cobrem quase todas as funcionalidades necessárias para os desenvolvedores. Além disso, o grande número de exemplos de código fornecidos no Solana cookbook também oferece conveniência aos 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 será descarregada 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 estratégia diferente. A equipe oficial dividiu o repositório de código original em vários módulos menores, como @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, entre outros. Ao mesmo tempo, abandonou a implementação baseada em classes, adotando mais a abordagem de funções únicas. Essa mudança facilita a otimização do código JavaScript durante a construção, com o código não utilizado sendo removido e não sendo baixado para os dispositivos dos usuários. De acordo com as estatísticas da documentação oficial, o uso da nova versão do DApp pode resultar em uma otimização de tamanho de cerca de 30%; se apenas algumas funcionalidades forem utilizadas, a proporção de otimização pode ser ainda maior.

Essa mudança impõe requisitos mais elevados à qualidade da documentação da equipe Solana, e como permitir que os desenvolvedores encontrem rapidamente as funcionalidades necessárias se tornou um assunto importante. Atualmente, os nomes dos pacotes têm uma boa semântica, permitindo que se compreenda aproximadamente suas finalidades apenas pelos nomes, o que, de certa forma, reduz a dificuldade de migração para os desenvolvedores.

Devido ao recente lançamento da nova versão, muitos projetos ainda não fizeram a migração. Existem relativamente poucos exemplos sobre a versão 2.x no Solana Cookbook. Além disso, a nova versão tende a usar funcionalidades incorporadas em tempo de execução (como a geração de pares de chaves), mas a documentação é insuficiente nesse aspecto, levando a possíveis confusões entre os desenvolvedores em algumas áreas.

Uma característica importante da versão 2.x é a ausência de dependências. Isso pode não ser tão 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 aumentariam significativamente a probabilidade de ocorrência 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 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. Sua principal função é criar um emissor de solicitações configurando o endereço da solicitação 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 uma transação, será iniciada automaticamente uma solicitação HTTPS e estabelecida uma conexão WSS 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 teve mudanças significativas. As classes Keypair e PublicKey, comumente usadas na versão 1.x, não existem mais e foram 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().

A nova generateKeyPair retorna uma Promise, pois 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 deve causar grandes problemas para os desenvolvedores JavaScript que estão familiarizados com Promises.

enviar transação

As classes Transaction e VersionedTransaction, comumente usadas na versão 1.x, não existem mais na versão 2.x.

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

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

Devido à ausência da classe, o Web3.js oferece uma forma de pipe comumente utilizada 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/functional"; import { getTransferSolInstruction } from "@solana/system"; importar { createSolanaRpc, sendTransaction, setTransactionFeePayer, criarTransação, appendTransactionInstruction, } de "@solana/web3.js";

const rpc = createSolanaRpc("");

const transaction = pipe( createTransaction(), setTransactionFeePayer(payer.address), appendTransactionInstruction( getTransferSolInstruction({ fromAddress: payer.address, toAddress: recipient, quantidade, }) ) );

const signature = await sendTransaction(rpc, transaction, [payer]);

Comparado à versão 1.x, a quantidade de código aumentou, mas 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. O novo método depende mais do WSS, o que também impõe requisitos mais elevados à estabilidade do serviço dos fornecedores de RPC.

React

O projeto @solana/web3.js também inclui uma biblioteca chamada @solana/react, que fornece alguns Hooks do React e possui funcionalidades integradas como signIn.

Resumo

A versão 2.x do @solana/web3.js reflete o compromisso da equipe Solana com o desenvolvimento e aprimoramento 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 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
  • 7
  • Partilhar
Comentar
0/400
BlindBoxVictimvip
· 07-10 20:02
Quando terminar o primeiro projeto, falamos... Estou cansado.
Ver originalResponder0
ForeverBuyingDipsvip
· 07-10 17:13
Agora é hora de trabalhar novamente.
Ver originalResponder0
airdrop_huntressvip
· 07-10 07:51
A atualização é rápida, mas será que este bug pode ser corrigido?
Ver originalResponder0
DefiEngineerJackvip
· 07-10 07:47
*na verdade* a modularização não é trivial... o aumento de desempenho parece promissor, mas mostra-me os benchmarks, ser
Ver originalResponder0
GateUser-75ee51e7vip
· 07-10 07:44
o irmão sol isso vai ser uma grande atualização novamente
Ver originalResponder0
SelfCustodyIssuesvip
· 07-10 07:41
Que otimização horrível, vou ter que reescrever o código.
Ver originalResponder0
GlueGuyvip
· 07-10 07:28
Ah, a atualização está boa. Vamos ver se há muitos buracos.
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)