Skip to content

Add ERC: Non-Transferable Token - #1479

Open
Vantana1995 wants to merge 9 commits into
ethereum:masterfrom
Vantana1995:erc-nontransferable-tokens
Open

Vantana1995 wants to merge 9 commits into
ethereum:masterfrom
Vantana1995:erc-nontransferable-tokens

Conversation

@Vantana1995

@Vantana1995 Vantana1995 commented Jan 20, 2026 •

Copy link
Copy Markdown

Summary

This PR proposes EIP-8129: Non-Transferable Token Standard - a minimal standard for tokens that are permanently bound to an address.

Description

Introduces a dedicated interface for non-transferable (Soulbound) tokens that eliminates transfer functionality by design, rather than extending ERC-721 and blocking transfers. The standard:

  • Defines tokens as non-transferable through interface design (no transfer functions)
  • Reduces bytecode bloat by ~80% compared to ERC-721 extensions
  • Provides semantic clarity - tokens that cannot be transferred vs tokens that block transfers
  • Includes only essential operations: mint(), burn(), ownerOf()
  • Requires ERC-721 Metadata interface for wallet/indexer compatibility

This approach addresses architectural mismatches in existing Soulbound implementations (ERC-5192, ERC-4973, ERC-5484) that inherit unused transfer infrastructure.

@eip-review-bot

eip-review-bot commented Jan 20, 2026 •

Copy link
Copy Markdown
Collaborator

File ERCS/erc-8129.md

Requires 1 more review from Editors: @g11tech, @jochem-brouwer, @samwilsn, @xinbenlv

@eip-review-bot eip-review-bot changed the title EIP-XXXX: Non-transferable Token Standard(Soulbound) Add ERC: Non-Transferable Token Standard Jan 20, 2026
@github-actions github-actions Bot added the w-ci label Jan 20, 2026
Comment thread ERCS/erc-xxxx.md Outdated
@@ -0,0 +1,313 @@
---
eip: <to be assigned>
title: Non-Transferable Token Standard

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
title: Non-Transferable Token Standard
title: Non-Transferable Token

Standard is superfluous in an ERC title

Comment thread ERCS/erc-xxxx.md Outdated
@@ -0,0 +1,313 @@
---
eip: <to be assigned>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
eip: <to be assigned>
eip: 8129

Assigning next sequential EIP/ERC/RIP number.
Numbers are assigned by editors & associates.

Please also update the filename.

Comment thread ERCS/erc-xxxx.md Outdated
title: Non-Transferable Token Standard
description: A minimal standard for tokens that are permanently bound to an address
author: Ivan Zemko (@Vantana1995)
discussions-to: https://ethereum-magicians.org/t/soulbound-nft-as-separate-standard/27407

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
discussions-to: https://ethereum-magicians.org/t/soulbound-nft-as-separate-standard/27407
discussions-to: https://ethereum-magicians.org/t/erc-8129-non-transferable-token/27407

Updated Eth Magicians with assigned number & title

@eip-review-bot eip-review-bot changed the title Add ERC: Non-Transferable Token Standard Add ERC: Non-Transferable Token Jan 21, 2026
@github-actions github-actions Bot added w-ci and removed w-ci labels Jan 21, 2026
@github-actions github-actions Bot removed the w-ci label Jan 22, 2026
@Vantana1995

Copy link
Copy Markdown
Author

@abcoathup what is the next steps, how to merge it to the main >?

@Vantana1995
Vantana1995 force-pushed the erc-nontransferable-tokens branch from fe68cee to 7f30b97 Compare February 16, 2026 07:53

@Vantana1995 Vantana1995 left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review

Comment thread ERCS/erc-8129.md Outdated
---
eip: 8129
title: Non-Transferable Token
description: A minimal interface for tokens that are permanently bound to an address

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[...] minimal [..]

Minimal is a very subjective term and doesn't add much information to your description. It isn't a requirement, but I'd recommend trying to use terms that differentiate your proposal more clearly.

Comment thread ERCS/erc-8129.md Outdated

## Abstract

This EIP proposes a minimal standard for non-transferable tokens (commonly known as "Soulbound tokens"). Unlike existing approaches that extend [ERC-721](./eip-721.md) and disable transfer functionality, this standard defines tokens that are non-transferable by design, eliminating transfer-related functions entirely from the interface.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your abstract is relying too heavily on other soulbound token standards that the audience may not have read yet. Imagine if your proposal became the non-transferable token standard, but it didn't actually explain what a non-transferable token is or what it's for.

Comment thread ERCS/erc-8129.md Outdated

4. **Not Truly Non-Transferable**: Existing implementations either block transfers through restrictions or allow consensual movement between addresses. In both cases, the token is not fundamentally bound to a single address - it's restricted from free transfer or requires consent to move.

