Версія 2.x Solana Web3.js: значне оновлення модульного дизайну та функціонального програмування

robot
Генерація анотацій у процесі

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 надає десятки методів, які майже повністю охоплюють всі функції, необхідні розробникам. Крім того, багатий код з прикладами в 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: отримувач, Ламппорти: кількість })) );

const signature = чекати sendAndConfirmTransaction(rpc, транзакції, [senderKeypair]);

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

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

Переглянути оригінал
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Нагородити
  • 5
  • Поділіться
Прокоментувати
0/400
RugPullSurvivorvip
· 07-12 23:48
Зміни рівнозначні марним змінам... краще все переписати
Переглянути оригіналвідповісти на0
Degen4Breakfastvip
· 07-12 23:48
Нарешті піднявся.
Переглянути оригіналвідповісти на0
digital_archaeologistvip
· 07-12 23:40
Падіння залежності від хороших відгуків
Переглянути оригіналвідповісти на0
AirdropHunterWangvip
· 07-12 23:32
Це все? Функцій ще недостатньо?
Переглянути оригіналвідповісти на0
metaverse_hermitvip
· 07-12 23:31
О, ця міграція справді дратує.
Переглянути оригіналвідповісти на0
  • Закріпити