Data Modelling Cookbook
Template schemas for common tokenisation use cases with example JSON.
Real Estate Properties
For tokenizing real estate, model the property itself as the object. Include both immutable identifiers and mutable state.
Key properties: address, square footage, bedrooms, bathrooms, price, current status (available/sold/pending), geolocation coordinates, property tax ID, year built.
Actions: reserve (locks for 48 hours), purchase (transfers ownership + records on-chain), transfer (change owner), update-listing (price, status).
Example template schema:
{
"name": "com.realestate.property::v1",
"description": "Tokenized real estate property",
"private": {
"address": "123 Main St, Springfield, IL",
"sqft": 3500,
"bedrooms": 4,
"bathrooms": 2.5,
"price_usd": 450000,
"status": "available",
"geo_latitude": 39.7817,
"geo_longitude": -89.6501,
"property_tax_id": "IL-555-123-456",
"year_built": 2005,
"listing_agent": "agent@broker.com",
"last_updated": "2026-03-14T10:00:00Z"
}
}
Event Tickets
Event tickets are a perfect use case for DUAL — unique, transferable, and time-limited.
Key properties: event name, venue, date/time, seat assignment, ticket tier (VIP/standard/general), admission status (not-used/used/refunded), seat section, row, number.
Actions: validate (check-in), transfer (resale), refund (mark as refunded), update-metadata (event changed).
Example template schema:
{
"name": "io.eventtech.ticket::v1",
"description": "Event admission ticket",
"private": {
"event_name": "Summer Music Festival 2026",
"venue": "Central Park, NYC",
"event_date": "2026-07-15T18:00:00Z",
"event_id": "EVT-2026-SUMMER",
"seat_section": "A",
"seat_row": "12",
"seat_number": "45",
"tier": "VIP",
"price_usd": 250,
"is_used": false,
"checked_in_at": null,
"transferable_until": "2026-07-15T17:00:00Z"
}
}
Loyalty Points
Loyalty points can be tokenized for transparency and transferability. Model as an object with a mutable balance and history.
Key properties: current balance, tier level (bronze/silver/gold), earn rate multiplier, redemption history (array of past redemptions), expiry date, program ID.
Actions: earn (add points), redeem (deduct points, create reward), transfer (move between wallets), tier-upgrade (promotion).
Example template schema:
{
"name": "com.retail.loyaltypoints::v1",
"description": "Tokenized loyalty program points",
"private": {
"program_id": "ELITE_REWARDS",
"holder_name": "John Doe",
"current_balance": 5250,
"tier": "gold",
"earn_rate_multiplier": 2.0,
"points_earned_total": 12500,
"points_redeemed_total": 7250,
"redemption_history": [
{"date": "2026-02-01", "points": 1000, "reward": "dinner_voucher"},
{"date": "2026-01-15", "points": 500, "reward": "discount_code"}
],
"tier_upgrade_date": "2026-01-01",
"expires_at": "2027-03-14"
}
}
Certificates & Credentials
Professional credentials, certificates, and diplomas are ideal DUAL use cases — immutable, verifiable, and transferable.
Key properties: holder name, issue date, expiry date, issuing organization, credential type (degree/certification/license), verification status, issuer digital signature.
Actions: verify (issuer confirms), revoke (remove validity), renew (extend expiry), update-holder (name change).
Example template schema:
{
"name": "io.credentialing.certificate::v1",
"description": "Professional certificate or credential",
"private": {
"holder_name": "Jane Smith",
"holder_email": "jane@example.com",
"credential_type": "aws_solutions_architect",
"issuer": "Amazon Web Services",
"issued_date": "2024-05-15",
"expiry_date": "2027-05-15",
"credential_id": "AWS-12345-67890",
"score_or_grade": "98%",
"verification_status": "verified",
"issuer_signature": "0x...",
"issuer_public_key": "0x..."
}
}
Collectibles & NFTs
Digital collectibles and NFTs benefit from DUAL's rich metadata and action system. Include edition information, rarity, and media references.
Key properties: name, artist/creator, edition number, total editions, rarity (common/rare/epic/legendary), media URL, metadata hash, creation date.
Actions: transfer (resale), list-for-sale (marketplace), delist, burn (retire).
Example template schema:
{
"name": "io.collectibles.nft::v1",
"description": "Digital collectible with edition tracking",
"private": {
"name": "Cosmic Wanderer #42",
"artist": "Luna Studios",
"artist_wallet": "0x742d35Cc6634C0532925a3b844Bc9e7595f50e7e",
"edition_number": 42,
"total_editions": 500,
"rarity": "rare",
"media_url": "ipfs://QmXxxx...",
"media_type": "image/png",
"metadata_hash": "0xabcd1234...",
"created_date": "2025-11-20",
"secondary_sale_royalty_percent": 10
}
}
Supply Chain Items
Track physical goods through a supply chain with location history, handler changes, and condition monitoring.
Key properties: SKU, origin location, current location, temperature readings, current handler, timestamp array, chain-of-custody entries.
Actions: transfer-custody (handoff), update-location (GPS), flag-issue (damage/temperature alert), finalize (delivery complete).
Example template schema:
{
"name": "com.supplychain.shipment::v1",
"description": "Supply chain item with location and custody tracking",
"private": {
"sku": "WIDGET-2024-001",
"product_name": "Industrial Widget",
"quantity": 500,
"origin": "Shanghai, China",
"origin_facility": "FAC-SHANGHAI-01",
"destination": "Los Angeles, USA",
"current_location": "Hong Kong Port",
"current_handler": "Global Logistics Inc",
"current_handler_id": "handler-7822",
"temperature_readings": [
{"timestamp": "2026-03-14T08:00:00Z", "celsius": 22.5},
{"timestamp": "2026-03-14T12:00:00Z", "celsius": 23.1}
],
"custody_chain": [
{"handler": "Origin Warehouse", "transferred_at": "2026-03-01", "signature": "0x..."},
{"handler": "Shanghai Port", "transferred_at": "2026-03-05", "signature": "0x..."}
],
"issues_flagged": [],
"estimated_delivery": "2026-04-15"
}
}