Cross-chain naming for stealth meta-addresses: alice.opq.eth resolves the same CSAP
meta-address from an Ethereum sender (on-chain ENS wildcard resolution) and a Solana
sender (Wormhole-mirrored PDA, no Ethereum RPC). Spec: opaquecash/spec → ONS.md.
Consistency model: eventually consistent, canonical-chain-wins. Ethereum is the single source of truth; Solana-originated claims are provisional until the canonical registry confirms them. No atomic cross-chain claim exists or is claimed.
| Contract | Role |
|---|---|
OpaqueNameRegistry.sol |
Subname registrar + ENSIP-10 wildcard resolver for *.<parent>; sources meta-addresses from the deployed ERC-6538 registry; publishes the 164-byte ONS mirror payload via Wormhole on every change; applies Solana-originated claim VAAs (canonical-chain-wins) |
The Solana programs (ons-mirror, ons-registration) live in opaquecash/solana; the
SDK resolution paths live in opaquecash/sdk (@opaquecash/opaque).
The plan is testnet-only: the parent name is a Sepolia ENS test name (production
opq.eth acquisition is deferred). Current parent: see deployments/sepolia.json.
npm install
npm test # mock-Wormhole unit suite
npm run register-test-name # commit-reveal a test name on Sepolia ENS (one-off)
npm run deploy:sepolia # deploy the registry + set it as the parent's resolver.env needs SEPOLIA_RPC_URL, SEPOLIA_PRIVATE_KEY (the account that owns the test
name), and optionally ETHERSCAN_API_KEY for verification.
GPL-3.0 (interfaces Apache-2.0 / CC0-1.0 as marked).