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}