Solana Web3.js 2.x versão: Atualização significativa de uma biblioteca JavaScript rica em funcionalidades
O Solana Web3.js, como uma poderosa biblioteca JavaScript, lançou oficialmente a versão 2.x em novembro. Esta nova versão apresenta alterações significativas em relação à 1.x, e este artigo fará um resumo das suas principais mudanças.
Embora a versão 2.x tenha sido lançada recentemente e a taxa de utilização ainda não tenha se tornado comum, muitas bibliotecas de alto uso ainda não fizeram a transição. No entanto, entender essas mudanças é muito útil para o trabalho de migração no futuro.
Comparação de Versões
A versão 1.x é relativamente simples de usar, basta importar o único pacote @solana/web3.js. É baseado em um design orientado a classes e encapsula 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. Embora os desenvolvedores geralmente usem apenas uma pequena parte das funcionalidades, toda a base de código é baixada para o dispositivo do usuário, o que pode resultar em tempos de carregamento mais longos.
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, etc. Ao mesmo tempo, abandonou a implementação baseada em classes, adotando em vez disso uma abordagem de função única. Essa mudança 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 o dispositivo do usuário.
De acordo com a documentação oficial, o uso da nova versão do DApp geralmente pode resultar em uma otimização de tamanho de 30%. Se apenas algumas funções forem utilizadas, a proporção de otimização pode ser ainda maior.
Essa mudança apresentou novos desafios para a redação de documentação da equipe Solana, como permitir que os desenvolvedores encontrem rapidamente as funcionalidades necessárias se tornou uma questão chave. Atualmente, parece que os nomes dos pacotes possuem boa semântica, permitindo entender aproximadamente suas finalidades apenas pelo nome, o que reduz, em certa medida, a dificuldade de migração para os desenvolvedores.
Devido ao recente lançamento da nova versão, muitos projetos ainda não foram migrados. Atualmente, há relativamente poucos exemplos da versão 2.x. Além disso, devido à tendência da nova versão de utilizar funcionalidades integradas em tempo de execução (como a geração de pares de chaves), a documentação carece de descrições relacionadas, o que pode causar confusão a alguns desenvolvedores.
Uma 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 @solana/web3.js 1.95.5 e 1.95.6, a redução de dependências externas pode diminuir consideravelmente 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 funcionalidades nativas, eliminando a introdução de dependências externas e Polyfills. Embora mudanças possam ocorrer 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 quantidade de métodos. Já na 2.x, foi adotada uma abordagem mais funcional para a implementação:
javascript
import { createSolanaRpcApi } from '@solana/web3.js';
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
Na versão 2.x, as classes Keypair e PublicKey, comumente utilizadas 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, ao invés do antigo Keypair.generate().
O novo generateKeyPair retorna uma Promise, pois a nova implementação utiliza o API Web Crypto do JavaScript sempre que possível, utilizando a implementação nativa de Ed25519. Muitos métodos do API Web Crypto são assíncronos.
enviar transação
Na versão 2.x, já não existem as classes Transaction e VersionedTransaction. Os métodos relacionados ao System Program também não estão mais disponíveis e precisam ser importados de outros locais. Por exemplo, o comando transfer 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á a implementação da funcionalidade de transferência da versão 1.x usando a função pipe:
javascript
import { pipe } from '@solana/functional';
import { getTransferSolInstruction } from '@solana/system-program';
import {
addSignatureToTransaction,
criarTransação,
sendAndConfirmTransaction,
} from '@solana/web3.js';
Em comparação com a versão 1.x, a quantidade de código aumentou, mas a personalização é mais forte. As transações são iniciadas através de HTTPS RPC e, em seguida, confirmadas através da subscrição de WSS RPC.
React suporta
O projeto @solana/web3.js também inclui uma biblioteca chamada @solana/react, que fornece alguns React Hooks, com funcionalidades integradas como signIn.
Resumo
A versão 2.x do @solana/web3.js demonstra a determinação da equipe Solana em continuar a melhorar. 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.
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.
13 gostos
Recompensa
13
6
Partilhar
Comentar
0/400
LiquidityHunter
· 2h atrás
Otimização do módulo... mas o gargalo de desempenho ainda está no limiar de 85%
Ver originalResponder0
OnchainFortuneTeller
· 20h atrás
Ver a aparência do BTC é como ver um enganador.
Ver originalResponder0
NoodlesOrTokens
· 20h atrás
Finalmente atualizado, enrolando.
Ver originalResponder0
SandwichTrader
· 20h atrás
Para que correr tão rápido? A estrutura ficou nervosa?
Ver originalResponder0
staking_gramps
· 20h atrás
Uau, eu gostaria de aprender um pouco.
Ver originalResponder0
AirdropHunter007
· 20h atrás
Outra vez, outra vez, outra vez a chegar tarde! Peço Airdrop...
Lançamento do Solana Web3.js 2.x: design modular otimiza desempenho e melhora segurança
Solana Web3.js 2.x versão: Atualização significativa de uma biblioteca JavaScript rica em funcionalidades
O Solana Web3.js, como uma poderosa biblioteca JavaScript, lançou oficialmente a versão 2.x em novembro. Esta nova versão apresenta alterações significativas em relação à 1.x, e este artigo fará um resumo das suas principais mudanças.
Embora a versão 2.x tenha sido lançada recentemente e a taxa de utilização ainda não tenha se tornado comum, muitas bibliotecas de alto uso ainda não fizeram a transição. No entanto, entender essas mudanças é muito útil para o trabalho de migração no futuro.
Comparação de Versões
A versão 1.x é relativamente simples de usar, basta importar o único pacote @solana/web3.js. É baseado em um design orientado a classes e encapsula 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. Embora os desenvolvedores geralmente usem apenas uma pequena parte das funcionalidades, toda a base de código é baixada para o dispositivo do usuário, o que pode resultar em tempos de carregamento mais longos.
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, etc. Ao mesmo tempo, abandonou a implementação baseada em classes, adotando em vez disso uma abordagem de função única. Essa mudança 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 o dispositivo do usuário.
De acordo com a documentação oficial, o uso da nova versão do DApp geralmente pode resultar em uma otimização de tamanho de 30%. Se apenas algumas funções forem utilizadas, a proporção de otimização pode ser ainda maior.
Essa mudança apresentou novos desafios para a redação de documentação da equipe Solana, como permitir que os desenvolvedores encontrem rapidamente as funcionalidades necessárias se tornou uma questão chave. Atualmente, parece que os nomes dos pacotes possuem boa semântica, permitindo entender aproximadamente suas finalidades apenas pelo nome, o que reduz, em certa medida, a dificuldade de migração para os desenvolvedores.
Devido ao recente lançamento da nova versão, muitos projetos ainda não foram migrados. Atualmente, há relativamente poucos exemplos da versão 2.x. Além disso, devido à tendência da nova versão de utilizar funcionalidades integradas em tempo de execução (como a geração de pares de chaves), a documentação carece de descrições relacionadas, o que pode causar confusão a alguns desenvolvedores.
Uma 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 @solana/web3.js 1.95.5 e 1.95.6, a redução de dependências externas pode diminuir consideravelmente 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 funcionalidades nativas, eliminando a introdução de dependências externas e Polyfills. Embora mudanças possam ocorrer 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 quantidade de métodos. Já na 2.x, foi adotada uma abordagem mais funcional para a implementação:
javascript import { createSolanaRpcApi } from '@solana/web3.js';
const rpc = createSolanaRpcApi({ httpEndpoint: ' wsEndpoint: 'wss://api.mainnet-beta.solana.com', });
// Enviar transações usando rpc const sendAndConfirmTransaction = rpc.sendAndConfirmTransaction(/* ... */);
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
Na versão 2.x, as classes Keypair e PublicKey, comumente utilizadas 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, ao invés do antigo Keypair.generate().
O novo generateKeyPair retorna uma Promise, pois a nova implementação utiliza o API Web Crypto do JavaScript sempre que possível, utilizando a implementação nativa de Ed25519. Muitos métodos do API Web Crypto são assíncronos.
enviar transação
Na versão 2.x, já não existem as classes Transaction e VersionedTransaction. Os métodos relacionados ao System Program também não estão mais disponíveis e precisam ser importados de outros locais. Por exemplo, o comando transfer 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á a implementação da funcionalidade de transferência da versão 1.x usando a função pipe:
javascript import { pipe } from '@solana/functional'; import { getTransferSolInstruction } from '@solana/system-program'; import { addSignatureToTransaction, criarTransação, sendAndConfirmTransaction, } from '@solana/web3.js';
const transferSol = pipe( // Criar transação (ix) => createTransaction({ instructions: [ix] }), // Adicionar assinatura (tx) => addSignatureToTransaction(tx, signer), // Enviar e confirmar transação (signedTx) => sendAndConfirmTransaction(rpc, signedTx) );
const signature = await transferSol( getTransferSolInstruction({ de: remetente, para: destinatário, montante, }) );
Em comparação com a versão 1.x, a quantidade de código aumentou, mas a personalização é mais forte. As transações são iniciadas através de HTTPS RPC e, em seguida, confirmadas através da subscrição de WSS RPC.
React suporta
O projeto @solana/web3.js também inclui uma biblioteca chamada @solana/react, que fornece alguns React Hooks, com funcionalidades integradas como signIn.
Resumo
A versão 2.x do @solana/web3.js demonstra a determinação da equipe Solana em continuar a melhorar. 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.