Стандартные .eth или .bnb не всегда закрывают потребности экосистемы. Игровой проект требует хранения координат персонажа в resolver, DeFi-протоколу — динамическое ценообразование в зависимости от ликвидности, а корпоративному namespace — управление через DAO. Собственный TLD даёт полный контроль: ценообразование, правила регистрации, governance, специфические record type. Типичная боль — регистратор не учитывает контекст: цены не гибкие, resolver не хранит кастомные данные, управление централизовано. Мы решаем это кастомным смарт-контрактом с модульной архитектурой. Использование готового форка ENS сокращает затраты на разработку на 60% и снижает риски. Результат — production-ready сервис, который кошельки резолвят через CCIP-Read, а сообщество управляет через governance.
Как форк ENS упрощает создание доменного сервиса?
Форк ENS сокращает время разработки на 60% по сравнению с написанием контрактов с нуля. ENS прошёл аудит, имеет готовые субграфы, интеграции с кошельками, и ethers.js его понимает нативно. Ключевые части которые нужно изменить: Registry — практически без изменений. BaseRegistrar — TLD изменить на свой, grace period и expiry policy — под нужды проекта. ETHRegistrarController — pricing и commit-reveal. PublicResolver — добавить кастомные record types. NameWrapper — опционально, добавляет ERC-1155 субдомены и fuses.
Кастомные resolver записи
Для gaming домена нужны специфические данные:
// Расширяем PublicResolver кастомными полями contract GamingResolver is PublicResolver { // node => game_id => in-game address mapping(bytes32 => mapping(uint256 => string)) private _gameAddresses; // node => character stats (IPFS hash) mapping(bytes32 => string) private _characterData; event GameAddressChanged(bytes32 indexed node, uint256 gameId, string gameAddress); function setGameAddress( bytes32 node, uint256 gameId, string calldata gameAddress ) external authorised(node) { _gameAddresses[node][gameId] = gameAddress; emit GameAddressChanged(node, gameId, gameAddress); } function gameAddress(bytes32 node, uint256 gameId) external view returns (string memory) { return _gameAddresses[node][gameId]; } } Почему динамическое ценообразование выгодно?
Dynamic pricing через bonding curve лучше фиксированной цены: объём регистраций вырастает на 30% за счёт снижения барьера для длинных имён. Fork ENS использует линейную или ступенчатую цену по длине имени. Для кастомного сервиса можно добавить premium для коротких имён на старте: первые 30 дней после запуска — 10x цена, потом нормализуется. Это предотвращает скупку коротких имён ботами.
contract CustomPriceOracle { uint256 public constant LAUNCH_PREMIUM_PERIOD = 30 days; uint256 public launchTime; // Premium множитель: снижается с 10x до 1x линейно за 30 дней function getPremiumMultiplier() public view returns (uint256) { if (block.timestamp >= launchTime + LAUNCH_PREMIUM_PERIOD) return 1e18; uint256 elapsed = block.timestamp - launchTime; uint256 premium = 10e18 - (9e18 * elapsed / LAUNCH_PREMIUM_PERIOD); return premium; } function price(string calldata name, uint256 duration) external view returns (uint256) { uint256 basePrice = getBasePrice(name, duration); return basePrice * getPremiumMultiplier() / 1e18; } } Короткие имена (1-3 символа) можно продавать через Vickrey auction или Dutch auction вместо фиксированной цены. Контракт аукциона блокирует депозит, а после завершения передаёт имя победителю и возвращает ставки остальным. Это увеличивает доход от дефицитных имён и предотвращает скупку ботами.
Интеграция и управление
Governance интеграция
Для DAO-управляемого namespace: изменение pricing, добавление новых TLD, reserved names — всё через governance proposal.
contract DomainGovernor { ICustomRegistry public registry; ICustomPriceOracle public priceOracle; // Только через governance timelock function updatePrices(uint256[] calldata newPrices) external onlyTimelock { priceOracle.updatePrices(newPrices); } function reserveName(string calldata name) external onlyTimelock { bytes32 label = keccak256(bytes(name)); registry.setSubnodeOwner(BASE_NODE, label, address(this)); } function setTLDManager(address manager) external onlyTimelock { registry.setOwner(ROOT_NODE, manager); } } Интеграция с кошельками
Проблема кастомных доменов: кошельки не знают о них по умолчанию. Решения:
- Rainbow kit, WalletConnect поддерживают любой EVM-совместимый ENS-fork если передать правильный registry адрес.
- Universal Resolver: ENS L1 resolver может быть настроен как gateway для кастомных namespace через CCIP-Read. Это позволяет MetaMask и другим кошелькам резолвить кастомные имена без изменений на их стороне.
- Собственное browser extension — для максимального контроля, но требует усилий по adoption.
Монетизация и доходность
Revenue модель
- Registration fees — основной источник. 100% в treasury или разделяется с stakers.
- Renewal fees — ежегодно. Даёт предсказуемый поток, мотивирует хранить активными популярные имена.
- Secondary market royalty — 2-5% от вторичных продаж (ERC-2981). Пассивный доход от NFT торговли.
- Premium auctions — короткие имена (1-3 символа) продаются через аукцион.
Технические аспекты
Стек технологий
| Компонент | Технология |
|---|---|
| Contracts | Solidity 0.8.x + ENS fork + OpenZeppelin |
| Subgraph | The Graph (AssemblyScript) |
| Resolution SDK | TypeScript, fork ENS.js |
| Frontend | React + wagmi + viem |
| CCIP-Read gateway | Node.js + Express |
| Auction механизм | Vickrey или Dutch auction контракт |
Сравнение подходов: ENS Fork vs с нуля
| Критерий | ENS Fork | С нуля |
|---|---|---|
| Время разработки | 4-6 недель | 12-16 недель |
| Аудит безопасности | Заложен из коробки | Требуется полный аудит |
| Совместимость с кошельками | Нативная через CCIP-Read | Требуется SDK |
| Gas оптимизация | Уже оптимизировано | Нужна настройка |
| Риски | Низкие | Высокие |
Сроки разработки
Подробный план фаз
Фаза 1 — Core contracts (4-6 нед): Registry + Resolver + BaseRegistrar + PriceOracle + Controller. Адаптация ENS форка.
Фаза 2 — Extended features (2-4 нед): кастомные resolver типы, governance интеграция, premium auction.
Фаза 3 — Infrastructure (2-3 нед): The Graph subgraph, resolution SDK, CCIP-Read gateway.
Фаза 4 — Frontend (2-4 нед): registration UI, domain management, marketplace интеграция.
Аудит (2-4 нед): обязателен, регистратор принимает ETH/токены.
Полный production-ready сервис: 3-4 месяца. MVP с базовой регистрацией: 6-8 недель.
Что входит в работу
- Аудит контрактов сторонней компанией (Certora, Trail of Bits по желанию)
- Документация смарт-контрактов на русском и английском
- Исходный код в приватном репозитории с лицензией MIT
- Развёртывание в тестовой и основной сети (Ethereum, Polygon, Arbitrum, Base)
- Настройка CCIP-Read gateway для совместимости с MetaMask и WalletConnect
- Интеграция с The Graph для отображения доменов в каталогах
- Передача прав управления через multisig (Gnosis Safe) — без single point of failure
- Поддержка 3 месяца после запуска (фиксы багов, gas optimization)
- Обучение команды: воркшоп по администрированию domain service
Дополнительную информацию можно найти в ENS documentation.
Свяжитесь с нами для консультации — оценим ваш проект, подготовим коммерческое предложение и roadmap за 1 день. Получите консультацию уже сегодня. Гарантируем прозрачность и полную документацию.







