github.com/KiraCore/sekai@v0.3.43/x/gov/proposal_handler.go (about)

     1  package gov
     2  
     3  import (
     4  	"fmt"
     5  
     6  	kiratypes "github.com/KiraCore/sekai/types"
     7  	"github.com/KiraCore/sekai/x/gov/keeper"
     8  	"github.com/KiraCore/sekai/x/gov/types"
     9  	sdk "github.com/cosmos/cosmos-sdk/types"
    10  	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
    11  	"github.com/pkg/errors"
    12  )
    13  
    14  type ApplyWhitelistAccountPermissionProposalHandler struct {
    15  	keeper keeper.Keeper
    16  }
    17  
    18  func NewApplyWhitelistAccountPermissionProposalHandler(keeper keeper.Keeper) *ApplyWhitelistAccountPermissionProposalHandler {
    19  	return &ApplyWhitelistAccountPermissionProposalHandler{keeper: keeper}
    20  }
    21  
    22  func (a ApplyWhitelistAccountPermissionProposalHandler) ProposalType() string {
    23  	return kiratypes.ProposalTypeWhitelistAccountPermission
    24  }
    25  
    26  func (a ApplyWhitelistAccountPermissionProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
    27  	p := proposal.(*types.WhitelistAccountPermissionProposal)
    28  
    29  	actor, found := a.keeper.GetNetworkActorByAddress(ctx, p.Address)
    30  	if found {
    31  		if actor.Permissions.IsWhitelisted(types.PermValue(p.Permission)) {
    32  			return sdkerrors.Wrap(types.ErrWhitelisting, "permission already whitelisted")
    33  		}
    34  	} else {
    35  		actor = types.NewDefaultActor(p.Address)
    36  	}
    37  
    38  	return a.keeper.AddWhitelistPermission(ctx, actor, types.PermValue(p.Permission))
    39  }
    40  
    41  type ApplyBlacklistAccountPermissionProposalHandler struct {
    42  	keeper keeper.Keeper
    43  }
    44  
    45  func NewApplyBlacklistAccountPermissionProposalHandler(keeper keeper.Keeper) *ApplyBlacklistAccountPermissionProposalHandler {
    46  	return &ApplyBlacklistAccountPermissionProposalHandler{keeper: keeper}
    47  }
    48  
    49  func (a ApplyBlacklistAccountPermissionProposalHandler) ProposalType() string {
    50  	return kiratypes.ProposalTypeBlacklistAccountPermission
    51  }
    52  
    53  func (a ApplyBlacklistAccountPermissionProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
    54  	p := proposal.(*types.BlacklistAccountPermissionProposal)
    55  
    56  	actor, found := a.keeper.GetNetworkActorByAddress(ctx, p.Address)
    57  	if found {
    58  		if actor.Permissions.IsBlacklisted(types.PermValue(p.Permission)) {
    59  			return sdkerrors.Wrap(types.ErrWhitelisting, "permission already blacklisted")
    60  		}
    61  	} else {
    62  		actor = types.NewDefaultActor(p.Address)
    63  	}
    64  
    65  	return a.keeper.AddBlacklistPermission(ctx, actor, types.PermValue(p.Permission))
    66  }
    67  
    68  type ApplyRemoveWhitelistedAccountPermissionProposalHandler struct {
    69  	keeper keeper.Keeper
    70  }
    71  
    72  func NewApplyRemoveWhitelistedAccountPermissionProposalHandler(keeper keeper.Keeper) *ApplyRemoveWhitelistedAccountPermissionProposalHandler {
    73  	return &ApplyRemoveWhitelistedAccountPermissionProposalHandler{keeper: keeper}
    74  }
    75  
    76  func (a ApplyRemoveWhitelistedAccountPermissionProposalHandler) ProposalType() string {
    77  	return kiratypes.ProposalTypeRemoveWhitelistedAccountPermission
    78  }
    79  
    80  func (a ApplyRemoveWhitelistedAccountPermissionProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
    81  	p := proposal.(*types.RemoveWhitelistedAccountPermissionProposal)
    82  
    83  	actor, found := a.keeper.GetNetworkActorByAddress(ctx, p.Address)
    84  	if found {
    85  		if !actor.Permissions.IsWhitelisted(types.PermValue(p.Permission)) {
    86  			return sdkerrors.Wrap(types.ErrWhitelisting, "whitelisted permission does not exist")
    87  		}
    88  	} else {
    89  		actor = types.NewDefaultActor(p.Address)
    90  	}
    91  
    92  	return a.keeper.RemoveWhitelistedPermission(ctx, actor, types.PermValue(p.Permission))
    93  }
    94  
    95  type ApplyRemoveBlacklistedAccountPermissionProposalHandler struct {
    96  	keeper keeper.Keeper
    97  }
    98  
    99  func NewApplyRemoveBlacklistedAccountPermissionProposalHandler(keeper keeper.Keeper) *ApplyRemoveBlacklistedAccountPermissionProposalHandler {
   100  	return &ApplyRemoveBlacklistedAccountPermissionProposalHandler{keeper: keeper}
   101  }
   102  
   103  func (a ApplyRemoveBlacklistedAccountPermissionProposalHandler) ProposalType() string {
   104  	return kiratypes.ProposalTypeRemoveBlacklistedAccountPermission
   105  }
   106  
   107  func (a ApplyRemoveBlacklistedAccountPermissionProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
   108  	p := proposal.(*types.RemoveBlacklistedAccountPermissionProposal)
   109  
   110  	actor, found := a.keeper.GetNetworkActorByAddress(ctx, p.Address)
   111  	fmt.Println("actor", actor)
   112  	if found {
   113  		if !actor.Permissions.IsBlacklisted(types.PermValue(p.Permission)) {
   114  			return sdkerrors.Wrap(types.ErrWhitelisting, "blacklisted permission does not exist")
   115  		}
   116  	} else {
   117  		actor = types.NewDefaultActor(p.Address)
   118  	}
   119  
   120  	fmt.Println("RemoveBlacklistedPermission", p.Permission)
   121  	return a.keeper.RemoveBlacklistedPermission(ctx, actor, types.PermValue(p.Permission))
   122  }
   123  
   124  type ApplyAssignRoleToAccountProposalHandler struct {
   125  	keeper keeper.Keeper
   126  }
   127  
   128  func NewApplyAssignRoleToAccountProposalHandler(keeper keeper.Keeper) *ApplyAssignRoleToAccountProposalHandler {
   129  	return &ApplyAssignRoleToAccountProposalHandler{keeper: keeper}
   130  }
   131  
   132  func (a ApplyAssignRoleToAccountProposalHandler) ProposalType() string {
   133  	return kiratypes.ProposalTypeAssignRoleToAccount
   134  }
   135  
   136  func (a ApplyAssignRoleToAccountProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
   137  	p := proposal.(*types.AssignRoleToAccountProposal)
   138  
   139  	roleId, err := a.keeper.GetRoleIdFromIdentifierString(ctx, p.RoleIdentifier)
   140  	if err != nil {
   141  		return err
   142  	}
   143  
   144  	return a.keeper.AssignRoleToAccount(ctx, p.Address, roleId)
   145  }
   146  
   147  type ApplyUnassignRoleFromAccountProposalHandler struct {
   148  	keeper keeper.Keeper
   149  }
   150  
   151  func NewApplyUnassignRoleFromAccountProposalHandler(keeper keeper.Keeper) *ApplyUnassignRoleFromAccountProposalHandler {
   152  	return &ApplyUnassignRoleFromAccountProposalHandler{keeper: keeper}
   153  }
   154  
   155  func (a ApplyUnassignRoleFromAccountProposalHandler) ProposalType() string {
   156  	return kiratypes.ProposalTypeUnassignRoleFromAccount
   157  }
   158  
   159  func (a ApplyUnassignRoleFromAccountProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
   160  	p := proposal.(*types.UnassignRoleFromAccountProposal)
   161  
   162  	roleId, err := a.keeper.GetRoleIdFromIdentifierString(ctx, p.RoleIdentifier)
   163  	if err != nil {
   164  		return err
   165  	}
   166  
   167  	return a.keeper.UnassignRoleFromAccount(ctx, p.Address, roleId)
   168  }
   169  
   170  type ApplySetNetworkPropertyProposalHandler struct {
   171  	keeper keeper.Keeper
   172  }
   173  
   174  func NewApplySetNetworkPropertyProposalHandler(keeper keeper.Keeper) *ApplySetNetworkPropertyProposalHandler {
   175  	return &ApplySetNetworkPropertyProposalHandler{keeper: keeper}
   176  }
   177  
   178  func (a ApplySetNetworkPropertyProposalHandler) ProposalType() string {
   179  	return kiratypes.ProposalTypeSetNetworkProperty
   180  }
   181  
   182  func (a ApplySetNetworkPropertyProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
   183  	p := proposal.(*types.SetNetworkPropertyProposal)
   184  
   185  	property, err := a.keeper.GetNetworkProperty(ctx, p.NetworkProperty)
   186  	if err != nil {
   187  		return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, err.Error())
   188  	}
   189  	if property == p.Value {
   190  		return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "network property already set as proposed value")
   191  	}
   192  
   193  	return a.keeper.SetNetworkProperty(ctx, p.NetworkProperty, p.Value)
   194  }
   195  
   196  type ApplyUpsertDataRegistryProposalHandler struct {
   197  	keeper keeper.Keeper
   198  }
   199  
   200  func NewApplyUpsertDataRegistryProposalHandler(keeper keeper.Keeper) *ApplyUpsertDataRegistryProposalHandler {
   201  	return &ApplyUpsertDataRegistryProposalHandler{keeper: keeper}
   202  }
   203  
   204  func (a ApplyUpsertDataRegistryProposalHandler) ProposalType() string {
   205  	return kiratypes.ProposalTypeUpsertDataRegistry
   206  }
   207  
   208  func (a ApplyUpsertDataRegistryProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
   209  	p := proposal.(*types.UpsertDataRegistryProposal)
   210  	entry := types.NewDataRegistryEntry(p.Hash, p.Reference, p.Encoding, p.Size_)
   211  	a.keeper.UpsertDataRegistryEntry(ctx, p.Key, entry)
   212  	return nil
   213  }
   214  
   215  type ApplySetPoorNetworkMessagesProposalHandler struct {
   216  	keeper keeper.Keeper
   217  }
   218  
   219  func NewApplySetPoorNetworkMessagesProposalHandler(keeper keeper.Keeper) *ApplySetPoorNetworkMessagesProposalHandler {
   220  	return &ApplySetPoorNetworkMessagesProposalHandler{keeper: keeper}
   221  }
   222  
   223  func (a ApplySetPoorNetworkMessagesProposalHandler) ProposalType() string {
   224  	return kiratypes.ProposalTypeSetPoorNetworkMessages
   225  }
   226  
   227  func (a ApplySetPoorNetworkMessagesProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
   228  	p := proposal.(*types.SetPoorNetworkMessagesProposal)
   229  	msgs := types.AllowedMessages{Messages: p.Messages}
   230  	a.keeper.SavePoorNetworkMessages(ctx, &msgs)
   231  	return nil
   232  }
   233  
   234  type CreateRoleProposalHandler struct {
   235  	keeper keeper.Keeper
   236  }
   237  
   238  func NewApplyCreateRoleProposalHandler(keeper keeper.Keeper) *CreateRoleProposalHandler {
   239  	return &CreateRoleProposalHandler{keeper: keeper}
   240  }
   241  
   242  func (c CreateRoleProposalHandler) ProposalType() string {
   243  	return kiratypes.ProposalTypeCreateRole
   244  }
   245  
   246  func (c CreateRoleProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
   247  	p := proposal.(*types.CreateRoleProposal)
   248  
   249  	// check sid is good variable naming form
   250  	if !keeper.ValidateRoleSidKey(p.RoleSid) {
   251  		return errors.Wrap(types.ErrInvalidRoleSid, fmt.Sprintf("invalid role sid configuration: sid=%s", p.RoleSid))
   252  	}
   253  
   254  	_, err := c.keeper.GetRoleBySid(ctx, p.RoleSid)
   255  	if err == nil {
   256  		return types.ErrRoleExist
   257  	}
   258  
   259  	roleId := c.keeper.CreateRole(ctx, p.RoleSid, p.RoleDescription)
   260  
   261  	for _, w := range p.WhitelistedPermissions {
   262  		err := c.keeper.WhitelistRolePermission(ctx, roleId, w)
   263  		if err != nil {
   264  			return err
   265  		}
   266  	}
   267  
   268  	for _, b := range p.BlacklistedPermissions {
   269  		err := c.keeper.BlacklistRolePermission(ctx, roleId, b)
   270  		if err != nil {
   271  			return err
   272  		}
   273  	}
   274  	return nil
   275  }
   276  
   277  type ApplyRemoveRoleProposalHandler struct {
   278  	keeper keeper.Keeper
   279  }
   280  
   281  func NewApplyRemoveRoleProposalHandler(keeper keeper.Keeper) *ApplyRemoveRoleProposalHandler {
   282  	return &ApplyRemoveRoleProposalHandler{keeper: keeper}
   283  }
   284  
   285  func (c ApplyRemoveRoleProposalHandler) ProposalType() string {
   286  	return kiratypes.ProposalTypeRemoveRole
   287  }
   288  
   289  func (c ApplyRemoveRoleProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
   290  	p := proposal.(*types.RemoveRoleProposal)
   291  
   292  	role, err := c.keeper.GetRoleBySid(ctx, p.RoleSid)
   293  	if err == nil {
   294  		return types.ErrRoleExist
   295  	}
   296  
   297  	c.keeper.DeleteRole(ctx, role)
   298  	ctx.EventManager().EmitEvent(
   299  		sdk.NewEvent(
   300  			types.EventTypeRemoveRole,
   301  			sdk.NewAttribute(types.AttributeKeyRoleId, fmt.Sprintf("%d", role.Id)),
   302  		),
   303  	)
   304  	return nil
   305  }
   306  
   307  type ApplyWhitelistRolePermissionProposalHandler struct {
   308  	keeper keeper.Keeper
   309  }
   310  
   311  func NewApplyWhitelistRolePermissionProposalHandler(keeper keeper.Keeper) *ApplyWhitelistRolePermissionProposalHandler {
   312  	return &ApplyWhitelistRolePermissionProposalHandler{keeper: keeper}
   313  }
   314  
   315  func (c ApplyWhitelistRolePermissionProposalHandler) ProposalType() string {
   316  	return kiratypes.ProposalTypeWhitelistRolePermission
   317  }
   318  
   319  func (c ApplyWhitelistRolePermissionProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
   320  	p := proposal.(*types.WhitelistRolePermissionProposal)
   321  
   322  	roleId, err := c.keeper.GetRoleIdFromIdentifierString(ctx, p.RoleIdentifier)
   323  	if err != nil {
   324  		return err
   325  	}
   326  
   327  	return c.keeper.WhitelistRolePermission(ctx, roleId, p.Permission)
   328  }
   329  
   330  type ApplyBlacklistRolePermissionProposalHandler struct {
   331  	keeper keeper.Keeper
   332  }
   333  
   334  func NewApplyBlacklistRolePermissionProposalHandler(keeper keeper.Keeper) *ApplyBlacklistRolePermissionProposalHandler {
   335  	return &ApplyBlacklistRolePermissionProposalHandler{keeper: keeper}
   336  }
   337  
   338  func (c ApplyBlacklistRolePermissionProposalHandler) ProposalType() string {
   339  	return kiratypes.ProposalTypeBlacklistRolePermission
   340  }
   341  
   342  func (c ApplyBlacklistRolePermissionProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
   343  	p := proposal.(*types.BlacklistRolePermissionProposal)
   344  
   345  	roleId, err := c.keeper.GetRoleIdFromIdentifierString(ctx, p.RoleIdentifier)
   346  	if err != nil {
   347  		return err
   348  	}
   349  
   350  	return c.keeper.BlacklistRolePermission(ctx, roleId, p.Permission)
   351  }
   352  
   353  type ApplyRemoveWhitelistedRolePermissionProposalHandler struct {
   354  	keeper keeper.Keeper
   355  }
   356  
   357  func NewApplyRemoveWhitelistedRolePermissionProposalHandler(keeper keeper.Keeper) *ApplyRemoveWhitelistedRolePermissionProposalHandler {
   358  	return &ApplyRemoveWhitelistedRolePermissionProposalHandler{keeper: keeper}
   359  }
   360  
   361  func (c ApplyRemoveWhitelistedRolePermissionProposalHandler) ProposalType() string {
   362  	return kiratypes.ProposalTypeRemoveWhitelistedRolePermission
   363  }
   364  
   365  func (c ApplyRemoveWhitelistedRolePermissionProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
   366  	p := proposal.(*types.RemoveWhitelistedRolePermissionProposal)
   367  
   368  	roleId, err := c.keeper.GetRoleIdFromIdentifierString(ctx, p.RoleSid)
   369  	if err != nil {
   370  		return err
   371  	}
   372  
   373  	return c.keeper.RemoveWhitelistRolePermission(ctx, roleId, p.Permission)
   374  }
   375  
   376  type ApplyRemoveBlacklistedRolePermissionProposalHandler struct {
   377  	keeper keeper.Keeper
   378  }
   379  
   380  func NewApplyRemoveBlacklistedRolePermissionProposalHandler(keeper keeper.Keeper) *ApplyRemoveBlacklistedRolePermissionProposalHandler {
   381  	return &ApplyRemoveBlacklistedRolePermissionProposalHandler{keeper: keeper}
   382  }
   383  
   384  func (c ApplyRemoveBlacklistedRolePermissionProposalHandler) ProposalType() string {
   385  	return kiratypes.ProposalTypeRemoveBlacklistedRolePermission
   386  }
   387  
   388  func (c ApplyRemoveBlacklistedRolePermissionProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
   389  	p := proposal.(*types.RemoveBlacklistedRolePermissionProposal)
   390  
   391  	roleId, err := c.keeper.GetRoleIdFromIdentifierString(ctx, p.RoleSid)
   392  	if err != nil {
   393  		return err
   394  	}
   395  
   396  	return c.keeper.RemoveBlacklistRolePermission(ctx, roleId, p.Permission)
   397  }
   398  
   399  type SetProposalDurationsProposalHandler struct {
   400  	keeper keeper.Keeper
   401  }
   402  
   403  func NewApplySetProposalDurationsProposalHandler(keeper keeper.Keeper) *SetProposalDurationsProposalHandler {
   404  	return &SetProposalDurationsProposalHandler{keeper: keeper}
   405  }
   406  
   407  func (c SetProposalDurationsProposalHandler) ProposalType() string {
   408  	return kiratypes.ProposalTypeSetProposalDurations
   409  }
   410  
   411  func (c SetProposalDurationsProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
   412  	p := proposal.(*types.SetProposalDurationsProposal)
   413  	for i, pt := range p.TypeofProposals {
   414  		err := c.keeper.SetProposalDuration(ctx, pt, p.ProposalDurations[i])
   415  		if err != nil {
   416  			return nil
   417  		}
   418  	}
   419  	return nil
   420  }
   421  
   422  type ApplyResetWholeCouncilorRankProposalHandler struct {
   423  	keeper keeper.Keeper
   424  }
   425  
   426  func NewApplyResetWholeCouncilorRankProposalHandler(keeper keeper.Keeper) *ApplyResetWholeCouncilorRankProposalHandler {
   427  	return &ApplyResetWholeCouncilorRankProposalHandler{
   428  		keeper: keeper,
   429  	}
   430  }
   431  
   432  func (a ApplyResetWholeCouncilorRankProposalHandler) ProposalType() string {
   433  	return kiratypes.ProposalTypeResetWholeCouncilorRank
   434  }
   435  
   436  func (a ApplyResetWholeCouncilorRankProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
   437  	_ = proposal.(*types.ProposalResetWholeCouncilorRank)
   438  	a.keeper.ResetWholeCouncilorRank(ctx)
   439  	return nil
   440  }
   441  
   442  type ApplyJailCouncilorProposalHandler struct {
   443  	keeper keeper.Keeper
   444  }
   445  
   446  func NewApplyJailCouncilorProposalHandler(keeper keeper.Keeper) *ApplyJailCouncilorProposalHandler {
   447  	return &ApplyJailCouncilorProposalHandler{
   448  		keeper: keeper,
   449  	}
   450  }
   451  
   452  func (a ApplyJailCouncilorProposalHandler) ProposalType() string {
   453  	return kiratypes.ProposalTypeJailCouncilor
   454  }
   455  
   456  func (a ApplyJailCouncilorProposalHandler) Apply(ctx sdk.Context, proposalID uint64, proposal types.Content, slash sdk.Dec) error {
   457  	p := proposal.(*types.ProposalJailCouncilor)
   458  	for _, councilor := range p.Councilors {
   459  		addr, err := sdk.AccAddressFromBech32(councilor)
   460  		if err != nil {
   461  			return err
   462  		}
   463  		a.keeper.OnCouncilorJail(ctx, addr)
   464  	}
   465  	return nil
   466  }