Lançamento do Solana Web3.js 2.x: Design modular melhora desempenho e segurança

Solana Web3.js 2.x versão: funcionalidades mais poderosas, desempenho mais otimizado

A Solana Web3.js, como uma biblioteca JavaScript rica em funcionalidades, lançou oficialmente a versão 2.x em novembro deste ano. Esta nova versão apresenta mudanças significativas em relação à versão 1.x, e este artigo irá resumir as principais alterações.

Embora a versão 2.x tenha sido lançada recentemente e o uso ainda não seja elevado, muitos bibliotecas amplamente utilizadas ainda não foram migradas, mas entender essas mudanças ajudará no trabalho de migração futuro.

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

Comparação de versões

A versão 1.x é bastante simples de usar, possui apenas um pacote: @solana/web3.js, todas as funcionalidades estão concentradas nele. É baseado em um design orientado a classes, encapsulando uma grande quantidade de operações comuns. Por exemplo, a classe Connection oferece dezenas de métodos, abrangendo quase todas as funcionalidades necessárias para os desenvolvedores.

No entanto, esse design também traz alguns problemas. Apesar de que as funcionalidades que os desenvolvedores realmente utilizam podem representar apenas uma pequena parte, toda a base de código é baixada para o dispositivo do usuário, e devido ao grande volume de código, isso pode resultar em um tempo de carregamento considerável.

Em comparação, a versão 2.x divide o antigo repositório de código 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 um formato de função única. Este design favorece a otimização durante a construção do código JavaScript, onde o código não utilizado será removido e não será baixado para os dispositivos dos usuários. As estatísticas da documentação oficial mostram que os DApps que utilizam a nova versão geralmente conseguem uma otimização de tamanho de 30%; se apenas algumas funcionalidades forem utilizadas, a proporção de otimização pode ser ainda maior.

Esta mudança trouxe novos desafios para a documentação da equipe Solana, sendo uma questão importante como permitir que os desenvolvedores encontrem rapidamente as funcionalidades necessárias. No entanto, parece que a nomeação dos pacotes possui uma boa semântica, permitindo entender em grande parte suas utilizações apenas pelos nomes, o que, em certa medida, reduz a dificuldade de migração para os desenvolvedores.

Devido à recente publicação da nova versão, muitos projetos ainda não migraram. Há também 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 na descrição dessas partes, o que pode deixar os desenvolvedores confusos.

Uma outra característica importante da versão 2.x é a ausência de dependências. Isso pode não ser muito significativo 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 aumentam 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 recursos nativos, 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 Mudança Importantes

conectar

Na versão 1.x, a Connection oferece uma grande quantidade de métodos. No entanto, sua principal função ainda é criar um emissor de solicitações configurando o endereço de solicitação RPC e, em seguida, enviar vários pedidos através dele.

A versão 2.x adotou uma abordagem mais funcional para a implementação:

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

const rpc = createSolanaRpc("");

Ao chamar sendAndConfirmTransaction para enviar uma transação, será automaticamente feita 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

As partes relacionadas com a chave pública e a chave privada também sofreram mudanças significativas. As classes Keypair e PublicKey, comuns na versão 1.x, deixaram de existir, sendo substituídas por algumas funções.

Por exemplo, agora pode-se usar await generateKeyPair() para gerar um par de chaves, enquanto antes era feito diretamente através de Keypair.generate().

É importante notar que o novo generateKeyPair retorna uma Promise, em vez de retornar diretamente o 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 de Ed25519. Muitos métodos da API Web Crypto são assíncronos. No entanto, essa mudança não é inaceitável, pois hoje, em 2024, os desenvolvedores JavaScript já estão muito familiarizados com Promises.

enviar transação

As classes Transaction e VersionedTransaction da 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, portanto, todos os métodos estáticos da classe SystemProgram precisam ser importados de outro lugar.

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

Devido à não disponibilização de classes, o Web3.js oferece uma forma de programação funcional comum chamada pipe. Abaixo está um exemplo de como implementar a funcionalidade de transferência originalmente do 1.x usando a função pipe:

javascript import { pipe } from "@solana/web3.js"; import { getTransferSolInstruction } from "@solana-program/system";

const transaction = pipe( createTransaction({ version: 0 }), addInstruction( getTransferSolInstruction({ fromPublicKey, toPublicKey, lamports, }) ) );

Pode-se ver que as transações não são mais iniciadas através da Connection, mas sim geradas por uma função única definida pelo nosso RPC Provider, e então essa funçã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 RPC HTTPS e, em seguida, confirmadas através da subscrição de RPC WSS. É possível sentir que este novo método depende muito do WSS, e acredita-se que a aplicação do WSS se tornará cada vez mais ampla no futuro, o que realmente coloca maiores exigências na 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 Hooks do React, com funcionalidades incorporadas 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 impulsionar a adoção e o crescimento da plataforma.

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

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
  • 6
  • Partilhar
Comentar
0/400
BrokenDAOvip
· 12h atrás
A atualização é muito fixe, mas quem se atreve a dar o primeiro salto?
Ver originalResponder0
MetaverseVagabondvip
· 12h atrás
Agora está estável, escrever código ficou confortável.
Ver originalResponder0
NonFungibleDegenvip
· 12h atrás
em alta af em solana tbh... v2 vai enviar isso ser
Ver originalResponder0
GasFeeNightmarevip
· 12h atrás
Ainda estou a observar a tendência do gás do sol à meia-noite... Quando é que vai baixar para 1gwei?
Ver originalResponder0
consensus_failurevip
· 12h atrás
TPS que não podem ser bloqueados
Ver originalResponder0
BlockImpostervip
· 12h atrás
na cadeia Hacker
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)