CTAG 
What
Short for "composable tag", it's an ERC-721 NFT representing a tag namespace used within ETS.
Why
CTAGs enable ETS to:
- Guarantee each tag string resolves to a single, definitive token
- Create permanent ownership rights for tag namespaces
- Build complete historical records of tag usage
- Drive value through protocol-wide fee distribution
- Enable consistent tag reuse across all applications
- Record immutable attribution for all tag actions
How
CTAGs are deterministically generated from input tag strings through the ETSToken contract.
1. Tag String Validation
The tokenization process begins with validating the input tag string to ensure it adheres to ETS standards. This includes:
- Starting Character: Must begin with
#
. - Allowed Characters: Supports any Unicode character.
-
Prohibited Characters:
- Spaces (0x20).
- Additional
#
characters after the first position.
- Length Requirements: Must fall within
tagMinStringLength
andtagMaxStringLength
.
Input | Valid/Invalid | Reason | Namespace |
---|---|---|---|
#example | ✅ Valid | Starts with # , no spaces, no extra # . | #example |
#Example123 | ✅ Valid | Case-insensitive, alphanumeric allowed. | #example123 |
#示例 | ✅ Valid | Contains valid Chinese characters. | #示例 |
#🚀Launch | ✅ Valid | Emoji and alphanumeric characters allowed. | #🚀launch |
#🔥 | ✅ Valid | Single emoji after # is valid. | #🔥 |
#💡GoodIdea | ✅ Valid | Emoji combined with alphanumeric is valid. | #💡goodidea |
#Bad_Idea | ✅ Valid | Underscores are fine. | #bad_idea |
#مرحبا | ✅ Valid | Arabic script is valid. | #مرحبا |
#こんにちは | ✅ Valid | Japanese Hiragana/Katakana are valid. | #こんにちは |
#12345 | ✅ Valid | Numeric-only tags after # are valid. | #12345 |
example | ❌ Invalid | Missing # at the start. | N/A |
#example tag | ❌ Invalid | Contains a space. | N/A |
#example#tag | ❌ Invalid | Contains an extra # after the first char. | N/A |
# | ❌ Invalid | Length is less than tagMinStringLength . | N/A |
#🔥 🚀 | ❌ Invalid | Contains a space between emojis. | N/A |
#测试#tag | ❌ Invalid | Contains an extra # after the first char. | N/A |
2. CTAG Data Structure
struct Tag {
address relayer; // Address of Relayer that facilitates CTAG creation
address creator; // Address that initiated CTAG creation
string display; // Display version of tag string
bool premium; // (deprecated)
bool reserved; // (deprecated)
}
3. ID Generation
CTAGs are identified by a unique ID computed from the lowercased tag string:
tagId = uint256(keccak256(bytes(lowercased_tag)));
This means once #Punks
is minted, all future inputs like #PuNkS
, #punks
, and #PUNKS
will point to the CTAG with the namespace #punks
. This ensures a single NFT for each unique tag namespace.
4. Creating CTAGs
All tag creation in ETS happens through Relayers, which provide the interface between users and the protocol:
- Direct Tag Creation
- Users submit tag strings via Relayer interface
- Relayer validates and forwards to ETS core
- Creator attribution recorded on-chain
- New CTAGs held by ETS platform
- Enters auction queue based on usage, with active tags released first
- Creation Through Tagging
- Users submit tagging actions via Relayer
- ETS core checks if tag exists
- If tag is new, core automatically mints CTAG
- Tagger recorded as Creator
- New CTAG associated with Target in Tagging Record
5. Purchasing CTAGs
CTAGs are distributed through a continuous English auction system (see ETS Auction):
-
Initial Holding
- Upon creation, CTAGs are held by ETS platform
- Tags accumulate usage metrics while held
- Most-used tags prioritized for auction release
-
Auction Release
- Tags released through ETSAuctionHouse contract
- Multiple concurrent auctions possible (default: 3)
- 24-hour auction duration with anti-snipe buffer
- Minimum bid increment of 5%
- Reserve price in native currency (ETH/MATIC)
-
Bidding Process
- First bid starts auction timer
- Late bids extend auction by 15 minutes
- Highest bidder wins ownership rights
- Previous bidders automatically refunded
-
Settlement & Transfer
- Any address can settle ended auctions
- Winner receives CTAG ownership
- Proceeds split between platform/creator/relayer
- New ownership term begins
6. Ownership and Term Length
Ownership terms are managed through the ETSToken contract, creating a renewable ownership model that ensures active stewardship of CTAGs.
- Ownership term length is defined by
ownershipTermLength
protocol parameter - Any address can renew a tag via
renewTag()
- Term clock starts at transfer or last renewal timestamp
- Expired tags can be recycled by any address via
recycleTag()
- Recycling transfers tag back to platform address
- Platform-held tags have no active term clock
- Term expiry checked via
tagOwnershipTermExpired()
- Recycled tags become available for new auctions
7. Tag Reuse and Composability
Once a CTAG is minted, any future use of the same tag string when creating Tagging Records will reference the existing CTAG. This ensures:
- Consistent tag reuse across the protocol.
- Clear attribution and provenance of tag origination.
- Audit trail for tagging actions.
- Monetization through fees and auctions.
Tokenomics
CTAGs generate revenue through two channels:
-
Per-Tag Fee in Tagging Records
- ETS charges a micro-fee for each CTAG used in a tagging record.
- Fee distribution:
- Relayer: For originating the CTAG.
- Owner: As a return on their investment in the tag.
- Protocol: To fund ongoing operations and development.
-
Auction Proceeds
- When a CTAG is sold at auction, proceeds are distributed among:
- Relayer: For originating the CTAG.
- Creator: For their initial contribution to the tag ecosystem.
- Protocol: To support the protocol and incentivize adoption.
- When a CTAG is sold at auction, proceeds are distributed among:
Revenue Distribution Table
The revenue distribution for fees and auction proceeds is governed by ETS-defined percentages.
Revenue Source | Relayer | Creator | Owner | Platform |
---|---|---|---|---|
Tagging Fees | 30% | -- | 50% | 20% |
CTAG Auction | 20% | 40% | -- | 40% |
CTAG Resale | -- | -- | 100% | -- |
(Note: Percentages are preliminary and subject to change.)