Ф'ючерси
Сотні безстрокових контрактів
TradFi
Золото
Одна платформа для світових активів
Опціони
Hot
Торгівля ванільними опціонами європейського зразка
Єдиний рахунок
Максимізуйте ефективність вашого капіталу
Демо торгівля
Вступ до ф'ючерсної торгівлі
Підготуйтеся до ф’ючерсної торгівлі
Ф'ючерсні події
Заробляйте, беручи участь в подіях
Демо торгівля
Використовуйте віртуальні кошти для безризикової торгівлі
Запуск
CandyDrop
Збирайте цукерки, щоб заробити аірдропи
Launchpool
Швидкий стейкінг, заробляйте нові токени
HODLer Airdrop
Утримуйте GT і отримуйте масові аірдропи безкоштовно
Launchpad
Будьте першими в наступному великому проекту токенів
Alpha Поінти
Ончейн-торгівля та аірдропи
Ф'ючерсні бали
Заробляйте фʼючерсні бали та отримуйте аірдроп-винагороди
Інвестиції
Simple Earn
Заробляйте відсотки за допомогою неактивних токенів
Автоінвестування
Автоматичне інвестування на регулярній основі
Подвійні інвестиції
Прибуток від волатильності ринку
Soft Staking
Earn rewards with flexible staking
Криптопозика
0 Fees
Заставте одну криптовалюту, щоб позичити іншу
Центр кредитування
Єдиний центр кредитування
Центр багатства VIP
Преміальні плани зростання капіталу
Управління приватним капіталом
Розподіл преміальних активів
Квантовий фонд
Квантові стратегії найвищого рівня
Стейкінг
Стейкайте криптовалюту, щоб заробляти на продуктах PoS
Розумне кредитне плече
New
Кредитне плече без ліквідації
Випуск GUSD
Мінтинг GUSD для прибутку RWA
Серія для новачків Web3: Натискання на MetaMask випадково викликає інші гаманці? Стан поточних рішень конфліктів гаманців
Переляк при виклику гаманця
Підключення гаманця є ключовим кроком для входу в світ Web3, користувачі Web3 часто повинні підключати гаманець на деяких веб-сайтах DApp. Проте, навіть ця проста дія може спричинити серйозні незручності для користувачів.
Підключити гаманець
Уявіть такий сценарій: новачок користувач Web3 (з цікавості він встановив багато різних гаманців-розширень) відвідує певний веб-сайт DApp і хоче підключити його за допомогою свого розширення гаманця в браузері, але коли вони натискають кнопку “Підключити гаманець”, яку надає веб-сайт, і обирають гаманець, щоб підключитися до DApp, вони можуть помітити, що з’явився не той гаманець, який вони обрали. Це ймовірно спричинить паніку та відчуття придушеності, і вони можуть подумати, що їх комп’ютер заражений вірусом, і саме тому він виконує непередбачені дії.
Блокчейн Гаманець - це важливий вхід до блокчейну, а для зайняття цього входу кожен гаманець використовує різні способи, які вони можуть придумати. Одним з найбільш головоломними для розробників та користувачів DApp є зміна глобальних змінних гаманцями.
У логіці реалізації поточного браузерного гаманця є можливість надання функціональності гаманця шляхом впровадження глобальної змінної в браузер (наприклад, гаманець платформи Ethereum впроваджує свою функціональність в змінну «ethereum»), щоб DApp міг взаємодіяти з гаманцем, використовуючи надані ним методи.
Просто багато гаманців вводять себе в той самий змінний ethereum, що призводить до того, що гаманець, який був зареєстрований пізніше, заміщує гаманець, який був зареєстрований раніше, таким чином, можна викликати лише останній зареєстрований гаманець за допомогою цього методу.
Іноді користувачі DApp, щоб змогти нормально користуватися бажаною гаманцем, змушені тимчасово вимкнути інші плагіни гаманця або встановити лише один. Це далеко відповідає початковим планам розробників гаманця. Крім того, новий гаманець, навіть якщо він є найкращим, дуже складно залучити користувачів, які вже використовують інші гаманці.
Деякі друзі можуть запитати, чому потрібно вводити в одну змінну? Нехай існують дві гаманці: A і B. Насправді, достатньо того, що A вводить себе в «a», а B вводить себе в «b». Щоб запросити який-небудь гаманець, потрібно викликати відповідний метод у відповідному об’єкті, тоді не виникне проблема, коли викликається A, а відкликається B. Це дійсно може вирішити проблему конкуренції, але проблема полягає в тому, що якщо DApp має підтримувати підключення до кількох гаманців, то всі назви гаманців, які розробник хоче підтримувати, необхідно заздалегідь визначити в коді і при виборі користувачем певного гаманця викликати відповідні його методи. Це призводить до досить складного обслуговування відповідного коду. Якщо ж всі гаманці будуть введені в один об’єкт, то це дозволить уникнути цих проблем.
Рішення
Для виходу з цієї двохвимірної ситуації у спільноті є дві схожі стандарти.
Рішення для Ethereum: EIP-6963
У травні 2023 року Ethereum спільнота запропонувала пропозицію EIP-6963.
Основна логіка проста: замінити глобальні змінні на домовлені події для вирішення питань реєстрації та виявлення гаманців.
Зокрема, після успішного завантаження плагін-гаманця, тригерується подія «eip6963:announceProvider», що повідомляє DApp про наявність нового гаманця. А DApp, в свою чергу, слухає цю подію, щоб дізнатися, які гаманці він може використовувати в даний момент.
Отже, за допомогою абстрактної логіки прослуховування подій уникнуто проблем, які виникають при прямому використанні глобальних змінних, і можна автоматично виявляти доступні у поточному користувацькому середовищі гаманці. Таким чином, дві проблеми вирішені.
Стандарти спільноти: Стандарт гаманця
EIP-6963 є стандартом екосистеми Ethereum, але не лише Ethereum, інші ланцюжкові платформи також матимуть схожі проблеми. Наприклад, гаманці ланцюжка Solana загалом вводять себе в змінну «solana», що також призводить до конфліктів.
Тому чи може екосистема Solana також реалізувати цей стандарт? Хоча EIP-6963 призначений лише для вирішення проблеми виявлення гаманців у екосистемі Ethereum, проте в ньому міститься ідея, яку можна застосувати на будь-якій платформі ланцюгів. Отже, чи можемо ми піти ще далі і надати уніфікований стандарт, який дозволить реалізувати гаманці та DApp на всіх платформах блокчейну, щоб розробники та користувачі всіх ланцюгів могли насолоджуватися зручністю, яку надає EIP-6963? Теоретично це абсолютно можливо, і вже є розробники, які працюють над цим, це Wallet Standard.
Основну роботу, яку виконує Валютний стандарт, полягає в наданні двох функцій: «registerWallet» та «getWallets», перша з яких призначена для гаманця, а друга - для DApp.
Гаманець викликає ‘registerWallet’, передає об’єкт гаманця, на якому упаковані функції, які надає гаманець (наприклад, метод Connect для з’єднання з гаманцем). Усередині функції спочатку спрацьовує подія RegisterWalletEvent, аргументом події фактично є зворотна виклику функція, призначена для того, щоб додаток міг слухати подію RegisterWalletEvent і викликати її, а ця зворотна виклику функція фактично передає об’єкт гаманця, тому додаток може отримати посилання на об’єкт гаманця, і таким чином взаємодіяти з гаманцем.
Розробнику DApp не потрібно писати код для прослуховування та отримання об’єктів гаманця, ця частина вже вбудована в стандарт гаманця у “getWallets”. Але “getWallets” лише прослуховує події, конкретне оброблення подій все ще потрібно вирішити розробнику. Наприклад, куди помістити отримані гаманці? Деякі гаманці можуть завантажуватися до завантаження DApp, тоді як інші можуть завантажуватися пізніше, як утримувати стан цих гаманців? Стандарт гаманця вирішує ці деталі, одночасно надаючи пакет “@wallet-standard/react”, розробники можуть безпосередньо використовувати надані ним React Hooks, щоб отримати потрібні дані, включаючи список гаманців, поточно підключений гаманець, методи, які надає гаманець тощо.
Стандартні функції гаманця
Крім отримання об’єкта гаманця, Wallet Standard також визначає деякі формати функцій.
На самом деле, у гаманців є кілька основних функцій, таких як підключення, слухання подій гаманця тощо. Wallet Standard надає функції, такі як «standard:connect», «standard:events» та інші, після реалізації цих функцій постачальниками гаманців, DApp може безпосередньо визначати, чи підтримує гаманець деякі операції на основі цих значень.
Згаданий вище “standard: " є вбудованою визначеною його особливістю, насправді їх значення не мають особливої жорсткості, тому їх можна розширювати за бажанням. Різні платформи ланцюжків також можуть мати свої унікальні особливості, такі як Solana, домовляються безпосередньо про "solana:”. Загально відомі функції платформи Solana включають «solana:signTransaction», «solana:signMessage» та інші.
Стандарт гаманця 現狀
Наразі фактично небагато проектів, які реалізували стандарт гаманця, варто відзначити Solana та Sui.
У адаптері Solana Ant Design Web3 також підтримується автоматичне виявлення гаманців, які відповідають стандарту гаманця. Розробникам в основному потрібно лише увімкнути параметр «autoAddRegisteredWallets», не виконуючи жодних налаштувань великої кількості метаданих гаманця. Це значно поліпшує враження від розробки та користування для користувачів.
Логіка підключення гаманця ZAN.TOP також стикалася з тим самим проблема на початковому етапі, але зараз, завдяки налаштуванням, наданим Ant Design Web3, це легко адаптувати до стандарту EIP-6963. Ви вже могли відчути це, коли прив’язували адресу до _wxdyh.
Реалізація екосистем блокчейн в різних районах
Наразі різні платформи блокчейн мають різне ставлення до стандарту гаманця (або EIP-6963), ось кілька прикладів:
Біткоїн
Біткойн наразі, здається, не має жодних стандартів, є проект, який реалізував стандарт гаманця, але він не здобув багато уваги, і вже давно не було подано новий код.
Наразі розробникам доводиться вручну підтримувати стан або використовувати деякі пакети для розробки. Наприклад, в реалізації адаптера Bitcoin у Ant Design Web3, для різних гаманців береться з різних глобальних змінних та зберігається в єдиному стані. Практично це означає, що розробники бібліотеки беруть на себе нудну роботу з підтримки стану. Проте, це лише вирішує проблему конфлікту гаманців, а проблеми автоматичного відчуття доступних гаманців все ще залишаються.
Ефіріум
Платформа Ethereum вже має стандарт EIP-6963, більшість відповідних бібліотек та гаманців також надають підтримку.
Solana
Як зазначено вище, офіційно надано реалізацію:
Суї
Наразі Sui вже надає реалізацію для Wallet Standard, використовуючи офіційну документацію можна знайти спосіб використання:
Підтримка бібліотеки розробки DApps
Вагмі
wagmi надає підтримку для EIP-6963 за допомогою бібліотеки mipd (), докладнішу інформацію можна знайти у документації wagmi.
Набір для вишивання
Внутрішня логіка RainbowKit ( ) базується на wagmi, тому вже має вбудовану підтримку EIP-6963.
Мурашиний дизайн Web3
Адаптери Ethereum та Solana Ant Design Web3 дуже добре підтримують обидва стандарти і є дуже зручними для розробників.
Для розробників DApp Ethereum достатньо додати конфігурацію eip6963, зверніть увагу на рядки 23-25, пов’язані з EIP-6963.
А якщо ви розробник додатків для екосистеми Solana, то спосіб схожий. Він надає властивість autoAddRegisteredWallets:
Заключення
EIP-6963 та стандарт гаманця можуть значно поліпшити користувацький досвід підключення гаманця, знизити поріг входу для нових постачальників гаманця. Сподіваємося, що в майбутньому буде більше платформ ланцюгів, розробників гаманців та DApp, які зможуть надавати або впроваджувати відповідні стандарти, це сприятиме розвитку Web3 в кращому напрямку.
Цю статтю написав gin-lsl з команди ZAN (Офіційний акаунт X @zan_team).