From 4f31368e878ccb6056864207ca8906eb7c9a098d Mon Sep 17 00:00:00 2001 From: jonathansumner Date: Tue, 16 Apr 2024 15:33:01 +0100 Subject: [PATCH 1/8] feat: address processing --- cmd/fetchd/cmd/genasiupgrade.go | 127 +++++++++++++++++++++++++++++++- 1 file changed, 125 insertions(+), 2 deletions(-) diff --git a/cmd/fetchd/cmd/genasiupgrade.go b/cmd/fetchd/cmd/genasiupgrade.go index c3d023c5..34d9d90d 100644 --- a/cmd/fetchd/cmd/genasiupgrade.go +++ b/cmd/fetchd/cmd/genasiupgrade.go @@ -1,8 +1,18 @@ package cmd import ( + "encoding/json" + "fmt" + "github.com/btcsuite/btcutil/bech32" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/server" + cosmostypes "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/genutil" + genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" "github.com/spf13/cobra" + "regexp" + "strings" ) const ( @@ -39,7 +49,30 @@ func ASIGenesisUpgradeCmd(defaultNodeHome string) *cobra.Command { Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) error { - return nil + clientCtx := client.GetClientContextFromCmd(cmd) + + serverCtx := server.GetServerContextFromCmd(cmd) + config := serverCtx.Config + + config.SetRoot(clientCtx.HomeDir) + + genFile := config.GenesisFile() + + appState, genDoc, err := genutiltypes.GenesisStateFromGenFile(genFile) + if err != nil { + return fmt.Errorf("failed to unmarshal genesis state: %w", err) + } + + appStateJSON, err := json.Marshal(appState) + if err != nil { + return fmt.Errorf("failed to marshal application genesis state: %w", err) + } + + appStateStr := string(appStateJSON) + // replace addresses across the genesis file + ASIGenesisUpgradeReplaceAddresses(&appStateStr) + + return genutil.ExportGenesisFile(genDoc, genFile) }, } @@ -57,8 +90,98 @@ func ASIGenesisUpgradeReplaceChainID() {} func ASIGenesisUpgradeReplaceDenom() {} -func ASIGenesisUpgradeReplaceAddresses() {} +func ASIGenesisUpgradeReplaceAddresses(jsonString *string) { + // account addresses + replaceAddresses(AccAddressPrefix, jsonString, AddrDataLength+AddrChecksumLength) + // validator addresses + replaceAddresses(ValAddressPrefix, jsonString, AddrDataLength+AddrChecksumLength) + // consensus addresses + replaceAddresses(ConsAddressPrefix, jsonString, AddrDataLength+AddrChecksumLength) + // contract addresses + replaceAddresses(AccAddressPrefix, jsonString, WasmDataLength+AddrChecksumLength) +} + +func replaceAddresses(addressTypePrefix string, jsonString *string, dataLength int) { + re := regexp.MustCompile(fmt.Sprintf(`"%s%s1([%s]{%d})"`, OldAddrPrefix, addressTypePrefix, Bech32Chars, dataLength)) + matches := re.FindAllString(*jsonString, -1) + + replacements := make(map[string]string, len(matches)) + for _, match := range matches { + matchedAddr := strings.ReplaceAll(match, `"`, "") + _, decodedAddrData, err := bech32.Decode(matchedAddr) + if err != nil { + panic(err) + } + + newAddress, err := bech32.Encode(NewAddrPrefix+addressTypePrefix, decodedAddrData) + if err != nil { + panic(err) + } + + err = cosmostypes.VerifyAddressFormat(decodedAddrData) + if err != nil { + panic(err) + } + + switch addressTypePrefix { + case AccAddressPrefix: + _, err = cosmostypes.AccAddressFromBech32(newAddress) + case ValAddressPrefix: + _, err = cosmostypes.ValAddressFromBech32(newAddress) + case ConsAddressPrefix: + _, err = cosmostypes.ConsAddressFromBech32(newAddress) + default: + panic("invalid address type prefix") + } + if err != nil { + panic(err) + } + replacements[matchedAddr] = newAddress + } + + var jsonData map[string]interface{} + err := json.Unmarshal([]byte(*jsonString), &jsonData) + if err != nil { + panic(err) + } + + modified := crawlJson(jsonData, func(data interface{}) interface{} { + if str, ok := data.(string); ok { + if !re.MatchString(fmt.Sprintf(`"%s"`, str)) || len(str) > 200 { + return data + } + + return replacements[str] + } + return data + }) + + modifiedJSON, err := json.Marshal(modified) + if err != nil { + panic(err) + } + *jsonString = string(modifiedJSON) +} func ASIGenesisUpgradeWithdrawIBCChannelsBalances() {} func ASIGenesisUpgradeWithdrawReconciliationBalances() {} + +func crawlJson(data interface{}, strHandler func(interface{}) interface{}) interface{} { + switch value := data.(type) { + case string: + if strHandler != nil { + return strHandler(data) + } + case []interface{}: + for i := range value { + value[i] = crawlJson(value[i], strHandler) + } + case map[string]interface{}: + for k := range value { + value[k] = crawlJson(value[k], strHandler) + } + default: + } + return data +} From 84c475ac424a527ef0796cf5d1e0a1fc164cff05 Mon Sep 17 00:00:00 2001 From: jonathansumner Date: Tue, 16 Apr 2024 19:41:37 +0100 Subject: [PATCH 2/8] fix: replace import --- cmd/fetchd/cmd/genasiupgrade.go | 9 +++++---- go.mod | 2 ++ go.sum | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/cmd/fetchd/cmd/genasiupgrade.go b/cmd/fetchd/cmd/genasiupgrade.go index cf05dad7..45f52a78 100644 --- a/cmd/fetchd/cmd/genasiupgrade.go +++ b/cmd/fetchd/cmd/genasiupgrade.go @@ -11,6 +11,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/genutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" "github.com/spf13/cobra" + "github.com/tendermint/tendermint/types" "regexp" "strings" ) @@ -59,12 +60,12 @@ func ASIGenesisUpgradeCmd(defaultNodeHome string) *cobra.Command { genFile := config.GenesisFile() appState, genDoc, err := genutiltypes.GenesisStateFromGenFile(genFile) - + if err != nil { return fmt.Errorf("failed to unmarshal genesis state: %w", err) } - appStateJSON, err := json.Marshal(appState) + appStateJSON, err := json.Marshal(appState) if err != nil { return fmt.Errorf("failed to marshal application genesis state: %w", err) } @@ -73,10 +74,10 @@ func ASIGenesisUpgradeCmd(defaultNodeHome string) *cobra.Command { // replace addresses across the genesis file ASIGenesisUpgradeReplaceAddresses(&appStateStr) - // replace chain-id + // replace chain-id ASIGenesisUpgradeReplaceChainID(genDoc) - return genutil.ExportGenesisFile(genDoc, genFile) + return genutil.ExportGenesisFile(genDoc, genFile) }, } diff --git a/go.mod b/go.mod index 32d3950a..b446d809 100644 --- a/go.mod +++ b/go.mod @@ -16,6 +16,8 @@ require ( github.com/tendermint/tm-db v0.6.7 ) +require github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce + require ( filippo.io/edwards25519 v1.0.0-beta.2 // indirect github.com/99designs/keyring v1.1.6 // indirect diff --git a/go.sum b/go.sum index a83afb2d..6467bd8d 100644 --- a/go.sum +++ b/go.sum @@ -122,6 +122,7 @@ github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+q github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= From 4b1f79f33dbeb11fa79ec61451ff81baab5cde9f Mon Sep 17 00:00:00 2001 From: jonathansumner Date: Wed, 17 Apr 2024 14:48:12 +0100 Subject: [PATCH 3/8] fix: save changes to genesis.json --- cmd/fetchd/cmd/genasiupgrade.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/fetchd/cmd/genasiupgrade.go b/cmd/fetchd/cmd/genasiupgrade.go index 45f52a78..74afe5ab 100644 --- a/cmd/fetchd/cmd/genasiupgrade.go +++ b/cmd/fetchd/cmd/genasiupgrade.go @@ -77,6 +77,7 @@ func ASIGenesisUpgradeCmd(defaultNodeHome string) *cobra.Command { // replace chain-id ASIGenesisUpgradeReplaceChainID(genDoc) + genDoc.AppState = []byte(appStateStr) return genutil.ExportGenesisFile(genDoc, genFile) }, } From 24e4a3cfbfa9af0d047d429e74ec860b9e7d2dbe Mon Sep 17 00:00:00 2001 From: jonathansumner Date: Thu, 18 Apr 2024 14:38:13 +0100 Subject: [PATCH 4/8] refactor: condense repeated code --- cmd/fetchd/cmd/genasiupgrade.go | 63 +++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/cmd/fetchd/cmd/genasiupgrade.go b/cmd/fetchd/cmd/genasiupgrade.go index 74afe5ab..b22673a6 100644 --- a/cmd/fetchd/cmd/genasiupgrade.go +++ b/cmd/fetchd/cmd/genasiupgrade.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/server" - cosmostypes "github.com/cosmos/cosmos-sdk/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/genutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" "github.com/spf13/cobra" @@ -116,28 +116,18 @@ func replaceAddresses(addressTypePrefix string, jsonString *string, dataLength i replacements := make(map[string]string, len(matches)) for _, match := range matches { matchedAddr := strings.ReplaceAll(match, `"`, "") - _, decodedAddrData, err := bech32.Decode(matchedAddr) - if err != nil { - panic(err) - } - - newAddress, err := bech32.Encode(NewAddrPrefix+addressTypePrefix, decodedAddrData) - if err != nil { - panic(err) - } - - err = cosmostypes.VerifyAddressFormat(decodedAddrData) + newAddress, err := convertAddressToASI(matchedAddr, addressTypePrefix) if err != nil { panic(err) } switch addressTypePrefix { case AccAddressPrefix: - _, err = cosmostypes.AccAddressFromBech32(newAddress) + _, err = sdk.AccAddressFromBech32(newAddress) case ValAddressPrefix: - _, err = cosmostypes.ValAddressFromBech32(newAddress) + _, err = sdk.ValAddressFromBech32(newAddress) case ConsAddressPrefix: - _, err = cosmostypes.ConsAddressFromBech32(newAddress) + _, err = sdk.ConsAddressFromBech32(newAddress) default: panic("invalid address type prefix") } @@ -153,15 +143,15 @@ func replaceAddresses(addressTypePrefix string, jsonString *string, dataLength i panic(err) } - modified := crawlJson(jsonData, func(data interface{}) interface{} { - if str, ok := data.(string); ok { + modified := crawlJson(nil, jsonData, func(key interface{}, value interface{}) interface{} { + if str, ok := value.(string); ok { if !re.MatchString(fmt.Sprintf(`"%s"`, str)) || len(str) > 200 { - return data + return value } return replacements[str] } - return data + return value }) modifiedJSON, err := json.Marshal(modified) @@ -175,21 +165,40 @@ func ASIGenesisUpgradeWithdrawIBCChannelsBalances() {} func ASIGenesisUpgradeWithdrawReconciliationBalances() {} -func crawlJson(data interface{}, strHandler func(interface{}) interface{}) interface{} { - switch value := data.(type) { +func crawlJson(key interface{}, value interface{}, strHandler func(interface{}, interface{}) interface{}) interface{} { + switch val := value.(type) { case string: if strHandler != nil { - return strHandler(data) + return strHandler(key, val) } case []interface{}: - for i := range value { - value[i] = crawlJson(value[i], strHandler) + for i := range val { + val[i] = crawlJson(nil, val[i], strHandler) } case map[string]interface{}: - for k := range value { - value[k] = crawlJson(value[k], strHandler) + for k := range val { + val[k] = crawlJson(k, val[k], strHandler) } default: } - return data + return value +} + +func convertAddressToASI(addr string, addressPrefix string) (string, error) { + _, decodedAddrData, err := bech32.Decode(addr) + if err != nil { + return "", err + } + + newAddress, err := bech32.Encode(NewAddrPrefix+addressPrefix, decodedAddrData) + if err != nil { + return "", err + } + + err = sdk.VerifyAddressFormat(decodedAddrData) + if err != nil { + return "", err + } + + return newAddress, nil } From c980eff4896ed8f050e87b9bd4ec52bca4fc85a0 Mon Sep 17 00:00:00 2001 From: jonathansumner Date: Thu, 18 Apr 2024 15:28:35 +0100 Subject: [PATCH 5/8] refactor: remove unnecessary address map --- cmd/fetchd/cmd/genasiupgrade.go | 46 ++++++++++++++------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/cmd/fetchd/cmd/genasiupgrade.go b/cmd/fetchd/cmd/genasiupgrade.go index b22673a6..612f10ce 100644 --- a/cmd/fetchd/cmd/genasiupgrade.go +++ b/cmd/fetchd/cmd/genasiupgrade.go @@ -13,7 +13,6 @@ import ( "github.com/spf13/cobra" "github.com/tendermint/tendermint/types" "regexp" - "strings" ) const ( @@ -111,31 +110,6 @@ func ASIGenesisUpgradeReplaceAddresses(jsonString *string) { func replaceAddresses(addressTypePrefix string, jsonString *string, dataLength int) { re := regexp.MustCompile(fmt.Sprintf(`"%s%s1([%s]{%d})"`, OldAddrPrefix, addressTypePrefix, Bech32Chars, dataLength)) - matches := re.FindAllString(*jsonString, -1) - - replacements := make(map[string]string, len(matches)) - for _, match := range matches { - matchedAddr := strings.ReplaceAll(match, `"`, "") - newAddress, err := convertAddressToASI(matchedAddr, addressTypePrefix) - if err != nil { - panic(err) - } - - switch addressTypePrefix { - case AccAddressPrefix: - _, err = sdk.AccAddressFromBech32(newAddress) - case ValAddressPrefix: - _, err = sdk.ValAddressFromBech32(newAddress) - case ConsAddressPrefix: - _, err = sdk.ConsAddressFromBech32(newAddress) - default: - panic("invalid address type prefix") - } - if err != nil { - panic(err) - } - replacements[matchedAddr] = newAddress - } var jsonData map[string]interface{} err := json.Unmarshal([]byte(*jsonString), &jsonData) @@ -148,8 +122,26 @@ func replaceAddresses(addressTypePrefix string, jsonString *string, dataLength i if !re.MatchString(fmt.Sprintf(`"%s"`, str)) || len(str) > 200 { return value } + newAddress, err := convertAddressToASI(str, addressTypePrefix) + if err != nil { + panic(err) + } + + switch addressTypePrefix { + case AccAddressPrefix: + _, err = sdk.AccAddressFromBech32(newAddress) + case ValAddressPrefix: + _, err = sdk.ValAddressFromBech32(newAddress) + case ConsAddressPrefix: + _, err = sdk.ConsAddressFromBech32(newAddress) + default: + panic("invalid address type prefix") + } + if err != nil { + panic(err) + } - return replacements[str] + return newAddress } return value }) From b7d7ac09f6622db6bee2e7c8ba53c24160a2234f Mon Sep 17 00:00:00 2001 From: jonathansumner Date: Thu, 18 Apr 2024 15:44:49 +0100 Subject: [PATCH 6/8] wip: change regex --- cmd/fetchd/cmd/genasiupgrade.go | 37 +++++++++++++-------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/cmd/fetchd/cmd/genasiupgrade.go b/cmd/fetchd/cmd/genasiupgrade.go index 612f10ce..fddd8727 100644 --- a/cmd/fetchd/cmd/genasiupgrade.go +++ b/cmd/fetchd/cmd/genasiupgrade.go @@ -70,8 +70,13 @@ func ASIGenesisUpgradeCmd(defaultNodeHome string) *cobra.Command { } appStateStr := string(appStateJSON) + var jsonData map[string]interface{} + if err = json.Unmarshal([]byte(appStateStr), &jsonData); err != nil { + return fmt.Errorf("failed to unmarshal app state: %w", err) + } + // replace addresses across the genesis file - ASIGenesisUpgradeReplaceAddresses(&appStateStr) + ASIGenesisUpgradeReplaceAddresses(&jsonData) // replace chain-id ASIGenesisUpgradeReplaceChainID(genDoc) @@ -97,29 +102,23 @@ func ASIGenesisUpgradeReplaceChainID(genesisData *types.GenesisDoc) { func ASIGenesisUpgradeReplaceDenom() {} -func ASIGenesisUpgradeReplaceAddresses(jsonString *string) { +func ASIGenesisUpgradeReplaceAddresses(jsonData *map[string]interface{}) { // account addresses - replaceAddresses(AccAddressPrefix, jsonString, AddrDataLength+AddrChecksumLength) + replaceAddresses(AccAddressPrefix, jsonData, AddrDataLength+AddrChecksumLength) // validator addresses - replaceAddresses(ValAddressPrefix, jsonString, AddrDataLength+AddrChecksumLength) + replaceAddresses(ValAddressPrefix, jsonData, AddrDataLength+AddrChecksumLength) // consensus addresses - replaceAddresses(ConsAddressPrefix, jsonString, AddrDataLength+AddrChecksumLength) + replaceAddresses(ConsAddressPrefix, jsonData, AddrDataLength+AddrChecksumLength) // contract addresses - replaceAddresses(AccAddressPrefix, jsonString, WasmDataLength+AddrChecksumLength) + replaceAddresses(AccAddressPrefix, jsonData, WasmDataLength+AddrChecksumLength) } -func replaceAddresses(addressTypePrefix string, jsonString *string, dataLength int) { - re := regexp.MustCompile(fmt.Sprintf(`"%s%s1([%s]{%d})"`, OldAddrPrefix, addressTypePrefix, Bech32Chars, dataLength)) - - var jsonData map[string]interface{} - err := json.Unmarshal([]byte(*jsonString), &jsonData) - if err != nil { - panic(err) - } +func replaceAddresses(addressTypePrefix string, jsonData *map[string]interface{}, dataLength int) { + re := regexp.MustCompile(fmt.Sprintf(`^%s%s1([%s]{%d})$`, OldAddrPrefix, addressTypePrefix, Bech32Chars, dataLength)) - modified := crawlJson(nil, jsonData, func(key interface{}, value interface{}) interface{} { + crawlJson(nil, &jsonData, func(key interface{}, value interface{}) interface{} { if str, ok := value.(string); ok { - if !re.MatchString(fmt.Sprintf(`"%s"`, str)) || len(str) > 200 { + if !re.MatchString(fmt.Sprintf(`%s`, str)) { return value } newAddress, err := convertAddressToASI(str, addressTypePrefix) @@ -145,12 +144,6 @@ func replaceAddresses(addressTypePrefix string, jsonString *string, dataLength i } return value }) - - modifiedJSON, err := json.Marshal(modified) - if err != nil { - panic(err) - } - *jsonString = string(modifiedJSON) } func ASIGenesisUpgradeWithdrawIBCChannelsBalances() {} From ebd8fcef62ca1e71dcda978fa722b7371d9e85d6 Mon Sep 17 00:00:00 2001 From: jonathansumner Date: Thu, 18 Apr 2024 17:43:02 +0100 Subject: [PATCH 7/8] refactor: use json structure instead of genState struct --- cmd/fetchd/cmd/genasiupgrade.go | 61 ++++++++++++--------------------- 1 file changed, 22 insertions(+), 39 deletions(-) diff --git a/cmd/fetchd/cmd/genasiupgrade.go b/cmd/fetchd/cmd/genasiupgrade.go index fddd8727..508e60d8 100644 --- a/cmd/fetchd/cmd/genasiupgrade.go +++ b/cmd/fetchd/cmd/genasiupgrade.go @@ -58,30 +58,28 @@ func ASIGenesisUpgradeCmd(defaultNodeHome string) *cobra.Command { genFile := config.GenesisFile() - appState, genDoc, err := genutiltypes.GenesisStateFromGenFile(genFile) - + _, genDoc, err := genutiltypes.GenesisStateFromGenFile(genFile) if err != nil { return fmt.Errorf("failed to unmarshal genesis state: %w", err) } - appStateJSON, err := json.Marshal(appState) - if err != nil { - return fmt.Errorf("failed to marshal application genesis state: %w", err) - } - - appStateStr := string(appStateJSON) var jsonData map[string]interface{} - if err = json.Unmarshal([]byte(appStateStr), &jsonData); err != nil { + if err = json.Unmarshal(genDoc.AppState, &jsonData); err != nil { return fmt.Errorf("failed to unmarshal app state: %w", err) } // replace addresses across the genesis file - ASIGenesisUpgradeReplaceAddresses(&jsonData) + ASIGenesisUpgradeReplaceAddresses(jsonData) // replace chain-id ASIGenesisUpgradeReplaceChainID(genDoc) - genDoc.AppState = []byte(appStateStr) + var encodedAppState []byte + if encodedAppState, err = json.Marshal(jsonData); err != nil { + return err + } + + genDoc.AppState = encodedAppState return genutil.ExportGenesisFile(genDoc, genFile) }, } @@ -102,7 +100,7 @@ func ASIGenesisUpgradeReplaceChainID(genesisData *types.GenesisDoc) { func ASIGenesisUpgradeReplaceDenom() {} -func ASIGenesisUpgradeReplaceAddresses(jsonData *map[string]interface{}) { +func ASIGenesisUpgradeReplaceAddresses(jsonData map[string]interface{}) { // account addresses replaceAddresses(AccAddressPrefix, jsonData, AddrDataLength+AddrChecksumLength) // validator addresses @@ -113,12 +111,12 @@ func ASIGenesisUpgradeReplaceAddresses(jsonData *map[string]interface{}) { replaceAddresses(AccAddressPrefix, jsonData, WasmDataLength+AddrChecksumLength) } -func replaceAddresses(addressTypePrefix string, jsonData *map[string]interface{}, dataLength int) { - re := regexp.MustCompile(fmt.Sprintf(`^%s%s1([%s]{%d})$`, OldAddrPrefix, addressTypePrefix, Bech32Chars, dataLength)) +func replaceAddresses(addressTypePrefix string, jsonData map[string]interface{}, dataLength int) { + re := regexp.MustCompile(fmt.Sprintf(`%s%s1([%s]{%d})`, OldAddrPrefix, addressTypePrefix, Bech32Chars, dataLength)) - crawlJson(nil, &jsonData, func(key interface{}, value interface{}) interface{} { + crawlJson(nil, jsonData, func(key interface{}, value interface{}) interface{} { if str, ok := value.(string); ok { - if !re.MatchString(fmt.Sprintf(`%s`, str)) { + if !re.MatchString(str) { return value } newAddress, err := convertAddressToASI(str, addressTypePrefix) @@ -126,20 +124,6 @@ func replaceAddresses(addressTypePrefix string, jsonData *map[string]interface{} panic(err) } - switch addressTypePrefix { - case AccAddressPrefix: - _, err = sdk.AccAddressFromBech32(newAddress) - case ValAddressPrefix: - _, err = sdk.ValAddressFromBech32(newAddress) - case ConsAddressPrefix: - _, err = sdk.ConsAddressFromBech32(newAddress) - default: - panic("invalid address type prefix") - } - if err != nil { - panic(err) - } - return newAddress } return value @@ -161,28 +145,27 @@ func crawlJson(key interface{}, value interface{}, strHandler func(interface{}, val[i] = crawlJson(nil, val[i], strHandler) } case map[string]interface{}: - for k := range val { - val[k] = crawlJson(k, val[k], strHandler) + for k, v := range val { + val[k] = crawlJson(k, v, strHandler) } - default: } return value } -func convertAddressToASI(addr string, addressPrefix string) (string, error) { +func convertAddressToASI(addr string, addressTypePrefix string) (string, error) { _, decodedAddrData, err := bech32.Decode(addr) if err != nil { - return "", err + return "", fmt.Errorf("failed to decode address: %w", err) } - newAddress, err := bech32.Encode(NewAddrPrefix+addressPrefix, decodedAddrData) + err = sdk.VerifyAddressFormat(decodedAddrData) if err != nil { - return "", err + return "", fmt.Errorf("failed to verify address format: %w", err) } - err = sdk.VerifyAddressFormat(decodedAddrData) + newAddress, err := bech32.Encode(NewAddrPrefix+addressTypePrefix, decodedAddrData) if err != nil { - return "", err + return "", fmt.Errorf("failed to encode new address: %w", err) } return newAddress, nil From 4a95962a159742695bbcf1567436f4ec036e29ae Mon Sep 17 00:00:00 2001 From: jonathansumner Date: Thu, 18 Apr 2024 17:51:22 +0100 Subject: [PATCH 8/8] fix: tighten up address match regex --- cmd/fetchd/cmd/genasiupgrade.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/fetchd/cmd/genasiupgrade.go b/cmd/fetchd/cmd/genasiupgrade.go index 508e60d8..05321877 100644 --- a/cmd/fetchd/cmd/genasiupgrade.go +++ b/cmd/fetchd/cmd/genasiupgrade.go @@ -112,7 +112,7 @@ func ASIGenesisUpgradeReplaceAddresses(jsonData map[string]interface{}) { } func replaceAddresses(addressTypePrefix string, jsonData map[string]interface{}, dataLength int) { - re := regexp.MustCompile(fmt.Sprintf(`%s%s1([%s]{%d})`, OldAddrPrefix, addressTypePrefix, Bech32Chars, dataLength)) + re := regexp.MustCompile(fmt.Sprintf(`^%s%s1([%s]{%d})$`, OldAddrPrefix, addressTypePrefix, Bech32Chars, dataLength)) crawlJson(nil, jsonData, func(key interface{}, value interface{}) interface{} { if str, ok := value.(string); ok {