Search Apps Documentation Source Content File Folder Download Copy Actions Download

store.gno

9.28 Kb ยท 355 lines
  1package staker
  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
 11// Storage key constants
 12const (
 13	// Basic configuration
 14	StoreKeyUnDelegationLockupPeriod = "unDelegationLockupPeriod"
 15	StoreKeyEmissionRewardBalance    = "emissionRewardBalance"
 16	StoreKeyTotalDelegatedAmount     = "totalDelegatedAmount"
 17	StoreKeyTotalLockedAmount        = "totalLockedAmount"
 18
 19	// Counters
 20	StoreKeyDelegationNextID = "delegationNextID"
 21
 22	// Complex data structures
 23	StoreKeyDelegations            = "delegations"            // AVL tree of delegations
 24	StoreKeyTotalDelegationHistory = "totalDelegationHistory" // UintTree: timestamp -> int64 (cumulative total)
 25	StoreKeyUserDelegationHistory  = "userDelegationHistory"  // avl.Tree: address -> *UintTree[timestamp -> int64]
 26
 27	// Manager states
 28	StoreKeyEmissionRewardManager    = "emissionRewardManager"
 29	StoreKeyProtocolFeeRewardManager = "protocolFeeRewardManager"
 30	StoreKeyDelegationManager        = "delegationManager"
 31	StoreKeyLaunchpadProjectDeposits = "launchpadProjectDeposits"
 32)
 33
 34// govStakerStore is the concrete implementation of IGovStakerStore
 35type govStakerStore struct {
 36	kvStore store.KVStore
 37}
 38
 39var _ IGovStakerStore = (*govStakerStore)(nil)
 40
 41// NewGovStakerStore creates a new governance staker store instance
 42func NewGovStakerStore(kvStore store.KVStore) IGovStakerStore {
 43	return &govStakerStore{
 44		kvStore: kvStore,
 45	}
 46}
 47
 48// Basic configuration methods
 49func (s *govStakerStore) HasUnDelegationLockupPeriodStoreKey() bool {
 50	return s.kvStore.Has(StoreKeyUnDelegationLockupPeriod)
 51}
 52
 53func (s *govStakerStore) GetUnDelegationLockupPeriod() int64 {
 54	result, err := s.kvStore.Get(StoreKeyUnDelegationLockupPeriod)
 55	if err != nil {
 56		panic(err)
 57	}
 58
 59	period, ok := result.(int64)
 60	if !ok {
 61		panic(ufmt.Sprintf("failed to cast result to int64: %T", result))
 62	}
 63
 64	return period
 65}
 66
 67func (s *govStakerStore) SetUnDelegationLockupPeriod(period int64) error {
 68	return s.kvStore.Set(StoreKeyUnDelegationLockupPeriod, period)
 69}
 70
 71func (s *govStakerStore) HasEmissionRewardBalanceStoreKey() bool {
 72	return s.kvStore.Has(StoreKeyEmissionRewardBalance)
 73}
 74
 75func (s *govStakerStore) GetEmissionRewardBalance() int64 {
 76	result, err := s.kvStore.Get(StoreKeyEmissionRewardBalance)
 77	if err != nil {
 78		panic(err)
 79	}
 80
 81	balance, ok := result.(int64)
 82	if !ok {
 83		panic(ufmt.Sprintf("failed to cast result to int64: %T", result))
 84	}
 85
 86	return balance
 87}
 88
 89func (s *govStakerStore) SetEmissionRewardBalance(balance int64) error {
 90	return s.kvStore.Set(StoreKeyEmissionRewardBalance, balance)
 91}
 92
 93func (s *govStakerStore) HasTotalDelegatedAmountStoreKey() bool {
 94	return s.kvStore.Has(StoreKeyTotalDelegatedAmount)
 95}
 96
 97func (s *govStakerStore) GetTotalDelegatedAmount() int64 {
 98	result, err := s.kvStore.Get(StoreKeyTotalDelegatedAmount)
 99	if err != nil {
100		panic(err)
101	}
102
103	amount, ok := result.(int64)
104	if !ok {
105		panic(ufmt.Sprintf("failed to cast result to int64: %T", result))
106	}
107
108	return amount
109}
110
111func (s *govStakerStore) SetTotalDelegatedAmount(amount int64) error {
112	return s.kvStore.Set(StoreKeyTotalDelegatedAmount, amount)
113}
114
115func (s *govStakerStore) HasTotalLockedAmountStoreKey() bool {
116	return s.kvStore.Has(StoreKeyTotalLockedAmount)
117}
118
119func (s *govStakerStore) GetTotalLockedAmount() int64 {
120	result, err := s.kvStore.Get(StoreKeyTotalLockedAmount)
121	if err != nil {
122		panic(err)
123	}
124
125	amount, ok := result.(int64)
126	if !ok {
127		panic(ufmt.Sprintf("failed to cast result to int64: %T", result))
128	}
129
130	return amount
131}
132
133func (s *govStakerStore) SetTotalLockedAmount(amount int64) error {
134	return s.kvStore.Set(StoreKeyTotalLockedAmount, amount)
135}
136
137// Delegation management methods
138func (s *govStakerStore) HasDelegationsStoreKey() bool {
139	return s.kvStore.Has(StoreKeyDelegations)
140}
141
142func (s *govStakerStore) SetDelegations(delegations *avl.Tree) error {
143	return s.kvStore.Set(StoreKeyDelegations, delegations)
144}
145
146func (s *govStakerStore) HasDelegation(id int64) bool {
147	delegations := s.GetAllDelegations()
148	_, exists := delegations.Get(int64ToString(id))
149	return exists
150}
151
152func (s *govStakerStore) GetDelegation(id int64) (*Delegation, bool) {
153	delegations := s.GetAllDelegations()
154
155	result, exists := delegations.Get(int64ToString(id))
156	if !exists {
157		return nil, false
158	}
159
160	delegation, ok := result.(*Delegation)
161	if !ok {
162		panic(ufmt.Sprintf("failed to cast result to *Delegation: %T", result))
163	}
164
165	return delegation, true
166}
167
168func (s *govStakerStore) SetDelegation(id int64, delegation *Delegation) error {
169	delegations := s.GetAllDelegations()
170
171	delegations.Set(int64ToString(id), delegation)
172	return s.kvStore.Set(StoreKeyDelegations, delegations)
173}
174
175func (s *govStakerStore) RemoveDelegation(id int64) error {
176	delegations := s.GetAllDelegations()
177
178	delegations.Remove(int64ToString(id))
179	return s.kvStore.Set(StoreKeyDelegations, delegations)
180}
181
182func (s *govStakerStore) GetAllDelegations() *avl.Tree {
183	result, err := s.kvStore.Get(StoreKeyDelegations)
184	if err != nil {
185		panic(err)
186	}
187
188	delegations, ok := result.(*avl.Tree)
189	if !ok {
190		panic(ufmt.Sprintf("failed to cast result to *avl.Tree: %T", result))
191	}
192
193	return delegations
194}
195
196func (s *govStakerStore) HasDelegationCounterStoreKey() bool {
197	return s.kvStore.Has(StoreKeyDelegationNextID)
198}
199
200func (s *govStakerStore) GetDelegationCounter() *Counter {
201	result, err := s.kvStore.Get(StoreKeyDelegationNextID)
202	if err != nil {
203		panic(err)
204	}
205
206	counter, ok := result.(*Counter)
207	if !ok {
208		panic(ufmt.Sprintf("failed to cast result to Counter: %T", result))
209	}
210
211	return counter
212}
213
214func (s *govStakerStore) SetDelegationCounter(counter *Counter) error {
215	return s.kvStore.Set(StoreKeyDelegationNextID, counter)
216}
217
218// Total delegation history methods (timestamp -> int64)
219func (s *govStakerStore) HasTotalDelegationHistoryStoreKey() bool {
220	return s.kvStore.Has(StoreKeyTotalDelegationHistory)
221}
222
223func (s *govStakerStore) GetTotalDelegationHistory() *UintTree {
224	result, err := s.kvStore.Get(StoreKeyTotalDelegationHistory)
225	if err != nil {
226		panic(err)
227	}
228
229	history, ok := result.(*UintTree)
230	if !ok {
231		panic(ufmt.Sprintf("failed to cast result to *UintTree: %T", result))
232	}
233
234	return history
235}
236
237func (s *govStakerStore) SetTotalDelegationHistory(history *UintTree) error {
238	return s.kvStore.Set(StoreKeyTotalDelegationHistory, history)
239}
240
241// User delegation history methods (address -> *UintTree[timestamp -> int64])
242func (s *govStakerStore) HasUserDelegationHistoryStoreKey() bool {
243	return s.kvStore.Has(StoreKeyUserDelegationHistory)
244}
245
246func (s *govStakerStore) GetUserDelegationHistory() *avl.Tree {
247	result, err := s.kvStore.Get(StoreKeyUserDelegationHistory)
248	if err != nil {
249		panic(err)
250	}
251
252	history, ok := result.(*avl.Tree)
253	if !ok {
254		panic(ufmt.Sprintf("failed to cast result to *avl.Tree: %T", result))
255	}
256
257	return history
258}
259
260func (s *govStakerStore) SetUserDelegationHistory(history *avl.Tree) error {
261	return s.kvStore.Set(StoreKeyUserDelegationHistory, history)
262}
263
264func (s *govStakerStore) HasEmissionRewardManagerStoreKey() bool {
265	return s.kvStore.Has(StoreKeyEmissionRewardManager)
266}
267
268func (s *govStakerStore) GetEmissionRewardManager() *EmissionRewardManager {
269	result, err := s.kvStore.Get(StoreKeyEmissionRewardManager)
270	if err != nil {
271		panic(err)
272	}
273
274	manager, ok := result.(*EmissionRewardManager)
275	if !ok {
276		panic(ufmt.Sprintf("failed to cast result to *EmissionRewardManager: %T", result))
277	}
278
279	return manager
280}
281
282func (s *govStakerStore) SetEmissionRewardManager(manager *EmissionRewardManager) error {
283	return s.kvStore.Set(StoreKeyEmissionRewardManager, manager)
284}
285
286func (s *govStakerStore) HasProtocolFeeRewardManagerStoreKey() bool {
287	return s.kvStore.Has(StoreKeyProtocolFeeRewardManager)
288}
289
290func (s *govStakerStore) GetProtocolFeeRewardManager() *ProtocolFeeRewardManager {
291	result, err := s.kvStore.Get(StoreKeyProtocolFeeRewardManager)
292	if err != nil {
293		panic(err)
294	}
295
296	manager, ok := result.(*ProtocolFeeRewardManager)
297	if !ok {
298		panic(ufmt.Sprintf("failed to cast result to *ProtocolFeeRewardManager: %T", result))
299	}
300
301	return manager
302}
303
304func (s *govStakerStore) SetProtocolFeeRewardManager(manager *ProtocolFeeRewardManager) error {
305	return s.kvStore.Set(StoreKeyProtocolFeeRewardManager, manager)
306}
307
308func (s *govStakerStore) HasDelegationManagerStoreKey() bool {
309	return s.kvStore.Has(StoreKeyDelegationManager)
310}
311
312func (s *govStakerStore) GetDelegationManager() *DelegationManager {
313	result, err := s.kvStore.Get(StoreKeyDelegationManager)
314	if err != nil {
315		panic(err)
316	}
317
318	manager, ok := result.(*DelegationManager)
319	if !ok {
320		panic(ufmt.Sprintf("failed to cast result to *DelegationManager: %T", result))
321	}
322
323	return manager
324}
325
326func (s *govStakerStore) SetDelegationManager(manager *DelegationManager) error {
327	return s.kvStore.Set(StoreKeyDelegationManager, manager)
328}
329
330func (s *govStakerStore) HasLaunchpadProjectDepositsStoreKey() bool {
331	return s.kvStore.Has(StoreKeyLaunchpadProjectDeposits)
332}
333
334func (s *govStakerStore) GetLaunchpadProjectDeposits() *LaunchpadProjectDeposits {
335	result, err := s.kvStore.Get(StoreKeyLaunchpadProjectDeposits)
336	if err != nil {
337		panic(err)
338	}
339
340	deposits, ok := result.(*LaunchpadProjectDeposits)
341	if !ok {
342		panic(ufmt.Sprintf("failed to cast result to *LaunchpadProjectDeposits: %T", result))
343	}
344
345	return deposits
346}
347
348func (s *govStakerStore) SetLaunchpadProjectDeposits(deposits *LaunchpadProjectDeposits) error {
349	return s.kvStore.Set(StoreKeyLaunchpadProjectDeposits, deposits)
350}
351
352// Helper functions
353func int64ToString(n int64) string {
354	return strconv.FormatInt(n, 10)
355}