PathrockNetwork Gno Explorer
HomeBlocksTransactionsRealmsPackagesValidatorsAnalytics

PathrockNetwork Gno Explorer — an independent explorer for Gno.land Mainnet (gnoland-1), operated by PathrockNetwork. Not an official Gno.land service.

gnowebarchive RPC

gno.land/r/gnoswap/launchpad

Realm
Open in gnoweb ↗

Overview

Kind
Realm (renderable)
Name
launchpad
Namespace
gnoswap
Files
19 (README)(gnomod.toml)
Exported functions
71
Module
gno.land/r/gnoswap/launchpad
gno
0.9

Files (19)

  • README.mdmarkdown
  • gnomod.tomltoml
  • counter.gnogno
  • deposit.gnogno
  • doc.gnogno
  • errors.gnogno
  • getter_utils.gnogno
  • getter.gnogno
  • project_condition.gnogno
  • project_tier.gnogno
  • project.gnogno
  • proxy.gnogno
  • render.gnogno
  • reward_manager.gnogno
  • reward_state.gnogno
  • state.gnogno
  • store.gnogno
  • types.gnogno
  • upgrade.gnogno
  • project_tier.gnogno
    1package launchpad23import (4	ufmt "gno.land/p/nt/ufmt/v0"56	u256 "gno.land/p/gnoswap/uint256/v1"7)8

    Functions

    • CollectDepositGns(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, depositID string) (int64, interface {Error func() string})

    • CollectEmissionReward(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string})

    • CollectProtocolFee(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string})

    • CollectProtocolFeeReward(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, tokenPath string)

    • CollectRewardByDepositId(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, depositID string) int64

    • CreateProject(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, name string, tokenPath string, recipient string, depositAmount int64, conditionTokens string, conditionAmounts string, tier30Ratio int64, tier90Ratio int64, tier180Ratio int64, startTime int64) string

    • DefaultDeposit() struct{depositor .uverse.address; id string; projectID string; tier int64; depositAmount int64; withdrawnHeight int64; withdrawnTime int64; createdHeight int64; createdAt int64; endTime int64}

    • DepositGns(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, targetProjectTierID string, depositAmount int64, referrer string) string

    • GetCurrentDepositId() int64

    • GetDeposit(depositId string) (struct{depositor .uverse.address; id string; projectID string; tier int64; depositAmount int64; withdrawnHeight int64; withdrawnTime int64; createdHeight int64; createdAt int64; endTime int64}, interface {Error func() string})

    • GetDepositAmount(depositId string) (int64, interface {Error func() string})

    • GetDepositCount() int

    • GetDepositCreatedAt(depositId string) (int64, interface {Error func() string})

    • GetDepositCreatedHeight(depositId string) (int64, interface {Error func() string})

    • GetDepositEndTime(depositId string) (int64, interface {Error func() string})

    • GetDepositProjectID(depositId string) (string, interface {Error func() string})

    • GetDepositProjectTierID(depositId string) (string, interface {Error func() string})

    • GetDepositTier(depositId string) (int64, interface {Error func() string})

    • GetDepositWithdrawnHeight(depositId string) (int64, interface {Error func() string})

    • GetDepositWithdrawnTime(depositId string) (int64, interface {Error func() string})

    • GetImplementationPackagePath() string

    • GetProjectActiveStatus(projectId string) (bool, interface {Error func() string})

    • GetProjectCondition(projectId string, tokenPath string) (*gno.land/r/gnoswap/launchpad.ProjectCondition, interface {Error func() string})

    • GetProjectCreatedAt(projectId string) (int64, interface {Error func() string})

    • GetProjectCreatedHeight(projectId string) (int64, interface {Error func() string})

    • GetProjectDepositAmount(projectId string) (int64, interface {Error func() string})

    • GetProjectName(projectId string) (string, interface {Error func() string})

    • GetProjectRecipient(projectId string) (string, interface {Error func() string})

    • GetProjects() *gno.land/p/nt/bptree/rotree/v0.ReadOnlyTree

    • GetProjectTier(projectId string, tier int64) (*gno.land/r/gnoswap/launchpad.ProjectTier, interface {Error func() string})

    • GetProjectTierDistributeAmountPerSecondX128(projectId string, tier int64) (*gno.land/p/gnoswap/uint256/v1.Uint, interface {Error func() string})

    • GetProjectTierEndTime(projectId string, tier int64) (int64, interface {Error func() string})

    • GetProjectTierRewardAccumulatedDistributeAmount(projectTierId string) (int64, interface {Error func() string})

    • GetProjectTierRewardAccumulatedRewardPerDepositX128(projectTierId string) (*gno.land/p/gnoswap/uint256/v1.Uint, interface {Error func() string})

    • GetProjectTierRewardAccumulatedTime(projectTierId string) (int64, interface {Error func() string})

    • GetProjectTierRewardClaimableDuration(projectTierId string) (int64, interface {Error func() string})

    • GetProjectTierRewardDistributeAmountPerSecondX128(projectTierId string) (*gno.land/p/gnoswap/uint256/v1.Uint, interface {Error func() string})

    • GetProjectTierRewardDistributeEndTime(projectTierId string) (int64, interface {Error func() string})

    • GetProjectTierRewardDistributeStartTime(projectTierId string) (int64, interface {Error func() string})

    • GetProjectTierRewardManager(projectTierId string) (*gno.land/r/gnoswap/launchpad.RewardManager, interface {Error func() string})

    • GetProjectTierRewardManagerCount() int

    • GetProjectTierRewards(projectId string, tier int64) *gno.land/p/nt/bptree/rotree/v0.ReadOnlyTree

    • GetProjectTierRewardTotalClaimedAmount(projectTierId string) (int64, interface {Error func() string})

    • GetProjectTierRewardTotalDistributeAmount(projectTierId string) (int64, interface {Error func() string})

    • GetProjectTiersRatios(projectId string) (map[int64]int64, interface {Error func() string})

    • GetProjectTierStartTime(projectId string, tier int64) (int64, interface {Error func() string})

    • GetProjectTierTotalCollectedAmount(projectId string, tier int64) (int64, interface {Error func() string})

    • GetProjectTierTotalDepositAmount(projectId string, tier int64) (int64, interface {Error func() string})

    • GetProjectTierTotalDepositCount(projectId string, tier int64) (int64, interface {Error func() string})

    • GetProjectTierTotalDistributeAmount(projectId string, tier int64) (int64, interface {Error func() string})

    • GetProjectTierTotalWithdrawAmount(projectId string, tier int64) (int64, interface {Error func() string})

    • GetProjectTierTotalWithdrawCount(projectId string, tier int64) (int64, interface {Error func() string})

    • GetProjectTokenPath(projectId string) (string, interface {Error func() string})

    • GetRewardState(projectTierId string, depositId string) (*gno.land/r/gnoswap/launchpad.RewardState, interface {Error func() string})

    • GetTotalGNSStakedAmount() int64

    • MakeDeposit(depositID string, projectID string, tier int64, depositor string, depositAmount int64, createdHeight int64, createdTime int64, endTime int64) struct{depositor .uverse.address; id string; projectID string; tier int64; depositAmount int64; withdrawnHeight int64; withdrawnTime int64; createdHeight int64; createdAt int64; endTime int64}

    • MakeProjectID(tokenPath string, createdHeight int64) string

    • MakeProjectTierID(projectID string, duration int64) string

    • NewBPTreeN(fanout int) *gno.land/p/nt/bptree/v0.BPTree

    • NewCounter() *gno.land/r/gnoswap/launchpad.Counter

    • NewLaunchpadStore(kvStore interface {AddAuthorizedCaller func(int, .uverse.realm, .uverse.address, gno.land/p/gnoswap/store/v1.Permission) .uverse.error; Delete func(int, .uverse.realm, string) .uverse.error; Get func(string) (interface {}, .uverse.error); GetAddress func(string) (.uverse.address, .uverse.error); GetAllKeys func() ([]string, .uverse.error); GetAuthorizedCallers func() (map[.uverse.address]gno.land/p/gnoswap/store/v1.Permission, .uverse.error); GetBPTree func(string) (*gno.land/p/nt/bptree/v0.BPTree, .uverse.error); GetBool func(string) (bool, .uverse.error); GetDomainAddress func() .uverse.address; GetInt64 func(string) (int64, .uverse.error); GetString func(string) (string, .uverse.error); GetUint64 func(string) (uint64, .uverse.error); Has func(string) bool; IsWriteAuthorized func(.uverse.address) bool; RemoveAuthorizedCaller func(int, .uverse.realm, .uverse.address) .uverse.error; Set func(int, .uverse.realm, string, interface {}) .uverse.error; UpdateAuthorizedCaller func(int, .uverse.realm, .uverse.address, gno.land/p/gnoswap/store/v1.Permission) .uverse.error}) interface {GetDepositCounter func() *gno.land/r/gnoswap/launchpad.Counter; GetDeposits func() *gno.land/p/nt/bptree/v0.BPTree; GetProjectRecipients func() *gno.land/p/nt/bptree/v0.BPTree; GetProjectTierRewardManagers func() *gno.land/p/nt/bptree/v0.BPTree; GetProjects func() *gno.land/p/nt/bptree/v0.BPTree; GetTotalGNSStakedAmount func() int64; HasDepositCounterStoreKey func() bool; HasDepositsKey func() bool; HasProjectRecipientsKey func() bool; HasProjectTierRewardManagersKey func() bool; HasProjectsKey func() bool; HasTotalGNSStakedAmountKey func() bool; NextDepositID func() string; SetDepositCounter func(int, .uverse.realm, *gno.land/r/gnoswap/launchpad.Counter) .uverse.error; SetDeposits func(int, .uverse.realm, *gno.land/p/nt/bptree/v0.BPTree) .uverse.error; SetProjectRecipients func(int, .uverse.realm, *gno.land/p/nt/bptree/v0.BPTree) .uverse.error; SetProjectTierRewardManagers func(int, .uverse.realm, *gno.land/p/nt/bptree/v0.BPTree) .uverse.error; SetProjects func(int, .uverse.realm, *gno.land/p/nt/bptree/v0.BPTree) .uverse.error; SetTotalGNSStakedAmount func(int, .uverse.realm, int64) .uverse.error}

    • NewProject(name string, tokenPath string, depositAmount int64, recipient string, createdHeight int64, createdAt int64) *gno.land/r/gnoswap/launchpad.Project

    • NewProjectCondition(tokenPath string, minimumAmount int64) *gno.land/r/gnoswap/launchpad.ProjectCondition

    • NewProjectConditionsWithError(conditionTokens string, conditionAmounts string) ([]*gno.land/r/gnoswap/launchpad.ProjectCondition, interface {Error func() string})

    • NewProjectTier(projectID string, tierDuration int64, totalDistributeAmount int64, startTime int64, endTime int64) *gno.land/r/gnoswap/launchpad.ProjectTier

    • NewRewardManager(totalDistributeAmount int64, distributeStartTime int64, distributeEndTime int64, rewardCollectableDuration int64) *gno.land/r/gnoswap/launchpad.RewardManager

    • NewRewardState(accumulatedRewardPerDepositX128 *gno.land/p/gnoswap/uint256/v1.Uint, depositAmount int64, distributeStartTime int64, distributeEndTime int64, claimableTime int64) *gno.land/r/gnoswap/launchpad.RewardState

    • RegisterInitializer(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, initializer func(int, .uverse.realm, gno.land/r/gnoswap/launchpad.ILaunchpadStore) gno.land/r/gnoswap/launchpad.ILaunchpad)

    • Render(path string) string

    • TransferLeftFromProjectByAdmin(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, projectID string, recipient string) int64

    • UpgradeImpl(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, packagePath string)

    Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.

    Rendered

    RenderedRawgnoweb ↗
    9// ProjectTier represents a tier within a project.
    10//
    11// This struct contains the necessary data and methods to manage and distribute
    12// rewards for a specific tier of a project.
    13//
    14// Fields:
    15// - distributeAmountPerSecondX128 (u256.Uint): The amount of tokens to be distributed per second, represented as a Q128 fixed-point number.
    16// - startTime (int64): The time for the start of the tier.
    17// - endTime (int64): The time for the end of the tier.
    18// - id (string): The unique identifier for the tier, formatted as "{projectID}:duration".
    19// - totalDistributeAmount (int64): The total amount of tokens to be distributed for the tier.
    20// - totalDepositAmount (int64): The total amount of tokens deposited for the tier.
    21// - totalWithdrawAmount (int64): The total amount of tokens withdrawn from the tier.
    22// - totalDepositCount (int64): The total number of deposits made to the tier.
    23// - totalWithdrawCount (int64): The total number of withdrawals from the tier.
    24// - totalCollectedAmount (int64): The total amount of tokens collected as rewards for the tier.
    25type ProjectTier struct {
    26 distributeAmountPerSecondX128 *u256.Uint // distribute amount per second, Q128
    27 id string // '{projectId}:duration' // duration == 30, 90, 180
    28 totalDistributeAmount int64
    29 totalDepositAmount int64 // accumulated deposit amount
    30 totalWithdrawAmount int64 // accumulated withdraw amount
    31 totalDepositCount int64 // accumulated deposit count
    32 totalWithdrawCount int64 // accumulated withdraw count
    33 totalCollectedAmount int64 // total collected amount by user (reward)
    34 startTime int64
    35 endTime int64
    36}
    37
    38// DistributeAmountPerSecondX128 returns the distribute amount per second (Q128) of the project tier.
    39//
    40// Returns:
    41// - amount: per-second distribution rate encoded as a Q128 fixed-point value.
    42func (pt *ProjectTier) DistributeAmountPerSecondX128() *u256.Uint {
    43 return pt.distributeAmountPerSecondX128
    44}
    45
    46// SetDistributeAmountPerSecondX128 sets the distribute amount per second (Q128) of the project tier.
    47//
    48// Parameters:
    49// - amount: per-second distribution rate to store, encoded as a Q128 fixed-point value.
    50func (pt *ProjectTier) SetDistributeAmountPerSecondX128(amount *u256.Uint) {
    51 pt.distributeAmountPerSecondX128 = u256.Zero().Set(amount)
    52}
    53
    54// ID returns the ID of the project tier.
    55//
    56// Returns:
    57// - id: tier identifier in the "{projectID}:{duration}" form.
    58func (pt *ProjectTier) ID() string {
    59 return pt.id
    60}
    61
    62// SetID sets the ID of the project tier.
    63//
    64// Parameters:
    65// - id: tier identifier to store, normally "{projectID}:{duration}".
    66func (pt *ProjectTier) SetID(id string) {
    67 pt.id = id
    68}
    69
    70// TotalDistributeAmount returns the total distribute amount of the project tier.
    71//
    72// Returns:
    73// - amount: total token amount allocated for distribution by this tier.
    74func (pt *ProjectTier) TotalDistributeAmount() int64 {
    75 return pt.totalDistributeAmount
    76}
    77
    78// SetTotalDistributeAmount sets the total distribute amount of the project tier.
    79//
    80// Parameters:
    81// - amount: total token amount allocated for distribution by this tier.
    82func (pt *ProjectTier) SetTotalDistributeAmount(amount int64) {
    83 pt.totalDistributeAmount = amount
    84}
    85
    86// TotalDepositAmount returns the total deposit amount of the project tier.
    87//
    88// Returns:
    89// - amount: aggregate token amount deposited into this tier.
    90func (pt *ProjectTier) TotalDepositAmount() int64 {
    91 return pt.totalDepositAmount
    92}
    93
    94// SetTotalDepositAmount sets the total deposit amount of the project tier.
    95//
    96// Parameters:
    97// - amount: aggregate token amount to record as deposited into this tier.
    98func (pt *ProjectTier) SetTotalDepositAmount(amount int64) {
    99 pt.totalDepositAmount = amount
    100}
    101
    102// TotalWithdrawAmount returns the total withdraw amount of the project tier.
    103//
    104// Returns:
    105// - amount: aggregate token amount withdrawn from this tier.
    106func (pt *ProjectTier) TotalWithdrawAmount() int64 {
    107 return pt.totalWithdrawAmount
    108}
    109
    110// SetTotalWithdrawAmount sets the total withdraw amount of the project tier.
    111//
    112// Parameters:
    113// - amount: aggregate token amount to record as withdrawn from this tier.
    114func (pt *ProjectTier) SetTotalWithdrawAmount(amount int64) {
    115 pt.totalWithdrawAmount = amount
    116}
    117
    118// TotalDepositCount returns the total deposit count of the project tier.
    119//
    120// Returns:
    121// - count: number of deposits recorded for this tier.
    122func (pt *ProjectTier) TotalDepositCount() int64 {
    123 return pt.totalDepositCount
    124}
    125
    126// SetTotalDepositCount sets the total deposit count of the project tier.
    127//
    128// Parameters:
    129// - count: number of deposits to record for this tier.
    130func (pt *ProjectTier) SetTotalDepositCount(count int64) {
    131 pt.totalDepositCount = count
    132}
    133
    134// TotalWithdrawCount returns the total withdraw count of the project tier.
    135//
    136// Returns:
    137// - count: number of withdrawals recorded for this tier.
    138func (pt *ProjectTier) TotalWithdrawCount() int64 {
    139 return pt.totalWithdrawCount
    140}
    141
    142// SetTotalWithdrawCount sets the total withdraw count of the project tier.
    143//
    144// Parameters:
    145// - count: number of withdrawals to record for this tier.
    146func (pt *ProjectTier) SetTotalWithdrawCount(count int64) {
    147 pt.totalWithdrawCount = count
    148}
    149
    150// TotalCollectedAmount returns the total collected amount of the project tier.
    151//
    152// Returns:
    153// - amount: aggregate reward amount collected from this tier.
    154func (pt *ProjectTier) TotalCollectedAmount() int64 {
    155 return pt.totalCollectedAmount
    156}
    157
    158// SetTotalCollectedAmount sets the total collected amount of the project tier.
    159//
    160// Parameters:
    161// - amount: aggregate reward amount to record as collected from this tier.
    162func (pt *ProjectTier) SetTotalCollectedAmount(amount int64) {
    163 pt.totalCollectedAmount = amount
    164}
    165
    166// StartTime returns the start time of the project tier.
    167//
    168// Returns:
    169// - time: tier start timestamp in Unix seconds.
    170func (pt *ProjectTier) StartTime() int64 {
    171 return pt.startTime
    172}
    173
    174// SetStartTime sets the start time of the project tier.
    175//
    176// Parameters:
    177// - time: tier start timestamp in Unix seconds.
    178func (pt *ProjectTier) SetStartTime(time int64) {
    179 pt.startTime = time
    180}
    181
    182// EndTime returns the end time of the project tier.
    183//
    184// Returns:
    185// - time: tier end timestamp in Unix seconds.
    186func (pt *ProjectTier) EndTime() int64 {
    187 return pt.endTime
    188}
    189
    190// SetEndTime sets the end time of the project tier.
    191//
    192// Parameters:
    193// - time: tier end timestamp in Unix seconds.
    194func (pt *ProjectTier) SetEndTime(time int64) {
    195 pt.endTime = time
    196}
    197
    198// IsActivated reports whether the tier is active at the supplied timestamp.
    199//
    200// Parameters:
    201// - currentTime: timestamp in Unix seconds to compare with the tier window.
    202//
    203// Returns:
    204// - activated: true when startTime <= currentTime and currentTime < endTime; false otherwise.
    205func (pt *ProjectTier) IsActivated(currentTime int64) bool {
    206 return pt.startTime <= currentTime && currentTime < pt.endTime
    207}
    208
    209// IsEnded returns true if the project tier has ended.
    210//
    211// Parameters:
    212// - currentTime: timestamp in Unix seconds to compare with the tier end time.
    213//
    214// Returns:
    215// - ended: true when endTime is strictly less than currentTime; false at or before the end time.
    216func (pt *ProjectTier) IsEnded(currentTime int64) bool {
    217 return pt.endTime < currentTime
    218}
    219
    220// Clone returns an independent copy of the project tier, including a cloned
    221// Q128 distribution-rate value and all aggregate counters.
    222//
    223// Returns:
    224// - clone: copy whose mutable fixed-point value is independent of the receiver.
    225func (pt ProjectTier) Clone() *ProjectTier {
    226 return &ProjectTier{
    227 id: pt.id,
    228 totalDistributeAmount: pt.totalDistributeAmount,
    229 distributeAmountPerSecondX128: pt.distributeAmountPerSecondX128.Clone(),
    230 startTime: pt.startTime,
    231 endTime: pt.endTime,
    232 totalDepositAmount: pt.totalDepositAmount,
    233 totalWithdrawAmount: pt.totalWithdrawAmount,
    234 totalDepositCount: pt.totalDepositCount,
    235 totalWithdrawCount: pt.totalWithdrawCount,
    236 totalCollectedAmount: pt.totalCollectedAmount,
    237 }
    238}
    239
    240// NewProjectTier returns a pointer to a new ProjectTier with the given values.
    241//
    242// Parameters:
    243// - projectID: launchpad project identifier associated with the tier.
    244// - tierDuration: tier duration in days; launchpad tiers use 30, 90, or 180.
    245// - totalDistributeAmount: total token amount allocated for this tier.
    246// - startTime: tier start timestamp in Unix seconds.
    247// - endTime: tier end timestamp in Unix seconds.
    248//
    249// Returns:
    250// - tier: new ProjectTier with the supplied identity, allocation, and time window; counters and rates start at zero.
    251func NewProjectTier(
    252 projectID string,
    253 tierDuration int64,
    254 totalDistributeAmount int64,
    255 startTime int64,
    256 endTime int64,
    257) *ProjectTier {
    258 return &ProjectTier{
    259 id: MakeProjectTierID(projectID, tierDuration),
    260 totalDistributeAmount: totalDistributeAmount,
    261 distributeAmountPerSecondX128: u256.Zero(),
    262 startTime: startTime,
    263 endTime: endTime,
    264 totalDepositAmount: 0,
    265 totalWithdrawAmount: 0,
    266 totalDepositCount: 0,
    267 totalWithdrawCount: 0,
    268 totalCollectedAmount: 0,
    269 }
    270}
    271
    272// MakeProjectTierID constructs the tier identifier from a project ID and duration.
    273// The resulting identifier uses the "{projectID}:{duration}" format.
    274//
    275// Parameters:
    276// - projectID: unique launchpad project identifier associated with the tier.
    277// - duration: tier duration in days, such as 30, 90, or 180.
    278//
    279// Returns:
    280// - projectTierID: identifier combining projectID and duration with a colon.
    281func MakeProjectTierID(projectID string, duration int64) string {
    282 return ufmt.Sprintf("%s:%d", projectID, duration)
    283}
    284

    vm/qrender output, sanitized (docs/render-security.md) and displayed in an empty-sandbox iframe — scripts, forms and popups cannot run. Links stay inert in-preview; right-click to open.