Untransferability Indicator for EIP-1155
The ERC-6268 proposal is an extension of the EIP-1155 standard for indicating the transferability of tokens. It standardizes an interface for indicating non-transferability of semi-fungible or fungible tokens, specifically Soulbound Tokens (SBT). The proposal requires smart contracts implementing this standard to conform to the EIP-1155 specification, implement all functions in the IERC6268 interface, and implement the EIP-165 supportsInterface function. For tokens marked as locked, the locked(_id) function must return true and any functions attempting to transfer the token must throw an error. The proposal aims to promote the usage of Soulbound semi-fungible or fungible tokens by introducing a standard non-transferability indicator that is agnostic to fungibility.
Video
Original
Abstract
This EIP standardizes an interface indicating EIP-1155-compatible token non-transferability using EIP-165 feature detection.
Motivation
Soulbound Tokens (SBT) are non-transferable tokens. While EIP-5192 standardizes non-fungible SBTs, a standard for Soulbound semi-fungible or fungible tokens does not yet exist. The introduction of a standard non-transferability indicator that is agnostic to fungibility promotes the usage of Souldbound semi-fungible or fungible tokens.
Specification
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174.
Smart contracts implementing this standard MUST comform to the EIP-1155 specification.
Smart contracts implementing this standard MUST implement all of the functions in the IERC6268
interface.
Smart contracts implementing this standard MUST implement the EIP-165 supportsInterface function and MUST return the constant value true if 0xd87116f3
is passed through the interfaceID argument.
For the token identifier _id
that is marked as locked
, locked(_id)
MUST return the constant value true and any functions that try transferring the token, including safeTransferFrom
and safeBatchTransferFrom
function MUST throw.
// SPDX-License-Identifier: CC0-1.0 pragma solidity ^0.8.0; interface IERC6268 { /// @notice Either `LockedSingle` or `LockedBatch` MUST emit when the locking status is changed to locked. /// @dev If a token is minted and the status is locked, this event should be emitted. /// @param _id The identifier for a token. event LockedSingle(uint256 _id); /// @notice Either `LockedSingle` or `LockedBatch` MUST emit when the locking status is changed to locked. /// @dev If a token is minted and the status is locked, this event should be emitted. /// @param _ids The list of identifiers for tokens. event LockedBatch(uint256[] _ids); /// @notice Either `UnlockedSingle` or `UnlockedBatch` MUST emit when the locking status is changed to unlocked. /// @dev If a token is minted and the status is unlocked, this event should be emitted. /// @param _id The identifier for a token. event UnlockedSingle(uint256 _id); /// @notice Either `UnlockedSingle` or `UnlockedBatch` MUST emit when the locking status is changed to unlocked. /// @dev If a token is minted and the status is unlocked, this event should be emitted. /// @param _ids The list of identifiers for tokens. event UnlockedBatch(uint256[] _ids); /// @notice Returns the locking status of the token. /// @dev SBTs assigned to zero address are considered invalid, and queries /// about them do throw. /// @param _id The identifier for a token. function locked(uint256 _id) external view returns (bool); /// @notice Returns the locking statuses of the multiple tokens. /// @dev SBTs assigned to zero address are considered invalid, and queries /// about them do throw. /// @param _ids The list of identifiers for tokens function lockedBatch(uint256[] _ids) external view returns (bool); }
Rationale
Needs discussion.
Backwards Compatibility
This proposal is fully backward compatible with EIP-1155.
Security Considerations
Needs discussion.
Copyright
Copyright and related rights waived via CC0.
Adopted by projects
Not miss a beat of EIPs' update?
Subscribe EIPs Fun to receive the latest updates of EIPs Good for Buidlers to follow up.
View all