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.09 Kb · 72 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// validateDistributionTarget returns an error if the given distribution target is invalid.
18func validateDistributionTarget(target int) error {
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		return makeErrorWithDetails(
28			errInvalidEmissionTarget,
29			ufmt.Sprintf("invalid target(%d)", target),
30		)
31	}
32
33	return nil
34}
35
36// assertValidDistributionTarget panics if the given distribution target is invalid.
37// Kept for internal invariant checks.
38func assertValidDistributionTarget(target int) {
39	if err := validateDistributionTarget(target); err != nil {
40		panic(err)
41	}
42}
43
44// assertValidDistributionPct ensures the sum of all distribution percentages equals 10000 (100%).
45// Panics if the sum does not equal exactly 10000 basis points.
46func assertValidDistributionPct(liquidityStakerPct, devOpsPct, communityPoolPct, govStakerPct int64) {
47	// Validate individual percentages are non-negative and reasonable
48	percentages := []int64{liquidityStakerPct, devOpsPct, communityPoolPct, govStakerPct}
49	for i, pct := range percentages {
50		if pct < 0 {
51			panic(makeErrorWithDetails(
52				errInvalidEmissionPct,
53				ufmt.Sprintf("percentage %d cannot be negative: %d", i+1, pct),
54			))
55		}
56
57		if pct > 10000 {
58			panic(makeErrorWithDetails(
59				errInvalidEmissionPct,
60				ufmt.Sprintf("percentage %d cannot exceed 100%%: %d", i+1, pct),
61			))
62		}
63	}
64
65	sum := liquidityStakerPct + devOpsPct + communityPoolPct + govStakerPct
66	if sum != 10000 {
67		panic(makeErrorWithDetails(
68			errInvalidEmissionPct,
69			ufmt.Sprintf("sum of percentages must be 10000, got %d", sum),
70		))
71	}
72}