Розробка платформи SocialFi
SocialFi — це конвергенція соціальних мереж і DeFi: користувачі володіють своїм контентом і соціальним графом, монетизація вбудована в протокол, а не контролюється платформою. Friend.tech у 2023 році довів product-market fit: більше $50M обсягу торгівлі за перший місяць на простій механіці—купівлі «ключів» доступу до чатів з конкретними користувачами.
Але Friend.tech також продемонстрував проблему: користувачі—спекулянти, а не учасники соціальної мережі. Побудова стійкої платформи SocialFi означає вирішення проблеми, де соціальна цінність і фінансова механіка посилюють, а не заміняють одна одну.
Архітектурні компоненти SocialFi
1. On-chain соціальний граф
Традиційні соціальні мережі зберігають соціальний граф у централізованих базах даних. SocialFi переносить власність графа в блокчейн. Два підходи:
Lens Protocol. Відкритий протокол для соціального графа на Polygon/PoS. Профіль = NFT. Підписка = NFT. Пост (Publication) = запис в блокчейні. Усі дані належать користувачу, будь-який додаток читає граф. Lens v2 додав модулі монетизації: комісія за колекцію, реферальна, валюта.
Farcaster. Децентралізований протокол на Ethereum + Optimism. Акаунти реєструються в блокчейні, повідомлення зберігаються в p2p мережі (Hubs). Значно дешевше за Lens у газі. Активна екосистема: Warpcast—основний клієнт, Frames—інтерактивні NFT-додатки прямо в стрічці.
Користувацький on-chain граф. Для специфічних продуктів—користувацький контракт. Гнучко, але немає готової екосистеми.
// Спрощений on-chain соціальний граф
contract SocialGraph {
struct Profile {
address owner;
string handle; // унікальне ім'я @handle
string metadataURI; // IPFS CID з аватаром, біо тощо
uint256 followerCount;
uint256 createdAt;
}
mapping(uint256 => Profile) public profiles;
mapping(address => uint256) public addressToProfileId;
mapping(uint256 => mapping(uint256 => bool)) public follows;
// follows[followerId][profileId] = true/false
uint256 public nextProfileId = 1;
event ProfileCreated(uint256 indexed profileId, address indexed owner, string handle);
event Followed(uint256 indexed followerId, uint256 indexed profileId);
function createProfile(string calldata handle, string calldata metadataURI)
external returns (uint256 profileId) {
require(addressToProfileId[msg.sender] == 0, "Already has profile");
require(handleToProfileId[handle] == 0, "Handle taken");
profileId = nextProfileId++;
profiles[profileId] = Profile({
owner: msg.sender,
handle: handle,
metadataURI: metadataURI,
followerCount: 0,
createdAt: block.timestamp
});
addressToProfileId[msg.sender] = profileId;
emit ProfileCreated(profileId, msg.sender, handle);
}
function follow(uint256 profileId) external {
uint256 followerId = addressToProfileId[msg.sender];
require(followerId != 0, "Must have profile");
require(!follows[followerId][profileId], "Already following");
follows[followerId][profileId] = true;
profiles[profileId].followerCount++;
emit Followed(followerId, profileId);
}
}
2. Механіки економіки творців
Bonding Curve токени (модель Friend.tech). Кожен творець має свій токен з bonding curve: ціна зростає при покупці, падає при продажу. Власники токену отримують доступ до виключного контенту/чату.
contract CreatorToken {
// Bonding curve: ціна = (supply^2) / CURVE_FACTOR
uint256 constant CURVE_FACTOR = 16000;
mapping(address => uint256) public supply; // supply[creator] = поточний supply
mapping(address => mapping(address => uint256)) public balances; // balances[creator][holder]
uint256 constant PROTOCOL_FEE = 50; // 0.5%
uint256 constant CREATOR_FEE = 50; // 0.5%
function getBuyPrice(address creator, uint256 amount) public view returns (uint256) {
uint256 s = supply[creator];
// Інтеграл: сума від s до s+amount від i=0 до n
return _getPrice(s, amount);
}
function _getPrice(uint256 startSupply, uint256 amount) internal pure returns (uint256) {
uint256 sum1 = startSupply == 0 ? 0 : (startSupply - 1) * startSupply * (2 * startSupply - 1) / 6;
uint256 sum2 = (startSupply + amount - 1) * (startSupply + amount) * (2 * (startSupply + amount) - 1) / 6;
return (sum2 - sum1) * 1 ether / CURVE_FACTOR;
}
function buyTokens(address creator, uint256 amount) external payable {
uint256 price = getBuyPrice(creator, amount);
uint256 protocolFee = price * PROTOCOL_FEE / 10000;
uint256 creatorFee = price * CREATOR_FEE / 10000;
require(msg.value >= price + protocolFee + creatorFee, "Insufficient ETH");
supply[creator] += amount;
balances[creator][msg.sender] += amount;
payable(creator).transfer(creatorFee);
// protocolFee залишається в контракті / йде в казну
}
}
Subscription NFT. Місячна підписка на творця через NFT. Контракт перевіряє закінчення при доступі до контенту. ERC-5643—стандарт для поновлювальних NFT підписок.
Post monetization. Модуль Lens Protocol Collect: користувачі платять за збір (mint копія) посту. Творець отримує доходи. Можна налаштувати: безкоштовна збірка, платна збірка, обмежена видання (тільки N копій).
3. Зберігання контенту
On-chain зберігання контенту—занадто дорого для будь-якого масштабу. Стандартні рішення:
IPFS + Pinning. Контент публікується в IPFS, CID зберігається в блокчейні. Pinning через Pinata / web3.storage / власну ноду гарантує доступність. Проблема: якщо ніхто не пінує—дані зникають.
Arweave. Постійне сховище з одноразовою оплатою. «Заплати один раз, зберігай назавжди» модель. AR токен. Використовується Lens Protocol для метаданих. Bundlr (тепер Irys)—JS SDK для завантаження в Arweave.
Ceramic Network. Мутабельні децентралізовані потоки даних. Дані змінювані (можна редагувати профіль), але історія змін зберігається. Використовується в Orbis (Lens-based соціальний додаток).
// Завантажувати контент в Arweave через Irys
import Irys from '@irys/sdk'
async function uploadPost(content: string, mediaFiles: File[]): Promise<string> {
const irys = new Irys({
url: 'https://node2.irys.xyz',
token: 'ethereum',
key: wallet.privateKey,
})
// Завантажуємо медіа
const mediaUpload = await irys.uploadFolder(mediaFiles)
// Публікуємо пост з IPFS CID медіа
const postData = {
content,
media: mediaUpload.map(m => `ar://${m.id}`),
timestamp: Date.now(),
}
const receipt = await irys.upload(JSON.stringify(postData), {
tags: [
{ name: 'Content-Type', value: 'application/json' },
{ name: 'App-Name', value: 'YourSocialFi' },
]
})
return `ar://${receipt.id}` // зберегти цей URI в блокчейні
}
4. Спільноти з гейтингом токенів
Доступ до контенту, чатів, подій—тільки для власників певних NFT або мінімальної кількості творчих токенів.
// Backend middleware для гейтингу токенів
async function requireTokenAccess(creatorAddress: string, userAddress: string): Promise<boolean> {
const balance = await creatorToken.read.balances([creatorAddress, userAddress])
return balance > 0n
// Або перевірка NFT:
// const nftBalance = await nftContract.read.balanceOf([userAddress])
// return nftBalance > 0n
}
// Real-time чат з гейтингом токенів (Sign-In With Ethereum + перевірка токена)
app.use('/chat/:creatorId', async (req, res, next) => {
const { address } = req.user // з JWT після аутентифікації SIWE
const hasAccess = await requireTokenAccess(req.params.creatorId, address)
if (!hasAccess) return res.status(403).json({ error: 'Token required' })
next()
})
Побудова на Lens Protocol
Lens — найдозріліший соціальний протокол. Використання Lens дає вам готовий соціальний граф без його побудови з нуля.
import { PublicClient, development } from '@lens-protocol/client'
const client = PublicClient.create({ environment: development })
// Отримати профіль
const profile = await client.profile.fetch({ forHandle: 'lens/username' })
// Публікувати пост через Lens
async function createPost(content: string, contentURI: string) {
const result = await client.publication.postOnchain({
contentURI, // ar:// або ipfs:// URI
})
}
// Читати стрічку
const feed = await client.feed.fetch({ where: { for: profile.id } })
Lens App Development Kit надає React hooks: useProfile, useFeed, usePublication. Повноцінна соціальна платформа на Lens без написання графічного контракту—значно швидше.
Компромис Lens: Polygon L1 (тепер переходить на zkSync), газ не нульовий. Для масових користувачів потрібна gasless інтеграція через Lens Dispatcher (Lens платить газ за перевірені додатки).
Farcaster Frames
Frames—інтерактивні додатки прямо в стрічці Farcaster. Пост може містити кнопки, форми, зображення. Користувач взаємодіє, не виходячи з клієнта. Застосування: mint NFT з посту, голосування в опитуваннях, механіка гри прямо в стрічці.
// Frame метаданні (розширення Open Graph)
export const metadata = {
other: {
'fc:frame': 'vNext',
'fc:frame:image': 'https://your-app.com/frame-image.png',
'fc:frame:button:1': 'Mint NFT',
'fc:frame:button:2': 'Share',
'fc:frame:post_url': 'https://your-app.com/api/frame-action',
}
}
// Обробник дій Frame
app.post('/api/frame-action', async (req, res) => {
const { buttonIndex, fid, castId } = req.body.untrustedData
// Перевіряємо через Farcaster Hub
const verified = await verifyFrameMessage(req.body)
if (buttonIndex === 1) {
// Mint NFT для користувача (по fid → ETH адреса)
const userAddress = await getAddressForFid(fid)
await mintNft(userAddress)
return res.json({ image: 'https://your-app.com/minted.png' })
}
})
Економіка платформи
Потоки доходів для творців:
- Комісія торговлі від операцій bonding curve (0.5-2%)
- Платежі за підписку
- Комісії за збір контенту
- Чайові (прямі пожертвування)
Потоки доходів для протоколу:
- Комісія протоколу від кожної операції (0.5-1%)
- Преміум функції (верифікація, розширена аналітика)
- B2B ліцензування
Токен управління. Власники токена управління отримують частку комісій протоколу через staking, беруть участь у голосуваннях DAO (параметри комісій, білих списків програм творців). Створює узгоджені стимули: токен цінний → більше розробників → більше користувачів → більше комісій → токен цінний.
Захист від спаму та опір Sybil
На відкритій платформі без бар'єрів—спам і bot-акаунти. Варіанти захисту:
ETH депозит для створення профілю. Невеликий депозит (0.001-0.01 ETH) при реєстрації, повертається при видаленні. Підвищує вартість атаки Sybil, не блокує реальних користувачів.
Proof of Humanity / Worldcoin. Верифікація унікальності людини. Верифіковані користувачі отримують значок, додатковий доступ або зниження комісії.
Reputation stake. Творець вносить токени як «репутаційний стейк». При поганій поведінці (скарги на спам) стейк може бути скорочено. Аналогічно operator bond в екосистемі restaking.
Стек розробки
| Компонент | Технологія |
|---|---|
| Соціальний протокол | Lens Protocol / Farcaster / користувацький |
| Смарт-контракти | Solidity + Foundry |
| Зберігання контенту | Arweave (Irys) + IPFS (Pinata) |
| Real-time чат | WebSocket + middleware гейтингу токенів |
| Фронтенд | Next.js + wagmi + Lens SDK / @farcaster/hub-web |
| Бекенд | Node.js + PostgreSQL (індексування подій) |
| Індексер | The Graph (subgraph) / Ponder |
| Мобільний | React Native + WalletConnect |
Процес розробки
Стратегія та вибір протоколу (1 тиждень). Будувати на Lens/Farcaster чи користувацький граф? Визначає весь обсяг.
Смарт-контракти (3-5 тижнів). Творчий токен з bonding curve, subscription NFT, механіка збору, токен управління. Аудит—обов'язковий, bonding curve маніпульована при неправильній реалізації.
Бекенд та індексер (3-4 тижні). Subgraph для індексування подій, API для соціальної стрічки, middleware гейтингу токенів, інтеграція IPFS/Arweave.
Фронтенд (4-6 тижнів). Стрічка, профілі, композитор постів, UI торговлі токенів, творча панель керування.
Мобільний (опціонально, 4-6 тижнів). Клієнт React Native з WalletConnect.
MVP на Lens Protocol з базовою монетизацією—2-3 місяці. Повна користувацька платформа SocialFi з власним протоколом—5-8 місяців.







