bostrom-mcp/src/services/tokenfactory.ts

import {
  getWalletAddress,
  signAndBroadcast,
  formatTxResult,
} from "../clients/signing.js";
import { lcdGet } from "../clients/lcd.js";

/** Create a new TokenFactory denom. Costs ~10,000 BOOT. */
export async function createDenom(subdenom: string) {
  const sender = await getWalletAddress();
  const msg = {
    typeUrl: "/osmosis.tokenfactory.v1beta1.MsgCreateDenom",
    value: { sender, subdenom },
  };
  const result = await signAndBroadcast([msg]);
  const fullDenom = `factory/${sender}/${subdenom}`;
  return { ...formatTxResult(result), denom: fullDenom, sender };
}

/** Set metadata (name, symbol, description, exponent) for a denom */
export async function setDenomMetadata(
  denom: string,
  name: string,
  symbol: string,
  description: string,
  exponent: number = 0,
) {
  const sender = await getWalletAddress();
  const msg = {
    typeUrl: "/osmosis.tokenfactory.v1beta1.MsgSetDenomMetadata",
    value: {
      sender,
      metadata: {
        description,
        denomUnits: [
          { denom, exponent: 0, aliases: [] },
          ...(exponent > 0
            ? [{ denom: symbol.toLowerCase(), exponent, aliases: [] }]
            : []),
        ],
        base: denom,
        display: exponent > 0 ? symbol.toLowerCase() : denom,
        name,
        symbol,
      },
    },
  };
  const result = await signAndBroadcast([msg]);
  return { ...formatTxResult(result), denom, name, symbol };
}

/** Mint tokens to a specific address (must be denom admin) */
export async function mintTokens(
  denom: string,
  amount: string,
  mintTo: string,
) {
  const sender = await getWalletAddress();
  const msg = {
    typeUrl: "/osmosis.tokenfactory.v1beta1.MsgMint",
    value: {
      sender,
      amount: { denom, amount },
      mintToAddress: mintTo,
    },
  };
  const result = await signAndBroadcast([msg]);
  return { ...formatTxResult(result), denom, amount, mintTo };
}

/** Burn tokens from the sender's balance (must be denom admin) */
export async function burnTokens(
  denom: string,
  amount: string,
  burnFrom: string,
) {
  const sender = await getWalletAddress();
  const msg = {
    typeUrl: "/osmosis.tokenfactory.v1beta1.MsgBurn",
    value: {
      sender,
      amount: { denom, amount },
      burnFromAddress: burnFrom,
    },
  };
  const result = await signAndBroadcast([msg]);
  return { ...formatTxResult(result), denom, amount, burnFrom };
}

/** Change admin of a denom */
export async function changeAdmin(denom: string, newAdmin: string) {
  const sender = await getWalletAddress();
  const msg = {
    typeUrl: "/osmosis.tokenfactory.v1beta1.MsgChangeAdmin",
    value: { sender, denom, newAdmin },
  };
  const result = await signAndBroadcast([msg]);
  return { ...formatTxResult(result), denom, newAdmin };
}

/** List denoms created by the wallet address */
export async function listCreatedDenoms() {
  const creator = await getWalletAddress();
  const data = await lcdGet<{
    denoms: string[];
  }>(`/osmosis/tokenfactory/v1beta1/denoms_from_creator/${creator}`);
  return { creator, denoms: data.denoms };
}

Synonyms

bostrom-mcp/src/tools/tokenfactory.ts

Neighbours