Solana Web3.js versión 2.x: nueva experiencia de programación funcional
Solana Web3.js, como una biblioteca de JavaScript rica en funcionalidades, lanzó oficialmente la versión 2.x este noviembre. En comparación con la versión 1.x anterior, la nueva versión ha tenido cambios significativos. Este artículo resumirá sus principales cambios.
A pesar de que la versión 2.x se acaba de lanzar y su uso aún no se ha generalizado, muchas bibliotecas ampliamente utilizadas aún no han realizado la transición, pero comprender estos cambios será de gran ayuda para el trabajo de migración futuro.
Comparación de versiones
No se puede negar que la versión anterior es más simple y directa en su uso. La versión 1.x solo contiene un paquete @solana/web3.js, donde se concentran todas las funcionalidades. Está basada en un diseño orientado a clases y encapsula una gran cantidad de operaciones comunes. Por ejemplo, la clase Connection proporciona decenas de métodos que cubren casi todas las funciones necesarias para los desarrolladores.
Sin embargo, este diseño también trae algunos problemas. A pesar de que 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 en la biblioteca, esto puede llevar un tiempo considerable.
En comparación, la versión 2.x descompone el antiguo repositorio de código en múltiples 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 el enfoque de funciones individuales, lo que es muy útil para 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 generalmente pueden obtener una optimización del tamaño del 30%; si solo se utilizan unas pocas funciones, la tasa de optimización puede ser aún mayor.
Esto 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 convierte en un tema importante. Actualmente, parece que los nombres de los paquetes tienen una buena semántica, lo que permite comprender su uso a partir del nombre, lo que reduce en cierta medida la dificultad de migración para los desarrolladores.
Debido a que fue lanzado hace poco, muchos proyectos aún no han realizado la migración. También hay relativamente pocos ejemplos sobre la versión 2.x en el Solana Cookbook. Además, la nueva versión tiende a usar funciones integradas en tiempo de ejecución (como la generación de pares de claves), pero la documentación carece de descripciones sobre estas funciones, lo que puede causar confusión en algunos aspectos para los desarrolladores.
Una característica importante de la versión 2.x es la ausencia de dependencias. Esto puede no ser muy relevante 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 podría aumentar considerablemente 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. Puede haber cambios en el futuro, pero al menos en este momento, 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. Sin embargo, su función principal es crear un emisor de solicitudes configurando 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 implementar esta función. Por ejemplo, al llamar a sendAndConfirmTransaction para enviar una transacción, se inicia automáticamente una solicitud HTTPS y se establece una conexión WSS para suscribirse al estado de la transacción, devolviendo el hash de la transacción una vez que ha sido confirmada.
par de claves
La parte relacionada con la clave pública y la clave privada también ha cambiado significativamente. 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, ahora se puede usar await generateKeyPair() para generar un par de claves, en lugar del anterior Keypair.generate(). Cabe destacar que el nuevo generateKeyPair devuelve una Promise, ya que la nueva implementación aprovecha tanto como sea posible la API de Web Crypto de JavaScript, utilizando la implementación nativa de Ed25519. Muchos métodos de la API de Web Crypto son asíncronos. Sin embargo, este cambio no es inaceptable, hoy, en el final de 2024, los desarrolladores de JavaScript ya están muy familiarizados con las Promises.
Enviar transacción
Las clases Transaction y VersionedTransaction, familiares para los usuarios 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 ofrecían en la versión anterior ya no existen, por lo que los métodos estáticos en la clase SystemProgram deben ser importados desde otro lugar. Por ejemplo, la instrucción transfer necesita llamar a la función getTransferSolInstruction en @solana-program/system.
Debido a que ya no se proporciona class, Web3.js ofrece una forma pipe comúnmente utilizada en la programación funcional. Los desarrolladores pueden utilizar la función pipe para implementar la funcionalidad de transferencia que originalmente estaba en 1.x.
Es importante señalar que las transacciones ya no se inician a través de Connection, sino que se generan a través de un proveedor RPC definido, 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 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. Este nuevo método depende en gran medida de WSS, y se cree que su aplicación se volverá cada vez más amplia en el futuro, lo que también plantea mayores exigencias en 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 refleja el compromiso del equipo de Solana con el desarrollo y la mejora continua. 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.
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.
15 me gusta
Recompensa
15
4
Compartir
Comentar
0/400
MemeCoinSavant
· 07-15 21:50
según mis modelos estadísticos, este cambio de paradigma se basa en af ngl
Ver originalesResponder0
MEVHunterZhang
· 07-15 21:45
Finalmente llegó la reestructuración, tanto tiempo esperando.
Ver originalesResponder0
OnlyOnMainnet
· 07-15 21:39
El jefe de sol se está moviendo demasiado rápido, ¿no?
Publicación de la versión 2.x de Solana Web3.js: la reestructuración de programación funcional trae optimizaciones significativas
Solana Web3.js versión 2.x: nueva experiencia de programación funcional
Solana Web3.js, como una biblioteca de JavaScript rica en funcionalidades, lanzó oficialmente la versión 2.x este noviembre. En comparación con la versión 1.x anterior, la nueva versión ha tenido cambios significativos. Este artículo resumirá sus principales cambios.
A pesar de que la versión 2.x se acaba de lanzar y su uso aún no se ha generalizado, muchas bibliotecas ampliamente utilizadas aún no han realizado la transición, pero comprender estos cambios será de gran ayuda para el trabajo de migración futuro.
Comparación de versiones
No se puede negar que la versión anterior es más simple y directa en su uso. La versión 1.x solo contiene un paquete @solana/web3.js, donde se concentran todas las funcionalidades. Está basada en un diseño orientado a clases y encapsula una gran cantidad de operaciones comunes. Por ejemplo, la clase Connection proporciona decenas de métodos que cubren casi todas las funciones necesarias para los desarrolladores.
Sin embargo, este diseño también trae algunos problemas. A pesar de que 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 en la biblioteca, esto puede llevar un tiempo considerable.
En comparación, la versión 2.x descompone el antiguo repositorio de código en múltiples 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 el enfoque de funciones individuales, lo que es muy útil para 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 generalmente pueden obtener una optimización del tamaño del 30%; si solo se utilizan unas pocas funciones, la tasa de optimización puede ser aún mayor.
Esto 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 convierte en un tema importante. Actualmente, parece que los nombres de los paquetes tienen una buena semántica, lo que permite comprender su uso a partir del nombre, lo que reduce en cierta medida la dificultad de migración para los desarrolladores.
Debido a que fue lanzado hace poco, muchos proyectos aún no han realizado la migración. También hay relativamente pocos ejemplos sobre la versión 2.x en el Solana Cookbook. Además, la nueva versión tiende a usar funciones integradas en tiempo de ejecución (como la generación de pares de claves), pero la documentación carece de descripciones sobre estas funciones, lo que puede causar confusión en algunos aspectos para los desarrolladores.
Una característica importante de la versión 2.x es la ausencia de dependencias. Esto puede no ser muy relevante 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 podría aumentar considerablemente 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. Puede haber cambios en el futuro, pero al menos en este momento, 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. Sin embargo, su función principal es crear un emisor de solicitudes configurando 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 implementar esta función. Por ejemplo, al llamar a sendAndConfirmTransaction para enviar una transacción, se inicia automáticamente una solicitud HTTPS y se establece una conexión WSS para suscribirse al estado de la transacción, devolviendo el hash de la transacción una vez que ha sido confirmada.
par de claves
La parte relacionada con la clave pública y la clave privada también ha cambiado significativamente. 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, ahora se puede usar await generateKeyPair() para generar un par de claves, en lugar del anterior Keypair.generate(). Cabe destacar que el nuevo generateKeyPair devuelve una Promise, ya que la nueva implementación aprovecha tanto como sea posible la API de Web Crypto de JavaScript, utilizando la implementación nativa de Ed25519. Muchos métodos de la API de Web Crypto son asíncronos. Sin embargo, este cambio no es inaceptable, hoy, en el final de 2024, los desarrolladores de JavaScript ya están muy familiarizados con las Promises.
Enviar transacción
Las clases Transaction y VersionedTransaction, familiares para los usuarios 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 ofrecían en la versión anterior ya no existen, por lo que los métodos estáticos en la clase SystemProgram deben ser importados desde otro lugar. Por ejemplo, la instrucción transfer necesita llamar a la función getTransferSolInstruction en @solana-program/system.
Debido a que ya no se proporciona class, Web3.js ofrece una forma pipe comúnmente utilizada en la programación funcional. Los desarrolladores pueden utilizar la función pipe para implementar la funcionalidad de transferencia que originalmente estaba en 1.x.
Es importante señalar que las transacciones ya no se inician a través de Connection, sino que se generan a través de un proveedor RPC definido, 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 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. Este nuevo método depende en gran medida de WSS, y se cree que su aplicación se volverá cada vez más amplia en el futuro, lo que también plantea mayores exigencias en 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 refleja el compromiso del equipo de Solana con el desarrollo y la mejora continua. 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.