The group module enables on-chain governance by groups of addresses. It supports:
- Dynamic membership (add/remove members)
- Flexible voting policies (threshold, percentage)
- Proposal lifecycle (submit β vote β execute)
Unlike multisig keys, group accounts are real on-chain entities that manage their own authorization via proposals and voting.
pocketd tx group create-group \
--admin alice \
--members '[{"address": "bob", "weight": "1"}, {"address": "carol", "weight": "1"}]' \
--metadata "Core team" \
--from aliceadmin: the address that can update group membership.weight: voting weight per member.metadata: optional label (free-form string).- Output: group ID (e.g.
1).
pocketd tx group create-group-policy \
--admin alice \
--group-id 1 \
--metadata "2-of-3 threshold policy" \
--decision-policy '{"@type":"/cosmos.group.v1.ThresholdDecisionPolicy","threshold":"2","windows":{"voting_period":"3600s","min_execution_period":"0s"}}' \
--from alice- This creates the on-chain group account.
- Group policy address = new account youβll fund and use in txs.
decision-policycan also be"PercentageDecisionPolicy".
pocketd tx bank send \
alice <group-policy-address> 1000000upokt \
--from alice- Group account can now hold funds and submit txs.
pocketd tx group submit-proposal \
--group-policy-address <group-policy-address> \
--proposers alice \
--messages '[{"@type":"/cosmos.bank.v1beta1.MsgSend", "from_address": "<group-policy-address>", "to_address": "<recipient>", "amount":[{"denom":"upokt", "amount":"500000"}]}]' \
--metadata "Fund dev team" \
--from alice- Anyone with
proposerrights can submit. messagesis a JSON array of embedded Cosmos messages.- Returns
proposal_id.
pocketd tx group vote \
--proposal-id 1 \
--voter bob \
--option YES \
--metadata "Looks good" \
--from bobEach member votes independently.
Options:
YESNOABSTAINVETO
pocketd tx group exec \
--proposal-id 1 \
--executor bob \
--from bob- Executes messages in the proposal.
- Anyone can execute once voting passes and execution window opens.
pocketd tx group update-group-members \
--group-id 1 \
--admin alice \
--members '[{"address": "dave", "weight": "1"}]' \
--from alicepocketd tx group update-group-policy \
--admin alice \
--group-policy-address <group-policy-address> \
--decision-policy '{"@type":"/cosmos.group.v1.ThresholdDecisionPolicy", "threshold": "3", "windows": {"voting_period": "3600s", "min_execution_period": "0s"}}' \
--from alice| Step | Action | Who |
|---|---|---|
| 1 | Create a group with members | Admin |
| 2 | Create a group policy (account + voting rules) | Admin |
| 3 | Fund the group policy address | Any member |
| 4 | Submit a proposal | Any proposer |
| 5 | Vote on proposal | Group members |
| 6 | Execute proposal | Any account (after approval) |
| 7 | (Optional) Update group or policy | Admin |
{
"@type": "/cosmos.group.v1.ThresholdDecisionPolicy",
"threshold": "2",
"windows": {
"voting_period": "3600s",
"min_execution_period": "0s"
}
}{
"@type": "/cosmos.group.v1.PercentageDecisionPolicy",
"percentage": "0.66",
"windows": {
"voting_period": "3600s",
"min_execution_period": "0s"
}
}