/
program.go
132 lines (118 loc) · 3.98 KB
/
program.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package main
import (
"fmt"
"github.com/alecthomas/kong"
"io/ioutil"
"math/rand"
"path"
"strconv"
"strings"
"time"
)
var CLI struct {
Kitten struct {
TestNet bool `name:"testnet" help:"If set, emits for testnet"`
OutputFolder string `arg:"" name:"path" help:"Output folder to save the file(s)"`
MessageList string `arg:"" name:"messages" help:"Message list for kittens"`
Number int `arg:"" name:"tokenID" help:"First Token Offset (without the 1 << 64)"`
} `cmd:"" help:"Generate a airdrop for kittens"`
Special struct {
TestNet bool `name:"testnet" help:"If set, emits for testnet"`
OutputFolder string `arg:"" name:"path" help:"Output folder to save the file(s)"`
Number int `arg:"" name:"tokenID" help:"TokenID"`
SpecialMessage string `arg:"" name:"message" help:"Message for the special NFT"`
} `cmd:"" help:"Generate a special NFT"`
Common struct {
TestNet bool `name:"testnet" help:"If set, emits for testnet"`
EarlyAdopter bool `name:"early-adopter" help:"If set, emits NFT with early adopter flag"`
OutputFolder string `arg:"" name:"path" help:"Output folder to save the file(s)"`
RangeStart int `arg:"" help:"Start range for the tokenID"`
RangeEnd int `arg:"" help:"End range for the tokenID"`
} `cmd:"" help:"Generate a common NFT"`
}
func main() {
rand.Seed(time.Now().UnixNano())
ctx := kong.Parse(&CLI)
switch ctx.Command() {
case "kitten <path> <messages> <tokenID>":
runKittenAirdrop()
case "special <path> <tokenID> <message>":
runSpecial()
case "common <path> <range-start> <range-end>":
runCommon()
default:
_ = ctx.PrintUsage(true)
return
}
}
func runKittenAirdrop() {
url := baseUrl
if CLI.Kitten.TestNet {
url = baseTestNetURL
}
messagesData, err := ioutil.ReadFile(CLI.Kitten.MessageList)
if err != nil {
panic(err)
}
messages := removeEmptyElements(strings.Split(string(messagesData), "\n"))
shuffleStringSlice(messages)
fmt.Printf("There are %d messages\n", len(messages))
currentNumber := specialIDPrefix.Clone()
currentNumber.AddUint64(currentNumber, uint64(CLI.Kitten.Number))
fmt.Printf("Starts at ID %s\n", currentNumber.String())
for i := 0; i < len(messages); i++ {
n := currentNumber.ToBig().String()
fmt.Printf("ID: %s -> %s\n", n, messages[i])
img, data := generateN(n, true, true, messages[i], url)
imgFilename := path.Join(CLI.Kitten.OutputFolder, fmt.Sprintf("%s.jpg", n))
jsonFilename := path.Join(CLI.Kitten.OutputFolder, fmt.Sprintf("%s.json", n))
err := saveImage(img, imgFilename)
if err != nil {
panic(err)
}
err = saveMetadata(*data, jsonFilename)
if err != nil {
panic(err)
}
fmt.Printf("Image saved to %q\nMetadata saved to %q\n", imgFilename, jsonFilename)
currentNumber.AddUint64(currentNumber, uint64(1))
}
}
func runSpecial() {
url := baseUrl
if CLI.Special.TestNet {
url = baseTestNetURL
}
img, data := generateN(strconv.FormatInt(int64(CLI.Special.Number), 10), true, false, CLI.Special.SpecialMessage, url)
imgFilename := path.Join(CLI.Special.OutputFolder, fmt.Sprintf("%d.jpg", CLI.Special.Number))
jsonFilename := path.Join(CLI.Special.OutputFolder, fmt.Sprintf("%d.json", CLI.Special.Number))
err := saveImage(img, imgFilename)
if err != nil {
panic(err)
}
err = saveMetadata(*data, jsonFilename)
if err != nil {
panic(err)
}
fmt.Printf("Image saved to %q\nMetadata saved to %q\n", imgFilename, jsonFilename)
}
func runCommon() {
url := baseUrl
if CLI.Common.TestNet {
url = baseTestNetURL
}
for i := CLI.Common.RangeStart; i < CLI.Common.RangeEnd; i++ {
img, data := generateN(strconv.FormatInt(int64(i), 10), false, CLI.Common.EarlyAdopter, "", url)
imgFilename := path.Join(CLI.Common.OutputFolder, fmt.Sprintf("%d.jpg", i))
jsonFilename := path.Join(CLI.Common.OutputFolder, fmt.Sprintf("%d.json", i))
err := saveImage(img, imgFilename)
if err != nil {
panic(err)
}
err = saveMetadata(*data, jsonFilename)
if err != nil {
panic(err)
}
fmt.Printf("Generated %q\n", imgFilename)
}
}