i-on
benchslabchannelsmembraneordersmethodsourcesx

How i-on works

This is the whole method, written out so that anyone can rebuild it. Where a number came from a paper, the paper is linked. Where a number is ours, it says so. There is no step here that is hidden, because the only private thing in this project is a balance, and even that can be seen with a key.

The tissue

The neurons are from the MICrONS dataset, the minnie65 volume, a 1.4 by 0.87 by 0.84 millimetre block of visual cortex from a mouse aged 87 days. It was imaged with serial section electron microscopy and segmented automatically, then proofread by people. We use static release v1300 from January 13, 2025. From it we take the cells whose axon and dendrite were both marked proofread, keep the eleven classes listed on the slab page, sort by id, and stop at 2,048. The slab is a sample, not the volume. It is not a whole circuit. Every cell in it is missing most of what it connects to in life, and we say so on every page where that matters.

plate one, the slab in the volume

the slab1.4 mm0.87 mm0.84 mm
The whole imaged volume, and the part of it our cells come from.

The cells

Each cell is one point in the model. Its shape is only for drawing: we sample its proofread skeleton down to at most 400 points and draw those. Its type comes from the published cell type model, and its type decides only one thing in the model: whether it excites or inhibits the cells it connects to. Pyramidal cells excite. Basket, bipolar, Martinotti and neurogliaform cells inhibit.

the constants

constantvalue
membrane time constant tau_m20 ms
synaptic time constant tau_s5 ms
resting potential V_rest-52 mV
reset potential V_reset-52 mV
threshold V_th-45 mV
refractory period t_ref2.2 ms
membrane resistance R_m10 MOhm
integration step dt0.1 ms
synaptic weight per synapse w_10.275 mV
weight scale s8

The model

The model is leaky integrate and fire. Every tenth of a millisecond, each cell's voltage relaxes toward rest, is pushed by the current injected into it, and is pushed by the synaptic drive it received. When it reaches threshold it spikes, resets, and ignores everything for 2.2 milliseconds. The constants are the ones used for a whole fly brain in Shiu, Sterne and colleagues, 2024, because they are published, they are plain, and they make a network of this size fire at rates that look like tissue. The weight scale of 8 exists because the slab sees only a small fraction of each cell's real inputs.

I_syn_i  <- I_syn_i * exp(-dt / tau_s) + sum over presynaptic spikes at this step of (sign_pre * w_1 * s * n_syn_pre_i)
V_i      <- V_i + (dt / tau_m) * ((V_rest - V_i) + R_m * I_ext_i + I_syn_i)   when not refractory
if V_i >= V_th: emit spike, V_i <- V_reset, refractory until t + t_ref

plate two, one cell for one second

A single cell with half a nanoampere of current and no synapses. This is drawn by running the model in your browser right now.

The wiring

Synapses come from the published synapse table, counted per ordered pair of cells that are both in the slab. A pair with more synapses pushes harder. Excitatory cells add to the target's drive, inhibitory cells subtract. We do not know the real strength of any synapse; we know how many there are and how big they are, and we use the count.

wiring in numbers

whatvalue
cells
pairs
synapses counted
mean synapses per pair
cells with no input in the slab
cells with no output in the slab
excitatory pairs
inhibitory pairs

The channels

A one minute price move becomes a current. A quarter of a percent is one unit, three quarters saturate. The current goes into that stock's listeners, twenty four cells near the middle of that stock's run along the slab. The voters are twenty four cells at the ends of the run. Between them is the field, which hears only through synapses. ZEC is the ninth channel and it goes into every inhibitory cell with the opposite sign of what you might expect: a rise makes them fire and the slab goes quiet.

from move to current

one minute movestock current nAchloride current nA
-1.00%-1.50-1.00
-0.75%-1.50-0.75
-0.50%-1.00-0.50
-0.25%-0.50-0.25
-0.10%-0.20-0.10
+0.00%0.000.00
+0.10%0.200.10
+0.25%0.500.25
+0.50%1.000.50
+0.75%1.500.75
+1.00%1.501.00

The rule

At the end of each minute the voters' spikes are counted against what is usual for them, which is the median of their count over the last thirty quiet minutes. A rise with one and a half times the usual firing is a buy. A fall with half the usual firing is a sell. A stock that was acted on in the last fifteen minutes is left alone. A position is never more than a quarter of the book.

if d > 0 and r >= 1.5 and no buy of this stock in the last 15 minutes and position value < 25 percent of book: BUY
if d < 0 and r <= 0.5 and position > 0 and no sell of this stock in the last 15 minutes: SELL
otherwise: HOLD

