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}