Non-transferable tokens represent credentials, achievements, certifications, memberships, and identity attestations - assets that by their nature should be permanently bound to their owner. These use cases deserve a dedicated standard that explicitly communicates non-transferability through the absence of transfer functions, not their restriction.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This paragraph is, in my opinion, more important than the comparisons to other soulbound standards. You need to sell the reader on the idea of soulbound tokens at all before you convince them to use this particular version of them.

Comment thread ERCS/erc-8129.md Outdated
Current Soulbound token implementations take different approaches but all retain some form of token movement between addresses:

- [ERC-5192](./eip-5192.md) and [ERC-5484](./eip-5484.md) extend [ERC-721](./eip-721.md), inheriting its complete transfer infrastructure and then blocking these capabilities
- [ERC-4973](./eip-4973.md) avoids implementing ERC-721's transfer interface but includes `give()` and `take()` functions that allow token movement between addresses with signature consent

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not necessarily a bad thing, but you should note that referencing this proposal creates an implicit dependency. You won't be able to advance ERC-8129 beyond ERC-4973's status (currently review).

Comment thread ERCS/erc-8129.md Outdated
Comment on lines +83 to +103
Compliant contracts MUST implement the ERC-721 metadata interface for human-readable token information:

```solidity
/// @title ERC-721 Metadata Interface (from EIP-721)
/// @dev This is a REQUIRED part of the standard
interface IERC721Metadata {
/// @notice A descriptive name for the token collection
function name() external view returns (string memory);

/// @notice An abbreviated name for the token collection
function symbol() external view returns (string memory);

/// @notice A URI pointing to metadata for a specific token
/// @dev MUST revert if tokenId does not exist
/// @param tokenId The identifier of the token
/// @return The URI string
function tokenURI(uint256 tokenId) external view returns (string memory);
}
```

See [ERC-721](./eip-721.md) for a definition of its metadata JSON Schema.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of duplicating the definition here, just link to the section in ERC-721. Something like:

Suggested change
Compliant contracts MUST implement the ERC-721 metadata interface for human-readable token information:
```solidity
/// @title ERC-721 Metadata Interface (from EIP-721)
/// @dev This is a REQUIRED part of the standard
interface IERC721Metadata {
/// @notice A descriptive name for the token collection
function name() external view returns (string memory);
/// @notice An abbreviated name for the token collection
function symbol() external view returns (string memory);
/// @notice A URI pointing to metadata for a specific token
/// @dev MUST revert if tokenId does not exist
/// @param tokenId The identifier of the token
/// @return The URI string
function tokenURI(uint256 tokenId) external view returns (string memory);
}
```
See [ERC-721](./eip-721.md) for a definition of its metadata JSON Schema.
Compliant contracts MUST implement ERC-721's [`ERC721Metadata`](./eip-721.md#specification:~:text=interface%20ERC721Metadata) interface for human-readable token information.
See [ERC-721](./eip-721.md) for a definition of its metadata JSON Schema.

Comment thread ERCS/erc-8129.md

1. **Minting**:
- Tokens MUST be minted to a specified address via the `to` parameter
- The minting function MUST emit the `Mint` event

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should probably add a section for requirements on events. For example, if a token is created through a function other than the minting function, is the event emitted?

Comment thread ERCS/erc-8129.md Outdated

### Why Not Extend ERC-721 or Use Consensual Transfer?

**ERC-721 Extensions (ERC-5192, ERC-5484):**

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use subheadings instead of bold text. We have h1-h6, might as well use them.

Suggested change
**ERC-721 Extensions (ERC-5192, ERC-5484):**
#### ERC-721 Extensions (ERC-5192, ERC-5484)

Comment thread ERCS/erc-8129.md Outdated
## Reference Implementation

```solidity
// SPDX-License-Identifier: MIT

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code within the document itself must be CC0-1.0 licensed. You can include MIT code in your assets directory if you like.

Comment thread ERCS/erc-8129.md Outdated

### Interface Detection

External contracts MUST NOT assume transfer capabilities based solely on the presence of metadata functions. Always check [ERC-165](./eip-165.md#how-to-detect-if-a-contract-implements-any-given-interface) interface support.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Avoid creating requirements (defined with UPPERCASE keywords) outside of the specification section. They're too easy for implementers to miss. Instead, put the requirements in Specification, and discuss their relevance to security here.

@github-actions github-actions Bot added the w-ci label Jul 27, 2026
@github-actions

Copy link
Copy Markdown

The commit bfde567 (as a parent of 22d4998) contains errors.
Please inspect the Run Summary for details.

@github-actions github-actions Bot removed the w-ci label Oct 2, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants