Skip to main content
This page is for builders who want to issue a token on the Cosmos Hub and for operators who need to read osmosis.tokenfactory.v1beta1 messages in blocks. It assumes gaiad is configured for the Hub and a funded key (Delegator CLI guide). At the end you have a denom named factory/<your address>/<subdenom> that you can mint, burn, and hand over to a multisig or to governance.

What the Hub runs

The Hub uses cosmos/tokenfactory, a fork of the Strangelove implementation with the sudo mint capability removed. Maintained by the Cosmos Hub team. No tagged releases; gaia v28.3.1 pins v0.53.5. Repository active. Checked 2026-10-15. Module documentation: x/tokenfactory README. Any account can create a denom. The creator becomes its admin. The module is wired with two capabilities in app/keepers/keepers.go:
  • EnableSetMetadata: admins can set the bank denom metadata (symbol, exponent, description).
  • EnableCommunityPoolFeeFunding: the creation fee goes to the community pool rather than being burned.
The EnableBurnFrom and EnableForceTransfer capabilities are not enabled. The CLI still has burn-from and force-transfer subcommands because they are part of the module. The Hub rejects those messages. An admin can therefore mint, mint to others, burn from its own balance, change the admin, and modify metadata. It can do nothing else. Smart contracts can use the same messages through the module’s CosmWasm bindings.

Parameters

Creation fee: 10 ATOM, paid to the community pool.
The output shows denom_creation_fee: 10000000uatom and denom_creation_gas_consume: "2000000". Creating a denom also consumes 2,000,000 gas on top of the fee. The create transaction therefore needs --gas of at least about 2,200,000, or --gas auto.

Create a denom

The message is MsgCreateDenom with subdenom: mytoken. The resulting denom is factory/<cosmos1 address of mykey>/mytoken. Every later command and every transfer uses that denom. Confirm who created and who administers it:
The first lists the denom. The second returns authority_metadata.admin with the creator’s address.

Mint, burn, and metadata

Mint to yourself or to another account, in base units:
Burn from the admin’s own balance only:
Set the display metadata so wallets and explorers show a symbol and decimals. The arguments are denom, ticker symbol, description, and exponent:
The bank query returns the metadata with symbol: MYT and a denom unit with exponent: 6. The uatom entry on the Hub has the same shape (symbol: ATOM, exponent 6).

Secure the admin key

Even with burn-from and force-transfer disabled, a compromised admin key can mint without limit. It can also change the admin to lock you out. Three ways narrow that risk, from least to most restrictive:
  1. Use a multisig as the admin. Create the denom from a multisig account (multisig accounts) or transfer it with change-admin.
  2. Grant a limited operator through authz. An operator account can be allowed to execute only MsgMint, with an expiry:
  1. Transfer admin to the governance module account. After that, every mint or metadata change needs a passed proposal:
The change-admin command is immediate and has no undo. The new admin is the only account that can change it again. The query gaiad q tokenfactory denoms-from-admin <address> lists what an address administers.
Check the destination with gaiad keys parse <address> before signing a change-admin. A change-admin to a mistyped address is permanent. Prefer moving admin to a multisig you have already tested with a small transfer.

Verify

The supply matches what you minted minus what you burned. The admin listing shows the denom until you change its admin. After that, it moves to the new admin’s listing.

Next