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

Solana Web3.js versión 2.x: actualización importante de una biblioteca de JavaScript rica en funciones

Solana Web3.js, como una poderosa biblioteca de JavaScript, lanzó oficialmente la versión 2.x en noviembre de este año. Esta actualización trajo cambios significativos, y vamos a resumir brevemente las principales novedades.

Aunque la versión 2.x acaba de lanzarse y su uso aún no se ha generalizado, muchas bibliotecas ampliamente utilizadas no se han migrado. Sin embargo, conocer estos cambios con antelación es muy beneficioso para la preparación de futuras actualizaciones.

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

Comparación de versiones

No se puede negar que la versión anterior es más simple y directa de usar. La versión 1.x solo incluye un paquete @solana/web3.js, donde se concentran todas las funcionalidades. Está basada en un diseño orientado a clases, encapsulando 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. Además, el libro de recetas de Solana también proporciona un rico código de ejemplo, facilitando a los desarrolladores encontrar las funcionalidades que necesitan.

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

En comparación, la versión 2.x adopta un enfoque de diseño modular. El equipo oficial ha dividido la antigua base de código en múltiples módulos pequeños, como @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, entre otros. Al mismo tiempo, la nueva versión ha abandonado la implementación basada en clases y utiliza más un enfoque de funciones individuales. Este diseño es muy útil para la optimización durante la construcción del código JavaScript, ya que el código no utilizado será eliminado y no se descargará en el dispositivo del usuario. Según las estadísticas de la documentación oficial, las DApps que utilizan la nueva versión pueden obtener una optimización de volumen del 30%; si solo se utilizan unas pocas funciones, la proporción de optimización podría ser aún mayor.

Este cambio también ha planteado mayores requisitos sobre la calidad de la documentación del equipo de Solana, y cómo permitir que los desarrolladores encuentren rápidamente las funciones que necesitan se ha convertido en un problema importante. Aparentemente, al menos los nombres de los paquetes tienen una buena semántica, lo que permite entender aproximadamente su uso desde el nombre. Esto puede reducir, en cierta medida, la dificultad de migración para los desarrolladores.

Por supuesto, 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, dado que la nueva versión tiende a utilizar funciones integradas en tiempo de ejecución (como la generación de pares de claves), la documentación carece de descripciones adecuadas en estas secciones, lo que puede resultar confuso para los desarrolladores.

Una característica importante de la versión 2.x es la ausencia de dependencias. Esto puede no ser importante para muchos usuarios, pero a raíz 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, una mayor cantidad de entradas y dependencias externas puede aumentar significativamente la probabilidad de que ocurran 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, eliminando la introducción de dependencias externas y Polyfills. Aunque puede haber cambios en el futuro, al menos en este momento la versión 2.x ha eliminado todas las dependencias externas.

Puntos de cambio importantes

conectar

Como se mencionó anteriormente, la versión 1.x proporciona una gran cantidad de métodos a través de Connection. Sin embargo, su función principal sigue siendo crear un emisor de solicitudes configurando la dirección de solicitud RPC y luego enviar varias solicitudes a través de él.

En 2.x, se adoptó un enfoque más funcional para implementar:

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

const rpc = createSolanaRpc("");

Cuando llamamos a "sendAndConfirmTransaction" para enviar una transacción, se inicia automáticamente una solicitud HTTPS y se establece una conexión WSS, suscribiéndose al estado de la transacción. Después de que la transacción sea confirmada, se devuelve el hash de la transacción.

par de claves

La parte relacionada con las claves públicas y privadas también ha cambiado significativamente. Las clases Keypair y PublicKey, que se usaban comúnmente 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, mientras que antes se generaba el par de claves directamente a través de "Keypair.generate()".

Puede que hayas notado que el nuevo generateKeyPair devuelve una Promesa, en lugar de devolver directamente el par de claves como antes. 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, este cambio no es inaceptable, en el inminente 2024, los desarrolladores de JavaScript ya están muy familiarizados con las Promesas.

enviar transacción

Los usuarios de 1.x deberían estar muy familiarizados con las clases "Transaction" y "VersionedTransaction". Al principio, al conocer Solana, la relación entre ellas puede resultar confusa.

En la versión 2.x, estas dos clases tampoco existen.

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 de la clase "SystemProgram" deben importarse desde otros lugares.

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

Dado que ya no se proporciona class, Web3.js ofrece la forma "pipe" comúnmente utilizada en la programación funcional. A continuación se muestra un ejemplo de cómo implementar la funcionalidad de transferencia originalmente de 1.x a través de la función pipe:

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

const transaction = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ de: senderPublicKey, a: recipientPublicKey, cantidad: lamports, })), setComputeUnitLimit(200_000), addSignature(senderSignature) );

const signature = await sendAndConfirmTransaction(rpc, transaction);

Se puede observar que las transacciones ya no se inician a través de Connection, sino que se generan a través de un proveedor RPC definido por nosotros, creando una función única que luego se llama para iniciar la transacción. En comparación con la versión 1.x, la cantidad de código ha aumentado, pero la ventaja es que ahora es más personalizable.

Las transacciones se inician a través de HTTPS RPC y luego se confirman a través de la suscripción a WSS RPC. Se puede sentir que este nuevo método 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 a su vez plantea mayores exigencias sobre la estabilidad del servicio de los proveedores de RPC.

React

Curiosamente, el proyecto @solana/web3.js también incluye una biblioteca llamada @solana/react, que ofrece algunos React Hooks con funciones integradas como signIn.

Resumen

La publicación de la versión 2.x de @solana/web3.js refleja el compromiso del equipo de Solana con el desarrollo y la mejora continua. Proporciona a los desarrolladores una manera 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 de principiantes de Web3: Actualiza ahora @solana/web3.js 2.x para habilitar la programación funcional

SOL4.07%
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
  • 6
  • Compartir
Comentar
0/400
RetiredMinervip
· 08-01 03:21
Ya tengo una edad y todavía estoy experimentando con nuevas versiones
Ver originalesResponder0
IntrovertMetaversevip
· 07-31 08:40
La actualización es rápida, pero nadie la usa.
Ver originalesResponder0
LeverageAddictvip
· 07-29 23:23
Muerte del viejo equipo del proyecto
Ver originalesResponder0
OnchainHolmesvip
· 07-29 23:22
Finalmente he esperado, me voy, me voy.
Ver originalesResponder0
TokenVelocityTraumavip
· 07-29 23:21
Actualizar y todo eso es demasiado complicado, adiós.
Ver originalesResponder0
ProofOfNothingvip
· 07-29 23:13
¡Sopla! Se ha actualizado, ¡puedes probarlo!
Ver originalesResponder0
  • 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)