SEP-0050: Collection name
fn name(env: soroban_sdk::Env) -> soroban_sdk::String
Renew a domain (extend expiry, add vault deposit)
fn renew(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
node: soroban_sdk::BytesN<32>,
additional_years: u32,
) -> Result<(), soroban_sdk::Error>
SEP-0050: Collection symbol
fn symbol(env: soroban_sdk::Env) -> soroban_sdk::String
SEP-0050: Approve a single token for a spender Events: ["approve", owner, token_id] data: [approved, live_until_ledger]
fn approve(
env: soroban_sdk::Env,
approver: soroban_sdk::Address,
approved: soroban_sdk::Address,
token_id: u32,
live_until_ledger: u32,
) -> Result<(), soroban_sdk::Error>
SEP-0050: Returns the number of NFTs owned by owner
fn balance(env: soroban_sdk::Env, owner: soroban_sdk::Address) -> u32
fn resolve(
env: soroban_sdk::Env,
domain: soroban_sdk::String,
tld: soroban_sdk::String,
) -> Result
fn upgrade(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
new_wasm_hash: soroban_sdk::BytesN<32>,
) -> Result<(), soroban_sdk::Error>
SEP-0050: Returns the owner of a token by its numeric ID Panics if the token does not exist (per spec)
fn owner_of(env: soroban_sdk::Env, token_id: u32) -> soroban_sdk::Address
Register a new domain with USDC payment splitting
fn register(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
domain: soroban_sdk::String,
tld: soroban_sdk::String,
duration_years: u32,
) -> Result, soroban_sdk::Error>
SEP-0050: Transfer by token_id (owner-initiated) Events: ["transfer", from, to] data: [token_id]
fn transfer(
env: soroban_sdk::Env,
from: soroban_sdk::Address,
to: soroban_sdk::Address,
token_id: u32,
) -> Result<(), soroban_sdk::Error>
fn get_price(
env: soroban_sdk::Env,
domain_length: u32,
duration_years: u32,
) -> Result
fn set_admin(
env: soroban_sdk::Env,
current_admin: soroban_sdk::Address,
new_admin: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>
SEP-0050: Token metadata URI Panics if token does not exist (per spec)
fn token_uri(env: soroban_sdk::Env, token_id: u32) -> soroban_sdk::String
Early exit: owner voluntarily surrenders domain, vault position is liquidated with a decaying penalty (high early, low near expiry). Penalty stays in the vault (benefits all XLD holders). NOT available for subdomains or Production-locked domains.
fn early_exit(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
node: soroban_sdk::BytesN<32>,
) -> Result
fn extend_ttl(env: soroban_sdk::Env)
Gift renewal: anyone can extend a domain's expiry by paying the renewal fee
fn gift_renew(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
node: soroban_sdk::BytesN<32>,
additional_years: u32,
) -> Result<(), soroban_sdk::Error>
Initialize registry with admin, operator wallet, vault, and USDC token Initialize registry with admin, operator wallet, vault, USDC token, USTRY token, and Aquarius router
fn initialize(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
operator_wallet: soroban_sdk::Address,
vault_contract: soroban_sdk::Address,
usdc_token: soroban_sdk::Address,
ustry_token: soroban_sdk::Address,
aquarius_router: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>
Set domain status (owner only: Active <-> Production)
fn set_status(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
node: soroban_sdk::BytesN<32>,
new_status: u32,
) -> Result<(), soroban_sdk::Error>
Admin: rewrite PricingConfig to V3.6 (5-tier, no Lifetime) values. MUST be called immediately after upgrade() to migrate stale V1 storage. Writes new PricingConfig struct (without lifetime_length_multipliers).
fn fix_pricing(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>
View: get current XLD SAC address
fn get_xld_sac(env: soroban_sdk::Env) -> soroban_sdk::Address
fn set_records(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
node: soroban_sdk::BytesN<32>,
key: soroban_sdk::Symbol,
value: soroban_sdk::String,
) -> Result<(), soroban_sdk::Error>
Admin: set the XLD SAC (Stellar Asset Contract) address for upgrade_domain
fn set_xld_sac(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
xld_sac: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>
SEP-0050: Get the approved address for a token Panics if token does not exist (per spec)
fn get_approved(env: soroban_sdk::Env, token_id: u32) -> Option
Read: Get token ID for a domain node hash
fn get_token_id(env: soroban_sdk::Env, node: soroban_sdk::BytesN<32>) -> u32
fn is_available(
env: soroban_sdk::Env,
domain: soroban_sdk::String,
tld: soroban_sdk::String,
) -> bool
Admin: Set base URI for NFT metadata
fn set_base_uri(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
uri: soroban_sdk::String,
) -> Result<(), soroban_sdk::Error>
fn set_reserved(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
name: soroban_sdk::String,
is_reserved: bool,
) -> Result<(), soroban_sdk::Error>
fn total_minted(env: soroban_sdk::Env) -> u32
Constructor (Protocol 22+): Called atomically during CreateContractV2.
fn __constructor(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
operator_wallet: soroban_sdk::Address,
vault_contract: soroban_sdk::Address,
usdc_token: soroban_sdk::Address,
ustry_token: soroban_sdk::Address,
aquarius_router: soroban_sdk::Address,
)
Admin Reclaim for restricted or malicious domains. Safely deletes the domain record and burns the NFT without trapping the vault. The user keeps their XLD shares as a self-serve 100% refund.
fn admin_reclaim(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
domain: soroban_sdk::String,
tld: soroban_sdk::String,
) -> Result<(), soroban_sdk::Error>
fn admin_restore(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
domain: soroban_sdk::String,
tld: soroban_sdk::String,
owner: soroban_sdk::Address,
token_id: u128,
expires_at: u64,
registered_at: u64,
commitment_tier: u32,
vault_shares: i128,
) -> Result<(), soroban_sdk::Error>
Expire a domain after grace period — auto-refund vault to owner ANYONE can call this (public — trustless cleanup)
fn expire_domain(
env: soroban_sdk::Env,
node: soroban_sdk::BytesN<32>,
) -> Result<(), soroban_sdk::Error>
fn set_subdomain(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
parent_node: soroban_sdk::BytesN<32>,
sub_name: soroban_sdk::String,
) -> Result, soroban_sdk::Error>
SEP-0050: Transfer by approved spender Events: ["transfer", from, to] data: [token_id]
fn transfer_from(
env: soroban_sdk::Env,
spender: soroban_sdk::Address,
from: soroban_sdk::Address,
to: soroban_sdk::Address,
token_id: u32,
) -> Result<(), soroban_sdk::Error>
fn get_node_count(env: soroban_sdk::Env) -> u64
fn set_avatar_nft(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
node: soroban_sdk::BytesN<32>,
pfp_contract: soroban_sdk::String,
) -> Result<(), soroban_sdk::Error>
fn upgrade_domain(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
node: soroban_sdk::BytesN<32>,
) -> Result<(), soroban_sdk::Error>
SEP-0050: Approve an operator for all tokens owned by owner
Events: ["approve_for_all", owner] data: [operator, live_until_ledger]
fn approve_for_all(
env: soroban_sdk::Env,
owner: soroban_sdk::Address,
operator: soroban_sdk::Address,
live_until_ledger: u32,
) -> Result<(), soroban_sdk::Error>
fn reverse_resolve(
env: soroban_sdk::Env,
address: soroban_sdk::Address,
) -> Result, soroban_sdk::Error>
fn set_blacklisted(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
name: soroban_sdk::String,
is_blacklisted: bool,
) -> Result<(), soroban_sdk::Error>
Set marketplace contract address (admin only)
fn set_marketplace(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
marketplace: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>
Admin: set USTRY token
fn set_ustry_token(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
ustry: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>
Read current pause status. Public, no auth required.
fn get_pause_status(env: soroban_sdk::Env) -> bool
fn get_vault_shares(env: soroban_sdk::Env, node: soroban_sdk::BytesN<32>) -> i128
Transfer domain ownership — blocked for Production domains Vault shares follow the domain automatically
fn transfer_by_node(
env: soroban_sdk::Env,
from: soroban_sdk::Address,
to: soroban_sdk::Address,
node: soroban_sdk::BytesN<32>,
) -> Result<(), soroban_sdk::Error>
fn get_domain_status(
env: soroban_sdk::Env,
domain: soroban_sdk::String,
tld: soroban_sdk::String,
) -> u32
fn renew_from_router(
env: soroban_sdk::Env,
router: soroban_sdk::Address,
node: soroban_sdk::BytesN<32>,
duration_years: u32,
ustry_amount: i128,
) -> Result<(), soroban_sdk::Error>
Set Aquarius Pool Hash for swaps (admin only)
fn set_aquarius_pool(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
pool_hash: soroban_sdk::BytesN<32>,
) -> Result<(), soroban_sdk::Error>
fn set_deposit_router(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
router: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>
fn set_reserved_batch(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
names: soroban_sdk::Vec,
is_reserved: bool,
) -> Result<(), soroban_sdk::Error>
Zap public deposit: takes USDC and/or USTRY from user, swaps USDC for USTRY via Aquarius, and deposits total USTRY into the vault on behalf of the user.
fn zap_public_deposit(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
usdc_amount: i128,
ustry_amount: i128,
min_ustry_out: i128,
) -> Result
fn admin_reclaim_batch(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
domains: soroban_sdk::Vec,
tld: soroban_sdk::String,
) -> Result<(), soroban_sdk::Error>
View: get current operator wallet
fn get_operator_wallet(env: soroban_sdk::Env) -> soroban_sdk::Address
SEP-0050: Check if operator is approved for all tokens of owner
fn is_approved_for_all(
env: soroban_sdk::Env,
owner: soroban_sdk::Address,
operator: soroban_sdk::Address,
) -> bool
Register a new domain paying in USTRY directly (no Aquarius swap needed). Operator share is still taken in USTRY. Vault share goes directly to vault.
fn register_with_ustry(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
domain: soroban_sdk::String,
tld: soroban_sdk::String,
duration_years: u32,
) -> Result, soroban_sdk::Error>
Admin: set Aquarius router
fn set_aquarius_router(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
router: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>
Admin: update the operator wallet for fee routing
fn set_operator_wallet(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
new_operator: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>
Preview what a user would receive for early exit (read-only). Returns a map with refund_ustry, fee_ustry, and fee_bps.
fn get_early_exit_quote(
env: soroban_sdk::Env,
node: soroban_sdk::BytesN<32>,
) -> Result, soroban_sdk::Error>
Marketplace-authorized transfer (for atomic trades)
fn marketplace_transfer(
env: soroban_sdk::Env,
marketplace: soroban_sdk::Address,
from: soroban_sdk::Address,
to: soroban_sdk::Address,
node: soroban_sdk::BytesN<32>,
) -> Result<(), soroban_sdk::Error>
fn register_from_router(
env: soroban_sdk::Env,
router: soroban_sdk::Address,
recipient: soroban_sdk::Address,
domain: soroban_sdk::String,
tld: soroban_sdk::String,
duration_years: u32,
ustry_amount: i128,
) -> Result, soroban_sdk::Error>
Get domain attributes for dynamic NFT metadata (cross-contract reads from vault)
fn get_domain_attributes(
env: soroban_sdk::Env,
node: soroban_sdk::BytesN<32>,
) -> Result<
soroban_sdk::Map,
soroban_sdk::Error,
>
fn set_blacklisted_batch(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
names: soroban_sdk::Vec,
is_blacklisted: bool,
) -> Result<(), soroban_sdk::Error>
Toggle registration pause. Admin-only. When paused: register() and renew() both reject. M-03 fix: now emits RegistryPauseEvent for off-chain monitoring.
fn set_pause_registrations(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
paused: bool,
) -> Result<(), soroban_sdk::Error>
Set Aquarius Pool Contract address for auth tree (admin only) Required for register() and gift_renew() swap sub-invocation auth.
fn set_aquarius_pool_contract(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
pool: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>