Розробка системи breeding NFT

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

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

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

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

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

Розробка системи breeding NFT

NFT breeding — створення нового NFT шляхом «скрещивання» двох існуючих з спадкуванням характеристик батьків. Механіка стала популярною завдяки CryptoKitties та Axie Infinity. Правильно реалізована система breeding створює багаторівневу економіку: ринок «племенників», ринок «чистопородних», стратегічні рішення про breeding combinations.

Дизайн генетичної системи

Ключове питання: як передаються атрибути від батьків до потомка?

Gene encoding

Кожен NFT має набір генів — числові значення атрибутів. Типова структура:

struct Genes {
    uint8 bodyType;       // 0-255, кодує тип тіла
    uint8 color;          // 0-255, колір
    uint8 speed;          // 0-100, швидкість
    uint8 strength;       // 0-100, сила  
    uint8 intelligence;   // 0-100, інтелект
    uint8 rarity;         // 0-7, рівень рідкісності
    uint8[4] hiddenGenes; // рецесивні гени (не видні, але передаються)
}

Рецесивні гени—приховані гени, які не впливають на характеристики поточного NFT, але можуть проявитися в потомків. Це створює глибину системи: два звичайних на вигляд NFT можуть виробити рідкісного потомка.

Механіка спадкування

function _inheritGene(
    uint8 parentAGene,
    uint8 parentBGene,
    uint256 random,
    uint8 geneIndex
) internal pure returns (uint8 childGene) {
    // 50% шанс кожного батька
    bool fromParentA = (random >> geneIndex) & 1 == 1;
    uint8 inheritedGene = fromParentA ? parentAGene : parentBGene;
    
    // 10% шанс мутації
    uint256 mutationRoll = (random >> (geneIndex + 8)) & 0xFF;
    if (mutationRoll < 26) { // ~10% (26/256)
        // Випадкова мутація в межах ±20% від успадкованого значення
        int16 mutation = int16(uint16((random >> (geneIndex + 16)) & 0xFF)) - 128;
        int16 mutated = int16(uint16(inheritedGene)) + mutation / 10;
        childGene = uint8(uint16(mutated < 0 ? 0 : mutated > 255 ? 255 : mutated));
    } else {
        childGene = inheritedGene;
    }
}

Smart contract: повна реалізація

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

contract BreedableNFT is ERC721, AccessControl, VRFConsumerBaseV2Plus {
    struct NFTData {
        uint256 tokenId;
        uint256 generation;    // покоління (0 = genesis)
        uint256 breedCount;    // скільки разів розводили
        uint256 maxBreeds;     // максимум розводок
        uint256 lastBreedTime; // timestamp останнього breeding
        uint256 breedCooldown; // у секундах
        Genes genes;
        bool isOnBreedingMarket;
    }
    
    mapping(uint256 => NFTData) public nftData;
    
    // Стоимість breeding в ERC-20 токенах
    IERC20 public breedingToken;
    uint256[] public breedingCosts; // за поколіннями: gen0 дешевше, gen5 дороже
    
    // Cooldown растёт с каждым breeding
    uint256 public baseCooldown = 12 hours;
    
    mapping(uint256 => BreedingRequest) public pendingBreeds;
    
    struct BreedingRequest {
        address breeder;
        uint256 parent1Id;
        uint256 parent2Id;
        bool fulfilled;
    }
    
    event BreedingInitiated(uint256 requestId, uint256 parent1, uint256 parent2);
    event BreedingCompleted(uint256 requestId, uint256 newTokenId, Genes childGenes);
    
    function breed(uint256 parent1Id, uint256 parent2Id) 
        external returns (uint256 requestId) 
    {
        // Перевіряємо права
        require(ownerOf(parent1Id) == msg.sender, "Not owner of parent1");
        require(
            ownerOf(parent2Id) == msg.sender || nftData[parent2Id].isOnBreedingMarket,
            "No access to parent2"
        );
        
        // Перевіряємо обмеження
        NFTData storage p1 = nftData[parent1Id];
        NFTData storage p2 = nftData[parent2Id];
        
        require(p1.breedCount < p1.maxBreeds, "Parent1 max breeds reached");
        require(p2.breedCount < p2.maxBreeds, "Parent2 max breeds reached");
        
        require(
            block.timestamp >= p1.lastBreedTime + p1.breedCooldown,
            "Parent1 on cooldown"
        );
        require(
            block.timestamp >= p2.lastBreedTime + p2.breedCooldown,
            "Parent2 on cooldown"
        );
        
        // Запобігаємо інбридингу (опціонально)
        require(!_areRelated(parent1Id, parent2Id), "Inbreeding not allowed");
        
        // Оплата breeding
        uint256 gen = Math.max(p1.generation, p2.generation);
        uint256 cost = breedingCosts[Math.min(gen, breedingCosts.length - 1)];
        breedingToken.transferFrom(msg.sender, address(this), cost);
        
        // Оновлюємо батьків
        p1.breedCount++;
        p1.lastBreedTime = block.timestamp;
        p1.breedCooldown = baseCooldown * (1 + p1.breedCount); // зростаючий cooldown
        
        p2.breedCount++;
        p2.lastBreedTime = block.timestamp;
        p2.breedCooldown = baseCooldown * (1 + p2.breedCount);
        
        // Запрошуємо VRF для генерації генів потомка
        requestId = _requestVRF();
        pendingBreeds[requestId] = BreedingRequest({
            breeder: msg.sender,
            parent1Id: parent1Id,
            parent2Id: parent2Id,
            fulfilled: false,
        });
        
        emit BreedingInitiated(requestId, parent1Id, parent2Id);
    }
}

Breeding marketplace

Тримач NFT може виставити його «в аренду» для breeding за платою:

struct BreedingOffer {
    uint256 sireId;         // NFT який здається для breeding
    uint256 price;          // вартість у токенах
    bool onlyWhitelisted;   // тільки для конкретних адрес
    mapping(address => bool) whitelist;
}

Генеалогічне дерево

Зберігання історії батьків для відображення і anti-inbreeding логіки.

Економічний баланс

Breeding система повинна бути економічно збалансована через control supply via обмежені breeds, зростаючі витрати, cooldowns, demand drivers через унікальні візуали, gameplay advantage, rarity hunting, passive income від breeding market.

Сроки

  • Базовий breeding (гени + VRF + спадкування): 5-7 тижнів
  • Breeding marketplace: +2-3 тижні
  • Genealogy tracking + візуалізація: +2-3 тижні
  • Anti-cheat + економічна настройка: +2-3 тижні
  • Security audit: обов'язковий, +4-5 тижнів
  • Итого: 3-4 місяці