-
Notifications
You must be signed in to change notification settings - Fork 51
/
certifier.go
99 lines (85 loc) · 3.27 KB
/
certifier.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package keeper
import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/shentufoundation/shentu/v2/x/cert/types"
)
// SetCertifier sets a certifier.
func (k Keeper) SetCertifier(ctx sdk.Context, certifier types.Certifier) {
store := ctx.KVStore(k.storeKey)
certifierAddr, err := sdk.AccAddressFromBech32(certifier.Address)
if err != nil {
panic(err)
}
store.Set(types.CertifierStoreKey(certifierAddr), k.cdc.MustMarshalLengthPrefixed(&certifier))
if certifier.Alias != "" {
store.Set(types.CertifierAliasStoreKey(certifier.Alias), k.cdc.MustMarshalLengthPrefixed(&certifier))
}
}
// deleteCertifier deletes a certifier.
func (k Keeper) deleteCertifier(ctx sdk.Context, certifierAddress sdk.AccAddress) error {
store := ctx.KVStore(k.storeKey)
certifier, err := k.GetCertifier(ctx, certifierAddress)
if err != nil {
return err
}
alias := certifier.Alias
store.Delete(types.CertifierAliasStoreKey(alias))
store.Delete(types.CertifierStoreKey(certifierAddress))
return nil
}
// IsCertifier checks if an address is a certifier.
func (k Keeper) IsCertifier(ctx sdk.Context, address sdk.AccAddress) bool {
store := ctx.KVStore(k.storeKey)
return store.Has(types.CertifierStoreKey(address))
}
// HasCertifierAlias checks if the alias of a certifier exists.
func (k Keeper) HasCertifierAlias(ctx sdk.Context, alias string) bool {
if alias == "" {
return true
}
store := ctx.KVStore(k.storeKey)
return store.Has(types.CertifierAliasStoreKey(alias))
}
// GetCertifier returns the certification information for a certifier.
func (k Keeper) GetCertifier(ctx sdk.Context, certifierAddress sdk.AccAddress) (types.Certifier, error) {
if certifierData := ctx.KVStore(k.storeKey).Get(types.CertifierStoreKey(certifierAddress)); certifierData != nil {
var certifier types.Certifier
k.cdc.MustUnmarshalLengthPrefixed(certifierData, &certifier)
return certifier, nil
}
return types.Certifier{}, types.ErrCertifierNotExists
}
// GetCertifierByAlias returns the certification information for a certifier by its alias.
func (k Keeper) GetCertifierByAlias(ctx sdk.Context, alias string) (types.Certifier, error) {
if alias == "" {
return types.Certifier{}, types.ErrInvalidCertifierAlias
}
if certifierData := ctx.KVStore(k.storeKey).Get(types.CertifierAliasStoreKey(alias)); certifierData != nil {
var certifier types.Certifier
k.cdc.MustUnmarshalLengthPrefixed(certifierData, &certifier)
return certifier, nil
}
return types.Certifier{}, types.ErrCertifierNotExists
}
// IterateAllCertifiers iterates over the all the stored certifiers and performs a callback function.
func (k Keeper) IterateAllCertifiers(ctx sdk.Context, callback func(certifier types.Certifier) (stop bool)) {
store := ctx.KVStore(k.storeKey)
iterator := sdk.KVStorePrefixIterator(store, types.CertifiersStoreKey())
defer iterator.Close()
for ; iterator.Valid(); iterator.Next() {
var certifier types.Certifier
k.cdc.MustUnmarshalLengthPrefixed(iterator.Value(), &certifier)
if callback(certifier) {
break
}
}
}
// GetAllCertifiers gets all certifiers.
func (k Keeper) GetAllCertifiers(ctx sdk.Context) types.Certifiers {
certifiers := types.Certifiers{}
k.IterateAllCertifiers(ctx, func(certifier types.Certifier) bool {
certifiers = append(certifiers, certifier)
return false
})
return certifiers
}