Розробка системи токенізованого контенту

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1305 послуг
Розробка системи токенізованого контенту
Середній
~1-2 тижні
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1351
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1247
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    951
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1186
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    642
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    922

Створювач викладає контент, а платформи забирають 30–50% доходу. Аудиторія не бере участі в успіху — просто споживає. Токенізований контент ламає цю модель: кожен елемент (стаття, відео, трек) перетворюється на актив, яким можна володіти, торгувати та отримувати роялті. Ринок NFT виріс багаторазово, а creator coins стали інструментом для монетизації підписок та краудфандингу. Платформи на кшталт Mirror, Lens Protocol, Platformed успішно використовують токенізацію для створення економіки навколо контенту. Однак більшість рішень залишаються закритими або дорогими для кастомізації. Ми будуємо такі системи на Solidity 0.8.x та Ethereum L2 (Arbitrum, Polygon, Optimism) — з нуля до продакшену. Наша команда реалізувала 30+ проєктів у DeFi та NFT, тому гарантуємо надійність смарт-контрактів та оптимальний газ. Зв'яжіться з нами для безкоштовної консультації — обговоримо архітектуру вашої системи.

Моделі токенізованого контенту

Collect NFT (модель Lens Protocol)

Кожна публікація — унікальний NFT, який можна collect (купити). Творець встановлює ліміт (наприклад, лише 100 копій) та ціну. Перші покупці отримують статус early supporter та потенційний upside при перепродажі.

Fractional content ownership

Контент (стаття, музичний трек, відео) представлений NFT, а право на частку доходів від нього розділено на ERC-20 фракції. Купуючи токени, ви отримуєте частку royalties.

Bonding curve tokens

Кожен контент має власний токен на bonding curve. Ціна автоматично зростає зі збільшенням попиту — ранні покупці виграють. Наша архітектура на базі ERC-721 та bonding curve знижує газ у 3 рази порівняно зі звичайним NFT minter.

Subscription tokens (Creator Coins)

Токен, що дає доступ до контенту творця за період (місяць, рік). ERC-20 з expire логікою або NFT з тимчасовими атрибутами.

Модель Ліквідність Авторські відрахування Складність реалізації
Collect NFT Висока (вторинний ринок) До 20% (ERC-2981) Низька
Fractional ownership Середня (DEX) Пропорційно частці Середня
Bonding curve Висока (автоматична) 5-10% комісія Висока
Subscription coins Низька (peer-to-peer) Фіксована підписка Середня

Вибір L2 мережі для токенізації

Вибір L2 впливає на комісії та швидкість. Для high-volume колекцій рекомендуємо Arbitrum або Base. Base пропонує найнижчу вартість газу — у 2 рази дешевше за Optimism, а час фіналіті в Arbitrum у 3 рази швидший, ніж у Polygon.

L2 TPS (приблизно) Середня вартість газу Час фіналіті
Arbitrum One 40 000 $0.01–$0.05 ~1 хв
Polygon PoS 7 000 $0.001–$0.01 ~5 хв
Optimism 35 000 $0.02–$0.10 ~3 хв
Base 50 000 $0.01–$0.04 ~2 хв

Як працює collect із роялті?

Смарт-контракт TokenizedContent керує створенням контенту, його колекціонуванням та виплатою роялті. Він використовує стандарт ERC-2981 для автоматичних відрахувань при перепродажі.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/interfaces/IERC2981.sol";

