Solana Web3.js 2.x версія: значне оновлення функціональної JavaScript бібліотеки
Solana Web3.js як потужна бібліотека JavaScript офіційно запустила версію 2.x у листопаді. У порівнянні з 1.x, нова версія принесла безліч суттєвих змін, у цій статті буде зроблено огляд її основних оновлень.
Незважаючи на те, що версія 2.x тільки-но випущена і наразі використовується не так широко, багато поширених бібліотек ще не були перенесені, але розуміння цих змін є вкрай важливим для майбутньої роботи з міграцією.
Порівняння версій
Безсумнівно, стара версія була більш простою і зрозумілою у використанні. Версія 1.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/web3.js";
import { getTransferSolInstruction } з "@solana/system-program";
Як видно, транзакції більше не ініціюються через 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, що сприяє прийняттю та розвитку цієї платформи. Хоча зараз вона ще на ранній стадії, з переходом більшої кількості проєктів та адаптацією спільноти, можна з упевненістю стверджувати, що версія 2.x відіграватиме ще більшу роль у майбутньому.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
16 лайків
Нагородити
16
5
Репост
Поділіться
Прокоментувати
0/400
GweiWatcher
· 08-09 18:00
Старе, що не оновлюється, проходить
Переглянути оригіналвідповісти на0
TheShibaWhisperer
· 08-09 18:00
Коли нарешті закінчать оновлення, вже набридло.
Переглянути оригіналвідповісти на0
SchrodingerWallet
· 08-09 17:54
Знову доведеться перейматися міграцією,吐了
Переглянути оригіналвідповісти на0
SorryRugPulled
· 08-09 17:50
І знову оновлення, і потрібно переносити, голова болить.
Важливе оновлення версії 2.x Solana Web3.js: розділення функцій та підвищення продуктивності без залежностей.
Solana Web3.js 2.x версія: значне оновлення функціональної JavaScript бібліотеки
Solana Web3.js як потужна бібліотека JavaScript офіційно запустила версію 2.x у листопаді. У порівнянні з 1.x, нова версія принесла безліч суттєвих змін, у цій статті буде зроблено огляд її основних оновлень.
Незважаючи на те, що версія 2.x тільки-но випущена і наразі використовується не так широко, багато поширених бібліотек ще не були перенесені, але розуміння цих змін є вкрай важливим для майбутньої роботи з міграцією.
Порівняння версій
Безсумнівно, стара версія була більш простою і зрозумілою у використанні. Версія 1.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/web3.js"; import { getTransferSolInstruction } з "@solana/system-program";
const транзакція = pipe( createTransaction({ версія: 0 }), addInstruction(getTransferSolInstruction({ fromPubkey: відправник, toPubkey: отримувач, lamports: кількість })) );
const signature = await rpc.sendTransaction(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, що сприяє прийняттю та розвитку цієї платформи. Хоча зараз вона ще на ранній стадії, з переходом більшої кількості проєктів та адаптацією спільноти, можна з упевненістю стверджувати, що версія 2.x відіграватиме ще більшу роль у майбутньому.