Search Apps Documentation Source Content File Folder Download Copy Actions Download 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}