x/consensus 模块允许治理在不进行软件升级的情况下,直接在运行中的链上更新 CometBFT 的 ABCI 共识参数。

共识参数

该模块管理以下 CometBFT 共识参数:

区块参数

参数说明
MaxBytes以字节为单位的最大区块大小
MaxGas每个区块允许的最大 gas(-1 表示无限制)

证据参数

参数说明
MaxAgeNumBlocks证据允许存在的最大区块年龄
MaxAgeDuration以时长表示的证据最大有效期
MaxBytes每个区块中证据总大小的最大字节数

验证者参数

参数说明
PubKeyTypes验证者支持的公钥类型(例如 ed25519、secp256k1、bls12381)

ABCI 参数

参数说明
VoteExtensionsEnableHeight启用 vote extensions 的区块高度(0 表示禁用)

消息

MsgUpdateParams

通过治理更新共识参数。必须同时提供 block、evidence 和 validator。abci 为可选项。
msg := &types.MsgUpdateParams{
    Authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(),
    Block: &cmtproto.BlockParams{
        MaxBytes: 200000,
        MaxGas:   100000000,
    },
    Evidence: &cmtproto.EvidenceParams{
        MaxAgeNumBlocks: 302400,
        MaxAgeDuration:  504 * time.Hour,
        MaxBytes:        10000,
    },
    Validator: &cmtproto.ValidatorParams{
        PubKeyTypes: []string{"ed25519"},
    },
    Abci: &cmtproto.ABCIParams{
        VoteExtensionsEnableHeight: 0,
    },
}

AuthorityParams

可以通过 x/consensus 模块结合 AuthorityParams 对权限进行集中化管理。ConsensusParams 中的 AuthorityParams 字段会在链上存储权限地址。设置后,它的优先级高于各 keeper 单独配置的 authority 参数。 Keeper 构造函数仍然接收 authority 参数。当共识参数中未配置 authority 时,会将其作为回退值使用。

工作方式

当模块校验 authority 时(例如在 UpdateParams 中),会先检查共识参数。如果其中未设置 authority,则回退到 keeper 的 authority 字段:
authority := sdkCtx.Authority() // from consensus params
if authority == "" {
    authority = k.authority       // fallback to keeper field
}
if authority != msg.Authority {
    return nil, errors.Wrapf(...)
}
如果要启用集中式 authority,可以通过面向 x/consensus 模块 MsgUpdateParams 的治理提案,在共识参数中设置 AuthorityParams。

命令行

查询

params

查询当前共识参数:
simd query consensus params
示例输出:
params:
  abci:
    vote_extensions_enable_height: "0"
  block:
    max_bytes: "200000"
    max_gas: "-1"
  evidence:
    max_age_duration: 1814400s
    max_age_num_blocks: "302400"
    max_bytes: "10000"
  validator:
    pub_key_types:
    - ed25519

交易

update-params-proposal

提交用于更新共识参数的治理提案:
simd tx consensus update-params-proposal [block] [evidence] [validator] [abci] [flags]
示例:
simd tx consensus update-params-proposal \
  '{"max_bytes":"200000","max_gas":"100000000"}' \
  '{"max_age_num_blocks":"302400","max_age_duration":"1814400s","max_bytes":"10000"}' \
  '{"pub_key_types":["ed25519"]}' \
  '{"vote_extensions_enable_height":"0"}' \
  --from mykey

gRPC

Params

查询当前共识参数:
grpcurl -plaintext localhost:9090 cosmos.consensus.v1.Query/Params
示例输出:
{
  "params": {
    "block": {
      "maxBytes": "200000",
      "maxGas": "-1"
    },
    "evidence": {
      "maxAgeNumBlocks": "302400",
      "maxAgeDuration": "1814400s",
      "maxBytes": "10000"
    },
    "validator": {
      "pubKeyTypes": ["ed25519"]
    },
    "abci": {
      "voteExtensionsEnableHeight": "0"
    }
  }
}

