I Built My Own Solana Fork. Here's What Actually Happened.

I didn't set out to launch a token. I set out to understand what a chain actually is — not in the abstract, but by building one I could boot, break, and watch finalize in front of me. Machine is the result: a Solana fork with its own genesis, its own token, and a public record of everything it can and cannot do yet.

What Machine is

Machine runs Agave 2.3.13 — prebuilt release binaries, nothing compiled from source. It boots from a custom genesis I generated, and the genesis hash is published: 32W8ouqrHbuhE3PM6ZsJrJcDbP7Tx9aC2zRvrEabkQSb.

The native gas token is $MACHINE. Total supply is 1,000,000,000, distributed at genesis as founder 998,999,000, stake 1,000,000, faucet 1,000. The fee schedule is set in genesis and published in full: 9,500 lamports per signature, with 50% of every fee burned.

Nothing about the setup is hidden. The genesis, the fee schedule, and the distribution were published on day one, because a chain that asks you to trust its economics without showing them isn't worth forking.

What is proven

The chain is live as a single-node localnet. It boots from the custom genesis, votes, confirms, and finalizes at roughly 3 slots per second — slot 3,309 and advancing at last check. Full snapshots are produced. The founder balance decreases only by vote-transaction fees paid in $MACHINE, which is the simplest proof that $MACHINE is the gas token from the first block.

The repository holds the whole thing:

  • WHITEPAPER.md — architecture, tokenomics, fee model, and a roadmap where every item is labelled PROVEN with its evidence or NEXT with what it needs.
  • BRIDGE.md — a lock/mint bridge design for bringing an asset over from Solana mainnet. Design only. Nothing has crossed.
  • SECURITY.md — a disclosure policy and bug bounty structure. The honest part: no cash rewards are funded right now, so it says so instead of promising a budget that doesn't exist.
  • livenet/ — a deployment package for a 3-validator live network: key and genesis generation, systemd units, and a cluster check script.

The website is up on free hosting. A build log about the project is live on r/SolanaDev. If you want to run it yourself:

git clone https://github.com/yourmememachine/mememachine ./install.sh ./start-validator.sh 

The gotcha that almost stopped the whole thing

The most useful thing I learned building this is also the least documented. If you generate a genesis with solana-genesis and then try to run a validator on it, the chain will never confirm. It will boot, it will produce slots, and it will sit there, unconfirmed, forever.

The reason is a quiet mismatch in key authority. solana-genesis sets a vote account's authorized voter to the identity keypair. But the validator votes with the vote keypair. So the votes the validator produces are never accepted as authorized, and no slot ever reaches confirmation — which means nothing ever finalizes either.

The fix is a small script in the repo, patch-vote-authority.py. It patches the genesis so the authorized voter is the vote keypair, while the founder keeps withdraw authority. The script has layout checks and aborts on mismatch, because a wrong patch to a genesis file is worse than no patch at all.

This is the kind of detail that makes forking a chain different from reading about one. The documentation tells you the commands. It doesn't tell you that the default genesis is unvotable, or why. You find out by watching a chain that refuses to finalize and tracing the authority chain until the mismatch shows up.

If you are building your own fork and your test validator boots but never confirms, check this first. It will save you the afternoon I spent on it.

What is next

The roadmap is ordered by proof, not by hype:

  1. 3-validator live net. The deployment package is written. What it needs is a host — a machine with a public IP, working UDP, and a file-descriptor limit the validator will accept.
  2. First verified transfer. No transfer between two fresh keypairs has produced a signature yet. My current container blocks UDP send, which breaks the RPC-to-TPU forwarding that user transactions need. The chain votes and finalizes, but a transfer signature on a host where UDP works is the first proof to obtain.
  3. Public RPC. A public endpoint the world can query. Not claimed until it answers.
  4. Bridge. The lock/mint design is written, with a 3-of-5 relayer set, no admin mint key, caps, and a pause path. Building it comes after the live net, and no asset crosses until there is an audit and worthless-amount test crossings first.
  5. Audit. An independent review of the validator configuration and any bridge code, with the report published.

Honest limits

Stated plainly, so nobody has to discover them:

  • 1 validator today, not 3. Machine is a single-node localnet. The 3-validator package exists, but the live network is not running.
  • No token transfer has been verified yet. The chain votes and finalizes, but no user transaction has produced a signature.
  • No bridge exists yet. No asset has crossed between Solana mainnet and Machine, and none will be claimed as bridged until one does.
  • No audit yet. Neither the validator configuration nor any future bridge code has been independently audited.
  • No public RPC yet. There is no public endpoint to query.

Machine is a real chain with real limits. The roadmap is the list of proofs that close those limits, in order.

Links

If you build on it, fork it, or find a bug, the security policy in the repo says how to report it. And if you have built your own fork and hit the same vote-authority wall, I'd like to hear how you solved it.