Our blog

🔍 Analyzing | Reusable NFTs? The Revolutionary ERC-6672 NFT Protocol

At the beginning of this year, a Taiwanese startup RE:DREAMER introduced a brand new standard protocol — ERC-6672, building upon the foundation of ERC-721. This protocol revolutionizes the concept of NFTs by allowing them to be redeemed multiple times, opening up a multitude of possibilities for NFT interactions with the real world.

ERC-6672: The Multi-Redeemable NFT

According to the definition from RE:DREAMER Lab, ERC-6672 is an extension of the ERC-721 standard that introduces a “status” field within the ERC-721 framework. This field records the redemption status and is stored within the NFT smart contract.
With ERC-6672, NFT holders can now prove their ownership and eligibility for physical or digital assets and have the ability to redeem their NFT multiple times. This means holders can utilize their NFTs in various scenarios, acquiring different rights or experiences.
Additionally, ERC-6672 provides enhanced transaction transparency, allowing buyers to easily view the redemption status of the NFT, creating a seamless and effortless experience for buyers.

Application Example

Let’s say a band decides to host a digital music concert, and they create a special NFT as the ticket. This NFT can be redeemed at the time of purchase for access, which is the first redemption.
After the concert, holders may discover they can redeem it for exclusive concert memorabilia, such as a signed poster or a limited edition phonograph record. This is the second redemption.
Lastly, the band may organize an exclusive fan meet-up, and only those holding this NFT can attend. This NFT can again be used to enter the meet-up, which is the third redemption.
In contrast to traditional ERC-721 NFTs, which can typically be used only once, ERC-6672 allows an NFT to be redeemed in multiple scenarios. Each redemption is recorded on the blockchain, enabling users to track the complete history of an NFT.

Interface Analysis

The ERC-6672 interface includes the following functions and parameters:
pragma solidity ^0.8.16;

/// @title ERC-6672 Multi-Redeemable NFT Standard
/// @dev See https://eips.ethereum.org/EIPS/eip-6672
/// Note: the ERC-165 identifier for this interface is 0x4dddf83f.
interface IERC6672 /* is IERC721 */ {
    /// @dev This event emits when an NFT is redeemed.
    event Redeem(
        address indexed _operator,
        uint256 indexed _tokenId,
        address redeemer,
        bytes32 _redemptionId,
        string _memo

    /// @dev This event emits when a redemption is canceled.
    event Cancel(
      address indexed _operator,
      uint256 indexed _tokenId,
      bytes32 _redemptionId,
      string _memo

    /// @notice Check whether an NFT is already used for redemption or not.
    /// @dev 
    /// @param _operator The address of the operator of the redemption platform.
    /// @param _redemptionId The identifier for a redemption.
    /// @param _tokenId The identifier for an NFT.
    /// @return Whether an NFT is already redeemed or not.
    function isRedeemed(address _operator, bytes32 _redemptionId, uint256 _tokenId) external view returns (bool);

    /// @notice List the redemptions created by the given operator for the given NFT.
    /// @dev
    /// @param _operator The address of the operator of the redemption platform.
    /// @param _tokenId The identifier for an NFT.
    /// @return List of redemptions of speficic `_operator` and `_tokenId`.
    function getRedemptionIds(address _operator, uint256 _tokenId) external view returns (bytes32[]);
    /// @notice Redeem an NFT
    /// @dev
    /// @param _redemptionId The identifier created by the operator for a redemption.
    /// @param _tokenId The NFT to redeem.
    /// @param _memo
    function redeem(bytes32 _redemptionId, uint256 _tokenId, string _memo) external;

    /// @notice Cancel a redemption
    /// @dev
    /// @param _redemptionId The redemption to cancel.
    /// @param _tokenId The NFT to cancel the redemption.
    /// @param _memo
    function cancel(bytes32 _redemptionId, uint256 _tokenId, string _memo) external;
_operator (address type): Represents the wallet or contract address of the operator of the redemption platform.
_redemptionId (bytes32 type): The identifier created by the operator for a redemption event.
_tokenId (uint256 type): The token ID of the NFT.
The main purpose of this interface is to allow multiple operators to provide redemption services for the NFT contract. The `_operator` parameter will vary depending on the wallet or address of each operator.
In a scenario where multiple events are organized by different operators using the same NFT, different `_redemptionId` values can be generated to ensure that redemption events for different activities do not conflict with each other.


The ERC-6672 redemption protocol enables faster integration and connection of digital products in the online world, bridging the gap between the digital and physical realms. It allows for a more direct and tangible experience of digital goods while also facilitating faster online transactions on e-commerce platforms, thereby creating new models for digital transactions.
Embrace blockchain technology in your business today and unlock new business value! If you are seeking reputable and experienced blockchain experts, don’t hesitate to contact us without delay.
Founded in 2015, AVS Consulting has three offices in Malaysia, Germany and Armenia, serving over 80+ clients worldwide. We provide customers with one-stop consulting services on Blockchain and 3D configuration, involving development fields such as NFT marketplace, Web3 applications, metaverse avatars, and immersive 3D interactive experiences.