mirror of
https://github.com/d0zingcat/solana-agent-kit.git
synced 2026-05-19 07:36:46 +00:00
59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import { registerDomainNameV2 } from "@bonfida/spl-name-service";
|
|
import { Transaction } from "@solana/web3.js";
|
|
import { SolanaAgentKit } from "../index";
|
|
import { getAssociatedTokenAddressSync } from "@solana/spl-token";
|
|
import { TOKENS } from "../constants";
|
|
|
|
/**
|
|
* Register a .sol domain name using Bonfida Name Service
|
|
* @param agent SolanaAgentKit instance
|
|
* @param name Domain name to register (without .sol)
|
|
* @param spaceKB Space allocation in KB (max 10KB)
|
|
* @returns Transaction signature
|
|
*/
|
|
export async function registerDomain(
|
|
agent: SolanaAgentKit,
|
|
name: string,
|
|
spaceKB: number = 1,
|
|
): Promise<string> {
|
|
try {
|
|
// Validate space size
|
|
if (spaceKB > 10) {
|
|
throw new Error("Maximum domain size is 10KB");
|
|
}
|
|
|
|
// Convert KB to bytes
|
|
const space = spaceKB * 1_000;
|
|
|
|
const buyerTokenAccount = await getAssociatedTokenAddressSync(
|
|
agent.wallet_address,
|
|
TOKENS.USDC,
|
|
);
|
|
|
|
// Create registration instruction
|
|
const instruction = await registerDomainNameV2(
|
|
agent.connection,
|
|
name,
|
|
space,
|
|
agent.wallet_address,
|
|
buyerTokenAccount,
|
|
);
|
|
|
|
// Create and sign transaction
|
|
const transaction = new Transaction().add(...instruction);
|
|
transaction.recentBlockhash = (
|
|
await agent.connection.getLatestBlockhash()
|
|
).blockhash;
|
|
transaction.feePayer = agent.wallet_address;
|
|
|
|
// Sign and send transaction
|
|
const signature = await agent.connection.sendTransaction(transaction, [
|
|
agent.wallet,
|
|
]);
|
|
|
|
return signature;
|
|
} catch (error: any) {
|
|
throw new Error(`Domain registration failed: ${error.message}`);
|
|
}
|
|
}
|