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

views.gno

2.33 Kb · 67 lines
 1package tokens
 2
 3import (
 4	"strconv"
 5	"strings"
 6
 7	"gno.land/p/samcrew/launchpad/meta/v1"
 8	sm "gno.land/p/samcrew/launchpad/safemath/v1"
 9)
10
11// int64 amounts and versions are decimal strings so JSON clients cannot round
12// a valid value above JavaScript's exact integer range.
13func infoJSON(e *entry) string {
14	i := e.info
15	return "{" +
16		`"id":` + meta.JSONString(i.ID) +
17		`,"registryKey":` + meta.JSONString(i.RegistryKey) +
18		`,"grc20Id":` + meta.JSONString(i.GRC20ID) +
19		`,"issuer":` + meta.JSONString(i.Issuer.String()) +
20		`,"creator":` + meta.JSONString(i.Creator.String()) +
21		`,"mode":` + meta.JSONString(i.Mode) +
22		`,"name":` + meta.JSONString(i.Name) +
23		`,"ticker":` + meta.JSONString(i.Ticker) +
24		`,"decimals":` + strconv.Itoa(i.Decimals) +
25		`,"initialSupply":` + meta.JSONString(strconv.FormatInt(i.InitialSupply, 10)) +
26		`,"maxSupply":` + meta.JSONString(strconv.FormatInt(i.MaxSupply, 10)) +
27		`,"totalSupply":` + meta.JSONString(strconv.FormatInt(e.token.TotalSupply(), 10)) +
28		`,"configVersion":` + meta.JSONString(strconv.FormatInt(i.ConfigVersion, 10)) +
29		`,"currencyKey":` + meta.JSONString(i.CurrencyKey) +
30		`,"description":` + meta.JSONString(i.Metadata.Description) +
31		`,"image":` + meta.JSONString(i.Metadata.Image) +
32		`,"website":` + meta.JSONString(i.Metadata.Website) +
33		`,"xHandle":` + meta.JSONString(i.Metadata.XHandle) +
34		`,"telegram":` + meta.JSONString(i.Metadata.Telegram) +
35		`,"metadataFrozen":` + strconv.FormatBool(i.MetadataFrozen) +
36		`,"mintAuthority":` + meta.JSONString(i.MintAuthority.String()) +
37		`,"pendingMintAuthority":` + meta.JSONString(i.PendingMintAuth.String()) +
38		`,"mintRenounced":` + strconv.FormatBool(i.MintRenounced) + "}"
39}
40
41func TokenJSON(id string) string { return infoJSON(mustEntry(id)) }
42
43// ListTokensJSON returns a zero-based page; page size is strictly 1..100.
44func ListTokensJSON(page, size int64) string {
45	if page < 0 || size < 1 || size > 100 {
46		panic("launchpad/tokens: invalid page")
47	}
48	offset := sm.Mul(page, size)
49	if offset >= Count() {
50		return "[]"
51	}
52	end := offset + size
53	if end > Count() {
54		end = Count()
55	}
56	var b strings.Builder
57	b.WriteByte('[')
58	for i := offset; i < end; i++ {
59		if i > offset {
60			b.WriteByte(',')
61		}
62		// Entry i of the list is the token created (i+1)th.
63		b.WriteString(infoJSON(mustEntry("T" + strconv.FormatInt(i+1, 10))))
64	}
65	b.WriteByte(']')
66	return b.String()
67}