Publicación de la versión 2.x de Solana Web3.js: división de funciones y optimización del rendimiento

Solana Web3.js versión 2.x: división de funciones y optimización del rendimiento

Solana Web3.js, como una biblioteca de JavaScript rica en funciones, lanzó oficialmente la versión 2.x en noviembre. En comparación con la versión 1.x, la nueva versión ha sufrido cambios significativos. Este artículo resumirá sus principales cambios.

Aunque la versión 2.x acaba de ser lanzada y su uso aún no se ha generalizado, muchas bibliotecas ampliamente utilizadas no han sido migradas, pero entender estos cambios ayudará en el trabajo de migración futuro.

Serie para principiantes en Web3: Actualiza ahora @solana/web3.js 2.x para comenzar a programar de forma funcional

Comparación de versiones

La versión antigua es relativamente simple de usar, ya que solo incluye un paquete @solana/web3.js, donde se concentran todas las funciones. Está basada en un diseño orientado a clases y encapsula 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, la gran cantidad de código de ejemplo proporcionado en el libro de recetas de Solana también facilita a los desarrolladores.

Sin embargo, este diseño también trae algunos problemas. A pesar de que las funciones realmente utilizadas por los desarrolladores pueden representar solo una pequeña parte, toda la biblioteca de código se descargará en el dispositivo del usuario, y dado que la cantidad de código en la biblioteca es grande, esto puede llevar un tiempo considerable.

La versión 2.x adoptó una estrategia diferente. El equipo oficial dividió el código original en varios módulos más pequeños, como @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, entre otros. Al mismo tiempo, abandonó la implementación basada en clases y adoptó más el enfoque de funciones individuales. Este cambio beneficia la optimización durante la construcción del código JavaScript, ya que el código no utilizado se eliminará y no se descargará en el dispositivo del usuario. Según las estadísticas de la documentación oficial, las DApps que utilizan la nueva versión pueden obtener una optimización del tamaño del 30%; si solo se utilizan unas pocas funciones, el porcentaje de optimización puede ser aún mayor.

Este cambio plantea mayores requisitos de calidad para la documentación del equipo de Solana, y cómo permitir que los desarrolladores encuentren rápidamente las funciones que necesitan se ha convertido en un tema importante. A día de hoy, los nombres de los paquetes tienen una buena semántica, lo que permite entender en gran medida su propósito solo a partir del nombre, lo que reduce en cierta medida la dificultad de migración para los desarrolladores.

Debido a que la nueva versión se lanzó hace poco, muchos proyectos aún no han sido migrados. Los ejemplos sobre la versión 2.x en el Solana Cookbook también son relativamente escasos. 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 es insuficiente en su descripción, 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 tan relevante para muchos usuarios, pero considerando el ataque de 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ía 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 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 proporciona una gran cantidad de métodos. Su función principal es 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 adopta un enfoque más funcional.

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

const rpc = createSolanaRpc("");

Al llamar a sendAndConfirmTransaction para enviar una transacción, se iniciará automáticamente una solicitud HTTPS y se establecerá una conexión WSS para suscribirse al estado de la transacción, y se devolverá el hash de la transacción una vez 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, comúnmente utilizadas 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().

La nueva generateKeyPair devuelve una Promesa, esto se debe a que la nueva implementación aprovecha al máximo la API Web Crypto de JavaScript, utilizando la implementación nativa de Ed25519. Muchos de los métodos de la API Web Crypto son asíncronos. Sin embargo, este cambio no debería causar demasiados problemas para los desarrolladores de JavaScript que están familiarizados con las Promesas.

enviar transacción

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

Los métodos relacionados con el System Program proporcionados en la versión anterior ya no existen, y los métodos estáticos de la clase SystemProgram deben ser importados desde otros lugares.

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 de pipe comúnmente utilizada en 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"; importar { createSolanaRpc, sendTransaction, setTransactionFeePayer, createTransaction, appendTransactionInstruction, } de "@solana/web3.js";

const rpc = createSolanaRpc("");

const transaction = pipe( crearTransacción(), setTransactionFeePayer(payer.address), appendTransactionInstruction( getTransferSolInstruction({ fromAddress: payer.address, toAddress: recipient, cantidad, }) ) );

const signature = await sendTransaction(rpc, transaction, [payer]);

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 mediante la suscripción a WSS RPC. Este nuevo método tiene una mayor dependencia de WSS, lo que también plantea mayores exigencias sobre la estabilidad del servicio de los proveedores de RPC.

React

El proyecto @solana/web3.js también incluye una biblioteca llamada @solana/react, que ofrece algunos Hooks de React, incorporando funciones 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 Solana, ayudando a impulsar la adopción y el desarrollo de la plataforma.

Serie para principiantes en Web3: Actualiza ahora @solana/web3.js 2.x para activar 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
  • 7
  • Compartir
Comentar
0/400
BlindBoxVictimvip
· 07-10 20:02
Cuando termine el primer proyecto, lo diré... estoy cansado de mirar.
Ver originalesResponder0
ForeverBuyingDipsvip
· 07-10 17:13
Ahora hay que mover ladrillos de nuevo.
Ver originalesResponder0
airdrop_huntressvip
· 07-10 07:51
La actualización es rápida, pero ¿se puede solucionar este bug?
Ver originalesResponder0
DefiEngineerJackvip
· 07-10 07:47
*en realidad* la modularización no es trivial... el aumento de rendimiento parece prometedor pero muéstrame los benchmarks ser
Ver originalesResponder0
GateUser-75ee51e7vip
· 07-10 07:44
sol hermano, esto va a ser una gran actualización.
Ver originalesResponder0
SelfCustodyIssuesvip
· 07-10 07:41
Qué mal optimización, tendré que reescribir el código.
Ver originalesResponder0
GlueGuyvip
· 07-10 07:28
Ah, ha mejorado, vamos a ver si hay muchas trampas.
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)