Інтеграція з 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+ проєктів.