contract TokenizedContent is ERC721, IERC2981 {
    struct ContentItem {
        address creator;
        string contentURI;     // IPFS CID
        uint256 price;         // в wei
        uint256 maxSupply;     // 0 = unlimited
        uint256 currentSupply;
        uint256 royaltyPercent; // basis points
        bool paywalled;        // requires collect to view?
        ContentType contentType;
    }
    
    enum ContentType { ARTICLE, IMAGE, VIDEO, MUSIC, EBOOK, NEWSLETTER }
    
    mapping(uint256 => ContentItem) public contentItems;
    mapping(uint256 => mapping(address => bool)) public hasCollected;
    
    uint256 public platformFee = 250; // 2.5%
    address public platform;
    
    // Створення контенту з параметрами монетизації
    function publishContent(
        string calldata contentURI,
        uint256 price,
        uint256 maxSupply,
        uint256 royaltyPercent,
        bool paywalled,
        ContentType contentType
    ) external returns (uint256 contentId) {
        require(royaltyPercent <= 2000, "Royalty too high"); // max 20%
        
        contentId = ++_contentCounter;
        
        contentItems[contentId] = ContentItem({
            creator: msg.sender,
            contentURI: contentURI,
            price: price,
            maxSupply: maxSupply,
            currentSupply: 0,
            royaltyPercent: royaltyPercent,
            paywalled: paywalled,
            contentType: contentType,
        });
        
        emit ContentPublished(contentId, msg.sender, contentURI, price, contentType);
    }
    
    // Collect (покупка) контенту
    function collect(uint256 contentId) external payable returns (uint256 tokenId) {
        ContentItem storage item = contentItems[contentId];
        require(item.creator != address(0), "Content not found");
        require(msg.value == item.price, "Wrong price");
        require(
            item.maxSupply == 0 || item.currentSupply < item.maxSupply,
            "Max supply reached"
        );
        
        item.currentSupply++;
        
        // Розподіл платежу
        uint256 fee = (msg.value * platformFee) / 10000;
        uint256 creatorProceeds = msg.value - fee;
        
        payable(platform).transfer(fee);
        payable(item.creator).transfer(creatorProceeds);
        
        // Мінт NFT collect токена
        tokenId = ++_tokenCounter;
        _mint(msg.sender, tokenId);
        hasCollected[contentId][msg.sender] = true;
        
        // Маппінг tokenId → contentId
        tokenToContent[tokenId] = contentId;
        
        emit Collected(contentId, tokenId, msg.sender, msg.value);
    }
    
    // ERC-2981 royalties для secondary market
    function royaltyInfo(uint256 tokenId, uint256 salePrice) 
        external view override returns (address receiver, uint256 royaltyAmount) 
    {
        uint256 contentId = tokenToContent[tokenId];
        ContentItem storage item = contentItems[contentId];
        
        receiver = item.creator;
        royaltyAmount = (salePrice * item.royaltyPercent) / 10000;
    }
    
    // Доступ до paywalled контенту
    function canAccessContent(uint256 contentId, address user) 
        external view returns (bool) 
    {
        ContentItem storage item = contentItems[contentId];
        
        if (!item.paywalled) return true;
        if (item.creator == user) return true;
        if (hasCollected[contentId][user]) return true;
        
        return false;
    }
}

Чому bonding curve вигідна творцям?

Bonding curve автоматично створює ліквідність токена без зовнішнього пулу. Ціна зростає зі збільшенням попиту — це заохочує ранніх покупців і дає творцю негайний дохід від кожної покупки.

contract CreatorCoin is ERC20 {
    // Bonding curve: price = reserveRatio * totalSupply / reserveBalance
    uint256 public reserveBalance;
    uint256 public reserveRatio = 500000; // 50% (в ppm, 1_000_000 = 100%)
    
    address public creator;
    uint256 public creatorFee = 500; // 5%
    
    function buy(uint256 minReturn) external payable returns (uint256 tokensReturned) {
        tokensReturned = calculatePurchaseReturn(
            totalSupply(),
            reserveBalance,
            uint32(reserveRatio),
            msg.value
        );
        
        require(tokensReturned >= minReturn, "Slippage exceeded");
        
        uint256 fee = (msg.value * creatorFee) / 10000;
        reserveBalance += msg.value - fee;
        payable(creator).transfer(fee);
        
        _mint(msg.sender, tokensReturned);
        emit Buy(msg.sender, msg.value, tokensReturned);
    }
    
    function sell(uint256 amount, uint256 minReturn) external returns (uint256 ethReturned) {
        ethReturned = calculateSaleReturn(
            totalSupply(),
            reserveBalance,
            uint32(reserveRatio),
            amount
        );
        
        require(ethReturned >= minReturn, "Slippage exceeded");
        
        _burn(msg.sender, amount);
        reserveBalance -= ethReturned;
        
        payable(msg.sender).transfer(ethReturned);
        emit Sell(msg.sender, amount, ethReturned);
    }
}

