PathrockNetwork Gno Explorer
HomeBlocksTransactionsTokensRealmsPackagesValidatorsAnalytics

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/v1

Realm
Open in gnoweb ↗

Overview

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

Files (23)

  • README.mdmarkdown
  • gnomod.tomltoml
  • assert.gnogno
  • consts.gnogno
  • deposit.gnogno
  • emits.gnogno
  • errors.gnogno
  • getter_utils.gnogno
  • getter.gnogno
  • init.gnogno
  • instance.gnogno
  • launchpad_deposit.gnogno
  • launchpad_project.gnogno
  • launchpad_protocol_fee.gnogno
  • launchpad_reward.gnogno
  • launchpad_withdraw.gnogno
  • project_tier.gnogno
  • project.gnogno
  • render.gnogno
  • reward_manager.gnogno
  • reward_state.gnogno
  • state.gnogno
  • utils.gnogno
  • launchpad_reward.gnogno
    1package launchpad23import (4	"chain"5	"chain/runtime"6	"time"78

    Functions

    • NewLaunchpadV1(launchpadStore 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}) interface {CollectDepositGns func(int, .uverse.realm, string) (int64, .uverse.error); CollectEmissionReward func(int, .uverse.realm); CollectProtocolFee func(int, .uverse.realm); CollectProtocolFeeReward func(int, .uverse.realm, string); CollectRewardByDepositId func(int, .uverse.realm, string) int64; CreateProject func(int, .uverse.realm, string, string, .uverse.address, int64, string, string, int64, int64, int64, int64) string; DepositGns func(int, .uverse.realm, string, int64, string) string; GetCurrentDepositId func() int64; GetDeposit func(string) (gno.land/r/gnoswap/launchpad.Deposit, .uverse.error); GetDepositAmount func(string) (int64, .uverse.error); GetDepositCount func() int; GetDepositCreatedAt func(string) (int64, .uverse.error); GetDepositCreatedHeight func(string) (int64, .uverse.error); GetDepositEndTime func(string) (int64, .uverse.error); GetDepositProjectID func(string) (string, .uverse.error); GetDepositProjectTierID func(string) (string, .uverse.error); GetDepositTier func(string) (int64, .uverse.error); GetDepositWithdrawnHeight func(string) (int64, .uverse.error); GetDepositWithdrawnTime func(string) (int64, .uverse.error); GetProjectActiveStatus func(string) (bool, .uverse.error); GetProjectCondition func(string, string) (*gno.land/r/gnoswap/launchpad.ProjectCondition, .uverse.error); GetProjectCreatedAt func(string) (int64, .uverse.error); GetProjectCreatedHeight func(string) (int64, .uverse.error); GetProjectDepositAmount func(string) (int64, .uverse.error); GetProjectName func(string) (string, .uverse.error); GetProjectRecipient func(string) (.uverse.address, .uverse.error); GetProjectTier func(string, int64) (*gno.land/r/gnoswap/launchpad.ProjectTier, .uverse.error); GetProjectTierDistributeAmountPerSecondX128 func(string, int64) (*gno.land/p/gnoswap/uint256/v1.Uint, .uverse.error); GetProjectTierEndTime func(string, int64) (int64, .uverse.error); GetProjectTierRewardAccumulatedDistributeAmount func(string) (int64, .uverse.error); GetProjectTierRewardAccumulatedRewardPerDepositX128 func(string) (*gno.land/p/gnoswap/uint256/v1.Uint, .uverse.error); GetProjectTierRewardAccumulatedTime func(string) (int64, .uverse.error); GetProjectTierRewardClaimableDuration func(string) (int64, .uverse.error); GetProjectTierRewardDistributeAmountPerSecondX128 func(string) (*gno.land/p/gnoswap/uint256/v1.Uint, .uverse.error); GetProjectTierRewardDistributeEndTime func(string) (int64, .uverse.error); GetProjectTierRewardDistributeStartTime func(string) (int64, .uverse.error); GetProjectTierRewardManager func(string) (*gno.land/r/gnoswap/launchpad.RewardManager, .uverse.error); GetProjectTierRewardManagerCount func() int; GetProjectTierRewardTotalClaimedAmount func(string) (int64, .uverse.error); GetProjectTierRewardTotalDistributeAmount func(string) (int64, .uverse.error); GetProjectTierRewards func(string, int64) *gno.land/p/nt/bptree/rotree/v0.ReadOnlyTree; GetProjectTierStartTime func(string, int64) (int64, .uverse.error); GetProjectTierTotalCollectedAmount func(string, int64) (int64, .uverse.error); GetProjectTierTotalDepositAmount func(string, int64) (int64, .uverse.error); GetProjectTierTotalDepositCount func(string, int64) (int64, .uverse.error); GetProjectTierTotalDistributeAmount func(string, int64) (int64, .uverse.error); GetProjectTierTotalWithdrawAmount func(string, int64) (int64, .uverse.error); GetProjectTierTotalWithdrawCount func(string, int64) (int64, .uverse.error); GetProjectTiersRatios func(string) (map[int64]int64, .uverse.error); GetProjectTokenPath func(string) (string, .uverse.error); GetProjects func() *gno.land/p/nt/bptree/rotree/v0.ReadOnlyTree; GetRewardState func(string, string) (*gno.land/r/gnoswap/launchpad.RewardState, .uverse.error); GetTotalGNSStakedAmount func() int64; Render func(string) string; TransferLeftFromProjectByAdmin func(int, .uverse.realm, string, .uverse.address) int64}

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

    Rendered

    RenderedRawgnoweb ↗
    This realm does not provide renderable output (vm/qrender → NoRenderDeclError). View on gnoweb ↗

    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.

    "gno.land/r/gnoswap/access/v1"
    9
    10 gnsmath "gno.land/p/gnoswap/gnsmath/v1"
    11 "gno.land/p/gnoswap/utils/v1"
    12
    13 "gno.land/r/gnoswap/common"
    14 "gno.land/r/gnoswap/halt/v1"
    15 "gno.land/r/gnoswap/launchpad"
    16)
    17
    18// CollectRewardByDepositId collects the claimable project-token reward from a
    19// specific deposit. The reward becomes claimable one day after deposit creation,
    20// capped at the selected tier's end time.
    21//
    22// Parameters:
    23// - _: Noncrossing implementation-call discriminator; pass 0.
    24// - rlm: Current realm context forwarded unchanged by the launchpad proxy.
    25// - depositID: ID of the deposit to collect from.
    26//
    27// Returns:
    28// - amount: project-token reward amount collected for the deposit, in the token's base units; failures panic before returning.
    29//
    30// Only callable by deposit owner after the claimable time.
    31func (lp *launchpadV1) CollectRewardByDepositId(_ int, rlm realm, depositID string) int64 {
    32 access.AssertIsRlmCurrent(0, rlm)
    33
    34 halt.AssertIsNotHaltedWithdraw()
    35
    36 previousRealm := rlm.Previous()
    37
    38 caller := previousRealm.Address()
    39 lp.assertIsDepositOwner(depositID, caller)
    40
    41 deposit := lp.mustGetDeposit(depositID)
    42 targetProjectTierID := deposit.ProjectTierID()
    43 currentHeight := runtime.ChainHeight()
    44 currentTime := time.Now().Unix()
    45
    46 rewardTokenPath, rewardAmount, err := lp.collectDepositReward(0, rlm, deposit, currentHeight, currentTime)
    47 if err != nil {
    48 panic(err)
    49 }
    50
    51 // Transfer reward token to depositor
    52 if rewardAmount > 0 {
    53 common.SafeGRC20Transfer(0, rlm, rewardTokenPath, deposit.Depositor(), rewardAmount)
    54 }
    55
    56 chain.Emit(
    57 "CollectRewardByDepositId",
    58 "prevAddr", caller.String(),
    59 "prevRealm", previousRealm.PkgPath(),
    60 "depositId", depositID,
    61 "targetProjectTierId", targetProjectTierID,
    62 "rewardTokenPath", rewardTokenPath,
    63 "amount", utils.FormatInt(rewardAmount),
    64 )
    65
    66 return rewardAmount
    67}
    68
    69// collectDepositReward calculates and collects the reward for a deposit.
    70func (lp *launchpadV1) collectDepositReward(_ int, rlm realm, deposit launchpad.Deposit, currentHeight, currentTime int64) (string, int64, error) {
    71 if currentTime <= 0 {
    72 return "", 0, makeErrorWithDetails(errInvalidTime, "currentTime must be positive")
    73 }
    74
    75 // Get project and tier data
    76 project, err := lp.getProject(deposit.ProjectID())
    77 if err != nil {
    78 return "", 0, err
    79 }
    80
    81 projectTier, err := getProjectTier(project, deposit.Tier())
    82 if err != nil {
    83 return "", 0, err
    84 }
    85
    86 // Get reward manager
    87 rewardManager, err := lp.getProjectTierRewardManager(projectTier.ID())
    88 if err != nil {
    89 return "", 0, err
    90 }
    91
    92 // Update reward state before collection
    93 err = updateRewardPerDepositX128(rewardManager, getTierCurrentDepositAmount(projectTier), currentTime)
    94 if err != nil {
    95 return "", 0, err
    96 }
    97
    98 // Collect reward
    99 rewardAmount, err := collectReward(rewardManager, deposit.ID(), currentTime)
    100 if err != nil {
    101 return "", 0, err
    102 }
    103
    104 // Update total collected amount for the tier
    105 if rewardAmount > 0 {
    106 projectTier.SetTotalCollectedAmount(gnsmath.SafeAddInt64(projectTier.TotalCollectedAmount(), rewardAmount))
    107 project.SetTier(deposit.Tier(), projectTier)
    108
    109 projects := lp.store.GetProjects()
    110 if err := lp.store.SetProjects(0, rlm, projects); err != nil {
    111 return "", 0, err
    112 }
    113 }
    114
    115 emitUpdateLaunchpadRewardAccumulation(projectTier.ID(), rewardManager, getTierCurrentDepositAmount(projectTier))
    116
    117 return project.TokenPath(), rewardAmount, nil
    118}
    119