Мы проектируем и разрабатываем децентрализованные социальные сети — от интеграции с Lens Protocol до полностью кастомных протоколов. В основе каждого проекта лежит on-chain social graph, обеспечивающий портируемость identity и владение данными. Ошибка на этапе выбора архитектуры может привести к перерасходу бюджета на 30-50%, поэтому мы начинаем с глубокого анализа требований. Например, для одного из проектов мы выбрали Lens Protocol, что позволило запустить MVP за 7 недель вместо 4 месяцев кастомной разработки.
Как выбрать архитектуру для децентрализованной социальной сети?
Выбор протокола диктуется балансом между производительностью и децентрализацией.
- Lens Protocol (Polygon) — всё on‑chain: публикации, лайки, подписки. Каждое действие — транзакция. Gas платится либо пользователем, либо спонсируется через ERC‑4337. Идеально для максимальной interoperability и portable identity. Минус — задержки и газ на L2. Пропускная способность: Lens Protocol обрабатывает до 1000 действий в секунду на Polygon, что в 5 раз больше, чем у типичного кастомного протокола на Ethereum L1.
- Farcaster — identity на Ethereum, контент на Hubs (федеративные серверы). Быстро, без газа за операции, но Hubs теоретически могут фильтровать сообщения.
- Кастомный протокол — полный контроль, но больше времени на аудит и разработку. Масштабирование требует собственных rollup-решений.
Наш опыт: для стартапов с типовой функциональностью (лента, подписки, collect) оптимален Lens Protocol — быстрый запуск за 6–10 недель при готовой инфраструктуре. Если нужна полная независимость от сторонних протоколов или специфическая модерация — строим собственные контракты. Использование готового протокола позволяет сэкономить от 30 до 50 процентов бюджета на разработку смарт-контрактов. Как отмечено в спецификации Lens Protocol, gas sponsoring доступен через ERC-4337, что критично для UX.
Как реализовать интеграцию с Lens Protocol?
import { LensClient, development, production } from "@lens-protocol/client";
const lensClient = new LensClient({
environment: production,
});
// Получение профиля
const profile = await lensClient.profile.fetch({
forHandle: "lens/stani",
});
// Публикация поста
async function createPost(
profileId: string,
content: string,
imageUrl?: string
): Promise<string> {
const metadata = {
$schema: "https://json-schemas.lens.dev/publications/text-only/3.0.0/schema.json",
lens: {
id: uuidv4(),
content,
locale: "en",
mainContentFocus: "TEXT_ONLY",
tags: [],
},
};
const metadataURI = await uploadToIPFS(metadata);
const result = await lensClient.publication.postOnchain({
contentURI: metadataURI,
});
return result.id;
}
Collect механика (монетизация):
const postWithCollect = await lensClient.publication.postOnchain({
contentURI: metadataURI,
openActionModules: [
{
collectOpenAction: {
simpleCollectOpenAction: {
amount: {
currency: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", // WMATIC
value: "1",
},
recipient: creatorAddress,
referralFee: 5, // 5% рефералу
followerOnly: true,
},
},
},
],
});
Lens поддерживает sponsoring через ERC‑4337 — пользователи не платят MATIC. Это мы настраиваем на этапе интеграции.
Создание собственного протокола: смарт-контракты
Если нужна полная независимость, проектируем собственные контракты. Ниже — примеры ключевых компонентов с gas optimization приоритетом.
Identity
contract SocialIdentity is ERC721 {
struct Profile {
string handle;
string metadataURI;
uint256 followerCount;
uint256 followingCount;
uint256 publicationCount;
}
mapping(string => uint256) public handleToTokenId;
mapping(uint256 => Profile) public profiles;
function createProfile(string calldata handle, string calldata metadataURI)
external returns (uint256 tokenId)
{
require(handleToTokenId[handle] == 0, "Handle taken");
require(bytes(handle).length >= 3 && bytes(handle).length <= 31, "Invalid handle length");
tokenId = ++_tokenCounter;
_mint(msg.sender, tokenId);
profiles[tokenId] = Profile({
handle: handle,
metadataURI: metadataURI,
followerCount: 0,
followingCount: 0,
publicationCount: 0,
});
handleToTokenId[handle] = tokenId;
emit ProfileCreated(tokenId, handle, msg.sender);
}
}
Publications
contract Publications {
enum PublicationType { POST, COMMENT, REPOST }
struct Publication {
uint256 profileId;
string contentURI;
PublicationType pubType;
uint256 parentId;
uint256 timestamp;
uint256 collectCount;
uint256 commentCount;
uint256 mirrorCount;
}
mapping(uint256 => Publication) public publications;
function post(uint256 profileId, string calldata contentURI)
external returns (uint256 pubId)
{
require(socialIdentity.ownerOf(profileId) == msg.sender, "Not profile owner");
pubId = ++_publicationCounter;
publications[pubId] = Publication({
profileId: profileId,
contentURI: contentURI,
pubType: PublicationType.POST,
parentId: 0,
timestamp: block.timestamp,
collectCount: 0,
commentCount: 0,
mirrorCount: 0,
});
socialIdentity.incrementPublicationCount(profileId);
emit Posted(pubId, profileId, contentURI);
}
}
Social graph (Follows) реализуется отдельным контрактом с NFT для каждого follow, что обеспечивает уникальность отношений.
Контент и хранение
Публикации хранятся как JSON metadata на IPFS — каждый пост имеет свой CID. Для изменяемых данных (профиль, настройки) используем Ceramic/ComposeDB — децентрализованную базу данных поверх IPFS. Индексацию событий выполняет TheGraph, что даёт быстрые запросы к ленте.
Сравнение архитектур
| Параметр | Lens Protocol | Farcaster | Кастомный протокол |
|---|---|---|---|
| Децентрализация | Высокая | Средняя (Hubs) | Полная |
| Газ для пользователя | Да (может быть спонсирован) | Нет | Да |
| Пропускная способность | ~1000 tx/s | Высокая (off-chain) | Зависит от L2 |
| Сложность разработки | Средняя | Низкая | Высокая |
| Время запуска | 6–10 нед. | 4–8 нед. | 4–6 мес. |
Какие этапы включает разработка?
- Анализ требований и выбор архитектуры (1–2 недели).
- Проектирование смарт-контрактов или выбор готового протокола.
- Разработка контрактов (identity, publications, social graph) при кастомном подходе.
- Интеграция фронтенда с блокчейном через wagmi + viem.
- Настройка индексора (TheGraph) и хранения (IPFS, Ceramic).
- Тестирование (unit, integration, security audit).
- Деплой в mainnet и поддержка.
Почему важен аудит кастомных контрактов?
Собственный протокол — это на 100% кастомный код. Ошибка в контракте identity может заблокировать все аккаунты, а уязвимость в social graph — привести к потере подписчиков. Мы проводим аудит с использованием Slither, Mythril и фаззинг-тестирования Echidna. Без аудита запуск в mainnet недопустим.
Модерация и монетизация
Модерация строится на принципе «label, not delete»: контент не удаляется из протокола, но помечается флагами (подход Bluesky Labeler). Приложения самостоятельно решают, какой контент показывать. Для сообществ можно внедрить DAO-голосование за удаление из индексов.
Монетизация для создателей включает:
- Collect fees — читатели платят за копию поста (каждая транзакция стоит ~0.001 MATIC на Polygon).
- Subscription NFT — ежемесячный пропуск к премиум-контенту.
- Tipping — микроплатежи через L2.
- Token gating — доступ только для держателей указанного NFT.
- Рекламная выручка — протокол распределяет доход между авторами пропорционально просмотрам.
Что входит в работу?
- Смарт-контракты (Identity, Publications, SocialGraph) с полной документацией.
- Фронтенд на Next.js + wagmi + viem.
- Индексер и API для ленты и поиска.
- Хранение на IPFS и Ceramic.
- Юнит- и интеграционное тестирование, отчёт аудита.
- Инструкции по деплою и дальнейшей поддержке.
- Обучение команды заказчика работе с протоколом.
- Месяц пост-деплойной поддержки.
Сроки и стоимость
Сроки варьируются в зависимости от сложности: базовая интеграция Lens Protocol занимает 6–10 недель, кастомный протокол — 4–6 месяцев плюс обязательный security audit. Точную стоимость оцениваем после брифа. Мы реализовали десятки Web3-проектов, гарантируем аудит и сопровождаем после запуска. Закажите предварительную консультацию по архитектуре — это бесплатно и займёт 30 минут. Свяжитесь с нами, чтобы обсудить детали вашего проекта.







