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 у написанні документації, і як швидко допомогти розробникам знайти необхідні функції стало важливим питанням. Проте, наразі виглядає так, що назви різних пакетів мають хорошу семантику, з назви можна приблизно зрозуміти їхнє призначення, що певною мірою знижує складність міграції для розробників.
Оскільки нову версію нещодавно випущено, багато проєктів ще не виконали міграцію. Прикладів щодо версії 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.
надіслати транзакцію
У версії 2.x класи Transaction та VersionedTransaction більше не існують у версії 1.x.
У старій версії методи, пов'язані з System Program, більше не існують, тому статичні методи класу SystemProgram потрібно імпортувати з інших джерел.
Наприклад, команда transfer тепер вимагає виклику функції getTransferSolInstruction з @solana-program/system.
Оскільки класи більше не надаються, Web3.js пропонує функціональний стиль програмування у формі pipe. Ось приклад реалізації функції переказу з версії 1.x за допомогою функції pipe:
Javascript
import { pipe } з "@solana/web3.js";
import { getTransferSolInstruction } з "@solana-program/system";
Можна побачити, що транзакції більше не ініціюються через 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, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
21 лайків
Нагородити
21
10
Поділіться
Прокоментувати
0/400
failed_dev_successful_ape
· 07-20 13:15
2.0 дійсно чудово, нарешті дочекалися
Переглянути оригіналвідповісти на0
GateUser-44a00d6c
· 07-20 05:07
Зникли, зникли, нарешті дочекалися оновлення.
Переглянути оригіналвідповісти на0
digital_archaeologist
· 07-20 03:59
Знову прийшов, непогано.
Переглянути оригіналвідповісти на0
nft_widow
· 07-19 21:58
Ця хвиля знову грає з моїм настроєм, так?
Переглянути оригіналвідповісти на0
BrokenDAO
· 07-17 17:49
Оновлення круте, але хто наважиться першим стрибнути в яму?
Переглянути оригіналвідповісти на0
MetaverseVagabond
· 07-17 17:47
Стабільно, тепер писати код стало приємніше.
Переглянути оригіналвідповісти на0
NonFungibleDegen
· 07-17 17:42
бичачий af на солані tbh... v2 відправить це сер
Переглянути оригіналвідповісти на0
GasFeeNightmare
· 07-17 17:39
Глибокої ночі все ще стежу за газом sol... Коли ж він знизиться до 1gwei?
Випуск 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 у написанні документації, і як швидко допомогти розробникам знайти необхідні функції стало важливим питанням. Проте, наразі виглядає так, що назви різних пакетів мають хорошу семантику, з назви можна приблизно зрозуміти їхнє призначення, що певною мірою знижує складність міграції для розробників.
Оскільки нову версію нещодавно випущено, багато проєктів ще не виконали міграцію. Прикладів щодо версії 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.
надіслати транзакцію
У версії 2.x класи Transaction та VersionedTransaction більше не існують у версії 1.x.
У старій версії методи, пов'язані з System Program, більше не існують, тому статичні методи класу SystemProgram потрібно імпортувати з інших джерел.
Наприклад, команда transfer тепер вимагає виклику функції getTransferSolInstruction з @solana-program/system.
Оскільки класи більше не надаються, Web3.js пропонує функціональний стиль програмування у формі pipe. Ось приклад реалізації функції переказу з версії 1.x за допомогою функції pipe:
Javascript import { pipe } з "@solana/web3.js"; import { getTransferSolInstruction } з "@solana-program/system";
const транзакція = pipe( createTransaction({ версія: 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, що сприяє впровадженню та розвитку цієї платформи.