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 }