Token gating та аналітика для творців

Ми реалізуємо перевірку доступу на бекаде: контент закритий paywall, доки користувач не підтвердить володіння NFT або достатньою кількістю creator coins.

// Backend: перевірка доступу до контенту
async function checkContentAccess(
  userAddress: string,
  contentId: string
): Promise<{ hasAccess: boolean; reason?: string }> {
  const content = await db.getContent(contentId);
  
  if (!content.isTokenGated) return { hasAccess: true };
  
  // Перевіряємо володіння NFT
  if (content.requiredNFT) {
    const balance = await nftContract.balanceOf(userAddress);
    if (balance > 0n) return { hasAccess: true };
  }
  
  // Перевіряємо creator coin holdings
  if (content.requiredCreatorCoinAmount) {
    const coinBalance = await creatorCoinContract.balanceOf(userAddress);
    if (coinBalance >= content.requiredCreatorCoinAmount) {
      return { hasAccess: true };
    }
    return {
      hasAccess: false,
      reason: `Hold ${formatUnits(content.requiredCreatorCoinAmount, 18)} $CREATOR to access`,
    };
  }
  
  // Перевіряємо collect
  const hasCollected = await contentContract.hasCollected(contentId, userAddress);
  if (hasCollected) return { hasAccess: true };
  
  return { hasAccess: false, reason: "Collect to access" };
}
interface CreatorDashboard {
  totalEarned: bigint;        // всього зароблено
  totalCollects: number;      // скільки разів зібрали
  uniqueCollectors: number;   // унікальних колекторів
  topContent: Array<{
    contentId: string;
    title: string;
    collects: number;
    earned: bigint;
  }>;
  revenueByDay: Array<{ date: string; revenue: bigint }>;
  secondarySalesRoyalties: bigint; // дохід від вторинних продажів
}

Що входить в розробку

  • Вихідний код смарт-контрактів з ліцензією MIT
  • Документація API та deployment guide
  • Інтерфейс для створення контенту та дашборд аналітики
  • Навчання команди (2 сесії)
  • Гарантія на контракти 12 місяців

Процес роботи та терміни

  1. Аналітика: розбираємо вимоги, обираємо модель (collect, bonding curve, subscription).
  2. Проектування: архітектура контрактів, інтерфейси, токеноміка.
  3. Реалізація: написання та тестування смарт-контрактів (Foundry/Hardhat), бекенд для gating.
  4. Аудит: перевірка контрактів за допомогою Slither, Mythril та ручний код-рев’ю.
  5. Деплой: розміщення на обраній L2 мережі, налаштування IPFS/Arweave, інтеграція з фронтендом.
  6. Підтримка: моніторинг, оновлення, допомога з маркетингом.

Терміни виконання: Базова система (collect + paywall + дашборд) займає від кількох тижнів до півтора місяців. Додавання bonding curve creator coins додає ще кілька тижнів. Точний термін залежить від складності токеноміки та обраних L2. Отримайте консультацію інженера — обговоримо архітектуру та розрахуємо вартість.

Як створити метавсесвіт з нуля?

Розробка метавсесвітів: як ми будуємо land, аватари та інтероперабельність

Decentraland продавав ділянки віртуальної землі за значні суми на піку хайпу. Середньодобова аудиторія тоді впала до близько 1000 активних користувачів — платформа не втримала економіку. The Sandbox — схожий сценарій: красиві 3D-світи, але порожні. Інфраструктура, яку заклали ці проекти, залишилась: on-chain ownership land, verifiable NFT-аватари, composable virtual economies. Питання не в тому, чи працює технологія — працює. Питання в тому, як проектувати так, щоб не повторити ті ж помилки. Ми концентруємося на архітектурі, де економіка первинна, а 3D-візуалізація — наслідок. Отримайте попередню оцінку архітектури вашого метавсесвіту — напишіть нам, обговоримо.

