id,language,category,name,description,code,imports_or_contract,notes
1,clarity,resolve,name-to-address,"Resolve BNS name to address","(contract-call? .bns name-resolve namespace name)","SP000000000000000000002Q6VF78.bns","Returns principal of name owner"
2,clarity,resolve,address-to-name,"Get primary name for address","(contract-call? .bns resolve-principal address)","SP000000000000000000002Q6VF78.bns","Returns primary BNS name"
3,clarity,register,register-name,"Register a new BNS name","(contract-call? .bns-v2 name-register namespace name salt zonefile-hash)","BNS-V2 contract","Requires STX payment based on name length"
4,clarity,transfer,transfer-name,"Transfer BNS name ownership","(contract-call? .bns-v2 name-transfer namespace name new-owner zonefile-hash)","BNS-V2 contract","Owner only can transfer names"
5,clarity,update,update-zonefile,"Update name zonefile hash","(contract-call? .bns-v2 name-update namespace name zonefile-hash)","BNS-V2 contract","Updates DNS records for name"
6,clarity,lookup,name-info,"Get name details","(contract-call? .bns name-resolve namespace name)","SP000000000000000000002Q6VF78.bns","Returns owner zonefile-hash lease-ending-at"
7,clarity,lookup,get-namespace-price,"Get registration price","(contract-call? .bns-v2 get-namespace-price namespace)","BNS-V2 contract","Price in microSTX"
8,clarity,lookup,can-name-be-registered,"Check name availability","(contract-call? .bns-v2 can-name-be-registered namespace name)","BNS-V2 contract","Returns true if available"
9,clarity,bulk,batch-register,"Register multiple names","(map register-single-name names)","Custom contract","Loop through list of names"
10,clarity,renew,renew-name,"Renew name registration","(contract-call? .bns-v2 name-renewal namespace name)","BNS-V2 contract","Extends lease period"
11,javascript,setup,install-bns-sdk,"Install BNS v2 SDK for frontend development","npm install bns-v2-sdk","None","Official BNS v2 SDK for JavaScript/TypeScript; supports name resolution marketplace operations and primary names; Documentation: https://www.npmjs.com/package/bns-v2-sdk"
12,javascript,resolve,address-to-name,"Get primary BNS name for address using SDK","const primaryName = await getPrimaryName({ address: 'SP2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR' network: 'mainnet' }); if (primaryName) { const fullName = `${primaryName.name}.${primaryName.namespace}`; console.log(fullName) }","import { getPrimaryName } from 'bns-v2-sdk'","Returns { name namespace } or null; SDK method for resolving address to BNS"
13,javascript,resolve,name-to-address,"Resolve BNS name to owner address using SDK","const nameInfo = await getNameInfo({ fullyQualifiedName: 'example.btc' network: 'mainnet' }); const ownerAddress = nameInfo?.owner || null; console.log('Owner:' ownerAddress)","import { getNameInfo } from 'bns-v2-sdk'","Returns owner address from BNS name; use getNameInfo for full name details"
14,javascript,lookup,get-name-info,"Get detailed information about a BNS name","const nameInfo = await getNameInfo({ fullyQualifiedName: 'example.btc' network: 'mainnet' }); console.log(nameInfo.owner nameInfo.zonefile)","import { getNameInfo } from 'bns-v2-sdk'","Returns name owner zonefile lease-ending-at and other metadata"
15,javascript,lookup,get-token-id,"Get token ID from BNS fully qualified name","const nameId = await getIdFromBns({ fullyQualifiedName: 'example.btc' network: 'mainnet' }); console.log('Token ID:' nameId)","import { getIdFromBns } from 'bns-v2-sdk'","Required for marketplace operations (buy list unlist); returns BigInt token ID"
16,javascript,marketplace,buy-name,"Build transaction to buy BNS from marketplace","const buyPayload = await buildBuyInUstxTx({ id: nameId expectedPrice: BigInt(priceInMicroStx) commissionTraitAddress: 'SP...' commissionTraitName: 'commission-trait' senderAddress: userAddress network: 'mainnet' }); await request('stx_callContract' { contract: `${buyPayload.contractAddress}.${buyPayload.contractName}` functionName: buyPayload.functionName functionArgs: buyPayload.functionArgs postConditions: buyPayload.postConditions postConditionMode: 'deny' network: 'mainnet' })","import { buildBuyInUstxTx } from 'bns-v2-sdk'; import { request } from '@stacks/connect'","Price includes 2% marketplace fee; expectedPrice = listedPrice * 1.02; use deny mode for security"
17,javascript,marketplace,list-name,"Build transaction to list BNS on marketplace","const priceAfterFee = priceInMicroStx * 0.98; const listPayload = await buildListInUstxTx({ id: BigInt(nameId) price: BigInt(priceAfterFee) commissionTraitAddress: 'SP...' commissionTraitName: 'commission-trait' senderAddress: userAddress network: 'mainnet' }); await request('stx_callContract' { contract: `${listPayload.contractAddress}.${listPayload.contractName}` functionName: listPayload.functionName functionArgs: listPayload.functionArgs postConditions: listPayload.postConditions postConditionMode: 'deny' })","import { buildListInUstxTx } from 'bns-v2-sdk'; import { request } from '@stacks/connect'","List price after 2% fee deduction; seller receives 98% of listed price"
18,javascript,marketplace,unlist-name,"Build transaction to remove BNS listing from marketplace","const unlistPayload = await buildUnlistInUstxTx({ id: BigInt(nameId) senderAddress: userAddress network: 'mainnet' }); await request('stx_callContract' { contract: `${unlistPayload.contractAddress}.${unlistPayload.contractName}` functionName: unlistPayload.functionName functionArgs: unlistPayload.functionArgs postConditions: unlistPayload.postConditions postConditionMode: 'deny' })","import { buildUnlistInUstxTx } from 'bns-v2-sdk'; import { request } from '@stacks/connect'","Only the owner can unlist; removes from marketplace but keeps ownership"
19,javascript,update,set-primary-name,"Set primary BNS name for wallet","const setPrimaryPayload = await buildSetPrimaryNameTx({ fullyQualifiedName: 'example.btc' senderAddress: userAddress network: 'mainnet' }); await request('stx_callContract' { contract: `${setPrimaryPayload.contractAddress}.${setPrimaryPayload.contractName}` functionName: setPrimaryPayload.functionName functionArgs: setPrimaryPayload.functionArgs postConditions: setPrimaryPayload.postConditions })","import { buildSetPrimaryNameTx } from 'bns-v2-sdk'; import { request } from '@stacks/connect'","Sets default BNS for address; shown in wallets and dApps"
20,javascript,transfer,transfer-name,"Build transaction to transfer BNS to another address","const transferPayload = await buildTransferNameTx({ fullyQualifiedName: 'example.btc' newOwnerAddress: 'SP...' senderAddress: currentOwnerAddress network: 'mainnet' }); await request('stx_callContract' { contract: `${transferPayload.contractAddress}.${transferPayload.contractName}` functionName: transferPayload.functionName functionArgs: transferPayload.functionArgs postConditions: transferPayload.postConditions })","import { buildTransferNameTx } from 'bns-v2-sdk'; import { request } from '@stacks/connect'","Transfers full ownership; cannot be reversed; removes any active listings"
21,javascript,caching,caching-pattern,"Production BNS caching with circuit breaker and multi-layer cache","import NodeCache from 'node-cache'; const memCache = new NodeCache({ stdTTL: 3600 }); const pendingRequests = new Map(); async function getCachedBNS(address) { const cached = memCache.get(address); if (cached !== undefined) return cached; const pending = pendingRequests.get(address); if (pending) return pending; const promise = (async () => { try { const primaryName = await getPrimaryName({ address network: 'mainnet' }); const result = primaryName ? `${primaryName.name}.${primaryName.namespace}` : null; memCache.set(address result); return result } finally { pendingRequests.delete(address) }})(); pendingRequests.set(address promise); return promise }","import { getPrimaryName } from 'bns-v2-sdk'; import NodeCache from 'node-cache'","Prevents duplicate API calls; 1-hour TTL; request deduplication; production-ready pattern from stx.city"