Skip to main content
Soul-Bound Tokens (SBTs) represent non-transferable digital credentials in the TON ecosystem. Unlike standard NFTs, SBTs are permanently bound to their owner and cannot be transferred to another address after minting. The canonical specification is defined in TEP-85. The SBT standard provides a general interaction scheme while leaving the specific implementation of related contracts to developers.

Contract data storage

The SBT standard defines what data must be stored in the contract. Each SBT contract must store the following fields:

Message layouts

Interactions with SBT contracts, which are most often encountered by users and developers, are:
  • prove ownership: sending proof of SBT ownership to a destination contract.
  • request current owner: requesting current owner information from SBT.
  • destroy SBT: destroying the SBT contract and returning remaining balance.
  • revoke SBT: marking the SBT as revoked by authority.

Bound to single owner

The owner field is set during minting and remains immutable. The following sections describe the key operations and their message flows.

Prove ownership

This message flow allows the owner to ask the SBT to send a proof to a destination contract confirming that they own this SBT. May include arbitrary forward_payload and optionally attach content.

Prove ownership message (inbound to SBT)

TL-B

Ownership proof message (SBT -> destination contract)

TL-B
The transaction is rejected if the sender is not the owner.

Request current owner

This message flow allows any initiator to ask the SBT to send the current owner (and optionally the content) to a destination contract.

Request owner message (inbound to SBT)

TL-B

Owner info message (SBT -> destination contract)

TL-B

Destroy

This message flow allows the owner to destroy the SBT contract. This clears the owner and authority fields, and sends remaining balance back to the sender via an excesses message.

Destroy message (inbound to SBT)

TL-B

Excesses message (SBT -> sender)

TL-B
The transaction is rejected if the sender is not the owner.

Revoke SBT

This message flow allows the authority to mark the SBT as revoked. Revoking twice is disallowed.

Revoke message (inbound to SBT)

TL-B
The transaction is rejected if:
  • the sender is not the authority;
  • the SBT was already revoked.