Security rooted in Wurdy.
Wurdy: a signing design for Solana wallets. Keys grow out of one tree of hash outputs, so your wallet leans on a single plain primitive instead of stacked bets. Early days: whatever has been stated sits on this page, and everything else is marked empty.
Nothing is claimed until it is stated.
Each outside fact, whether an address, a handle or a figure, lives in one record with one of three states. A record with nothing behind it stays visibly empty, never a guess.
What the Solana tape is doing.
Ten tokens with the heaviest 24h turnover among those currently boosted. Readings refresh on their own, and a read that misses shows dashes rather than a guess.
Paste an address, get a plain answer.
The gate checks whatever you paste against the addresses the register states. Strings starting with 0x are compared like any other. Shape never gets a string thrown out; only a missing match does.
| Register | You paste | Verdict |
|---|---|---|
| No address stated | Any address-shaped string, 0x hex included | No match is possible |
| Address stated | The stated address, exact | Match |
| Address stated | Any other address-shaped string | Not the stated one |
| Either | Anything that is not address-shaped | Nothing to compare |
One root, keys used once.
A sketch of how the pieces relate. What is written here is design intent. Figures stay empty until they are measured and published.
Seed
The starting secret. Later material is derived from this one secret; back it up and all else is covered.
Plain about what we know.
On the left, what the design leans on. On the right, what stays unclaimed until a record exists to point at.
✓What the design leans on
- ■A single plain primitive, the hash, carries the weight.
- ■Separate trees per wallet and per network.
- ■The check runs in a program anyone can read.
- ■Every outside fact shows its state.
–Not claimed yet
- ■No contract address on record (pending).
- ■No x on record (pending).
- ■No github on record (pending).
- ■No paper on record (pending).
- ■No proof size on record (pending).
- ■No check cost on record (pending).
- ■No key lifespan on record (pending).
- ■No setup time on record (pending).
- ■No audit on record (pending).
Verify us, do not trust us.
Six habits that work on any project. They work on this one too.
Match, then trust
Paste any address into the gate. Only an exact match with the register counts.
Respect the blanks
An empty record is empty on purpose. A blank always beats a guess.
Check the domain
The register names one domain, wurdy.si. Mirrors and look-alikes are not ours.
Distrust the unprompted
Treat any direct message that arrives with a link or an address as unverified.
Ask the network
Once an address is stated, query the endpoint personally rather than trusting a page that quotes an answer.
Read icons honestly
A handle or repository appears only after it is stated. An icon with no link is empty on purpose.
The register and gate, as shipped.
Excerpts lifted from the project files during the page build.
{
"records": [
{
"id": "chain",
"kind": "fact",
"label": "Network",
"state": "stated",
"value": "Solana",
"source": "client statement",
"scope": "batch-level"
},
{
"id": "ca",
"kind": "address",
"label": "Contract address",
"state": "absent"
},
{
"id": "x",
"kind": "social",
"label": "X",
"state": "absent"
}
]
}// verdicts: not-address | no-registry | match | unmatched
export function classify(input, register) {
const text = String(input).trim();
const shape = shapeOf(text);
if (shape === "none") return { verdict: "not-address", shape };
const known = statedAddresses(register);
if (known.length === 0) return { verdict: "no-registry", shape };
const hit = known.find((k) => same(k.value, text));
return hit ? { verdict: "match", shape, record: hit.id } : { verdict: "unmatched", shape };
} --ink-0: #050a0d; /* C: backdrop at 32,0 */
--ink-1: #061012; /* C: backdrop at 1197,386 */
--ink-2: #0b1416; /* B: 1000,200 */
--ink-3: #10201f; /* B: 1000,400 */
--ink-4: #142625; /* B: 1000,500 */
--halo: #244a44; /* B: 1000,1000, centre glow */
--accent: #8beade; /* A: k-means centroid 139,234,222 snapped to 661,570 (light face) */
--accent-2: #57b9ad; /* A: centroid 87,185,173 snapped to 949,597 */
--accent-3: #4ea99e; /* A: centroid 78,169,158 snapped to 1211,762 (shaded blade) */
--accent-hi: #6fefe2; /* C: banner mark at 424,162 */