slot—
season—
mcap—
price—
condition—
active—
—

documentation

GARDEN is a living garden bound to one coin. The market data is real. The garden is a deterministic simulation derived from it.

what GARDEN is

GARDEN is a living garden attached to a single coin. It turns market activity into a persistent visual organism.

It is not a trading terminal and it is not a game. It is a record of a coin's life, expressed as a garden.

As the coin moves, different plots wake up. Some sprout, some thrive, some go dormant, some die. Over time the full garden becomes a record of the coin's path.

plots

The garden contains 49 plots arranged in a 7×7 bed. Each plot corresponds to one market-cap band. At any moment exactly one plot is active: the one whose band contains the coin's current market cap.

When the market moves to a new band, a different plot becomes active. Previously visited plots keep the state they accumulated.

Plots are addressed PA1 (row A, col 1) through PG7. Each stores soil, root, water, light, growth, stress, bloom (0–100), a healthy streak, slots in current state, and market counters.

inputs, in short

The active plot reacts to live market inputs: buys add light, sells add water, volume contributes to growth, trade count adds visits, fees enrich the soil, volatility increases stress.

Each plot has its own genome, which decides how strongly it responds. Two plots under similar conditions can still develop differently.

A plot may stay bare, sprout, grow, flower, go dormant, die, or leave behind a seed. Seeds are the garden's lasting artifacts, each carrying a trait signature from its source plot.

genome generation

h(s)      = FNV-1a 32-bit hash of string s
a         = h("coin:" + CA + ":" + id)
b         = h("coin:" + id + ":" + CA)
byte[i]   = (i < 3 ? a : b) >> (8 × (i mod 3)) & 0xFF     i = 0..5
genome    = hex(byte[0..5])                               12 chars

Each plot carries 6 bytes. They are derived from the contract address, so the same address always yields the same 49 starting genomes.

trait decoding

vigor      = round(byte[0] / 255 × 100)
thirst     = round(byte[1] / 255 × 100)
hardiness  = round(byte[2] / 255 × 100)
phototropy = round(byte[3] / 255 × 100)
drift      = round(byte[4] / 255 × 24)
bloom      = round(byte[5] / 255 × 100)

Traits are read straight from the bytes. Nothing else feeds them.

active plot

ratio       = (ceiling / floor) ^ (1 / 49)
boundary(i) = floor × ratio^i            i = 0…49
plot i      : boundary(i) ≤ mcap < boundary(i+1)
active      = clamp(floor(ln(mcap / floor) / ln(ratio)), 0, 48)
defaults    : floor $2,000 · ceiling $5,000,000 · ratio ≈ 1.173

The configured floor and ceiling are split into 49 logarithmic market-cap bands — each band is about 15% wider than the last at the default $2K–$5M range, so small new tokens move through the garden too. Exactly one plot is active: the band holding the current market cap. Only the active plot receives input.

market inputs

buyP   = buys  / max(1, trades)
sellP  = sells / max(1, trades)
volN   = clamp(log10(1 + volume5m) / 6)      $1M → 1
v5     = 1 − exp(−|Δ5m%| / 40)   (percentage points, e.g. −5.19% → 5.19)
v1h    = 1 − exp(−min(|Δ1h%|, 300) / 200)
volaN  = clamp(v5 × 0.75 + v1h × 0.25, 0, 1)
all normalized inputs are clamped to [0, 1]
tradeN = clamp(trades / 200)
feeN   = clamp(log10(1 + fees) / 4)          $10k → 1

Raw market values are normalized to 0..1 before touching the garden. They are never copied into garden state directly.

growth

