Випуск версії 2.x Solana Web3.js: розділення функцій та оптимізація продуктивності

Solana Web3.js 2.x версія: розділення функцій та оптимізація продуктивності

Бібліотека Solana Web3.js, що є потужним JavaScript-бібліотекою, офіційно випустила версію 2.x у листопаді. У порівнянні з версією 1.x, нова версія зазнала значних змін. У цій статті буде викладено основні зміни.

Хоча версія 2.x тільки що була випущена, використання ще не стало поширеним, багато широко використовуваних бібліотек також не були мігрувані, але розуміння цих змін допоможе в майбутній роботі з міграцією.

Web3 новачок серії: зараз оновіть @solana/web3.js 2.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-з'єднання для підписки на статус транзакції, після підтвердження транзакції повертається хеш транзакції.

ключова пара

Частина, пов'язана з відкритими та закритими ключами, зазнала значних змін. У версії 1.x класів Keypair і PublicKey більше не існує, їх замінили деякі функції.

Наприклад, можна використовувати await generateKeyPair() для генерації ключової пари, а не попередній Keypair.generate().

Новий generateKeyPair повертає Promise, оскільки нова реалізація максимально використовує Web Crypto API JavaScript, використовуючи рідну реалізацію Ed25519. Багато методів Web Crypto API є асинхронними. Однак ця зміна не повинна викликати великих труднощів у JavaScript-розробників, знайомих з Promise.

відправити транзакцію

У версії 2.x більше не існує класів Transaction та VersionedTransaction, які використовувались у версії 1.x.

Методи, пов'язані з System Program, які надавалися в старій версії, більше не існують, статичні методи класу SystemProgram потрібно імпортувати з інших джерел.

Наприклад, команда transfer потребує виклику функції getTransferSolInstruction з @solana-program/system.

Оскільки клас більше не надається, Web3.js пропонує функціональний підхід, що використовується в функціональному програмуванні, у формі pipe. Нижче наведено приклад реалізації функції переказу, яка спочатку була в 1.x, за допомогою функції pipe:

Javascript імпортувати { pipe } з "@solana/functional"; import { getTransferSolInstruction } з "@solana/system"; імпортувати { createSolanaRpc, sendTransaction, setTransactionFeePayer, createTransaction, appendTransactionInstruction, } з "@solana/web3.js";

const rpc = createSolanaRpc("");

const транзакція = pipe( createTransaction(), setTransactionFeePayer(payer.address), appendTransactionInstruction( getTransferSolInstruction({ fromAddress: payer.address, toАдреса: одержувач, сума, }) ) );

const signature = чекати sendTransaction(rpc, транзакції, [payer]);

У порівнянні з версією 1.x, обсяг коду зріс, але налаштовуваність стала більшою.

Транзакція ініціюється через HTTPS RPC, а потім підтверджується через підписку на WSS RPC. Новий спосіб має вищу залежність від WSS, що також висуває вищі вимоги до стабільності послуг постачальників RPC.

Реакція

У проекті @solana/web3.js також є бібліотека під назвою @solana/react, яка надає кілька React Hook, вбудовані функції, такі як signIn.

Підсумок

Випуск версії 2.x @solana/web3.js демонструє зобов'язання команди Solana до безперервного розвитку та вдосконалення. Це надає розробникам ефективний, гнучкий і налаштовуваний спосіб взаємодії з мережею Solana, що сприяє впровадженню та розвитку цієї платформи.

Web3 новачок серії: тепер оновіть @solana/web3.js 2.x для відкриття функціонального програмування

Переглянути оригінал
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Нагородити
  • 7
  • Поділіться
Прокоментувати
0/400
BlindBoxVictimvip
· 07-10 20:02
Коли закінчимо перший проект, тоді й поговоримо... вже втомився.
Переглянути оригіналвідповісти на0
ForeverBuyingDipsvip
· 07-10 17:13
Тепер знову потрібно займатися перекладанням.
Переглянути оригіналвідповісти на0
airdrop_huntressvip
· 07-10 07:51
Оновлення таке швидке, але чи можна виправити цей баг?
Переглянути оригіналвідповісти на0
DefiEngineerJackvip
· 07-10 07:47
*насправді* модульність є нетривіальною... підвищення продуктивності виглядає обіцяючим, але покажіть мені бенчмарки, сер
Переглянути оригіналвідповісти на0
GateUser-75ee51e7vip
· 07-10 07:44
сол брате, це знову велике оновлення!
Переглянути оригіналвідповісти на0
SelfCustodyIssuesvip
· 07-10 07:41
Яка жахлива оптимізація, знову доведеться переписувати код.
Переглянути оригіналвідповісти на0
GlueGuyvip
· 07-10 07:28
Ага, он оновлений, нормально. Піду подивлюсь, скільки тут ям.
Переглянути оригіналвідповісти на0
  • Закріпити