Розробка авторизації через Phantom (Solana) під ключ

Розробка авторизації через Phantom (Solana) При вході в Solana dApp користувач стикається з проблемою: традиційні email+password не працюють у Web3. Phantom-гаманець пропонує аутентифікацію через підпис повідомлення Ed25519, але реалізація приховує підводні камені. Неправильне кодування повідомле

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Розробка авторизації через Phantom (Solana)

При вході в Solana dApp користувач стикається з проблемою: традиційні email+password не працюють у Web3. Phantom-гаманець пропонує аутентифікацію через підпис повідомлення Ed25519, але реалізація приховує підводні камені. Неправильне кодування повідомлення, вразливість replay attack, несумісність з різними гаманцями — часті помилки. Ми розберемо, як впровадити Phantom auth із захистом від цих загроз, і розповімо про нашу роботу під ключ. Економія від правильної реалізації є значною за рахунок запобігання витокам і зломам.

Які проблеми вирішуємо

Головна технічна складність — інтеграція з різними Solana-гаманцями (Phantom, Solflare, Backpack) через єдиний інтерфейс. Без wallet-adapter доводиться писати окремий код для кожного провайдера. Друга проблема — безпека: Solana використовує Ed25519Ed25519, а не ECDSA як Ethereum, тому стандартний SIWE не підходить. Третя — захист від replay-атак: якщо не додати nonce та часову мітку, зловмисник може перехопити підпис і аутентифікуватися повторно. Наш підхід вирішує ці проблеми, а також покриває edge-кейси: зміну гаманця під час сесії, відхилення підпису користувачем, закінчення терміну дії nonce.

Як ми реалізуємо Phantom auth

Ми використовуємо сучасний стек: @solana/wallet-adapter-react v0.15, @solana/web3.js v1.73, tweetnacl v1.0.3 для верифікації підписів. Нижче наведено приклад фронтенд-частини з підключенням кількох гаманців.

Phantom Provider API

Phantom інжектує window.solana при встановленні розширення. Сучасний підхід — використовувати @solana/wallet-adapter-react для unified інтерфейсу.

import { useWallet } from '@solana/wallet-adapter-react'; import { WalletMultiButton } from '@solana/wallet-adapter-react-ui'; function SolanaAuth() { const { publicKey, signMessage, connected } = useWallet(); const handleSignIn = async () => { if (!publicKey || !signMessage) return; // Отримати nonce від backend const { nonce } = await fetch('/api/solana-nonce').then(r => r.json()); // Сформувати message const message = `Sign this message to authenticate with our app.\n\nNonce: ${nonce}`; const messageBytes = new TextEncoder().encode(message); // Підписати (відкриє Phantom popup) const signature = await signMessage(messageBytes); // Відправити на backend await fetch('/api/solana-verify', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ publicKey: publicKey.toBase58(), signature: Buffer.from(signature).toString('base64'), message }) }); }; return ( <> <WalletMultiButton /> {/* Готова кнопка з Phantom */} {connected && <button onClick={handleSignIn}>Sign In</button>} </> ); } 

Backend верифікація Ed25519

Solana використовує Ed25519, верифікація через tweetnacl:

import { PublicKey } from '@solana/web3.js'; import nacl from 'tweetnacl'; import bs58 from 'bs58'; async function verifySolanaSignature( publicKeyBase58: string, message: string, signatureBase64: string ): Promise<boolean> { try { const publicKey = new PublicKey(publicKeyBase58); const messageBytes = new TextEncoder().encode(message); const signatureBytes = Buffer.from(signatureBase64, 'base64'); // Ed25519 верифікація через nacl return nacl.sign.detached.verify( messageBytes, signatureBytes, publicKey.toBytes() ); } catch { return false; } } 

Wallet Adapter: підтримка кількох гаманців

import { PhantomWalletAdapter, SolflareWalletAdapter } from '@solana/wallet-adapter-wallets'; const wallets = [ new PhantomWalletAdapter(), new SolflareWalletAdapter(), // BackpackWalletAdapter, etc. ]; // Провайдер підтримує всі гаманці <WalletProvider wallets={wallets} autoConnect> <YourApp /> </WalletProvider> 

Phantom auth — 1-2 дні для backend + frontend інтеграції. Єдиний інтерфейс через wallet-adapter дозволяє підтримувати кілька Solana гаманців одним кодом.

Чому важливо використовувати nonce і як це працює?

Nonce — це одноразовий випадковий ідентифікатор, який сервер додає в повідомлення. Без нього підпис можна використовувати повторно. Ми генеруємо nonce за допомогою crypto.randomBytes(32) на сервері, зберігаємо в БД з позначкою часу і обмежуємо термін дії (зазвичай 5 хвилин). Після успішної верифікації nonce видаляється, що виключає повторне використання. Такий захист знижує ризик злому на 99% і дозволяє уникнути значних фінансових втрат.

Як вибрати гаманець для інтеграції?

При виборі гаманця орієнтуйтеся на підтримку WalletAdapter та аудиторію. Phantom — лідер з 10M+ користувачів, Solflare зручний для апаратних гаманців, Backpack — для розробників. Наш wallet-adapter дозволяє легко перемикатися між ними без зміни коду авторизації.

Порівняння методів аутентифікації: Phantom vs Solflare vs Backpack

Характеристика Phantom Solflare Backpack
Встановлення 10M+ 5M+ 1M+
Підтримка window.solana так так так
Wallet Adapter так так так
Апаратна підтримка Ledger Ledger, Trezor ні
Мультичейн Solana, Ethereum, Polygon Solana, Ethereum Solana

Phantom залишається лідером за зручністю та функціональністю, але Solflare перевершує його за підтримкою апаратних гаманців. Наш wallet-adapter дозволяє легко перемикатися між ними без зміни коду авторизації.

Процес роботи: етапи та строки

Етап Що робимо Строк
1. Аналітика Вивчаємо ваш dApp, визначаємо вимоги до auth 1 день
2. Проєктування Розробляємо архітектуру, схему nonce, підпис 1 день
3. Реалізація Пишемо фронтенд (React/Next) + backend (Node/Go) 2-3 дні
4. Тест Покриваємо unit-тестами, перевіряємо безпеку 1 день
5. Деплой Налаштовуємо CI/CD, розгортаємо на mainnet 1 день

Базова інтеграція займає 1–2 дні, складні сценарії (multi-sig, кастомні повідомлення) — до 5 днів. Вартість розраховується індивідуально. Отримайте консультацію по вашому проєкту — ми оцінимо складність і запропонуємо рішення.

Що входить у роботу під ключ?

  • Документація: опис архітектури, інструкція з розгортання.
  • Доступи: код у вашому репозиторії, налаштування CI/CD.
  • Навчання: сесія для вашої команди з підтримки та модифікації.
  • Підтримка: гарантія 1 місяць на усунення багів.

Наша команда має понад 5 років досвіду в Solana розробці та брала участь в аудиті контрактів на $50M+ TVL. Ми гарантуємо безпеку вашого dApp. Зверніться до нас для оцінки проєкту — реалізуємо інтеграцію під ключ за 1-3 дні. Замовте консультацію прямо зараз.