One voice
One wallet
- island
- lemon
- wagon
- anchor
- doctor
- words 0/5
- live —
- print —
- unique —
challenge 8b0db771 issued · single use · 60 s
Follow one enrollment
- 01
Five words, sixty seconds.
The phrase is random and works once, so yesterday's recording says the wrong words.
island lemon wagon anchor doctorexpires in 60 s · single use - 02
Whisper checks the words.
Speech-to-text has to hear the phrase in order. An old clip stops here.
heard “hello this is an old recording”→ refused - 03
Is it a live voice?
An anti-spoofing model listens for synthetic speech and playback.
AASISTnot switched on yet, see limits - 04
Your voice becomes 192 numbers.
ECAPA-TDNN turns each recording into a voiceprint. You record twice, the two takes must agree, and the verifier keeps their average.
take 1 · take 2agree at 0.79 - 05
Compared with every enrolled voice.
Any voice that scores 0.50 or higher is treated as the same person.
nearest enrolled voice 0.03→ new person - 06
A random ID goes on-chain.
The person ID is 32 random bytes, not computed from the voice. The program opens one account for the wallet and one for the ID.
person 6620d83dfc77d7f6…→ credential for 8vT3…Lq2c
Same voice, second wallet
The second time a voice shows up, it scores against its own enrollment and the verifier refuses. The chain backs this up: a person ID can open its account only once, so it is bound to exactly one wallet at a time.
| From the verifier's test run | closest | |
|---|---|---|
| Voice A → wallet 1 | first voice | credential |
| Voice A → wallet 2 | 0.92 | refused |
| Voice B → wallet 3 | 0.03 | credential |
| Voice B asks to buy as wallet 1 | 0.01 | refused |
What the chain sees
HumanCredentialseeds ["cred", wallet] wallet 8vT3…Lq2c person_id 6620d83dfc77d7f6… issued_at 1792841154 revoked false
PersonLockseeds ["person", person_id] person_id 6620d83dfc77d7f6… bound_wallet 8vT3…Lq2c
your audioyour voiceprintanything computed from either
None of it goes on-chain. The audio is dropped once it's processed. The voiceprint stays with the verifier, encrypted with AES-GCM.
Buying
The buy instruction looks up the buyer's credential. No credential, or a revoked one, and the purchase fails. For a fresh check, the verifier hears a new phrase and signs a 107-byte pass, good for one purchase in the next 60 seconds.
bytes 51–82 the only wallet that can use it
07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07Lost your wallet?
Record again. If the voice matches, the verifier moves your person ID to the new wallet and closes the old credential. You still hold exactly one.
Limits
Liveness detection isn't switched on yet. Until it is, a convincing voice clone can pass the word and voiceprint checks.
0.50 is a starting threshold. It has been tuned on test voices only. Close relatives can sound alike to the model, and one of them may be refused.
The verifier holds the issuing key. Only it can issue credentials. If that key leaks, the admin can revoke what it issued.