type DotnsAbiProfile = "poprules-startingPrice" | "v0.5.8-rc1" | "v0.6.0"; /** One DotNS ABI profile's provenance: the upstream artifact it corresponds to, and how the live probe recognises it. */ interface DotnsAbiProfileInfo { /** * The upstream `paritytech/dotns` tag that introduced this ABI shape, or * `null` when the floor is not established from the artifact diff we ran * (see this profile's own comment above `DOTNS_ABI_PROFILES`). Never * invent a tag here to fill this in — an unverified tag is exactly the * over-claim this field exists to prevent. */ introducedAt: string | null; /** The `dotns-abis-.zip` release asset this profile's ABI shape matches, or `null` when unknown. */ abiPackage: string | null; /** * The view function whose presence (probed live, never read from the * chain as a version) identifies this profile. For the first two * profiles this is a PopRules function; v0.6.0's discriminator * (isPopIssued) lives on DotnsPopController instead, because v0.6.0 is * signature-identical to v0.5.8-rc1 on every PopRules function — see the * module doc comment above for why that forced a different contract. */ discriminator: string; } declare const DOTNS_ABI_PROFILES: Record; /** * Newest DotNS release whose ABI has been diffed against what this client * calls. Every release from v0.6.0 through this one is the `v0.6.0` profile: * PopRules is byte-identical across them and the registration tuple is * unchanged, and the two differences that do exist (the `persist` field on * setSubnodeOwner, then its controller-only gate) have their own probes. * * Raise it only after re-running that diff. A new generation needing its own * profile also needs a release range here — this mapping is keyed by release, * so adding to DotnsAbiProfile alone will not fail the build the way * DOTNS_ABI_PROFILES and classifyLabelStatus do. */ declare const HIGHEST_VERIFIED_DOTNS_RELEASE = "0.8.0"; /** A usable `protocolVersion()` answer. */ interface DeclaredProtocolVersion { raw: string; profile: DotnsAbiProfile; aboveVerifiedCeiling: boolean; } /** * Classify DotnsProtocolRegistry.protocolVersion(), added in DotNS v0.8.0 * (#1462). `null` means the probes have to decide instead: no such function * below v0.8.0, an empty string until an owner declares one, or junk. * * Junk is reachable — setProtocolVersion only requires a leading digit and * `[a-zA-Z0-9.-]`, leaving full semver validation to the tooling, so "0.8", * "9abc" and "0.8.0.1" all store. The pre-release suffix is dropped because a * deploy declares the rc tag before the owner re-declares the final one * (dotns RELEASE_ARTIFACTS.md) and both are the same ABI. */ declare function classifyDeclaredProtocolVersion(raw: string | null | undefined): DeclaredProtocolVersion | null; /** Inputs to classifyProtocolVersion — the live dry-run results from connect(). */ interface DotnsProtocolProbe { /** * Whether POP_RULES has contract code at all (a prerequisite, not a * verdict) — `false` is a definitive "no code here" and `null` means code * presence could not be verified (the underlying `hasContractCode` read is * itself three-valued for the same reason: its own doc comment says * callers must not read `null` as "no code"). Only `false` short-circuits * classification; `null` falls through to the two live probes below, * because a probe answering is itself positive proof the contract exists * regardless of whether the code-presence read could confirm it. */ hasCode: boolean | null; /** Whether a dry-run call to PopRules.pricingVersion() completed without reverting. */ pricingVersionOk: boolean; /** Whether a dry-run call to PopRules.startingPrice() completed without reverting. */ startingPriceOk: boolean; /** * Whether a dry-run call to DotnsPopController.isPopIssued(