Actualización importante de la versión 2.x de Solana Web3.js: el diseño modular mejora el rendimiento

robot
Generación de resúmenes en curso

Actualización importante de Solana Web3.js versión 2.x: programación funcional y diseño modular

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

Aunque la versión 2.x se ha lanzado recientemente y su tasa de uso aún no es alta, muchas bibliotecas populares aún no han hecho la transición, pero entender estos cambios es muy útil para el trabajo de migración en el futuro.

Comparación de versiones

La versión 1.x es relativamente simple de usar. Solo tiene un paquete: @solana/web3.js, donde se concentran todas las funcionalidades. El diseño basado en clases encapsula una gran cantidad de operaciones comunes, como el clase Connection que ofrece decenas de métodos, cubriendo casi todas las funciones necesarias para los desarrolladores.

Sin embargo, este diseño también trae algunos problemas: incluso si los desarrolladores solo utilizan una pequeña parte de las funciones, toda la biblioteca de código se descargará en el dispositivo del usuario, y dado que la cantidad de código de la biblioteca es bastante grande, esto puede llevar un tiempo considerable.

La versión 2.x adoptó una estrategia diferente. El equipo oficial dividió el código original en varios módulos pequeños, como @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, etc. Al mismo tiempo, abandonó la implementación basada en clases, adoptando más funciones individuales. Este diseño favorece la optimización del código JavaScript durante la construcción, el código no utilizado se elimina y no se descarga en el dispositivo del usuario. Según estadísticas oficiales, las DApps que utilizan la nueva versión suelen 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.

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

Este cambio plantea mayores exigencias en la calidad de la documentación del equipo de Solana, y cómo permitir que los desarrolladores encuentren rápidamente las funciones necesarias se ha convertido en un problema clave. Actualmente, parece que la nomenclatura de los paquetes tiene una buena semántica, y desde sus nombres se puede entender en gran medida sus propósitos, lo que reduce en cierta medida la dificultad de migrar para los desarrolladores.

Sin embargo, debido a que se lanzó hace poco, muchos proyectos aún no han migrado. También hay relativamente 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.

Otra característica importante de la versión 2.x es la ausencia de dependencias. Esta característica puede no ser tan importante para muchos usuarios, pero teniendo en cuenta el ataque a la cadena de suministro que sufrieron las versiones 1.95.5 y 1.95.6 de @solana/web3.js a principios de diciembre de 2023, reducir las entradas y dependencias externas puede disminuir significativamente la probabilidad de que ocurran incidentes 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 las dependencias externas y la introducción de 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, la clase Connection ofrece una gran cantidad de métodos. En la 2.x, se adoptó un enfoque más funcional para su implementación:

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 que se confirme.

par de claves

La parte relacionada con la clave pública y la clave privada también ha cambiado mucho. Las clases Keypair y PublicKey, que eran comunes en la versión 1.x, ya no existen y han sido reemplazadas por algunas funciones.

Por ejemplo, se puede usar "await generateKeyPair()" para generar un par de claves, en lugar de "Keypair.generate()".

Es importante señalar que el nuevo generateKeyPair devuelve una Promesa en lugar de devolver directamente un par de claves. Esto se debe a que la nueva implementación aprovecha al máximo 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, para los desarrolladores de JavaScript familiarizados con las Promesas, este cambio no es difícil de adaptar.

enviar transacción

En la versión 2.x ya no existen las clases "Transaction" y "VersionedTransaction".

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

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

Debido a que ya no se proporciona la clase, Web3.js ofrece una forma "pipe" comúnmente utilizada en la programación funcional. Se puede implementar la funcionalidad de transferencia original de 1.x a través de la función pipe.

Se puede ver que las transacciones ya no se inician a través de Connection, sino que se generan mediante una función única definida por el RPC Provider, 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. Este nuevo método depende en gran medida de WSS, y se espera que en el futuro su aplicación sea aún más amplia, lo que también plantea mayores exigencias en cuanto a 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 y cuenta con funciones integradas como signIn.

Resumen

La publicación de la versión 2.x de @solana/web3.js demuestra 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 en Web3: ahora actualiza @solana/web3.js 2.x para iniciar la programación funcional

SOL3.33%
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
  • 4
  • Republicar
  • Compartir
Comentar
0/400
OfflineValidatorvip
· hace11h
js ha actualizado de nuevo, ¿quién más está usando 1.x?
Ver originalesResponder0
MoonRocketmanvip
· hace11h
Optimización de la órbita completada, actualización del motor exitosa, preparación para el segundo encendido To the moon.
Ver originalesResponder0
MissedAirdropAgainvip
· hace11h
Sube, apúrate a elevar, no sirve de nada, primero calienta el Airdrop 2.0
Ver originalesResponder0
WalletDivorcervip
· hace11h
Aún esperando el abrazo de 1.x, no quiero modificar el código.
Ver originalesResponder0
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)