github.com/diadata-org/diadata@v1.4.593/pkg/dia/service/assetservice/verifiedTokens/token.go (about) 1 package verifiedTokens 2 3 import ( 4 "encoding/json" 5 "time" 6 7 "github.com/diadata-org/diadata/pkg/dia" 8 "github.com/diadata-org/diadata/pkg/utils" 9 "github.com/ethereum/go-ethereum/common" 10 ) 11 12 type TokenList struct { 13 Name string `json:"name"` 14 Timestamp time.Time `json:"timestamp"` 15 Version struct { 16 Major int `json:"major"` 17 Minor int `json:"minor"` 18 Patch int `json:"patch"` 19 } `json:"version"` 20 Keywords []string `json:"keywords"` 21 Tokens []struct { 22 Address string `json:"address"` 23 ChainID int `json:"chainId"` 24 Name string `json:"name"` 25 Symbol string `json:"symbol"` 26 Decimals int `json:"decimals"` 27 LogoURI string `json:"logoURI"` 28 } `json:"tokens"` 29 LogoURI string `json:"logoURI"` 30 } 31 32 type VerifiedTokens struct { 33 tokenList TokenList 34 tokenMap map[string]dia.Asset 35 } 36 37 func New() (*VerifiedTokens, error) { 38 var tokenList TokenList 39 b, _, err := utils.GetRequest("https://tokens.coingecko.com/uniswap/all.json") 40 if err != nil { 41 return nil, err 42 } 43 44 err = json.Unmarshal(b, &tokenList) 45 if err != nil { 46 return nil, err 47 } 48 49 tokenMap := make(map[string]dia.Asset) 50 for _, token := range tokenList.Tokens { 51 tokenMap[token.Symbol] = dia.Asset{Symbol: token.Symbol, Name: token.Name, Decimals: uint8(token.Decimals), Address: common.HexToAddress(token.Address).Hex()} 52 } 53 vt := &VerifiedTokens{tokenList: tokenList, tokenMap: tokenMap} 54 return vt, nil 55 56 } 57 58 func (vt *VerifiedTokens) AppendVerifiedTokens(assets []dia.Asset) { 59 for _, asset := range assets { 60 vt.tokenMap[asset.Symbol] = asset 61 62 } 63 } 64 65 func (vt *VerifiedTokens) Get() map[string]dia.Asset { 66 return vt.tokenMap 67 } 68 69 func (vt *VerifiedTokens) IsExists(asset dia.Asset) bool { 70 71 verifiedAsset, ok := vt.tokenMap[asset.Symbol] 72 if ok { 73 if verifiedAsset.Address == asset.Address { 74 return true 75 } 76 } 77 return false 78 79 }