Разработка 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 недели.







