state.gno
2.72 Kb · 97 lines
1package launchpad
2
3import (
4 "errors"
5
6 ufmt "gno.land/p/nt/ufmt/v0"
7 "gno.land/r/gnoswap/launchpad"
8)
9
10// Helper functions that access state through launchpadState
11
12func (lp *launchpadV1) getProject(projectID string) (*launchpad.Project, error) {
13 projects := lp.store.GetProjects()
14 project := projects.Get(projectID)
15 if project == nil {
16 return nil, makeErrorWithDetails(errDataNotFound, ufmt.Sprintf("project(%s) not found", projectID))
17 }
18
19 p, ok := project.(*launchpad.Project)
20 if !ok {
21 return nil, makeErrorWithDetails(errDataNotFound, ufmt.Sprintf("project(%s) not found", projectID))
22 }
23
24 return p, nil
25}
26
27func (lp *launchpadV1) getProjectTier(projectID string, tierDuration int64) (*launchpad.ProjectTier, error) {
28 project, err := lp.getProject(projectID)
29 if err != nil {
30 return nil, err
31 }
32
33 tier, err := project.GetTier(tierDuration)
34 if err != nil {
35 return nil, makeErrorWithDetails(errDataNotFound, err.Error())
36 }
37
38 return tier, nil
39}
40
41func (lp *launchpadV1) getProjectTierRewardManager(projectTierID string) (*launchpad.RewardManager, error) {
42 managers := lp.store.GetProjectTierRewardManagers()
43 rewardManager := managers.Get(projectTierID)
44 if rewardManager == nil {
45 return nil, makeErrorWithDetails(errDataNotFound, ufmt.Sprintf("reward manager(%s) not found", projectTierID))
46 }
47
48 manager, ok := rewardManager.(*launchpad.RewardManager)
49 if !ok {
50 return nil, makeErrorWithDetails(errDataNotFound, ufmt.Sprintf("reward manager(%s) not found", projectTierID))
51 }
52
53 return manager, nil
54}
55
56func (lp *launchpadV1) getDepositValue(depositId string) (launchpad.Deposit, error) {
57 deposits := lp.store.GetDeposits()
58 value := deposits.Get(depositId)
59 if value == nil {
60 return launchpad.DefaultDeposit(), errors.New("deposit not found")
61 }
62
63 deposit, ok := value.(launchpad.Deposit)
64 if !ok {
65 return launchpad.DefaultDeposit(), errors.New("invalid deposit type")
66 }
67 return deposit, nil
68}
69
70func (lp *launchpadV1) getDeposit(depositID string) (launchpad.Deposit, error) {
71 deposits := lp.store.GetDeposits()
72 depositI := deposits.Get(depositID)
73 if depositI == nil {
74 return launchpad.DefaultDeposit(), makeErrorWithDetails(errNotExistDeposit, ufmt.Sprintf("(%s)", depositID))
75 }
76
77 deposit, ok := depositI.(launchpad.Deposit)
78 if !ok {
79 return launchpad.DefaultDeposit(), makeErrorWithDetails(errDataNotFound, ufmt.Sprintf("deposit(%s) not found", depositID))
80 }
81 return deposit, nil
82}
83
84func (lp *launchpadV1) mustGetDeposit(depositID string) launchpad.Deposit {
85 deposit, err := lp.getDeposit(depositID)
86 if err != nil {
87 panic(err)
88 }
89
90 return deposit
91}
92
93// nextDepositID increments and returns the next unique deposit ID.
94// This is used when creating new deposits.
95func (lp *launchpadV1) nextDepositID() string {
96 return lp.store.NextDepositID()
97}