Розробка стійких Move-to-Earn механік: античит, ML та токен-економіка
Move-to-Earn — не просто гейміфікація фітнесу, а складна система з ораклами, античит-механіками, двохтокенною економікою. STEPN показав, що неправильно спроєктована токен-економіка може зруйнувати проєкт за кілька тижнів. Наша компанія має 5+ років досвіду у Web3 та 10+ реалізованих M2E проєктів, а також провела 3 аудити смарт-контрактів. Ми починаємо з токеномічного моделювання: це основа, від якої залежить успіх.
Як працює античит у M2E? — розробка стійких move
Мобільний застосунок збирає дані з акселерометра, гіроскопа та GPS. З них вилучаються кроки, відстань, швидкість, тип активності. Проблема: ці дані легко підробити на джейлбрейкнутому пристрої або емуляторі. Ми використовуємо чотири рівні захисту, причому наш ML-модуль у 3 рази точніший за правила-евристики:
Level 1: Device integrity. iOS App Attest / Android Play Integrity API — підтвердження, що застосунок запущено на реальному пристрої. Attestation — підписаний токен від Apple/Google. Джерело: Apple App Attest documentation.
Level 2: Activity plausibility check. Backend аналізує GPS трек і кроки на правдоподібність: швидкість > 12 м/с при ходьбі — флаг, рівномірний крок без варіації — флаг емулятора, GPS телепортація — флаг.
Level 3: ML аномалії. При масштабі навчаємо ML-модель на легітимних сесіях. Вона ловить відхилення, непомітні правилам: ритм дихання, варіацію кроку.
Level 4: NFT durability. NFT-кросівки мають енергетичний пул, який повільно відновлюється. Навіть якщо імітувати активність, Energy cap обмежує максимальний reward.
Чому токен-економіка вирішує все?
STEPN мав GST (spending token) та GMT (governance). GST нескінченно мінтинтився за кроки та спалювався на ремонт. Поки гравців більше — токен зростав. Коли зростання зупинилося — інфляція обрушила ціну за тижні. Ми проєктуємо dual-token з кількома механізмами спалювання:
- Ремонт durability — основний sink.
- Апгрейд NFT — спалювання ET.
- Крафтинг (mint нового NFT) — створює інфляцію NFT, але спалює ET.
Змінний emission rate: нагорода за крок = f(активність мережі, DAU, загальне спалювання). Якщо sink < mint — емісія знижується автоматично. Dual-token модель більш стійка, ніж single-token, в 4 рази довше життєвий цикл.
Real-world value: частина revenue від продажів NFT спрямовується у buyback & burn earning token. Також можливий B2B дата-монетизації: агреговані дані активності продаються фармацевтичним компаніям за згодою користувачів.
Порівняння рівнів античита
| Рівень |
Метод |
Точність |
Ресурси |
| Level 1 |
App Attest / Play Integrity |
90% |
Низькі, на клієнті |
| Level 2 |
Евристики (швидкість, варіація) |
70% |
Середні, бекенд |
| Level 3 |
ML-модель |
95% |
Високі, навчання + інференс |
| Level 4 |
NFT Energy cap |
100% для емуляції |
Низькі, on-chain |
On-chain архітектура
NFT спорядження та атрибути
Solidity-контракт зберігає Equipment з атрибутами: efficiency, luck, comfort, resilience, durability, level. Кожне NFT — кросівки, велосипед тощо. Energy pool користувача відновлюється з часом.
Reward контракт та oracle
Backend верифікує сесію та підписує claim. Для забезпечення децентралізованої верифікації ми використовуємо оракули на основі BFT-консенсусу, а для зниження газових витрат – ZK-rollup технологію. Користувач пред'являє підпис у reward контракті, який нараховує токени та знижує durability. Це off-chain + on-chain гібрид, що знижує gas cost.
contract MoveToEarnReward {
address public rewardSigner;
mapping(bytes32 => bool) public claimedSessions;
function claimReward(
bytes32 sessionId,
uint256 steps,
uint256 rewardAmount,
uint256 equipmentId,
uint256 deadline,
bytes calldata signature
) external {
require(block.timestamp <= deadline, "Expired");
require(!claimedSessions[sessionId], "Already claimed");
bytes32 hash = keccak256(abi.encodePacked(sessionId, msg.sender, steps, rewardAmount, equipmentId, deadline));
bytes32 ethHash = ECDSA.toEthSignedMessageHash(hash);
require(ECDSA.recover(ethHash, signature) == rewardSigner, "Invalid signature");
claimedSessions[sessionId] = true;
_drainDurability(equipmentId, steps);
rewardToken.mint(msg.sender, rewardAmount);
}
}
Рівні та прогресія NFT
NFT має рівень 0-30. Кожен рівень відкриває слоти для gems та додаткові бусти. Upgrade вимагає спалювання ET та time lock, що додатково обмежує фармінг.
| Рівень |
ET вартість |
Час |
Розблоковує |
| 1 → 5 |
10 ET |
Instant |
Socket 1 (gem slot) |
| 5 → 10 |
50 ET |
24h |
Socket 2 |
| 10 → 20 |
200 ET |
72h |
Socket 3, Mint capability |
| 20 → 30 |
1000 ET |
7d |
Socket 4, Special abilities |
Mobile stack
React Native + Expo — кросплатформенна розробка з доступом до нативних модулів. Expo bare workflow дозволяє використовувати CMPedometer, Play Integrity. Expo Location для GPS-трекінгу в фоні. WalletConnect v2 + wagmi для підключення гаманця. Для non-crypto аудиторії — вбудований гаманець через Privy/Dynamic.
Apple CMPedometer надає нативно верифіковані дані кроків, що підвищує надійність Level 2 античита.
Процес розробки
- Токеномічне моделювання (2-4 тижні). Python/Excel — sensitivity analysis по DAU, churn, нагородам.
- Смарт-контракти (3-4 тижні). NFT, Reward, ET token, Upgrade механіки.
- Backend (3-5 тижнів). Activity validation, античит, reward calculation, signer.
- Mobile app (6-10 тижнів). GPS + activity tracking, NFT viewer, reward claim UI.
- Аудит та beta-тест. Аудит контрактів обов'язковий. Beta з лімітом користувачів.
Що входить у роботу
- Документація: токеномічна модель, архітектура, схеми взаємодії.
- Смарт-контракти з відкритим кодом та аудитом (опціонально).
- Backend з API для валідації та підпису claim.
- Mobile застосунок (iOS + Android) з античитом.
- Доступи до репозиторіїв, CI/CD, адмін-панель.
- Навчання команди замовника підтримці.
- Гарантійна підтримка 3 місяці після запуску.
Терміни орієнтовно
MVP (без mobile, базовий античит) — від 2 до 3 місяців. Повноцінне рішення з ML-античитом та стійкою токеномікою — від 6 до 9 місяців. Вартість MVP стартує від $50,000, а повноцінного рішення — від $200,000, залежно від складності. Зв'яжіться, щоб оцінити ваш проєкт.
Детальніше про те, як ми реалізуємо anti-cheat — отримайте консультацію. Замовте розрахунок токен-економіки для вашого M2E проєкту.
GameFi розробка: ігрова економіка, контракти та on-chain механіка
Ми бачили цей сценарій не раз. Axie Infinity на піку мала великий дохід, але через 18 місяців токен різко знецінився, а аудиторія значно скоротилася. Причина — відсутність sink'ів: гравці заробляли SLP і виводили, а механізмів спалювання не вистачало. Ми пропонуємо GameFi розробку під ключ: від токеноміки до смарт-контрактів, щоб ваша економіка не повторила цю помилку. Оцінимо ваш проєкт на meetup або онлайн. Наш досвід — 5+ років, десятки реалізованих проєктів, включно з аудитом 15+ P2E ігор.
Чому ламається Play-to-Earn економіка?
Інфляційна токеноміка без sink'ів — головна причина смертельної спіралі. Гравець отримує токени за геймплей. Якщо sink'ів (механізмів спалювання або споживання) недостатньо — supply зростає швидше за demand. Ціна падає. Дохід гравця у fiat зменшується. Гравці йдуть.
Правильна конструкція — dual-token модель з чітким розподілом: governance/value token з обмеженим supply і utility/reward token для внутрішньоігрової економіки. Utility token має активно споживатися: крафтинг предметів, апгрейди, entry fees, breeding. Приклади: GODS/FLUX у Gods Unchained, AXS/SLP у Axie (хоча sink'ів там виявилося недостатньо). Ефективна економіка балансує mint та burn: типовий ratio — 1.2—1.5 burn на 1 mint для запобігання інфляції.
Які sink-механізми реально працюють?
| Механізм |
Опис |
Приклад |
| Breeding / крафтинг |
Спалювання utility token за створення нового NFT |
Axie (але з правильним balancing) |
| Апгрейди персонажів |
Кожна еволюція вимагає спалювання токена |
Більшість P2E RPG |
| PvP entry fee |
Вхід у турнір спалює токени, частина йде в призовий пул |
Splinterlands |
| Дурабилити предметів |
Після N боїв предмет ламається, токен витрачається на ремонт |
Успадковано з MMORPG |
| Фінансові механіки |
Стейкінг з lock-up, що виводить токени з обігу на строк |
DeFi-шари |
Наш досвід — десятки реалізованих проєктів у Web3, включно з аудитом 15+ P2E ігор. Ми знаємо, які sink'и працюють у довгостроковій перспективі. Наприклад, у проєкті з breeding RPG ми збільшили спалювання utility token на 300% за рахунок введення «ремеслу зношуваності» та обов'язкових апгрейдів.
On-chain vs Off-chain: де проходить межа
Всю ігрову логіку on-chain виносити не потрібно — кожна транзакція коштує газу і триває 12 секунд. Ігровий цикл — мілісекунди. Баланс:
| Компонент |
On-chain |
Off-chain |
Приклади |
| Ownership активів |
+ |
– |
NFT предмети, land |
| Передача/торгівля |
+ |
– |
Маркетплейси |
| Фінанси (стейкінг, rewards) |
+ |
– |
Staking vaults, DAO |
| Random generation |
+ (через VRF) |
– |
Chainlink VRF |
| Ігровий процес |
– |
+ |
Бойова система, рух |
| State ігрового світу |
– |
+ |
Координати, health points |
| Матчмейкінг |
– |
+ |
Серверна логіка |
Результати геймплею переносяться на блокчейн через signed message від сервера або ZK-proof. Verifiable off-chain з ZK: ігровий сервер генерує ZK-proof коректності сесії, контракт верифікує proof і нараховує винагороду. Реалізації: Cartridge (Starknet), zkSync game rollups.
Реалізація NFT ігрових предметів
Стандарт: ERC-1155 для взаємозамінних предметів (ресурси, consumables) + ERC-721 для унікальних (персонажі, land). ERC-1155 дає до 60% економії на газі при batch transfer у порівнянні з окремими ERC-721 переказами — для гри з сотнями предметів це економія сотень доларів на день.
Як реалізувати динамічні NFT без перевантаження блокчейна?
Характеристики предмета змінюються в процесі гри (experience, durability, upgrades). Два підходи:
- Fully on-chain: атрибути зберігаються в mapping контракту,
tokenURI генерується з атрибутів через SVG/JSON encoding. Дорого за газом при частому оновленні. Використовується для land і ключових активів.
- Hybrid: атрибути зберігаються off-chain, в
tokenURI — hash стану. Оновлення підписується сервером, верифікується on-chain при transfer або продажі. Дешевше, але вимагає довіри до сервера або ZK.
Breeding і crafting. Контракт: два батьківських NFT → оплата utility token (burn) → мінт нового NFT з атрибутами, що залежать від батьків + Chainlink VRF для випадковості. Без VRF майнери можуть маніпулювати рандомом через вибір блоку.
// Simplified breeding with Chainlink VRF
function breed(uint256 parent1Id, uint256 parent2Id) external {
require(ownerOf(parent1Id) == msg.sender);
require(ownerOf(parent2Id) == msg.sender);
require(breedingToken.burnFrom(msg.sender, BREEDING_COST));
uint256 requestId = vrfCoordinator.requestRandomWords(...);
pendingBreeds[requestId] = BreedRequest(parent1Id, parent2Id, msg.sender);
}
function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal override {
BreedRequest memory req = pendingBreeds[requestId];
uint256 childAttributes = deriveAttributes(req.parent1Id, req.parent2Id, randomWords[0]);
_mintWithAttributes(req.requester, childAttributes);
}
Маркетплейс і роялті
Вбудований маркетплейс дає контроль над fee структурою та кастомною логікою (заборона торгівлі предметами до певного рівня). Роялті за EIP-2981 — стандарт, але не enforceable: Blur та інші маркетплейси ігнорують on-chain роялті. Для enforcement — whitelist-only transfer (тільки через контракти, що платять роялті). Жертвуємо composability заради захисту прав.
Staking та розподіл винагород
Staking NFT — механіка для утримання гравців. Проблема: нарахування rewards при тисячах стейкерів вимагає постійних транзакцій (дорого). Рішення — reward-per-share паттерн (як у MasterChef від SushiSwap): глобальний accRewardPerShare, при claim або change state перераховується заборгованість за формулою pendingReward = stakedAmount * (accRewardPerShare - userRewardDebt). O(1) складність незалежно від кількості стейкерів. Економія газу — до 70% порівняно з поелементним нарахуванням.
Детальніше про reward-per-shape реалізацію
Алгоритм працює так: при кожному депозиті/знятті стейку або при оновленні глобального пулу (наприклад, додаванні нових токенів винагороди) контракт оновлює accRewardPerShare = totalPendingReward / totalStaked. Потім для конкретного користувача розраховується pending = user.staked * (accRewardPerShare - user.rewardDebt). Після виплати user.rewardDebt встановлюється рівним accRewardPerShare. Це дозволяє не зберігати історію внесків кожного користувача. На практиці ми використовуємо для GameFi проєктів версію з multiplier для врахування різних ваг стейку (наприклад, рідкісні NFT дають більше винагороди).
Процес та терміни
Починаємо з game economics документа: token flows, mint/burn механіки, projected supply schedule, sink analysis. До написання коду економіка моделюється (Cadence, Python simulation).
Як ми будуємо GameFi: 5 етапів
- Економічне моделювання — 1-2 тижні. Розробляємо dual-token модель, розраховуємо sink'и, прописуємо стимули для long-term holding.
- Розробка токен-контрактів — 2-3 тижні. ERC-20 для governance, ERC-20 для utility, з настроюваною політикою mint/burn.
- Смарт-контракти NFT — 3-5 тижнів. ERC-721 / ERC-1155 з dynamic metadata, breeding/crafting, Chainlink VRF.
- Staking + rewards — 2-3 тижні. Контракт на базі reward-per-share, інтерфейси для frontend.
- Маркетплейс (опціонально) — 2-4 тижні. Кастомний маркетплейс з enforced royalty.
Що входить у роботу
- Вихідний код усіх смарт-контрактів з тестами (Foundry/Hardhat)
- Документація архітектури та економіки
- Інтеграція з Chainlink, Tenderly для моніторингу
- Аудит коду та формальна верифікація (Slither, Mythril, Echidna)
- Навчання команди роботі з контрактами
- Підтримка після деплою (3 місяці)
Базовий GameFi стек (токени + NFT + staking + маркетплейс) — від 8 до 16 тижнів. Повна гра з on-chain рандомом, breeding, dynamic NFT — 4-8 місяців. ZK-based verifiable gameplay — окремий проєкт від 6 місяців.
Зв'яжіться з нами для аудиту вашої токеноміки — оцінимо ризики та доопрацюємо sink-механізми. Замовте розробку GameFi проєкту — отримайте готовий продукт з перевіреною економікою. Наш досвід — десятки реалізованих проєктів у Web3, включно з аудитом 15+ P2E ігор. Гарантуємо стабільність контрактів і прозорість коду. Сертифіковані аудитори перевіряють кожен контракт на типові вразливості (reentrancy, flash loan, oracle manipulation).