github.com/status-im/status-go@v1.1.0/protocol/communities/utils.go (about) 1 package communities 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/status-im/status-go/eth-node/crypto" 8 "github.com/status-im/status-go/eth-node/types" 9 "github.com/status-im/status-go/protocol/protobuf" 10 ) 11 12 func CalculateRequestID(publicKey string, communityID types.HexBytes) types.HexBytes { 13 idString := fmt.Sprintf("%s-%s", publicKey, communityID) 14 return crypto.Keccak256([]byte(idString)) 15 } 16 17 func ExtractTokenCriteria(permissions []*CommunityTokenPermission) (erc20TokenCriteria map[uint64]map[string]*protobuf.TokenCriteria, erc721TokenCriteria map[uint64]map[string]*protobuf.TokenCriteria, ensTokenCriteria []string) { 18 erc20TokenCriteria = make(map[uint64]map[string]*protobuf.TokenCriteria) 19 erc721TokenCriteria = make(map[uint64]map[string]*protobuf.TokenCriteria) 20 ensTokenCriteria = make([]string, 0) 21 22 for _, tokenPermission := range permissions { 23 for _, tokenRequirement := range tokenPermission.TokenCriteria { 24 25 isERC721 := tokenRequirement.Type == protobuf.CommunityTokenType_ERC721 26 isERC20 := tokenRequirement.Type == protobuf.CommunityTokenType_ERC20 27 isENS := tokenRequirement.Type == protobuf.CommunityTokenType_ENS 28 29 for chainID, contractAddress := range tokenRequirement.ContractAddresses { 30 31 _, existsERC721 := erc721TokenCriteria[chainID] 32 33 if isERC721 && !existsERC721 { 34 erc721TokenCriteria[chainID] = make(map[string]*protobuf.TokenCriteria) 35 } 36 _, existsERC20 := erc20TokenCriteria[chainID] 37 38 if isERC20 && !existsERC20 { 39 erc20TokenCriteria[chainID] = make(map[string]*protobuf.TokenCriteria) 40 } 41 // TODO: check if we do not duplicate this due to ToLower case 42 _, existsERC721 = erc721TokenCriteria[chainID][contractAddress] 43 if isERC721 && !existsERC721 { 44 erc721TokenCriteria[chainID][strings.ToLower(contractAddress)] = tokenRequirement 45 } 46 47 _, existsERC20 = erc20TokenCriteria[chainID][contractAddress] 48 if isERC20 && !existsERC20 { 49 erc20TokenCriteria[chainID][strings.ToLower(contractAddress)] = tokenRequirement 50 } 51 52 if isENS { 53 ensTokenCriteria = append(ensTokenCriteria, tokenRequirement.EnsPattern) 54 } 55 } 56 } 57 } 58 return 59 }