Skip to main content
You hold alice.nova. That makes a specific set of powers yours — and only yours, enforced on chain: where the name points, what it publishes, whether your address shows as a name, and whether the name moves. @sorandomains/holder is the SDK for exactly that set.
In a browser, pass the wallet — the TxSigner shape matches wallet kits directly. Every call is simulated first (typed errors before any fee), and each operation below is authorized on chain against the current holder: if the name changes hands, the powers move with it, instantly.

Where your name points

Two layers, by design: the explicit resolver record is what lookup.resolve() prefers; the built-in target is the fallback every freshly issued name starts with. Both are generation-gated — records you wrote stop resolving the moment the name is no longer yours, so a past holder can never haunt a name.

Your profile

These are the standard PROFILE_KEYS every Soran-aware wallet reads back with lookup.profile(). One transaction per key (a Soroban invocation carries one call), submitted sequentially — a mid-batch failure names the keys already written, and those stay valid. setText(name, key, value) writes any other Symbol-legal key. Text records are overwrite-only on chain — there’s no on-chain delete — so retract a record by clearing it: clearText(name, key) writes the empty value that standard readers (lookup.profile()) treat as unset.

Your address as a name

Reverse claims are impossible to spoof by contract: the resolver refuses any name whose forward record doesn’t already resolve to your address (ForwardMismatch). The primary is a pointer the PrimaryName contract re-verifies on every read — it can never outlive the name it points at. Both are cleared with clearReverse(namespace) / clearPrimary().

Transferring your name

Two-step and accept-to-move — a typo’d recipient can never burn the name. The recipient runs acceptNameTransfer with their own signer. Policy-gated: namespaces that forbid transfers answer NotTransferable, and expired names can’t be moved by their former holder at all.

Errors are typed

Contract rejections surface as HolderError with the contract’s own code and name — NotHolder, NameInactive, ForwardMismatch, NotTransferable — before any fee is spent. Failures that reached the network carry txHash; always re-check a hash before retrying.

Who does what