Существенное обновление версии 2.x Solana Web3.js: модульный дизайн улучшает производительность и безопасность

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

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

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

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

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

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

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

В отличие от этого, версия 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 был использован более функциональный подход к реализации:

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"; изначально, когда вы знакомитесь с Solana, их взаимосвязь может показаться запутанной.

В версии 2.x эти два класса также больше не существуют.

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

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

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

JavaScript import { pipe } from "@solana/web3.js"; import { getTransferSolInstruction } из "@solana/system-program";

Константная транзакция = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ от: senderPublicKey, кому: recipientPublicKey, сумма: лампорты, })), setComputeUnitLimit(200_000), addSignature(senderSignature) );

const signature = ожидать sendAndConfirmTransaction(rpc, 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.92%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 5
  • Поделиться
комментарий
0/400
IntrovertMetaversevip
· 3ч назад
Улучшение быстро, просто никто не использует.
Посмотреть ОригиналОтветить0
LeverageAddictvip
· 07-29 23:23
Смерть старой проектной группы
Посмотреть ОригиналОтветить0
OnchainHolmesvip
· 07-29 23:22
Наконец-то дождался, ускользнул.
Посмотреть ОригиналОтветить0
TokenVelocityTraumavip
· 07-29 23:21
Обновления и все такое слишком утомительно, прощай.
Посмотреть ОригиналОтветить0
ProofOfNothingvip
· 07-29 23:13
Хуху, обновление вышло, можно попробовать.
Посмотреть ОригиналОтветить0
  • Закрепить