Docs
How to use the lab and the readiness check, the exact scoring formula, what stays on your device, and what the tools deliberately do not do. For the cryptography itself, read the primer.
Overview
Trellis has two tools and a primer. The lab creates throwaway keys in your browser, signs and verifies with Ed25519 and the NIST post-quantum signatures, runs X25519 and ML-KEM-768 side by side, and includes a Devnet panel that sends a real Ed25519-signed Solana transaction. The readiness check is a 15-question self-assessment that scores how prepared a Solana team is to change its cryptography.
Using the lab
Signatures and key exchange, classical next to post-quantum, with keys that never leave the tab.
- 1Choose a scheme. Click a card. The strip below it shows the standard, the key and signature sizes against Ed25519, and the size of the smallest transfer if that scheme signed it. Switching scheme throws away any keys and signatures.
- 2Generate a keypair. Creates a key in memory and records how long that took. The public key is shown in full. The secret key is shown only as its first and last bytes and its length. New keypair replaces it and discard drops it.
- 3Sign. Edit the message and press Sign. The scheme signs the exact UTF-8 bytes; the signature appears in hex with its size and signing time.
- 4Verify, and try to cheat. Verify checks the signature against the signed message and times it. It then checks the same signature against the message with one character added. That second check must fail; the chip reads
edited message rejectedwhen it does, and turns red if an edited message were ever accepted.
| Scheme | Standard | Pubkey | Signature | In the lab |
|---|---|---|---|---|
| Ed25519 | RFC 8032 | 32 B | 64 B | runs |
| ML-DSA-44 | FIPS 204 (Dilithium) | 1,312 B | 2,420 B | runs |
| ML-DSA-65 | FIPS 204 (Dilithium) | 1,952 B | 3,309 B | runs |
| ML-DSA-87 | FIPS 204 (Dilithium) | 2,592 B | 4,627 B | runs |
| SLH-DSA-SHA2-128f | FIPS 205 (SPHINCS+) | 32 B | 17,088 B | runs |
| Falcon-512 | FIPS 206 (draft) | 897 B | 666 B | size only |
The runnable schemes use the open-source @noble/curves (Ed25519, X25519) and @noble/post-quantum (ML-DSA, SLH-DSA, ML-KEM) libraries, which have been independently audited.
The smallest-transfer figure. The lab starts from a real 183-byte Ed25519 transfer to self (the transaction the Devnet panel sends), swaps in the scheme's signature, and adds its public key minus 32 bytes, because a 32-byte address cannot double as a larger verification key. The result is compared with Solana's 1,232-byte cap. It is a floor: real transactions carry more accounts and data.
Key exchange. Exchange keys creates X25519 keypairs for Alice and Bob and derives the shared secret on both sides. Encapsulate creates an ML-KEM-768 keypair, wraps a fresh secret to the 1,184-byte encapsulation key (giving a 1,088-byte ciphertext) and unwraps it. Tamper ciphertext flips one random bit and unwraps again; because of implicit rejection the result is an unrelated secret, not an error. Once both have run, the hybrid box shows HKDF-SHA256 over the ML-KEM secret followed by the X25519 secret. TLS uses the same order but its own key schedule, so treat the hybrid box as an illustration.
Timings are single runs in your browser. Use them to compare schemes on one machine; they are not benchmarks.
The Devnet panel
Follow one real classical transaction, the path a post-quantum migration has to replace.
- 1Create a Devnet keypair. Makes a new Ed25519 Solana keypair in memory and shows its address. A new key discards the old one for good.
- 2Verify on Devnet, no SOL needed. Signs the 183-byte transfer to self and asks a Devnet validator to simulate it with signature checking on. The validator verifies the Ed25519 signature, then stops because the key holds no SOL (
AccountNotFound). A copy with one signature bit flipped is checked too and must come backSignatureFailure. Nothing is sent or stored on chain. - 3Get Devnet SOL. The site's own Devnet faucet sends the key 0.002 SOL, enough for hundreds of transfers, and waits for confirmation. If that faucet is empty, the request falls back to the public Devnet faucet. Devnet SOL has no value. Each key is funded once.
- 4Send 100 lamports to self. Builds a System Program transfer from the keypair to itself, signs it in the browser, submits it to Devnet and waits for confirmation. You get an explorer link, the exact size in bytes, and the size the same transfer would be with ML-DSA-44.
- Devnet only. Requests go through this site's small server proxy, which only forwards a short list of read, send and status calls to a Devnet RPC. The panel never touches mainnet and never asks for a wallet.
- Throwaway keys. The keypair lives in tab memory and disappears on reload. Don't send anything of value to it.
- Classical on purpose. It signs with Ed25519 because that is the only scheme Solana verifies for transaction signers today.
How the check scores
The formula in full. The tables below are generated from the same code that scores your answers.
There are 15 multiple-choice questions in 5 areas. Each option is worth a fixed number of points, shown next to it as +n, and the weakest option in each question is worth 0. Every question in a step must be answered before moving on.
| Area | Qs | Max pts | Weight | Weighted max | Share |
|---|---|---|---|---|---|
Signing surface Where classical signatures hold your product up. | 3 | 18 | ×1.0 | 18 | 21.1% |
Key custody How keys are created, held, rotated and recovered. | 3 | 17 | ×1.0 | 17 | 20.0% |
Long-lived secrets What someone recording your traffic today could read later. | 3 | 16 | ×0.8 | 12.8 | 15.0% |
Swap-ability How cheaply you can change an algorithm. | 3 | 17 | ×1.2 | 20.4 | 23.9% |
Plan and people Who owns the move, and when it happens. | 3 | 17 | ×1.0 | 17 | 20.0% |
| Total | 15 | 85 | — | 85.2 | 100% |
- 1Area percent. Points earned in an area divided by that area's maximum, rounded. This is the bar on each area card, and it is not weighted.
- 2Overall score. Each area's points are multiplied by its weight and summed, divided by the weighted maximum (85.2) and rounded to a whole number out of 100. An area's real influence depends on both its weight and its point total; the share column shows the combined effect.
- 3Band. The overall score maps to one of five bands.
| Band | Score | Roughly means |
|---|---|---|
| Unmapped | 0–19 | No real preparation yet. Begin with an inventory of keys and signatures. |
| Mapped | 20–39 | The risk is understood, but little has been built or written down. |
| Building | 40–59 | Inventory and ownership exist, and agility work has started. |
| Hardening | 60–79 | Abstractions, rotation and a plan are mostly in place. |
| Swap-ready | 80–100 | Answers sit at or near the top option in every area. |
Next moves are attached to particular answer options and listed after scoring for each one you picked. Export JSON downloads the timestamp, score, band, per-area breakdown, the option you picked for each question and the next moves. The file is generated in your browser.
Bands describe answers, not outcomes. “Swap-ready” means your self-reported practice scores well against these questions. It does not mean a product is quantum-resistant, and it does not change the fact that Solana transaction signatures are Ed25519 today.
Privacy
- Nothing is stored. Every key in the lab and the Devnet panel is created in your browser and held only in page memory: no local storage, no cookies, no server. A reload wipes it.
- Nothing you type is sent. Messages, keys, signatures and check answers are never transmitted or logged. The site loads no analytics or tracking scripts.
- The one network call you trigger. The Devnet panel sends the throwaway public key and, when you press send, the signed Devnet transaction to this site's proxy, which passes them to a Devnet RPC to fund the key, read its balance and submit the transaction. Both become public on Devnet like any other. The proxy logs nothing; the secret key never leaves your browser.
- Ordinary hosting logs. Like any website, the host may keep standard request logs such as IP address and page. They contain nothing you type into the tools.
Limits
- For learning, not production. The lab demonstrates sizes and behaviour. Don't use its keys or code to protect anything of value; whatever you ship needs its own review.
- Not an audit. The readiness check is self-reported and its questions simplify a complex topic. A high score opens a conversation, it does not certify anything.
- No post-quantum transactions on Solana. Solana accepts only Ed25519 transaction signers today. The Devnet panel is classical because it has to be.
- A floor, not a forecast. The smallest-transfer figure uses a minimal one-signer transfer. Real transactions are larger.
- Browser timings. Single runs of JavaScript. Native implementations are much faster.
- Devnet can be flaky. Devnet is a test network and is sometimes slow, and the site faucet can run dry between top-ups. Failures there are not failures of the lab.
- No predictions. Nothing on Trellis estimates when a cryptographically relevant quantum computer will exist.
Official addresses
The only official token and deployer addresses are the ones in the token panel on the overview page. Copy them from there, and compare every character of any address posted elsewhere.
These docs describe the tools. Nothing here or in the primer is financial advice.
Go to the token panel