Разработка платформы децентрализованного краудфандинга для создателей
Mirror.xyz собрал $10M для независимых авторов через NFT-based crowdfunding ещё в 2021-м. Юникальность подхода: вместо Kickstarter-модели с обещаниями, авторы продают долю от будущего revenue или выпускают NFT, дающие доступ к контенту. Децентрализованная платформа краудфандинга — это не просто «Kickstarter на блокчейне». Это принципиально другая экономическая модель: прозрачное распределение средств через смарт-контракты, verifiable milestones, возврат средств без посредников.
Ключевые механики и их реализация
Campaign контракт: escrow с milestone логикой
Наивная реализация: собрать ETH на адрес создателя. Так не работает в Web3 — пользователи не доверяют неизвестному адресу. Нужен escrow контракт, который держит средства и освобождает их только при выполнении условий.
Архитектура milestone-based escrow:
struct Campaign {
address creator;
uint256 goal; // цель в ETH/токенах
uint256 deadline; // unix timestamp
uint256 raised;
bool goalReached;
Milestone[] milestones;
}
struct Milestone {
string description;
uint256 releaseAmount; // сумма к выплате при достижении
bool completed;
uint256 votes; // голоса бэкеров за подтверждение
uint256 votesAgainst;
}
Вместо автоматического перевода средств при достижении goal — голосование бэкеров по milestone completion. Если 50%+ бэкеров (взвешенных по сумме взноса) подтверждают — escrow отправляет releaseAmount создателю. Если большинство против — средства возвращаются пропорционально взносам.
Этот механизм был реализован в Giveth и The DAO (до хака) — и работает, пока governance активен.
NFT как proof-of-backing и access token
Каждый взнос создаёт NFT (ERC-721 или ERC-1155) для бэкера. NFT несёт метаданные: сумма взноса, дата, ID кампании. Функции NFT:
Access control: контент-платформа проверяет balanceOf(address, campaignId) для открытия эксклюзивного контента. Без NFT — нет доступа.
Revenue sharing: если кампания предполагает royalty от будущих продаж или публикаций, NFT служит claim токеном. Контракт распределяет поступающий ETH пропорционально весу NFT.
Transferability: бэкер может продать позицию на вторичном рынке (OpenSea, Blur). Это создаёт реальную ликвидность для crowd-financing, чего нет в традиционном краудфандинге.
Стандарт: ERC-1155 предпочтительнее ERC-721 для краудфандинга — один контракт для всех кампаний, более дешёвый mint (batch), поддержка полугрибка (fungible tier внутри кампании при одинаковых взносах).
Refund механизм без доверия
Если кампания не достигла goal к deadline — каждый бэкер может вызвать refund() и получить свои средства обратно. Без посредников, без заявок в поддержку.
Паттерн реализации — pull refund (не push): контракт не отправляет средства автоматически всем бэкерам (gas griefing при тысячах участников). Каждый бэкер сам вызывает refund(), контракт переводит его долю.
function refund(uint256 campaignId) external {
Campaign storage c = campaigns[campaignId];
require(block.timestamp > c.deadline, "Campaign active");
require(!c.goalReached, "Goal was reached");
uint256 amount = contributions[campaignId][msg.sender];
require(amount > 0, "No contribution");
contributions[campaignId][msg.sender] = 0; // CEI паттерн
(bool success,) = msg.sender.call{value: amount}("");
require(success, "Transfer failed");
}
Нулевой баланс перед transfer — это Checks-Effects-Interactions. Без этого: reentrancy через receive() в контракте бэкера.
Платформенный уровень: фабрика кампаний и индексация
Factory + Clone паттерн для газ-эффективного деплоя
Каждая кампания — отдельный контракт. Деплой через new Campaign() стоит 500k–800k gas. На Ethereum mainnet при $2000 ETH и 30 gwei — $30–50 за кампанию. Неприемлемо для indie-авторов.
Решение: EIP-1167 Minimal Proxy (Clone). CampaignFactory деплоит lightweight proxy-клон в 45k gas. Proxy delegatecall в implementation контракт. Стоимость создания кампании — $3–5.
Минус: proxy нельзя апгрейдить отдельно. Все клоны используют одну implementation. Для обновления логики — деплой новой фабрики, старые кампании остаются на старой логике (это не баг, а фича — неизменность завершённых кампаний).
The Graph subgraph для индексации
Платформа с сотнями кампаний требует эффективного поиска и фильтрации. On-chain view функции не масштабируются. Решение — The Graph subgraph, который индексирует события:
type Campaign @entity {
id: ID!
creator: Bytes!
goal: BigInt!
raised: BigInt!
deadline: BigInt!
backers: [Backer!]! @derivedFrom(field: "campaign")
milestones: [Milestone!]! @derivedFrom(field: "campaign")
}
Frontend делает GraphQL запросы к subgraph вместо прямых RPC вызовов. Это позволяет фильтровать кампании по автору, статусу, категории, сортировать по сумме — всё то, что невозможно сделать эффективно on-chain.
Мультивалютный краудфандинг
Принимать только ETH — потеря аудитории. Интеграция ERC-20 (USDC, DAI) через SafeERC20 из OpenZeppelin. Одна кампания = один currency (упрощение escrow логики). Для мультивалютных кампаний — конвертация через Uniswap v3 при взносе.
Важный нюанс: USDC имеет blacklist функциональность — контракт-получатель может быть заблокирован Circle. Для долгосрочных escrow это редкий, но реальный риск. Используйте DAI или USDC с оговоркой в документации.
Модерация и dispute resolution
On-chain arbitration через Kleros
Если бэкеры и создатель не могут прийти к consensus по milestone — нужен арбитраж. Kleros Protocol предоставляет decentralized court: депозит от обеих сторон, случайно выбранные jurors из Kleros PNK стейкеров выносят вердикт, проигравший теряет депозит.
Интеграция через IArbitrable интерфейс: campaign контракт реализует rule(uint256 disputeId, uint256 ruling) — вызывается Kleros после голосования. На основе ruling контракт либо освобождает milestone payment, либо инициирует refund.
Процесс работы
Проектирование механик (3–5 дней): milestone структура, NFT экономика, refund условия, governance параметры (voting quorum, voting period).
Core смарт-контракты (1–1.5 недели): Campaign, CampaignFactory (EIP-1167), MilestoneVoting, RefundEscrow.
NFT и revenue sharing (3–4 дня): ERC-1155 контракт, claim механизм, royalty распределение.
The Graph subgraph (2–3 дня): schema, mappings, деплой на Hosted Service или Decentralized Network.
Frontend интеграция (1–2 недели): wagmi/viem хуки, создание кампании, страница бэкинга с wallet connect, дашборд создателя.
Тестирование (3–5 дней): unit-тесты всех сценариев (success, failure, milestone dispute), fork-тесты на mainnet.
Деплой (2–3 дня): Foundry script, верификация, subgraph деплой.
Итого: 3 недели — 3 месяца в зависимости от набора функций. MVP с базовым краудфандингом без milestone voting — 3–4 недели. Полная платформа с arbitration, revenue sharing NFT и frontend — 2–3 месяца. Стоимость рассчитывается после детализации требований.







