Skip to main content
Use this reference for Lookup 0.11.0. Start with installation for configuration or resolving payments for a practical flow. Lookup performs reads through Soroban RPC and optionally uses HTTP discovery/history. Writes belong to the Owner and Holder SDKs.

Constructor

new Soran(options?: SoranOptions) accepts: Custom Registry/passphrase settings inherit no unrelated Lookup or Primary pin. There is no registrars option or silent closed-resolution fallback in this API.

Methods

Payments and metadata

SDK metadata uses camelCase, such as builtinAddress, expiresAt and namespacePermanent. Contract ABI fields use snake_case. Generations and ownership timestamps are exact bigint values; encode them explicitly when producing JSON, usually as decimal strings.

Network addresses and subnames

Network reads require compatible multichain contracts and owner enablement. Disabled, unsupported, inactive and failed reads remain errors, distinct from a successful absent record. Network examples show reads and holder writes. Subname pages use offsets and limits of 1–16, defaulting to 16. SubnameRecord contains parentNode: Uint8Array, parentGeneration: bigint, generation: bigint, address: string and active: boolean. A stored record’s active flag alone does not establish current parent ownership, lifetime or namespace policy. Use current metadata and payment reads for live decisions. See subname examples. Supported resolution names have two or three labels. Parent registration/lifecycle operations and namespace inputs retain their original grammar. Child details() and identity() require Universal Lookup mode. They return CONFIG in direct mode because that path cannot provide complete child ownership metadata.

Display names

Batch/history methods require universal mode. The SDK supports batch capabilities 1, 2 and 3 with their advertised limits; query both limit methods before forming batches. They accept G, C and complete M addresses. primaryNames (many addresses) differs from reverseNames (one address across namespace candidates). See history examples and resource handling. nameStatus returns state.kind as namespaceMissing, registrarMissing, unregistered, active, expired or suspended. Active, expired and suspended states include state.record with registrar, a hex node, holder, bigint generation and bigint expiresAt. The envelope’s ledger is a number and timestamp is bigint. Status does not establish payment readiness or claimability.

Profiles, discovery and helpers

Complete muxed-address identity

reverse, primaryOf, reverseVerify, reverseLookup, reverseNames and walletProfile accept a complete M address in universal mode. The deployed Lookup must report muxed_identity_version() == 1, as the current testnet deployment does. The SDK checks the Registry and capability versions before reading the exact base G and u64 ID. It never falls back to the G account, a memo or another ID. Direct mode rejects M identity reads with CONFIG. M Primary is stored in Lookup independently of the G/C primaryId. Holdings accept G/C only; walletProfile(M) returns both holdings: null and names: null. See elections and verification.

Payment types

address must be a valid G, M or C address. A required memo needs G; M and C support none only. Preserve an M address’s embedded unsigned 64-bit ID. Neither helper converts a muxed ID into a memo. Other exports include payment validation/encoding helpers, LookupResult, NameMetadata, NamespaceMetadata and NamespacePolicy. See destination examples and payment constraints.

Failures

Branch on SoranError.code: Recognized top-level Lookup contract failures also carry contractCode and contractError. Unknown formats stay unclassified; nested diagnostic strings are not promoted to top-level errors. Use these typed fields instead of parsing messages. Primary/reverse null has the documented proof limitation. Lookup/version checks are not executable-code pins; see governance.