Существенное обновление версии 2.x Solana Web3.js: разделение функций и оптимизация производительности

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

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

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

Хотя версия 2.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 исключила все внешние зависимости.

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

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

соединение

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

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

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

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

Например, можно использовать await generateKeyPair() для генерации пары ключей, а не предыдущий Keypair.generate(). Стоит отметить, что новый generateKeyPair возвращает Promise, а не напрямую пару ключей. Это связано с тем, что новая реализация использует как можно больше возможностей API Web Crypto JavaScript, применяя родную реализацию Ed25519. Многие методы API Web Crypto являются асинхронными. Тем не менее, это изменение не является трудно воспринимаемым, в конце 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 Provider, после чего эта функция вызывается для инициирования сделки. По сравнению с версией 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 для включения функционального программирования

SOL-1.85%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 4
  • Поделиться
комментарий
0/400
SignatureVerifiervip
· 08-04 17:28
смх... еще один спешный релиз, требующий обширного аудита безопасности
Посмотреть ОригиналОтветить0
BearMarketSurvivorvip
· 08-04 17:27
Чем лучше оптимизация, тем больше неудачников.
Посмотреть ОригиналОтветить0
AlwaysAnonvip
· 08-04 17:20
О, наконец-то обновился!
Посмотреть ОригиналОтветить0
DefiPlaybookvip
· 08-04 17:08
Согласно прогнозу кривой роста TVL, после оптимизации модульной архитектуры 2.x производительность увеличится на 27.8%.
Посмотреть ОригиналОтветить0
  • Закрепить