Skip to content

This page tracks the current TestNet contract addresses for the dotNS deployment on Paseo. A Product or tool that wants to interact with the registry directly on TestNet needs these addresses; the higher-level CLI and Polkadot Product SDK surfaces resolve them internally, but anyone integrating below those layers can look up what to call here.

ContractResponsibilityPaseo TestNet Address
DotnsProtocolRegistryKeyed address book every other contract resolves its siblings through.0xD19e3D0C97CF501125a04A97405e3e6592fa846E
DotnsRegistryHolds (namehash → record) mappings, subnodes, and resolver pointers.0xf34054fd76BbF85f216cf9908226D5f0A72E50CA
DotnsRegistrarThe ERC-721 for public and personhood names. A device name has no token.0x4f06E818Ba3d987704fd91cf3d868E4b019106Ab
DotnsRegistrarControllerThe public commit-reveal registration path.0xBdaA01bD1bA67d709F2b1fF286Da0d854977EA30
DotnsPopControllerThe personhood gateway path, and the isPopIssued provenance record.0xCC932348606cc1f3318cADeC5A5Cd2CA447f8a4b
DotnsPopLensListing surface for a person's names, gated on isPopIssued.0x309C5ff21f9082A53211500c6f33cA2a21024Ae4
PopRulesClassification and eligibility: which band a label falls in and who may register it.0x747B456bE03aec0b42bd85C51513730FBD45DA31
DotnsCostModelRegistryNames the cost model in force; that model is where the deposit amount lives.0x8bfd1f0957e73716732e725802f13830B5682da4
DotnsFlatPricingThe registered model itself: one deposit for every band.0xD839B281dF72Df44fF275305E72cAEEc0fDAA648
DotnsNameEscrowHolds deposits and runs the release, redeem, withdraw, and reclaim lifecycle.0x4881Afb78e7C908cAe818168B926229D93376520
DotnsNameWhitelistPer-name grants for reserved registration.0x420166cD67Ca0233094E492a4BbA67045eD7C38C
DotnsContentResolverThe contenthash record a Product resolves through.0x7F74D7CD50f5a834270E2ad395a01b01891AB37d
StoreFactoryDeploys the per-user label store that maps a node back to its text.0x99605a926FcB40aB520F659c6505E5ff862771f6

These addresses come from the paseo-assethub deployment, on chain ID 420420417, which runs dotNS 1.0.0. TestNets are upgraded in place from one release to the next. Upgradeable contracts keep their addresses across an upgrade, but a contract that cannot be upgraded in place is redeployed at a new address when a release changes it. This is why TestNet addresses can differ from the deployments.json asset published with each dotNS release, which records the addresses at release time. The protocol registry is the authoritative source: get(key) returns the address each key points at now.

Only DotnsProtocolRegistry needs to be configured by hand. Every other address is resolved from it at call time, so an integration that holds the registry address can find the rest without pinning them.

Addresses are derived from a CREATE3 factory and a fixed salt namespace, so redeploying to the same network reproduces them. An unchanged address is not evidence of an unchanged interface: regenerate the ABIs you build against on every release.

For Products that need to read name resolution data directly (most don't: the chain client surface and the resolution code in each Host handle this), point your typed chain client at DotnsContentResolver using the standard PAPI descriptor for Polkadot Hub, resolving its address from DotnsProtocolRegistry rather than pinning it. The query is a standard contract call; the resolver returns the record fields you read against.

For tools or batch jobs that need to mutate state (a CI pipeline registering a name on every release, for example), use the @parity/dotns-cli instead of building contract calls by hand. The CLI handles the encoding, the PopRules pre-check, and the signing path consistently.

  • CLI


    The command-line surface that targets these contracts automatically.

    → Reference

  • Architecture


    What each contract in the table above is responsible for and how they cooperate.

    → Reference

Last updated: