Ми проєктуємо та розробляємо децентралізовані соціальні мережі — від інтеграції з 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 хвилин. Зв'яжіться з нами, щоб обговорити деталі вашого проекту.







