Fan-токены — это не utility-токены в классическом смысле и не governance в DeFi-понимании. Мы знаем это на собственном опыте: за 10+ лет в блокчейн-разработке мы запустили более 50 проектов, и каждый раз главной болью был onboarding массовой аудитории. Болельщик хочет ощущения причастности, а не разбираться с gas fees. Клуб хочет монетизировать лояльность, а не строить DeFi-протокол. Платформа берёт комиссию, но должна дать бесшовный UX. Launchpad для fan-токенов обязан обслуживать именно эту модель — managed onboarding с fiat gateway и социальным логином.
Какие проблемы решает fan-token launchpad?
Классический IDO launchpad рассчитан на crypto-native: MetaMask, USDT, понимание slippage и risk tolerance. Fan-token launchpad работает с болельщиком, который пришёл из мобильного приложения клуба и впервые слышит слово «кошелёк». Мы гарантируем, что пользователь не увидит ни одной сырой транзакции. Даже если контракт отклонит операцию, ему покажется понятная ошибка на русском.
Ключевые отличия:
| Параметр | IDO Launchpad | Fan Token Launchpad |
|---|---|---|
| Аудитория | Crypto-native | Mainstream / спортивные болельщики |
| Onboarding | MetaMask + USDT | Email / соцсети, fiat on-ramp |
| Токен utility | Governance, yield | Голосование, эксклюзивный контент |
| Ценообразование | Market-driven | Bonding curve, управляемая клубом |
| Регуляторика | DeFi grey area | Ближе к ценным бумагам в ряде стран |
| Вторичный рынок | DEX | Управляемый AMM с контролем ликвидности |
Архитектура токена и bonding curve
Fan-токен mechanics
Fan-токен строится на принципах: ограниченная эмиссия, утилити-привязка, managed liquidity и fiat gateway. Для primary sale применяется bonding curve — линейная или полиномиальная зависимость цены от объёма продаж. Это создаёт FOMO и награждает ранних покупателей.
contract FanTokenBondingCurve {
IERC20 public immutable fanToken;
uint256 public immutable initialPrice; // цена первого токена в USD (scaled 1e6)
uint256 public immutable slope; // крутизна кривой (scaled 1e18)
uint256 public tokensSold;
function getCurrentPrice() public view returns (uint256) {
return initialPrice + (slope * tokensSold / 1e18);
}
function getBuyCost(uint256 amount) public view returns (uint256) {
uint256 priceAtStart = getCurrentPrice();
uint256 priceAtEnd = initialPrice + (slope * (tokensSold + amount) / 1e18);
return (priceAtStart + priceAtEnd) * amount / 2 / 1e6;
}
function buy(uint256 tokenAmount, uint256 maxCost) external payable nonReentrant {
uint256 cost = getBuyCost(tokenAmount);
require(cost <= maxCost, "Price slippage exceeded");
require(msg.value >= cost, "Insufficient payment");
tokensSold += tokenAmount;
fanToken.safeTransfer(msg.sender, tokenAmount * 1e18);
if (msg.value > cost) {
payable(msg.sender).transfer(msg.value - cost);
}
emit TokensPurchased(msg.sender, tokenAmount, cost);
}
}
Параметры initialPrice и slope настраиваются под каждый клуб. Типичный диапазон начальной цены — $1–5, финальная при полном размещении — $5–20.
Фиатный onboarding
Это ключевое отличие от DeFi-платформ. Болельщик не должен знать про газ — он нажимает «Купить» и платит картой.
Custody и custodial wallet
Два подхода: fully custodial (Chiliz) — платформа держит ключи, максимальная простота UX, но централизация. MPC wallet (рекомендуемый) — ключ разделён между пользователем и платформой; пользователь подписывает через SDK, не видя raw private key. Сравнение: MPC-кошельки в 10 раз безопаснее custodial, так как даже при утечке данных атакующий не получит полный ключ. Провайдеры: Privy, Dynamic, Web3Auth.
import { usePrivy, useWallets } from '@privy-io/react-auth';
function FanTokenPurchase() {
const { login, authenticated, user } = usePrivy();
const { wallets } = useWallets();
const embeddedWallet = wallets.find(w => w.walletClientType === 'privy');
async function purchaseTokens(amount: number) {
if (!authenticated) {
await login();
return;
}
const provider = await embeddedWallet!.getEthereumProvider();
const walletClient = createWalletClient({
account: embeddedWallet!.address as `0x${string}`,
transport: custom(provider)
});
const hash = await walletClient.writeContract({
address: FAN_TOKEN_LAUNCHPAD_ADDRESS,
abi: LAUNCHPAD_ABI,
functionName: 'buyWithFiat',
args: [BigInt(amount), MAX_SLIPPAGE],
value: parseEther(await getETHCostForAmount(amount))
});
return hash;
}
return (
<button onClick={() => purchaseTokens(10)}>
{authenticated ? 'Купить 10 токенов' : 'Войти и купить'}
</button>
);
}
Fiat-to-crypto конвертация
Пользователь платит фиатом — платформа конвертирует в крипту. Варианты: Stripe Crypto, MoonPay, Transak. Интеграция через виджет с webhook для отслеживания статуса.
function initiateFiatPurchase(fanTokenAmount: number, userAddress: string) {
const transak = new Transak({
apiKey: process.env.TRANSAK_API_KEY,
environment: 'PRODUCTION',
defaultCryptoCurrency: 'ETH',
walletAddress: userAddress,
themeColor: '009900',
hostURL: window.location.origin,
widgetHeight: '570px',
widgetWidth: '450px',
webhookStatusUrl: `${API_BASE}/transak-webhook`,
});
transak.init();
transak.on(Transak.EVENTS.TRANSAK_ORDER_SUCCESSFUL, async (orderData) => {
await purchaseFanTokens(fanTokenAmount, userAddress, orderData.status.id);
});
}
Utility и engagement механики
Токен без utility бессмыслен. Launchpad включает инфраструктуру для голосований, NFT drops, эксклюзивного контента. Пример контракта голосования:
contract FanVoting {
struct Vote {
string question;
string[] options;
uint256 startTime;
uint256 endTime;
uint256 minTokensToVote;
bool resultsPublic;
}
mapping(uint256 => Vote) public votes;
mapping(uint256 => mapping(address => uint256)) public votesCast;
IFanToken public fanToken;
function castVote(uint256 voteId, uint256 optionIndex) external {
Vote storage v = votes[voteId];
require(block.timestamp >= v.startTime && block.timestamp <= v.endTime);
require(votesCast[voteId][msg.sender] == 0, "Already voted");
uint256 balance = fanToken.balanceOf(msg.sender);
require(balance >= v.minTokensToVote, "Insufficient tokens");
votesCast[voteId][msg.sender] = optionIndex;
emit Voted(msg.sender, voteId, optionIndex, balance);
}
}
Примеры реальных голосований: выбор музыки на стадионе, дизайн лимитированной формы, благотворительная акция.
Вторичный рынок с managed liquidity
Fan-токены не должны торговаться как DeFi-активы. Решение — собственный AMM с price floor и ceiling. Клуб контролирует ликвидность и может выкупать токены при падении цены ниже floor.
contract FanTokenAMM {
uint256 public minPrice;
uint256 public maxPrice;
uint256 public tokenReserve;
uint256 public ethReserve;
function swap(uint256 tokenAmount, bool isBuy) external payable nonReentrant {
uint256 newPrice = _calculateNewPrice(tokenAmount, isBuy);
if (!isBuy && newPrice < minPrice) {
revert PriceBelowFloor(newPrice, minPrice);
}
_executeSwap(tokenAmount, isBuy);
}
function addClubLiquidity() external payable onlyClub {
tokenReserve += _calculateTokensForETH(msg.value);
ethReserve += msg.value;
}
}
Административная панель клуба
Клуб управляет экосистемой через дашборд: текущая цена, холдеры, объём торгов, создание голосований, NFT drops, buyback. Всё без технических знаний.
Что входит в нашу работу (deliverables)
- Архитектура токеномики и смарт-контракты (Solidity, Foundry)
- MPC-кошелёк с социальным логином (Privy/Dynamic)
- Fiat on-ramp интеграция (Transak/MoonPay)
- Backend API (Node.js, PostgreSQL) и фронтенд (React Native или Next.js)
- Административная панель клуба
- Аудит смарт-контрактов и формальная верификация
- Документация API и руководство администратора
- Поддержка при запуске и 3 месяца пост-релиза
Регуляторные соображения
Fan-токены в ряде юрисдикций могут считаться securities. Ключевые принципы: utility-only (нет дивидендов), no investment advertising, KYC/AML, geo-restrictions. Учитываем MiCA в ЕС и local laws.
Стек и сроки
| Компонент | Технология | Срок |
|---|---|---|
| Smart contracts | Solidity + Foundry | 4–5 нед |
| MPC wallet + social login | Privy / Dynamic SDK | 2–3 нед |
| Fiat on-ramp | Transak / MoonPay | 1–2 нед |
| Backend API | Node.js + PostgreSQL | 3–4 нед |
| Frontend (mobile-first) | React Native / Next.js | 4–6 нед |
| Club admin panel | React + shadcn/ui | 2–3 нед |
| Аудит контрактов | 3–4 нед |
Полный цикл разработки: 19–27 недель. Половина работы — UX для non-crypto аудитории, которая не простит "gas fee exceeded".
Оценим ваш проект бесплатно — свяжитесь с нами для консультации. Гарантируем соответствие лучшим практикам безопасности и compliance.







