Main
/
List
/
Categories
/
Tags
svmLLM title card: a tiny Solana VM inside neural network weights. 1,130,672 numbers, each written on purpose by a program, 0 trained.

svmLLM: A Tiny Solana VM Built Out of Neural Network Weights

1,130,672 numbers, none of them trained. What it is, what it can do, and what it can't.

14 min read
November 1, 2026

This article started as a 25-post thread on X. Read the original thread on X.

I built a tiny Solana virtual machine out of neural network weights.

It's called svmLLM. It has 1,130,672 numbers, and none of them were trained. A program wrote each one on purpose. It's a computer compiled into matrix form, not a trained AI.

This post walks through what it is, what it can do, and what it can't. Each section has a "simple version" first, then the technical detail.

Two terms first: LLMs and assembly

Simple version: an LLM is autocomplete on a huge scale. It's a program that predicts the next word using billions of learned numbers.

Assembly is the tiny set of instructions a CPU actually runs: add, load, store, jump. Every app ends up as a long list of them.

Two definitions. An LLM: autocomplete on a huge scale, a program that predicts the next word using billions of learned numbers, shown completing 'The cat sat on the' with 'mat'. Assembly: the tiny instructions a CPU runs, shown as add, load, store and jump lines.

Post 2 of the original thread on X

A CPU versus an LLM

Simple version: a CPU is a kitchen following a numbered recipe card, one line at a time. An LLM is a well read writer that continues text.

Both are just math on numbers. Set the weights so the "next step" always equals what the CPU would do, and the model acts as that CPU, exactly.

Analogy: a CPU is a kitchen following a numbered recipe card one line at a time; an LLM is a well read writer that continues text. Both are math on numbers. If the weights are set so the next step always equals what the CPU would do, the model acts as that CPU, exactly.

Post 3 of the original thread on X

What "not trained" means

Training is like teaching a kid to cook: thousands of dishes, each graded better or worse, until the kid ends up with a recipe nobody can read.

We did the opposite. Our program wrote all 1,130,672 numbers on purpose. There's no data and no learning. That also means it can't reason. It just runs what's built in.

Explainer: a trained model is like a kid learning to cook from thousands of graded dishes, ending with a recipe nobody can read; its weights start random and get nudged on data. svmLLM is not trained: code in the repo writes all 1,130,672 weights on purpose, no data, no learning. Benefits: exact and testable against the reference VM, inspectable, cheap and reproducible. Limit: it is not smart, cannot learn or reason, and only runs the narrow instruction set built in.

Post 4 of the original thread on X

What "a program wrote each number" means

Simple version: picture a spreadsheet with 1,130,672 cells. Training fills those cells from data, and nobody knows why each one holds its value.

svmLLM's code loops over every opcode and every input and writes the right answer into each cell, like a times table.

Spreadsheet analogy: a trained AI's cells are filled from data and nobody knows why each holds its value; svmLLM's 1,130,672 cells are each written on purpose by code in the repo that loops over every opcode and input combination. Three kinds of values: one-hot switches that pick the instruction, a decode table that turns on control flags per opcode, and lookup tables with the right answer per input combination. Memory is not weights; it lives in Gated DeltaNet state.

Post 5 of the original thread on X

What one of those numbers actually does

Each number is a weight: how strongly one signal feeds another. Most of them are 0 or 1.

Here's a real example from the add table. One unit gets weight 1 from three inputs (the digit 9, the digit 8, and carry 0), plus a bias of -2, so it fires only when all three are on. Its output weights point at "1, carry 1". In other words, 9 + 8 = 17.

A real weight from svmLLM's add table: one hidden unit has weight 1 from inputs 9, 8 and carry 0 and bias -2, so it fires only when all three are on. Its output weights point at sum digit 1 and carry 1, because 9 + 8 = 17 = 16 + 1.

Post 6 of the original thread on X

Where the idea comes from: Qwenputer

The idea comes from Qwenputer by @divagr1925: a stock Qwen3.5-4B with a RISC-V CPU compiled into its weights (an 18.8 GB checkpoint).

There's no training. A compiler sets every weight directly, and the CPU runs inside the model's own forward passes. You can read the full write-up at divagr.com/blog/qwenputer.

Diagram of Qwenputer: Qwen3.5-4B's original layers plus a RISC-V CPU compiled into added layers, with Gated DeltaNet layers used as RAM. Credit to divagr1925. Checkpoint 18.8 GB.

Post 7 of the original thread on X

What's a Gated DeltaNet?

A Gated DeltaNet is a layer that keeps a running memory grid and updates it at every token.

Normal attention rereads the whole book each time. DeltaNet keeps a notebook instead, so its memory stays the same size no matter how long the text gets. Qwen3.5 uses it in 3 of every 4 attention layers.

Explainer: normal attention rereads everything and its memory grows with the text; Gated DeltaNet keeps a fixed-size notebook grid. Terms: state matrix is the grid, gate is how much old memory is kept, beta is how hard a new value overwrites, keys pick where to write and queries where to read. Qwen3.5 uses it in 3 of every 4 attention layers.

Post 8 of the original thread on X

