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

assert.gno

1.82 Kb · 62 lines
 1package emission
 2
 3import (
 4	ufmt "gno.land/p/nt/ufmt/v0"
 5)
 6
 7func assertDefaultInitialPoolExists() {
 8	if defaultInitialPoolChecker == nil {
 9		panic(makeErrorWithDetails(errInvalidEmissionStart, "default initial pool checker is not registered"))
10	}
11
12	if !defaultInitialPoolChecker(DefaultInitialPoolTierPath) {
13		panic(makeErrorWithDetails(errInvalidEmissionStart, "default initial pool does not exist: "+DefaultInitialPoolTierPath))
14	}
15}
16
17// assertValidDistributionTarget panics if the given distribution target is invalid.
18func assertValidDistributionTarget(target int) {
19	validTargets := map[int]bool{
20		LIQUIDITY_STAKER: false,
21		DEVOPS:           false,
22		COMMUNITY_POOL:   false,
23		GOV_STAKER:       false,
24	}
25
26	if _, ok := validTargets[target]; !ok {
27		panic(makeErrorWithDetails(
28			errInvalidEmissionTarget,
29			ufmt.Sprintf("invalid target(%d)", target),
30		))
31	}
32}
33
34// assertValidDistributionPct ensures the sum of all distribution percentages equals 10000 (100%).
35// Panics if the sum does not equal exactly 10000 basis points.
36func assertValidDistributionPct(liquidityStakerPct, devOpsPct, communityPoolPct, govStakerPct int64) {
37	// Validate individual percentages are non-negative and reasonable
38	percentages := []int64{liquidityStakerPct, devOpsPct, communityPoolPct, govStakerPct}
39	for i, pct := range percentages {
40		if pct < 0 {
41			panic(makeErrorWithDetails(
42				errInvalidEmissionPct,
43				ufmt.Sprintf("percentage %d cannot be negative: %d", i+1, pct),
44			))
45		}
46
47		if pct > 10000 {
48			panic(makeErrorWithDetails(
49				errInvalidEmissionPct,
50				ufmt.Sprintf("percentage %d cannot exceed 100%%: %d", i+1, pct),
51			))
52		}
53	}
54
55	sum := liquidityStakerPct + devOpsPct + communityPoolPct + govStakerPct
56	if sum != 10000 {
57		panic(makeErrorWithDetails(
58			errInvalidEmissionPct,
59			ufmt.Sprintf("sum of percentages must be 10000, got %d", sum),
60		))
61	}
62}