-
Notifications
You must be signed in to change notification settings - Fork 182
/
base.go
121 lines (102 loc) · 2.61 KB
/
base.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
package base
import (
cosmost "github.com/okex/exchain/libs/cosmos-sdk/store/types"
"github.com/okex/exchain/libs/cosmos-sdk/types/module"
"github.com/okex/exchain/libs/cosmos-sdk/types/upgrade"
"github.com/okex/exchain/libs/cosmos-sdk/x/params"
"github.com/okex/exchain/libs/tendermint/types"
)
var (
_ upgrade.UpgradeModule = (*BaseIBCUpgradeModule)(nil)
ibcMap = map[string]struct{}{
"ibc": struct{}{},
"mem_capability": struct{}{},
"capability": struct{}{},
"transfer": struct{}{},
"erc20": struct{}{},
}
defaultIBCVersionFilter cosmost.VersionFilter = func(h int64) func(cb func(name string, version int64)) {
if h < 0 {
return func(cb func(name string, version int64)) {}
}
return func(cb func(name string, version int64)) {
for name, _ := range ibcMap {
hh := types.GetVenus1Height()
cb(name, hh)
}
}
}
)
type BaseIBCUpgradeModule struct {
appModule module.AppModuleBasic
Inited bool
}
func NewBaseIBCUpgradeModule(appModule module.AppModuleBasic) *BaseIBCUpgradeModule {
return &BaseIBCUpgradeModule{appModule: appModule}
}
func (b *BaseIBCUpgradeModule) ModuleName() string {
return b.appModule.Name()
}
func (b *BaseIBCUpgradeModule) RegisterTask() upgrade.HeightTask {
panic("override")
}
func (b *BaseIBCUpgradeModule) UpgradeHeight() int64 {
return types.GetVenus1Height()
}
func (b *BaseIBCUpgradeModule) CommitFilter() *cosmost.StoreFilter {
var filter cosmost.StoreFilter
filter = func(module string, h int64, s cosmost.CommitKVStore) bool {
_, exist := ibcMap[module]
if !exist {
return false
}
if b.UpgradeHeight() == 0 {
return true
}
// ==veneus1
if h == types.GetVenus1Height() {
if s != nil {
s.SetUpgradeVersion(h)
}
return false
}
// ibc modules
if types.HigherThanVenus1(h) {
return false
}
// < veneus1
return true
}
return &filter
}
func (b *BaseIBCUpgradeModule) PruneFilter() *cosmost.StoreFilter {
var filter cosmost.StoreFilter
filter = func(module string, h int64, s cosmost.CommitKVStore) bool {
_, exist := ibcMap[module]
if !exist {
return false
}
if b.UpgradeHeight() == 0 {
return true
}
// ibc modulee && >=veneus1
if types.HigherThanVenus1(h) {
return false
}
// < veneus1
return true
}
return &filter
}
func (b *BaseIBCUpgradeModule) VersionFilter() *cosmost.VersionFilter {
return &defaultIBCVersionFilter
}
func (b *BaseIBCUpgradeModule) RegisterParam() params.ParamSet {
return nil
}
func (b *BaseIBCUpgradeModule) Seal() {
b.Inited = true
}
func (b *BaseIBCUpgradeModule) Sealed() bool {
return b.Inited
}