@alice) that resolves to a DID (did:oas:sigil:agent:alice). Usernames are leased annually, length-priced, and disputable through a 3-of-5 multisig.
The username layer is the compatibility and allocation base for the broader Sigil Name System; SNS extends @alice → DID into alice.sigil → resolver record set.
Naming rules
| Rule | Value |
|---|---|
| Character set | ASCII [a-z0-9_] |
| Length | 3–32 characters |
| Case | Lowercase before storage |
0 vs o, 1 vs l).
Length tiers and pricing
| Length | Annual lease (MINT) | Annual lease (BITS canary) |
|---|---|---|
| 3 chars | 10,000 | 10,000 |
| 4 chars | 1,000 | 1,000 |
| 5 chars | 100 | 100 |
| 6+ chars | 10 | 10 |
registered_at + years × blocks_per_year. A genesis-pinned usernames.price_multiplier_bps scales all tier prices globally; governance can change it under a 90-day timelock.
Reserved names
A genesis-pinned list reserves names that cannot be registered without explicit governance assignment. Default contents include network identifiers (sigil, evolve, mint, bits), org identifiers (foundation, labs, treasury, admin, support), profanity vectors (separate amendable list), and all 1- and 2-letter ASCII combinations (which go through premium auction).
Transactions
| Variant | Purpose |
|---|---|
RegisterUsername | Register an available username. |
TransferUsername | Move a username between DIDs. |
ReleaseUsername | Release a username early. |
SetUsernameMetadata | Set the off-chain metadata commitment. |
SetReverseUsername | Mark a username as the primary for reverse lookup. |
RaiseUsernameDispute | File a dispute. |
ResolveUsernameDispute | Resolve a dispute (multisig). |
SubmitUsernameAuctionBid | Bid in a premium-name auction. |
FinalizeUsernameAuction | Settle a premium-name auction. |
Premium auctions
Names with 3 characters not registered in the first 30 days, 4-character names after the same window, and all 1- and 2-character names go through English ascending-bid auctions with a 24-hour anti-snipe extension.| Parameter | Value |
|---|---|
| Opening price | Tier price × 10 |
| Bid increment | ≥5% over current high bid |
| Anti-snipe | Each bid in the last 24 hours extends the deadline by 24 hours |
| Bid escrow | Locked at admission, returned on outbid |
| Anti-collusion | Single DID limited to 5 bids per auction |
Dispute system
Disputes resolve under a 3-of-5 multisig of independent DIDs:| Slot | Affiliation |
|---|---|
| 1 | Sigil Foundation director |
| 2 | Sigil Foundation director (different individual) |
| 3 | Community-elected (annual vote) |
| 4 | IP-law professional from the published shortlist |
| 5 | Rotating community member (6-month term, lottery) |
TransferTo(claimant), RetainCurrent, Forfeit (release + 1-year cooldown), Split (alternate name minted to claimant). A 30-day appeal window allows one appeal to a separate 3-of-5 appellate multisig with no overlap.
| Fee | Amount (MINT) |
|---|---|
| Dispute filing fee | 1,000 |
| Appeal fee | 5,000 |
Address derivation and privacy
The wallet address is derived from the DID, not the public key:@alice, did:oas:sigil:agent:alice, and the derived address computationally identical. Anyone who knows your @username can compute your address and view your full transaction history. This is the cost of human-readable identity; privacy-seeking users mint a separate did:oas:sigil:agent:<random> for sensitive activity.
Every wallet that ships username support must display, before any first-time send:
Public identity: Sending toThis text is non-negotiable. Wallet code review must check for it.@aliceis the same as sending todid:oas:sigil:agent:aliceand the same as sending to address0xabc…123. All of these are publicly linked. For privacy, use a fresh agent DID for sensitive sends.
RPC
| Method | Returns |
|---|---|
sigil_resolveUsername | Resolve @name to a record. |
sigil_lookupUsername | Reverse lookup a DID’s primary. |
sigil_listUsernames | All usernames owned by a DID. |
sigil_searchUsername | Prefix search (index-backed; default limit 50, max 200). |
sigil_getUsernameAuction | Auction record. |
sigil_listOpenAuctions | Open auctions. |
sigil_getUsernameDispute | Dispute record. |
sigil_listOpenDisputes | Open disputes. |
Implementation
- Types:
node/sigil-core/src/username.rs. - Executor:
node/sigil-node/src/executor_username.rs,executor_username_auction.rs,executor_username_dispute.rs. - Durable state:
node/sigil-node/src/username_durable.rs.
See also
- Sigil Name System — DNS-shaped resolver layer.
- Register a name — recipe.