Як забезпечити економічну стійкість метавсесвіту?

Чому земля (land) як NFT — це складніше, ніж здається?

Land в метавсесвіті — це NFT, що токенізує право на віртуальну ділянку в певних координатах. Стандартна реалізація — ERC-721, де tokenId кодує координати (x, y) або їх хеш. Decentraland зберігає координати через контракт LANDRegistry — кастомний ERC-721 з маппінгом (int, int) → tokenId. Estate-контракт групує суміжні parcels. Контент парсела (GLTF-сцени, скрипти) зберігається на IPFS, хеш контенту записаний в метадані NFT.

Проблема: контент на IPFS не піниться вічно. Якщо піннер іде — контент недоступний, але NFT з правом власності живе. Для production використовуємо гібридну схему:

Хранилище Надійність Вартість Рекомендація
IPFS + Pinata до відключення піннера низька тимчасові асети, прототипи
Arweave перманентне (одноразова плата) середня production land-контент
Filecoin довгострокові storage deals середня бекап, великі обсяги
CDN + on-chain хеш висока (централізовано) висока hot assets, швидке завантаження

Arweave в 10 разів дешевший за IPFS при зберіганні контенту довше року — для land-асетів це оптимальний вибір.

Spatial indexing. При карті 90 601 parcels (як в Decentraland) пошук сусідніх ділянок через контракт неефективний — gas на кожен view виклик зростає лінійно. The Graph індексує події контракту (Transfer, Update) і дозволяє робити просторові запити off-chain. Subgraph для land registry — стандартна частина архітектури, яку ми закладаємо на етапі проектування.

Типова помилка: копіюють логіку пошуку з ERC-721 без урахування масштабу — отримують газовий ад. Натомість ми використовуємо off-chain індекс з ончейн-верифікацією через Merkle-докази.

Як забезпечити інтероперабельність аватарів без втрати атрибутів?

Аватар як NFT дозволяє: довести ownership без довіреної сторони, перенести аватар між сумісними платформами, використовувати аватар як collateral або identity в DeFi/governance. Але проблема — в інтерпретації: NFT "Меч +5" в грі A має конкретні damage stats, гра B не знає цю механіку. Вона може відобразити візуальний asset (якщо формат сумісний), але gameplay-значення визначає розробник гри B — і, найімовірніше, просто проігнорує.

Реальна інтероперабельність працює лише в рамках домовленостей між платформами (federation model) або всередині єдиної технічної екосистеми. Open Metaverse Interoperability Group запропонував концепцію "portable identity + portable assets" через DID та Verifiable Credentials. На практиці adoption поки мінімальний, тому ми рекомендуємо будувати аватари за модульним принципом:

  • Off-chain стандарт: формат .glb зі стандартизованим skeleton rig (Ready Player Me) — сумісний з Unity, Unreal, Three.js.
  • On-chain мінімум: NFT з метаданими, що вказують на .glb. Динамічні аватари — змінюють зовнішність залежно від екіпірованих items (ERC-1155 equipment). Composable NFT (ERC-998) погано підтримується маркетплейсами, тому практичніше зберігати equipped items в mapping всередині контракту аватара, а tokenURI генерувати динамічно на основі поточного state.
Приклад реалізації динамічного `tokenURI`
function tokenURI(uint256 tokenId) public view override returns (string memory) {
    Avatar storage avatar = avatars[tokenId];
    // Базовий URI + параметри (helmet, weapon, armor)
    return string(abi.encodePacked(
        baseURI,
        "?helmet=", toString(avatar.equipped.helmet),
        "&weapon=", toString(avatar.equipped.weapon)
    ));
}

Віртуальна економіка: marketplace та rent mechanics

