Group Cosmos SDK Module

March 10, 2026 ยท View on GitHub

Part of Cosmos SDK Enterprise Modules | Enterprise Modules

Full Documentation: docs.cosmos.network/enterprise/components/group/overview

License Notice: This module uses the Source Available Evaluation License, different from the core SDK's Apache-2.0 license. See the License section for details.

A Cosmos SDK module that enables on-chain multisig accounts and collective decision-making through configurable voting policies.

Overview

The Group module allows any set of accounts to form a named group, attach one or more decision policies to it, and collectively authorize the execution of arbitrary messages through a proposal-and-vote workflow.

Key Features

  • Flexible Membership: Groups aggregate accounts with weighted voting power; members can be added, removed, or reweighted by the group admin
  • Multiple Decision Policies: Each group can have multiple group policy accounts, each with its own threshold or percentage-based decision policy
  • Proposal Execution: When a proposal is accepted according to its policy, any account can trigger execution of the embedded messages
  • Automatic Tally: At the end of every block, proposals whose voting period has expired are tallied and pruned automatically

Architecture

diagram

Module Interactions

ModulePurposeInterface
AuthAccount managementCreates group policy accounts; provides address codec
BankBalance checksQueried for spendable coins on group policy accounts
BaseAppMessage routingExecutes proposal messages via the message router; runs EndBlock tally and pruning of expired proposals

Quick Start

Prerequisites

  • Go 1.25+
  • Docker (for proto generation)

Usage

Query Commands

Get info about a group by ID:

simd q group group-info [group-id]

Get info about a group policy by account address:

simd q group group-policy-info [group-policy-account]

List members of a group:

simd q group group-members [group-id]

List groups by admin address:

simd q group groups-by-admin [admin]

List group policies for a group:

simd q group group-policies-by-group [group-id]

Get a proposal by ID:

simd q group proposal [proposal-id]

List proposals for a group policy:

simd q group proposals-by-group-policy [group-policy-account]

Get a vote:

simd q group vote [proposal-id] [voter]

Get the current tally for a proposal:

simd q group tally-result [proposal-id]

List all groups on chain:

simd q group groups

Transaction Commands

Create a group:

simd tx group create-group [admin] [metadata] [members-json-file]

Where members.json contains:

{
  "members": [
    {
      "address": "cosmos1...",
      "weight": "1",
      "metadata": "member description"
    }
  ]
}

Create a group policy with a threshold decision policy:

simd tx group create-group-policy [admin] [group-id] [metadata] [decision-policy-json]

Where the threshold decision policy JSON is:

{
  "@type": "/cosmos.group.v1.ThresholdDecisionPolicy",
  "threshold": "2",
  "windows": {
    "voting_period": "24h",
    "min_execution_period": "0s"
  }
}

Submit a proposal:

simd tx group submit-proposal [proposal-json-file] \
    --from proposer \
    --keyring-backend test

Vote on a proposal:

simd tx group vote [proposal-id] [voter] [vote-option] [metadata]
# vote-option: VOTE_OPTION_YES | VOTE_OPTION_NO | VOTE_OPTION_ABSTAIN | VOTE_OPTION_NO_WITH_VETO

Execute an accepted proposal:

simd tx group exec [proposal-id] \
    --from executor \
    --keyring-backend test

Update group members (set weight to "0" to remove):

simd tx group update-group-members [admin] [group-id] [members-json-file]

Leave a group:

simd tx group leave-group [member-address] [group-id]

Withdraw a submitted proposal:

simd tx group withdraw-proposal [proposal-id] [group-policy-admin-or-proposer]

License

IMPORTANT: This module uses a different license than the core Cosmos SDK.

This module is licensed under the Source Available Evaluation License for non-commercial evaluation, testing, and educational purposes only. Commercial use requires a separate license.