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

assert.gno

2.26 Kb · 73 lines
 1package launchpad
 2
 3import (
 4	ufmt "gno.land/p/nt/ufmt/v0"
 5	"gno.land/r/gnoswap/launchpad"
 6)
 7
 8// assertIsDepositOwner asserts that the caller is the owner of the deposit.
 9// Panics if the caller is not the owner of the deposit.
10func (lp *launchpadV1) assertIsDepositOwner(depositID string, caller address) {
11	deposit, err := lp.getDeposit(depositID)
12	if err != nil {
13		panic(err.Error())
14	}
15
16	if !deposit.IsDepositor(caller) {
17		panic(makeErrorWithDetails(errInvalidOwner, ufmt.Sprintf("(%s)", caller.String())).Error())
18	}
19}
20
21// assertIsValidAmount panics if the amount is zero.
22func assertIsValidAmount(amount int64) {
23	if amount < minimumDepositAmount {
24		panic(makeErrorWithDetails(
25			errInvalidAmount,
26			ufmt.Sprintf("amount(%d) should greater than minimum deposit amount(%d)", amount, minimumDepositAmount),
27		))
28	}
29
30	if (amount % minimumDepositAmount) != 0 {
31		panic(makeErrorWithDetails(
32			errInvalidAmount,
33			ufmt.Sprintf("amount(%d) must be a multiple of 1_000_000", amount),
34		))
35	}
36}
37
38// assertIsDepositNotWithdrawn asserts that the deposit is not withdrawn.
39func assertIsDepositNotWithdrawn(deposit launchpad.Deposit) {
40	if deposit.IsWithdrawn() {
41		panic(makeErrorWithDetails(errAlreadyCollected, ufmt.Sprintf("(%s)", deposit.ID())))
42	}
43}
44
45// assertIsDepositEnded asserts that the deposit is ended.
46func assertIsDepositEnded(deposit launchpad.Deposit, currentTime int64) {
47	if !deposit.IsEnded(currentTime) {
48		panic(makeErrorWithDetails(errNotYetEndedProject, ufmt.Sprintf("(%s)", deposit.ID())))
49	}
50}
51
52// assertHasTierReward asserts that the tier has rewards to distribute.
53// A zero-rate tier cannot settle rewards, which would lock withdrawals.
54func assertHasTierReward(tier *launchpad.ProjectTier) {
55	if tier.DistributeAmountPerSecondX128().IsZero() {
56		panic(makeErrorWithDetails(errNoLeftReward, ufmt.Sprintf("(%s)", tier.ID())))
57	}
58}
59
60// assertHasProject asserts that the caller is the owner of at least one project.
61// Panics if the caller is not the owner of any project.
62func (lp *launchpadV1) assertHasProject(caller address) {
63	if !lp.store.GetProjectRecipients().Has(caller.String()) {
64		panic(makeErrorWithDetails(
65			errInvalidOwner,
66			ufmt.Sprintf("caller %s is not the owner of any project", caller.String()),
67		))
68	}
69}
70
71func assertNotImplementYet() {
72	panic("NotImplementYet")
73}