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  }