Encryption is not anonymity
Who talks to whom, when, and how often is visible to the relay. So are Null IDs, handles, public keys, and controlling addresses.
A wallet-native private communication network — encrypted messages, permissioned contact, and settlement inside the same conversation. This page is the whole position: how it works, what runs today, and what the token is for.
Nothing on this page is an offer to sell or a solicitation to buy any asset. Verify every address and every link against the project's own channels before you transact.
The chain figures above are read from the client's own configuration rather than retyped into the page — change one in lib/chain.ts and every surface follows it.
Every negotiation around an on-chain transfer happens somewhere else — a group chat, a DM, an email thread — where the counterparty is a screen name, the agreement is a screenshot, and the platform holding all of it is not the one holding the money.
It is verified, portable, and carries a keypair. Messaging keyed to it needs no phone number, no email, and no signup: prove the address, derive a messaging key, publish the public half. Two signatures, and the inbox exists.
A stranger cannot message you; they can knock, and a knock can carry a refundable bond. Accepted conversations carry payment requests that settle on-chain. That is the revenue surface — pricing access, not reading messages.
Every step below is running code in this repository. Nothing in this sequence is a mock-up, and nothing in it touches a smart contract.
Connect an EVM wallet and sign in. Two signatures: the first proves you control the address, the second derives the messaging keypair.
No password, no email, no phone number
Publish a handle and a public key against your address. Anyone can resolve the handle to the key; nobody can read a message without it.
Relay record — no gas, no transaction
You cannot be messaged without permission. A stranger sends a knock; you accept, reject, or block it. Nothing reaches the inbox before you decide.
Blocking is silent — a blocked knock goes nowhere
Messages are sealed to your published key with a fresh ephemeral keypair. A payment request lives in the thread and settles on-chain in USDG.
Amounts carried as integer minor units, 6dp
Check every contract address and every link against the project's own channels before you transact. Null will never message you first, and will never ask for a seed phrase or a private key.
| Allocation | Share | NULL | Unlock |
|---|---|---|---|
| Relay incentives | 32% | 320,000,000 | 48-month linear emission |
| Ecosystem & grants | 18% | 180,000,000 | 6-month cliff, 36-month linear |
| Core contributors | 17% | 170,000,000 | 12-month cliff, 36-month linear |
| Early backers | 15% | 150,000,000 | 12-month cliff, 24-month linear |
| Treasury | 12% | 120,000,000 | Released by governance vote |
| Public distribution | 6% | 60,000,000 | Unlocked at listing |
Robinhood Chain runs ETH gas and roughly 100 ms blocks. These are the parameters the client itself uses.
The relay, the encryption, and the permission layer run today. Settlement, bonds, groups, and everything that would make this a network do not.
Nonce, signature, session token. Two signatures — one proves the address, one derives the messaging key.
Workingnacl.box sealed against the recipient's published key, a fresh ephemeral keypair per message. A test asserts the relay never holds plaintext.
WorkingAccept, reject, block. A blocked sender's knock returns 201 and goes nowhere — telling them otherwise invites a fresh identity.
WorkingRequests, receipts, and integer minor units end to end. Settlement records the hash the client supplies; nothing reads the chain to verify it.
PartialThe bond amount travels with the knock. No contract locks it and no contract returns it.
PartialConversations are one-to-one. Group keying and file transport are Phase 2 work.
Not builtKeys re-derive from a signature; history does not transfer. Your sent copy lives in localStorage by design.
Not builtState is a single JSON file today. Fine for an MVP, not for a network, and not rate-limited.
Not builtserver/test/flow.test.ts asserts the relay never holds readable message content. That test is the guard on the property — if the relay is ever made to handle plaintext, it fails.
Each phase is ordered against the one before it. Nothing here carries a delivery commitment, and Phase 01 exists because nothing in Phase 00 has been reviewed by anyone outside the project.
Four passes over
the same network,
one of them lit
Encryption is a property of the message, not of the person sending it. Everything below is a limitation the project already knows about and has written down.
Who talks to whom, when, and how often is visible to the relay. So are Null IDs, handles, public keys, and controlling addresses.
Amount, purpose, and participants are stored unencrypted so receipts can be rendered, and settlement happens on a public chain.
No security review, no cryptographic review, no contract audit, no threat model. This should not be deployed, and money should not be committed to it, until all four exist.
Null will never ask for a seed phrase or a private key, and will never open a conversation with you. Verify every address and every link against the project's own channels; an unsolicited offer is a fraud.
Nothing on this page is an offer to sell or a solicitation to buy any asset, nor is it investment, legal, or tax advice. Independent legal review, cryptographic review, application-security testing, smart-contract audits, and privacy threat modelling are all required before any production deployment, and none of them has been done. Null will never request a seed phrase or a private key.
The application is live and needs no permission from us
An EVM wallet in the browser is all the app needs. It talks to a relay you can run yourself, and it will tell you plainly when that relay is not there.