Burn an NFT. Only the owner can burn their token. Removes ownership and metadata, decrements supply.
fn burn(
env: soroban_sdk::Env,
owner: soroban_sdk::Address,
token_id: u32,
) -> Result<(), MerchError>
Mint a new merch NFT. Only callable by admin (the relayer). Returns the new token ID (1-indexed).
fn mint(
env: soroban_sdk::Env,
to: soroban_sdk::Address,
token_uri: soroban_sdk::String,
) -> Result
fn name(env: soroban_sdk::Env) -> soroban_sdk::String
fn admin(env: soroban_sdk::Env) -> Result
fn symbol(env: soroban_sdk::Env) -> soroban_sdk::String
Migration function for schema evolution across versions.
fn migrate(env: soroban_sdk::Env) -> Result<(), MerchError>
Upgrade the contract WASM. Admin-gated, upgrade-safe. CRITICAL: This function reads Admin as a standalone Address (not a struct) to prevent bricking on schema evolution.
fn upgrade(
env: soroban_sdk::Env,
new_wasm_hash: soroban_sdk::BytesN<32>,
) -> Result<(), MerchError>
fn version(env: soroban_sdk::Env) -> u32
fn owner_of(
env: soroban_sdk::Env,
token_id: u32,
) -> Result
Transfer an NFT. Only the current owner can transfer.
fn transfer(
env: soroban_sdk::Env,
from: soroban_sdk::Address,
to: soroban_sdk::Address,
token_id: u32,
) -> Result<(), MerchError>
Admin can update admin address (key rotation).
fn set_admin(
env: soroban_sdk::Env,
current_admin: soroban_sdk::Address,
new_admin: soroban_sdk::Address,
) -> Result<(), MerchError>
fn token_uri(
env: soroban_sdk::Env,
token_id: u32,
) -> Result
O(1) enumeration — returns all token IDs owned by an address.
fn tokens_of(
env: soroban_sdk::Env,
owner: soroban_sdk::Address,
) -> soroban_sdk::Vec
Public TTL extension — anyone can call to keep the contract alive.
fn extend_ttl(env: soroban_sdk::Env)
Initialize the contract. Called once after deployment. Admin = the relayer address (GAAGGREYKXZEWGI2FAU6GEDZROHAPAKSFKIDKF2KIFS5OYLJXI6AK27P).
fn initialize(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
name: soroban_sdk::String,
symbol: soroban_sdk::String,
) -> Result<(), MerchError>
fn total_burned(env: soroban_sdk::Env) -> u32
fn total_minted(env: soroban_sdk::Env) -> u32
Active supply = total_minted - total_burned
fn total_supply(env: soroban_sdk::Env) -> u32
Admin can update token_uri for corrections (critic fix C7).
fn set_token_uri(
env: soroban_sdk::Env,
token_id: u32,
new_uri: soroban_sdk::String,
) -> Result<(), MerchError>
Extend TTL for a specific token's persistent data.
fn extend_token_ttl(env: soroban_sdk::Env, token_id: u32)