How Celestials Works
Overview
Celestials are human-readable identities in the form of names ending with .i (like alice.i) that resolve to cryptocurrency wallet addresses across different blockchain networks. A celestial like alice.i allows users to share a simple, memorable name instead of complex wallet addresses like 0x742d35Cc6634C0532925a3b8D5c9e4b1e0e5e5. This creates a unified cross-chain identity system.
Celestial Lifecycle
1. Available Phase
- Status:
AVAILABLE - New celestials start as available for auction
- Anyone can initiate an auction for an available celestial
- The celestial exists only as a potential identity at this stage
2. Auction Phase
- Status:
AUCTION - Users participate in auctions to acquire celestials
- Auctions have configurable durations and bid increments
- The highest bidder when the auction ends wins the celestial
- Some celestials may be reserved for specific users or giveaways
- Bidding extends the auction end time to prevent sniping
3. Auction Ended Phase
- Status:
AUCTION_ENDED - Auction has completed but the celestial hasn't been claimed yet
- The winning bidder has a claim period to finalize ownership
- If not claimed within the claim period, the celestial may become available again
4. Owned Phase
- Status:
OWNED - The celestial has been claimed and is actively owned
- Owner can add/remove addresses for different blockchains
- Owner can set the celestial for sale
- Owner can renew to extend the expiry period
- Owner can revoke (permanently disable) the celestial
- An NFT represents ownership of the celestial
5. Sale Phase
- Status:
ON_SALE - Active celestial owners can list their celestials for sale at a fixed price
- Other users can purchase at the listed price
- Ownership transfers immediately upon purchase
- The celestial returns to
OWNEDstatus under the new owner
6. Expiry and Grace Period
- Status:
OWNEDbut expired - Celestials have expiry periods (typically 365 days)
- After expiry, there's a grace period (typically 30 days)
- During grace period, only the original owner can renew
- Address resolution may be disabled during this phase
- If not renewed, the celestial becomes
AVAILABLEagain
7. Revocation
- Status: Permanently disabled
- Owners can permanently revoke their celestials
- Revoked celestials cannot be renewed, transferred, or reused
- This is irreversible and makes the celestial permanently unavailable
Address Verification System
Celestials can be associated with wallet addresses on multiple blockchain networks. Each address mapping has a verification status that determines its trustworthiness and priority in resolution.
Not Verified
- Status:
NOT_VERIFIED - The address is added but ownership has not been proven
- Anyone can add addresses to a celestial they own
- These addresses have the lowest trust level
- May be filtered out in some resolution queries
- Useful for initial setup before verification is completed
Verified
- Status:
VERIFIED - Address ownership has been cryptographically proven
- The user has provided a valid signature proving they control the private key
- Verification methods vary by blockchain:
- Ethereum/EVM chains: ECDSA signature verification
- Cosmos chains: Secp256k1 signature with public key
- Bitcoin: Bitcoin-specific signature schemes
- Solana: Ed25519 signature verification
- Other chains: Chain-specific signature schemes or off-chain verification
- Verified addresses have higher trust and priority in resolution
Primary Address
- Status:
PRIMARY - Only one celestial can be the primary owner of any address+chain combination
- When a celestial verifies an address, it becomes
PRIMARYfor that celestial - If another celestial already had
PRIMARYstatus for the same address+chain, it gets downgraded toVERIFIED - Primary addresses are returned by default in reverse lookup queries
- This ensures each address resolves to only one "primary" celestial identity
Cross-Chain Resolution
Resolution Priority
When resolving a celestial to an address on a specific chain:
- Primary address is returned if it exists for that celestial
- Most recent verified address if no primary exists
- Most recent unverified address as fallback
- Null if no address exists for the requested chain
When performing reverse lookup (address to celestial):
- Primary celestial is returned for the address+chain combination
- All verified celestials may be returned in some queries
- Unverified celestials are typically excluded from reverse lookups
Address Changes
- Each address change (add, verify, remove) creates a change record
- Changes are ordered and can be queried for synchronization
- External systems can track address updates through change feeds
- Image regeneration may be triggered on address changes
Supported Chains
- The system supports multiple blockchain networks
- Each chain has a unique identifier (e.g.,
0xf043afor Forma) - New chains can be added through configuration
- Chain-specific verification methods handle different signature schemes
Technical Architecture
NFT Integration
- Each owned celestial is represented by an NFT
- NFT metadata includes celestial name and associated image
- Images are generated automatically and stored on IPFS
- NFT ownership follows celestial ownership
Verification Process
There are two ways to verify address ownership:
Off-chain Verification (API-based)
- User adds an address to their celestial (status:
NOT_VERIFIED) - User signs verification message:
"I confirm that I control address '{address}' on chain '{chain_id}' and I want to link this address to Celestial '{celestial_id}'." - User calls the
/api/verification/verify_addressendpoint with:- Celestial ID (e.g.,
alice.i) - Address to verify
- Chain ID (e.g.,
bitcoin,solana,celestia-1,interwoven-1) - Signature of the verification message
- Public key (for some chains like Cosmos)
- Celestial ID (e.g.,
- System validates the signature using chain-specific verification
- If valid, system generates an off-chain signature for contract interaction
- User uses this signature to call the registry contract's verification method
- Address status updates to
VERIFIEDand becomesPRIMARYfor this celestial
On-chain Verification (Direct contract call)
- User adds an address to their celestial (status:
NOT_VERIFIED) - User directly calls the registry contract's
verifyAddressWithSignaturemethod with:- Celestial ID, chain ID, address, expiry, and signature
- Contract validates the signature using the appropriate verifier contract
- Address status updates to
VERIFIEDand becomesPRIMARYfor this celestial
Post-verification Effects
- Any other celestial that previously had
PRIMARYstatus for the same address chain combination gets downgraded toVERIFIED - The address now resolves primarily to the newly verified celestial