Разработка 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-токенов (SBT)

Soulbound Token (SBT) — это non-transferable NFT. Нельзя продать, нельзя передать, нельзя купить. Токен «привязан к душе» — адресу который его получил. Концепция предложена Vitalik Buterin, Glen Weyl, Puja Ohlhaver в 2022 году для представления репутации, достижений, credentials в Web3.

Технические реализации

ERC-5192: Minimal Soulbound NFT

Официальный стандарт для soulbound NFT (finalized 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];
    }
    
    // Override transfer functions для блокировки передачи
    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 (если хотим позволить).

Use Cases и Metadata

Образовательные сертификаты: оконченный курс, степень. Metadata: issuer, date, course name, grade.

Участие в DAO голосованиях: proof of participation. Metadata: dao_address, proposal_id, vote, timestamp.

KYC/AML verified: адрес прошёл верификацию. Metadata: issuer (Persona, Jumio), expiry, level.

Achievements: первый 1000 пользователей протокола, liquidity provider > 1 year, contributor.

POAPs (Proof of Attendance Protocol): мероприятия, конференции. Технически POAPs transferable, но по spirit — soulbound.

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

Публичные SBT раскрывают всю историю адреса. Каждый видит все credentials владельца кошелька. Это privacy проблема.

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

Claim: "У меня есть SBT верификации KYC от Persona"
ZK Proof: доказывает факт без раскрытия адреса или других SBT

Revocation

SBT должны поддерживать revocation: если верификация устарела (expired KYC), если holder совершил нарушение.

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 reputation systems. Разработка базового SBT контракта — 1-2 дня. С privacy и revocation — 1-2 недели.