From 926187d023095baa7f801b8f29f3d981ed0f304c Mon Sep 17 00:00:00 2001 From: Riccardo Montagnin Date: Wed, 18 Oct 2023 11:17:45 -0500 Subject: [PATCH] feat: added back JoinMessageParser function --- .../messages/{account_parser.go => types.go} | 34 ++++++------------- modules/messages/utils.go | 22 +++++++++++- 2 files changed, 32 insertions(+), 24 deletions(-) rename modules/messages/{account_parser.go => types.go} (58%) diff --git a/modules/messages/account_parser.go b/modules/messages/types.go similarity index 58% rename from modules/messages/account_parser.go rename to modules/messages/types.go index 1a2ec37d..05b9e9dc 100644 --- a/modules/messages/account_parser.go +++ b/modules/messages/types.go @@ -1,19 +1,10 @@ package messages import ( - "fmt" - - "github.com/gogo/protobuf/proto" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/forbole/juno/v5/types" ) -// MessageNotSupported returns an error telling that the given message is not supported -func MessageNotSupported(msg sdk.Msg) error { - return fmt.Errorf("message type not supported: %s", proto.MessageName(msg)) -} - // MessageAddressesParser represents a function that extracts all the // involved addresses from a provided message (both accounts and validators) type MessageAddressesParser = func(tx *types.Tx) ([]string, error) @@ -25,8 +16,7 @@ var CosmosMessageAddressesParser = DefaultMessagesParser // DefaultMessagesParser represents the default messages parser that simply returns the list // of all the signers of a message func DefaultMessagesParser(tx *types.Tx) ([]string, error) { - allAddressess := parseAddressesFromEvents(tx) - return allAddressess, nil + return parseAddressesFromEvents(tx), nil } // function to remove duplicate values @@ -43,28 +33,26 @@ func removeDuplicates(s []string) []string { } func parseAddressesFromEvents(tx *types.Tx) []string { - var allAddressess []string - + var addresses []string for _, event := range tx.Events { for _, attribute := range event.Attributes { - // check if event value is validator address - valAddresss, _ := sdk.ValAddressFromBech32(attribute.Value) - if valAddresss != nil { - allAddressess = append(allAddressess, valAddresss.String()) + // Try parsing the address as a validator address + validatorAddress, _ := sdk.ValAddressFromBech32(string(attribute.Value)) + if validatorAddress != nil { + addresses = append(addresses, validatorAddress.String()) } - // check if event value is sdk address - sdkAddress, err := sdk.AccAddressFromBech32(attribute.Value) + // Try parsing the address as an account address + accountAddress, err := sdk.AccAddressFromBech32(string(attribute.Value)) if err != nil { - // skip if value is not sdk address + // Skip if the address is not an account address continue } - allAddressess = append(allAddressess, sdkAddress.String()) + addresses = append(addresses, accountAddress.String()) } } - allInvolvedAddresses := removeDuplicates(allAddressess) - return allInvolvedAddresses + return removeDuplicates(addresses) } diff --git a/modules/messages/utils.go b/modules/messages/utils.go index 99d27ef4..5538657f 100644 --- a/modules/messages/utils.go +++ b/modules/messages/utils.go @@ -1,6 +1,10 @@ package messages -import "unicode/utf8" +import ( + "unicode/utf8" + + "github.com/forbole/juno/v5/types" +) func TrimLastChar(s string) string { r, size := utf8.DecodeLastRuneInString(s) @@ -9,3 +13,19 @@ func TrimLastChar(s string) string { } return s[:len(s)-size] } + +// JoinMessageParsers joins together all the given parsers, calling them in order +func JoinMessageParsers(parsers ...MessageAddressesParser) MessageAddressesParser { + return func(tx *types.Tx) ([]string, error) { + for _, parser := range parsers { + // Try getting the addresses + addresses, _ := parser(tx) + + // If some addresses are found, return them + if len(addresses) > 0 { + return addresses, nil + } + } + return DefaultMessagesParser(tx) + } +}