Atualização significativa da versão 2.x do Solana Web3.js: programação funcional e design modular
A Solana Web3.js, como uma biblioteca JavaScript rica em funcionalidades, lançou oficialmente a versão 2.x em novembro. A nova versão apresenta mudanças significativas em relação à 1.x, e este artigo irá resumir suas principais atualizações.
Embora a versão 2.x tenha sido lançada recentemente e a taxa de utilização ainda não seja alta, muitos bibliotecas populares ainda não mudaram, mas compreender essas mudanças é muito útil para o trabalho de migração futura.
Comparação de Versões
A versão 1.x é relativamente simples de usar. Ela possui apenas um pacote: @solana/web3.js, todas as funcionalidades estão concentradas nele. O design baseado em classes encapsula uma grande quantidade de operações comuns, como a classe Connection que oferece dezenas de métodos, cobrindo praticamente todas as funcionalidades necessárias para os desenvolvedores.
No entanto, esse design também traz alguns problemas: mesmo que os desenvolvedores usem apenas uma pequena parte das funcionalidades, toda a biblioteca de código será baixada 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 pequenos módulos, 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 funções individuais. Este design favorece a otimização durante a construção de código JavaScript, onde o código não utilizado é removido e não é baixado para o dispositivo do usuário. De acordo com as estatísticas oficiais, o uso da nova versão do DApp geralmente resulta em uma otimização de tamanho de 30%; se apenas algumas funcionalidades forem utilizadas, a proporção de otimização pode ser ainda maior.
Essa mudança impôs requisitos mais elevados à qualidade da documentação da equipe Solana, e como permitir que os desenvolvedores encontrem rapidamente as funcionalidades necessárias tornou-se uma questão crucial. Atualmente, parece que os nomes dos pacotes possuem uma boa semântica, permitindo entender a sua utilidade apenas pelo nome, o que, em certa medida, reduz a dificuldade de migração para os desenvolvedores.
No entanto, devido ao seu lançamento recente, muitos projetos ainda não realizaram a migração. Existem também relativamente poucos exemplos sobre a versão 2.x no Solana Cookbook. Além disso, a nova versão tende a utilizar funcionalidades integradas em tempo de execução (como a geração de pares de chaves), mas a documentação é insuficiente nessas partes, o que pode deixar os desenvolvedores confusos.
Outra característica importante da versão 2.x é a ausência de dependências. Esta característica pode não ser muito relevante para muitos usuários, mas tendo em conta 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, a redução de entradas e dependências externas pode diminuir 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 funções nativas, eliminando a introdução de dependências externas e Polyfills. Embora possam 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 classe Connection oferece uma grande variedade de métodos. Já na 2.x, foi adotada uma abordagem mais funcional:
Ao chamar "sendAndConfirmTransaction" para enviar uma transação, será automaticamente feita uma solicitação HTTPS e estabelecida 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 grandes mudanças. As classes Keypair e PublicKey, 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 um par de chaves. Isso ocorre porque a nova implementação aproveita ao máximo a API de Criptografia Web do JavaScript, utilizando a implementação nativa de Ed25519. Muitos métodos da API de Criptografia Web são assíncronos. No entanto, para desenvolvedores JavaScript familiarizados com Promises, essa mudança não é difícil de se adaptar.
enviar transação
Na versão 2.x, as classes "Transaction" e "VersionedTransaction" não existem mais.
Os métodos relacionados ao System Program fornecidos na versão anterior também não existem mais, e os métodos estáticos da classe "SystemProgram" precisam ser importados de outro lugar.
Por exemplo, o comando "transfer" precisa chamar a função "getTransferSolInstruction" no "@solana-program/system".
Devido à não disponibilização da classe, o Web3.js oferece a forma "pipe" comum na programação funcional. É possível implementar a funcionalidade de transferência original da versão 1.x através da função pipe.
É visível que as transações não são mais iniciadas através da Connection, mas sim geradas por uma função única definida pelo RPC Provider, que é chamada para iniciar a transação. Comparado 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 do RPC HTTPS e, em seguida, confirmadas através da assinatura do RPC WSS. O novo método depende muito do WSS, acreditamos que no futuro a aplicação do WSS será ainda mais ampla, o que também exige uma maior estabilidade dos serviços dos fornecedores de RPC.
React
Vale a pena mencionar que o projeto @solana/web3.js também inclui uma biblioteca chamada @solana/react, que oferece alguns React Hooks 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 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.
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
11 Curtidas
Recompensa
11
4
Repostar
Compartilhar
Comentário
0/400
OfflineValidator
· 15h atrás
js foi atualizado novamente. Quem ainda está usando 1.x?
Ver originalResponder0
MoonRocketman
· 15h atrás
Otimização da trajetória concluída, atualização do motor bem-sucedida, preparando para o segundo lançamento até à lua.
Ver originalResponder0
MissedAirdropAgain
· 15h atrás
Suba, apressado para subir, primeiro faça um pré-aquecimento para o Airdrop 2.0
Ver originalResponder0
WalletDivorcer
· 15h atrás
Ainda à espera do abraço do 1.x, não quero mudar o código.
Atualização significativa da versão 2.x do Solana Web3.js: design modular melhora o desempenho
Atualização significativa da versão 2.x do Solana Web3.js: programação funcional e design modular
A Solana Web3.js, como uma biblioteca JavaScript rica em funcionalidades, lançou oficialmente a versão 2.x em novembro. A nova versão apresenta mudanças significativas em relação à 1.x, e este artigo irá resumir suas principais atualizações.
Embora a versão 2.x tenha sido lançada recentemente e a taxa de utilização ainda não seja alta, muitos bibliotecas populares ainda não mudaram, mas compreender essas mudanças é muito útil para o trabalho de migração futura.
Comparação de Versões
A versão 1.x é relativamente simples de usar. Ela possui apenas um pacote: @solana/web3.js, todas as funcionalidades estão concentradas nele. O design baseado em classes encapsula uma grande quantidade de operações comuns, como a classe Connection que oferece dezenas de métodos, cobrindo praticamente todas as funcionalidades necessárias para os desenvolvedores.
No entanto, esse design também traz alguns problemas: mesmo que os desenvolvedores usem apenas uma pequena parte das funcionalidades, toda a biblioteca de código será baixada 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 pequenos módulos, 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 funções individuais. Este design favorece a otimização durante a construção de código JavaScript, onde o código não utilizado é removido e não é baixado para o dispositivo do usuário. De acordo com as estatísticas oficiais, o uso da nova versão do DApp geralmente resulta em uma otimização de tamanho de 30%; se apenas algumas funcionalidades forem utilizadas, a proporção de otimização pode ser ainda maior.
Essa mudança impôs requisitos mais elevados à qualidade da documentação da equipe Solana, e como permitir que os desenvolvedores encontrem rapidamente as funcionalidades necessárias tornou-se uma questão crucial. Atualmente, parece que os nomes dos pacotes possuem uma boa semântica, permitindo entender a sua utilidade apenas pelo nome, o que, em certa medida, reduz a dificuldade de migração para os desenvolvedores.
No entanto, devido ao seu lançamento recente, muitos projetos ainda não realizaram a migração. Existem também relativamente poucos exemplos sobre a versão 2.x no Solana Cookbook. Além disso, a nova versão tende a utilizar funcionalidades integradas em tempo de execução (como a geração de pares de chaves), mas a documentação é insuficiente nessas partes, o que pode deixar os desenvolvedores confusos.
Outra característica importante da versão 2.x é a ausência de dependências. Esta característica pode não ser muito relevante para muitos usuários, mas tendo em conta 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, a redução de entradas e dependências externas pode diminuir 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 funções nativas, eliminando a introdução de dependências externas e Polyfills. Embora possam 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 classe Connection oferece uma grande variedade de métodos. Já na 2.x, foi adotada uma abordagem mais funcional:
Ao chamar "sendAndConfirmTransaction" para enviar uma transação, será automaticamente feita uma solicitação HTTPS e estabelecida 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 grandes mudanças. As classes Keypair e PublicKey, 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 um par de chaves. Isso ocorre porque a nova implementação aproveita ao máximo a API de Criptografia Web do JavaScript, utilizando a implementação nativa de Ed25519. Muitos métodos da API de Criptografia Web são assíncronos. No entanto, para desenvolvedores JavaScript familiarizados com Promises, essa mudança não é difícil de se adaptar.
enviar transação
Na versão 2.x, as classes "Transaction" e "VersionedTransaction" não existem mais.
Os métodos relacionados ao System Program fornecidos na versão anterior também não existem mais, e os métodos estáticos da classe "SystemProgram" precisam ser importados de outro lugar.
Por exemplo, o comando "transfer" precisa chamar a função "getTransferSolInstruction" no "@solana-program/system".
Devido à não disponibilização da classe, o Web3.js oferece a forma "pipe" comum na programação funcional. É possível implementar a funcionalidade de transferência original da versão 1.x através da função pipe.
É visível que as transações não são mais iniciadas através da Connection, mas sim geradas por uma função única definida pelo RPC Provider, que é chamada para iniciar a transação. Comparado 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 do RPC HTTPS e, em seguida, confirmadas através da assinatura do RPC WSS. O novo método depende muito do WSS, acreditamos que no futuro a aplicação do WSS será ainda mais ampla, o que também exige uma maior estabilidade dos serviços dos fornecedores de RPC.
React
Vale a pena mencionar que o projeto @solana/web3.js também inclui uma biblioteca chamada @solana/react, que oferece alguns React Hooks 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 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.