TokenFactory
Token Factory
The tokenfactory module allows any account to create a new token with the name factory/{creator address}/{subdenom}.
Because tokens are namespaced by creator address, this allows token minting to be permissionless, due to not needing to resolve name collisions.
A single account can create multiple denoms, by providing a unique subdenom for each created denom. Once a denom is created, the original creator is given "admin" privileges over the asset.
This allows them to:
Mint their denom to any account
Burn their denom from any account
Create a transfer of their denom between any two accounts
Change the admin. In the future, more admin capabilities may be added. Admins can choose to share admin privileges with other accounts using the authz module. The
ChangeAdminfunctionality, allows changing the master admin account, or even setting it to"", meaning no account has admin privileges for the asset.
Messages
CreateDenom
Creates a denom  factory/{creator address}/{subdenom} given the denom creator address and the subdenom. Subdenoms can contain [a-zA-Z0-9./].
message MsgCreateDenom {
  string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
  string subdenom = 2 [ (gogoproto.moretags) = "yaml:\"subdenom\"" ];
}State Modifications:
Fund the community pool with the denom creation fee from the creator address, set in
Params.Set
DenomMetaDatavia the bank keeper.Set
AuthorityMetadatafor the given denom to store the admin for the created denomfactory/{creator address}/{subdenom}. Admin is automatically set as the Msg sender.Add denom to the
CreatorPrefixStore, where a state of denoms created per creator is kept.
Mint
Minting of a specific denom is only allowed for the current admin. Note, the current admin is defaulted to the creator of the denom.
message MsgMint {
  string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
  cosmos.base.v1beta1.Coin amount = 2 [
    (gogoproto.moretags) = "yaml:\"amount\"",
    (gogoproto.nullable) = false
  ];
}State Modifications:
Safety check the following
Check that the denom minting is created via
tokenfactorymoduleCheck that the sender of the message is the admin of the denom
Mint a designated amount of tokens for the denom via
bankmodule
Burn
Burning of a specific denom is only allowed for the current admin. Note, the current admin is defaulted to the creator of the denom.
message MsgBurn {
  string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
  cosmos.base.v1beta1.Coin amount = 2 [
    (gogoproto.moretags) = "yaml:\"amount\"",
    (gogoproto.nullable) = false
  ];
}State Modifications:
Safety check the following
Check that the denom minting is created via
tokenfactorymoduleCheck that the sender of the message is the admin of the denom
Burn a designated amount of tokens for the denom via
bankmodule
ChangeAdmin
Change the admin of a denom. Note, this is only allowed to be called by the current admin of the denom.
message MsgChangeAdmin {
  string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
  string denom = 2 [ (gogoproto.moretags) = "yaml:\"denom\"" ];
  string newAdmin = 3 [ (gogoproto.moretags) = "yaml:\"new_admin\"" ];
}SetDenomMetadata
Setting of metadata for a specific denom is only allowed for the admin of the denom. It allows the overwriting of the denom metadata in the bank module.
message MsgChangeAdmin {
  string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
  cosmos.bank.v1beta1.Metadata metadata = 2 [ (gogoproto.moretags) = "yaml:\"metadata\"", (gogoproto.nullable)   = false ];
}State Modifications:
Check that the sender of the message is the admin of the denom
Modify
AuthorityMetadatastate entry to change the admin of the denom
Last updated