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(');
// Використання rpc для надсилання транзакцій
const signature = await rpc.sendAndConfirmTransaction019283746574839201transaction(;
У цій новій версії, коли ми викликаємо 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. Нижче наведено приклад використання функції pipe для реалізації функціоналу переказу з версії 1.x.
Javascript
import { pipe } з '@solana/functional';
import { getTransferSolInstruction } з '@solana/system-program';
import { createSolanaRpc } з '@solana/web3.js';
Можна побачити, що транзакції більше не ініціюються через 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 для відкриття функціонального програмування])https://img-cdn.gateio.im/webp-social/moments-d3e17fab6bb8c485a8bdac5b1e385273.webp###
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
18 лайків
Нагородити
18
8
Репост
Поділіться
Прокоментувати
0/400
CommunityJanitor
· 08-10 07:13
Чому це так повільно ітерується?
Переглянути оригіналвідповісти на0
ProposalManiac
· 08-09 22:16
Є прогрес, але його ще недостатньо радикально.
Переглянути оригіналвідповісти на0
GhostChainLoyalist
· 08-09 07:05
2.0 все ще повільно. Коли навчимося цілий день стежити за оновленнями версій?
Переглянути оригіналвідповісти на0
PanicSeller69
· 08-07 19:20
Яка користь від оновлення, якщо все одно потрібно міняти бібліотеку?
Переглянути оригіналвідповісти на0
MemeCoinSavant
· 08-07 07:47
на основі af, solana доводить статистичну значущість у еволюції web3, чесно кажучи
Випуск 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(');
// Використання rpc для надсилання транзакцій const signature = await rpc.sendAndConfirmTransaction019283746574839201transaction(;
У цій новій версії, коли ми викликаємо 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. Нижче наведено приклад використання функції pipe для реалізації функціоналу переказу з версії 1.x.
Javascript import { pipe } з '@solana/functional'; import { getTransferSolInstruction } з '@solana/system-program'; import { createSolanaRpc } з '@solana/web3.js';
const rpc = createSolanaRpc###'(;
const транзакція = pipe) createTransaction({ версія: 0 }(, addInstruction)getTransferSolInstruction({ від: senderPublicKey, кому: recipientPublicKey, сума: переказСума, }() );
const signature = await rpc.sendAndConfirmTransaction019283746574839201transaction);
Можна побачити, що транзакції більше не ініціюються через 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 для відкриття функціонального програмування])https://img-cdn.gateio.im/webp-social/moments-d3e17fab6bb8c485a8bdac5b1e385273.webp###