/
admin.go
39 lines (35 loc) · 1023 Bytes
/
admin.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
package enterprise
import (
"bytes"
"github.com/aergoio/aergo/v2/state/statedb"
"github.com/aergoio/aergo/v2/types"
"github.com/aergoio/aergo/v2/types/dbkey"
)
func GetAdmin(ecs *statedb.ContractState) (*types.EnterpriseConfig, error) {
admins, err := getAdmins(ecs)
if err != nil {
return nil, err
}
ret := &types.EnterpriseConfig{Key: string(dbkey.EnterpriseAdmins()), On: false}
if admins != nil {
ret.On = true
for _, admin := range admins {
ret.Values = append(ret.Values, types.EncodeAddress(admin))
}
}
return ret, nil
}
func setAdmins(scs *statedb.ContractState, addresses [][]byte) error {
return scs.SetData(dbkey.EnterpriseAdmins(), bytes.Join(addresses, []byte("")))
}
func getAdmins(scs *statedb.ContractState) ([][]byte, error) {
data, err := scs.GetData(dbkey.EnterpriseAdmins())
if err != nil {
return nil, err
}
var results [][]byte
for i := 0; i < len(data); i += types.AddressLength {
results = append(results, data[i:i+types.AddressLength])
}
return results, nil
}