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% оптимизации объема кода. Если используются только несколько функций, коэффициент оптимизации может быть еще выше.
Это изменение предъявляет более высокие требования к качеству документации команды Solana. Как помочь разработчикам быстро находить необходимые функции становится ключевым вопросом. В настоящее время названия пакетов имеют хорошую семантику, и по названиям можно в целом понять их назначение, что в определенной степени снижает сложность миграции для разработчиков.
Однако, поскольку новая версия была выпущена совсем недавно, многие проекты ещё не завершили миграцию. На Solana Cookbook примеров для версии 2.x также относительно мало. Кроме того, новая версия склонна использовать встроенные функции выполнения (например, генерацию ключевых пар), но в документации отсутствуют соответствующие описания, что может вызвать путаницу у некоторых разработчиков.
Еще одной важной особенностью версии 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 { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } из '@solana/web3.js';
В этом коде, когда мы вызываем sendAndConfirmTransaction для отправки транзакции, автоматически инициируется HTTPS-запрос и устанавливается WSS-соединение, подписываясь на статус транзакции, и после подтверждения транзакции возвращается хэш транзакции.
ключи
В части, связанной с открытыми и закрытыми ключами, также произошли значительные изменения. Классы Keypair и PublicKey, часто используемые в версии 1.x, больше не существуют и были заменены некоторыми функциями.
Например, можно использовать await generateKeyPair() для генерации пары ключей, а не предыдущий Keypair.generate().
Стоит отметить, что новый generateKeyPair возвращает Promise, а не непосредственно пару ключей. Это связано с тем, что новая реализация максимально использует Web Crypto API в JavaScript и применяет нативную реализацию Ed25519. Многие методы Web Crypto API являются асинхронными. Тем не менее, это изменение не трудно воспринять; на сегодняшний день, когда 2023 год подходит к концу, разработчики 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 { getTransferSolInstruction } из '@solana/system-program';
импорт {
addSignatureToTransaction,
создатьТранзакцию,
getBase58SignerFromPrivateKey,
getSignatureFromSignedTransaction,
getTransactionMessage,
signTransaction,
} из '@solana/транзакции';
Можно заметить, что транзакции больше не инициируются через 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, что способствует принятию и развитию этой платформы.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
10 Лайков
Награда
10
6
Поделиться
комментарий
0/400
DegenGambler
· 15ч назад
Наконец-то поднялся до 2.0 ~ просто смотрю спектакль
Посмотреть ОригиналОтветить0
ser_we_are_ngmi
· 17ч назад
Что хорошего в обновлениях? 1.x и так сойдет.
Посмотреть ОригиналОтветить0
LayerHopper
· 17ч назад
Давно пора обновить.
Посмотреть ОригиналОтветить0
PumpAnalyst
· 18ч назад
С технической точки зрения это обновление версии выглядит подозрительно, старым неудачникам не рекомендуется спешить с обновлением.
Выпуск версии 2.x Solana Web3.js с модульным дизайном значительно улучшает производительность
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% оптимизации объема кода. Если используются только несколько функций, коэффициент оптимизации может быть еще выше.
Это изменение предъявляет более высокие требования к качеству документации команды Solana. Как помочь разработчикам быстро находить необходимые функции становится ключевым вопросом. В настоящее время названия пакетов имеют хорошую семантику, и по названиям можно в целом понять их назначение, что в определенной степени снижает сложность миграции для разработчиков.
Однако, поскольку новая версия была выпущена совсем недавно, многие проекты ещё не завершили миграцию. На Solana Cookbook примеров для версии 2.x также относительно мало. Кроме того, новая версия склонна использовать встроенные функции выполнения (например, генерацию ключевых пар), но в документации отсутствуют соответствующие описания, что может вызвать путаницу у некоторых разработчиков.
Еще одной важной особенностью версии 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 { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } из '@solana/web3.js';
const rpc = createSolanaRpcApi({ httpEndpoint: ' wsEndpoint: 'wss://api.mainnet-beta.solana.com', });
const { sendAndConfirmTransaction } = rpc;
В этом коде, когда мы вызываем sendAndConfirmTransaction для отправки транзакции, автоматически инициируется HTTPS-запрос и устанавливается WSS-соединение, подписываясь на статус транзакции, и после подтверждения транзакции возвращается хэш транзакции.
ключи
В части, связанной с открытыми и закрытыми ключами, также произошли значительные изменения. Классы Keypair и PublicKey, часто используемые в версии 1.x, больше не существуют и были заменены некоторыми функциями.
Например, можно использовать await generateKeyPair() для генерации пары ключей, а не предыдущий Keypair.generate().
Стоит отметить, что новый generateKeyPair возвращает Promise, а не непосредственно пару ключей. Это связано с тем, что новая реализация максимально использует Web Crypto API в JavaScript и применяет нативную реализацию Ed25519. Многие методы Web Crypto API являются асинхронными. Тем не менее, это изменение не трудно воспринять; на сегодняшний день, когда 2023 год подходит к концу, разработчики 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 { getTransferSolInstruction } из '@solana/system-program'; импорт { addSignatureToTransaction, создатьТранзакцию, getBase58SignerFromPrivateKey, getSignatureFromSignedTransaction, getTransactionMessage, signTransaction, } из '@solana/транзакции';
Константная транзакция = pipe( создатьТранзакцию(), addSignatureToTransaction(getTransferSolInstruction({})), );
const signedTransaction = signTransaction(transaction, [signer]); const signature = getSignatureFromSignedTransaction(signedTransaction); const сообщение = getTransactionMessage(signedTransaction);
const txid = await sendAndConfirmTransaction({ signedTransaction });
Можно заметить, что транзакции больше не инициируются через 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, что способствует принятию и развитию этой платформы.