Module Accounts
There are certain modules that have their own module account. Imagine this as a wallet that is only accessible through that module. The modules, their associated wallet addresses, and their permissions are shown below:
List of Module Accounts
| Name | Address | Permissions |
|---|---|---|
gov | human1 | burner |
distribution | human1 | none |
evm | human1 | minter burner |
ibc | human1 | minter burner |
Account Permissions
- The
burnerpermission designates that this account is permitted to burn or destroy tokens. - The
minterpermission implies that this account is allowed to mint additional tokens. - The
stakingpermission means the owner has given this account permission to stake tokens on the owner's behalf.
IBC Module Accounts
There are also module accounts connected to IBC transfers.
When Humans.ai is the source chain, there is a ModuleAccount account of type for each IBC connection that is used to escrow the transferred funds.
According to ADR 028, their addresses are generated using the first 20 bytes of the account name's SHA256 checksum.
// 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 may be computed using the GetEscrowAccount function on IBC-go.
If you do the following query, these escrow accounts are not displayed:
humansd q auth module-accounts
The reason for this phenomenon is that the GetModuleAccount function utilized in the query only considers the accounts present in the permAddrs map of the AccountKeeper. This map is predefined before compilation and cannot be altered during runtime.