Skip to content

Governance authority address not exposed via EVM precompile #1211

Description

@abhijitkrm

Problem

The governance precompile (0x0805) allows submitting proposals via submitProposal, which accepts a JSON envelope containing messages. For parameter-change proposals (e.g. /cosmos.staking.v1beta1.MsgUpdateParams) and software upgrade proposals (/cosmos.upgrade.v1beta1.MsgSoftwareUpgrade), each message requires an authority field set to the governance module account's Bech32 address.

This address is deterministic — derived from authtypes.NewModuleAddress(govtypes.ModuleName) — but it is not exposed by any EVM precompile query. Smart contracts and dApps interacting with the governance precompile have no way to discover this address on-chain. They must either:

  1. Hardcode the address (breaks on chains with different bech32 prefixes)
  2. Query the Cosmos LCD/gRPC endpoint out-of-band (not possible from within a smart contract)

This effectively limits EVM-only dApps to text/signaling proposals (empty messages array), since parameter-change and software-upgrade proposals cannot construct valid messages without the authority address.

Reproducibility

  1. Start a localnet (./local_node.sh)
  2. Try to submit a parameter-change proposal from a smart contract using the gov precompile
  3. The contract has no way to discover the authority address needed for MsgUpdateParams — it must be hardcoded or fetched off-chain
# The authority address is deterministic but not queryable on-chain:
cast call 0x0000000000000000000000000000000000000805 "getParams()" --rpc-url http://localhost:8545
# Returns params, but no authority address

Potential Impact

  • Severity: Medium — blocks an entire class of proposals from EVM contracts
  • User scope: All EVM dApps using the governance precompile
  • Downstream effects: Parameter changes and software upgrades cannot be proposed from smart contracts

Proposed Solution

Add a new view query getAuthority() to the governance precompile that returns the governance module account address in both Bech32 and EVM hex formats. This is a non-breaking, read-only addition.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions