Abstract
ReSynapse is a fully on-chain neural trading card game on Arc. Its token, $RSYN, trades in a plain Uniswap v4 RSYN/USDC pool. The game treats that market as a nervous system: the pool is the brainstem, every swap is an impulse, and a Signal Oracle reads the pool directly to set the network's signal state. The signal state bends Consolidation rewards, pack odds and pack prices in real time.
Cards are neurons: 32 archetypes, drawn pixel by pixel by the contracts. Players open packs with commit-reveal randomness, lock 5-card sets into Consolidation to earn $RSYN, and wire 8-card decks for 64-player Arena bouts resolved entirely by contract code. Pack revenue flows into the Reservoir, which pays full-range liquidity providers, funds the Arena and Consolidation, and burns.
SIGNAL PATH
swap on RSYN/USDC (Uniswap v4 · 1% tier · no hook)
↓ RSYN moves through the PoolManager
Signal Oracle ← reads price + liquidity from the PoolManager
↓
signal state · Potentiation · Inhibition · Recovery
↓
Consolidation rewards · pack odds · pack prices
VALUE PATH
pack purchase → burn + Reservoir
Reservoir → full-range LPs · Arena prize pools · Consolidation rewards · burn
This paper describes the rules as the contracts execute them. Figures come from contract constants; worked examples are marked as illustrative.
Why Arc
ReSynapse runs on Arc, chain id 5042. A game wired into its own market makes many small transactions: a pulse on every trade, pack reveals, round settlements, yield claims. Arc makes those cheap, fast and predictable.
- Gas in USDC. Fees are paid in the same dollar the pool trades against. There is no second token to hold just to play, and costs read in dollars.
- Sub-second blocks. Blocks land roughly every half second. A pack can be revealed about a second after purchase; an Arena round settles in one transaction.
- Timed by the clock. Game windows (signal events, bout entry, Consolidation sessions, pruning epochs) are measured by timestamp in minutes, hours and days. Only randomness commitments count blocks, and those are two blocks ahead.
Every contract and transaction can be inspected on the Arc explorer: explorer.arc.io.
$RSYN
$RSYN is a standard ERC-20 with permit approvals and 18 decimals.
- Max supply: 21,000,000 RSYN, created once. No function can create more.
- 1% buy and sell tax. Buys pay 1% of the RSYN received; sells pay 1% of the RSYN sold, charged on top of the amount sold. Wallet-to-wallet transfers are untaxed.
- Spent on: packs (100 / 500 / 2,500 RSYN) and Arena entries (50 RSYN).
- Earned from: Consolidation rewards, Arena prizes and round bounties, and Reservoir yield for full-range liquidity providers.
- Burned by: every pack purchase (50%, or 25% once circulating supply falls below 1,000,000 RSYN) and 10% of everything the Reservoir distributes. Burned RSYN is sent to an unrecoverable dead address and no longer counts as circulating.
One behaviour is specific to ReSynapse: whenever RSYN moves into or out of the Uniswap v4 PoolManager, the token pulses the Signal Oracle (section 04). The pulse runs on a fixed gas budget and any failure inside it is caught, so it can never make a transfer fail.
Hookless market
Uniswap v4 allows a pool to attach custom code that runs inside every swap. ReSynapse does not use that. $RSYN trades in a plain v4 pool: RSYN/USDC, 1% fee tier, no hook. Swaps, routing and liquidity positions behave exactly as in any other v4 pool, and the 1% pool fee goes to liquidity providers through Uniswap as usual.
The game still feels every trade. It listens from outside the pool:
- RSYN moves into or out of the PoolManager: on every swap, and on every liquidity add or removal that carries RSYN. The RSYN token pulses the Signal Oracle.
- The oracle reads the pool's current price and active liquidity directly from the PoolManager's storage. It does not rely on swap parameters, off-chain feeds or anyone's report.
- It records an observation, sets the signal state, fires any events (section 05) and passes the liquidity reading to the Reservoir for LP accounting.
- Anyone can pulse the oracle at any time. A manual pulse performs the same read.
Moves are measured on RSYN's price in USDC:
move = 2 × (√price_now − √price_ref) ÷ √price_ref (basis points)
state move price_ref = baseline
event move price_ref = price at the previous pulse
baseline set by the first pulse
anyone may refresh it, at most once every 24 hours,
to the oldest of the last 240 recorded observations
Twice the square-root change tracks the price change closely: a 1% price move reads as ≈1%, and a +20% reading corresponds to roughly +21% in price.
Signal states
Every pulse compares the price with the baseline and writes one of five states. The state multiplies Consolidation rewards.
| State | Price vs baseline | Consolidation multiplier |
|---|---|---|
| FIRING | above +20% | ×1.25 |
| EXCITED | +5% to +20% | ×1.10 |
| RESTING | −5% to +5% | ×1.00 |
| DEPRESSED | −20% to −5% | ×0.90 |
| FLATLINE | below −20% | ×0.75 |
Three events fire from single pulses. Each opens a timed window:
| Event | Trigger | Effect | Window |
|---|---|---|---|
| Potentiation | one pulse moves price up ≥1% from the previous pulse | Consolidation rewards ×2 | 20 min |
| Inhibition | one pulse moves price down ≥1% from the previous pulse | pack rarity odds shift toward lower rarities | 20 min |
| Inhibition | ≥10% of the pool's active liquidity leaves at once | pack rarity odds shift toward lower rarities | 10 min |
| Recovery | any pulse while the network is FLATLINE | packs cost 25% less | 20 min |
- Windows only extend. A new trigger can push an end time later, never earlier, and different events can overlap.
- Pack effects lock at purchase. A pack bought during Inhibition keeps the shifted odds when revealed later; a pack bought during Recovery has already paid the lower price.
- Consolidation reads the state and Potentiation at the moment a session is awakened (section 11).
Pruning epochs
Time is divided into 30-day pruning epochs, counted from the start of the game. Each epoch halves the base Consolidation reward.
base reward = 1 RSYN ÷ 2^epoch per power point, per unit multiplier
epoch 0 days 0–30 1.0000 RSYN
epoch 1 days 30–60 0.5000 RSYN
epoch 2 days 60–90 0.2500 RSYN
epoch 3 days 90–120 0.1250 RSYN
epoch 4 days 120–150 0.0625 RSYN
…
epoch 64+ day 1,920 on 0
The epoch that counts is the one current when a session is awakened. Every card also records the epoch it was imprinted in as its generation, visible in its metadata. Generation is provenance; it has no effect in combat or Consolidation.
Cards
Cards are ERC-721 tokens: 32 archetypes, 16 abilities, 5 rarities. Traits are written once, when a card is imprinted, and never change.
- Archetype: one of 32. It fixes the card's cost and ability.
- Rarity: Common · Rare · Epic · Legendary · Mythic.
- Attack and health: rolled within the archetype's range for that rarity.
- Cost: 1–8. Sets the card's place in the combat lineup.
- Ability: one of 16 (section 09).
- Generation: the pruning epoch it was imprinted in.
- Serial: a running number within its archetype (#1, #2, …).
On-chain art. Each card's image and metadata are generated by the contract when requested. The image is a 320 × 448 SVG assembled from the archetype's 16 × 16 pixel sprite, a 32-colour palette, a rarity frame and a 6 × 8 bitmap font drawn as rectangles. The metadata is base64 JSON with the image embedded. No server, no external storage, no font files. Nothing is hosted off-chain.
The First Spark is Mythic and never appears in packs. It is claimed by liquidity providers (section 14).
Combat
A match is a pure on-chain function of two 8-card decks and a match seed. There are no player inputs during play, no hidden state and no external data. The same decks always produce the same result, and any client can recompute it.
SETUP
sort each deck by cost, then token id (the lineup)
each SYNC card: +1 attack per neighbouring SYNC card in the lineup
LOOP up to 50 turns · sides alternate · the first deck moves first
1. start of turn the active side's burns tick (−1 health)
its RETAIN cards heal +2 (up to max health)
2. pick attacker = active side's lowest-cost living card
defender = other side's lowest-cost living card
either side has no living card → match ends
3. strike damage = attack × SURGE / PRUNE multiplier
defender: FLOOD immunity, then INSULATE halves the hit
after the hit: SIPHON heals, OVERLOAD burns, ECHO reflects
4. counter a surviving defender strikes back,
unless the attacker has REFLEX
5. deaths REGROW returns once at half health
APOPTOSIS doubles the next cheapest ally's attack
RESULT
more living cards → more total health → coin flip from the match seed
- Turns: one turn is one side's attack, so 50 turns is at most 25 attacks per side.
- Strikes: counter-attacks are strikes too. SURGE and PRUNE count both; FLOOD, INSULATE and SIPHON apply to both.
- Burns: burn ticks are not hits. FLOOD and INSULATE do not reduce them.
- Lineup: fixed at setup. SYNC bonuses do not change when neighbours die.
- Replays: every match emits its final state (turns taken, survivors per side, and each card's health, attack and status), so any bout can be replayed and checked.
16 abilities
| ID | Name | Trigger | Effect |
|---|---|---|---|
| 00 | NONE | . | No special effect |
| 01 | REFLEX | on attack | The defender does not counter-attack |
| 02 | SURGE | first strike | First attack deals double damage |
| 03 | INSULATE | first hit taken | The first hit it takes is halved (once) |
| 04 | SIPHON | on hit | Heals itself for the damage it deals, up to max health |
| 05 | OVERLOAD | on attack | The target burns for 1 damage per turn for 3 turns |
| 06 | BROADCAST | on attack | Instead of one hit, deals 1 damage to every enemy and applies nothing else |
| 07 | APOPTOSIS | on death | The next cheapest living ally's attack is doubled |
| 08 | ECHO | when attacked | Reflects half of the damage it takes back at the attacker |
| 09 | SYNTHESIZE | trait | No effect in the current combat ruleset |
| 10 | SYNC | match start | +1 attack for each neighbouring SYNC card in the cost-sorted lineup |
| 11 | PRUNE | every 4th strike | Every 4th attack deals 4× damage |
| 12 | REGROW | first death | The first time it dies, it returns at half health |
| 13 | BRANCH | trait | No effect in the current combat ruleset |
| 14 | FLOOD | passive | Immune to any single hit under 5 damage |
| 15 | RETAIN | turn start | Regenerates 2 health at the start of its side's turn |
SYNTHESIZE and BRANCH are trait abilities. They appear on cards and in metadata but have no effect in the current combat ruleset. Every card also prints a two-line summary of its ability; this table is the exact rule the combat code applies.
Packs
Every pack holds 5 cards. Each card rolls its rarity independently, then an archetype available at that rarity, then attack and health within that archetype's range.
| Pack | Price | During Recovery | Odds per card | During Inhibition |
|---|---|---|---|---|
| Spark | 100 RSYN | 75 RSYN | 70% Common · 25% Rare · 5% Epic | 80% Common · 20% Rare |
| Pulse | 500 RSYN | 375 RSYN | 50% Rare · 35% Epic · 14% Legendary · 1% Mythic | 60% Rare · 30% Epic · 10% Legendary |
| Cascade | 2,500 RSYN | 1,875 RSYN | 50% Epic · 35% Legendary · 15% Mythic | 60% Epic · 30% Legendary · 10% Mythic |
Commit-reveal. The randomness for a pack is the hash of a block that does not yet exist when the pack is bought.
1. buy pay the price · the pack commits to the block 2 blocks ahead
price and Inhibition odds are locked now
2. wait until that block exists (about a second on Arc)
3. reveal anyone can reveal · the cards always go to the buyer
seed = committed block hash + pack id + buyer
4. expiry after ~8,191 blocks (a little over an hour) the hash can no longer be read
an unrevealed pack then resolves to 5 floor cards of its base rarity
Floor cards are the lowest-stat version of one fixed archetype: The Misfire (Common) for Spark, The Stray Signal (Rare) for Pulse, The Deep Archive (Epic) for Cascade. Revealing promptly is always better.
Where the RSYN goes: 50% of the price is burned (25% once circulating supply is below 1,000,000 RSYN) and the rest flows to the Reservoir (section 13).
Consolidation
Consolidation is staking for cards. Lock exactly 5 cards for 1, 7 or 30 days. The cards are held by the Consolidation contract for the session. When the session matures, awaken it to receive the cards back plus $RSYN.
reward = deck power
× duration multiplier 1 day ×1 · 7 days ×8 · 30 days ×40
× epoch base reward 1 RSYN ÷ 2^epoch (section 06)
× signal multiplier ×0.75 · ×0.90 · ×1.00 · ×1.10 · ×1.25
× potentiation boost ×2 while Potentiation is active, else ×1
deck power = Σ over the 5 cards of (attack + health ÷ 3) × rarity weight
rarity weight = Common 1.0 · Rare 1.25 · Epic 1.6 · Legendary 2.0 · Mythic 2.5
(health ÷ 3 and each card's weighted value round down to whole points)
- Read at awakening. Epoch, signal state and Potentiation are read when you awaken, not when you lock. A matured session can be awakened at any later time, including during a Potentiation window.
- Owner only. Only the wallet that started a session can awaken it.
- Funding. Rewards are paid from the Consolidation pool, which is funded by the Reservoir. If the pool holds less than the computed reward, the payout is what the pool holds.
Illustrative example, 30-day session awakened in epoch 0 while EXCITED, no Potentiation:
The Stray Signal Common 2 / 3 (2 + 1) × 1.0 = 3
The Engram Rare 4 / 8 (4 + 2) × 1.25 = 7
The Dopamine Flood Epic 6 / 9 (6 + 3) × 1.6 = 14
The Relay Station Legendary 8 / 12 (8 + 4) × 2.0 = 24
The Pruning Event Mythic 10 / 18 (10 + 6) × 2.5 = 40
deck power = 88
88 × 40 × 1 RSYN × 1.10 × 1 = 3,872 RSYN
same session during Potentiation = 7,744 RSYN
same session awakened in epoch 1 = 1,936 RSYN
Arena bouts
The Arena runs single-elimination bouts of up to 64 players. Sealing, drawing and advancing are open to anyone, so a bout never waits on a single operator.
join an 8-card deck you own (no duplicates) + 50 RSYN entry
one entry per wallet · cards are locked for the bout
the first entrant opens the bout: entry stays open 12 hours
seal after the entry window, anyone seals the bout
the bracket commits to the block 2 blocks ahead
draw once that block exists, anyone draws the bracket from its hash
advance anyone advances, one round per call · 6 rounds: 64 → 32 → 16 → 8 → 4 → 2 → 1
whoever settles a round receives a 10 RSYN bounty from the prize pool
claim after round 6 the cards unlock and each placed player claims
- Matches follow the combat rules in section 08. In each pairing the upper bracket slot moves first; the coin-flip tiebreak comes from a seed fixed by the bout, round and match.
- A player without an opponent in a round advances automatically.
- If the committed block hash can no longer be read when the bracket is drawn (~8,191 blocks), the shuffle falls back to a seed derived from the bout itself. Draw promptly.
Prize pool = all entries + the Arena's share of the Reservoir waiting when the bout opened, less round bounties paid. Payouts:
| Place | Share each | Illustrative: full bout, 800 RSYN from the Reservoir |
|---|---|---|
| 1st | 40% | 1,576 RSYN |
| 2nd | 20% | 788 RSYN |
| 3rd–4th | 10% | 394 RSYN |
| 5th–8th | 5% | 197 RSYN |
Example pool: 64 × 50 RSYN entries + 800 RSYN from the Reservoir − 6 × 10 RSYN bounties = 3,940 RSYN.
Reservoir & fees
The Reservoir collects pack revenue and splits it on distribution. Anyone can trigger a distribution, and every yield claim triggers one first.
pack purchase (RSYN)
├─ 50% burned (25% once circulating supply < 1,000,000 RSYN)
└─ rest → Reservoir
├─ 50% full-range liquidity providers
├─ 25% Arena prize pools
├─ 15% Consolidation rewards
└─ 10% burned
USDC reaching the Reservoir → 100% full-range liquidity providers
Net effect per pack at the 50% burn rate: 55% burned, 25% to LPs, 12.5% to the Arena, 7.5% to Consolidation. At the 25% rate: 32.5% burned, 37.5% to LPs, 18.75% to the Arena, 11.25% to Consolidation.
| Fee | Amount | Goes to |
|---|---|---|
| Pack purchase | 100 / 500 / 2,500 RSYN | burn + Reservoir, as above |
| Arena entry | 50 RSYN | that bout's prize pool |
| Uniswap pool fee | 1% of each swap | liquidity providers, through Uniswap |
| Buy tax | 1% of RSYN bought | project wallet |
| Sell tax | 1% of RSYN sold, on top | project wallet |
Claiming LP yield. Liquidity providers claim yield with their Uniswap v4 position NFT id.
- Only full-range positions in the RSYN/USDC pool are eligible.
- Yield accrues pro-rata to liquidity.
- A position's first claim registers it; yield accrues from that point on.
- Each claim pays on the smaller of the position's liquidity now and its liquidity at the previous claim. Liquidity added just before a claim earns nothing until the next one, so add-and-claim flashes gain nothing.
The First Spark
The First Spark is archetype 00: the card for the people who keep the network supplied. It is never in packs.
THE FIRST SPARK
rarity Mythic
attack 8
health 30
cost 8
ability PRUNE every 4th attack deals 4× damage
"BEFORE THOUGHT, THERE WAS CURRENT."
- How to claim: own a Uniswap v4 position NFT in the RSYN/USDC pool holding at least the required liquidity.
- One per wallet. Each position can spark once.
- Claiming does not move or lock the position. Any price range qualifies for the Spark; only full-range positions earn Reservoir yield.
- Like every card, it records its generation and a serial number within its archetype.
Security
What players can rely on:
- No proxies, no upgrades. No contract is upgradeable. The code on the explorer is the code that runs.
- Randomness from future block hashes. Pack rolls and bracket draws use the hash of a block committed to before that block exists. Nobody knows the outcome at purchase or at sealing, and revealing or drawing later cannot pick a different roll; the only effect of waiting past the hash window is the fallback described in sections 10 and 12.
- Deterministic combat. Matches are pure functions of the decks and a fixed match seed. Any client can recompute any result.
- Market read at the source. The Signal Oracle reads price and liquidity from the Uniswap PoolManager itself, not from trade parameters or an outside feed. A failing pulse cannot block a transfer.
- Full-range-only LP yield with flash-add protection. Reservoir yield pays full-range positions only, on the smaller of current and previously recorded liquidity.
- No off-chain art. Images and metadata are generated by the card contract. There is nothing to host and nothing to go offline.
- Fixed rules. Supply is capped at 21,000,000 RSYN. Card traits never change after imprinting. Prices, odds, splits and multipliers are constants in contract code.
Contracts:
Contract addresses are listed in the site footer.
Glossary
- Pulse
- One read of the RSYN/USDC pool by the Signal Oracle. Fires whenever RSYN moves through the PoolManager, or when anyone calls it.
- Signal state
- FIRING, EXCITED, RESTING, DEPRESSED or FLATLINE, set from price vs baseline. Multiplies Consolidation rewards from ×0.75 to ×1.25.
- Potentiation
- A ≥1% up-move in one pulse. Consolidation rewards ×2 for 20 minutes.
- Inhibition
- A ≥1% down-move in one pulse (20 minutes) or a ≥10% liquidity drop (10 minutes). Pack odds shift toward lower rarities.
- Recovery
- Opened by pulses during FLATLINE. Packs cost 25% less for 20 minutes.
- Pruning epoch
- A 30-day period. The base Consolidation reward halves each epoch.
- Generation
- The pruning epoch a card was imprinted in. Recorded on the card forever.
- Consolidation
- Locking 5 cards for 1, 7 or 30 days. Awaken the matured session to get the cards back plus $RSYN.
- Bout
- A single-elimination Arena event for up to 64 players over 6 rounds, sealed, drawn and advanced by anyone.
- Reservoir
- Collects pack revenue and splits it 50 / 25 / 15 / 10 between full-range LPs, the Arena, Consolidation and a burn.
- Floor card
- The minimum-stat card a pack resolves to if it is not revealed before its committed block hash expires.
- The First Spark
- Mythic archetype 00. Never in packs. Claimed once per wallet by RSYN/USDC liquidity providers.