METHODS

Every claim below is backed by a script or test in the repo. Nothing here is marketing copy.

1. Derivation walkthrough

  1. Extraction — from MaleCNS v1.0's own annotation/edge data: the Giant Fiber (DNp01, 2 neurons: 1 per hemisphere), its visual inputs (LC4, LPLC2), and its motor target (TTMn). Top-3 highest-synapse-weight LC4 + top-3 LPLC2 per side are kept (top-K selection) — 12 of 311 available LC4/LPLC2 neurons (3.9%), stated bluntly, not buried in a footnote.
  2. Quantization — each kept synapse weight is quantized to a signed 4-bit magnitude: clamp(floor(raw_weight/6), 1, 15).
  3. Gate compilation — everything except the two output LATCHes compiles to NAND only: De Morgan AND/OR, a 4-NAND XOR, a 9-NAND full adder, an LSB-up-folded magnitude comparator (all textbook digital logic, verified by exhaustive truth-table tests in tests/test_gates.py). Result: 661 gates (659 NAND + 2 LATCH).
  4. Threshold rule — see section 2.
  5. Equivalence — the binarized netlist is checked against an independently-calibrated leaky-integrate-and-fire (LIF) reference model across all 4096 possible stimulus patterns. See section 3.

2. Threshold rule (chosen on principle, not fit to the test set)

Multi-input units (GF/DNp01) use a coincidence-detector rule: threshold = (largest single quantized input magnitude) + 1. This is justified from the biology — the Giant Fiber is a convergence/coincidence detector across looming-tuned channels; no single LC4 or LPLC2 afferent should be able to command a jump by itself — not because it scores best against any one test set. Single-input units (TTMn) keep ceil(0.5 * max_possible_sum), which reduces to an identity pass-through (a one-input unit's own max IS that input, so a coincidence rule would make it permanently unfirable).

We explicitly did not pick the best-scoring fraction (0.15, 100% on the retired sampled set) — a rule chosen to maximize agreement on one published test set is fit to that set, not derived from anything. The full sweep, both the retired sampled numbers and the current exhaustive numbers:

Multi-input thresholdSampled 98-pattern (historical, retired)Exhaustive 4096-pattern
ceil(0.5 * max_sum)80.6%76.7%
ceil(0.4 * max_sum)85.7%88.3%
ceil(0.3 * max_sum)95.9%98.1%
ceil(0.2 * max_sum)98.0%99.1%
ceil(0.15 * max_sum) (rejected — best score, not chosen)100.0%99.8%
ceil(0.1 * max_sum)98.0%99.9%
coincidence rule (largest input + 1) — SHIPPEDn/a (didn't exist yet)98.9%

3. Equivalence — exhaustive, not sampled

Stimulus set: all 4096 possible activation patterns of the 12 kept visual inputs (64 left-hemisphere subsets × 64 right-hemisphere subsets) — exhaustive, not a sample.

Overall jump/no-jump agreement: 98.9% (4051/4096), using the shipped coincidence-detector rule.

Drive levelPatternsAgreement
none11/1 (100.0%)
weak483438/483 (90.7%)
medium27652765/2765 (100.0%)
strong847847/847 (100.0%)

45 of 4096 patterns disagree, all LIF-jumped-but-binarized-didn't (zero false jumps: the binarized model never jumps when the LIF reference wouldn't).

4. Honest limitations

5. Trust model

6. The seed fragment — "the neuron's voice"

The TapeOut seed fragment (2 NAND + 1 LATCH) is the jump-command output stage — it carries no synaptic weights or thresholds of its own (those live in the omitted upstream adder tree/comparator, which stays in full.json and the deployed contract only). Marketed honestly as "the jump-latch — the neuron's voice," never as "encodes the fly's wiring" — that claim belongs to the full netlist, not this fragment.

7. The contract

NandFly.sol — 661 gates, swat(uint16) free view call, swatTx(uint16) on-chain call with a Swatted event and three public counters. Deployed and live on BNB Chain at 0x3AB7b7621dB958c989B4B628D38B2D3d3642980A (source verified on BscScan), born 2026-09-16T07:12:05Z (bornAt() = 1789542725). A post-deploy parity spot-check of 200 patterns against the live contract matched the reference evaluator 200/200 (contract/scripts/parity_check.js — rerun it yourself against the live address). Full deploy procedure: contract/DEPLOY.md.

7b. The feeding wallet

Feeding wallet: 0x14Ab88CF91376451a24179C41965D1f24269e3a6. Policy, published before the first inflow: 80% of every inflow buys components (every purchase is an on-chain receipt), 20% keeps the lab running. All inflows are treated equally — no per-token deals, no endorsements. If the 80% falls short of the mint cost when prices move, we cover the gap ourselves. The wallet's small pre-launch balance is our own deploy-gas float, not donations — the 80/20 policy counts inflows from launch onward.

7c. The whole-brain view (data provenance)

The "whole brain" point cloud on the home page renders soma positions only from MaleCNS v1.0's annotations (somaLocation column): 141,781 of the 211,577 annotation rows carry a soma position; the rest have none and are not shown (nothing is invented). The cloud is decimated to 30,000 points for rendering (uniform stride over the bodyId-sorted list — deterministic, no RNG; ~10,000 on small screens) and quantized to 3×uint16 per point. Extraction script, binary, and a manifest with the exact counts, quantization box, and the 16 on-chain neurons' positions: site/scripts/extract_brain_points.py, site/data/brain-points.json. Positions are anatomy, not wiring — no connectivity is used or implied by this view; the wiring lives in the netlist the contract evaluates.

8. Credits

Derivation repo: github.com/wetware-labs/nandfly