Skip to content Search Apps Documentation Source Content File Folder Download Copy Actions State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

getter.gno

29.17 Kb · 819 lines
  1package launchpad
  2
  3import (
  4	"errors"
  5	"time"
  6
  7	rotree "gno.land/p/nt/bptree/rotree/v0"
  8	ufmt "gno.land/p/nt/ufmt/v0"
  9
 10	"gno.land/p/gnoswap/uint256/v1"
 11	"gno.land/r/gnoswap/launchpad"
 12)
 13
 14// GetProjects returns a read-only view of every project, keyed by project ID.
 15//
 16// Returns:
 17//   - projects: read-only tree keyed by project ID; project entries are cloned before being exposed.
 18func (lp *launchpadV1) GetProjects() *rotree.ReadOnlyTree {
 19	return rotree.Wrap(lp.store.GetProjects(), cloneProjectEntry)
 20}
 21
 22// GetProjectName returns the name of a project by its ID.
 23// Returns empty string and error if project not found.
 24//
 25// Parameters:
 26//   - projectId: unique launchpad project identifier to look up.
 27//
 28// Returns:
 29//   - name: configured project name; empty when the project is absent.
 30//   - err: nil when found; non-nil when projectId is not present in state.
 31func (lp *launchpadV1) GetProjectName(projectId string) (string, error) {
 32	project, err := lp.getProject(projectId)
 33	if err != nil {
 34		return "", err
 35	}
 36
 37	return project.Name(), nil
 38}
 39
 40// GetProjectTokenPath returns the token path of a project by its ID.
 41// Returns empty string and error if project not found.
 42//
 43// Parameters:
 44//   - projectId: unique launchpad project identifier to look up.
 45//
 46// Returns:
 47//   - tokenPath: reward-token contract path configured for the project; empty when absent.
 48//   - err: nil when found; non-nil when projectId is not present in state.
 49func (lp *launchpadV1) GetProjectTokenPath(projectId string) (string, error) {
 50	project, err := lp.getProject(projectId)
 51	if err != nil {
 52		return "", err
 53	}
 54
 55	return project.TokenPath(), nil
 56}
 57
 58// GetProjectDepositAmount returns the deposit amount of a project by its ID.
 59// Returns 0 and error if project not found.
 60//
 61// Parameters:
 62//   - projectId: unique launchpad project identifier to look up.
 63//
 64// Returns:
 65//   - amount: project-level token amount deposited for distribution; zero when absent.
 66//   - err: nil when found; non-nil when projectId is not present in state.
 67func (lp *launchpadV1) GetProjectDepositAmount(projectId string) (int64, error) {
 68	project, err := lp.getProject(projectId)
 69	if err != nil {
 70		return 0, err
 71	}
 72
 73	return project.DepositAmount(), nil
 74}
 75
 76// GetProjectRecipient returns the recipient address of a project by its ID.
 77// Returns empty address and error if project not found.
 78//
 79// Parameters:
 80//   - projectId: unique launchpad project identifier to look up.
 81//
 82// Returns:
 83//   - recipient: address configured to receive the project's tokens; empty address when absent.
 84//   - err: nil when found; non-nil when projectId is not present in state.
 85func (lp *launchpadV1) GetProjectRecipient(projectId string) (address, error) {
 86	project, err := lp.getProject(projectId)
 87	if err != nil {
 88		return address(""), err
 89	}
 90
 91	return project.Recipient(), nil
 92}
 93
 94// GetProjectCondition retrieves a specific condition of a project.
 95// Returns nil and error if project or condition not found.
 96//
 97// Parameters:
 98//   - projectId: unique launchpad project identifier to look up.
 99//   - tokenPath: condition-token contract path used as the project's condition key.
