Solana Web3.js 2.x версия: разделение функций и оптимизация производительности
Библиотека Solana Web3.js, обладая богатым функционалом, официально выпустила версию 2.x в ноябре. По сравнению с версией 1.x, новая версия претерпела значительные изменения. В этой статье мы обобщим основные изменения.
Хотя версия 2.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.
Отправить транзакцию
В версиях 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";
импорт {
createSolanaRpc,
отправитьТранзакцию,
setTransactionFeePayer,
создатьТранзакцию,
appendTransactionInstruction,
} из "@solana/web3.js";
По сравнению с версией 1.x, объем кода увеличился, но кастомизация стала более мощной.
Торговля инициируется через HTTPS RPC, а затем подтверждается через подписку на WSS RPC для получения результатов сделки. Новый способ требует большей зависимости от WSS, что также предъявляет более высокие требования к стабильности услуг поставщиков RPC.
Реакт
В проекте @solana/web3.js также есть библиотека под названием @solana/react, которая предоставляет несколько React Hook и включает в себя такие функции, как signIn.
Резюме
Выпуск версии 2.x библиотеки @solana/web3.js демонстрирует приверженность команды Solana к постоянному развитию и улучшению. Он предоставляет разработчикам эффективный, гибкий и настраиваемый способ взаимодействия с сетью Solana, что способствует принятию и развитию этой платформы.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
18 Лайков
Награда
18
7
Поделиться
комментарий
0/400
BlindBoxVictim
· 07-10 20:02
Когда закончится первый проект, тогда и поговорим... Уже устал.
Посмотреть ОригиналОтветить0
ForeverBuyingDips
· 07-10 17:13
Теперь снова нужно搬砖了啊
Посмотреть ОригиналОтветить0
airdrop_huntress
· 07-10 07:51
Обновление прошло так быстро, но этот баг можно исправить?
Посмотреть ОригиналОтветить0
DefiEngineerJack
· 07-10 07:47
*на самом деле* модульность не тривиальна... прирост производительности выглядит многообещающим, но покажи мне бенчмарки, сер
Посмотреть ОригиналОтветить0
GateUser-75ee51e7
· 07-10 07:44
Сол, брат, это снова большое обновление!
Посмотреть ОригиналОтветить0
SelfCustodyIssues
· 07-10 07:41
Что за ужасная оптимизация? Придется переписывать код.
Посмотреть ОригиналОтветить0
GlueGuy
· 07-10 07:28
Ага, обновился, неплохо. Пойду посмотрю, много ли坑.
Выпуск версии 2.x Solana Web3.js: разделение функций и оптимизация производительности
Solana Web3.js 2.x версия: разделение функций и оптимизация производительности
Библиотека Solana Web3.js, обладая богатым функционалом, официально выпустила версию 2.x в ноябре. По сравнению с версией 1.x, новая версия претерпела значительные изменения. В этой статье мы обобщим основные изменения.
Хотя версия 2.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.
Отправить транзакцию
В версиях 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"; импорт { createSolanaRpc, отправитьТранзакцию, setTransactionFeePayer, создатьТранзакцию, appendTransactionInstruction, } из "@solana/web3.js";
const rpc = createSolanaRpc("");
Константная транзакция = pipe( createTransaction(), setTransactionFeePayer(payer.address), appendTransactionInstruction( getTransferSolInstruction({ fromAddress: payer.address, toAddress: получатель, сумма, }) ) );
const signature = ожидать sendTransaction(rpc, транзакции, [payer]);
По сравнению с версией 1.x, объем кода увеличился, но кастомизация стала более мощной.
Торговля инициируется через HTTPS RPC, а затем подтверждается через подписку на WSS RPC для получения результатов сделки. Новый способ требует большей зависимости от WSS, что также предъявляет более высокие требования к стабильности услуг поставщиков RPC.
Реакт
В проекте @solana/web3.js также есть библиотека под названием @solana/react, которая предоставляет несколько React Hook и включает в себя такие функции, как signIn.
Резюме
Выпуск версии 2.x библиотеки @solana/web3.js демонстрирует приверженность команды Solana к постоянному развитию и улучшению. Он предоставляет разработчикам эффективный, гибкий и настраиваемый способ взаимодействия с сетью Solana, что способствует принятию и развитию этой платформы.