Інтеграція з Farcaster
При розробці соціального dApp ви стикаєтеся з дилемою: використовувати централізований API або блокчейн з високими комісіями. Farcaster пропонує третій шлях — децентралізований протокол з off-chain повідомленнями та on-chain ідентифікацією. Farcaster — протокол, де кожна дія не потребує газу, а ідентифікація прив'язана до Ethereum через FID. Ми впровадили його в більш ніж 30 проєктах за декілька років, і тепер ваш проєкт може приєднатися до цієї екосистеми.
Farcaster — децентралізований social protocol з on-chain identity (Ethereum) та off-chain повідомленнями (Hubs). На відміну від Lens, Farcaster пріоритизує швидкість та developer experience: немає газу за кожну дію, немає latency блокчейну для повідомлень. Швидкозростаюча екосистема з Warpcast як основний клієнт. Аутентифікація через SIWF займає 2 секунди, а Frames дозволяють створювати інтерактивні пости без перезавантаження сторінки.
Чому Farcaster краще за Lens?
| Критерій | Farcaster | Lens Protocol |
|---|---|---|
| Gas за дії | Немає (off-chain повідомлення) | Є за кожну транзакцію |
| Developer experience | Висока (Neynar API, Frog) | Середня (підписи на Polygon) |
| Швидкість повідомлень | Миттєва | Залежить від блокчейну |
| Frames (інтерактив) | Вбудована підтримка | Потребує зовнішніх рішень |
| Аутентифікація | SIWF (Sign In With Farcaster) | SIWE (Sign In With Ethereum) |
Farcaster забезпечує в 10 разів менше затримок для повідомлень і не потребує оплати газу за кожну дію, що критично для соціальних застосунків. В реальному проєкті NFT-маркетплейсу ми скоротили час аутентифікації до 2 секунд, а публікація кастів відбувається миттєво.
Як інтегрувати Farcaster в проєкт?
Процес інтеграції складається з чотирьох етапів:
- Аналітика — визначаємо необхідні функції: аутентифікація, Frames, канали, читання даних. Обираємо провайдера Hubs: Neynar (managed, швидкий запуск) або Pinata (самостійний хостинг).
- Проєктування — налаштовуємо signer-ключі Ed25519, обираємо стек: Frog для Frames, @farcaster/auth-kit для SIWF, Neynar API для даних.
- Реалізація — пишемо смарт-контракти (якщо потрібні), серверні обробники, клієнтські хуки. Оптимізуємо gas для on-chain транзакцій через EIP-1559.
- Тестування та деплой — перевіряємо в Warpcast та інших клієнтах, використовуємо емулятор Frog для локальної налагодження, запускаємо навантажувальне тестування.
Ключові компоненти інтеграції
- FID (Farcaster ID): on-chain ідентифікатор на Optimism. Реєстрація один раз, коштує газу. Ми допомагаємо з реєстрацією та управлінням.
- Frames: інтерактивні елементи прямо в стрічці — міні-застосунки всередині постів. Стек: Frog (TypeScript), Open Graph зображення.
- Sign In With Farcaster (SIWF): аутентифікація через Farcaster акаунт — аналог SIWE. Використовуємо @farcaster/auth-kit для React.
- Neynar API: managed Hub API, знімає необхідність запускати власний Hub. Надає публікацію кастів, читання стрічки, пошук користувачів.
Реальний кейс: інтеграція Farcaster для P2P-платформи
Замовник хотів додати соціальні функції у свою P2P-платформу обміну токенів. Основне завдання — аутентифікація через Farcaster та публікація угод у канали. Ми реалізували SIWF з @farcaster/auth-kit за 3 дні, налаштували Neynar API для читання стрічки підписників та створили кастомні Frames для підтвердження угод прямо в стрічці. Користувачі отримали можливість здійснювати обмін без переходу на сайт — все всередині Warpcast. Результат: час аутентифікації скоротився в 5 разів, кількість завершених угод зросла на 40%.
Приклад реалізації Frames
import { Frog } from "frog"; import { Button, FrameContext } from "frog"; const app = new Frog({ basePath: "/api" }); // Простий frame з мінтингом NFT app.frame("/mint-nft", async (c: FrameContext) => { const { buttonValue, frameData } = c; let status = "ready"; let txHash = ""; if (buttonValue === "mint") { // Ініціюємо мінт транзакцію try { txHash = await mintNFT(frameData?.fid?.toString() ?? ""); status = "minted"; } catch { status = "error"; } } return c.res({ image: ( <div style={{ display: "flex", flexDirection: "column", alignItems: "center" }}> <img src="https://yourapp.com/nft-preview.png" width="400" height="300" /> {status === "minted" && <p>Minted! TX: {txHash.slice(0, 10)}...</p>} {status === "error" && <p>Error minting. Try again.</p>} {status === "ready" && <p>Mint your exclusive NFT</p>} </div> ), intents: [ status === "ready" && <Button value="mint">Mint NFT</Button>, status === "minted" && <Button.Link href={`https://etherscan.io/tx/${txHash}`}>View TX</Button.Link>, ], }); }); Приклад роботи з Neynar API
import { NeynarAPIClient } from "@neynar/nodejs-sdk"; const neynar = new NeynarAPIClient({ apiKey: process.env.NEYNAR_API_KEY! }); // Публікація касту (посту) const cast = await neynar.publishCast( signerUUID, // UUID signer, зареєстрованого через Neynar "Hello Farcaster! #web3", { embeds: [{ url: "https://yourapp.com/post/123" }], channelId: "dev", // публікація в каналі /dev } ); // Отримання стрічки за FID const feed = await neynar.fetchFeed("following", { fid: 12345, limit: 25, cursor: nextCursor, }); // Отримання followers const followers = await neynar.fetchUserFollowers({ fid: 12345 }); // Пошук користувачів const users = await neynar.searchUser("alice", { viewerFid: myFid }); Аутентифікація через SIWF
import { createAppClient, viemConnector } from "@farcaster/auth-client"; const appClient = createAppClient({ ethereum: viemConnector(), }); // Створюємо channel для auth const { channelToken, url, nonce } = await appClient.createChannel({ siweUri: "https://yourapp.com/login", domain: "yourapp.com", }); // Користувач сканує QR код або переходить за посиланням у Warpcast // Після підтвердження — отримуємо статус const status = await appClient.watchStatus({ channelToken }); if (status.data.state === "completed") { const { fid, displayName, pfpUrl, username } = status.data; // Користувач аутентифікований await createUserSession(fid, username); } React хуки для Farcaster
import { AuthKitProvider, useSignIn } from "@farcaster/auth-kit"; function LoginButton() { const { signIn, isLoading, isSuccess, profile } = useSignIn({ onSuccess: (res) => { console.log(`Logged in as ${res.username} (FID: ${res.fid})`); }, }); return ( <button onClick={signIn} disabled={isLoading}> {isLoading ? "Connecting..." : "Sign In with Farcaster"} </button> ); } function App() { return ( <AuthKitProvider config={{ rpcUrl: "https://mainnet.optimism.io", domain: "yourapp.com", siweUri: "https://yourapp.com/login", }} > <LoginButton /> </AuthKitProvider> ); } Які проблеми виникають при інтеграції Farcaster?
- Закінчення строку дії signer-ключів: ключі Ed25519 мають термін дії. Використовуємо TTL-логіку з автоматичним продовженням через Neynar.
- Помилка при публікації касту: часто через невірний signerUUID. Перевіряємо реєстрацію signer через Neynar Dashboard.
- Gas для Frames з транзакціями: оптимізуємо виклики смарт-контрактів, використовуємо EIP-1559 для прогнозованої вартості.
- Несумісність Frames в різних клієнтах: тестуємо в Warpcast, Supercast та через емулятор Frog.
Що входить в роботу?
- Розробка смарт-контрактів (якщо потрібна кастомна логіка)
- Налаштування Neynar API та signer-ключів
- Реалізація SIWF з @farcaster/auth-kit
- Створення Frames з використанням Frog
- Інтеграція каналів та читання стрічки
- Документація коду та інструкція з розгортання
- Технічна підтримка 2 тижні після деплою
- Передача доступів та навчання вашої команди
Замовте інтеграцію Farcaster вже сьогодні, щоб ваше dApp стало частиною швидкозростаючої екосистеми.
Терміни та вартість
| Етап | Тривалість | Результат |
|---|---|---|
| SIWF + базова соціальна стрічка | від 1 тижня | Готова аутентифікація, стрічка підписників |
| Frames з транзакціями | від 1 тижня | Інтерактивні пости з мінтингом / голосуванням |
| Повний набір (SIWF + Frames + канали + кастомні контракти) | від 3 тижнів | Повноцінне соціальне dApp на Farcaster |
Вартість розраховується індивідуально після оцінки проєкту. Отримайте консультацію нашого інженера — зв'яжіться з нами, і ми дамо приблизну оцінку протягом дня.
Ми гарантуємо якість коду та дотримання стандартів безпеки. Довірте інтеграцію професіоналам з досвідом 30+ проєктів.







