store.gno
3.92 Kb ยท 140 lines
1package launchpad
2
3import (
4 "strconv"
5
6 "gno.land/p/gnoswap/store"
7 "gno.land/p/nt/avl"
8 "gno.land/p/nt/ufmt"
9)
10
11type StoreKey string
12
13func (s StoreKey) String() string {
14 return string(s)
15}
16
17const (
18 StoreKeyProjects StoreKey = "projects" // Projects tree
19 StoreKeyProjectTierRewardManagers StoreKey = "projectTierRewardManagers" // Project tier reward managers tree
20 StoreKeyDepositCounter StoreKey = "depositCounter" // Deposit counter
21 StoreKeyDeposits StoreKey = "deposits" // Deposits tree
22)
23
24type launchpadStore struct {
25 kvStore store.KVStore
26}
27
28// HasProjectsKey checks if the projects key exists in the store.
29func (s *launchpadStore) HasProjectsKey() bool {
30 return s.kvStore.Has(StoreKeyProjects.String())
31}
32
33// GetProjects retrieves the projects tree.
34func (s *launchpadStore) GetProjects() *avl.Tree {
35 result, err := s.kvStore.Get(StoreKeyProjects.String())
36 if err != nil {
37 panic(err)
38 }
39
40 projects, ok := result.(*avl.Tree)
41 if !ok {
42 panic(ufmt.Sprintf("failed to cast result to *avl.Tree: %T", result))
43 }
44
45 return projects
46}
47
48// SetProjects stores the projects tree.
49func (s *launchpadStore) SetProjects(projects *avl.Tree) error {
50 return s.kvStore.Set(StoreKeyProjects.String(), projects)
51}
52
53// HasProjectTierRewardManagersKey checks if the project tier reward managers key exists in the store.
54func (s *launchpadStore) HasProjectTierRewardManagersKey() bool {
55 return s.kvStore.Has(StoreKeyProjectTierRewardManagers.String())
56}
57
58// GetProjectTierRewardManagers retrieves the project tier reward managers tree.
59func (s *launchpadStore) GetProjectTierRewardManagers() *avl.Tree {
60 result, err := s.kvStore.Get(StoreKeyProjectTierRewardManagers.String())
61 if err != nil {
62 panic(err)
63 }
64
65 managers, ok := result.(*avl.Tree)
66 if !ok {
67 panic(ufmt.Sprintf("failed to cast result to *avl.Tree: %T", result))
68 }
69
70 return managers
71}
72
73// SetProjectTierRewardManagers stores the project tier reward managers tree.
74func (s *launchpadStore) SetProjectTierRewardManagers(managers *avl.Tree) error {
75 return s.kvStore.Set(StoreKeyProjectTierRewardManagers.String(), managers)
76}
77
78// HasDepositCounterStoreKey checks if the deposit counter key exists in the store.
79func (s *launchpadStore) HasDepositCounterStoreKey() bool {
80 return s.kvStore.Has(StoreKeyDepositCounter.String())
81}
82
83// GetDepositCounter retrieves the deposit counter.
84func (s *launchpadStore) GetDepositCounter() *Counter {
85 result, err := s.kvStore.Get(StoreKeyDepositCounter.String())
86 if err != nil {
87 panic(err)
88 }
89
90 counter, ok := result.(*Counter)
91 if !ok {
92 panic(ufmt.Sprintf("failed to cast result to Counter: %T", result))
93 }
94
95 return counter
96}
97
98func (s *launchpadStore) SetDepositCounter(counter *Counter) error {
99 return s.kvStore.Set(StoreKeyDepositCounter.String(), counter)
100}
101
102func (s *launchpadStore) NextDepositID() string {
103 counter := s.GetDepositCounter()
104
105 return strconv.FormatInt(counter.Next(), 10)
106}
107
108// SetDepositCounter stores the deposit counter.
109// HasDepositsKey checks if the deposits key exists in the store.
110func (s *launchpadStore) HasDepositsKey() bool {
111 return s.kvStore.Has(StoreKeyDeposits.String())
112}
113
114// GetDeposits retrieves the deposits tree.
115func (s *launchpadStore) GetDeposits() *avl.Tree {
116 result, err := s.kvStore.Get(StoreKeyDeposits.String())
117 if err != nil {
118 panic(err)
119 }
120
121 deposits, ok := result.(*avl.Tree)
122 if !ok {
123 panic(ufmt.Sprintf("failed to cast result to *avl.Tree: %T", result))
124 }
125
126 return deposits
127}
128
129// SetDeposits stores the deposits tree.
130func (s *launchpadStore) SetDeposits(deposits *avl.Tree) error {
131 return s.kvStore.Set(StoreKeyDeposits.String(), deposits)
132}
133
134// NewLaunchpadStore creates a new launchpad store instance with the provided KV store.
135// This function is used by the upgrade system to create storage instances for each implementation.
136func NewLaunchpadStore(kvStore store.KVStore) ILaunchpadStore {
137 return &launchpadStore{
138 kvStore: kvStore,
139 }
140}