-
Notifications
You must be signed in to change notification settings - Fork 142
/
governance.go
58 lines (48 loc) · 1.75 KB
/
governance.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
package corecontracts
import (
iotago "github.com/iotaledger/iota.go/v3"
"github.com/iotaledger/wasp/packages/chain"
"github.com/iotaledger/wasp/packages/isc"
"github.com/iotaledger/wasp/packages/kv/codec"
"github.com/iotaledger/wasp/packages/kv/collections"
"github.com/iotaledger/wasp/packages/vm/core/governance"
"github.com/iotaledger/wasp/packages/webapi/common"
)
func GetAllowedStateControllerAddresses(ch chain.Chain, blockIndexOrTrieRoot string) ([]iotago.Address, error) {
res, err := common.CallView(ch, governance.Contract.Hname(), governance.ViewGetAllowedStateControllerAddresses.Hname(), nil, blockIndexOrTrieRoot)
if err != nil {
return nil, err
}
addresses := collections.NewArrayReadOnly(res, governance.ParamAllowedStateControllerAddresses)
ret := make([]iotago.Address, addresses.Len())
for i := range ret {
ret[i], err = codec.DecodeAddress(addresses.GetAt(uint32(i)))
if err != nil {
return nil, err
}
}
return ret, nil
}
func GetChainOwner(ch chain.Chain, blockIndexOrTrieRoot string) (isc.AgentID, error) {
ret, err := common.CallView(ch, governance.Contract.Hname(), governance.ViewGetChainOwner.Hname(), nil, blockIndexOrTrieRoot)
if err != nil {
return nil, err
}
ownerBytes := ret.Get(governance.ParamChainOwner)
ownerID, err := isc.AgentIDFromBytes(ownerBytes)
if err != nil {
return nil, err
}
return ownerID, nil
}
func GetChainInfo(ch chain.Chain, blockIndexOrTrieRoot string) (*isc.ChainInfo, error) {
ret, err := common.CallView(ch, governance.Contract.Hname(), governance.ViewGetChainInfo.Hname(), nil, blockIndexOrTrieRoot)
if err != nil {
return nil, err
}
var chainInfo *isc.ChainInfo
if chainInfo, err = governance.GetChainInfo(ret, ch.ID()); err != nil {
return nil, err
}
return chainInfo, nil
}