📇 Validator Contacts
If you run a validator in the pool, you can tell JagPool how to reach you — and decide, contact by contact, what appears on your public validator page. You prove it's really you by signing a short message with your validator's identity key, on your own machine. No wallet, no account, nothing to install.
⚡ TL;DR
- The form lives on your validator's page on jagpool.xyz → "Operator? Update contacts".
- X, Discord, Telegram: each has its own publish switch, off by default. Unmarked contacts are held so the pool can reach you and are shown to nobody else.
- Email is never shown — there is no switch for it. It exists so the pool can write to you.
- You sign with
solana sign-offchain-messageusing the identity keypair. It's a message, never a transaction — it cannot move funds. - Your contacts are removed when your validator leaves the pool, and you can erase them yourself at any time.
Not in the pool yet? Contacts are collected as part of the application process — this form is for members.
🔒 What is published, what is not
you mark it "Shown on the validator page"?
│
yes ─────────┴───────── no
│ │
appears on your "Pool contact only":
public validator page held by pool operators
on jagpool.xyz to reach you directly —
shown to nobody else
email: no switch exists — never published, ever
Nothing is published unless you turn it on. The choice travels inside the message you sign, so what you granted is exactly as provable as the contact itself.
How long is it kept? As long as your validator is in the pool. When it leaves, your contacts are deleted with it. Want them gone sooner? See Removing everything below.
✍️ Updating your contacts, step by step
-
Open the form — your validator page on jagpool.xyz → Operator? Update contacts.
-
Fill in your contacts and flip the publish switch for the ones that should appear publicly. The page then shows the exact message you will sign, something like:
jagpool.xyz asks you to sign this with your validator identity key.Purpose: contactsVote account: <your vote account>Issued at: 2026-09-01T20:38:33ZContacts:x: https://x.com/example (public)telegram: https://t.me/example (private)email: ops@example.com (private)Signing confirms these contacts are yours. JagPool keeps them to reach youabout the pool. Only contacts marked public are shown on jagpool.xyz; theothers are never published, and an email never is. They are removed whenyour validator leaves the pool. To remove them sooner, sign and submit thisform with no contacts. -
Copy the message to a file on the machine that holds your identity keypair — the page suggests a name like
jagpool-contacts-jag77EXc.txt. Copy it exactly as displayed: a re-wrapped or edited copy produces a signature the pool will refuse. -
Sign it with the command the page shows — complete except for your keypair path:
solana sign-offchain-message -k /path/to/validator-identity-keypair.json "$(cat jagpool-contacts-jag77EXc.txt)"It prints one line: the signature, base58.
-
Paste the signature back into the form and submit. Done — the links you marked public appear on your validator page, the rest stay with the pool.
Why signing with the identity key is safe
An off-chain message carries a prefix that makes it structurally impossible to interpret as a transaction — no matter what you sign here, it cannot move funds, change your vote account, or touch your validator. And the key never leaves your machine: you paste back only the signature. If you change identity keys (failover), just re-sign — the pool always checks against your vote account's current identity on-chain.
🧭 If your submission is refused
Each refusal names its problem — here is where each one sends you:
| The site says | What it means, what to do |
|---|---|
| the signature does not match the message | The signature is not over this exact text. Sign the message as displayed — a re-wrapped copy, or a regenerated message, will not match. |
| not this vote account's current identity | The signature is fine, but the key isn't your validator's current identity. You have probably pointed -k at the wrong keypair file. |
| already superseded | A newer submission was already accepted. Regenerate the message and sign again. |
| is on …, not on … (host not allowed) | A link doesn't point where its type expects (X on x.com, Discord on discord.gg/discord.com, Telegram on t.me). Fix the named entry and sign again. |
Discord: which URL names you? The only URL that points at a person is https://discord.com/users/<your numeric user ID> — a username alone is not a URL, and a discord.gg invite points at a server, not at you. To get your ID: in Discord, User Settings → Advanced → enable Developer Mode, then right-click your avatar → Copy User ID.
Also worth knowing: editing any field after copying regenerates the message and clears the signature — that's the page saving you from signing a stale text.
🌐 Your website is not part of this form
The website shown on jagpool.xyz comes from what you publish on-chain with validator-info — signed by the same identity key, the way the whole network already knows you:
solana validator-info publish "YourName" --website https://your-site.example
The pool follows your on-chain value at the next ingestion, with no action on our side. If the site displayed for your validator ever looks wrong or outdated, that is the value to update — there is no override on JagPool's side, on purpose: one source of truth, yours.
🗑️ Removing everything
The form has a named control: "Remove every contact the pool holds for this validator." It builds the same message with no contacts — the text says in words that it removes everything — and you sign it exactly like any other submission.
After erasure, the pool keeps exactly one thing: the time of your last submission, and nothing else. That timestamp is what prevents someone from replaying an older signed message of yours to restore what you just removed.