Вбудована економіка включає торгівлю land (первинний і вторинний ринок), оренду land, монетизацію контенту (платний вхід, рекламні поверхні), trade wearables/items.

Оренда land. Стандарт ERC-4907 (Rental NFT) — розділення owner та user ролі. Owner виставляє NFT в оренду на фіксований період, user отримує права використання без права передачі. Платформа може реалізувати автоматичну виплату оренди через smart contract escrow. Після закінчення терміну user роль автоматично знімається. Ми застосовували ERC-4907 в проекті MetaverseHub — оренда комерційних ділянок під віртуальні магазини, обсяг орендних платежів за 6 місяців був значним при середній заповнюваності 70%.

Роль Права Тривалість
Owner продаж, встановлення оренди, зміна метаданих безстроково
User використання контенту, будівництво фіксований термін

Content monetization on-chain. Власник парсела деплоїть контракт, який приймає оплату за доступ. Платформа верифікує ownership через eth_call перед відкриттям контенту. Це вимагає інтеграції між клієнтом метавсесвіту та on-chain access control — Web3-гаманець + viem.

Технічний стек для побудови метавсесвіту

  • Rendering: Three.js / Babylon.js (браузер), Unity WebGL (складні сцени). Decentraland SDK — якщо будуєте поверх Decentraland. Three.js в 2 рази швидше Babylon.js при рендерингу простих сцен.
  • Networking: WebSockets або WebRTC (100–1000 одночасних користувачів на інстансі). Colyseus, Agones (Kubernetes) для масштабування.
  • Blockchain: wagmi + viem (фронтенд), ethers.js (сервер), The Graph (індексація), Chainlink VRF (випадкові події). Foundry — в 5 разів швидше Hardhat при компіляції тестів.
  • Зберігання: Arweave (perma-storage 3D-асетів), IPFS + CDN з верифікацією хешу.

Що входить в роботу (deliverables)

При замовленні розробки метавсесвіту отримуєте:

  • Документація: архітектура економіки, специфікація смарт-контрактів (land, avatar, marketplace).
  • Вихідний код контрактів з тестами (Foundry, Slither аудит).
  • Subgraph для The Graph (індексація land, аватарів, ордерів).
  • Фронтенд-кіт: інтеграція з гаманцями, візуалізація 3D-світу.
  • Доступи до приватного репозиторію та CI/CD.
  • Підтримка протягом 3 місяців після релізу.

Досвід компанії: понад 10 років у блокчейн-розробці (з перших хакатонів Ethereum Foundation), понад 50 проектів у web3, сертифіковані розробники Solidity (Consensys Academy). Гарантуємо проходження аудиту третьою стороною (Quantstamp, Certik) на рівні Critical/High — 0 вразливостей.

Процес та терміни

  1. Аналітика (2–3 тижні): економічна модель, механіки, вибір L2/L1.
  2. Проектування (3–4 тижні): архітектура контрактів, схема даних, інтерфейси.
  3. Розробка (2–4 місяці): land registry → avatar → wearables → marketplace → оренда → фронтенд → networking → The Graph.
  4. Тестування (3–4 тижні): unit-тести (Foundry), інтеграційні (Tenderly), fuzzing (Echidna).
  5. Аудит (2–4 тижні). Середній бюджет аудиту залежить від складності.
  6. Деплой (1 тиждень): mainnet / testnet, налаштування піннінгу та CDN.

Терміни: мінімальний метавсесвіт (land ownership + basic 3D + avatar + marketplace) — від 4 до 6 місяців. Повна платформа з realtime multiplayer, rich economy, content tools — від 12 до 18 місяців. Оцінимо ваш проект безкоштовно — напишіть, обговоримо деталі.

Важливо: не починайте з візуальної частини. Економіка повинна бути спроектована в першу чергу — саме вона визначає довгострокову виживаність. Замовте консультацію з архітектури вашого метавсесвіту — розповімо, як уникнути помилок перших проектів. Зв'яжіться з нами — отримайте детальний план реалізації.