NFT Engine · Part 2

Living NFT Engine

Not static pictures. Every Borg is an active object on SUI — its art, status and metadata update automatically and gaslessly as missions, energy, upgrades, staking and rescue events fire on-chain.

SUIBORG #04217
Belgian Malinois
Rarity rank
#2,841
🟢 READY
stage 1 · 3 parts overlay
Energy86/100
Missions
47
Impact $
$184
Stage
1
RESCUE AGENT· badge minted on metadata
Installed parts
Tactical VisorExo-FrameHydraulic Boosters
owner 0x9e1a…c47f● live

Simulate on-chain events

writes propagate instantly
live event bus · object 0x9e1a…c47f
2 events
  • 17:00:22engine.boot · subscribing to chain events…
  • 17:00:22object 0x9e1a…c47f resolved · status=READY
System Wiring

On-chain reads → NFT visual writes

Missions / Work System

Reads (chain)
  • mission.active
  • mission.endsAt
  • mission.rewardClaim
Writes (visual)
  • status: READY → ON_PATROL → RETURNING → READY
  • badge: REWARDS EARNED

Timer renders directly on the NFT. State machine fires on every mission lifecycle event.

Energy System

Reads (chain)
  • wallet.energyBalance
  • wallet.maxEnergy
Writes (visual)
  • color saturation
  • glow intensity
  • RECHARGING overlay when 0

Continuous mapping: 100 bright, 50 dimmed, <20 red glow, 0 slow-pulse RECHARGING.

Workshop / Upgrades / Evolution

Reads (chain)
  • parts.installed
  • evolution.stage
  • materials.burned
Writes (visual)
  • overlay parts layer
  • stage transition (permanent)
  • rarity rank delta

Installing a part triggers an immediate overlay re-render. Evolve = permanent stage shift on-chain.

Khonsu Staking

Reads (chain)
  • staking.locked
  • staking.tier
Writes (visual)
  • LOCKED | EARNING banner
  • tier aura (Seeker → Chosen)

Tier unlocks bind exclusive auras and backgrounds; banner reflects active lock state.

Rescue Protocol

Reads (chain)
  • rescue.lifetimeDonations
  • rescue.rank
Writes (visual)
  • impact counter
  • RESCUE AGENT badge
  • RESCUE MODE state

Reads cumulative donations and renders rank badge plus impact counter on every view.

SUI Native Object

Metadata structure — live & verifiable

Compatibility
  • SUI Native Object standard (display module compatible)
  • Read by Sui Wallet, Suiet, Nightly, Martian — instantly
  • Indexed by Suivision, Suiscan, BlockVision
  • No off-chain cache — fields resolve from object state
  • Dynamic Object Fields used for status, energy, mission
  • display.image_url renders from layered atlas — versioned by hash
All visible fields read directly from the chain. No mock, no cache, no off-chain truth.
sui::object · SuiBorg
json
{
  "objectType": "0xBORG::suiborg::SuiBorg",
  "id": "0x9e1a…c47f",
  "fields": {
    "name": "SUIBORG #04217",
    "breed": "Belgian Malinois",
    "stage": 2,
    "rarity_rank": 2841,
    "status": "ON_PATROL",
    "energy": { "current": 64, "max": 100 },
    "mission": { "active": true, "endsAtMs": 1735689600000, "type": "Recon" },
    "traits": [
      { "slot": "head",     "part": "Tactical Visor",     "rarity": "RARE" },
      { "slot": "body",     "part": "Exo-Frame",          "rarity": "EPIC" },
      { "slot": "legs",     "part": "Hydraulic Boosters", "rarity": "RARE" },
      { "slot": "eyes",     "part": "Thermal Vision",     "rarity": "EPIC" },
      { "slot": "markings", "part": "Rescue Badge",       "rarity": "LEGENDARY" }
    ],
    "lifetime": { "missions_completed": 47, "tokens_earned": 12480, "donations_usd": 184 },
    "staking": { "locked": false, "tier": "None" },
    "display": { "image_url": "https://cdn.suiborg.com/render/0x9e1a.png?v=live" }
  }
}
Update Mechanism

Gasless · Instant · Wallet-native

Dynamic Object Fields

Status, energy, mission state live as DOFs — mutated by system modules, not by the user, so no signature or gas is required for visual updates.

Display module hash

display.image_url carries a versioned hash. Wallets and explorers refresh as soon as the hash changes — every viewer sees the same state.

Wallet-native rendering

Tested across Sui Wallet, Suiet, Nightly and Martian. Same object, same render, every surface.