-
Notifications
You must be signed in to change notification settings - Fork 109
/
genesis.go
128 lines (110 loc) · 3.11 KB
/
genesis.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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package types
import (
"encoding/json"
"github.com/cosmos/cosmos-sdk/codec"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
axelarnet "github.com/axelarnetwork/axelar-core/x/axelarnet/exported"
evm "github.com/axelarnetwork/axelar-core/x/evm/exported"
"github.com/axelarnetwork/axelar-core/x/nexus/exported"
)
// NewGenesisState is the constructor of GenesisState
func NewGenesisState(
params Params,
nonce uint64,
chains []exported.Chain,
chainStates []ChainState,
linkedAddresses []LinkedAddresses,
transfers []exported.CrossChainTransfer,
fee exported.TransferFee,
feeInfos []exported.FeeInfo,
rateLimits []RateLimit,
transferEpochs []TransferEpoch,
) *GenesisState {
return &GenesisState{
Params: params,
Nonce: nonce,
Chains: chains,
ChainStates: chainStates,
LinkedAddresses: linkedAddresses,
Transfers: transfers,
Fee: fee,
FeeInfos: feeInfos,
RateLimits: rateLimits,
TransferEpochs: transferEpochs,
}
}
// DefaultGenesisState creates the default genesis state
func DefaultGenesisState() *GenesisState {
return NewGenesisState(
DefaultParams(),
0,
[]exported.Chain{evm.Ethereum, axelarnet.Axelarnet},
[]ChainState{{
Chain: axelarnet.Axelarnet,
Assets: []exported.Asset{exported.NewAsset(axelarnet.NativeAsset, true)},
}},
[]LinkedAddresses{},
[]exported.CrossChainTransfer{},
exported.TransferFee{},
[]exported.FeeInfo{},
[]RateLimit{},
[]TransferEpoch{},
)
}
// Validate checks if the genesis state is valid
func (m GenesisState) Validate() error {
if err := m.Params.Validate(); err != nil {
return getValidateError(err)
}
for _, chain := range m.Chains {
if err := chain.Validate(); err != nil {
return getValidateError(err)
}
}
for _, chainState := range m.ChainStates {
if err := chainState.Validate(); err != nil {
return getValidateError(err)
}
}
for _, linkedAddresses := range m.LinkedAddresses {
if err := linkedAddresses.Validate(); err != nil {
return getValidateError(err)
}
}
for _, transfer := range m.Transfers {
if err := transfer.Validate(); err != nil {
return getValidateError(err)
}
}
if err := m.Fee.Coins.Validate(); err != nil {
return getValidateError(err)
}
for _, feeInfo := range m.FeeInfos {
if err := feeInfo.Validate(); err != nil {
return getValidateError(err)
}
}
for _, rateLimit := range m.RateLimits {
if err := rateLimit.ValidateBasic(); err != nil {
return getValidateError(err)
}
}
for _, transferEpoch := range m.TransferEpochs {
if err := transferEpoch.ValidateBasic(); err != nil {
return getValidateError(err)
}
}
return nil
}
// GetGenesisStateFromAppState returns x/nexus GenesisState given raw application
// genesis state.
func GetGenesisStateFromAppState(cdc codec.JSONCodec, appState map[string]json.RawMessage) GenesisState {
var genesisState GenesisState
if appState[ModuleName] != nil {
cdc.MustUnmarshalJSON(appState[ModuleName], &genesisState)
}
return genesisState
}
func getValidateError(err error) error {
return sdkerrors.Wrapf(err, "genesis state for module %s is invalid", ModuleName)
}