Glossary

Semi-Fungible Token (SFT)

A token that starts as fungible within a class but becomes non-fungible upon use, as defined by the ERC-1155 standard.

Key Takeaways

  • A semi-fungible token (SFT) is interchangeable with other tokens of the same type until a state change (such as redemption or use) makes each token unique, bridging the gap between ERC-20 fungible tokens and NFTs.
  • The ERC-1155 multi-token standard is the primary smart contract interface for creating SFTs, allowing a single contract to manage fungible, non-fungible, and semi-fungible assets with efficient batch operations.
  • SFTs are most widely used in blockchain gaming, event ticketing, and voucher systems where tokens share identical properties before activation but need individual identity afterward.

What Is a Semi-Fungible Token?

A semi-fungible token is a digital asset that behaves as fungible (freely interchangeable) within its category until a specific event transforms it into a non-fungible (unique) asset. This dual nature distinguishes SFTs from purely fungible tokens like ERC-20 tokens, where every unit is always identical, and from purely non-fungible tokens like ERC-721 tokens, where every unit is always unique.

The concert ticket analogy illustrates the concept clearly: all general admission floor tickets for the same show are interchangeable before the event. Any holder can swap one for another without losing value. But once a ticket is scanned at the door, it becomes a unique proof of attendance: a collectible tied to a specific seat, entry time, or holder. The token transitions from fungible to non-fungible upon use.

SFTs were formalized through the ERC-1155 multi-token standard, proposed by Witek Radomski, Andrew Cooke, Philippe Castonguay, James Therien, Eric Binet, and Ronan Sandford in June 2018. ERC-1155 reached Final status in June 2019, establishing the contract interface that makes semi-fungibility practical on Ethereum and EVM-compatible chains.

How It Works

Semi-fungibility relies on a smart contract that tracks both the type and state of each token. The contract defines token IDs that group tokens into classes, and each class can have a supply greater than one (fungible within the class) or exactly one (non-fungible). A semi-fungible token starts in a fungible class and later transitions to a unique state through contract logic.

The ERC-1155 Foundation

The ERC-1155 standard provides the infrastructure for SFTs by allowing a single contract to manage multiple token types. Unlike ERC-20 (one contract per fungible token) or ERC-721 (one contract per NFT collection), ERC-1155 maps token IDs to balances, so one contract can hold currencies, unique items, and semi-fungible assets simultaneously.

The key functions that enable this flexibility:

// Core ERC-1155 interface functions

// Transfer a single token type
function safeTransferFrom(
  address from,
  address to,
  uint256 id,
  uint256 amount,
  bytes calldata data
) external;

// Transfer multiple token types in one transaction
function safeBatchTransferFrom(
  address from,
  address to,
  uint256[] calldata ids,
  uint256[] calldata amounts,
  bytes calldata data
) external;

// Query balance for a specific token type
function balanceOf(
  address account,
  uint256 id
) external view returns (uint256);

// Query balances for multiple token types at once
function balanceOfBatch(
  address[] calldata accounts,
  uint256[] calldata ids
) external view returns (uint256[]);

The batch transfer function (safeBatchTransferFrom) is particularly important for SFTs. It allows moving multiple token types in a single transaction. For example, transferring 100 units of token ID 3, 200 units of token ID 6, and 5 units of token ID 13 requires only one on-chain call instead of three, reducing gas costs significantly.

The State Transition

The defining feature of a semi-fungible token is its state transition from fungible to non-fungible. This transition is encoded in the smart contract's logic and typically follows one of these patterns:

  1. Redemption: a voucher token is redeemed for a service, and the contract records the redemption details (timestamp, redeemer address, specific parameters) that make the token unique
  2. Usage: a game item is equipped or consumed, binding it to a specific character or adding usage history that differentiates it from unused copies
  3. Metadata update: the contract updates the token's URI or on-chain attributes, changing it from a generic class member to a distinct asset with individual properties

Before the transition, tokens within the same ID share identical metadata and are interchangeable. After the transition, each token carries unique data that prevents one-to-one substitution: the token has become non-fungible.

// Simplified SFT state transition example

contract EventTicket is ERC1155 {
    // Token ID 1 = General Admission (fungible before event)
    // After scanning, each ticket gets unique metadata

    mapping(uint256 => bool) public redeemed;
    mapping(uint256 => uint256) public redemptionTime;

    function redeemTicket(uint256 tokenId) external {
        require(balanceOf(msg.sender, tokenId) > 0, "No ticket");
        require(!redeemed[tokenId], "Already redeemed");

        redeemed[tokenId] = true;
        redemptionTime[tokenId] = block.timestamp;

        // Token transitions from fungible to non-fungible
        // Metadata URI now returns unique attendance proof
    }
}

Use Cases

Blockchain Gaming

Gaming is the most established use case for semi-fungible tokens and was the original motivation behind the ERC-1155 standard. Game developers creating blockchain-based games often need thousands of token types: currencies, consumable items, rare equipment, and collectible rewards. A single ERC-1155 contract can manage all of these.

