Lançamento do Solana Web3.js 2.x: Atualização significativa de programação funcional e otimização de desempenho

Solana Web3.js 2.x versão: um novo capítulo 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 1.x, a nova versão trouxe mudanças significativas, e este artigo irá resumir suas principais atualizações.

Embora a versão 2.x tenha sido recentemente lançada e a taxa de utilização ainda não seja alta, muitas bibliotecas amplamente usadas ainda não foram migradas, mas entender essas mudanças será muito benéfico para futuras atualizações de projetos.

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

Comparação de Versões

A forma de uso da versão 1.x é relativamente simples. Ela contém apenas um pacote principal: @solana/web3.js, que integra todas as funcionalidades. Esta versão é baseada em design de classes e encapsula 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.

No entanto, esse design também traz alguns problemas. Embora as funcionalidades que os desenvolvedores realmente utilizam possam ser apenas uma pequena parte, todo o código da biblioteca será baixado para o dispositivo do usuário, o que pode levar a um aumento no tempo de carregamento.

A versão 2.x adotou uma abordagem diferente. 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. A nova versão abandonou a implementação baseada em classes, passando a adotar uma abordagem de função única, o que favorece a otimização na construção do código JavaScript. O código não utilizado será removido e, na prática, não será baixado para os dispositivos dos usuários. De acordo com a documentação oficial, DApps que utilizam a nova versão geralmente conseguem uma otimização de volume de 30%; se forem utilizados apenas alguns recursos, a proporção de otimização pode ser ainda maior.

Essa mudança impôs exigências mais altas à qualidade da documentação da equipe Solana. Como ajudar os desenvolvedores a encontrar rapidamente as funcionalidades necessárias tornou-se uma questão chave. Atualmente, parece que a semântica dos nomes dos pacotes é boa, pois é possível entender seus propósitos apenas pelos nomes, o que, em certa medida, reduz a dificuldade de migração para os desenvolvedores.

Devido ao recente lançamento, muitos projetos ainda não realizaram a migração. Há poucos exemplos sobre a versão 2.x no Solana Cookbook. Além disso, a nova versão tende a utilizar funcionalidades integradas de tempo de execução (como a geração de pares de chaves), mas a documentação é insuficiente na descrição dessas partes, levando a confusões em algumas áreas para os desenvolvedores.

Uma outra 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 de 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, a redução de entradas e dependências externas pode diminuir 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 já eliminou todas as dependências externas.

Pontos de Alteração Importantes

conectar

Na versão 1.x, a classe Connection fornece uma grande quantidade de métodos. Mas a sua funcionalidade principal é criar um emissor de solicitações configurando o endereço da solicitação RPC e, em seguida, usar esse emissor para enviar várias solicitações.

A versão 2.x adotou um método mais funcional:

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

const rpc = createSolanaRpc(');

// Enviar transação usando rpc const signature = await rpc.sendAndConfirmTransaction(transaction);

Nesta nova versão, quando chamamos sendAndConfirmTransaction para enviar uma transação, ele automaticamente inicia uma solicitação HTTPS e estabelece 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

Houve mudanças significativas na parte relacionada à chave pública e à chave privada. 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, 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 um 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, essa mudança não é inaceitável; em 2024, no final do ano, os desenvolvedores de 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, cuja relação já deixou muitos desenvolvedores confusos.

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 outros locais.

Por exemplo, o comando transfer agora precisa chamar a função getTransferSolInstruction do @solana-program/system.

Devido à não disponibilização de classes, o Web3.js oferece uma forma de 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'; import { createSolanaRpc } from '@solana/web3.js';

const rpc = createSolanaRpc(');

const transaction = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ de: senderPublicKey, para: recipientPublicKey, amount: transferAmount, })) );

const signature = await rpc.sendAndConfirmTransaction(transaction);

Pode-se ver que as transações não são mais iniciadas através da Connection, mas sim geradas por uma função específica que definimos no RPC Provider, e então essa função é chamada para iniciar a transação. Comparado 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 do RPC HTTPS e, em seguida, confirmadas através da assinatura do RPC WSS. Pode-se sentir que a nova abordagem depende muito do WSS, e acredita-se que a aplicação do WSS será cada vez mais ampla no futuro, o que também impõe maiores exigências à estabilidade dos serviços dos fornecedores de RPC.

React suporta

Curiosamente, 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 reflete plenamente o compromisso da equipe Solana com o desenvolvimento e a melhoria contínuos. Ela oferece aos desenvolvedores uma maneira eficiente, flexível e personalizável de interagir com a rede Solana, ajudando a promover a adoção e o desenvolvimento da plataforma.

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

SOL1.41%
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
  • Republicar
  • Partilhar
Comentar
0/400
CommunityJanitorvip
· 08-10 07:13
Por que está a iterar tão devagar?
Ver originalResponder0
ProposalManiacvip
· 08-09 22:16
Há progresso, mas ainda não é radical o suficiente.
Ver originalResponder0
GhostChainLoyalistvip
· 08-09 07:05
2.0 ainda está lento. Quando é que vamos aprender a ficar de olho nas atualizações de versão o dia todo?
Ver originalResponder0
PanicSeller69vip
· 08-07 19:20
Qual é a utilidade da atualização? Não é preciso trocar de biblioteca?
Ver originalResponder0
MemeCoinSavantvip
· 08-07 07:47
baseado af, solana provando significância estatística na evolução do web3 tbh
Ver originalResponder0
FarmHoppervip
· 08-07 07:46
Ainda está a usar 1.x, tsk tsk.
Ver originalResponder0
ThreeHornBlastsvip
· 08-07 07:45
O partido desenvolvedor não espera mais.
Ver originalResponder0
ZkProofPuddingvip
· 08-07 07:43
Muito bom~ Atualizei seis meses depois.
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)