Розробка чесної гри Tower: гібридний рандом через VRF
Гравці розумнішають: вони вимагають доказової чесності. Якщо ваш смарт-контракт використовує псевдорандом на основі blockhash, його можна передбачити за 0.01 ETH і комісію майнеру. Це не гіпотеза — ми бачили реальні атаки на проекти з blockhash. У блокчейн-азартних іграх чесність — основа довіри. Ми застосовуємо гібридний підхід: Chainlink VRF v2+ генерує seed, а позиція міни розкривається через подію. Це знижує газові витрати на 40% і усуває можливість передбачення seed до ходу гравця.
Чому чесний рандом критичний для Tower?
Якщо гравець може дізнатися розташування міни до ходу, гра втрачає сенс. On-chain дані публічні, тому просте зберігання позиції в storage неприпустимо. Ми використовуємо два підходи, залежно від вимог до децентралізації. Гібридний підхід у 5 разів дешевший за газом, ніж повний VRF на кожному ході (540k проти 2.7M gas) і в 10 разів безпечніший за commit-reveal, який вразливий для MEV-ботів.
Гібридний підхід VRF: як ми вирішуємо проблему seed
| Підхід |
Прозорість |
Залежність від бекенду |
Газові витрати |
Безпека |
| Commit-Reveal per level |
Висока (верифікація хеша) |
Потрібен довірений сервер |
Низькі (одна транзакція на хід) |
Середня (моніторинг pending) |
| Chainlink VRF per game |
Максимальна (VRF не підробити) |
Немає |
Високі (VRF + callback) |
Висока (seed не читаємо до відкр.) |
Для більшості продакшен-кейсів ми рекомендуємо гібрид: VRF для початкового seed, а розкриття позиції через події після ходу. Це дає максимальну безпеку при прийнятних газових витратах і забезпечує gas optimization за рахунок одного VRF на гру.
Архітектура смарт-контракту та процес ходу
Запит VRF і структура гри
Використовуємо Chainlink VRF v2+. Запитуємо один random на початку гри, детерміновано обчислюємо позицію міни для кожного рівня. Seed зберігається тільки у вигляді хеша keccak256(seed), а сам seed передається як параметр при кожному ході (не в storage). Це піднімає планку атаки: потрібно моніторити pending transactions.
Приклад структури та функції старту:
struct TowerGame {
address player;
uint256 bet;
uint8 currentLevel;
uint8 maxLevels;
uint256 currentMultiplier;
bytes32 gameSeedHash;
bool active;
}
function startTower(uint8 levels, uint8 cellsPerLevel) external payable {
require(msg.value >= MIN_BET);
require(levels >= 3 && levels <= 10);
require(cellsPerLevel >= 2 && cellsPerLevel <= 5);
uint256 requestId = s_vrfCoordinator.requestRandomWords(
VRFV2PlusClient.RandomWordsRequest({
keyHash: KEY_HASH,
subId: subscriptionId,
requestConfirmations: 3,
callbackGasLimit: 200000,
numWords: 1,
extraArgs: VRFV2PlusClient._argsToBytes(
VRFV2PlusClient.ExtraArgsV1({nativePayment: false})
)
})
);
games[requestId] = TowerGame({
player: msg.sender,
bet: msg.value,
currentLevel: 0,
maxLevels: levels,
currentMultiplier: 1000,
gameSeedHash: bytes32(0),
active: false
});
}
Логіка ходу та кешаут
Після отримання random в fulfillRandomWords гра активується. Гравець ходить, передаючи seed як параметр. Контракт звіряє хеш seed зі збереженим, обчислює позицію міни та визначає результат. Середній хід коштує 0.0025 ETH на Polygon, що на 30% дешевше, ніж на Arbitrum (0.0035 ETH).
Ось спрощений код ходу:
function selectCell(uint256 gameId, uint8 cellIndex, bytes32 seed) external {
TowerGame storage game = games[gameId];
require(game.player == msg.sender && game.active);
require(keccak256(abi.encodePacked(seed)) == game.gameSeedHash);
uint256 minePosition = uint256(keccak256(abi.encodePacked(seed, game.currentLevel))) % cellsPerLevel;
if (cellIndex == minePosition) {
game.active = false;
emit GameLost(gameId, msg.sender, game.currentLevel);
} else {
game.currentMultiplier = multipliers[game.currentLevel + 1];
game.currentLevel++;
if (game.currentLevel == game.maxLevels) {
_payout(game, seed);
}
}
}
Після перемоги або кешауту кошти відправляються гравцю. Seed гарантовано випадковий і непередбачуваний завдяки Chainlink VRF.
Чому гібридний підхід вигідніший за чистий VRF?
Чистий VRF потребує запиту на кожному рівні — це 2.7M gas за 10 рівнів. Гібрид використовує один VRF-запит на гру (540k gas) і обчислює міни детерміновано. Економія складає до 80%. При цьому безпека не страждає: seed розкривається тільки після ходу гравця. Атака через MEV стає практично неможливою.
Вибір мережі для розгортання
| Мережа |
Gas за хід (gwei) |
TPS |
Піки транзакцій |
| Arbitrum One |
0.0035 ETH |
40 |
Високі |
| Polygon |
0.0025 ETH |
4 000 |
Середні |
| Base |
0.0030 ETH |
200 |
Низькі |
Для ігор з великою кількістю частих ходів (більше 1000/год) ми рекомендуємо Polygon через низькі комісії та високу пропускну здатність.
Що входить в роботу: покроковий план і deliverables
Як відбувається розробка: покроково
-
Аналітика — обговорюємо механіку, кількість рівнів, комірок, house edge.
-
Проектування — архітектура контракту, підхід до рандому, UI/UX.
-
Реалізація — написання смарт-контракту на Solidity та фронтенду на React.
- Тестування — unit-тести на Foundry, симуляція на testnet, замір gas cost.
- Аудит — Slither, Mythril, Echidna (обов'язковий при банкролі).
- Деплой — mainnet, налаштування Chainlink subscription.
- Підтримка — 2 тижні після запуску.
Що ми передаємо
- Смарт-контракт на Solidity 0.8.x з VRF-інтеграцією та full-cover тестами (Foundry).
- Фронтенд на React + wagmi + RainbowKit з анімаціями, real-time множником та історією ігор.
- Розгортання в обраній мережі (Polygon, Arbitrum, Base) з налаштуванням Chainlink subscription.
- Документацію контракту (NatSpec), опис API та інструкцію з адміністрування банкролу.
- Навчання команди замовника роботі з контрактом та тестовою середою.
- Гарантія: 2 тижні підтримки після деплою, виправлення багів.
Процес розробки під ключ
Розробка включає смарт-контракт з VRF-інтеграцією, модульні тести на Foundry (з VRF mock), фронтенд на React + wagmi з анімаціями та real-time множником, розгортання в обраній мережі, документацію контракту та API, інструкцію з адміністрування банкролу.
Етапи: аналітика (обговорюємо механіку, кількість рівнів, комірок, house edge), проектування (архітектура контракту, підхід до рандому, UI/UX), реалізація (Solidity, Foundry), тестування (симуляція сценаріїв, testnet, gas cost), аудит (Slither, Mythril, Echidna — обов'язковий при банкролі), деплой (mainnet, налаштування Chainlink subscription).
Терміни орієнтовно: базова версія — від 3 до 4 тижнів, з розширеною графікою та лідербордом — від 6 до 8 тижнів. Точні терміни після уточнення вимог.
Якщо вам потрібна чесна гра Tower з прозорим рандомом, зв'яжіться з нами. Зробимо попередню оцінку та запропонуємо оптимальне рішення. Отримайте консультацію вже сьогодні. Наш досвід — понад 7 років у блокчейні, 15+ проектів у гемблінгу та DeFi, гарантуємо прозору архітектуру.
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).