PoA 模块 API 文档
概述
Proof of Authority(PoA)许可型共识模块为 Cosmos SDK 区块链中的验证者管理提供了一套治理机制。与传统的 Proof of Stake 不同,PoA 允许指定的管理员控制验证者集合成员资格以及投票权分配。 包:cosmos.poa.v1
Go 导入: github.com/cosmos/cosmos-sdk/enterprise/poa/types
核心概念
- 管理员控制: 单一管理员地址拥有管理验证者和模块参数的独占权限
- 验证者管理: 创建验证者、更新投票权,并管理活跃验证者集合
- 费用分配: 验证者会累积费用,其操作员可将其提取
- 动态更新: 对验证者集合的更改可在不停链的情况下生效
数据类型
Validator
表示 PoA 系统中的一个验证者。pub_key(Any):验证者的共识公钥(通常为/cosmos.crypto.ed25519.PubKey)power(int64):该验证者的投票权(使用0可移除验证者)metadata(ValidatorMetadata):附加的验证者信息allocated_fees(DecCoin[]):分配给该验证者的累计费用
ValidatorMetadata
验证者的元数据信息。moniker(string):验证者的人类可读名称description(string):验证者的可选描述operator_address(string):运行该验证者的 Cosmos SDK 地址
Params
模块参数。admin(string):具有管理权限的 Cosmos SDK 地址
ValidatorFees
表示某个验证者操作员的费用分配。fees(DecCoin[]):表示已分配费用的代币列表
查询 API
Query 服务提供对 PoA 模块状态的只读访问。Params
获取模块参数。 gRPC:cosmos.poa.v1.Query/Params
REST: GET /cosmos/poa/v1/params
请求:
Validator
按地址查询单个验证者。 gRPC:cosmos.poa.v1.Query/Validator
REST: GET /cosmos/poa/v1/validator/{address}
请求:
address可以是共识地址,也可以是操作员地址
Validators
列出系统中的所有验证者。 gRPC:cosmos.poa.v1.Query/Validators
REST: GET /cosmos/poa/v1/validators
请求:
- 结果始终按投票权降序返回
- 对大型验证者集合支持分页
WithdrawableFees
查询验证者操作员可提取的费用。 gRPC:cosmos.poa.v1.Query/WithdrawableFees
REST: GET /cosmos/poa/v1/allocated_fees/{operator_address}
请求:
TotalPower
获取所有验证者的总投票权。 gRPC:cosmos.poa.v1.Query/TotalPower
REST: GET /cosmos/poa/v1/total_power
请求:
交易消息(Msg 服务)
Msg 服务处理会变更状态的操作。UpdateParams
更新模块参数(仅管理员可执行)。 gRPC:cosmos.poa.v1.Msg/UpdateParams
消息:
CreateValidator
创建一个投票权为零的新验证者(由操作员发起,需管理员激活)。 gRPC:cosmos.poa.v1.Msg/CreateValidator
消息:
power=0。
说明:
- 在管理员将其投票权更新为非零值之前,该验证者不会参与共识
- 公钥必须是有效的共识公钥(通常为 Ed25519)
UpdateValidators
更新验证者集合(仅管理员可执行)。这是管理验证者的主要机制。 gRPC:cosmos.poa.v1.Msg/UpdateValidators
消息:
- 可在一笔交易中更新多个验证者
- 设置
power: 0会将验证者从活跃集合中移除 - 更改会在下一个区块传播到 CometBFT 共识
- 元数据中缺失的字段会保留现有状态中的值
WithdrawFees
将累计费用提取到操作员账户。 gRPC:cosmos.poa.v1.Msg/WithdrawFees
消息:
- 会将所有累计费用转入操作员账户
- 费用以链的原生代币计价
常见使用场景
1. 查询当前管理员
2. 列出所有活跃验证者
3. 添加新验证者
步骤 1: 操作员创建验证者:4. 修改验证者投票权
5. 移除验证者
6. 提取验证者费用
7. 转移管理员权限
REST API 端点
所有查询端点都可通过 REST 访问:| 方法 | 端点 | 说明 |
|---|---|---|
| GET | /cosmos/poa/v1/params | 获取模块参数 |
| GET | /cosmos/poa/v1/validator/{address} | 获取单个验证者 |
| GET | /cosmos/poa/v1/validators | 列出所有验证者 |
| GET | /cosmos/poa/v1/allocated_fees/{operator_address} | 获取可提取费用 |
| GET | /cosmos/poa/v1/total_power | 获取总投票权 |
错误处理
常见错误场景:未授权的管理员操作
错误: 交易被拒绝 原因: 非管理员尝试调用仅管理员可用的函数 解决方案: 确保交易由管理员账户签名无效的公钥
错误: 验证者公钥无效 原因: 公钥格式错误或类型不正确 解决方案: 使用格式正确的 Ed25519 公钥未找到验证者
错误: 验证者不存在 原因: 查询了不存在的验证者 解决方案: 验证验证者地址/公钥手续费不足
错误: 没有可提取的手续费 原因: 验证者尚未累计手续费 解决方案: 等待区块奖励累计产生手续费集成示例
JavaScript/TypeScript(CosmJS)
Python(cosmpy)
Go
安全注意事项
- 管理员密钥安全: 管理员私钥对验证者集合拥有完全控制权。请使用硬件钱包或安全的密钥管理系统。
- 验证者公钥: 确保验证者公钥已正确生成并安全存储。
- 权重分布: 考虑权重集中带来的安全影响。避免将总权重的 67% 以上分配给单个验证者。
- 操作员角色隔离: 为操作员和管理员角色使用不同账户,以限制风险暴露。
- 手续费提取: 操作员应定期提取手续费,避免其在模块中持续累积。
附录
公钥格式
Ed25519 公钥应使用 base64 编码:地址格式
- 操作员地址: 标准 Cosmos SDK bech32 地址(例如:
cosmos1...) - 共识地址: 可由公钥推导,或在查询时使用操作员地址
权重单位
- 投票权重使用
int64表示 - 总权重会影响区块签名要求(通常需要超过总权重的 2/3 才能达成共识)
- 零权重实际上会将验证者从活跃集合中移除 s
PoA Module API Documentation
Overview
The Proof of Authority (PoA) permissioned consensus module provides a governance mechanism for managing validators in a Cosmos SDK blockchain. Unlike traditional Proof of Stake, PoA allows a designated admin to control validator set membership and voting power distribution. Package:cosmos.poa.v1
Go Import: github.com/cosmos/cosmos-sdk/enterprise/poa/types
Core Concepts
- Admin Control: A single admin address has exclusive authority to manage validators and module parameters
- Validator Management: Create validators, update voting power, and manage the active validator set
- Fee Distribution: Validators accumulate fees that can be withdrawn by their operators
- Dynamic Updates: Changes to the validator set are applied without stopping the chain
Data Types
Validator
Represents a validator in the PoA system.pub_key(Any): The validator’s consensus public key (typically/cosmos.crypto.ed25519.PubKey)power(int64): Voting power for this validator (use0to remove a validator)metadata(ValidatorMetadata): Additional validator informationallocated_fees(DecCoin[]): Accumulated fees allocated to this validator
ValidatorMetadata
Metadata information about a validator.moniker(string): Human-readable name for the validatordescription(string): Optional description of the validatoroperator_address(string): Cosmos SDK address that operates this validator
Params
Module parameters.admin(string): Cosmos SDK address with administrative privileges
ValidatorFees
Represents fee allocations for a validator operator.fees(DecCoin[]): List of coins representing allocated fees
Query API
The Query service provides read-only access to PoA module state.Params
Get module parameters. gRPC:cosmos.poa.v1.Query/Params
REST: GET /cosmos/poa/v1/params
Request:
Validator
Query a single validator by address. gRPC:cosmos.poa.v1.Query/Validator
REST: GET /cosmos/poa/v1/validator/{address}
Request:
addresscan be either a consensus address or operator address
Validators
List all validators in the system. gRPC:cosmos.poa.v1.Query/Validators
REST: GET /cosmos/poa/v1/validators
Request:
- Results are always returned in descending order by voting power
- Supports pagination for large validator sets
WithdrawableFees
Query fees available for withdrawal by a validator operator. gRPC:cosmos.poa.v1.Query/WithdrawableFees
REST: GET /cosmos/poa/v1/allocated_fees/{operator_address}
Request:
TotalPower
Get the total voting power across all validators. gRPC:cosmos.poa.v1.Query/TotalPower
REST: GET /cosmos/poa/v1/total_power
Request:
Transaction Messages (Msg Service)
The Msg service handles state-changing operations.UpdateParams
Update module parameters (admin only). gRPC:cosmos.poa.v1.Msg/UpdateParams
Message:
CreateValidator
Create a new validator with zero voting power (operator initiates, admin must activate). gRPC:cosmos.poa.v1.Msg/CreateValidator
Message:
- The validator will not participate in consensus until the admin updates its power to a non-zero value
- Public key must be a valid consensus public key (typically Ed25519)
UpdateValidators
Update validator set (admin only). This is the primary mechanism for managing validators. gRPC:cosmos.poa.v1.Msg/UpdateValidators
Message:
- Can update multiple validators in a single transaction
- Setting
power: 0removes a validator from the active set - Changes propagate to CometBFT consensus in the next block
- Missing fields in metadata are preserved from existing state
WithdrawFees
Withdraw accumulated fees to the operator’s account. gRPC:cosmos.poa.v1.Msg/WithdrawFees
Message:
- Transfers all accumulated fees to the operator’s account
- Fees are denominated in the chain’s native token(s)
Common Use Cases
1. Query Current Admin
2. List All Active Validators
3. Add a New Validator
Step 1: Operator creates the validator:4. Change Validator Voting Power
5. Remove a Validator
6. Withdraw Validator Fees
7. Transfer Admin Rights
REST API Endpoints
All query endpoints are available via REST:| Method | Endpoint | Description |
|---|---|---|
| GET | /cosmos/poa/v1/params | Get module parameters |
| GET | /cosmos/poa/v1/validator/{address} | Get single validator |
| GET | /cosmos/poa/v1/validators | List all validators |
| GET | /cosmos/poa/v1/allocated_fees/{operator_address} | Get withdrawable fees |
| GET | /cosmos/poa/v1/total_power | Get total voting power |
Error Handling
Common error scenarios:Unauthorized Admin Action
Error: Transaction rejected Cause: Non-admin attempted to call admin-only function Solution: Ensure transaction is signed by the admin accountInvalid Public Key
Error: Invalid validator public key Cause: Malformed or wrong type of public key Solution: Use Ed25519 public key in correct formatValidator Not Found
Error: Validator does not exist Cause: Querying non-existent validator Solution: Verify validator address/public keyInsufficient Fees
Error: No fees to withdraw Cause: Validator has no accumulated fees Solution: Wait for fees to accumulate from block rewardsIntegration Examples
JavaScript/TypeScript (CosmJS)
Python (cosmpy)
Go
Security Considerations
- Admin Key Security: The admin private key has complete control over the validator set. Use hardware wallets or secure key management systems.
- Validator Public Keys: Ensure validator public keys are correctly generated and stored securely.
- Power Distribution: Consider the security implications of power concentration. Avoid giving a single validator >67% of total power.
- Operator Separation: Use separate accounts for operator and admin roles to limit exposure.
- Fee Withdrawal: Operators should regularly withdraw fees to prevent accumulation in the module.
Appendix
Public Key Formats
Ed25519 public keys should be base64-encoded:Address Formats
- Operator Address: Standard Cosmos SDK bech32 address (e.g.,
cosmos1...) - Consensus Address: Can be derived from public key or use operator address for queries
Power Units
- Voting power is represented as
int64 - Total power affects block signing requirements (typically need >2/3 of total power for consensus)
- Zero power effectively removes a validator from the active set s