Solana Web3.js 2.x версія: розділення функцій та оптимізація продуктивності
Бібліотека Solana Web3.js, яка є багатофункціональною JavaScript бібліотекою, у листопаді цього року випустила версію 2.x. Нова версія має значні зміни в порівнянні з 1.x, у цій статті будуть узагальнені її основні зміни.
Хоча версія 2.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 реалізує цю функцію більш функціональним способом. Наприклад, коли викликається sendAndConfirmTransaction для відправки транзакції, автоматично надсилається HTTPS запит і встановлюється WSS з'єднання, підписується статус транзакції, і після підтвердження транзакції повертається хеш транзакції.
ключова пара
Частина, що стосується відкритих і закритих ключів, також зазнала значних змін. У версії 1.x більше не існує звичних класів Keypair та PublicKey, їх замінили деякі функції.
Наприклад, можна використовувати 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.
Варто зазначити, що транзакції більше не ініціюються через 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, що сприяє впровадженню та розвитку цієї платформи.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
8 лайків
Нагородити
8
4
Поділіться
Прокоментувати
0/400
SignatureVerifier
· 13год тому
схоже... ще один поспішний реліз, що потребує всебічного аудиту безпеки
Переглянути оригіналвідповісти на0
BearMarketSurvivor
· 13год тому
Чим більше оптимізується продуктивність, тим більше невдах.
Переглянути оригіналвідповісти на0
AlwaysAnon
· 13год тому
О, нарешті оновлення!
Переглянути оригіналвідповісти на0
DefiPlaybook
· 13год тому
Згідно з прогнозом кривої зростання TVL, після оптимізації модульної архітектури 2.x продуктивність зросте на 27,8%.
Важливе оновлення версії 2.x Solana Web3.js: розподіл функцій та оптимізація продуктивності
Solana Web3.js 2.x версія: розділення функцій та оптимізація продуктивності
Бібліотека Solana Web3.js, яка є багатофункціональною JavaScript бібліотекою, у листопаді цього року випустила версію 2.x. Нова версія має значні зміни в порівнянні з 1.x, у цій статті будуть узагальнені її основні зміни.
Хоча версія 2.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 реалізує цю функцію більш функціональним способом. Наприклад, коли викликається sendAndConfirmTransaction для відправки транзакції, автоматично надсилається HTTPS запит і встановлюється WSS з'єднання, підписується статус транзакції, і після підтвердження транзакції повертається хеш транзакції.
ключова пара
Частина, що стосується відкритих і закритих ключів, також зазнала значних змін. У версії 1.x більше не існує звичних класів Keypair та PublicKey, їх замінили деякі функції.
Наприклад, можна використовувати 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.
Варто зазначити, що транзакції більше не ініціюються через 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, що сприяє впровадженню та розвитку цієї платформи.