github.com/status-im/status-go@v1.1.0/services/wallet/router/common.go (about)

     1  package router
     2  
     3  import (
     4  	"github.com/status-im/status-go/services/wallet/common"
     5  	"github.com/status-im/status-go/services/wallet/router/routes"
     6  )
     7  
     8  func removeBestRouteFromAllRouters(allRoutes []routes.Route, best routes.Route) []routes.Route {
     9  	for i := len(allRoutes) - 1; i >= 0; i-- {
    10  		route := allRoutes[i]
    11  		routeFound := true
    12  		for _, p := range route {
    13  			found := false
    14  			for _, b := range best {
    15  				if p.ProcessorName == b.ProcessorName &&
    16  					(p.FromChain == nil && b.FromChain == nil || p.FromChain.ChainID == b.FromChain.ChainID) &&
    17  					(p.ToChain == nil && b.ToChain == nil || p.ToChain.ChainID == b.ToChain.ChainID) &&
    18  					(p.FromToken == nil && b.FromToken == nil || p.FromToken.Symbol == b.FromToken.Symbol) {
    19  					found = true
    20  					break
    21  				}
    22  			}
    23  			if !found {
    24  				routeFound = false
    25  				break
    26  			}
    27  		}
    28  		if routeFound {
    29  			return append(allRoutes[:i], allRoutes[i+1:]...)
    30  		}
    31  	}
    32  
    33  	return nil
    34  }
    35  
    36  func getChainPriority(chainID uint64) int {
    37  	switch chainID {
    38  	case common.EthereumMainnet, common.EthereumSepolia:
    39  		return 1
    40  	case common.OptimismMainnet, common.OptimismSepolia:
    41  		return 2
    42  	case common.ArbitrumMainnet, common.ArbitrumSepolia:
    43  		return 3
    44  	default:
    45  		return 0
    46  	}
    47  }
    48  
    49  func getRoutePriority(route routes.Route) int {
    50  	priority := 0
    51  	for _, path := range route {
    52  		priority += getChainPriority(path.FromChain.ChainID)
    53  	}
    54  	return priority
    55  }