Выпуск версии 2.x Solana Web3.js: Рефакторинг функционального программирования приводит к значительной оптимизации

robot
Генерация тезисов в процессе

Solana Web3.js 2.x версия: совершенно новый опыт функционального программирования

Библиотека Solana Web3.js, обладающая множеством функций, официально выпустила версию 2.x в ноябре этого года. По сравнению с предыдущей версией 1.x, новая версия претерпела значительные изменения. В этой статье будут обобщены основные изменения.

Несмотря на то, что версия 2.x только что была выпущена и её использование ещё не стало распространённым, а многие широко используемые библиотеки также не перешли на неё, понимание этих изменений будет весьма полезно для будущей миграционной работы.

Серия для новичков Web3: сейчас обновите @solana/web3.js 2.x для включения функционального программирования

Сравнение версий

Нельзя отрицать, что старая версия была более простой и прямолинейной в использовании. Версия 1.x содержит только один пакет @solana/web3.js, все функции сосредоточены в нем. Она основана на классовом дизайне и инкапсулирует множество распространенных операций. Например, класс Connection предоставляет десятки методов, которые практически охватывают все функции, необходимые разработчикам.

Однако, этот дизайн также создает некоторые проблемы. Хотя фактически используемые разработчиками функции могут составлять лишь небольшую часть, вся кодовая база будет загружена на устройство пользователя, и из-за большого объема кода библиотеки это может занять определенное время.

В отличие от этого, версия 2.x разбивает существующий кодовый репозиторий на несколько мелких модулей, таких как @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions и т.д. В то же время новая версия отказалась от реализации на основе классов, используя больше подход с отдельными функциями, что очень помогает в оптимизации построения кода на JavaScript. Неиспользуемый код будет удален и не будет загружаться на устройства пользователей. Согласно официальной документации, DApp, использующие новую версию, в основном могут добиться оптимизации размера на 30%, а если используются только несколько функций, оптимизация может быть еще выше.

Это предъявляет более высокие требования к качеству документации команды Solana, и как быстро помочь разработчикам найти необходимые функции становится важной задачей. На данный момент кажется, что имена пакетов имеют хорошую семантику, и по их названиям можно примерно понять их назначение, что в определенной степени снижает сложность миграции для разработчиков.

Поскольку только что был выпущен, многие проекты еще не осуществили миграцию. Примеры версии 2.x на Solana Cookbook также относительно немногочисленны. Кроме того, новая версия склонна использовать встроенные функции выполнения (такие как генерация пар ключей), но в документации отсутствует описание этих функций, что может вызывать путаницу у разработчиков в некоторых аспектах.

Еще одной важной особенностью версии 2.x является отсутствие зависимостей. Это может быть не так важно для многих пользователей, но, судя по атаке на цепочку поставок, произошедшей в начале декабря этого года на версиях @solana/web3.js 1.95.5 и 1.95.6, большее количество внешних вводов и зависимостей значительно увеличивает вероятность возникновения инцидентов безопасности. С выпуском версии 2.x команда разработчиков Web3.js решила больше использовать нативные функции, отказываясь от внешних зависимостей и внедрения Polyfills. В будущем возможны изменения, но по крайней мере на данный момент версия 2.x устранила все внешние зависимости.

Важные изменения

подключение

В версии 1.x класс Connection предоставляет множество методов. Но его основная функция заключается в создании отправителя запросов с помощью настройки адреса RPC, а затем отправки различных запросов через него.

Версия 2.x использует более функциональный подход для реализации этой функции. Например, при вызове sendAndConfirmTransaction для отправки транзакции автоматически инициируется HTTPS-запрос и устанавливается WSS-соединение для подписки на статус транзакции, после подтверждения транзакции возвращается хеш транзакции.

ключевая пара

Часть, связанная с публичными и приватными ключами, также претерпела значительные изменения. Классы Keypair и PublicKey, которые часто использовались в версии 1.x, больше не существуют и были заменены несколькими функциями.

Например, теперь можно использовать await generateKeyPair() для генерации пары ключей, а не предыдущий Keypair.generate(). Стоит отметить, что новый generateKeyPair возвращает Promise, поскольку новая реализация максимально использует Web Crypto API JavaScript, применяя родную реализацию Ed25519. Многие методы Web Crypto API являются асинхронными. Однако это изменение не является неприемлемым, на сегодняшний день, когда 2024 год подходит к концу, разработчики JavaScript уже очень хорошо знакомы с Promise.

Отправить транзакцию

Классы Transaction и VersionedTransaction, знакомые пользователям версии 1.x, больше не существуют в версии 2.x.

Методы, связанные с System Program, предоставляемые в предыдущей версии, больше не существуют, поэтому статические методы класса SystemProgram необходимо импортировать из других источников. Например, для команды transfer необходимо вызвать функцию getTransferSolInstruction из @solana-program/system.

Поскольку класс больше не предоставляется, Web3.js предлагает функциональный стиль программирования с использованием популярной функции pipe. Разработчики могут использовать функцию pipe для реализации функции перевода, которая была в версии 1.x.

Стоит отметить, что сделки больше не инициируются через Connection, а создаются с помощью определенного RPC-провайдера, который генерирует уникальную функцию, и затем эта функция вызывается для инициирования сделки. По сравнению с версией 1.x, объем кода увеличился, но кастомизация стала более мощной.

交易通过HTTPS RPC发起,然后通过订阅WSS RPC来确认交易结果。 新的方式非常依赖WSS,相信未来WSS的应用将会越来越广泛,这也对RPC供应商的服务稳定性提出了更高要求。

Реакт

Стоит отметить, что в проекте @solana/web3.js также есть библиотека под названием @solana/react, которая предоставляет несколько React Hook и включает такие функции, как signIn.

Итог

Выпуск версии 2.x @solana/web3.js наглядно демонстрирует приверженность команды Solana к постоянному развитию и улучшению. Он предоставляет разработчикам эффективный, гибкий и настраиваемый способ взаимодействия с сетью Solana, что способствует принятию и развитию этой платформы.

Серия для новичков Web3: сейчас обновите @solana/web3.js 2.x для включения функционального программирования

Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 4
  • Поделиться
комментарий
0/400
MemeCoinSavantvip
· 07-15 21:50
согласно моим статистическим моделям, этот парадигмальный сдвиг основан на ngl
Посмотреть ОригиналОтветить0
MEVHunterZhangvip
· 07-15 21:45
Наконец-то дождались реконструкции, долго ждали.
Посмотреть ОригиналОтветить0
OnlyOnMainnetvip
· 07-15 21:39
Сол, кажется, слишком быстро действует.
Посмотреть ОригиналОтветить0
LiquidityNinjavip
· 07-15 21:35
Надежно~ наконец-то использую функциональный.
Посмотреть ОригиналОтветить0
  • Закрепить