Category Offers

Category Offers allow buyers to bid on an entire domain category. Sellers can accept these offers, selling domains within the specified category.

Struct

pub struct CategoryOffer {
    // Account tag
    pub tag: Tag,
    // The PDA nonce
    pub nonce: u8,
    // The total number of domains requested
    pub nb_domains: u64,
    // The SOL price per domain
    pub sol_price: u64,
    // The category of the offer
    pub category: Pubkey,
    // The owner of the offer
    pub owner: Pubkey,
    // Timestamp at which the offer was created
    pub created_at: u64,
}

Make Category Offer

The creation of a category offer is managed by the makeCategoryOffer function, which specifies the number of domains, the SOL price per domain, and the category.

import { CATEGORIES } from "@bonfida/sns-categories"; // Map of current categories
import { NAME_OFFERS_ID, makeCategoryOffer } from "@bonfida/name-offers";

const amount = 10 * LAMPORTS_PER_SOL; // Amount of the offer in lamports here 10 SOL
const nbDomains = 10; // Number of domains the buyer wants to buy
const buyer = new PublicKey("...");

// Filter CATEGORIES to find the categoryKey which is the Public key of the category.
const categoryKey = [...CATEGORIES].find(
  ([, value]) => value === "999-club"
)?.[0];

const ix = await makeCategoryOffer(
  amount,
  nbDomains,
  categoryKey,
  NAME_OFFERS_ID,
  buyer
);

// ... sign and send instruction

Take (Accept) Category Offer

Taking/accepting a category offer is facilitated through the takeCategoryOffer function, allowing sellers to sell domains within the category at the specified price.

import { CategoryMember } from "@bonfida/sns-categories"; // Map of current categories
import { getDomainKeySync } from "@bonfida/spl-name-service";
import { 
NAME_OFFERS_ID, 
getCategoryOffer, 
takeCategoryOffer 
} from "@bonfida/name-offers";
import { getDomainKeySync } from "@bonfida/spl-name-service";
const { pubkey: domainKey } = getDomainKeySync("999.sol"); // Domain public key
const memberKey = CategoryMember.findKey("999", categoryKey); // Membership of the domain to the category
const seller = new PublicKey("..."); // Seller of the domain here 999.sol
const referrer: PublicKey | undefined = undefined; // Optional referrer

// Use a util function to get category offers by category, category offers for a specific owner, etc.
const categoryOffers = await getCategoryOffer(connection, categoryKey);

// This example arbitrarily selects the first category offer in the list. Filter offers based on your needs.
const categoryOfferKey = categoryOffers[0].pubkey;

const ix = await takeCategoryOffer(
  connection,
  NAME_OFFERS_ID,
  categoryOfferKey,
  domainKey,
  memberKey,
  seller,
  referrer
);

// ... sign and send instruction

Last updated