Solana Web3.js 2.x версія: значне оновлення функціональної JavaScript бібліотеки
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 відносно небагато. Крім того, оскільки нова версія має тенденцію до використання вбудованих функцій часу виконання (таких як генерація пар ключів), у документації бракує відповідних описів, що може спантеличити деяких розробників.
Іншою важливою особливістю версії 2.x є відсутність залежностей. Це може бути не надто важливо для багатьох користувачів, але з огляду на атаки на постачальницький ланцюг, які відбулися на версіях @solana/web3.js 1.95.5 та 1.95.6 на початку грудня цього року, зменшення зовнішніх залежностей може значно знизити ймовірність виникнення інцидентів безпеки. З випуском версії 2.x команда розробників Web3.js вирішила більше використовувати вбудовані функції, відмовившись від зовнішніх залежностей і введення Polyfills. Хоча в майбутньому можуть бути зміни, наразі версія 2.x вже усунула всі зовнішні залежності.
Важливі зміни
з'єднати
У версії 1.x клас Connection надає велику кількість методів. А в 2.x використано більш функціональний підхід для реалізації:
Javascript
import { createSolanaRpcApi } з '@solana/web3.js';
// Використання rpc для відправлення транзакції
const sendAndConfirmTransaction = rpc.sendAndConfirmTransaction(/* ... */);
Коли викликається sendAndConfirmTransaction для відправки транзакції, автоматично ініціюється HTTPS запит і встановлюється WSS з'єднання для підписки на стан транзакції, після підтвердження транзакції повертається хеш транзакції.
ключова пара
У версії 2.x класи Keypair та PublicKey, які використовувалися в версії 1.x, більше не існують і були замінені деякими функціями. Наприклад, ви можете використовувати await generateKeyPair() для генерації пари ключів, замість попереднього Keypair.generate().
Новий generateKeyPair повертає Promise, оскільки нова реалізація максимально використовує Web Crypto API JavaScript, використовуючи рідну реалізацію Ed25519. Багато методів Web Crypto API є асинхронними.
надіслати транзакцію
У версії 2.x більше немає класів Transaction і VersionedTransaction. Методи, пов'язані з System Program, також більше не існують, їх потрібно імпортувати з інших місць. Наприклад, інструкцію transfer потрібно викликати через функцію getTransferSolInstruction з @solana-program/system.
Новий версія пропонує форму pipe, яка часто використовується у функціональному програмуванні. Нижче наведено реалізацію функції переказу з версії 1.x за допомогою функції pipe:
Javascript
import { pipe } з '@solana/functional';
import { getTransferSolInstruction } з '@solana/system-program';
імпортувати {
addSignatureToTransaction,
createTransaction,
sendAndConfirmTransaction,
} з '@solana/web3.js';
У порівнянні з версією 1.x, обсяг коду зріс, але можливості налаштування стали більш різноманітними. Транзакції ініціюються через HTTPS RPC, а потім підтверджуються через підписку на WSS RPC.
React підтримка
У проекті @solana/web3.js також є бібліотека під назвою @solana/react, яка надає деякі React Hook, вбудовані функції, такі як signIn.
Підсумок
Випуск версії 2.x @solana/web3.js демонструє рішучість команди Solana в постійному вдосконаленні. Нова версія надає розробникам ефективний, гнучкий і настроювальний спосіб взаємодії з мережею Solana, що має сприяти впровадженню та розвитку цієї платформи.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
13 лайків
Нагородити
13
6
Поділіться
Прокоментувати
0/400
LiquidityHunter
· 3год тому
Оптимізація модуля... але продуктивність все ще обмежена на рівні 85%
Переглянути оригіналвідповісти на0
OnchainFortuneTeller
· 20год тому
Дивлячись на вигляд BTC, це просто шахрай.
Переглянути оригіналвідповісти на0
NoodlesOrTokens
· 20год тому
Нарешті оновлено, тягнучи час
Переглянути оригіналвідповісти на0
SandwichTrader
· 20год тому
Навіщо бігти так швидко? Архітектура знову в паніці?
Випуск Solana Web3.js 2.x: модульний дизайн оптимізує продуктивність та підвищує безпеку
Solana Web3.js 2.x версія: значне оновлення функціональної JavaScript бібліотеки
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 відносно небагато. Крім того, оскільки нова версія має тенденцію до використання вбудованих функцій часу виконання (таких як генерація пар ключів), у документації бракує відповідних описів, що може спантеличити деяких розробників.
Іншою важливою особливістю версії 2.x є відсутність залежностей. Це може бути не надто важливо для багатьох користувачів, але з огляду на атаки на постачальницький ланцюг, які відбулися на версіях @solana/web3.js 1.95.5 та 1.95.6 на початку грудня цього року, зменшення зовнішніх залежностей може значно знизити ймовірність виникнення інцидентів безпеки. З випуском версії 2.x команда розробників Web3.js вирішила більше використовувати вбудовані функції, відмовившись від зовнішніх залежностей і введення Polyfills. Хоча в майбутньому можуть бути зміни, наразі версія 2.x вже усунула всі зовнішні залежності.
Важливі зміни
з'єднати
У версії 1.x клас Connection надає велику кількість методів. А в 2.x використано більш функціональний підхід для реалізації:
Javascript import { createSolanaRpcApi } з '@solana/web3.js';
const rpc = createSolanaRpcApi({ httpКінцева точка: ' wsEndpoint: 'wss://api.mainnet-beta.solana.com', });
// Використання rpc для відправлення транзакції const sendAndConfirmTransaction = rpc.sendAndConfirmTransaction(/* ... */);
Коли викликається sendAndConfirmTransaction для відправки транзакції, автоматично ініціюється HTTPS запит і встановлюється WSS з'єднання для підписки на стан транзакції, після підтвердження транзакції повертається хеш транзакції.
ключова пара
У версії 2.x класи Keypair та PublicKey, які використовувалися в версії 1.x, більше не існують і були замінені деякими функціями. Наприклад, ви можете використовувати await generateKeyPair() для генерації пари ключів, замість попереднього Keypair.generate().
Новий generateKeyPair повертає Promise, оскільки нова реалізація максимально використовує Web Crypto API JavaScript, використовуючи рідну реалізацію Ed25519. Багато методів Web Crypto API є асинхронними.
надіслати транзакцію
У версії 2.x більше немає класів Transaction і VersionedTransaction. Методи, пов'язані з System Program, також більше не існують, їх потрібно імпортувати з інших місць. Наприклад, інструкцію transfer потрібно викликати через функцію getTransferSolInstruction з @solana-program/system.
Новий версія пропонує форму pipe, яка часто використовується у функціональному програмуванні. Нижче наведено реалізацію функції переказу з версії 1.x за допомогою функції pipe:
Javascript import { pipe } з '@solana/functional'; import { getTransferSolInstruction } з '@solana/system-program'; імпортувати { addSignatureToTransaction, createTransaction, sendAndConfirmTransaction, } з '@solana/web3.js';
const transferSol = pipe( // Створити угоду (ix) => createTransaction({ інструкції: [ix] }), // Додати підпис (tx) = > addSignatureToTransaction(tx, signer), // Надіслати та підтвердити транзакцію (signedTx) = > sendAndConfirmTransaction(rpc, signedTx) );
const signature = чекати transferSol( getTransferSolInstruction({ від: відправник, до: отримувача, сума, }) );
У порівнянні з версією 1.x, обсяг коду зріс, але можливості налаштування стали більш різноманітними. Транзакції ініціюються через HTTPS RPC, а потім підтверджуються через підписку на WSS RPC.
React підтримка
У проекті @solana/web3.js також є бібліотека під назвою @solana/react, яка надає деякі React Hook, вбудовані функції, такі як signIn.
Підсумок
Випуск версії 2.x @solana/web3.js демонструє рішучість команди Solana в постійному вдосконаленні. Нова версія надає розробникам ефективний, гнучкий і настроювальний спосіб взаємодії з мережею Solana, що має сприяти впровадженню та розвитку цієї платформи.