100//
101// Returns:
102//   - condition: matching project condition; nil when the project or condition is absent.
103//   - err: nil when found; non-nil when projectId or tokenPath is not present.
104func (lp *launchpadV1) GetProjectCondition(projectId string, tokenPath string) (*launchpad.ProjectCondition, error) {
105	project, err := lp.getProject(projectId)
106	if err != nil {
107		return nil, err
108	}
109
110	conditions := project.Conditions()
111	condition, exists := conditions[tokenPath]
112	if !exists {
113		return nil, makeErrorWithDetails(errDataNotFound, ufmt.Sprintf("condition(%s) not found", tokenPath))
114	}
115
116	return condition, nil
117}
118
119// GetProjectTiersRatios returns the tiers ratios map of a project by its ID.
120// Returns nil and error if project not found.
121//
122// Parameters:
123//   - projectId: unique launchpad project identifier to look up.
124//
125// Returns:
126//   - ratios: map from tier duration (30, 90, or 180) to its allocation percentage; nil when the project is absent.
127//   - err: nil when found; non-nil when projectId is not present in state.
128func (lp *launchpadV1) GetProjectTiersRatios(projectId string) (map[int64]int64, error) {
129	project, err := lp.getProject(projectId)
130	if err != nil {
131		return nil, err
132	}
133
134	return project.TiersRatios(), nil
135}
136
137// GetProjectCreatedHeight returns the created height of a project by its ID.
138// Returns 0 and error if project not found.
139//
140// Parameters:
141//   - projectId: unique launchpad project identifier to look up.
142//
143// Returns:
144//   - height: project creation block height; zero when the project is absent.
145//   - err: nil when found; non-nil when projectId is not present in state.
146func (lp *launchpadV1) GetProjectCreatedHeight(projectId string) (int64, error) {
147	project, err := lp.getProject(projectId)
148	if err != nil {
149		return 0, err
150	}
151
152	return project.CreatedHeight(), nil
153}
154
155// GetProjectCreatedAt returns the created time of a project by its ID.
156// Returns 0 and error if project not found.
157//
158// Parameters:
159//   - projectId: unique launchpad project identifier to look up.
160//
161// Returns:
162//   - createdAt: project creation timestamp in Unix seconds; zero when the project is absent.
163//   - err: nil when found; non-nil when projectId is not present in state.
164func (lp *launchpadV1) GetProjectCreatedAt(projectId string) (int64, error) {
165	project, err := lp.getProject(projectId)
166	if err != nil {
167		return 0, err
168	}
169
170	return project.CreatedAt(), nil
171}
172
173// GetProjectTier retrieves a specific tier of a project.
174// Returns nil and error if project or tier not found.
175//
176// Parameters:
177//   - projectId: unique launchpad project identifier to look up.
178//   - tier: tier duration in days; launchpad tiers use 30, 90, or 180.
179//
180// Returns:
181//   - projectTier: matching project tier; nil when the project or tier is absent.
182//   - err: nil when found; non-nil when projectId or tier is not present.
183func (lp *launchpadV1) GetProjectTier(projectId string, tier int64) (*launchpad.ProjectTier, error) {
184	project, err := lp.getProject(projectId)
185	if err != nil {
186		return nil, err
187	}
188
189	projectTier, err := getProjectTier(project, tier)
190	if err != nil {
191		return nil, err
192	}
193
194	return projectTier, nil
195}
196
197// GetProjectTierDistributeAmountPerSecondX128 returns the distribute amount per second (Q128) of a project tier.
198// Returns nil and error if project or tier not found.
199//
200// Parameters:
201//   - projectId: unique launchpad project identifier to look up.
202//   - tier: tier duration in days; launchpad tiers use 30, 90, or 180.
203//
204// Returns:
205//   - amountPerSecondX128: per-second distribution rate encoded as a Q128 fixed-point value; nil when lookup fails.
206//   - err: nil when found; non-nil when projectId or tier is not present.
207func (lp *launchpadV1) GetProjectTierDistributeAmountPerSecondX128(projectId string, tier int64) (*uint256.Uint, error) {
208	projectTier, err := lp.GetProjectTier(projectId, tier)
209	if err != nil {
210		return nil, err
211	}
212
213	return projectTier.DistributeAmountPerSecondX128(), nil
214}
215
216// GetProjectTierTotalDistributeAmount returns the total distribute amount of a project tier.
217// Returns 0 and error if project or tier not found.
218//
219// Parameters:
220//   - projectId: unique launchpad project identifier to look up.
221//   - tier: tier duration in days; launchpad tiers use 30, 90, or 180.
222//
223// Returns:
224//   - amount: total token amount allocated for distribution by the tier; zero when lookup fails.
225//   - err: nil when found; non-nil when projectId or tier is not present.
226func (lp *launchpadV1) GetProjectTierTotalDistributeAmount(projectId string, tier int64) (int64, error) {
227	projectTier, err := lp.GetProjectTier(projectId, tier)
228	if err != nil {
229		return 0, err
230	}
231
232	return projectTier.TotalDistributeAmount(), nil
233}
234
235// GetProjectTierTotalDepositAmount returns the total deposit amount of a project tier.
236// Returns 0 and error if project or tier not found.
237//
238// Parameters:
239//   - projectId: unique launchpad project identifier to look up.
240//   - tier: tier duration in days; launchpad tiers use 30, 90, or 180.
241//
242// Returns:
243//   - amount: aggregate token amount deposited into the tier; zero when lookup fails.
244//   - err: nil when found; non-nil when projectId or tier is not present.
245func (lp *launchpadV1) GetProjectTierTotalDepositAmount(projectId string, tier int64) (int64, error) {
246	projectTier, err := lp.GetProjectTier(projectId, tier)
247	if err != nil {
248		return 0, err
249	}
250
251	return projectTier.TotalDepositAmount(), nil
252}
253
254// GetProjectTierTotalWithdrawAmount returns the total withdraw amount of a project tier.
255// Returns 0 and error if project or tier not found.
256//
257// Parameters:
258//   - projectId: unique launchpad project identifier to look up.
259//   - tier: tier duration in days; launchpad tiers use 30, 90, or 180.
260//
261// Returns:
262//   - amount: aggregate token amount withdrawn from the tier; zero when lookup fails.
263//   - err: nil when found; non-nil when projectId or tier is not present.
264func (lp *launchpadV1) GetProjectTierTotalWithdrawAmount(projectId string, tier int64) (int64, error) {
265	projectTier, err := lp.GetProjectTier(projectId, tier)
266	if err != nil {
267		return 0, err
268	}
269
270	return projectTier.TotalWithdrawAmount(), nil
271}
272
273// GetProjectTierTotalDepositCount returns the total deposit count of a project tier.
274// Returns 0 and error if project or tier not found.
275//
276// Parameters:
277//   - projectId: unique launchpad project identifier to look up.
278//   - tier: tier duration in days; launchpad tiers use 30, 90, or 180.
279//
280// Returns:
281//   - count: number of deposits recorded for the tier; zero when lookup fails.
282//   - err: nil when found; non-nil when projectId or tier is not present.
283func (lp *launchpadV1) GetProjectTierTotalDepositCount(projectId string, tier int64) (int64, error) {
284	projectTier, err := lp.GetProjectTier(projectId, tier)
285	if err != nil {
286		return 0, err
287	}
288
289	return projectTier.TotalDepositCount(), nil
290}
291
292// GetProjectTierTotalWithdrawCount returns the total withdraw count of a project tier.
293// Returns 0 and error if project or tier not found.
294//
295// Parameters:
296//   - projectId: unique launchpad project identifier to look up.
297//   - tier: tier duration in days; launchpad tiers use 30, 90, or 180.
298//
299// Returns:
300//   - count: number of withdrawals recorded for the tier; zero when lookup fails.
301//   - err: nil when found; non-nil when projectId or tier is not present.
302func (lp *launchpadV1) GetProjectTierTotalWithdrawCount(projectId string, tier int64) (int64, error) {
303	projectTier, err := lp.GetProjectTier(projectId, tier)
304	if err != nil {
305		return 0, err
306	}
307
308	return projectTier.TotalWithdrawCount(), nil
309}
310
311// GetProjectTierTotalCollectedAmount returns the total collected amount of a project tier.
312// Returns 0 and error if project or tier not found.
313//
314// Parameters:
315//   - projectId: unique launchpad project identifier to look up.
316//   - tier: tier duration in days; launchpad tiers use 30, 90, or 180.
317//
318// Returns:
319//   - amount: aggregate reward amount collected from the tier; zero when lookup fails.
320//   - err: nil when found; non-nil when projectId or tier is not present.
321func (lp *launchpadV1) GetProjectTierTotalCollectedAmount(projectId string, tier int64) (int64, error) {
322	projectTier, err := lp.GetProjectTier(projectId, tier)
323	if err != nil {
324		return 0, err
325	}
326
327	return projectTier.TotalCollectedAmount(), nil
328}
329
330// GetProjectTierStartTime returns the start time of a project tier.
331// Returns 0 and error if project or tier not found.
332//
333// Parameters:
334//   - projectId: unique launchpad project identifier to look up.
335//   - tier: tier duration in days; launchpad tiers use 30, 90, or 180.
336//
337// Returns:
338//   - startTime: tier start timestamp in Unix seconds; zero when lookup fails.
339//   - err: nil when found; non-nil when projectId or tier is not present.
340func (lp *launchpadV1) GetProjectTierStartTime(projectId string, tier int64) (int64, error) {
341	projectTier, err := lp.GetProjectTier(projectId, tier)
342	if err != nil {
343		return 0, err
344	}
345
346	return projectTier.StartTime(), nil
347}
348
349// GetProjectTierEndTime returns the end time of a project tier.
350// Returns 0 and error if project or tier not found.
351//
352// Parameters:
353//   - projectId: unique launchpad project identifier to look up.
354//   - tier: tier duration in days; launchpad tiers use 30, 90, or 180.
355//
356// Returns:
357//   - endTime: tier end timestamp in Unix seconds; zero when lookup fails.
358//   - err: nil when found; non-nil when projectId or tier is not present.
359func (lp *launchpadV1) GetProjectTierEndTime(projectId string, tier int64) (int64, error) {
360	projectTier, err := lp.GetProjectTier(projectId, tier)
361	if err != nil {
362		return 0, err
363	}
364
365	return projectTier.EndTime(), nil
366}
367
368// GetDepositCount returns the total number of deposits.
369//
370// Returns:
371//   - count: number of deposit entries currently stored.
372func (lp *launchpadV1) GetDepositCount() int {
373	deposits := lp.store.GetDeposits()
374	return deposits.Size()
375}
376
377// GetCurrentDepositId returns the current deposit counter value.
378//
379// Returns:
380//   - depositID: current int64 deposit counter used to generate subsequent deposit identifiers.
381func (lp *launchpadV1) GetCurrentDepositId() int64 {
382	counter := lp.store.GetDepositCounter()
383	return counter.Get()
384}
385
386// GetProjectTierRewards returns a read-only view of a project tier's reward
387// states, keyed by deposit ID. nil is returned when the project tier does not
388// exist.
389//
390// Parameters:
391//   - projectId: unique launchpad project identifier used to form the tier ID.
392//   - tier: tier duration in days; launchpad tiers use 30, 90, or 180.
393//
394// Returns:
395//   - rewards: read-only tree of reward states keyed by deposit ID; nil when the tier's reward manager lookup fails.
396func (lp *launchpadV1) GetProjectTierRewards(projectId string, tier int64) *rotree.ReadOnlyTree {
397	projectTierID := launchpad.MakeProjectTierID(projectId, tier)
398
399	rewardManager, err := lp.getProjectTierRewardManager(projectTierID)
400	if err != nil {
401		return nil
402	}
403	return rotree.Wrap(rewardManager.Rewards(), cloneRewardStateEntry)
404}
405
406// GetDeposit retrieves the value payload of a deposit by its ID.
407//
408// Parameters:
409//   - depositId: unique deposit identifier to look up.
410//
411// Returns:
412//   - deposit: stored deposit value; zero-valued when the entry is missing or has an invalid type.
413//   - err: nil for a valid stored deposit; non-nil when the entry is missing or has an invalid type.
414func (lp *launchpadV1) GetDeposit(depositId string) (launchpad.Deposit, error) {
415	return lp.getDepositValue(depositId)
416}
417
418// GetDepositProjectID returns the project ID of a deposit by its ID.
419//
420// Parameters:
421//   - depositId: unique deposit identifier to look up.
422//
423// Returns:
424//   - projectID: project identifier recorded on the deposit; empty when the entry is missing or invalid.
425//   - err: nil for a valid stored deposit; non-nil when the entry is missing or has an invalid type.
426func (lp *launchpadV1) GetDepositProjectID(depositId string) (string, error) {
427	deposit, err := lp.getDepositValue(depositId)
428	if err != nil {
429		return "", err
430	}
431	return deposit.ProjectID(), nil
432}
433
434// GetDepositTier returns the tier of a deposit by its ID.
435//
436// Parameters:
437//   - depositId: unique deposit identifier to look up.
438//
439// Returns:
440//   - tier: tier duration recorded on the deposit; zero when the entry is missing or invalid.
441//   - err: nil for a valid stored deposit; non-nil when the entry is missing or has an invalid type.
442func (lp *launchpadV1) GetDepositTier(depositId string) (int64, error) {
443	deposit, err := lp.getDepositValue(depositId)
444	if err != nil {
445		return 0, err
446	}
447	return deposit.Tier(), nil
448}
449
450// GetDepositProjectTierID returns the project tier ID of a deposit by its ID.
451//
452// Parameters:
453//   - depositId: unique deposit identifier to look up.
454//
455// Returns:
456//   - projectTierID: composite project-tier identifier derived from the deposit; empty when the entry is missing or invalid.
457//   - err: nil for a valid stored deposit; non-nil when the entry is missing or has an invalid type.
458func (lp *launchpadV1) GetDepositProjectTierID(depositId string) (string, error) {
459	deposit, err := lp.getDepositValue(depositId)
460	if err != nil {
461		return "", err
462	}
463	return deposit.ProjectTierID(), nil
464}
465
466// GetDepositAmount returns the deposit amount of a deposit by its ID.
467//
468// Parameters:
469//   - depositId: unique deposit identifier to look up.
470//
471// Returns:
472//   - amount: GNS amount recorded on the deposit; zero when the entry is missing or invalid.
473//   - err: nil for a valid stored deposit; non-nil when the entry is missing or has an invalid type.
474func (lp *launchpadV1) GetDepositAmount(depositId string) (int64, error) {
475	deposit, err := lp.getDepositValue(depositId)
476	if err != nil {
477		return 0, err
478	}
479	return deposit.DepositAmount(), nil
480}
481
482// GetDepositWithdrawnHeight returns the withdrawn height of a deposit by its ID.
483//
484// Parameters:
485//   - depositId: unique deposit identifier to look up.
486//
487// Returns:
488//   - withdrawnHeight: withdrawal block height recorded on the deposit; zero when the entry is missing or invalid.
489//   - err: nil for a valid stored deposit; non-nil when the entry is missing or has an invalid type.
490func (lp *launchpadV1) GetDepositWithdrawnHeight(depositId string) (int64, error) {
491	deposit, err := lp.getDepositValue(depositId)
492	if err != nil {
493		return 0, err
494	}
495	return deposit.WithdrawnHeight(), nil
496}
497
498// GetDepositWithdrawnTime returns the withdrawn time of a deposit by its ID.
499//
500// Parameters:
501//   - depositId: unique deposit identifier to look up.
502//
503// Returns:
504//   - withdrawnTime: withdrawal timestamp in Unix seconds; zero when the entry is missing or invalid.
505//   - err: nil for a valid stored deposit; non-nil when the entry is missing or has an invalid type.
506func (lp *launchpadV1) GetDepositWithdrawnTime(depositId string) (int64, error) {
507	deposit, err := lp.getDepositValue(depositId)
508	if err != nil {
509		return 0, err
510	}
511	return deposit.WithdrawnTime(), nil
512}
513
514// GetDepositCreatedHeight returns the created height of a deposit by its ID.
515//
516// Parameters:
517//   - depositId: unique deposit identifier to look up.
518//
519// Returns:
520//   - createdHeight: creation block height recorded on the deposit; zero when the entry is missing or invalid.
521//   - err: nil for a valid stored deposit; non-nil when the entry is missing or has an invalid type.
522func (lp *launchpadV1) GetDepositCreatedHeight(depositId string) (int64, error) {
523	deposit, err := lp.getDepositValue(depositId)
524	if err != nil {
525		return 0, err
526	}
527	return deposit.CreatedHeight(), nil
528}
529
530// GetDepositCreatedAt returns the created time of a deposit by its ID.
531//
532// Parameters:
533//   - depositId: unique deposit identifier to look up.
534//
535// Returns:
536//   - createdAt: creation timestamp in Unix seconds; zero when the entry is missing or invalid.
537//   - err: nil for a valid stored deposit; non-nil when the entry is missing or has an invalid type.
538func (lp *launchpadV1) GetDepositCreatedAt(depositId string) (int64, error) {
539	deposit, err := lp.getDepositValue(depositId)
540	if err != nil {
541		return 0, err
542	}
543	return deposit.CreatedAt(), nil
544}
545
546// GetDepositEndTime returns the end time of a deposit by its ID.
547//
548// Parameters:
549//   - depositId: unique deposit identifier to look up.
550//
551// Returns:
552//   - endTime: tier end timestamp in Unix seconds; zero when the entry is missing or invalid.
553//   - err: nil for a valid stored deposit; non-nil when the entry is missing or has an invalid type.
554func (lp *launchpadV1) GetDepositEndTime(depositId string) (int64, error) {
555	deposit, err := lp.getDepositValue(depositId)
556	if err != nil {
557		return 0, err
558	}
559	return deposit.EndTime(), nil
560}
561
562// GetTotalGNSStakedAmount returns the total amount of GNS currently staked across all launchpad deposits.
563//
564// Returns:
565//   - amount: aggregate GNS amount currently staked across all launchpad deposits.
566func (lp *launchpadV1) GetTotalGNSStakedAmount() int64 {
567	return lp.store.GetTotalGNSStakedAmount()
568}
569
570// GetProjectTierRewardManagerCount returns the total number of reward managers.
571//
572// Returns:
573//   - count: number of project-tier reward-manager entries currently stored.
574func (lp *launchpadV1) GetProjectTierRewardManagerCount() int {
575	managers := lp.store.GetProjectTierRewardManagers()
576	return managers.Size()
577}
578
579// GetProjectTierRewardManager retrieves a reward manager by project tier ID.
580// Returns nil and error if reward manager not found.
581//
582// Parameters:
583//   - projectTierId: composite project-tier identifier whose reward manager is requested.
584//
585// Returns:
586//   - manager: matching reward manager; nil when no entry exists or its value has an invalid type.
587//   - err: nil for a valid manager; non-nil when the entry is absent or has an invalid type.
588func (lp *launchpadV1) GetProjectTierRewardManager(projectTierId string) (*launchpad.RewardManager, error) {
589	managers := lp.store.GetProjectTierRewardManagers()
590	value := managers.Get(projectTierId)
591	if value == nil {
592		return nil, makeErrorWithDetails(errDataNotFound, "reward manager not found")
593	}
594
595	manager, ok := value.(*launchpad.RewardManager)
596	if !ok {
597		return nil, errors.New("invalid reward manager type")
598	}
599
600	return manager, nil
601}
602
603// GetProjectTierRewardDistributeAmountPerSecondX128 returns the distribute amount per second (Q128) of a reward manager.
604// Returns nil and error if reward manager not found.
605//
606// Parameters:
607//   - projectTierId: composite project-tier identifier whose reward manager is requested.
608//
609// Returns:
610//   - amountPerSecondX128: per-second distribution rate encoded as a Q128 fixed-point value; nil when lookup fails.
611//   - err: nil when found; non-nil when the reward manager is absent or has an invalid type.
612func (lp *launchpadV1) GetProjectTierRewardDistributeAmountPerSecondX128(projectTierId string) (*uint256.Uint, error) {
613	manager, err := lp.GetProjectTierRewardManager(projectTierId)
614	if err != nil {
615		return nil, err
616	}
617
618	return manager.DistributeAmountPerSecondX128(), nil
619}
620
621// GetProjectTierRewardAccumulatedRewardPerDepositX128 returns the accumulated reward per deposit (Q128) of a reward manager.
622// Returns nil and error if reward manager not found.
623//
624// Parameters:
625//   - projectTierId: composite project-tier identifier whose reward manager is requested.
626//
627// Returns:
628//   - accumulatedRewardPerDepositX128: accumulated reward index per deposited GNS, encoded as Q128; nil when lookup fails.
629//   - err: nil when found; non-nil when the reward manager is absent or has an invalid type.
630func (lp *launchpadV1) GetProjectTierRewardAccumulatedRewardPerDepositX128(projectTierId string) (*uint256.Uint, error) {
631	manager, err := lp.GetProjectTierRewardManager(projectTierId)
632	if err != nil {
633		return nil, err
634	}
635
636	return manager.AccumulatedRewardPerDepositX128(), nil
637}
638
639// GetProjectTierRewardTotalDistributeAmount returns the total distribute amount of a reward manager.
640// Returns 0 and error if reward manager not found.
641//
642// Parameters:
643//   - projectTierId: composite project-tier identifier whose reward manager is requested.
644//
645// Returns:
646//   - amount: total token amount allocated to the reward manager; zero when lookup fails.
647//   - err: nil when found; non-nil when the reward manager is absent or has an invalid type.
648func (lp *launchpadV1) GetProjectTierRewardTotalDistributeAmount(projectTierId string) (int64, error) {
649	manager, err := lp.GetProjectTierRewardManager(projectTierId)
650	if err != nil {
651		return 0, err
652	}
653
654	return manager.TotalDistributeAmount(), nil
655}
656
657// GetProjectTierRewardTotalClaimedAmount returns the total claimed amount of a reward manager.
658// Returns 0 and error if reward manager not found.
659//
660// Parameters:
661//   - projectTierId: composite project-tier identifier whose reward manager is requested.
662//
663// Returns:
664//   - amount: total token amount already claimed from the reward manager; zero when lookup fails.
665//   - err: nil when found; non-nil when the reward manager is absent or has an invalid type.
666func (lp *launchpadV1) GetProjectTierRewardTotalClaimedAmount(projectTierId string) (int64, error) {
667	manager, err := lp.GetProjectTierRewardManager(projectTierId)
668	if err != nil {
669		return 0, err
670	}
671
672	return manager.TotalClaimedAmount(), nil
673}
674
675// GetProjectTierRewardDistributeStartTime returns the distribute start time of a reward manager.
676// Returns 0 and error if reward manager not found.
677//
678// Parameters:
679//   - projectTierId: composite project-tier identifier whose reward manager is requested.
680//
681// Returns:
682//   - startTime: reward distribution start timestamp in Unix seconds; zero when lookup fails.
683//   - err: nil when found; non-nil when the reward manager is absent or has an invalid type.
684func (lp *launchpadV1) GetProjectTierRewardDistributeStartTime(projectTierId string) (int64, error) {
685	manager, err := lp.GetProjectTierRewardManager(projectTierId)
686	if err != nil {
687		return 0, err
688	}
689
690	return manager.DistributeStartTime(), nil
691}
692
693// GetProjectTierRewardDistributeEndTime returns the distribute end time of a reward manager.
694// Returns 0 and error if reward manager not found.
695//
696// Parameters:
697//   - projectTierId: composite project-tier identifier whose reward manager is requested.
698//
699// Returns:
700//   - endTime: reward distribution end timestamp in Unix seconds; zero when lookup fails.
701//   - err: nil when found; non-nil when the reward manager is absent or has an invalid type.
702func (lp *launchpadV1) GetProjectTierRewardDistributeEndTime(projectTierId string) (int64, error) {
703	manager, err := lp.GetProjectTierRewardManager(projectTierId)
704	if err != nil {
705		return 0, err
706	}
707
708	return manager.DistributeEndTime(), nil
709}
710
711// GetProjectTierRewardAccumulatedDistributeAmount returns a legacy reward-manager field.
712// The v1 reward paths do not maintain it, so normal reads return zero unless it
713// was explicitly set.
714//
715// Parameters:
716//   - projectTierId: composite project-tier identifier whose reward manager is requested.
717//
718// Returns:
719//   - amount: legacy accumulated-distribution amount, normally zero in v1 unless explicitly set.
720//   - err: nil when found; non-nil when the reward manager is absent or has an invalid type.
721func (lp *launchpadV1) GetProjectTierRewardAccumulatedDistributeAmount(projectTierId string) (int64, error) {
722	manager, err := lp.GetProjectTierRewardManager(projectTierId)
723	if err != nil {
724		return 0, err
725	}
726
727	return manager.AccumulatedDistributeAmount(), nil
728}
729
730// GetProjectTierRewardAccumulatedTime returns the accumulated time of a reward manager.
731// Returns 0 and error if reward manager not found.
732//
733// Parameters:
734//   - projectTierId: composite project-tier identifier whose reward manager is requested.
735//
736// Returns:
737//   - accumulatedTime: timestamp in Unix seconds at which reward accumulation was last updated; zero before an update.
738//   - err: nil when found; non-nil when the reward manager is absent or has an invalid type.
739func (lp *launchpadV1) GetProjectTierRewardAccumulatedTime(projectTierId string) (int64, error) {
740	manager, err := lp.GetProjectTierRewardManager(projectTierId)
741	if err != nil {
742		return 0, err
743	}
744
745	return manager.AccumulatedTime(), nil
746}
747
748// GetProjectTierRewardClaimableDuration returns the reward claimable duration of a reward manager.
749// Returns 0 and error if reward manager not found.
750//
751// Parameters:
752//   - projectTierId: composite project-tier identifier whose reward manager is requested.
753//
754// Returns:
755//   - duration: configured period during which rewards remain claimable, in the manager's timestamp units; zero when lookup fails.
756//   - err: nil when found; non-nil when the reward manager is absent or has an invalid type.
757func (lp *launchpadV1) GetProjectTierRewardClaimableDuration(projectTierId string) (int64, error) {
758	manager, err := lp.GetProjectTierRewardManager(projectTierId)
759	if err != nil {
760		return 0, err
761	}
762
763	return manager.RewardClaimableDuration(), nil
764}
765
766// GetRewardState retrieves a reward state by project tier ID and deposit ID.
767// Returns nil and error if reward manager or reward state not found.
768//
769// Parameters:
770//   - projectTierId: composite project-tier identifier whose reward manager contains the state.
771//   - depositId: unique deposit identifier whose reward state is requested.
772//
773// Returns:
774//   - rewardState: matching reward state; nil when the manager or state is absent or has an invalid type.
775//   - err: nil when found; non-nil when the manager or state is absent or has an invalid type.
776func (lp *launchpadV1) GetRewardState(projectTierId string, depositId string) (*launchpad.RewardState, error) {
777	managers := lp.store.GetProjectTierRewardManagers()
778	value := managers.Get(projectTierId)
779	if value == nil {
780		return nil, makeErrorWithDetails(errDataNotFound, "reward manager not found")
781	}
782
783	manager, ok := value.(*launchpad.RewardManager)
784	if !ok {
785		return nil, errors.New("invalid reward manager type")
786	}
787
788	rewards := manager.Rewards()
789	rewardValue := rewards.Get(depositId)
790	if rewardValue == nil {
791		return nil, makeErrorWithDetails(errDataNotFound, "reward state not found")
792	}
793
794	rewardState, ok := rewardValue.(*launchpad.RewardState)
795	if !ok {
796		return nil, errors.New("invalid reward state type")
797	}
798
799	return rewardState, nil
800}
801
802// GetProjectActiveStatus returns whether a project is currently active.
803// Returns false and error if project not found.
804//
805// Parameters:
806//   - projectId: unique launchpad project identifier to look up.
807//
808// Returns:
809//   - active: true when the project's standard 180-day tier is active at the current Unix time; false when inactive.
810//   - err: nil when found; non-nil when projectId is not present in state.
811func (lp *launchpadV1) GetProjectActiveStatus(projectId string) (bool, error) {
812	project, err := lp.getProject(projectId)
813	if err != nil {
814		return false, err
815	}
816
817	currentTime := time.Now().Unix()
818	return isProjectActive(project, currentTime), nil
819}