Solana Web3.js 2.x версия: совершенно новый опыт функционального программирования
Библиотека Solana Web3.js, являющаяся многофункциональной библиотекой JavaScript, официально выпустила версию 2.x в ноябре этого года. В отличие от версии 1.x, новая версия принесла ряд значительных изменений, и в этой статье будут обобщены ее основные изменения.
Хотя версия 2.x только что была выпущена, и ее использование еще не стало широко распространенным, многие из широко используемых библиотек также еще не были перенесены. Тем не менее, заранее ознакомление с этими изменениями будет очень полезно для будущей миграционной работы.
Сравнение версий
Нельзя отрицать, что старая версия была проще и нагляднее в использовании. Версия 1.x включает только один пакет @solana/web3.js, в котором сосредоточены все функции. Она основана на классовом дизайне и инкапсулирует множество распространённых операций. Например, класс Connection предлагает десятки методов, которые почти полностью охватывают все функции, необходимые разработчикам. Кроме того, обширный примерный код в Solana cookbook также предоставляет разработчикам огромные удобства.
Однако такой дизайн также приносит некоторые проблемы: хотя функционал, который разработчики на самом деле используют, может составлять лишь небольшую часть, вся кодовая база будет загружена на устройство пользователя. Из-за большого объема кода библиотеки это может привести к определенному времени загрузки.
В отличие от этого, версия 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 являются асинхронными. Тем не менее, для разработчиков JavaScript, знакомых с Promise, это изменение не должно быть трудным для адаптации.
Отправить транзакцию
Классы Transaction и VersionedTransaction в версии 1.x больше не существуют в 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";
Можно заметить, что транзакции больше не инициируются через Connection, а создаются с помощью определенного нами RPC Provider, который генерирует конкретную функцию, а затем вызывается эта функция для инициации транзакции. По сравнению с версией 1.x количество кода увеличилось, но настраиваемость стала более высокой.
Торговля инициируется через HTTPS RPC, а затем подтверждается через подписку на WSS RPC для получения результатов торговли. Можно почувствовать, что новый способ сильно зависит от WSS, и в будущем применение WSS будет становиться все более широким, что также выдвигает более высокие требования к стабильности услуг поставщиков RPC.
React поддержка
Стоит отметить, что проект @solana/web3.js также включает библиотеку под названием @solana/react, которая предоставляет несколько React Hook и включает функции, такие как signIn.
Итог
Выпуск версии 2.x @solana/web3.js демонстрирует приверженность команды Solana к постоянному развитию и улучшению. Новая версия предоставляет разработчикам эффективный, гибкий и настраиваемый способ взаимодействия с сетью Solana, что, как ожидается, будет способствовать принятию и развитию этой платформы.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
9 Лайков
Награда
9
6
Поделиться
комментарий
0/400
GasWastingMaximalist
· 4ч назад
Функции действительно бык, а документация просто лежит и пылится.
Посмотреть ОригиналОтветить0
RugPullSurvivor
· 07-12 23:48
Изменение равно пустой модификации... лучше все переписать.
Посмотреть ОригиналОтветить0
Degen4Breakfast
· 07-12 23:48
Наконец-то встал на ноги
Посмотреть ОригиналОтветить0
digital_archaeologist
· 07-12 23:40
Падение зависимости от хороших отзывов
Посмотреть ОригиналОтветить0
AirdropHunterWang
· 07-12 23:32
И всё? Функций всё ещё не хватает?
Посмотреть ОригиналОтветить0
metaverse_hermit
· 07-12 23:31
Ах, это перемещение действительно причиняет головную боль.
Solana Web3.js версия 2.x: Значительное обновление модульного дизайна и функционального программирования
Solana Web3.js 2.x версия: совершенно новый опыт функционального программирования
Библиотека Solana Web3.js, являющаяся многофункциональной библиотекой JavaScript, официально выпустила версию 2.x в ноябре этого года. В отличие от версии 1.x, новая версия принесла ряд значительных изменений, и в этой статье будут обобщены ее основные изменения.
Хотя версия 2.x только что была выпущена, и ее использование еще не стало широко распространенным, многие из широко используемых библиотек также еще не были перенесены. Тем не менее, заранее ознакомление с этими изменениями будет очень полезно для будущей миграционной работы.
Сравнение версий
Нельзя отрицать, что старая версия была проще и нагляднее в использовании. Версия 1.x включает только один пакет @solana/web3.js, в котором сосредоточены все функции. Она основана на классовом дизайне и инкапсулирует множество распространённых операций. Например, класс Connection предлагает десятки методов, которые почти полностью охватывают все функции, необходимые разработчикам. Кроме того, обширный примерный код в Solana cookbook также предоставляет разработчикам огромные удобства.
Однако такой дизайн также приносит некоторые проблемы: хотя функционал, который разработчики на самом деле используют, может составлять лишь небольшую часть, вся кодовая база будет загружена на устройство пользователя. Из-за большого объема кода библиотеки это может привести к определенному времени загрузки.
В отличие от этого, версия 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 являются асинхронными. Тем не менее, для разработчиков JavaScript, знакомых с Promise, это изменение не должно быть трудным для адаптации.
Отправить транзакцию
Классы Transaction и VersionedTransaction в версии 1.x больше не существуют в 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({ fromPubkey: отправитель, toPubkey: получатель, lamports: сумма })) );
const signature = ожидать sendAndConfirmTransaction(rpc, транзакции, [senderKeypair]);
Можно заметить, что транзакции больше не инициируются через Connection, а создаются с помощью определенного нами RPC Provider, который генерирует конкретную функцию, а затем вызывается эта функция для инициации транзакции. По сравнению с версией 1.x количество кода увеличилось, но настраиваемость стала более высокой.
Торговля инициируется через HTTPS RPC, а затем подтверждается через подписку на WSS RPC для получения результатов торговли. Можно почувствовать, что новый способ сильно зависит от WSS, и в будущем применение WSS будет становиться все более широким, что также выдвигает более высокие требования к стабильности услуг поставщиков RPC.
React поддержка
Стоит отметить, что проект @solana/web3.js также включает библиотеку под названием @solana/react, которая предоставляет несколько React Hook и включает функции, такие как signIn.
Итог
Выпуск версии 2.x @solana/web3.js демонстрирует приверженность команды Solana к постоянному развитию и улучшению. Новая версия предоставляет разработчикам эффективный, гибкий и настраиваемый способ взаимодействия с сетью Solana, что, как ожидается, будет способствовать принятию и развитию этой платформы.