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

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}