Lanzamiento de Solana Web3.js 2.x: diseño modular que mejora el rendimiento y la seguridad

Solana Web3.js 2.x versión: funcionalidades más potentes, rendimiento más optimizado

Solana Web3.js, como una biblioteca de JavaScript rica en funciones, lanzó oficialmente la versión 2.x en noviembre de este año. Esta nueva versión presenta cambios significativos en comparación con la versión 1.x, y este artículo resumirá sus principales cambios.

Aunque la versión 2.x acaba de ser lanzada y su uso aún no es alto, muchas bibliotecas ampliamente utilizadas aún no han cambiado, pero comprender estos cambios ayudará en el trabajo de migración futura.

Serie para principiantes de Web3: actualiza ahora @solana/web3.js 2.x para habilitar la programación funcional

Comparación de versiones

La versión 1.x es bastante simple de usar, solo tiene un paquete: @solana/web3.js, todas las funcionalidades están concentradas en él. Está basado en un diseño de clases y encapsula una gran cantidad de operaciones comunes. Por ejemplo, la clase Connection ofrece decenas de métodos, cubriendo casi todas las funcionalidades necesarias para los desarrolladores.

Sin embargo, este diseño también trae algunos problemas. Aunque las funciones que realmente utilizan los desarrolladores pueden representar solo una pequeña parte, toda la biblioteca de código se descargará en el dispositivo del usuario, y debido a la gran cantidad de código, esto puede provocar un cierto tiempo de carga.

En comparación, la versión 2.x divide la antigua base de código en varios módulos pequeños, como @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, etc. Al mismo tiempo, la nueva versión abandona la implementación basada en clases y adopta más un enfoque de funciones individuales. Este diseño favorece la optimización durante la construcción del código JavaScript, ya que el código no utilizado se eliminará y no se descargará en el dispositivo del usuario. Las estadísticas de la documentación oficial muestran que las DApps que utilizan la nueva versión generalmente pueden obtener una optimización del tamaño del 30%; si solo se utilizan unas pocas funciones, la proporción de optimización puede ser aún mayor.

Este cambio presenta nuevos desafíos para la redacción de la documentación del equipo de Solana, ya que hacer que los desarrolladores encuentren rápidamente las funcionalidades necesarias se ha convertido en un problema importante. Sin embargo, a primera vista, los nombres de los diferentes paquetes tienen una buena semántica, lo que permite comprender de manera general su propósito, lo que reduce en cierta medida la dificultad de migración para los desarrolladores.

Debido a que la nueva versión se lanzó hace poco, muchos proyectos aún no han realizado la migración. También hay pocos ejemplos sobre la versión 2.x en el Solana Cookbook. Además, la nueva versión tiende a utilizar funciones integradas en tiempo de ejecución (como la generación de pares de claves), pero la documentación sobre estas partes es insuficiente, lo que puede confundir a los desarrolladores.

Una característica importante de la versión 2.x es la ausencia de dependencias. Esto puede no ser tan relevante para muchos usuarios, pero a partir del ataque a la cadena de suministro que ocurrió a principios de diciembre de este año en las versiones 1.95.5 y 1.95.6 de @solana/web3.js, se ha demostrado que más entradas y dependencias externas aumentan significativamente la probabilidad de ocurrencia de eventos de seguridad. Con el lanzamiento de la versión 2.x, el equipo de desarrollo de Web3.js decidió utilizar más funciones nativas y eliminar la introducción de dependencias externas y Polyfills. Aunque puede haber cambios en el futuro, actualmente la versión 2.x ha eliminado todas las dependencias externas.

Puntos de cambio importantes

conexión

En la versión 1.x, Connection ofrece una gran cantidad de métodos. Sin embargo, su función principal sigue siendo crear un emisor de solicitudes mediante la configuración de la dirección del RPC, y luego enviar varios tipos de solicitudes a través de él.

La versión 2.x adopta un enfoque más funcional para su implementación:

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

const rpc = createSolanaRpc("");

Al llamar a sendAndConfirmTransaction para enviar una transacción, se iniciará automáticamente una solicitud HTTPS y se establecerá una conexión WSS para suscribirse al estado de la transacción, devolviendo el hash de la transacción una vez confirmada.

par de claves

