-
Notifications
You must be signed in to change notification settings - Fork 7
/
expiry.go
64 lines (52 loc) · 1.98 KB
/
expiry.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package keeper
import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/anathatech/project-anatha/x/hra/internal/types"
"time"
)
func (k Keeper) IterateExpiredNameInfoQueue(ctx sdk.Context, endTime time.Time, cb func(name string) (stop bool)) {
iterator := k.ExpiredNameInfoQueueIterator(ctx, endTime)
defer iterator.Close()
for ; iterator.Valid(); iterator.Next() {
name, _ := types.SplitExpiredNameInfoQueueKey(iterator.Key())
if cb(name) {
break
}
}
}
func (keeper Keeper) InsertExpiredNameInfoQueue(ctx sdk.Context, name string, endTime time.Time) {
store := ctx.KVStore(keeper.storeKey)
bz := []byte(name)
store.Set(types.ExpiredNameInfoQueueKey(name, endTime), bz)
}
func (keeper Keeper) RemoveFromExpiredNameInfoQueue(ctx sdk.Context, name string, endTime time.Time) {
store := ctx.KVStore(keeper.storeKey)
store.Delete(types.ExpiredNameInfoQueueKey(name, endTime))
}
func (k Keeper) DeleteExpiredNameInfo(ctx sdk.Context, nameInfo types.NameInfo) error {
k.DeleteNameInfo(ctx, nameInfo.Name)
k.DeleteNameInfoStatusMap(ctx, nameInfo.Owner, nameInfo.Name)
// if last HRA remove all associated addresses
if ! k.OwnsAnyName(ctx, nameInfo.Owner) {
k.RemoveAllAddresses(ctx, nameInfo.Owner)
k.SetCredits(ctx, nameInfo.Owner, sdk.ZeroInt())
err := k.AfterLastNameRemoved(ctx, nameInfo.Owner)
if err != nil {
return err
}
}
k.RemoveFromExpiredNameInfoQueue(ctx, nameInfo.Name, nameInfo.ExpiryTime)
ctx.EventManager().EmitEvent(
sdk.NewEvent(
types.EventTypeExpiredName,
sdk.NewAttribute(types.AttributeKeyName, nameInfo.Name),
sdk.NewAttribute(types.AttributeKeySender, nameInfo.Owner.String()),
sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueModule),
),
)
return nil
}
func (keeper Keeper) ExpiredNameInfoQueueIterator(ctx sdk.Context, endTime time.Time) sdk.Iterator {
store := ctx.KVStore(keeper.storeKey)
return store.Iterator(types.ExpiredNameInfoQueueKeyPrefix, sdk.PrefixEndBytes(types.ExpiredNameInfoByTimeKey(endTime)))
}