Skip to main content

Module Accounts

Some modules have their own module account. Think of this as a wallet that can only be controlled by that module. Below is a table of modules, their respective wallet addresses and permissions:

List of Module Accounts

NameAddressPermissions
erc20evmos1glht96kr2rseywuvhhay894qw7ekuc4qg9z5nwminter burner
fee_collectorevmos17xpfvakm2amg962yls6f84z3kell8c5ljcjw34none
inflationevmos1d4e35hk3gk4k6t5gh02dcm923z8ck86qygxf38minter
transferevmos1yl6hdjhmkf37639730gffanpzndzdpmhv788dtminter burner
bonded_tokens_poolevmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu3h6cprlburner staking
not_bonded_tokens_poolevmos1tygms3xhhs3yv487phx3dw4a95jn7t7lr6ys4tburner staking
govevmos10d07y265gmmuvt4z0w9aw880jnsr700jcrztvmburner
distributionevmos1jv65s3grqf6v6jl3dp4t6c9t9rk99cd8974jnhnone
evmevmos1vqu8rska6swzdmnhf90zuv0xmelej4lq0n56wqminter burner
ibcevmos1a53udazy8ayufvy0s434pfwjcedzqv345dnt3xminter burner

Account Permissions

  • The burner permission means this account has the permission to burn or destroy tokens.
  • The minter permission means this account has permission to mint or create new tokens.
  • The staking permission means this account has permission to stake tokens on behalf of its owner.

IBC Module Accounts

Additionally, there are module accounts associated with IBC transfers. For each IBC connection, there's an account of type ModuleAccount used to escrow the transferred coins when DEP is the source chain. Their addresses are derived using the first 20 bytes of the SHA256 checksum of the account name and following the format as outlined in ADR 028:

// accountName is composed by the current version the IBC transfer module supports (in this case, ics20-1), the portID (transfer) and the channelID
accountName := Version + "\0" + portID + "/" + channelID
addr := sha256.Sum256(accountName)[:20]

// example for channel-0
addr := sha256.Sum256("ics20-1\0transfer/channel-0")[:20]

This can be calculated with the GetEscrowAccount function on IBC-go.

tip

Note: These escrow accounts are not listed when performing the query:

dep q auth module-accounts

This happens because the GetModuleAccount function used on the query considers only the accounts on the permAddrs map of the AccountKeeper. This address map is set at compile time and cannot be changed on runtime.