Skip to main content

Rust SDK API Reference / Non-blocking APIs / Domain resolution / safe_resolve

Function: safe_resolve()

pub async fn safe_resolve(
rpc_client: &RpcClient,
domain: &str,
allow_pda: AllowPda,
) -> Result<Pubkey, SnsError>

Defined in: rust-crates/sns-sdk/src/non_blocking/resolve.rs:56

Uses the same routing as resolve. When SRS-backed .sol resolution is enabled, it resolves the TLD-trimmed name through both SRS and SNS with the same allow_pda policy. Matching targets are returned; differing targets produce SnsError::SnsSolResolutionMismatch.

For .sns, unsupported inputs, and .sol while SRS-backed resolution is disabled, this function follows ordinary resolve behavior. Resolver and RPC errors propagate unchanged.

Availability

This API is available in the default build. Enabling the blocking feature replaces sns_sdk::non_blocking with sns_sdk::blocking.

Parameters

ParameterTypeDescription
rpc_client&RpcClientNon-blocking Solana RPC client used for SRS and SNS resolution.
domain&strFull supported .sns or .sol domain name.
allow_pdaAllowPdaPolicy applied consistently to both SRS and SNS final-owner resolution.

Returns

Result<Pubkey, SnsError> containing the matching SRS/SNS target when compared, or the target returned by ordinary resolution.

Errors

  • SnsError::SnsSolResolutionMismatch when enabled SRS and SNS resolution return different targets.
  • Any error returned by ordinary SRS or SNS resolution, including RPC, domain, record, and PDA-policy errors.

Example

use sns_sdk::non_blocking::resolve::{safe_resolve, AllowPda};
use solana_client::nonblocking::rpc_client::RpcClient;

let client = RpcClient::new("https://your-rpc-endpoint.example".to_string());
let target = safe_resolve(&client, "example.sol", AllowPda::Deny).await?;
println!("{target}");