Solana Web3.js 2.x: um novo capítulo de programação funcional
A biblioteca Solana Web3.js foi oficialmente lançada na versão 2.x em novembro deste ano, apresentando mudanças significativas em comparação com a versão 1.x, tanto na estrutura quanto na forma de uso. Este artigo irá resumir essas principais mudanças, ajudando os desenvolvedores a se prepararem para uma possível migração no futuro.
Comparação de Versões
A utilização da versão 1.x é relativamente simples, sendo necessário apenas um pacote @solana/web3.js para abranger todas as funcionalidades. Esta versão baseia-se num design orientado a classes, como a classe Connection, e oferece dezenas de métodos que cobrem praticamente todas as funcionalidades necessárias para os desenvolvedores. No entanto, este design também traz alguns problemas, como o tamanho excessivo da biblioteca, já que mesmo que os desenvolvedores utilizem apenas algumas funcionalidades, toda a biblioteca acaba sendo descarregada para o dispositivo do usuário.
A versão 2.x adotou uma abordagem diferente. A equipe oficial dividiu o repositório de código em vários pequenos módulos, como @solana/accounts, @solana/codecs, @solana/rpc, etc. A nova versão abandonou a implementação baseada em classes, passando a adotar uma abordagem de funções únicas, o que é benéfico para a otimização na construção de código JavaScript. O código não utilizado será removido e não será baixado para os dispositivos dos usuários. Segundo estatísticas oficiais, os DApps que utilizam a nova versão geralmente podem obter uma otimização de tamanho de 30%; se apenas algumas funcionalidades forem utilizadas, a taxa de otimização pode ser ainda maior.
Esta mudança impôs requisitos mais elevados à qualidade da documentação da equipa Solana. Como ajudar os desenvolvedores a encontrar rapidamente as funcionalidades necessárias tornou-se uma questão chave. Atualmente, a nomenclatura dos pacotes apresenta uma boa semântica, permitindo inferir aproximadamente a sua utilização a partir dos nomes, o que, até certo ponto, reduz a dificuldade de migração para os desenvolvedores.
No entanto, uma vez que a versão 2.x 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. A nova versão tende a usar funções integradas em tempo de execução (como geração de pares de chaves), mas a documentação carece de descrição sobre isso, o que pode deixar alguns desenvolvedores confusos.
Outra característica importante da versão 2.x é a zero dependência. Isso pode não ser importante para muitos usuários, mas, com o ataque à cadeia de suprimentos que ocorreu no início de dezembro de 2023 nas versões @solana/web3.js 1.95.5 e 1.95.6, mais entradas e dependências externas aumentariam significativamente a probabilidade de eventos de segurança. Com o lançamento da versão 2.x, a equipe de desenvolvimento decidiu usar mais funcionalidades nativas, eliminando a introdução de dependências externas e Polyfills. Atualmente, a versão 2.x já eliminou todas as dependências externas.
Pontos de Mudança Importantes
conectar
Na versão 2.x, a implementação da conexão adotou uma abordagem mais funcional:
javascript
import { createSolanaRpc } from '@solana/web3.js';
const rpc = createSolanaRpc(');
Quando a função sendAndConfirmTransaction é chamada para enviar uma transação, uma solicitação HTTPS é automaticamente iniciada e uma conexão WSS é estabelecida para assinar o estado da transação, retornando o hash da transação após a confirmação.
par de chaves
Na versão 2.x, as classes Keypair e PublicKey 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().
A nova generateKeyPair retorna uma Promise, pois a nova implementação utiliza o máximo possível da API Web Crypto do JavaScript, utilizando a implementação nativa Ed25519. Muitos métodos da API Web Crypto são assíncronos.
enviar transação
A versão 2.x não utiliza mais as classes Transaction e VersionedTransaction. Os métodos relacionados ao System Program também não existem mais e precisam ser importados de outros lugares. Por exemplo, o comando transfer agora precisa chamar a função getTransferSolInstruction do @solana-program/system.
A nova versão oferece a forma pipe, comumente utilizada na programação funcional. Abaixo está um exemplo de como implementar a funcionalidade de transferência usando a função pipe:
javascript
import { pipe } from '@solana/functional';
import { getTransferSolInstruction } from '@solana/programs';
Comparado com a versão 1.x, a quantidade de código aumentou ligeiramente, mas oferece uma maior personalização.
React suporta
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 publicação da versão 2.x do @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 maneira eficiente, flexível e personalizável de interagir com a rede Solana, com a expectativa de impulsionar a adoção e o desenvolvimento da plataforma.
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.
11 Curtidas
Recompensa
11
8
Compartilhar
Comentário
0/400
JustHereForMemes
· 6h atrás
Este carro está a correr um pouco rápido, já não consigo acompanhar.
Ver originalResponder0
GweiObserver
· 07-06 13:21
Aumento de desempenho yyds
Ver originalResponder0
OPsychology
· 07-06 03:28
A máquina está a rodar rápido, quem é que não escreveu algumas linhas de código?
Ver originalResponder0
ShibaSunglasses
· 07-05 16:48
Finalmente otimizamos o velho KuKa que não estava a funcionar.
Ver originalResponder0
MetaverseHobo
· 07-05 16:46
Finalmente, insights valiosos chegaram.
Ver originalResponder0
GateUser-00be86fc
· 07-05 16:43
A atualização do web3.js realmente chegou
Ver originalResponder0
GameFiCritic
· 07-05 16:40
Uuu, não consigo acompanhar a velocidade de desenvolvimento do sol.
Ver originalResponder0
BlockchainDecoder
· 07-05 16:28
Do ponto de vista da implementação funcional, o aumento de desempenho deve estar na faixa de 15-20%.
Lançamento do Solana Web3.js 2.x: A reestruturação da programação funcional traz melhorias de desempenho
Solana Web3.js 2.x: um novo capítulo de programação funcional
A biblioteca Solana Web3.js foi oficialmente lançada na versão 2.x em novembro deste ano, apresentando mudanças significativas em comparação com a versão 1.x, tanto na estrutura quanto na forma de uso. Este artigo irá resumir essas principais mudanças, ajudando os desenvolvedores a se prepararem para uma possível migração no futuro.
Comparação de Versões
A utilização da versão 1.x é relativamente simples, sendo necessário apenas um pacote @solana/web3.js para abranger todas as funcionalidades. Esta versão baseia-se num design orientado a classes, como a classe Connection, e oferece dezenas de métodos que cobrem praticamente todas as funcionalidades necessárias para os desenvolvedores. No entanto, este design também traz alguns problemas, como o tamanho excessivo da biblioteca, já que mesmo que os desenvolvedores utilizem apenas algumas funcionalidades, toda a biblioteca acaba sendo descarregada para o dispositivo do usuário.
A versão 2.x adotou uma abordagem diferente. A equipe oficial dividiu o repositório de código em vários pequenos módulos, como @solana/accounts, @solana/codecs, @solana/rpc, etc. A nova versão abandonou a implementação baseada em classes, passando a adotar uma abordagem de funções únicas, o que é benéfico para a otimização na construção de código JavaScript. O código não utilizado será removido e não será baixado para os dispositivos dos usuários. Segundo estatísticas oficiais, os DApps que utilizam a nova versão geralmente podem obter uma otimização de tamanho de 30%; se apenas algumas funcionalidades forem utilizadas, a taxa de otimização pode ser ainda maior.
Esta mudança impôs requisitos mais elevados à qualidade da documentação da equipa Solana. Como ajudar os desenvolvedores a encontrar rapidamente as funcionalidades necessárias tornou-se uma questão chave. Atualmente, a nomenclatura dos pacotes apresenta uma boa semântica, permitindo inferir aproximadamente a sua utilização a partir dos nomes, o que, até certo ponto, reduz a dificuldade de migração para os desenvolvedores.
No entanto, uma vez que a versão 2.x 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. A nova versão tende a usar funções integradas em tempo de execução (como geração de pares de chaves), mas a documentação carece de descrição sobre isso, o que pode deixar alguns desenvolvedores confusos.
Outra característica importante da versão 2.x é a zero dependência. Isso pode não ser importante para muitos usuários, mas, com o ataque à cadeia de suprimentos que ocorreu no início de dezembro de 2023 nas versões @solana/web3.js 1.95.5 e 1.95.6, mais entradas e dependências externas aumentariam significativamente a probabilidade de eventos de segurança. Com o lançamento da versão 2.x, a equipe de desenvolvimento decidiu usar mais funcionalidades nativas, eliminando a introdução de dependências externas e Polyfills. Atualmente, a versão 2.x já eliminou todas as dependências externas.
Pontos de Mudança Importantes
conectar
Na versão 2.x, a implementação da conexão adotou uma abordagem mais funcional:
javascript import { createSolanaRpc } from '@solana/web3.js';
const rpc = createSolanaRpc(');
Quando a função sendAndConfirmTransaction é chamada para enviar uma transação, uma solicitação HTTPS é automaticamente iniciada e uma conexão WSS é estabelecida para assinar o estado da transação, retornando o hash da transação após a confirmação.
par de chaves
Na versão 2.x, as classes Keypair e PublicKey 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().
A nova generateKeyPair retorna uma Promise, pois a nova implementação utiliza o máximo possível da API Web Crypto do JavaScript, utilizando a implementação nativa Ed25519. Muitos métodos da API Web Crypto são assíncronos.
enviar transação
A versão 2.x não utiliza mais as classes Transaction e VersionedTransaction. Os métodos relacionados ao System Program também não existem mais e precisam ser importados de outros lugares. Por exemplo, o comando transfer agora precisa chamar a função getTransferSolInstruction do @solana-program/system.
A nova versão oferece a forma pipe, comumente utilizada na programação funcional. Abaixo está um exemplo de como implementar a funcionalidade de transferência usando a função pipe:
javascript import { pipe } from '@solana/functional'; import { getTransferSolInstruction } from '@solana/programs';
const transaction = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ de: senderPublicKey, para: recipientPublicKey, amount: lamports, })) );
const signature = await sendAndConfirmTransaction(rpc, transaction, signers);
Comparado com a versão 1.x, a quantidade de código aumentou ligeiramente, mas oferece uma maior personalização.
React suporta
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 publicação da versão 2.x do @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 maneira eficiente, flexível e personalizável de interagir com a rede Solana, com a expectativa de impulsionar a adoção e o desenvolvimento da plataforma.