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}