Contracts
TestnetX1ID runs as a single on-chain registry program on X1 testnet. There is no separate "resolver" or "registrar" contract split — one program owns handle registration, records, and the delegate/authority rules the SDK and MCP server both read and write through.
Deployed
| Program | X1ID registry |
| Program ID | 8JgnNWi24bq9uzfnT9XmkWxvaWMVgoEs9bu8QsHhLe1P |
| Network | X1 testnet |
| RPC | https://rpc.testnet.x1.xyz |
Mainnet is a separate, deliberate step. Handles registered today live on X1 testnet — see Trust & transparency for what that means and when that changes.
This is the same address every X1ID surface is wired to: it's what @x1id/resolve derives PDAs against, what the MCP server reads via its X1ID_PROGRAM_ID environment variable, and what the Resolve API ultimately reads through when it answers a lookup.
Verify it yourself
Ownership you can audit. Nothing here asks you to take our word for it — the program is public, and every handle it manages is a readable account on X1 testnet.
Point any Solana-compatible RPC client at the program ID above and the testnet RPC to confirm it exists and is executable:
solana program show 8JgnNWi24bq9uzfnT9XmkWxvaWMVgoEs9bu8QsHhLe1P \
--url https://rpc.testnet.x1.xyzFor the shape of individual accounts (a handle's registry entry, its text records), read through the SDK or the MCP server's read tools rather than parsing raw account bytes by hand — both derive the same PDAs this program expects and stay in sync with it as the source of truth.
