Group 模块 API 参考
概述
Group 模块提供了一套完整的 API,用于管理链上多签组和集体决策。 包名:cosmos.group.v1
Go 导入: github.com/cosmos/cosmos-sdk/enterprise/group/x/group
数据类型
GroupInfo
表示链上的一个组。id(uint64):组的唯一标识符,创建时自动分配admin(string):组管理员的 Cosmos SDK 地址metadata(bytes):可选的组元数据version(uint64):每次组更新时递增;用于检测过期提案total_weight(string):所有成员权重之和created_at(Timestamp):组创建时的区块时间
GroupMember
表示成员与组之间的关系。address(string):成员的 Cosmos SDK 地址weight(string):投票权重。设置为"0"可移除该成员。metadata(bytes):可选的成员元数据added_at(Timestamp):成员添加时的区块时间
GroupPolicyInfo
表示一个组策略账户。address(string):组策略的账户地址(自动生成)group_id(uint64):该策略关联的组admin(string):有权更新该策略的地址decision_policy(Any):策略的决策逻辑(阈值或百分比)version(uint64):每次更新时递增;用于检测已中止的提案
Proposal
表示提交给组策略的链上提案。PROPOSAL_STATUS_SUBMITTED- 开放投票中PROPOSAL_STATUS_ACCEPTED- 已通过;可执行PROPOSAL_STATUS_REJECTED- 计票未通过PROPOSAL_STATUS_ABORTED- 投票期间组或策略已更新PROPOSAL_STATUS_WITHDRAWN- 已由提案人或策略管理员撤回
PROPOSAL_EXECUTOR_RESULT_NOT_RUNPROPOSAL_EXECUTOR_RESULT_SUCCESSPROPOSAL_EXECUTOR_RESULT_FAILURE
TallyResult
提案的累计投票计数。查询 API
Query 服务提供对 Group 模块状态的只读访问。GroupInfo
按 ID 获取组信息。 gRPC:cosmos.group.v1.Query/GroupInfo
REST: GET /cosmos/group/v1/groups/{group_id}
CLI:
GroupPolicyInfo
获取组策略账户信息。 gRPC:cosmos.group.v1.Query/GroupPolicyInfo
REST: GET /cosmos/group/v1/group_policies/{address}
CLI:
GroupMembers
列出某个组的所有成员。 gRPC:cosmos.group.v1.Query/GroupMembers
REST: GET /cosmos/group/v1/groups/{group_id}/members
CLI:
GroupsByAdmin
列出由指定地址管理的所有组。 gRPC:cosmos.group.v1.Query/GroupsByAdmin
REST: GET /cosmos/group/v1/groups/by_admin/{admin}
CLI:
GroupPoliciesByGroup
列出与某个组关联的所有组策略。 gRPC:cosmos.group.v1.Query/GroupPoliciesByGroup
REST: GET /cosmos/group/v1/groups/{group_id}/group_policies
CLI:
GroupPoliciesByAdmin
列出由指定地址管理的所有组策略。 gRPC:cosmos.group.v1.Query/GroupPoliciesByAdmin
REST: GET /cosmos/group/v1/group_policies/by_admin/{admin}
CLI:
Proposal
按 ID 获取提案。 gRPC:cosmos.group.v1.Query/Proposal
REST: GET /cosmos/group/v1/proposals/{proposal_id}
CLI:
ProposalsByGroupPolicy
列出某个组策略账户下的所有提案。 gRPC:cosmos.group.v1.Query/ProposalsByGroupPolicy
REST: GET /cosmos/group/v1/proposals/by_group_policy/{address}
CLI:
VoteByProposalVoter
获取提案上的某一条具体投票。 gRPC:cosmos.group.v1.Query/VoteByProposalVoter
REST: GET /cosmos/group/v1/votes/{proposal_id}/{voter}
CLI:
VotesByProposal
列出某个提案上的所有投票。 gRPC:cosmos.group.v1.Query/VotesByProposal
REST: GET /cosmos/group/v1/votes/by_proposal/{proposal_id}
CLI:
TallyResult
获取提案的当前计票结果。 gRPC:cosmos.group.v1.Query/TallyResult
REST: GET /cosmos/group/v1/proposals/{proposal_id}/tally
CLI:
Groups
列出链上的所有组。 gRPC:cosmos.group.v1.Query/Groups
REST: GET /cosmos/group/v1/groups
CLI:
交易消息(Msg 服务)
CreateGroup
创建一个带有管理员和初始成员的新组。 Msg:MsgCreateGroup
CLI:
- 元数据长度超过
MaxMetadataLen - 成员包含无效地址、重复条目或零权重
UpdateGroupMembers
在组中添加、移除或重新设置成员权重。 Msg:MsgUpdateGroupMembers
CLI:
"0" 可将其从组中移除。
授权: 必须由组管理员签名。
失败条件:
- 签名者不是组管理员
- 任一关联组策略的
Validate()方法在更新后的成员集合上校验失败
UpdateGroupAdmin
将组管理权转移给新地址。 Msg:MsgUpdateGroupAdmin
CLI:
UpdateGroupMetadata
更新组的元数据。 Msg:MsgUpdateGroupMetadata
CLI:
CreateGroupPolicy
创建一个带有决策策略的新组策略账户。 Msg:MsgCreateGroupPolicy
CLI:
- 签名者不是组管理员
- 元数据长度超过
MaxMetadataLen - 决策策略的
Validate()方法针对该组校验失败
CreateGroupWithPolicy
在单笔交易中同时创建组和组策略。 Msg:MsgCreateGroupWithPolicy
CLI:
--group-policy-as-admin 可让组策略账户成为组管理员(实现自治组)。
UpdateGroupPolicyAdmin
将组策略管理权转移给新地址。 Msg:MsgUpdateGroupPolicyAdmin
CLI:
UpdateGroupPolicyDecisionPolicy
更新组策略账户的决策策略。 Msg:MsgUpdateGroupPolicyDecisionPolicy
CLI:
UpdateGroupPolicyMetadata
更新组策略的元数据。 Msg:MsgUpdateGroupPolicyMetadata
CLI:
SubmitProposal
向组策略账户提交提案。 Msg:MsgSubmitProposal
CLI:
"exec": 1(EXEC_TRY)可设置为尝试立即执行。使用 EXEC_TRY 时,提案人会自动计为赞成票。
授权: 必须至少由一名组成员签名。
失败条件:
- 元数据、标题或摘要长度超过
MaxMetadataLen - 提案人不是组成员
WithdrawProposal
撤回一个待处理提案。 Msg:MsgWithdrawProposal
CLI:
- 签名者既不是提案人也不是组策略管理员
- 提案已关闭或已中止
投票
对一个开放中的提案进行投票。 消息:MsgVote
CLI:
VOTE_OPTION_YESVOTE_OPTION_NOVOTE_OPTION_ABSTAINVOTE_OPTION_NO_WITH_VETO
--exec 1 以在投票后尝试立即执行。
授权: 必须由组成员签名。
失败条件:
- 元数据长度超过
MaxMetadataLen - 提案已不再处于投票期
执行
执行一个已被接受的提案。 消息:MsgExec
CLI:
- 提案必须处于
ACCEPTED状态 - 必须在投票期结束后的
MaxExecutionPeriod内执行 - 执行失败(
PROPOSAL_EXECUTOR_RESULT_FAILURE)后,在过期前可以重试
离开组
将自己从组中移除。 消息:MsgLeaveGroup
CLI:
- 签名者不是组成员
- 任一关联的组策略在更新后的成员集合上执行其
Validate()方法时失败
事件
Group 模块会发出以下事件:| 事件类型 | 键 | 值 |
|---|---|---|
cosmos.group.v1.EventCreateGroup | group_id | {groupId} |
cosmos.group.v1.EventUpdateGroup | group_id | {groupId} |
cosmos.group.v1.EventCreateGroupPolicy | address | {groupPolicyAddress} |
cosmos.group.v1.EventUpdateGroupPolicy | address | {groupPolicyAddress} |
cosmos.group.v1.EventCreateProposal | proposal_id | {proposalId} |
cosmos.group.v1.EventWithdrawProposal | proposal_id | {proposalId} |
cosmos.group.v1.EventVote | proposal_id | {proposalId} |
cosmos.group.v1.EventExec | proposal_id, logs | {proposalId}, {logs} |
cosmos.group.v1.EventLeaveGroup | proposal_id, address | {proposalId}, {address} |
cosmos.group.v1.EventProposalPruned | proposal_id, status, tally_result | 清理详情 |
REST API 端点
| 方法 | 端点 | 描述 |
|---|---|---|
| GET | /cosmos/group/v1/groups/{group_id} | 获取组信息 |
| GET | /cosmos/group/v1/groups/by_admin/{admin} | 按管理员列出组 |
| GET | /cosmos/group/v1/groups | 列出所有组 |
| GET | /cosmos/group/v1/groups/{group_id}/members | 列出组成员 |
| GET | /cosmos/group/v1/group_policies/{address} | 获取组策略信息 |
| GET | /cosmos/group/v1/groups/{group_id}/group_policies | 列出组的策略 |
| GET | /cosmos/group/v1/group_policies/by_admin/{admin} | 按管理员列出策略 |
| GET | /cosmos/group/v1/proposals/{proposal_id} | 获取提案 |
| GET | /cosmos/group/v1/proposals/by_group_policy/{address} | 列出某策略的提案 |
| GET | /cosmos/group/v1/proposals/{proposal_id}/tally | 获取计票结果 |
| GET | /cosmos/group/v1/votes/{proposal_id}/{voter} | 获取某个特定投票 |
| GET | /cosmos/group/v1/votes/by_proposal/{proposal_id} | 列出某提案的投票 |
常见用例
1. 创建一个 2/3 多签组
2. 提交并执行提案
3. 自治理组(策略作为管理员)
4. 为不同操作设置多个策略
Group Module API Reference
Overview
The Group module provides a comprehensive API for managing on-chain multisig groups and collective decision-making. Package:cosmos.group.v1
Go Import: github.com/cosmos/cosmos-sdk/enterprise/group/x/group
Data Types
GroupInfo
Represents a group on-chain.id(uint64): Unique group identifier, auto-assigned on creationadmin(string): Cosmos SDK address of the group administratormetadata(bytes): Optional group metadataversion(uint64): Incremented on every group update; used to detect stale proposalstotal_weight(string): Sum of all member weightscreated_at(Timestamp): Block time when the group was created
GroupMember
Represents a member’s relationship to a group.address(string): Cosmos SDK address of the memberweight(string): Voting weight. Set to"0"to remove a member.metadata(bytes): Optional member metadataadded_at(Timestamp): Block time when the member was added
GroupPolicyInfo
Represents a group policy account.address(string): The group policy’s account address (auto-generated)group_id(uint64): The group this policy is associated withadmin(string): Address with authority to update the policydecision_policy(Any): The policy’s decision logic (threshold or percentage)version(uint64): Incremented on every update; used to detect aborted proposals
Proposal
Represents an on-chain proposal submitted to a group policy.PROPOSAL_STATUS_SUBMITTED- Open for votingPROPOSAL_STATUS_ACCEPTED- Passed; ready for executionPROPOSAL_STATUS_REJECTED- Failed tallyPROPOSAL_STATUS_ABORTED- Group or policy updated during votingPROPOSAL_STATUS_WITHDRAWN- Withdrawn by proposer or policy admin
PROPOSAL_EXECUTOR_RESULT_NOT_RUNPROPOSAL_EXECUTOR_RESULT_SUCCESSPROPOSAL_EXECUTOR_RESULT_FAILURE
TallyResult
The accumulated vote counts for a proposal.Query API
The Query service provides read-only access to Group module state.GroupInfo
Get information about a group by ID. gRPC:cosmos.group.v1.Query/GroupInfo
REST: GET /cosmos/group/v1/groups/{group_id}
CLI:
GroupPolicyInfo
Get information about a group policy account. gRPC:cosmos.group.v1.Query/GroupPolicyInfo
REST: GET /cosmos/group/v1/group_policies/{address}
CLI:
GroupMembers
List all members of a group. gRPC:cosmos.group.v1.Query/GroupMembers
REST: GET /cosmos/group/v1/groups/{group_id}/members
CLI:
GroupsByAdmin
List all groups administered by a given address. gRPC:cosmos.group.v1.Query/GroupsByAdmin
REST: GET /cosmos/group/v1/groups/by_admin/{admin}
CLI:
GroupPoliciesByGroup
List all group policies associated with a group. gRPC:cosmos.group.v1.Query/GroupPoliciesByGroup
REST: GET /cosmos/group/v1/groups/{group_id}/group_policies
CLI:
GroupPoliciesByAdmin
List all group policies administered by a given address. gRPC:cosmos.group.v1.Query/GroupPoliciesByAdmin
REST: GET /cosmos/group/v1/group_policies/by_admin/{admin}
CLI:
Proposal
Get a proposal by ID. gRPC:cosmos.group.v1.Query/Proposal
REST: GET /cosmos/group/v1/proposals/{proposal_id}
CLI:
ProposalsByGroupPolicy
List all proposals for a given group policy account. gRPC:cosmos.group.v1.Query/ProposalsByGroupPolicy
REST: GET /cosmos/group/v1/proposals/by_group_policy/{address}
CLI:
VoteByProposalVoter
Get a specific vote on a proposal. gRPC:cosmos.group.v1.Query/VoteByProposalVoter
REST: GET /cosmos/group/v1/votes/{proposal_id}/{voter}
CLI:
VotesByProposal
List all votes on a proposal. gRPC:cosmos.group.v1.Query/VotesByProposal
REST: GET /cosmos/group/v1/votes/by_proposal/{proposal_id}
CLI:
TallyResult
Get the current tally for a proposal. gRPC:cosmos.group.v1.Query/TallyResult
REST: GET /cosmos/group/v1/proposals/{proposal_id}/tally
CLI:
Groups
List all groups on chain. gRPC:cosmos.group.v1.Query/Groups
REST: GET /cosmos/group/v1/groups
CLI:
Transaction Messages (Msg Service)
CreateGroup
Create a new group with an admin and initial members. Msg:MsgCreateGroup
CLI:
- Metadata length exceeds
MaxMetadataLen - Members have invalid addresses, duplicate entries, or zero weight
UpdateGroupMembers
Add, remove, or reweight members in a group. Msg:MsgUpdateGroupMembers
CLI:
"0" to remove them from the group.
Authorization: Must be signed by the group admin.
Failure conditions:
- Signer is not the group admin
- Any associated group policy’s
Validate()method fails against the updated member set
UpdateGroupAdmin
Transfer group administration to a new address. Msg:MsgUpdateGroupAdmin
CLI:
UpdateGroupMetadata
Update a group’s metadata. Msg:MsgUpdateGroupMetadata
CLI:
CreateGroupPolicy
Create a new group policy account with a decision policy. Msg:MsgCreateGroupPolicy
CLI:
- Signer is not the group admin
- Metadata length exceeds
MaxMetadataLen - Decision policy’s
Validate()method fails against the group
CreateGroupWithPolicy
Create a group and a group policy in a single transaction. Msg:MsgCreateGroupWithPolicy
CLI:
--group-policy-as-admin to make the group policy account the group admin (enabling a self-governed group).
UpdateGroupPolicyAdmin
Transfer group policy administration to a new address. Msg:MsgUpdateGroupPolicyAdmin
CLI:
UpdateGroupPolicyDecisionPolicy
Update the decision policy for a group policy account. Msg:MsgUpdateGroupPolicyDecisionPolicy
CLI:
UpdateGroupPolicyMetadata
Update a group policy’s metadata. Msg:MsgUpdateGroupPolicyMetadata
CLI:
SubmitProposal
Submit a proposal to a group policy account. Msg:MsgSubmitProposal
CLI:
"exec": 1 (EXEC_TRY) to attempt immediate execution. When using EXEC_TRY, proposers are automatically counted as yes votes.
Authorization: Must be signed by at least one group member.
Failure conditions:
- Metadata, title, or summary length exceeds
MaxMetadataLen - Proposer is not a group member
WithdrawProposal
Withdraw a pending proposal. Msg:MsgWithdrawProposal
CLI:
- Signer is neither a proposer nor the group policy admin
- Proposal is already closed or aborted
Vote
Cast a vote on an open proposal. Msg:MsgVote
CLI:
VOTE_OPTION_YESVOTE_OPTION_NOVOTE_OPTION_ABSTAINVOTE_OPTION_NO_WITH_VETO
--exec 1 to attempt immediate execution after voting.
Authorization: Must be signed by a group member.
Failure conditions:
- Metadata length exceeds
MaxMetadataLen - Proposal is no longer in the voting period
Exec
Execute an accepted proposal. Msg:MsgExec
CLI:
- Proposal must be in
ACCEPTEDstatus - Execution must occur before
MaxExecutionPeriodafter the voting period ends - A failed execution (
PROPOSAL_EXECUTOR_RESULT_FAILURE) can be retried until expiry
LeaveGroup
Remove yourself from a group. Msg:MsgLeaveGroup
CLI:
- Signer is not a group member
- Any associated group policy’s
Validate()method fails against the updated member set
Events
The Group module emits the following events:| Event Type | Key | Value |
|---|---|---|
cosmos.group.v1.EventCreateGroup | group_id | {groupId} |
cosmos.group.v1.EventUpdateGroup | group_id | {groupId} |
cosmos.group.v1.EventCreateGroupPolicy | address | {groupPolicyAddress} |
cosmos.group.v1.EventUpdateGroupPolicy | address | {groupPolicyAddress} |
cosmos.group.v1.EventCreateProposal | proposal_id | {proposalId} |
cosmos.group.v1.EventWithdrawProposal | proposal_id | {proposalId} |
cosmos.group.v1.EventVote | proposal_id | {proposalId} |
cosmos.group.v1.EventExec | proposal_id, logs | {proposalId}, {logs} |
cosmos.group.v1.EventLeaveGroup | proposal_id, address | {proposalId}, {address} |
cosmos.group.v1.EventProposalPruned | proposal_id, status, tally_result | pruning details |
REST API Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /cosmos/group/v1/groups/{group_id} | Get group info |
| GET | /cosmos/group/v1/groups/by_admin/{admin} | List groups by admin |
| GET | /cosmos/group/v1/groups | List all groups |
| GET | /cosmos/group/v1/groups/{group_id}/members | List group members |
| GET | /cosmos/group/v1/group_policies/{address} | Get group policy info |
| GET | /cosmos/group/v1/groups/{group_id}/group_policies | List policies for a group |
| GET | /cosmos/group/v1/group_policies/by_admin/{admin} | List policies by admin |
| GET | /cosmos/group/v1/proposals/{proposal_id} | Get proposal |
| GET | /cosmos/group/v1/proposals/by_group_policy/{address} | List proposals for a policy |
| GET | /cosmos/group/v1/proposals/{proposal_id}/tally | Get tally result |
| GET | /cosmos/group/v1/votes/{proposal_id}/{voter} | Get a specific vote |
| GET | /cosmos/group/v1/votes/by_proposal/{proposal_id} | List votes for a proposal |