Versión 2.x de Solana Web3.js: una importante actualización en diseño modular y programación funcional

robot
Generación de resúmenes en curso

Solana Web3.js 2.x versión: una nueva experiencia de programación funcional

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

Aunque la versión 2.x acaba de ser lanzada y su uso aún no se ha generalizado, muchas bibliotecas ampliamente utilizadas aún no se han migrado. Sin embargo, conocer estos cambios con anticipación será de gran ayuda para el trabajo de migración en el futuro.

Serie para principiantes de Web3: 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 de clases, encapsulando una gran cantidad de operaciones comunes. Por ejemplo, la clase Connection ofrece decenas de métodos que cubren casi todas las funcionalidades necesarias para los desarrolladores. Además, el rico código de ejemplo en el libro de cocina de Solana también proporciona una gran comodidad a los desarrolladores.

Sin embargo, este diseño también trae algunos problemas: aunque las funciones que los desarrolladores realmente utilizan 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 en la biblioteca, esto puede resultar en un cierto tiempo de carga.

En comparación, la versión 2.x adoptó un enfoque de diseño modular. El equipo oficial dividió la base de código original 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 abandonó la implementación basada en clases y optó por un enfoque de funciones individuales, lo que ayuda enormemente a la optimización durante la construcción del código JavaScript. El código no utilizado será eliminado y no se descargará en los dispositivos de los usuarios. Según las estadísticas de la documentación oficial, las DApps que utilizan la nueva versión suelen obtener una optimización de volumen del 30%; si solo se utilizan unas pocas funciones, el porcentaje de optimización puede ser aún mayor.

Este cambio también ha planteado mayores exigencias sobre la calidad de la documentación del equipo de Solana. Cómo permitir que los desarrolladores localicen 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, lo que permite inferir su uso a partir de los nombres, lo que en cierto modo reduce la dificultad de migración para los desarrolladores.

Sin embargo, dado que la nueva versión se lanzó hace poco, muchos proyectos aún no han completado la migración. Los ejemplos sobre la versión 2.x en Solana Cookbook también son relativamente limitados. Además, la nueva versión tiende a utilizar funciones integradas en tiempo de ejecución (como generar pares de claves), pero la documentación no describe estas partes con suficiente detalle, lo que puede confundir a los desarrolladores.

Otra característica importante de la versión 2.x es la ausencia de dependencias. Esto puede no afectar mucho a los usuarios comunes, pero a la luz del ataque a la cadena de suministro que ocurrió a principios de diciembre de este año en las versiones @solana/web3.js 1.95.5 y 1.95.6, un exceso de entradas externas y dependencias puede aumentar significativamente el riesgo de eventos de seguridad. Con el lanzamiento de la versión 2.x, el equipo de desarrollo de Web3.js decidió aprovechar más las funciones nativas y reducir 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

conectar

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

La versión 2.x utiliza un enfoque más funcional para implementar esta función:

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

const rpc = createSolanaRpc("");

Cuando llamamos a sendAndConfirmTransaction para enviar una transacción, automáticamente inicia una solicitud HTTPS y establece una conexión WSS para suscribirse al estado de la transacción, devolviendo el hash de la transacción una vez que se confirma.

clave privada

También ha habido cambios significativos en la parte relacionada con la clave pública y la clave privada. 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 la anterior Keypair.generate().

Es importante destacar 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 tanto como sea posible la API Web Crypto de JavaScript, empleando la implementación nativa de Ed25519. Muchos métodos de la API Web Crypto son asíncronos. Sin embargo, para los desarrolladores de JavaScript familiarizados con Promesas, este cambio no debería ser difícil de adaptar.

enviar transacción

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

Los métodos relacionados con el System Program que se proporcionaban en versiones anteriores ya no existen, y los métodos estáticos de la clase SystemProgram deben ser importados desde otros lugares.

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

Debido a que ya no se proporcionan clases, Web3.js ofrece 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/system-program";

const transaction = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ fromPubkey: sender, toPubkey: recipient, lamports: cantidad })) );

const signature = await sendAndConfirmTransaction(rpc, transaction, [senderKeypair]);

Se puede ver que las transacciones ya no se inician a través de la conexión, sino a través de un proveedor RPC que definimos para generar una función específica y luego llamar 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 ahora más fuerte.

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

React soporte

Cabe destacar que el proyecto @solana/web3.js también incluye una biblioteca llamada @solana/react, que proporciona algunos hooks de React y 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 continua. La nueva versión ofrece a los desarrolladores una forma eficiente, flexible y personalizable de interactuar con la red de Solana, lo que promete impulsar la adopción y el desarrollo de la plataforma.

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

Ver originales
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Recompensa
  • 6
  • Compartir
Comentar
0/400
RugPullSurvivorvip
· 07-12 23:48
Cambiarlo es lo mismo que no cambiar nada... es mejor reescribirlo todo.
Ver originalesResponder0
Degen4Breakfastvip
· 07-12 23:48
Finalmente se ha levantado.
Ver originalesResponder0
digital_archaeologistvip
· 07-12 23:40
Soltar dependencia de buenas críticas
Ver originalesResponder0
AirdropHunterWangvip
· 07-12 23:32
¿Eso es todo? ¿No faltan funciones?
Ver originalesResponder0
metaverse_hermitvip
· 07-12 23:31
Esta migración realmente me está dando dolor de cabeza.
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)