Solana Web3.js 2.x версия: новая глава функционального программирования
Библиотека Solana Web3.js, являясь функционально насыщенной JavaScript-библиотекой, официально выпустила версию 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 { createSolanaRpc } из '@solana/web3.js';
В этой новой версии, когда мы вызываем 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 { getTransferSolInstruction } из '@solana/system-program';
import { createSolanaRpc } из '@solana/web3.js';
Можно увидеть, что транзакция больше не инициируется через 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 или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
18 Лайков
Награда
18
8
Репост
Поделиться
комментарий
0/400
CommunityJanitor
· 08-10 07:13
Почему это так медленно итерируется?
Посмотреть ОригиналОтветить0
ProposalManiac
· 08-09 22:16
Есть прогресс, но этого недостаточно радикально
Посмотреть ОригиналОтветить0
GhostChainLoyalist
· 08-09 07:05
2.0 все еще медленно. Когда вы научитесь следить за обновлением версий весь день?
Посмотреть ОригиналОтветить0
PanicSeller69
· 08-07 19:20
Какое значение имеет обновление? Всё равно нужно менять библиотеку.
Посмотреть ОригиналОтветить0
MemeCoinSavant
· 08-07 07:47
основываясь на af, солана подтверждает статистическую значимость в эволюции web3, честно говоря
Посмотреть ОригиналОтветить0
FarmHopper
· 08-07 07:46
Неужели все еще используют 1.x, тьфу-тьфу.
Посмотреть ОригиналОтветить0
ThreeHornBlasts
· 08-07 07:45
Разработчики партии, как же долго мы будем ждать.
Посмотреть ОригиналОтветить0
ZkProofPudding
· 08-07 07:43
Так вкусно~ Обновление произошло с опозданием на полгода.
Выпуск 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 предоставляет десятки методов, которые практически охватывают все функции, необходимые разработчикам.
Однако такой дизайн также приводит к некоторым проблемам. Несмотря на то, что фактически используемые разработчиками функции могут быть лишь небольшой частью, весь код библиотеки будет загружен на устройство пользователя, что может привести к увеличению времени загрузки.
Версия 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 { createSolanaRpc } из '@solana/web3.js';
const rpc = createSolanaRpc(');
// Используйте rpc для отправки транзакции const signature = ожидание rpc.sendAndConfirmTransaction(transaction);
В этой новой версии, когда мы вызываем 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 { getTransferSolInstruction } из '@solana/system-program'; import { createSolanaRpc } из '@solana/web3.js';
const rpc = createSolanaRpc(');
Константная транзакция = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ от: senderPublicKey, кому: recipientPublicKey, amount: transferAmount, })) );
const signature = ожидание rpc.sendAndConfirmTransaction(transaction);
Можно увидеть, что транзакция больше не инициируется через 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, что способствует принятию и развитию платформы.