Skip to content

Commit 5ca6d22

Browse files
committed
chore: update tools converter
1 parent 08d7a2e commit 5ca6d22

File tree

1 file changed

+44
-23
lines changed

1 file changed

+44
-23
lines changed

tools/converter.go

+44-23
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,26 @@ package main
22

33
import (
44
"bufio"
5+
"encoding/json"
56
"flag"
67
"fmt"
78
"log"
89
"os"
910
"strings"
1011

1112
"github.com/btcsuite/btcutil/bech32"
13+
"github.com/cometbft/cometbft/crypto"
14+
"github.com/cosmos/cosmos-sdk/types"
1215
)
1316

17+
// GetModuleAddress computes the address for a given module name with a specific prefix.
18+
func GetModuleAddress(moduleName string) types.AccAddress {
19+
return types.AccAddress(crypto.AddressHash([]byte(moduleName)))
20+
}
21+
1422
// convertAddresses takes a list of addresses and converts them from oldPrefix to newPrefix.
15-
func convertAddresses(addressList []string, oldPrefix, newPrefix string) ([]string, error) {
16-
var convertedAddresses []string
23+
func convertAddresses(addressList []string, oldPrefix, newPrefix string) (map[string]string, error) {
24+
convertedMap := make(map[string]string)
1725

1826
for _, address := range addressList {
1927
hrp, data, err := bech32.Decode(address)
@@ -26,18 +34,16 @@ func convertAddresses(addressList []string, oldPrefix, newPrefix string) ([]stri
2634
return nil, fmt.Errorf("expected prefix '%s', but got '%s' for address '%s'", oldPrefix, hrp, address)
2735
}
2836

29-
// Encode with the new prefix
3037
mainnetAddress, err := bech32.Encode(newPrefix, data)
3138
if err != nil {
3239
return nil, fmt.Errorf("failed to encode address %s with new prefix %s: %w", address, newPrefix, err)
3340
}
3441

35-
convertedAddresses = append(convertedAddresses, mainnetAddress)
42+
convertedMap[address] = mainnetAddress
3643
}
37-
return convertedAddresses, nil
44+
return convertedMap, nil
3845
}
3946

40-
// readAddressesFromFile reads a file line by line and returns a slice of addresses.
4147
func readAddressesFromFile(filename string) ([]string, error) {
4248
var addresses []string
4349

@@ -59,23 +65,21 @@ func readAddressesFromFile(filename string) ([]string, error) {
5965
return addresses, nil
6066
}
6167

62-
// writeAddressesToFile writes a slice of addresses to a file, one per line.
63-
func writeAddressesToFile(filename string, addresses []string) error {
68+
// writeAddressesToJSONFile writes a map of old-to-new addresses to a JSON file.
69+
func writeAddressesToJSONFile(filename string, addressMap map[string]string) error {
6470
file, err := os.Create(filename)
6571
if err != nil {
6672
return fmt.Errorf("failed to create file %s: %w", filename, err)
6773
}
6874
defer file.Close()
6975

70-
writer := bufio.NewWriter(file)
71-
for _, address := range addresses {
72-
_, err := writer.WriteString(address + "\n")
73-
if err != nil {
74-
return fmt.Errorf("failed to write to file %s: %w", filename, err)
75-
}
76+
encoder := json.NewEncoder(file)
77+
encoder.SetIndent("", " ")
78+
if err := encoder.Encode(addressMap); err != nil {
79+
return fmt.Errorf("failed to write JSON to file %s: %w", filename, err)
7680
}
7781

78-
return writer.Flush()
82+
return nil
7983
}
8084

8185
func main() {
@@ -84,19 +88,38 @@ func main() {
8488
newPrefix := flag.String("newPrefix", "", "New prefix to replace the old prefix")
8589
addresses := flag.String("addresses", "", "Comma-separated list of addresses to convert")
8690
addressFile := flag.String("file", "", "File containing list of addresses to convert (one per line)")
91+
moduleName := flag.String("module", "", "Module name to generate the address for")
8792

8893
// Parse command-line arguments
8994
flag.Parse()
9095

91-
// Check for required arguments
96+
cfg := types.GetConfig()
97+
98+
if *newPrefix == "arkeo" {
99+
cfg.SetBech32PrefixForAccount("arkeo", "arkeopub")
100+
} else if *newPrefix == "tarkeo" {
101+
cfg.SetBech32PrefixForAccount("tarkeo", "tarkeopub")
102+
} else {
103+
log.Fatalf("Unsupported module prefix '%s'. Supported prefixes are 'arkeo' and 'tarkeo'.", *newPrefix)
104+
}
105+
106+
// Module address generation operation
107+
if *moduleName != "" {
108+
109+
moduleAddr := GetModuleAddress(*moduleName)
110+
111+
fmt.Printf("Generated address for module '%s': %s\n", *moduleName, moduleAddr)
112+
return
113+
}
114+
115+
// Address conversion operation
92116
if *oldPrefix == "" || *newPrefix == "" {
93117
log.Fatal("Usage: go run converter.go -oldPrefix=<oldPrefix> -newPrefix=<newPrefix> -addresses=<comma-separated addresses> or -file=<filename>")
94118
}
95119

96120
var addressList []string
97121
var err error
98122

99-
// Determine source of addresses (file or list)
100123
if *addressFile != "" {
101124
addressList, err = readAddressesFromFile(*addressFile)
102125
if err != nil {
@@ -108,18 +131,16 @@ func main() {
108131
log.Fatal("Please provide addresses either through -addresses or -file option.")
109132
}
110133

111-
// Convert addresses
112-
convertedAddresses, err := convertAddresses(addressList, *oldPrefix, *newPrefix)
134+
convertedMap, err := convertAddresses(addressList, *oldPrefix, *newPrefix)
113135
if err != nil {
114136
log.Fatalf("Error converting addresses: %v", err)
115137
}
116138

117-
// Write converted addresses to file
118-
outputFile := "converted.txt"
119-
err = writeAddressesToFile(outputFile, convertedAddresses)
139+
outputFile := "converted.json"
140+
err = writeAddressesToJSONFile(outputFile, convertedMap)
120141
if err != nil {
121142
log.Fatalf("Error writing converted addresses to file: %v", err)
122143
}
123144

124-
fmt.Printf("Converted addresses written to %s\n", outputFile)
145+
fmt.Printf("Converted addresses written to %s", outputFile)
125146
}

0 commit comments

Comments
 (0)