Ha habido cambios significativos en la parte relacionada con las claves públicas y privadas. Las clases Keypair y PublicKey, comúnmente usadas en la versión 1.x, ya no existen y han sido reemplazadas por algunas funciones.

Por ejemplo, ahora se puede usar await generateKeyPair() para generar un par de claves, mientras que antes se generaba directamente a través de Keypair.generate().

Es importante señalar que el nuevo generateKeyPair devuelve una Promesa, en lugar de devolver directamente el par de claves. Esto se debe a que la nueva implementación utiliza en la medida de lo posible la API Web Crypto de JavaScript, utilizando la implementación nativa de Ed25519. Muchos de los métodos de la API Web Crypto son asíncronos. Sin embargo, este cambio no es inaceptable; hoy, a finales de 2024, los desarrolladores de JavaScript ya están muy familiarizados con las Promesas.

enviar transacción

Las clases Transaction y VersionedTransaction de la versión 1.x ya no existen en la versión 2.x.

Los métodos relacionados con el System Program que se proporcionaban en la versión anterior ya no existen, por lo que todos los métodos estáticos en la clase SystemProgram deben ser importados desde otros lugares.

Por ejemplo, el comando transfer ahora necesita llamar a la función getTransferSolInstruction en @solana-program/system.

Debido a que ya no se ofrecen clases, Web3.js proporciona una forma de pipe comúnmente utilizada en la programación funcional. A continuación se muestra un ejemplo de cómo implementar la funcionalidad de transferencia de la versión 1.x utilizando la función 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, }) ) );

Se puede ver que las transacciones ya no se inician a través de Connection, sino que se genera una función única a través de nuestro RPC Provider definido, y luego se llama a esa función para iniciar la transacción. En comparación con la versión 1.x, la cantidad de código ha aumentado, pero la personalización es más fuerte.

Las transacciones se inician a través de HTTPS RPC y luego se confirman los resultados de la transacción mediante la suscripción a WSS RPC. Se puede sentir que el nuevo enfoque depende en gran medida de WSS, y creo que en el futuro la aplicación de WSS será cada vez más amplia, lo que realmente plantea mayores exigencias sobre la estabilidad del servicio de los proveedores de RPC.

React

Cabe mencionar que el proyecto @solana/web3.js también incluye una biblioteca llamada @solana/react, que proporciona algunos hooks de React e incorpora funciones como signIn.

Resumen

La publicación de la versión 2.x de @solana/web3.js refleja plenamente el compromiso del equipo de Solana con el desarrollo y la mejora continuos. Proporciona a los desarrolladores una forma eficiente, flexible y personalizable de interactuar con la red de Solana, lo que ayuda a impulsar la adopción y el desarrollo de la plataforma.

Serie para principiantes de Web3: Actualiza ahora @solana/web3.js 2.x para habilitar la programación funcional

Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
  • Recompensa
  • 10
  • Compartir
Comentar
0/400
failed_dev_successful_apevip
· hace21h
2.0 huele bien, finalmente he esperado por esto
Ver originalesResponder0
GateUser-44a00d6cvip
· 07-20 05:07
¡Me voy, me voy! Finalmente he esperado la actualización.
Ver originalesResponder0
digital_archaeologistvip
· 07-20 03:59
¡Aquí estamos de nuevo! No está mal, ¿eh?
Ver originalesResponder0
nft_widowvip
· 07-19 21:58
¿Esta vez vienen a afectar mi mentalidad de nuevo?
Ver originalesResponder0
BrokenDAOvip
· 07-17 17:49
La actualización es genial, pero ¿quién se atreve a ser el primero en saltar al pozo?
Ver originalesResponder0
MetaverseVagabondvip
· 07-17 17:47
Ya está, ahora escribir código es más cómodo.
Ver originalesResponder0
NonFungibleDegenvip
· 07-17 17:42
alcista af en solana tbh... v2 va a enviarlo ser
Ver originalesResponder0
GasFeeNightmarevip
· 07-17 17:39
Siguiendo el gas de sol en la medianoche... ¿Cuándo podrá bajar a 1gwei?
Ver originalesResponder0
consensus_failurevip
· 07-17 17:37
TPS que no se pueden bloquear
Ver originalesResponder0
BlockImpostervip
· 07-17 17:25
on-chain Hacker
Ver originalesResponder0
Ver más
  • Anclado
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)