225 lines
7.2 KiB
Go
225 lines
7.2 KiB
Go
package group
|
|
|
|
import (
|
|
"github.com/cosmos/gogoproto/proto"
|
|
gogoprotoany "github.com/cosmos/gogoproto/types/any"
|
|
|
|
"github.com/cosmos/cosmos-sdk/codec/types"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
|
"github.com/cosmos/cosmos-sdk/types/tx"
|
|
)
|
|
|
|
var (
|
|
_ sdk.Msg = &MsgCreateGroup{}
|
|
_ sdk.Msg = &MsgUpdateGroupAdmin{}
|
|
_ sdk.Msg = &MsgUpdateGroupMetadata{}
|
|
_ sdk.Msg = &MsgUpdateGroupMembers{}
|
|
_ sdk.Msg = &MsgUpdateGroupMembers{}
|
|
_ sdk.Msg = &MsgCreateGroupWithPolicy{}
|
|
_ sdk.Msg = &MsgCreateGroupPolicy{}
|
|
_ sdk.Msg = &MsgUpdateGroupPolicyAdmin{}
|
|
_ sdk.Msg = &MsgUpdateGroupPolicyDecisionPolicy{}
|
|
_ sdk.Msg = &MsgUpdateGroupPolicyMetadata{}
|
|
_ sdk.Msg = &MsgLeaveGroup{}
|
|
_ sdk.Msg = &MsgExec{}
|
|
_ sdk.Msg = &MsgVote{}
|
|
_ sdk.Msg = &MsgWithdrawProposal{}
|
|
_ sdk.Msg = &MsgSubmitProposal{}
|
|
_ sdk.Msg = &MsgCreateGroupPolicy{}
|
|
|
|
_ gogoprotoany.UnpackInterfacesMessage = MsgCreateGroupPolicy{}
|
|
_ gogoprotoany.UnpackInterfacesMessage = MsgUpdateGroupPolicyDecisionPolicy{}
|
|
_ gogoprotoany.UnpackInterfacesMessage = MsgCreateGroupWithPolicy{}
|
|
)
|
|
|
|
// GetGroupID gets the group id of the MsgUpdateGroupMetadata.
|
|
func (m *MsgUpdateGroupMetadata) GetGroupID() uint64 {
|
|
return m.GroupId
|
|
}
|
|
|
|
// GetGroupID gets the group id of the MsgUpdateGroupMembers.
|
|
func (m *MsgUpdateGroupMembers) GetGroupID() uint64 {
|
|
return m.GroupId
|
|
}
|
|
|
|
// GetGroupID gets the group id of the MsgUpdateGroupAdmin.
|
|
func (m *MsgUpdateGroupAdmin) GetGroupID() uint64 {
|
|
return m.GroupId
|
|
}
|
|
|
|
// NewMsgCreateGroupWithPolicy creates a new MsgCreateGroupWithPolicy.
|
|
func NewMsgCreateGroupWithPolicy(admin string, members []MemberRequest, groupMetadata, groupPolicyMetadata string, groupPolicyAsAdmin bool, decisionPolicy DecisionPolicy) (*MsgCreateGroupWithPolicy, error) {
|
|
m := &MsgCreateGroupWithPolicy{
|
|
Admin: admin,
|
|
Members: members,
|
|
GroupMetadata: groupMetadata,
|
|
GroupPolicyMetadata: groupPolicyMetadata,
|
|
GroupPolicyAsAdmin: groupPolicyAsAdmin,
|
|
}
|
|
err := m.SetDecisionPolicy(decisionPolicy)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
// GetDecisionPolicy gets the decision policy of MsgCreateGroupWithPolicy.
|
|
func (m *MsgCreateGroupWithPolicy) GetDecisionPolicy() (DecisionPolicy, error) {
|
|
decisionPolicy, ok := m.DecisionPolicy.GetCachedValue().(DecisionPolicy)
|
|
if !ok {
|
|
return nil, sdkerrors.ErrInvalidType.Wrapf("expected %T, got %T", (DecisionPolicy)(nil), m.DecisionPolicy.GetCachedValue())
|
|
}
|
|
return decisionPolicy, nil
|
|
}
|
|
|
|
// SetDecisionPolicy sets the decision policy for MsgCreateGroupWithPolicy.
|
|
func (m *MsgCreateGroupWithPolicy) SetDecisionPolicy(decisionPolicy DecisionPolicy) error {
|
|
any, err := types.NewAnyWithValue(decisionPolicy)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.DecisionPolicy = any
|
|
return nil
|
|
}
|
|
|
|
// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces
|
|
func (m MsgCreateGroupWithPolicy) UnpackInterfaces(unpacker gogoprotoany.AnyUnpacker) error {
|
|
var decisionPolicy DecisionPolicy
|
|
return unpacker.UnpackAny(m.DecisionPolicy, &decisionPolicy)
|
|
}
|
|
|
|
// NewMsgUpdateGroupPolicyDecisionPolicy creates a new MsgUpdateGroupPolicyDecisionPolicy.
|
|
func NewMsgUpdateGroupPolicyDecisionPolicy(admin, address string, decisionPolicy DecisionPolicy) (*MsgUpdateGroupPolicyDecisionPolicy, error) {
|
|
m := &MsgUpdateGroupPolicyDecisionPolicy{
|
|
Admin: admin,
|
|
GroupPolicyAddress: address,
|
|
}
|
|
err := m.SetDecisionPolicy(decisionPolicy)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
// SetDecisionPolicy sets the decision policy for MsgUpdateGroupPolicyDecisionPolicy.
|
|
func (m *MsgUpdateGroupPolicyDecisionPolicy) SetDecisionPolicy(decisionPolicy DecisionPolicy) error {
|
|
msg, ok := decisionPolicy.(proto.Message)
|
|
if !ok {
|
|
return sdkerrors.ErrInvalidType.Wrapf("can't proto marshal %T", msg)
|
|
}
|
|
any, err := types.NewAnyWithValue(msg)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.DecisionPolicy = any
|
|
return nil
|
|
}
|
|
|
|
// GetDecisionPolicy gets the decision policy of MsgUpdateGroupPolicyDecisionPolicy.
|
|
func (m *MsgUpdateGroupPolicyDecisionPolicy) GetDecisionPolicy() (DecisionPolicy, error) {
|
|
decisionPolicy, ok := m.DecisionPolicy.GetCachedValue().(DecisionPolicy)
|
|
if !ok {
|
|
return nil, sdkerrors.ErrInvalidType.Wrapf("expected %T, got %T", (DecisionPolicy)(nil), m.DecisionPolicy.GetCachedValue())
|
|
}
|
|
|
|
return decisionPolicy, nil
|
|
}
|
|
|
|
// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces
|
|
func (m MsgUpdateGroupPolicyDecisionPolicy) UnpackInterfaces(unpacker gogoprotoany.AnyUnpacker) error {
|
|
var decisionPolicy DecisionPolicy
|
|
return unpacker.UnpackAny(m.DecisionPolicy, &decisionPolicy)
|
|
}
|
|
|
|
// NewMsgCreateGroupPolicy creates a new MsgCreateGroupPolicy.
|
|
func NewMsgCreateGroupPolicy(admin string, group uint64, metadata string, decisionPolicy DecisionPolicy) (*MsgCreateGroupPolicy, error) {
|
|
m := &MsgCreateGroupPolicy{
|
|
Admin: admin,
|
|
GroupId: group,
|
|
Metadata: metadata,
|
|
}
|
|
err := m.SetDecisionPolicy(decisionPolicy)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
// GetAdmin gets the admin of MsgCreateGroupPolicy.
|
|
func (m *MsgCreateGroupPolicy) GetAdmin() string {
|
|
return m.Admin
|
|
}
|
|
|
|
// GetGroupID gets the group id of MsgCreateGroupPolicy.
|
|
func (m *MsgCreateGroupPolicy) GetGroupID() uint64 {
|
|
return m.GroupId
|
|
}
|
|
|
|
// GetMetadata gets the metadata of MsgCreateGroupPolicy.
|
|
func (m *MsgCreateGroupPolicy) GetMetadata() string {
|
|
return m.Metadata
|
|
}
|
|
|
|
// GetDecisionPolicy gets the decision policy of MsgCreateGroupPolicy.
|
|
func (m *MsgCreateGroupPolicy) GetDecisionPolicy() (DecisionPolicy, error) {
|
|
decisionPolicy, ok := m.DecisionPolicy.GetCachedValue().(DecisionPolicy)
|
|
if !ok {
|
|
return nil, sdkerrors.ErrInvalidType.Wrapf("expected %T, got %T", (DecisionPolicy)(nil), m.DecisionPolicy.GetCachedValue())
|
|
}
|
|
return decisionPolicy, nil
|
|
}
|
|
|
|
// SetDecisionPolicy sets the decision policy of MsgCreateGroupPolicy.
|
|
func (m *MsgCreateGroupPolicy) SetDecisionPolicy(decisionPolicy DecisionPolicy) error {
|
|
any, err := types.NewAnyWithValue(decisionPolicy)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.DecisionPolicy = any
|
|
return nil
|
|
}
|
|
|
|
// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces
|
|
func (m MsgCreateGroupPolicy) UnpackInterfaces(unpacker gogoprotoany.AnyUnpacker) error {
|
|
var decisionPolicy DecisionPolicy
|
|
return unpacker.UnpackAny(m.DecisionPolicy, &decisionPolicy)
|
|
}
|
|
|
|
// NewMsgSubmitProposal creates a new MsgSubmitProposal.
|
|
func NewMsgSubmitProposal(address string, proposers []string, msgs []sdk.Msg, metadata string, exec Exec, title, summary string) (*MsgSubmitProposal, error) {
|
|
m := &MsgSubmitProposal{
|
|
GroupPolicyAddress: address,
|
|
Proposers: proposers,
|
|
Metadata: metadata,
|
|
Exec: exec,
|
|
Title: title,
|
|
Summary: summary,
|
|
}
|
|
err := m.SetMsgs(msgs)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
// SetMsgs packs msgs into Any's
|
|
func (m *MsgSubmitProposal) SetMsgs(msgs []sdk.Msg) error {
|
|
anys, err := tx.SetMsgs(msgs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.Messages = anys
|
|
return nil
|
|
}
|
|
|
|
// GetMsgs unpacks m.Messages Any's into sdk.Msg's
|
|
func (m MsgSubmitProposal) GetMsgs() ([]sdk.Msg, error) {
|
|
return tx.GetMsgs(m.Messages, "proposal")
|
|
}
|
|
|
|
// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces
|
|
func (m MsgSubmitProposal) UnpackInterfaces(unpacker gogoprotoany.AnyUnpacker) error {
|
|
return tx.UnpackInterfaces(unpacker, m.Messages)
|
|
}
|