Выпуск Solana Web3.js 2.x: Модульный дизайн повышает производительность и безопасность

Solana Web3.js 2.x версия: более мощная, более оптимизированная производительность

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

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

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

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

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

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

В отличие от этого, версия 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.

Отправить транзакцию

Классы 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-program/system";

Константная транзакция = pipe( createTransaction({ version: 0 }), addInstruction( getTransferSolInstruction({ fromPublicKey, toPublicKey, лампорты, }) ) );

Можно заметить, что транзакции больше не инициируются через 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 для включения функционального программирования

Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 6
  • Поделиться
комментарий
0/400
BrokenDAOvip
· 12ч назад
Обновление крутое, но кто осмелится первым прыгнуть в яму?
Посмотреть ОригиналОтветить0
MetaverseVagabondvip
· 12ч назад
Спокойно, теперь писать код стало приятно.
Посмотреть ОригиналОтветить0
NonFungibleDegenvip
· 12ч назад
бычий af на солане tbh... v2 gonna send it ser
Посмотреть ОригиналОтветить0
GasFeeNightmarevip
· 12ч назад
Глубокой ночью все еще следим за движением газа sol... Когда же он упадет до 1 гвеи?
Посмотреть ОригиналОтветить0
consensus_failurevip
· 12ч назад
незапертый tps
Посмотреть ОригиналОтветить0
BlockImpostervip
· 12ч назад
в блокчейне高级Хакер
Посмотреть ОригиналОтветить0
  • Закрепить