ar.io Logoar.io Documentation
Turbo SDKArNS Names

You need a Solana key, not Solana funds

An ANT is a Metaplex Core asset on Solana, so the owner is always a Solana address — even when you pay with Arweave or Ethereum credits. But the owner never pays: Turbo is the fee payer on every sponsored action, so the owner's SOL balance can stay at zero for the life of the name.

Supply the owner as an ArNSOwnerSigner:

import { solanaOwnerSigner } from '@ardrive/turbo-sdk';

// From a secret key (servers, scripts, tests)
const owner = solanaOwnerSigner(bs58SolanaSecretKey);

A browser wallet (Phantom, Solflare, or an app's embedded wallet) should implement the interface directly rather than exposing a secret key:

const owner = {
  getAddress: () => wallet.publicKey.toBase58(),
  signTransaction: async (txBase64) => {
    // atob/btoa rather than Buffer: browsers do not provide Buffer unless the
    // app polyfills it. The spread is safe here because a Solana transaction
    // is capped at 1232 bytes.
    const tx = VersionedTransaction.deserialize(
      Uint8Array.from(atob(txBase64), (c) => c.charCodeAt(0)),
    );
    const signed = await wallet.signTransaction(tx);
    return btoa(String.fromCharCode(...signed.serialize()));
  },
  signMessage: (message) => wallet.signMessage(message),
};

How is this guide?