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

Community realm. Read the code first. Community realm, deployed by its author. Read the code before you interact or send coins.

holders.gno

1.22 Kb · 58 lines
 1package kourt
 2const topHoldersMax = 50
 3func HolderCount(courtSlug string) int {
 4	c := mustCourt(courtSlug)
 5	esc := c.escrow
 6	n := 0
 7	c.coin.WalkAccounts(func(who address, bal int64) bool {
 8		if bal > 0 && who != esc {
 9			n++
10		}
11		return false
12	})
13	return n
14}
15func TopHolders(courtSlug string, limit int) string {
16	if limit <= 0 || limit > topHoldersMax {
17		limit = topHoldersMax
18	}
19	c := mustCourt(courtSlug)
20	esc := c.escrow
21	who := make([]address, 0, limit)
22	bal := make([]int64, 0, limit)
23	c.coin.WalkAccounts(func(a address, b int64) bool {
24		if b <= 0 || a == esc {
25			return false
26		}
27		pos := len(who)
28		for pos > 0 && b > bal[pos-1] {
29			pos--
30		}
31		if pos >= limit {
32			return false
33		}
34		if len(who) < limit {
35			who = append(who, address(""))
36			bal = append(bal, 0)
37		}
38		for i := len(who) - 1; i > pos; i-- {
39			who[i], bal[i] = who[i-1], bal[i-1]
40		}
41		who[pos], bal[pos] = a, b
42		return false
43	})
44	out := ""
45	for i := range who {
46		if bal[i] <= 0 {
47			continue
48		}
49		out += ";" + string(who[i]) + ":" + itoa(bal[i])
50	}
51	if out == "" {
52		return ""
53	}
54	return out[1:]
55}
56func TopHoldersNote() string {
57	return "Ranked by coin held. Coin staked on a claim sits in the court's custody until the claim resolves, so it is not counted here."
58}