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

robot
Генерація анотацій у процесі

Solana Web3.js 2.x: Нова глава функціонального програмування

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

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

Порівняння версій

Використання версії 1.x відносно просте, достатньо одного пакету @solana/web3.js, щоб охопити всі функції. Він базується на класовому дизайні, як-от клас Connection, який надає десятки методів, які майже покривають всі функції, необхідні розробникам. Однак цей дизайн також призводить до деяких проблем, таких як надмірний обсяг коду, оскільки навіть якщо розробник використовує лише кілька функцій, вся бібліотека буде завантажена на пристрій користувача.

Версія 2.x використовує інший підхід. Офіційна команда розділила кодову базу на кілька малих модулів, таких як @solana/accounts, @solana/codecs, @solana/rpc тощо. Нова версія відмовилася від реалізації на основі класів і перейшла на використання окремих функцій, що сприяє оптимізації під час побудови коду JavaScript. Невикористаний код буде видалено і не буде завантажений на пристрій користувача. За статистикою офіційних джерел, DApp на основі нової версії зазвичай може отримати 30% оптимізації розміру, а якщо використовувати лише невелику кількість функцій, оптимізація може бути ще вищою.

Ця зміна ставить вищі вимоги до якості документації команди Solana. Як швидко допомогти розробникам знайти потрібні функції стало ключовим питанням. Наразі назви пакетів мають досить хорошу семантику, з назв можна приблизно зрозуміти їх призначення, що в певній мірі знижує складність міграції для розробників.

Однак, оскільки версія 2.x була випущена не так давно, багато проєктів ще не встигли здійснити міграцію. Прикладів версії 2.x на Solana Cookbook також відносно небагато. Нова версія схильна використовувати вбудовані функції виконання (такі як генерація ключових пар), але в документації цього бракує опису, що може збити з пантелику деяких розробників.

Іншою важливою особливістю версії 2.x є нульова залежність. Це може бути неважливим для багатьох користувачів, але, враховуючи атаки на постачальницький ланцюг, які сталися на версіях @solana/web3.js 1.95.5 та 1.95.6 на початку грудня 2023 року, більше зовнішніх вхідних даних і залежностей значно підвищить ймовірність виникнення інцидентів безпеки. З виходом версії 2.x команда розробників вирішила більше використовувати вбудовані функції, скасувавши введення зовнішніх залежностей і Polyfills. Наразі версія 2.x усунула всі зовнішні залежності.

Важливі зміни

з'єднання

У версії 2.x реалізація з'єднання була виконана більш функціональним способом:

Javascript import { createSolanaRpc } з '@solana/web3.js';

const rpc = createSolanaRpc(');

Коли викликається sendAndConfirmTransaction для відправлення транзакції, автоматично ініціюється HTTPS-запит та встановлюється WSS-з'єднання для підписки на статус транзакції, після підтвердження транзакції повертається хеш транзакції.

ключова пара

У версії 2.x класи Keypair і PublicKey були замінені деякими функціями. Наприклад, тепер можна використовувати 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, яка часто використовується в функціональному програмуванні. Нижче наведено приклад реалізації функції переказу з використанням функції pipe:

Javascript import { pipe } з '@solana/functional'; import { getTransferSolInstruction } з '@solana/programs';

const транзакція = pipe( createTransaction({ версія: 0 }), addInstruction(getTransferSolInstruction({ від: senderPublicKey, кому: recipientPublicKey, кількість: лампорти, })) );

const signature = чекати sendAndConfirmTransaction(rpc, транзакції, signers);

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

Підтримка React

У проекті @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.
  • Нагородити
  • 8
  • Поділіться
Прокоментувати
0/400
JustHereForMemesvip
· 07-07 16:50
Цей автомобіль їде трохи агресивно, я не можу навчитися.
Переглянути оригіналвідповісти на0
GweiObservervip
· 07-06 13:21
Підвищення продуктивності yyds
Переглянути оригіналвідповісти на0
OPsychologyvip
· 07-06 03:28
Швидко закручується, хто ще не написав кілька рядків коду?
Переглянути оригіналвідповісти на0
ShibaSunglassesvip
· 07-05 16:48
Нарешті оптимізували, старий ЛКК не працює.
Переглянути оригіналвідповісти на0
MetaverseHobovip
· 07-05 16:46
Нарешті цінні інсайти прийшли
Переглянути оригіналвідповісти на0
GateUser-00be86fcvip
· 07-05 16:43
оновлення web3.js справді прийшло
Переглянути оригіналвідповісти на0
GameFiCriticvip
· 07-05 16:40
Угу, не встигаю за швидкістю розробки SOL.
Переглянути оригіналвідповісти на0
BlockchainDecodervip
· 07-05 16:28
З точки зору функціональної реалізації, підвищення продуктивності має бути в межах 15-20%.
Переглянути оригіналвідповісти на0
  • Закріпити