Register an address
Two proofs, and neither is enough on its own: that you hold the X account, and that you hold the Solana address. The registry binds them — and it binds nothing it has not seen proved.
Prove the X account is yours
Sign in with X. One call is made — GET /2/users/me — to read your user id and username, and the access token is used for that call and then discarded. Oncepay never reads, posts or stores anything else.
Sign in with Xscopes requested: users.read · tweet.read — no write scope, no direct messages. tweet.read is not used for anything; X requires it before it will name a user at all.
Prove the address is yours
Waiting on step 1. Your wallet signs a message naming your X id, your address and a single-use nonce this server issued — so a signature cannot be replayed against a different handle, a different address, or twice.
What a registration is, and what it is not
- It publishes an address you proved is yours. That is the whole of it. It is not consent to receive anything and it obliges nobody.
- It makes your handle resolvable. Anyone assigning a coin’s fees can type @you and reach this address — Assign fees reads this registry.
- It is not itself a payment. Fees arrive on chain or they do not, and only a claim event counts as received.
- It is append-only. Changing your address writes a new row; the old one stays, and the current mapping is a view that nothing can write to directly.
- No access token is kept. Oncepay stores your X user id and username, the address, the exact message and its signature.
postgres at 127.0.0.1:5432/oncepay — answered at 2026-09-24T14:41:34.017Z
What happens after this
Assign fees takes @your_handle and resolves it here. It only ever resolves to an address somebody proved is theirs, and it shows the resolved address before anything is built — so what gets signed is what is on screen.
a handle that has not registered resolves to nothing, and the form says so and points back here — it is a minute of work, not a closed door