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







