alice.eth and alice.sol to addresses so a user can send to a name. Resolution is read-only: it needs no contract and no backend, and it lives in @avokjs/core/helpers.
Build a resolver
Compose a cross-service resolver from an ENS resolver, an SNS resolver, or both. Each service takes the client you use to read its chain:createNameResolver dispatches forward resolution by suffix (.sol goes to SNS, everything else to ENS) and verifies reverse lookups against a forward resolution, so a reverse hit is returned only if it maps back to the queried address.
Resolve a recipient
resolveRecipient accepts either a raw address for the rail or a name, and returns the resolved address:
rail argument is "evm" or "solana". A raw address for that rail passes through unchanged; a name is resolved through the resolver. For exact signatures, see the core subpaths reference.