Turning that memory into exact RAM

Simple version: think of a pantry with numbered shelves. A one-hot key points at exactly one shelf. A gate of 1 means nothing spoils. A beta of 1 means a new item fully replaces the old one.

Technically: Qwenputer sets gate 1 and beta 1 and uses one-hot keys, so each write hits exactly one row. The result is exact RAM.

Diagram of Gated DeltaNet as exact RAM: a one-hot key writes exactly one row of the state matrix, a one-hot query reads it back. Settings: gate 1, beta 1, one-hot keys. Simple version: a pantry with numbered shelves.

Post 9 of the original thread on X

From Qwenputer to svmLLM

svmLLM borrows that same idea (gate 1, beta 1, one-hot keys) and applies it to Solana's bytecode, sBPF.

Today svmLLM is a standalone machine. It is not inside a pretrained LLM yet. There are two planned routes: run an sBPF interpreter as firmware on Qwenputer's CPU, or compile svmLLM in as native layers.

Diagram: Qwenputer's idea flows into svmLLM, a standalone PyTorch machine today. Two planned, not yet built routes: a firmware route and a native route into Qwenputer.

Post 10 of the original thread on X

What's a "PyTorch machine"?

Simple version: PyTorch is LEGO for neural networks. Usually training snaps the bricks into place. We placed every brick by hand.

Technically: PyTorch is a Python library that stores numbers in tensors. Our program writes the weights so the layers act like a VM.

LEGO analogy: on the left, a trained model where training snaps bricks into place; on the right, svmLLM where every brick is placed on purpose by code in the repo. PyTorch is a free Python library for neural networks; numbers live in tensors. Code in the repo writes the weights so the layers act like a VM.

Post 11 of the original thread on X

Inside one svmLLM step

An LLM is built from the same kind of bricks, so svmLLM could be snapped onto one later. That isn't done yet.

Inside svmLLM:

  • One-hot attention lookup fetches each instruction.
  • Lookup-table feed-forward layers do exact math.
  • Gated DeltaNet state holds the registers and memory.

Diagram of one svmLLM step in PyTorch: attention-style one-hot lookup fetches the instruction, lookup-table feed-forward layers do exact math, Gated DeltaNet state holds registers and memory. Weights constructed, nothing trained.

Post 12 of the original thread on X

Why Solana?

Simple version: a Solana program is a recipe card with one tiny step per line: add, subtract, fetch, store, jump to step 5.

Solana programs compile to sBPF, an assembly-like instruction set, and run as a stream of those steps. Anza's solana-sbpf is the reference VM that validators use.

An sBPF instruction stream: mov, add, ldx, stx, jeq, call, exit, flowing one by one into a VM. Labelled: Anza's solana-sbpf is the reference implementation.

Post 13 of the original thread on X

Where the 1,130,672 numbers come from

Simple version: a times table. You don't work out 7 x 8, you look it up. svmLLM's math works the same way.

Code in the repo writes the tables. The 4-bit add-with-carry table has 512 rows (16 x 16 x 2), and the 4-bit multiply table has 4,096. Together with decode, fetch and control, that's 1,130,672 numbers in all. Nothing is learned.

Lookup table diagram: a 4-bit add-with-carry table with 16 x 16 x 2 = 512 rows, and a 4-bit multiply table with 4,096 rows. Total 1,130,672 constructed numbers, 0 trained.

Post 14 of the original thread on X

How do we know it's right?

Simple version: build a new calculator, then punch the same problems into a trusted one and compare every answer. One mismatch and it fails.

Our trusted calculator is Anza's solana-sbpf, the reference sBPF VM. We ran two checks.

Two calculators: svmLLM, the new one, and solana-sbpf, the trusted reference, run the same programs and every answer is compared. One mismatch and it fails. Reference: Anza's solana-sbpf. Two checks follow.

Post 15 of the original thread on X

Check one: our own 134-case suite

svmLLM matches solana-sbpf 0.12.2 on our own 134-case test suite, comparing the status, the instruction count, r0 and the input memory.

The cases break down as 64 math ops (64-bit only), 45 jumps, 13 memory, 6 error, 5 loop and 1 lddw.

To be clear, this is our own suite, not Firedancer's official fixtures.

Bar breakdown of the project's own 134-case suite: 64 math, 45 jumps, 13 memory, 6 error, 5 loop, 1 lddw. Result: 134 of 134 match solana-sbpf 0.12.2. Labelled own test set, not Firedancer fixtures.

Post 16 of the original thread on X

Check two: 1,000 random programs

We also ran 1,000 random programs (seed 1337). All 1,000 matched solana-sbpf, and the weights matched our Python reference on every run.

This was rerun on Nov 1 at commit 127d2b14. You can reproduce it with the repo's run_tests.py and N_RANDOM=1000.

Comparison diagram: random programs, seed 1337, run through svmLLM weights, the Python reference and solana-sbpf 0.12.2. 1,000 of 1,000 matched. Rerun Nov 1, commit 127d2b14.

Post 17 of the original thread on X

Why a small network can do this