In practice, a game might issue 1,000 identical health potions as fungible tokens under one ID. Players can trade them freely because each potion is identical. When a player uses a potion, the contract records which character consumed it, when, and in what context. The potion token transitions from a generic consumable to a unique record of an in-game event: perhaps a potion used during a legendary raid becomes a collectible proof of participation.

Event Ticketing

Event tickets are natural SFTs. All tickets in the same section for the same event are functionally identical before the event: holders can resell, swap, or transfer them without loss of value. This fungible phase supports a liquid secondary market where buyers do not need to evaluate individual tickets.

Once scanned at entry, each ticket becomes a non-fungible attendance proof. The token now carries unique data: the holder's address, entry timestamp, and event-specific metadata. Post-event, these tokens can serve as collectible memorabilia, loyalty program credentials, or access passes for future benefits.

Voucher and Coupon Systems

Gift cards, discount vouchers, and promotional coupons behave as semi-fungible tokens. A batch of 500 identical $50 gift cards is fungible: any card can substitute for another. Upon redemption, each card acquires unique transaction data (what was purchased, remaining balance, redemption location) that makes it distinct. The SFT model prevents double-redemption through on-chain state tracking while maintaining efficient batch issuance.

Financial Instruments

Bonds, options, and other financial contracts within the same series share identical terms until exercise or maturity. A batch of call options with the same strike price and expiration are interchangeable before exercise. Once exercised, each contract records its specific settlement details and becomes unique. SFTs can represent these instruments more efficiently than deploying separate ERC-721 tokens for each contract.

SFTs Compared to Other Token Types

Understanding where SFTs fit requires comparing them against the two endpoints of the fungibility spectrum:

PropertyFungible (ERC-20)Semi-Fungible (ERC-1155)Non-Fungible (ERC-721)
InterchangeabilityAlways identicalIdentical until state changeAlways unique
Contract per typeOne contract per tokenOne contract for all typesOne contract per collection
Batch transfersNot nativeNative (safeBatchTransferFrom)Not native
Typical supply per IDLarge (millions+)Variable (1 to millions)Exactly 1
Gas efficiencyModerateHigh (batch operations)Higher per token
Primary standardERC-20ERC-1155ERC-721

For a deeper look at how different token standards compare across blockchain ecosystems, see the research article on stablecoin token standard comparison.

Why It Matters

Semi-fungible tokens solve a practical problem: many real-world assets are not purely fungible or purely non-fungible. They exist on a spectrum, and their fungibility can change over time. Before SFTs, developers had to choose between ERC-20 (losing the ability to track individual assets) and ERC-721 (losing the efficiency of batch operations on identical items).

The efficiency gains are concrete. A game issuing 10,000 identical sword tokens with ERC-721 would need 10,000 individual minting transactions. With ERC-1155, one transaction can mint the entire batch. When players trade bundles of items, batch transfers reduce the number of on-chain operations from N to 1.

As tokenization expands beyond collectibles into financial instruments, real-world assets, and payment credentials, the semi-fungible model becomes increasingly relevant. Any asset that starts as one-of-many and becomes one-of-a-kind through usage is a candidate for SFT representation.

Risks and Considerations

Smart Contract Complexity

A single ERC-1155 contract managing fungible, semi-fungible, and non-fungible tokens introduces more complexity than a single-purpose contract. The mixing of token types and batch operations creates edge cases that are harder to test and audit. A vulnerability in the contract could expose every asset type it manages simultaneously, rather than affecting just one token.

Marketplace and Wallet Support

Not all wallets and marketplaces handle ERC-1155 tokens as smoothly as ERC-20 or ERC-721 tokens. Some platforms display SFTs incorrectly, fail to show batch balances, or do not support the state transition that differentiates pre-use and post-use tokens. Users may find it confusing when a token that was previously interchangeable suddenly becomes unique.

State Transition Irreversibility

Once a semi-fungible token transitions to non-fungible, the change is typically irreversible. A redeemed ticket cannot be un-redeemed. This means the contract logic governing the transition must be correct from deployment: bugs in the state transition function could permanently miscategorize tokens or lock assets in an unintended state.

Metadata Dependency

SFTs often rely on off-chain metadata (stored via URI pointers) to describe their pre-use and post-use states. If the metadata server goes down or the URI changes, the distinction between fungible and non-fungible states may become invisible to users and marketplaces, even though the on-chain state remains correct.

Limited Adoption Outside Gaming

While the SFT model applies to many asset types in theory, adoption remains concentrated in blockchain gaming. Event ticketing, voucher systems, and financial instruments have seen limited real-world SFT deployments compared to traditional approaches. Developers considering SFTs should evaluate whether the added complexity of on-chain state management justifies the benefits for their specific use case.

This glossary entry is for informational purposes only and does not constitute financial or investment advice. Always do your own research before using any protocol or technology.