> ## Documentation Index
> Fetch the complete documentation index at: https://base-a060aa97-docs-devrel-859-eth-getproof-historical-proof.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Burn Supply

> Retire stablecoin supply on Base when a holder redeems for fiat, keeping circulating supply matched to reserves.

When a holder redeems for fiat, they return the tokens and you burn them, keeping circulating supply matched to reserves. Burning is gated by `BURN_ROLE` and burns from the caller's own balance.

<Note>
  New to B20? See the [B20 Token Standard](/specifications/b20) for the concepts and a full launch walkthrough. These samples target `base-std@1505323`, `viem@2.55.11`, and Base Foundry `v1.1.1`.
</Note>

## Burn and Verify Supply

<CodeGroup>
  ```typescript TypeScript lines wrap expandable highlight={9} theme={null}
  import { parseUnits, type Address } from "viem";
  import { publicClient } from "../../shared/clients.js";
  import { b20Abi } from "../abi.js";
  import { sendContract } from "../write.js";

  export async function burnAndVerify(token: Address) {
    const before = await publicClient.readContract({ address: token, abi: b20Abi, functionName: "totalSupply" });
    const amount = parseUnits("400", 6);
    await sendContract({ address: token, abi: b20Abi, functionName: "burn", args: [amount] });
    const after = await publicClient.readContract({ address: token, abi: b20Abi, functionName: "totalSupply" });
    if (before - after !== amount) throw new Error("Unexpected supply change");
  }
  ```

  ```solidity Solidity lines wrap expandable highlight={1} theme={null}
      function burnStablecoin(address token) public {
          uint256 supplyBefore = IB20(token).totalSupply();
          IB20(token).burn(400e6);
          require(supplyBefore - IB20(token).totalSupply() == 400e6, "wrong supply change");
      }
  ```

  ```bash CLI lines wrap expandable highlight={1} theme={null}
  base-cast send "$TOKEN_ADDRESS" "burn(uint256)" 400000000 \
    --rpc-url "$RPC_URL" --private-key "$PRIVATE_KEY"
  base-cast call "$TOKEN_ADDRESS" "totalSupply()(uint256)" --rpc-url "$RPC_URL"
  ```
</CodeGroup>

See the [B20 token standard](/specifications/b20) for the complete interface, roles, and policies.

<Check>
  `totalSupply()` decreases by exactly 400 MUSD.
</Check>

<Note>
  `burn` removes tokens from the caller. Use an allowance and your redemption workflow to collect tokens into the burner account first.
</Note>

## See Also

<CardGroup cols={2}>
  <Card title="Mint Supply" icon="plus" href="/build-on-base/issue-stablecoins/mint-supply">
    Increase circulating supply.
  </Card>

  <Card title="Burn (B20 Standard)" icon="book" href="/specifications/b20/reference/interfaces/ib20/burn-with-memo">
    The burn operation in the B20 standard.
  </Card>
</CardGroup>
