Розробка soulbound-токенів (SBT)

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

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

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

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

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

Розробка Soulbound Token (SBT)

Soulbound Token (SBT) — це невідтворюваний NFT. Неможливо продати, передати чи придбати. Токен "прив'язаний до душі" — адреси, яка його отримала. Концепцію запропонували Vitalik Buterin, Glen Weyl та Puja Ohlhaver у 2022 році для представлення репутації, досягнень та кваліфікацій у Web3.

Технічні реалізації

ERC-5192: Мінімальний Soulbound NFT

Офіційний стандарт для soulbound NFT (завершений EIP):

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

interface IERC5192 {
    event Locked(uint256 tokenId);
    event Unlocked(uint256 tokenId);
    
    function locked(uint256 tokenId) external view returns (bool);
}

contract SoulboundToken is ERC721, IERC5192 {
    mapping(uint256 => bool) private _locked;
    
    function locked(uint256 tokenId) external view override returns (bool) {
        return _locked[tokenId];
    }
    
    // Перевизначення функцій передачі для блокування передачі
    function _beforeTokenTransfer(
        address from, address to, uint256 tokenId, uint256 batchSize
    ) internal override {
        require(
            from == address(0) || to == address(0),
            "SBT: Token is non-transferable"
        );
        super._beforeTokenTransfer(from, to, tokenId, batchSize);
    }
    
    function mint(address to, uint256 tokenId) external onlyOwner {
        _locked[tokenId] = true;
        _mint(to, tokenId);
        emit Locked(tokenId);
    }
}

from == address(0) — mint (дозволено). to == address(0) — burn (якщо дозволено).

Варіанти використання та метаданні

Освітні сертифікати: завершений курс, ступень. Метаданні: видавець, дата, назва курсу, оцінка.

Участь у голосуванні DAO: доказ участі. Метаданні: dao_address, proposal_id, голос, часова позначка.

KYC/AML верифіковано: адреса пройшла верифікацію. Метаданні: видавець (Persona, Jumio), термін дії, рівень.

Досягнення: першие 1000 користувачів протоколу, постачальник ліквідності > 1 року, учасник.

POAP (Proof of Attendance Protocol): заходи, конференції. Технічно POAP передаються, але за змістом — soulbound.

Приватність SBT

Публічні SBT розкривають повну історію адреси. Кожен бачить всі кваліфікації власника гаманця. Це проблема приватності.

zkSBT: Zero-Knowledge Soulbound Token. Власник доводить наявність певного типу SBT без розкриття конкретного токена чи інших SBT. Реалізації: Sismo Protocol, Polygon ID.

Твердження: "У мене є SBT верифікації KYC від Persona"
ZK Proof: доводить факт без розкриття адреси чи інших SBT

Відкликання

SBT повинні підтримувати відкликання: якщо верифікація застаріває (застарілий KYC), якщо власник порушує правила.

mapping(uint256 => bool) public revoked;

function revoke(uint256 tokenId) external onlyIssuer {
    revoked[tokenId] = true;
    emit Revoked(tokenId);
}

function isValid(uint256 tokenId) public view returns (bool) {
    return _exists(tokenId) && !revoked[tokenId] && !_isExpired(tokenId);
}

SBT — це будівельний блок для on-chain систем репутації. Розробка базового контракту SBT займає 1-2 дні. З приватністю та відкликанням — 1-2 тижні.