Solana Web3.js 2.x versión: Un nuevo capítulo en la programación funcional
Solana Web3.js, como una biblioteca de JavaScript rica en funciones, lanzó oficialmente la versión 2.x en noviembre de este año. En comparación con la 1.x, la nueva versión trae cambios significativos, y este artículo ofrecerá un resumen de sus principales actualizaciones.
A pesar de que la versión 2.x acaba de ser lanzada y su uso aún no es alto, muchas bibliotecas ampliamente utilizadas aún no se han migrado, entender estos cambios será de gran beneficio para las futuras actualizaciones de proyectos.
Comparación de versiones
El uso de la versión 1.x es relativamente simple. Solo incluye un paquete principal: @solana/web3.js, que integra todas las funcionalidades. Esta versión 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, casi cubriendo 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 ser solo una pequeña parte, todo el código de la biblioteca se descarga en el dispositivo del usuario, lo que puede llevar a un aumento en el tiempo de carga.
La versión 2.x adoptó un enfoque diferente. El equipo oficial dividió el antiguo código en varios módulos pequeños, como @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, etc. La nueva versión abandona la implementación basada en clases y opta por un enfoque de función única, lo que favorece la optimización durante la construcción del código JavaScript. El código no utilizado se eliminará y, de hecho, no se descargará en los dispositivos de los usuarios. Según la documentación oficial, las DApps que utilizan la nueva versión generalmente pueden obtener un 30% de optimización en el tamaño; si solo se utilizan unas pocas funciones, la tasa de optimización puede ser aún mayor.
Este cambio ha planteado mayores exigencias a la calidad de la documentación del equipo de Solana. Cómo permitir que los desarrolladores encuentren rápidamente las funciones que necesitan se ha convertido en un problema clave. Actualmente, parece que la semanticidad de los nombres de los paquetes es bastante buena, ya que se puede entender su uso en gran medida solo a partir de sus nombres, lo que, en cierta medida, reduce la dificultad de migración para los desarrolladores.
Debido a que se lanzó hace poco, muchos proyectos aún no han migrado. También hay pocos ejemplos sobre la versión 2.x en 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 es insuficiente en la descripción de estas partes, lo que puede causar confusión a los desarrolladores en ciertos aspectos.
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 considerando el 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, reducir la entrada y las 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, eliminando la introducción de dependencias externas y Polyfills. Aunque en el futuro puede haber cambios, 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. Pero su función principal es crear un emisor de solicitudes configurando la dirección de solicitud RPC y luego usarlo para enviar diversas solicitudes.
La versión 2.x adopta un enfoque más funcional:
javascript
import { createSolanaRpc } from '@solana/web3.js';
En esta nueva versión, cuando llamamos a sendAndConfirmTransaction para enviar una transacción, automáticamente iniciará una solicitud HTTPS y establecerá una conexión WSS para suscribirse al estado de la transacción, devolviendo el hash de la transacción una vez que haya sido confirmada.
par de claves
También ha habido cambios significativos en la parte relacionada con las claves públicas y privadas. 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 de Keypair.generate() como antes.
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 aprovecha al máximo la API de Criptografía Web de JavaScript, utilizando la implementación nativa de Ed25519. Muchos métodos de la API de Criptografía Web son asíncronos. Sin embargo, este cambio no es inaceptable; hoy, a finales de 2024, los desarrolladores de JavaScript están muy familiarizados con las Promesas.
enviar transacción
Los usuarios de la versión 1.x deberían estar muy familiarizados con las clases Transaction y VersionedTransaction, cuya relación ha confundido a muchos desarrolladores.
En la versión 2.x, estas dos clases ya no existen.
Los métodos relacionados con el System Program proporcionados en la versión anterior ya no existen, por lo que los métodos estáticos de 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 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/functional';
import { getTransferSolInstruction } from '@solana/system-program';
import { createSolanaRpc } from '@solana/web3.js';
Se puede ver que las transacciones ya no se inician a través de Connection, sino que se genera una función específica mediante el RPC Provider que hemos 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 ventaja es que se ha fortalecido la personalización.
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 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.
Soporte de React
Curiosamente, el proyecto @solana/web3.js también incluye una biblioteca llamada @solana/react, que proporciona algunos Hooks de React, con funciones integradas 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 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.
18 me gusta
Recompensa
18
8
Republicar
Compartir
Comentar
0/400
CommunityJanitor
· 08-10 07:13
¿Por qué está tardando tanto en iterar?
Ver originalesResponder0
ProposalManiac
· 08-09 22:16
Hay progreso, pero no es lo suficientemente radical.
Ver originalesResponder0
GhostChainLoyalist
· 08-09 07:05
2.0 todavía es lento, ¿cuándo aprenderán a estar pendientes de las actualizaciones de versión todo el día?
Ver originalesResponder0
PanicSeller69
· 08-07 19:20
¿Para qué sirve la actualización? ¿No hay que cambiar de biblioteca?
Ver originalesResponder0
MemeCoinSavant
· 08-07 07:47
basado en af, solana demostrando significancia estadística en la evolución web3 tbh
Ver originalesResponder0
FarmHopper
· 08-07 07:46
¿Todavía están usando 1.x? Tsk tsk.
Ver originalesResponder0
ThreeHornBlasts
· 08-07 07:45
¿A qué espera el partido de desarrollo?
Ver originalesResponder0
ZkProofPudding
· 08-07 07:43
¡Qué rico~ llegó medio año tarde la actualización!
Publicación de Solana Web3.js 2.x: una importante actualización de programación funcional y optimización del rendimiento
Solana Web3.js 2.x versión: Un nuevo capítulo en la programación funcional
Solana Web3.js, como una biblioteca de JavaScript rica en funciones, lanzó oficialmente la versión 2.x en noviembre de este año. En comparación con la 1.x, la nueva versión trae cambios significativos, y este artículo ofrecerá un resumen de sus principales actualizaciones.
A pesar de que la versión 2.x acaba de ser lanzada y su uso aún no es alto, muchas bibliotecas ampliamente utilizadas aún no se han migrado, entender estos cambios será de gran beneficio para las futuras actualizaciones de proyectos.
Comparación de versiones
El uso de la versión 1.x es relativamente simple. Solo incluye un paquete principal: @solana/web3.js, que integra todas las funcionalidades. Esta versión 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, casi cubriendo 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 ser solo una pequeña parte, todo el código de la biblioteca se descarga en el dispositivo del usuario, lo que puede llevar a un aumento en el tiempo de carga.
La versión 2.x adoptó un enfoque diferente. El equipo oficial dividió el antiguo código en varios módulos pequeños, como @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, etc. La nueva versión abandona la implementación basada en clases y opta por un enfoque de función única, lo que favorece la optimización durante la construcción del código JavaScript. El código no utilizado se eliminará y, de hecho, no se descargará en los dispositivos de los usuarios. Según la documentación oficial, las DApps que utilizan la nueva versión generalmente pueden obtener un 30% de optimización en el tamaño; si solo se utilizan unas pocas funciones, la tasa de optimización puede ser aún mayor.
Este cambio ha planteado mayores exigencias a la calidad de la documentación del equipo de Solana. Cómo permitir que los desarrolladores encuentren rápidamente las funciones que necesitan se ha convertido en un problema clave. Actualmente, parece que la semanticidad de los nombres de los paquetes es bastante buena, ya que se puede entender su uso en gran medida solo a partir de sus nombres, lo que, en cierta medida, reduce la dificultad de migración para los desarrolladores.
Debido a que se lanzó hace poco, muchos proyectos aún no han migrado. También hay pocos ejemplos sobre la versión 2.x en 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 es insuficiente en la descripción de estas partes, lo que puede causar confusión a los desarrolladores en ciertos aspectos.
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 considerando el 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, reducir la entrada y las 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, eliminando la introducción de dependencias externas y Polyfills. Aunque en el futuro puede haber cambios, 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. Pero su función principal es crear un emisor de solicitudes configurando la dirección de solicitud RPC y luego usarlo para enviar diversas solicitudes.
La versión 2.x adopta un enfoque más funcional:
javascript import { createSolanaRpc } from '@solana/web3.js';
const rpc = createSolanaRpc(');
// Usar rpc para enviar transacciones const signature = await rpc.sendAndConfirmTransaction(transaction);
En esta nueva versión, cuando llamamos a sendAndConfirmTransaction para enviar una transacción, automáticamente iniciará una solicitud HTTPS y establecerá una conexión WSS para suscribirse al estado de la transacción, devolviendo el hash de la transacción una vez que haya sido confirmada.
par de claves
También ha habido cambios significativos en la parte relacionada con las claves públicas y privadas. 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 de Keypair.generate() como antes.
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 aprovecha al máximo la API de Criptografía Web de JavaScript, utilizando la implementación nativa de Ed25519. Muchos métodos de la API de Criptografía Web son asíncronos. Sin embargo, este cambio no es inaceptable; hoy, a finales de 2024, los desarrolladores de JavaScript están muy familiarizados con las Promesas.
enviar transacción
Los usuarios de la versión 1.x deberían estar muy familiarizados con las clases Transaction y VersionedTransaction, cuya relación ha confundido a muchos desarrolladores.
En la versión 2.x, estas dos clases ya no existen.
Los métodos relacionados con el System Program proporcionados en la versión anterior ya no existen, por lo que los métodos estáticos de 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 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/functional'; import { getTransferSolInstruction } from '@solana/system-program'; import { createSolanaRpc } from '@solana/web3.js';
const rpc = createSolanaRpc(');
const transaction = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ de: senderPublicKey, a: recipientPublicKey, cantidad: transferAmount, })) );
const signature = await rpc.sendAndConfirmTransaction(transaction);
Se puede ver que las transacciones ya no se inician a través de Connection, sino que se genera una función específica mediante el RPC Provider que hemos 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 ventaja es que se ha fortalecido la personalización.
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 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.
Soporte de React
Curiosamente, el proyecto @solana/web3.js también incluye una biblioteca llamada @solana/react, que proporciona algunos Hooks de React, con funciones integradas 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 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.