Solana Web3.js 2.x versión: actualización importante de la poderosa biblioteca JavaScript
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 cambios significativos. Este artículo ofrecerá una introducción resumida a sus principales modificaciones.
Aunque la versión 2.x acaba de ser lanzada y su uso aún no se ha generalizado, muchos de los bibliotecas ampliamente utilizadas aún no se han migrado, pero conocer estos cambios con anticipación sin duda es beneficioso para la preparación de futuras actualizaciones.
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 requiere un paquete @solana/web3.js que incluye todas las funciones, encapsulando una gran cantidad de operaciones comunes basadas en un diseño de clases. Por ejemplo, la clase Connection ofrece decenas de métodos, abarcando casi todas las funciones necesarias para los desarrolladores.
Sin embargo, este diseño también trae algunos problemas. Aunque las funcionalidades que realmente utilizan los desarrolladores pueden ser solo una pequeña parte, toda la biblioteca de código se descargará en el dispositivo del usuario, lo que podría provocar un aumento en el tiempo de carga.
En comparación, la versión 2.x adoptó un enfoque de diseño modular. El equipo oficial dividió la antigua base 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 abandonó la implementación basada en clases y optó por un enfoque de función única, lo que ayuda 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 la documentación oficial, el uso de la nueva versión de DApp suele lograr una optimización de aproximadamente el 30% en el tamaño del código. Si solo se utilizan unas pocas funciones, el porcentaje de optimización puede ser aún mayor.
Este cambio plantea requisitos más altos sobre la calidad de la documentación del equipo de Solana. Cómo ayudar a los desarrolladores a localizar rápidamente las funciones necesarias se ha convertido en un problema clave. Actualmente, parece que la semántica de los nombres de los paquetes es bastante buena, ya que se puede entender en gran medida su propósito solo por el nombre, lo que reduce en cierta medida la dificultad de migración para los desarrolladores.
Sin embargo, debido a que la nueva versión se lanzó hace poco, muchos proyectos aún no han realizado la migración. En Solana Cookbook hay relativamente pocos ejemplos sobre la versión 2.x. Además, la nueva versión tiende a utilizar funciones integradas en tiempo de ejecución (como la generación de pares de claves), pero la documentación carece de descripciones relacionadas, lo que podría confundir a algunos desarrolladores.
Otra característica importante de la versión 2.x es la ausencia de dependencias. Esto puede no ser importante para muchos usuarios, pero a la luz 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 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 y eliminar 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, Connection ofrece una gran cantidad de métodos. Pero 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 utiliza un enfoque más funcional para implementar esta función:
javascript
import { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } from '@solana/web3.js';
En este fragmento de código, 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, y una vez que la transacción es confirmada, se devuelve el hash de la transacción.
par de claves
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, se puede usar await generateKeyPair() para generar un par de claves, en lugar del anterior Keypair.generate().
Es importante señalar que el nuevo generateKeyPair devuelve una Promise, 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 de criptografía web de JavaScript, aprovechando 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 difícil de aceptar; hoy, a finales de 2023, los desarrolladores de JavaScript ya están muy familiarizados con las Promises.
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 System Program que se proporcionaban en la versión anterior ya no existen, por lo que los métodos estáticos de la clase SystemProgram deben importarse de otro lugar.
Por ejemplo, la instrucción transfer ahora necesita llamar a la función getTransferSolInstruction en @solana-program/system.
Dado 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';
importar {
addSignatureToTransaction,
crearTransacción,
getBase58SignerFromPrivateKey,
getSignatureFromSignedTransaction,
getTransactionMessage,
signTransaction,
} de '@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 de nuestro RPC Provider 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 personalización es más fuerte.
Las transacciones se inician a través de HTTPS RPC y luego se confirman los resultados de las transacciones mediante la suscripción a WSS RPC. Se puede sentir que este nuevo enfoque 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
Cabe mencionar que 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 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.
12 me gusta
Recompensa
12
8
Compartir
Comentar
0/400
SchrodingerWallet
· hace4h
Que los expertos primero caigan en la trampa.
Ver originalesResponder0
AirdropFatigue
· hace13h
Ha, la migración o no migración no afecta mucho.
Ver originalesResponder0
DegenGambler
· 08-06 03:11
Finalmente ha subido a 2.0~solo estoy mirando el espectáculo
Ver originalesResponder0
ser_we_are_ngmi
· 08-06 01:10
¿Cuál es la ventaja de actualizar? Con 1.x es suficiente.
Ver originalesResponder0
LayerHopper
· 08-06 01:10
Ya debería haberse actualizado.
Ver originalesResponder0
PumpAnalyst
· 08-06 00:55
Desde el punto de vista técnico, esta actualización tiene sus peculiaridades. No se recomienda a los tontos apresurarse a actualizar.
Lanzamiento espectacular de la versión 2.x de Solana Web3.js, el diseño modular mejora significativamente el rendimiento.
Solana Web3.js 2.x versión: actualización importante de la poderosa biblioteca JavaScript
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 cambios significativos. Este artículo ofrecerá una introducción resumida a sus principales modificaciones.
Aunque la versión 2.x acaba de ser lanzada y su uso aún no se ha generalizado, muchos de los bibliotecas ampliamente utilizadas aún no se han migrado, pero conocer estos cambios con anticipación sin duda es beneficioso para la preparación de futuras actualizaciones.
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 requiere un paquete @solana/web3.js que incluye todas las funciones, encapsulando una gran cantidad de operaciones comunes basadas en un diseño de clases. Por ejemplo, la clase Connection ofrece decenas de métodos, abarcando casi todas las funciones necesarias para los desarrolladores.
Sin embargo, este diseño también trae algunos problemas. Aunque las funcionalidades que realmente utilizan los desarrolladores pueden ser solo una pequeña parte, toda la biblioteca de código se descargará en el dispositivo del usuario, lo que podría provocar un aumento en el tiempo de carga.
En comparación, la versión 2.x adoptó un enfoque de diseño modular. El equipo oficial dividió la antigua base 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 abandonó la implementación basada en clases y optó por un enfoque de función única, lo que ayuda 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 la documentación oficial, el uso de la nueva versión de DApp suele lograr una optimización de aproximadamente el 30% en el tamaño del código. Si solo se utilizan unas pocas funciones, el porcentaje de optimización puede ser aún mayor.
Este cambio plantea requisitos más altos sobre la calidad de la documentación del equipo de Solana. Cómo ayudar a los desarrolladores a localizar rápidamente las funciones necesarias se ha convertido en un problema clave. Actualmente, parece que la semántica de los nombres de los paquetes es bastante buena, ya que se puede entender en gran medida su propósito solo por el nombre, lo que reduce en cierta medida la dificultad de migración para los desarrolladores.
Sin embargo, debido a que la nueva versión se lanzó hace poco, muchos proyectos aún no han realizado la migración. En Solana Cookbook hay relativamente pocos ejemplos sobre la versión 2.x. Además, la nueva versión tiende a utilizar funciones integradas en tiempo de ejecución (como la generación de pares de claves), pero la documentación carece de descripciones relacionadas, lo que podría confundir a algunos desarrolladores.
Otra característica importante de la versión 2.x es la ausencia de dependencias. Esto puede no ser importante para muchos usuarios, pero a la luz 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 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 y eliminar 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, Connection ofrece una gran cantidad de métodos. Pero 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 utiliza un enfoque más funcional para implementar esta función:
javascript import { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } from '@solana/web3.js';
const rpc = createSolanaRpcApi({ httpEndpoint: ' wsEndpoint: 'wss://api.mainnet-beta.solana.com', });
const { sendAndConfirmTransaction } = rpc;
En este fragmento de código, 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, y una vez que la transacción es confirmada, se devuelve el hash de la transacción.
par de claves
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, se puede usar await generateKeyPair() para generar un par de claves, en lugar del anterior Keypair.generate().
Es importante señalar que el nuevo generateKeyPair devuelve una Promise, 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 de criptografía web de JavaScript, aprovechando 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 difícil de aceptar; hoy, a finales de 2023, los desarrolladores de JavaScript ya están muy familiarizados con las Promises.
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 System Program que se proporcionaban en la versión anterior ya no existen, por lo que los métodos estáticos de la clase SystemProgram deben importarse de otro lugar.
Por ejemplo, la instrucción transfer ahora necesita llamar a la función getTransferSolInstruction en @solana-program/system.
Dado 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'; importar { addSignatureToTransaction, crearTransacción, getBase58SignerFromPrivateKey, getSignatureFromSignedTransaction, getTransactionMessage, signTransaction, } de '@solana/transactions';
const transaction = pipe( createTransaction(), addSignatureToTransaction(getTransferSolInstruction({})), );
const signedTransaction = signTransaction(transaction, [signer]); const signature = getSignatureFromSignedTransaction(signedTransaction); const message = getTransactionMessage(signedTransaction);
const txid = await sendAndConfirmTransaction({ signedTransaction });
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 de nuestro RPC Provider 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 personalización es más fuerte.
Las transacciones se inician a través de HTTPS RPC y luego se confirman los resultados de las transacciones mediante la suscripción a WSS RPC. Se puede sentir que este nuevo enfoque 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
Cabe mencionar que 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 Solana, lo que ayuda a impulsar la adopción y el desarrollo de la plataforma.