Мы проектируем и разрабатываем децентрализованные социальные сети — от интеграции с 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 минут. Свяжитесь с нами, чтобы обсудить детали вашего проекта.







