Feed the
black bull.

$MULETA is The Bull Catalyst — a second token built for one job: make $ANSEM, the Black Bull, run faster. 80% of fees automatically buy $ANSEM on the open market and burn it. 24/7, in the cloud, every transaction live on-chain. No PvP. It doesn't compete with the Bull — it feeds it. 🐂🀄️
THE ENGINE$MULETA
THE BULL$ANSEM
FEES BURNED80% · 24/7
SYNCING…
Total Fees Earned
0.00SOL
all-time · ≈ $0.00
$ANSEM Burned
0.0000ANSEM
to burn address · ≈ $0.00
Burn Transactions
0TXNS
on-chain receipts
$ANSEM Price
$0.00
live market
/ ADDRESSES
THE ENGINE · $MULETA— NOT LIVE YET —
THE BULL · $ANSEM9cRCn9rGT8V2imeM2BaKs13yhMEais3ruM3rPvTGpump
BURN ADDRESS · SINK1nc1nerator11111111111111111111111111111111
/ THE LOOP

Four moves.
One relentless burn engine.

Ansem already controls around 65% of the supply. The Black Bull has been stuck at 120–150M. So what happens when another slice of the float just… disappears? $MULETA turns 80% of its fees into permanent $ANSEM burns — automatically, forever.

[ 0 ]
Claim
$MULETA creator fees accrue in a vault. The keeper sweeps them the moment they clear the threshold.
[ 1 ]
Buy
80% of fees route through Jupiter and buy $ANSEM on the open market — only fees, never principal.
[ 2 ]
Burn
The entire bought amount is sent to the burn address, where the key is unknowable — gone for good.
[ 3 ]
Prove
Every burn is idempotent and recorded with its tx hash — the loop can never double-spend or hide.
/ BURN LOG

Every burn,
on the record.

Each row is a real $ANSEM buy-and-burn funded by $MULETA fees — deployed to the cloud, running 24/7, every transaction visible live. The cloth is loud. The receipts are louder.

VERIFIABLE
ON-CHAIN
RECEIPTS
NO BURNS YET — THE FIRST BUY-AND-BURN WILL APPEAR HERE AUTOMATICALLY.
/ THE ENGINE

Burn logic,
in the open.

claimCreatorFee.ts[ 0 ] CLAIM
// $Muleta creator fees accrue in an on-chain vault — not auto-sent.
// Read what's claimable; only sweep once it clears the threshold.
const { distributable, canDistribute } = await sdk.getDistributableFee(muleta);
if (distributable < CLAIM_THRESHOLD || !canDistribute) return;

const ixs = await sdk.buildDistributeFeeInstructions(muleta);
const sig = await sendAndConfirm(ixs, keeper);
// 80% of the claim funds the buy, 20% is kept for gas + rent.
recordClaim(distributable, BUYBACK_FRACTION);
buyback.ts[ 1 ] BUY $ANSEM
// Spend ONLY the claimed-fee budget — wallet principal is never touched.
const budget = feeBudget() - reserveForGasAndRent();
if (budget <= 0n) return;

const quote = await jupiter.quote({
  inputMint: SOL, outputMint: ANSEM,
  amount: budget, slippageBps: SLIPPAGE,
});
const tx = await jupiter.swap(quote);
if (tx.feePayer() !== keeper) throw "refusing to sign";
await sendAndConfirm(tx);
// the burn uses the ACTUAL $ANSEM received, not the quote.
const bought = await balanceDelta(ansemAccount);
burn.ts[ 2 ] BURN
// Send the ENTIRE bought balance to the burn address in one tx.
// The incinerator's key is unknowable — the supply is gone for good.
const amount = await balanceOf(ansem, keeper);
const ix = [
  createAtaIfMissing(BURN_ADDRESS),
  transferChecked(keeper, BURN_ADDRESS, amount),
];
// idempotent per epoch — a crash or retry never double-burns.
if (ledger.isSent(epoch)) return;
const sig = await sendAndConfirm(ix);
ledger.markBurned(epoch, amount, sig);
index.ts[ 3 ] THE LOOP
// Poll forever. Claim → buy → burn, gated by the fee budget.
while (true) {
  await reconcilePending();   // settle any in-flight buy first
  await claimCreatorFees();

  if (feeBudget() < TRIGGER_SOL) continue;
  const bought = await buyAnsem(feeBudget());
  await burn(await balanceOf(ansem)); // sweep it all
  await writeStats();          // refresh the dashboard
}