Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}