Значне оновлення 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, і те, як швидко розробники можуть знайти необхідні функції, стало ключовою проблемою. На даний момент назви пакетів мають хорошу семантику, з назв можна приблизно зрозуміти їхнє призначення, що в певній мірі знижує складність міграції для розробників.
Однак, через те, що він був випущений нещодавно, багато проєктів ще не завершили міграцію. На Solana Cookbook прикладів для версії 2.x також відносно небагато. Крім того, нова версія має схильність до використання вбудованих функцій часу виконання (таких як генерація ключових пар), але опис цих частин у документації недостатній, що може заплутати розробників.
Іншою важливою особливістю версії 2.x є відсутність залежностей. Ця особливість може бути не дуже важливою для багатьох користувачів, але враховуючи постачальницьку атаку, з якою стикнулися версії @solana/web3.js 1.95.5 та 1.95.6 на початку грудня 2023 року, зменшення зовнішніх вхідних даних та залежностей може значно знизити ймовірність виникнення інцидентів безпеки. З випуском версії 2.x команда розробників Web3.js вирішила більше використовувати вбудовані функції, скасувавши впровадження зовнішніх залежностей і Polyfills. Хоча в майбутньому можливі зміни, наразі версія 2.x вже усунула всі зовнішні залежності.
Важливі зміни
з'єднання
У версії 1.x клас Connection надає безліч методів. А в 2.x реалізовано більш функціональний підхід:
Коли викликається "sendAndConfirmTransaction" для відправки транзакції, автоматично ініціюється HTTPS-запит та встановлюється WSS-з'єднання для підписки на статус транзакції, а після підтвердження транзакції повертається хеш транзакції.
ключова пара
Частина, пов'язана з відкритими та закритими ключами, також зазнала значних змін. Класи Keypair та PublicKey, які використовувалися в версії 1.x, більше не існують, їх замінили деякі функції.
Наприклад, можна використовувати "await generateKeyPair()" для генерації пари ключів, а не попередній "Keypair.generate()".
Варто зазначити, що новий generateKeyPair повертає Promise, а не безпосередньо пару ключів. Це пов'язано з тим, що нова реалізація максимально використовує Web Crypto API JavaScript, використовуючи рідну реалізацію Ed25519. Багато методів Web Crypto API є асинхронними. Проте для знайомих з Promise розробників JavaScript ця зміна не є складною.
надіслати транзакцію
У версії 2.x більше немає класів "Transaction" та "VersionedTransaction".
Методи, пов'язані з 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, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
11 лайків
Нагородити
11
4
Репост
Поділіться
Прокоментувати
0/400
OfflineValidator
· 11год тому
js знову оновився. Хто ще користується 1.x?
Переглянути оригіналвідповісти на0
MoonRocketman
· 11год тому
Оптимізація траєкторії завершена, оновлення двигуна успішне, підготовка до другого запуску До місяця.
Переглянути оригіналвідповісти на0
MissedAirdropAgain
· 11год тому
Піднімайся, поспішаючи піднятися, спочатку розігрій 2.0 Аірдроп
Переглянути оригіналвідповісти на0
WalletDivorcer
· 11год тому
Все ще чекаю на обійми 1.x, не хочу змінювати код.
Важливе оновлення версії 2.x Solana Web3.js: модульний дизайн підвищує продуктивність
Значне оновлення 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, і те, як швидко розробники можуть знайти необхідні функції, стало ключовою проблемою. На даний момент назви пакетів мають хорошу семантику, з назв можна приблизно зрозуміти їхнє призначення, що в певній мірі знижує складність міграції для розробників.
Однак, через те, що він був випущений нещодавно, багато проєктів ще не завершили міграцію. На Solana Cookbook прикладів для версії 2.x також відносно небагато. Крім того, нова версія має схильність до використання вбудованих функцій часу виконання (таких як генерація ключових пар), але опис цих частин у документації недостатній, що може заплутати розробників.
Іншою важливою особливістю версії 2.x є відсутність залежностей. Ця особливість може бути не дуже важливою для багатьох користувачів, але враховуючи постачальницьку атаку, з якою стикнулися версії @solana/web3.js 1.95.5 та 1.95.6 на початку грудня 2023 року, зменшення зовнішніх вхідних даних та залежностей може значно знизити ймовірність виникнення інцидентів безпеки. З випуском версії 2.x команда розробників Web3.js вирішила більше використовувати вбудовані функції, скасувавши впровадження зовнішніх залежностей і Polyfills. Хоча в майбутньому можливі зміни, наразі версія 2.x вже усунула всі зовнішні залежності.
Важливі зміни
з'єднання
У версії 1.x клас Connection надає безліч методів. А в 2.x реалізовано більш функціональний підхід:
Коли викликається "sendAndConfirmTransaction" для відправки транзакції, автоматично ініціюється HTTPS-запит та встановлюється WSS-з'єднання для підписки на статус транзакції, а після підтвердження транзакції повертається хеш транзакції.
ключова пара
Частина, пов'язана з відкритими та закритими ключами, також зазнала значних змін. Класи Keypair та PublicKey, які використовувалися в версії 1.x, більше не існують, їх замінили деякі функції.
Наприклад, можна використовувати "await generateKeyPair()" для генерації пари ключів, а не попередній "Keypair.generate()".
Варто зазначити, що новий generateKeyPair повертає Promise, а не безпосередньо пару ключів. Це пов'язано з тим, що нова реалізація максимально використовує Web Crypto API JavaScript, використовуючи рідну реалізацію Ed25519. Багато методів Web Crypto API є асинхронними. Проте для знайомих з Promise розробників JavaScript ця зміна не є складною.
надіслати транзакцію
У версії 2.x більше немає класів "Transaction" та "VersionedTransaction".
Методи, пов'язані з 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, що сприяє прийняттю та розвитку цієї платформи.