testnet
GitHub

System Accounts & Blocked Addresses

component core

Special-purpose accounts that manage network funds and core protocol functions, which are restricted from normal user interactions.

The Maroo network utilizes several system accounts, known as module accounts, to programmatically manage tokens for core functionalities like staking rewards, fee collection, and governance. These accounts do not have private keys and are controlled solely by their respective module's logic. To ensure protocol stability and security, these module accounts, along with Ethereum precompile addresses, are designated as 'blocked addresses', preventing them from receiving direct token transfers from users.

Module Account Permissions

Each module account has specific permissions that define its capabilities. These are defined in config/marood_config.go. Key examples include:
  • mint module: Has minter permission to create new aokrw tokens for block rewards.
  • staking module pools: Have burner and staking permissions to manage the lifecycle of bonded amaroo tokens.
  • gov module: Has burner permission to destroy tokens from deposits of failed governance proposals.
  • erc20 module: Has minter and burner permissions to lock Cosmos-native tokens and mint their ERC20 representations, and vice-versa.

Blocked Address List

The BlockedAddresses function generates a comprehensive map of addresses that cannot be the recipient of a standard bank.Send transaction. This list is crucial for preventing accidental loss of funds and exploits. It includes:
1. All Module Accounts: The addresses derived from the names of all registered modules (e.g., auth, gov, staking, evm).
2. Ethereum Native Precompiles: The first set of addresses (e.g., 0x00...01 to 0x00...09) reserved by Ethereum for cryptographic functions.
3. Maroo Static Precompiles: The addresses for Maroo's custom precompiles (PCL, Identity, etc.) and other available precompiles from the Cosmos EVM.

Developer Implications

When developing smart contracts or applications on Maroo, it's important to be aware of this list. Attempting to send tokens directly to a blocked address using a standard transfer function will result in a failed transaction. Interactions with these systems must be done through the proper channels, such as staking via the staking module's messages or interacting with precompiles through contract calls, not direct transfers.
Source: maroo
ESC
Type to search