Випуск важливої версії 2.x Solana Web3.js з модульним дизайном значно підвищує продуктивність

Solana Web3.js 2.x версія: потужна бібліотека JavaScript значне оновлення

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 { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } з '@solana/web3.js';

const rpc = createSolanaRpcApi({ httpКінцева точка: ' wsEndpoint: 'wss://api.mainnet-beta.solana.com', });

const { sendAndConfirmTransaction } = rpc;

У цьому коді, коли ми викликаємо sendAndConfirmTransaction для відправки транзакції, автоматично ініціюється HTTPS запит і встановлюється WSS з'єднання, підписується статус транзакції, і після підтвердження транзакції повертається хеш транзакції.

ключова пара

Частини, пов'язані з публічними та приватними ключами, також зазнали суттєвих змін. Класи Keypair та PublicKey, які часто використовувалися в версії 1.x, більше не існують і були замінені деякими функціями.

Наприклад, можна використовувати await generateKeyPair() для генерації пари ключів, а не попередній Keypair.generate().

Слід зазначити, що новий generateKeyPair повертає Promise, а не безпосередньо пару ключів. Це пов'язано з тим, що нова реалізація максимально використовує Web Crypto API JavaScript, використовуючи рідну реалізацію Ed25519. Багато методів Web Crypto API є асинхронними. Однак ця зміна не є важкою для сприйняття, адже на сьогодні, в кінці 2023 року, розробники JavaScript вже дуже знайомі з Promise.

Відправити транзакцію

Користувачі версії 1.x повинні бути добре знайомі з класами Transaction та VersionedTransaction. У версії 2.x ці два класи більше не існують.

Методи, пов'язані з System Program, які були доступні в старій версії, більше не існують, тому статичні методи класу SystemProgram потрібно імпортувати з інших джерел.

Наприклад, команда transfer тепер потребує виклику функції getTransferSolInstruction з @solana-program/system.

Оскільки класи більше не надаються, Web3.js пропонує функціональну програму, що є поширеною в функціональному програмуванні. Нижче наведено приклад реалізації функції переказу, яка була в версії 1.x з використанням функції pipe:

Javascript import { pipe } з '@solana/functional'; import { getTransferSolInstruction } з '@solana/system-program'; імпорт { addSignatureToTransaction, createTransaction, getBase58SignerFromPrivateKey, getSignatureFromSignedTransaction, getTransactionMessage, signTransaction, } з '@solana/транзакцій';

const транзакція = pipe( createTransaction(), addSignatureToTransaction(getTransferSolInstruction({})), );

const signedTransaction = signTransaction(transaction, [signer]); const підпис = getSignatureFromSignedTransaction(signedTransaction); const message = getTransactionMessage(signedTransaction);

const txid = await sendAndConfirmTransaction({ signedTransaction });

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

SOL2.46%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 8
  • Поділіться
Прокоментувати
0/400
SchrodingerWalletvip
· 4год тому
Нехай про спочатку наступлять на граблі
Переглянути оригіналвідповісти на0
AirdropFatiguevip
· 13год тому
Га, міграція не має великого впливу.
Переглянути оригіналвідповісти на0
DegenGamblervip
· 08-06 03:11
Нарешті підняли до 2.0 ~ просто дивлюсь шоу
Переглянути оригіналвідповісти на0
ser_we_are_ngmivip
· 08-06 01:10
Які переваги у оновлення? Можна користуватися 1.x.
Переглянути оригіналвідповісти на0
LayerHoppervip
· 08-06 01:10
Давненько треба було оновити.
Переглянути оригіналвідповісти на0
PumpAnalystvip
· 08-06 00:55
З технічної точки зору оновлення цієї версії виглядає підозріло, старим невдахам не рекомендується поспішати з оновленням.
Переглянути оригіналвідповісти на0
NotAFinancialAdvicevip
· 08-06 00:52
Це оновлення - чиста метушня.
Переглянути оригіналвідповісти на0
BearMarketBardvip
· 08-06 00:42
Схоже, що прийшли за косою.
Переглянути оригіналвідповісти на0
  • Закріпити