REST

GET /cosmos/consensus/v1/params

The x/consensus module allows governance to update CometBFT’s ABCI consensus parameters on a live chain without a software upgrade.

Consensus Parameters

The module manages the following CometBFT consensus parameters:

Block Parameters

ParameterDescription
MaxBytesMaximum block size in bytes
MaxGasMaximum gas per block (-1 for unlimited)

Evidence Parameters

ParameterDescription
MaxAgeNumBlocksMaximum age of evidence in blocks
MaxAgeDurationMaximum age of evidence as a duration
MaxBytesMaximum total evidence size per block in bytes

Validator Parameters

ParameterDescription
PubKeyTypesSupported public key types for validators (e.g., ed25519, secp256k1, bls12381)

ABCI Parameters

ParameterDescription
VoteExtensionsEnableHeightBlock height at which vote extensions are enabled (0 to disable)

Messages

MsgUpdateParams

Updates consensus parameters via governance. All of block, evidence, and validator must be provided. abci is optional.
msg := &types.MsgUpdateParams{
    Authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(),
    Block: &cmtproto.BlockParams{
        MaxBytes: 200000,
        MaxGas:   100000000,
    },
    Evidence: &cmtproto.EvidenceParams{
        MaxAgeNumBlocks: 302400,
        MaxAgeDuration:  504 * time.Hour,
        MaxBytes:        10000,
    },
    Validator: &cmtproto.ValidatorParams{
        PubKeyTypes: []string{"ed25519"},
    },
    Abci: &cmtproto.ABCIParams{
        VoteExtensionsEnableHeight: 0,
    },
}

AuthorityParams

Authority management can be centralized via the x/consensus module using AuthorityParams. The AuthorityParams field in ConsensusParams stores the authority address on-chain. When set, it takes precedence over the per-keeper authority parameter. Keeper constructors still accept the authority parameter. It is used as a fallback when no authority is configured in consensus params.

How It Works

When a module validates authority (e.g., in UpdateParams), it checks consensus params first. If no authority is set there, it falls back to the keeper’s authority field:
authority := sdkCtx.Authority() // from consensus params
if authority == "" {
    authority = k.authority       // fallback to keeper field
}
if authority != msg.Authority {
    return nil, errors.Wrapf(...)
}
To enable centralized authority, set the AuthorityParams in consensus params via a governance proposal targeting the x/consensus module’s MsgUpdateParams.

CLI

Query

params

Query the current consensus parameters:
simd query consensus params
Example Output:
params:
  abci:
    vote_extensions_enable_height: "0"
  block:
    max_bytes: "200000"
    max_gas: "-1"
  evidence:
    max_age_duration: 1814400s
    max_age_num_blocks: "302400"
    max_bytes: "10000"
  validator:
    pub_key_types:
    - ed25519

Transactions

update-params-proposal

Submit a governance proposal to update consensus parameters:
simd tx consensus update-params-proposal [block] [evidence] [validator] [abci] [flags]
Example:
simd tx consensus update-params-proposal \
  '{"max_bytes":"200000","max_gas":"100000000"}' \
  '{"max_age_num_blocks":"302400","max_age_duration":"1814400s","max_bytes":"10000"}' \
  '{"pub_key_types":["ed25519"]}' \
  '{"vote_extensions_enable_height":"0"}' \
  --from mykey

gRPC

Params

Query the current consensus parameters:
grpcurl -plaintext localhost:9090 cosmos.consensus.v1.Query/Params
Example Output:
{
  "params": {
    "block": {
      "maxBytes": "200000",
      "maxGas": "-1"
    },
    "evidence": {
      "maxAgeNumBlocks": "302400",
      "maxAgeDuration": "1814400s",
      "maxBytes": "10000"
    },
    "validator": {
      "pubKeyTypes": ["ed25519"]
    },
    "abci": {
      "voteExtensionsEnableHeight": "0"
    }
  }
}

REST

GET /cosmos/consensus/v1/params