Simple version: it's a pocket calculator, not a laptop. The scope is deliberately small:

  • 64-bit math only
  • No syscalls, accounts or cross-program calls
  • Two 128-byte memory windows and 256 instruction slots
  • A flat 1 compute unit per instruction
  • A few milliseconds per simple instruction

Scope box. In: 64-bit math, two 128-byte memory windows, 256 instruction slots, flat 1 compute unit per instruction, a few milliseconds per simple instruction. Out: syscalls, accounts, cross-program calls, ALU32. Simple version: a pocket calculator, not a laptop.

Post 18 of the original thread on X

How fast is it?

Simple version: a normal VM just does the sum. svmLLM looks up each digit in printed tables.

On the same 303-step loop, on our box:

  • solana-sbpf 0.12.2: about 5 ns per instruction
  • svmLLM in PyTorch: about 2.8 ms per instruction

The reason is that each instruction becomes many tensor operations and lookups instead of one native operation.

Speed comparison, measured on the same 8-CPU box with the same 303-instruction loop (sum 1 to 100). Anza's solana-sbpf 0.12.2 interpreter in Rust: about 5 nanoseconds per instruction. svmLLM as weights in PyTorch on one CPU thread: about 2.8 milliseconds per instruction, hundreds of thousands of times slower. The README quotes about 5 ms per simple instruction and roughly 65 ms for div or mod. Each instruction becomes many tensor operations and table lookups instead of a short native code path in a compiled interpreter. Also: flat 1 compute unit per instruction, two 128-byte memory windows, 256 instruction slots.

Post 19 of the original thread on X

Is it secure?

Simple version: it's a lab bench, not a bank vault.

svmLLM is a research prototype with no security audit. It runs reduced sBPF v0 only, with no syscalls, accounts or cross-program calls, so it can't run real Solana programs. Do not use it in production.

Security card: research prototype, no security audit, reduced sBPF v0 only, no syscalls, accounts or cross-program calls, cannot run real Solana programs. Lab bench, not a bank vault. Do not use in production.

Post 20 of the original thread on X

What would happen in production today?

A bigger mess:

  • It's slow, at a few milliseconds per instruction.
  • The memory windows are tiny.
  • Any gap from the real VM would be a consensus-breaking bug.
  • Nothing is audited.
  • It has a bigger, harder to review attack surface than a normal interpreter.

Its value is as an independent cross-checker, not a replacement.

Production today: a normal interpreter compared with svmLLM. svmLLM is slow at a few milliseconds per instruction, has tiny memory windows, any gap from the real VM would be a consensus-breaking bug, nothing is audited, and its attack surface is bigger and harder to review. Its value is as an independent cross-checker, not a replacement.

Post 21 of the original thread on X

What it is, and what it is not

What it is not: it doesn't run real Solana programs yet, it isn't the SVM, and it isn't inside a pretrained LLM yet.

What it shows: an exact, inspectable Solana-style VM can live inside neural network weights, with a public number to build on.

Two columns. What it shows: exact, inspectable Solana-style VM in weights, public reproducible numbers. What it is not yet: runs real Solana programs, the full SVM, inside a pretrained LLM.

Post 22 of the original thread on X

Where could this go?

This is R&D. If more were built, it could become:

  • An independent cross-check for validators
  • Inspectable transaction simulation
  • Models running exact programs internally
  • Solana security research tooling

Honestly, we don't fully know. That's part of the fun.

Possibilities, all conditional on more being built: an independent cross-check for validators, inspectable transaction simulation, models running exact programs inside themselves, Solana security research tooling. We don't fully know where it goes. That's part of the fun.

Post 23 of the original thread on X

What's next

Here's the roadmap:

  • M0: roadmap and repro kit
  • M1: the full v0 instruction set, including ALU32
  • M2: run Firedancer's public VM fixtures

None of these are done yet. You can check today's numbers yourself at svmllm.rexstjohn.com.

Roadmap timeline: today, reduced sBPF v0 with 134 of 134 on its own suite. Next milestones, none done yet: M0 roadmap and repro kit, M1 full v0 instruction set including ALU32, M2 Firedancer public VM fixtures. Later: syscalls, accounts and real programs.

Post 24 of the original thread on X

Learn more

We have not launched any token.

End card: last post in this thread. No token has been launched. Learn more at svmllm.rexstjohn.com, github.com/Verafyai/svmLLM and github.com/Verafyai/evmLLM.

Post 25 of the original thread on X


Read the original thread on X: x.com/rexstjohn/status/2116932210880323797

RSJRex St John
Forward-Looking Statements Notice: Verafy blog articles may contain forward-looking statements regarding Verafy’s future plans, technologies, and market positioning and opinions on possible future achievements. These statements are based on current expectations, predicated on attaining future goals, forecasts, and assumptions that involve risks and uncertainties. Actual outcomes and results may differ materially from those expressed or implied in these statements due to factors such as evolving market conditions, technological challenges, regulatory developments, and other risks beyond Verafy's control. Readers are cautioned not to place undue reliance on forward-looking statements. Verafy undertakes no obligation to update or revise such opinions as a result of later or new information, future events, or otherwise.