Solana Web3.js 2.x versión: Análisis de la actualización de una biblioteca JavaScript rica en funciones
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 versión 1.x, la nueva versión trae muchos cambios significativos. Este artículo resumirá y analizará estos principales cambios.
Aunque la versión 2.x se ha lanzado recientemente y su uso no es alto, muchas bibliotecas ampliamente utilizadas aún no han cambiado, pero comprender estos cambios es crucial para el trabajo de migración en el futuro.
Comparación de versiones
La versión 1.x es relativamente simple de usar. Solo contiene 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 la 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. Aunque los desarrolladores generalmente solo utilizan una pequeña parte de las funciones, toda la biblioteca de código se descarga en el dispositivo del usuario, y dado que la cantidad de código de la biblioteca es enorme, esto puede tardar un tiempo.
La versión 2.x adoptó un enfoque diferente. 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, etc. Al mismo tiempo, la nueva versión abandonó la implementación basada en clases, utilizando en su lugar un enfoque más basado en funciones individuales. Este cambio favorece la optimización del código JavaScript durante la construcción, ya que el código no utilizado se eliminará y no se descargará en los dispositivos de los usuarios. Según la documentación oficial, el uso de la nueva versión de DApp puede lograr típicamente una optimización del 30% en el tamaño del código, y si solo se utilizan unas pocas funciones, el porcentaje de optimización puede ser aún mayor.
Este cambio plantea mayores exigencias sobre la calidad de la documentación del equipo de Solana. Cómo ayudar a los desarrolladores a encontrar rápidamente las funciones necesarias se ha convertido en un problema clave. Actualmente, los nombres de los paquetes tienen una buena semántica, lo que permite comprender su propósito a partir de los nombres, lo que reduce en cierta medida la dificultad de migración para los desarrolladores.
Sin embargo, debido a que acaba de lanzarse, muchos proyectos aún no han realizado la migració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 el tiempo de ejecución (como la generación de pares de claves), pero la documentación carece de descripciones detalladas sobre estas partes, lo que lleva a que ciertos aspectos generen confusión entre los desarrolladores.
Otra característica importante de la versión 2.x es la ausencia de dependencias. Aunque esto puede no ser lo más importante para muchos usuarios, a partir 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, un mayor número de entradas y dependencias externas 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, 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. Aunque su función principal es crear un emisor de solicitudes configurando la dirección de solicitud 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:
javascript
import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Al llamar a sendAndConfirmTransaction para enviar una transacción, el sistema iniciará automáticamente 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
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 utilizar await generateKeyPair() para generar un par de claves, en lugar de la anterior Keypair.generate().
Es importante notar 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 de Cripto de la Web de JavaScript, utilizando la implementación nativa de Ed25519. Muchos de los métodos de la API de Cripto de la Web son asíncronos. Sin embargo, este cambio no es inaceptable, ya que hoy, en el 2024 que está por terminar, 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. En la versión 2.x, estas dos clases ya no existen.
Los métodos relacionados con el Program System proporcionados 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, el comando transfer ahora necesita llamar a la función getTransferSolInstruction en @solana-program/system.
Dado que ya no se proporciona clase, Web3.js ofrece una forma de pipe comúnmente utilizada en la programación funcional. A continuación se muestra un ejemplo de implementación de la funcionalidad de transferencia original de 1.x utilizando la función pipe:
javascript
import { pipe } from '@solana/functional';
import { generateKeyPair } from '@solana/web3.js';
import { getTransferSolInstruction } from '@solana/system-program';
import { createTransaction } from '@solana/transactions';
Se puede ver que las transacciones ya no se inician a través de Connection, sino que se genera una función específica a través del RPC Provider que definimos, 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 mucho 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 mucho 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 requisitos de estabilidad del servicio para los proveedores de RPC.
React
Es interesante que el proyecto @solana/web3.js también incluya una biblioteca llamada @solana/react, que proporciona algunos React Hooks y 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 la evolución y mejora continua. Proporciona a los desarrolladores una forma eficiente, flexible y personalizable de interactuar con la red Solana, lo que ayuda a impulsar la adopción y el desarrollo de la plataforma. Aunque actualmente el uso no es alto, con el tiempo, se espera que cada vez más proyectos migren a esta nueva versión.
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.
16 me gusta
Recompensa
16
4
Compartir
Comentar
0/400
BearMarketSurvivor
· hace15h
Informe de primera línea: La actualización parece ser el primer disparo en un nido vacío.
Ver originalesResponder0
OPsychology
· hace15h
No te apresures a cambiar si la actualización aún no está estable.
Ver originalesResponder0
RugResistant
· hace15h
hmm se detectaron posibles puntos críticos de seguridad... necesito una auditoría a fondo, para ser honesto
Ver originalesResponder0
mev_me_maybe
· hace15h
Ah, esto Solana también ha comenzado a jugar con la modularidad.
Análisis de la actualización 2.0 de Solana Web3.js: el diseño modular mejora el rendimiento y la seguridad
Solana Web3.js 2.x versión: Análisis de la actualización de una biblioteca JavaScript rica en funciones
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 versión 1.x, la nueva versión trae muchos cambios significativos. Este artículo resumirá y analizará estos principales cambios.
Aunque la versión 2.x se ha lanzado recientemente y su uso no es alto, muchas bibliotecas ampliamente utilizadas aún no han cambiado, pero comprender estos cambios es crucial para el trabajo de migración en el futuro.
Comparación de versiones
La versión 1.x es relativamente simple de usar. Solo contiene 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 la 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. Aunque los desarrolladores generalmente solo utilizan una pequeña parte de las funciones, toda la biblioteca de código se descarga en el dispositivo del usuario, y dado que la cantidad de código de la biblioteca es enorme, esto puede tardar un tiempo.
La versión 2.x adoptó un enfoque diferente. 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, etc. Al mismo tiempo, la nueva versión abandonó la implementación basada en clases, utilizando en su lugar un enfoque más basado en funciones individuales. Este cambio favorece la optimización del código JavaScript durante la construcción, ya que el código no utilizado se eliminará y no se descargará en los dispositivos de los usuarios. Según la documentación oficial, el uso de la nueva versión de DApp puede lograr típicamente una optimización del 30% en el tamaño del código, y si solo se utilizan unas pocas funciones, el porcentaje de optimización puede ser aún mayor.
Este cambio plantea mayores exigencias sobre la calidad de la documentación del equipo de Solana. Cómo ayudar a los desarrolladores a encontrar rápidamente las funciones necesarias se ha convertido en un problema clave. Actualmente, los nombres de los paquetes tienen una buena semántica, lo que permite comprender su propósito a partir de los nombres, lo que reduce en cierta medida la dificultad de migración para los desarrolladores.
Sin embargo, debido a que acaba de lanzarse, muchos proyectos aún no han realizado la migració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 el tiempo de ejecución (como la generación de pares de claves), pero la documentación carece de descripciones detalladas sobre estas partes, lo que lleva a que ciertos aspectos generen confusión entre los desarrolladores.
Otra característica importante de la versión 2.x es la ausencia de dependencias. Aunque esto puede no ser lo más importante para muchos usuarios, a partir 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, un mayor número de entradas y dependencias externas 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, 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. Aunque su función principal es crear un emisor de solicitudes configurando la dirección de solicitud 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:
javascript import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Al llamar a sendAndConfirmTransaction para enviar una transacción, el sistema iniciará automáticamente 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
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 utilizar await generateKeyPair() para generar un par de claves, en lugar de la anterior Keypair.generate().
Es importante notar 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 de Cripto de la Web de JavaScript, utilizando la implementación nativa de Ed25519. Muchos de los métodos de la API de Cripto de la Web son asíncronos. Sin embargo, este cambio no es inaceptable, ya que hoy, en el 2024 que está por terminar, 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. En la versión 2.x, estas dos clases ya no existen.
Los métodos relacionados con el Program System proporcionados 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, el comando transfer ahora necesita llamar a la función getTransferSolInstruction en @solana-program/system.
Dado que ya no se proporciona clase, Web3.js ofrece una forma de pipe comúnmente utilizada en la programación funcional. A continuación se muestra un ejemplo de implementación de la funcionalidad de transferencia original de 1.x utilizando la función pipe:
javascript import { pipe } from '@solana/functional'; import { generateKeyPair } from '@solana/web3.js'; import { getTransferSolInstruction } from '@solana/system-program'; import { createTransaction } from '@solana/transactions';
const transaction = pipe( createTransaction(), addInstruction(getTransferSolInstruction({ fromPubkey: sender.publicKey, toPubkey: recipient, lamports: amount, })), setRecentBlockhash(blockhash), addSigners([sender]) );
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 a través del RPC Provider que definimos, 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 mucho 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 mucho 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 requisitos de estabilidad del servicio para los proveedores de RPC.
React
Es interesante que el proyecto @solana/web3.js también incluya una biblioteca llamada @solana/react, que proporciona algunos React Hooks y 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 la evolución y mejora continua. Proporciona a los desarrolladores una forma eficiente, flexible y personalizable de interactuar con la red Solana, lo que ayuda a impulsar la adopción y el desarrollo de la plataforma. Aunque actualmente el uso no es alto, con el tiempo, se espera que cada vez más proyectos migren a esta nueva versión.