Анализ обновления Solana Web3.js 2.0: модульный дизайн повышает производительность и безопасность

Solana Web3.js 2.x версия: Обновленный анализ функционально насыщенной библиотеки JavaScript

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

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

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

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

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

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

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

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

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

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

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

соединение

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

Версия 2.x использует более функциональный подход для реализации этой функции:

JavaScript import { createSolanaRpc } из "@solana/web3.js";

const rpc = createSolanaRpc("");

При вызове sendAndConfirmTransaction для отправки транзакции система автоматически инициирует запрос HTTPS и устанавливает соединение WSS для подписки на статус транзакции, возвращая хэш транзакции после ее подтверждения.

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

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

Например, теперь можно использовать await generateKeyPair() для генерации пары ключей, а не предыдущий Keypair.generate().

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

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

Пользователи версии 1.x должны быть хорошо знакомы с классами Transaction и VersionedTransaction. В версии 2.x эти два класса больше не существуют.

Методы, связанные с System Program, предоставленные в старой версии, больше не существуют, поэтому статические методы класса SystemProgram необходимо импортировать из других источников.

Например, команда transfer теперь требует вызова функции getTransferSolInstruction из @solana-program/system.

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

JavaScript import { pipe } из '@solana/functional'; import { generateKeyPair } из '@solana/web3.js'; import { getTransferSolInstruction } из '@solana/system-program'; import { createTransaction } из '@solana/transactions';

Константная транзакция = pipe( создатьТранзакцию(), addInstruction(getTransferSolInstruction({ fromPubkey: sender.publicKey, toPubkey: получатель, лампорты: сумма, })), setRecentBlockhash(blockhash), addSigners([sender]) );

const signature = ожидание rpc.sendAndConfirmTransaction(transaction);

Можно увидеть, что транзакции больше не инициируются через 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 для включения функционального программирования

SOL1.94%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 4
  • Поделиться
комментарий
0/400
BearMarketSurvivorvip
· 20ч назад
Передовой отчет: обновление похоже на первый выстрел, прозвучавший в пустом гнезде.
Посмотреть ОригиналОтветить0
OPsychologyvip
· 20ч назад
Не торопитесь менять, пока обновление еще не стабилизировалось.
Посмотреть ОригиналОтветить0
RugResistantvip
· 20ч назад
хм, обнаружены потенциальные уязвимости в безопасности... нужно провести тщательный аудит, если честно
Посмотреть ОригиналОтветить0
mev_me_maybevip
· 20ч назад
Ах, это Solana тоже начала играть с модульностью
Посмотреть ОригиналОтветить0
  • Закрепить