Solana Web3.js версія 2.x: значне оновлення функціонально багатої бібліотеки JavaScript
Бібліотека Solana Web3.js, яка є потужною JavaScript-бібліотекою, офіційно випустила версію 2.x у листопаді цього року. Це оновлення принесло значні зміни, давайте коротко підсумуємо основні оновлення.
Хоча версія 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 є асинхронними. Проте ця зміна є цілком прийнятною, оскільки до кінця 2024 року розробники JavaScript вже дуже добре знайомі з Promise.
відправити транзакцію
Користувачі версії 1.x, напевно, добре знайомі з класами "Transaction" та "VersionedTransaction". Коли ви вперше знайомитесь із Solana, їх взаємозв'язок може викликати деяку плутанину.
У версії 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";
Можна помітити, що транзакції більше не ініціюються через 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
6
Поділіться
Прокоментувати
0/400
RetiredMiner
· 08-01 03:21
Вже в тому віці, а все ще експериментує з новими версіями
Переглянути оригіналвідповісти на0
IntrovertMetaverse
· 07-31 08:40
Швидке оновлення, але ніхто не користується.
Переглянути оригіналвідповісти на0
LeverageAddict
· 07-29 23:23
Забудьте про стару команду проекту
Переглянути оригіналвідповісти на0
OnchainHolmes
· 07-29 23:22
Нарешті дочекалися, втекли, втекли.
Переглянути оригіналвідповісти на0
TokenVelocityTrauma
· 07-29 23:21
Оновлення та інше - це занадто клопітно, прощавайте.
Важливе оновлення версії 2.x Solana Web3.js: модульний дизайн покращує продуктивність і безпеку
Solana Web3.js версія 2.x: значне оновлення функціонально багатої бібліотеки JavaScript
Бібліотека Solana Web3.js, яка є потужною JavaScript-бібліотекою, офіційно випустила версію 2.x у листопаді цього року. Це оновлення принесло значні зміни, давайте коротко підсумуємо основні оновлення.
Хоча версія 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 є асинхронними. Проте ця зміна є цілком прийнятною, оскільки до кінця 2024 року розробники JavaScript вже дуже добре знайомі з Promise.
відправити транзакцію
Користувачі версії 1.x, напевно, добре знайомі з класами "Transaction" та "VersionedTransaction". Коли ви вперше знайомитесь із Solana, їх взаємозв'язок може викликати деяку плутанину.
У версії 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({ від: senderPublicKey, кому: recipientPublicKey, кількість: lamports, })), setComputeUnitLimit(200_000), addSignature(senderSignature) );
const signature = чекати sendAndConfirmTransaction(rpc, transaction);
Можна помітити, що транзакції більше не ініціюються через 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, що сприяє прийняттю та розвитку цієї платформи.