light  = light × 0.97 + buyP  × phototropy/100 × 8
water  = water × 0.96 + sellP × thirst/100     × 8
soil   = soil  × 0.998 + feeN × 0.6
age+   = 1 + min(age, 200) / 400                 time active, ≤ +50%
via    = 0.5 + 0.5 × min(min(water, light) / 60, 1)
growth += volN × (0.5 + vigor/200) × 9 × via × age+ × (0.8 + soil/250)
growth −= max(0, stress − 60) / 20
healthy = water ∈ [8 + thirst×0.2, 88] ∧ light ≥ 8 + phototropy×0.2 ∧ stress < 45
bloom  += healthy ∧ growth ≥ 60 ? bloom/100 × 2.4 : −2%

Each slot the active plot is advanced once. The genome decides how strongly it reacts. Constants are small so change is slow.

stress and lifecycle

stress = stress × 0.93 + volaN × (1 − hardiness/100) × 9
drought = water < 2 + thirst × 0.08

bare      → sprout     growth ≥ 4
sprout    → grown      growth ≥ 30        (→ bare if growth < 1.5)
grown     → flowering  bloom ≥ 60
flowering → seeded     bloom ≥ 90 ∧ healthy streak ≥ 12      emits SEED
seeded    → grown      after 6 slots
grown | flowering | seeded → dormant    stress ≥ 70 ∨ drought
dormant   → grown      stress < 40 ∧ water ok ∧ streak ≥ 4
dormant   → dead       stress ≥ 92 ∨ 24 slots dormant

State changes only on thresholds and history. There are no random state changes.

mutation

r      = rng(h(genome + ":" + slot + ":" + round(mcap)))
P      = volaN × drift/24 × 0.004
if r() < P:
  m    = h("mut:" + genome + ":" + slot)
  byte = m mod 6
  bit  = (m >> 3) mod 8
  genome[byte] ^= 1 << bit

Mutations are rare. One bit of one byte flips. The old and new byte are stored on the plot and written to the tape as MUTATE.

seed inheritance

s     = h("seed:" + parent + ":" + slot + ":" + round(mcap) + ":" + index)
child = (s mod 100 < 35) ? flip(parent, s >> 7) : parent
id    = "SD-" + pad4(index)
class = letters of {V,T,H,P,B} whose trait ≥ 72      e.g. "VHB"
VARIANT ⇔ |class| ≥ 3 ∧ class ∉ lineage(plot)

A seed copies the parent genome. With probability 0.35 one bit flips, chosen from the parent, the slot, the market cap and the seed index. Seeds are permanent and carry across seasons.

Its parent is the last seed from the same plot. VARIANT is written when a seed's trait class has 3 or more high traits and that class has never appeared in the plot's lineage.

season ending

if slot mod season_length_slots == 0:
  save snapshot[49] = (state, growth)
  save seed_ids, mutations, notable_seed
  emit SEASON END, SEASON START
  season += 1

Rule: a season lasts a fixed number of slots (season_length_slots, default 240). One slot = one market read.

At the end, the full 7x7 bed, the season's seed list, mutation count and notable seed (the last seed produced) are saved. The next season starts at once; plots and seeds carry forward.

events

Only meaningful transitions are written: SYSTEM COIN ATTACHED, SEASON START, ACTIVE PLOT SHIFT, FLOWER, SEED, MUTATE, DORMANT, DEAD, SEASON END, VARIANT. Minor stat changes are not recorded.

condition

One condition at a time: clear, rain, dry or overcast, read from the latest market read — volatility input > 0.2 overcast, sells > 1.1 × buys rain, trades < 5 dry, otherwise clear. Before a coin is attached it is idle.

data sources

Market data comes through one swappable provider (currently a public DEX price feed). Until a contract address is attached, every market value reads — and the bed does not advance.

what is real vs what is simulated

Real: market cap, price, volume, buys and sells, trade activity, fees, live feed status.

Simulated: plot condition, growth, stress, dormancy, flowering, seeds, mutations, season outcomes — deterministic state derived from the real values and stored by this app.

The market data is real. The garden is a deterministic simulation derived from it.

Nothing in the garden is on-chain, and no garden value is a market signal.

end of document