Concepts
Attesters
Who signs, what they check, and why one is not enough.
The job
An attester does one thing: fetch the public page, look for the code, and if it is there, sign a statement. It never holds funds, never decides who is the owner on its own judgement, and signs nothing it did not see.
What is signed
upstream:v1:attest|<mint>|<platform>|<id>|<wallet>|<code>|<epoch>|<issuedAt>
Ed25519 over the UTF-8 bytes, base58 encoded. Keys are ordinary Solana-style keys.
What the vault checks on each signature
- The attester is in the vault's trusted list.
- It has not already been counted (one attester, one vote).
- Mint, platform, account id, wallet and epoch match what is being claimed.
- It is fresh: at most 15 minutes old, and not from the future.
- The code inside matches the code the vault computes itself.
- The signature verifies.
Only when at least threshold signatures pass all six does the claim go through. Every failure carries a reason, listed in the error message.
Why k of n
With a single attester, that attester is a single point of trust: if it lies, or is hacked, it can send money to anyone. With 2 of 3, an attacker needs two of three independent operators to fail at once. The default is 2 of 3; the vault accepts any threshold from 1 up to the number of trusted keys.
What "independent" means
Independence is organisational and technical: different operators, different servers, different networks. The code cannot enforce that. It can only enforce that the signatures come from different keys, and say plainly who they are. The set of trusted attesters is part of the coin's public configuration, so holders can see who they are trusting before they buy.
Attesters are the part you have to believe. Everything else (the code, the split, the expiry, the rotation delay) is checkable arithmetic. See Security model for what a dishonest attester can and cannot do.
Running one
node cli/upstream.mjs keygen --out attester.json
node cli/upstream.mjs verify --attester attester.json --mint <mint> --wallet <wallet> <target>
An attester is a program that runs verify when asked and returns the JSON. Its public key goes in the vault's trusted list.
On this website
The app and the labs use three attesters with fixed demo keys, so their behaviour is repeatable. They are staged: they sign what the demo page shows. The signatures are real Ed25519 and are verified by the real engine, but nothing is run by independent operators.
The software for real attesters exists and is tested over HTTP: see Attester network. Point config.js at attesters you run and the app uses them instead of the demo keys.