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

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}