sizing

parametervalue
buy size10 percent of the book
position cap25 percent of the book
sell sizethe whole position
lockout after acting15 minutes
buy threshold1.5 times usual
sell threshold0.5 times usual
usualmedian of the last 30 quiet minutes
quiet minutea move under 0.05 percent
minimum quiet minutes before acting5

The bath

The book is one account on Robinhood Chain. It holds USDG and stock tokens. Stock tokens are ERC-20 tokens with eighteen decimals issued against real shares, and their balances carry a multiplier that changes on corporate actions, so we convert balance to shares with the multiplier and never touch the price with it. Prices are Chainlink feeds on the chain, eight decimals, read with latestRoundData. A feed older than an hour is stale and its channel injects nothing. Orders are swaps on Uniswap on Robinhood Chain, signed by a keeper that is not this site.

how an order is sent

stepdetail
routeUSDG to the stock token, or back, on Uniswap on Robinhood Chain
slippage50 basis points, or the order fails
confirmationpolled every 5 seconds for 2 minutes
soft confirmationunder one second from the sequencer
hard finalityabout 13 minutes, after Ethereum finality
who signsthe keeper, never the site

The membrane

The inside is a Zcash Orchard address. Its full viewing key is public; its spending key is not. Once a day, half of what the bath has gained above its best goes inside, through a swap to ETH, the canonical bridge to Ethereum, and a NEAR Intents swap from ETH to ZEC delivered to the inside address. The bridge takes seven days. The note that arrives carries a memo with the run's receipt. If the bath falls under 85 percent of where it started, the pump runs the other way, and that is the only time the spending key is used.

the route

hopwhat happenswhere it is publichow long
1the bath swaps USDG for ETH on Robinhood Chainthe transaction on Robinhood Chainone block
2the ETH is withdrawn through the canonical bridge to Ethereumthe withdrawal on Robinhood Chain and the claim on Ethereumseven days, the refractory period
3the ETH is swapped for ZEC through NEAR Intents, sent to the inside addressthe deposit on Ethereumminutes
4the ZEC arrives as an Orchard note with a memoonly with the viewing keyone block

plate three, the two sides

pumprefractoryintentsoutbath, Robinhood Chaininside, Zcash Orchard
Open circles are today's public orders. Filled circles are every private note so far. The band between them is the pump.

Time

One second of your time is ten seconds of the slab's. A real minute is ten model minutes. Spikes are stored every hundred model milliseconds. The map, the slab and the clamp on the bench replay the server's steps; the server is the only authority on what fired.

clocks

whathow long
wall second10 model seconds
wall minute10 model minutes
step0.1 ms
stored resolution100 ms
voter windowthe last 10 model minutes
price readevery wall minute at second 0
book readevery wall minute at second 20
pump check21:00 UTC daily
inside readevery 5 minutes

A minute walked through

At second zero the feeds are read. Suppose one stock has moved. Its listeners get a current for the next ten model minutes. Its voters fire, or do not. At the end of the minute the voters' count is compared with what is usual. If the move was up and the count was high, the rule buys a tenth of the book, unless it already acted or the position is full. The order goes to the keeper, which signs a swap and returns a hash. The hash is written down. The log line is written down. The next minute starts.

What can go wrong

failure and what you see

failurewhat the site shows
a feed is stalethe channel status reads stale and it injects nothing
the sequencer is downevery channel reads sequencer down
the market is closedthe channel reads closed
no keeperorders are written with the status not sent
no addressthe book slots are empty and the label says no address configured
no cave tokenthe wiring tables show their headers and say the token is not set
a font failed to loadthe header says so in teal
the model stalledthe log header reads stalled with the age in seconds

Glossary

wordmeaning
slabthe set of cells we simulate
baththe public side, the account on Robinhood Chain
insidethe private side, the Zcash Orchard address
membranethe boundary between them and the pump across it
channelone input: a stock, or ZEC
listenera cell that receives a channel's current
votera cell whose spikes are counted for a channel
fielda cell that hears only through synapses
usualthe median voter count over quiet minutes
the pumpthe daily move of excess inside
refractorythe seven day bridge wait
notea received amount inside, with its memo
keeperthe service that signs, off this site

Run it here

plate four, your run

channelfired
AAPL
MSFT
NVDA
AMZN
GOOGL
META
TSLA
SPY
The same code as the server, run on your machine from the same starting state. It will not match the server exactly, because the server keeps running while you read.