Solana Web3.js versão 2.x: nova experiência de programação funcional
O 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 anterior, a nova versão sofreu alterações significativas. Este artigo irá resumir as principais mudanças.
Embora a versão 2.x tenha sido lançada recentemente e o seu uso ainda não esteja disseminado, muitas bibliotecas amplamente utilizadas ainda não foram atualizadas, mas entender essas mudanças será muito benéfico para o trabalho de migração no futuro.
Comparação de Versões
É inegável que a versão antiga é mais simples e direta de usar. A versão 1.x contém 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, cobrindo quase todas as funcionalidades necessárias para os desenvolvedores.
No entanto, esse design também traz alguns problemas. Embora as funcionalidades realmente usadas pelos desenvolvedores possam representar apenas uma pequena parte, toda a biblioteca de código será baixada para o dispositivo do usuário. Devido ao grande volume de código da biblioteca, isso pode levar algum tempo.
Em comparação, a versão 2.x divide o código original 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 mais a abordagem de funções individuais, o que é muito útil para a otimização da 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. De acordo com a documentação oficial, as DApps que utilizam a nova versão conseguem basicamente uma otimização de 30% no tamanho; se apenas algumas funções forem utilizadas, a proporção de otimização pode ser ainda maior.
Isso impôs uma exigência maior na 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, parece que os nomes dos pacotes têm uma boa semântica, permitindo entender aproximadamente seu propósito apenas pelo nome, o que, em certa medida, diminui a dificuldade de migração para os desenvolvedores.
Devido ao seu recente lançamento, muitos projetos ainda não migraram. Existem relativamente poucos exemplos sobre a versão 2.x no Solana Cookbook. Além disso, a nova versão tende a utilizar funcionalidades embutidas no runtime (como a geração de pares de chaves), mas a documentação carece de descrições sobre essas funcionalidades, o que pode causar confusão em alguns aspectos para os desenvolvedores.
Outra característica importante da versão 2.x é a ausência de dependências. Isso pode não ser muito importante para muitos usuários, mas, considerando o ataque à cadeia de suprimentos que ocorreu no início de dezembro deste ano nas versões 1.95.5 e 1.95.6 de @solana/web3.js, 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 utilizar mais funcionalidades nativas, eliminando a introdução de dependências externas e Polyfills. Mudanças podem ocorrer no futuro, mas pelo menos no momento, 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. No entanto, a sua funcionalidade principal é criar um emissor de requisições configurando o endereço RPC e, em seguida, enviar vários tipos de requisições através dele.
A versão 2.x adotou uma abordagem mais funcional para implementar esta funcionalidade. Por exemplo, ao chamar sendAndConfirmTransaction 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
A parte relacionada à chave pública e à chave privada também sofreu mudanças significativas. As classes Keypair e PublicKey, comuns na versão 1.x, não existem mais, sendo substituídas por algumas funções.
Por exemplo, agora 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, pois a nova implementação aproveitou ao máximo a API Web Crypto do JavaScript, utilizando a implementação nativa Ed25519. Muitos métodos da API Web Crypto são assíncronos. No entanto, essa mudança não é inaceitável; em 2024, os desenvolvedores JavaScript já estão muito familiarizados com Promises.
Enviar transação
As classes Transaction e VersionedTransaction que os usuários da versão 1.x estão familiarizados não existem mais na versão 2.x.
Os métodos relacionados ao System Program que estavam disponíveis na versão anterior também não existem mais, portanto, 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. Os desenvolvedores podem usar a função pipe para implementar a funcionalidade de transferência originalmente presente na versão 1.x.
É importante notar 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 é então chamada para iniciar a transação. Em relação à versão 1.x, a quantidade de código aumentou, mas a personalização se tornou mais forte.
As transações são iniciadas através de HTTPS RPC e, em seguida, confirmadas através da assinatura de WSS RPC. O novo método depende muito do WSS, e acredita-se que no futuro a aplicação do WSS se tornará cada vez mais ampla, o que também 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 o compromisso da equipa Solana com o desenvolvimento e a melhoria contínuos. Ela oferece aos desenvolvedores uma forma eficiente, flexível e personalizável de interagir com a rede Solana, ajudando a promover a adoção e o desenvolvimento da plataforma.
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.
16 gostos
Recompensa
16
4
Partilhar
Comentar
0/400
MemeCoinSavant
· 07-15 21:50
de acordo com os meus modelos estatísticos, esta mudança de paradigma é baseada af ngl
Ver originalResponder0
MEVHunterZhang
· 07-15 21:45
Finalmente chegou a reestruturação, valeu a espera.
Ver originalResponder0
OnlyOnMainnet
· 07-15 21:39
o chefe sol é rápido demais, não é?
Ver originalResponder0
LiquidityNinja
· 07-15 21:35
Confiável~ finalmente usei a programação funcional
Lançamento da versão 2.x do Solana Web3.js: a reestruturação da programação funcional traz otimizações significativas
Solana Web3.js versão 2.x: nova experiência de programação funcional
O 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 anterior, a nova versão sofreu alterações significativas. Este artigo irá resumir as principais mudanças.
Embora a versão 2.x tenha sido lançada recentemente e o seu uso ainda não esteja disseminado, muitas bibliotecas amplamente utilizadas ainda não foram atualizadas, mas entender essas mudanças será muito benéfico para o trabalho de migração no futuro.
Comparação de Versões
É inegável que a versão antiga é mais simples e direta de usar. A versão 1.x contém 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, cobrindo quase todas as funcionalidades necessárias para os desenvolvedores.
No entanto, esse design também traz alguns problemas. Embora as funcionalidades realmente usadas pelos desenvolvedores possam representar apenas uma pequena parte, toda a biblioteca de código será baixada para o dispositivo do usuário. Devido ao grande volume de código da biblioteca, isso pode levar algum tempo.
Em comparação, a versão 2.x divide o código original 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 mais a abordagem de funções individuais, o que é muito útil para a otimização da 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. De acordo com a documentação oficial, as DApps que utilizam a nova versão conseguem basicamente uma otimização de 30% no tamanho; se apenas algumas funções forem utilizadas, a proporção de otimização pode ser ainda maior.
Isso impôs uma exigência maior na 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, parece que os nomes dos pacotes têm uma boa semântica, permitindo entender aproximadamente seu propósito apenas pelo nome, o que, em certa medida, diminui a dificuldade de migração para os desenvolvedores.
Devido ao seu recente lançamento, muitos projetos ainda não migraram. Existem relativamente poucos exemplos sobre a versão 2.x no Solana Cookbook. Além disso, a nova versão tende a utilizar funcionalidades embutidas no runtime (como a geração de pares de chaves), mas a documentação carece de descrições sobre essas funcionalidades, o que pode causar confusão em alguns aspectos para os desenvolvedores.
Outra característica importante da versão 2.x é a ausência de dependências. Isso pode não ser muito importante para muitos usuários, mas, considerando o ataque à cadeia de suprimentos que ocorreu no início de dezembro deste ano nas versões 1.95.5 e 1.95.6 de @solana/web3.js, 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 utilizar mais funcionalidades nativas, eliminando a introdução de dependências externas e Polyfills. Mudanças podem ocorrer no futuro, mas pelo menos no momento, 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. No entanto, a sua funcionalidade principal é criar um emissor de requisições configurando o endereço RPC e, em seguida, enviar vários tipos de requisições através dele.
A versão 2.x adotou uma abordagem mais funcional para implementar esta funcionalidade. Por exemplo, ao chamar sendAndConfirmTransaction 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
A parte relacionada à chave pública e à chave privada também sofreu mudanças significativas. As classes Keypair e PublicKey, comuns na versão 1.x, não existem mais, sendo substituídas por algumas funções.
Por exemplo, agora 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, pois a nova implementação aproveitou ao máximo a API Web Crypto do JavaScript, utilizando a implementação nativa Ed25519. Muitos métodos da API Web Crypto são assíncronos. No entanto, essa mudança não é inaceitável; em 2024, os desenvolvedores JavaScript já estão muito familiarizados com Promises.
Enviar transação
As classes Transaction e VersionedTransaction que os usuários da versão 1.x estão familiarizados não existem mais na versão 2.x.
Os métodos relacionados ao System Program que estavam disponíveis na versão anterior também não existem mais, portanto, 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. Os desenvolvedores podem usar a função pipe para implementar a funcionalidade de transferência originalmente presente na versão 1.x.
É importante notar 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 é então chamada para iniciar a transação. Em relação à versão 1.x, a quantidade de código aumentou, mas a personalização se tornou mais forte.
As transações são iniciadas através de HTTPS RPC e, em seguida, confirmadas através da assinatura de WSS RPC. O novo método depende muito do WSS, e acredita-se que no futuro a aplicação do WSS se tornará cada vez mais ampla, o que também 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 o compromisso da equipa Solana com o desenvolvimento e a melhoria contínuos. Ela oferece aos desenvolvedores uma forma eficiente, flexível e personalizável de interagir com a rede Solana, ajudando a promover a adoção e o desenvolvimento da plataforma.