Интеграция с 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+ проектов.







