Solana Web3.js 2.x версія: Огляд розширеної JavaScript бібліотеки
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.
надіслати транзакцію
Користувачі версії 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 { generateKeyPair } з '@solana/web3.js';
import { getTransferSolInstruction } з '@solana/system-program';
import { createTransaction } з '@solana/transactions';
Можна побачити, що транзакції більше не ініціюються через 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 для початку функціонального програмування]###https://img-cdn.gateio.im/webp-social/moments-d3e17fab6bb8c485a8bdac5b1e385273.webp(
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
17 лайків
Нагородити
17
4
Поділіться
Прокоментувати
0/400
BearMarketSurvivor
· 20год тому
Передова звіт: оновлення, здається, розпочалося як перший постріл у порожньому гнізді
Переглянути оригіналвідповісти на0
OPsychology
· 20год тому
Не поспішайте змінювати, поки оновлення ще не стабільне.
Переглянути оригіналвідповісти на0
RugResistant
· 20год тому
хмм виявлено потенційні проблеми безпеки... потрібно провести детальний аудит, якщо чесно
Аналіз оновлення Solana Web3.js 2.0: модульний дизайн підвищує продуктивність і безпеку
Solana Web3.js 2.x версія: Огляд розширеної JavaScript бібліотеки
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.
надіслати транзакцію
Користувачі версії 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 { generateKeyPair } з '@solana/web3.js'; import { getTransferSolInstruction } з '@solana/system-program'; import { createTransaction } з '@solana/transactions';
const транзакція = pipe( createTransaction(), addInstruction(getTransferSolInstruction({ fromPubkey: sender.publicKey, toPubkey: одержувач, Ламппорти: кількість, })), setRecentBlockhash(blockhash), addSigners([sender]) );
const signature = await rpc.sendAndConfirmTransaction019283746574839201transaction(;
Можна побачити, що транзакції більше не ініціюються через 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 для початку функціонального програмування]###https://img-cdn.gateio.im/webp-social/moments-d3e17fab6bb8c485a8bdac5b1e385273.webp(