github.com/status-im/status-go@v1.1.0/api/default_networks.go (about)

     1  package api
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/ethereum/go-ethereum/common"
     8  	"github.com/status-im/status-go/params"
     9  	"github.com/status-im/status-go/protocol/requests"
    10  )
    11  
    12  const (
    13  	mainnetChainID         uint64 = 1
    14  	goerliChainID          uint64 = 5
    15  	sepoliaChainID         uint64 = 11155111
    16  	optimismChainID        uint64 = 10
    17  	optimismGoerliChainID  uint64 = 420
    18  	optimismSepoliaChainID uint64 = 11155420
    19  	arbitrumChainID        uint64 = 42161
    20  	arbitrumGoerliChainID  uint64 = 421613
    21  	arbitrumSepoliaChainID uint64 = 421614
    22  	sntSymbol                     = "SNT"
    23  	sttSymbol                     = "STT"
    24  )
    25  
    26  var ganacheTokenAddress = common.HexToAddress("0x8571Ddc46b10d31EF963aF49b6C7799Ea7eff818")
    27  
    28  func mainnet(stageName string) params.Network {
    29  	return params.Network{
    30  		ChainID:                mainnetChainID,
    31  		ChainName:              "Mainnet",
    32  		DefaultRPCURL:          fmt.Sprintf("https://%s.api.status.im/grove/ethereum/mainnet/", stageName),
    33  		DefaultFallbackURL:     fmt.Sprintf("https://%s.api.status.im/infura/ethereum/mainnet/", stageName),
    34  		RPCURL:                 "https://eth-archival.rpc.grove.city/v1/",
    35  		FallbackURL:            "https://mainnet.infura.io/v3/",
    36  		BlockExplorerURL:       "https://etherscan.io/",
    37  		IconURL:                "network/Network=Ethereum",
    38  		ChainColor:             "#627EEA",
    39  		ShortName:              "eth",
    40  		NativeCurrencyName:     "Ether",
    41  		NativeCurrencySymbol:   "ETH",
    42  		NativeCurrencyDecimals: 18,
    43  		IsTest:                 false,
    44  		Layer:                  1,
    45  		Enabled:                true,
    46  		RelatedChainID:         goerliChainID,
    47  	}
    48  }
    49  
    50  func goerli(stageName string) params.Network {
    51  	return params.Network{
    52  		ChainID:                goerliChainID,
    53  		ChainName:              "Mainnet",
    54  		RPCURL:                 "https://goerli.infura.io/v3/",
    55  		FallbackURL:            "",
    56  		BlockExplorerURL:       "https://goerli.etherscan.io/",
    57  		IconURL:                "network/Network=Ethereum",
    58  		ChainColor:             "#627EEA",
    59  		ShortName:              "goEth",
    60  		NativeCurrencyName:     "Ether",
    61  		NativeCurrencySymbol:   "ETH",
    62  		NativeCurrencyDecimals: 18,
    63  		IsTest:                 true,
    64  		Layer:                  1,
    65  		Enabled:                true,
    66  		RelatedChainID:         mainnetChainID,
    67  	}
    68  
    69  }
    70  func sepolia(stageName string) params.Network {
    71  	return params.Network{
    72  		ChainID:                sepoliaChainID,
    73  		ChainName:              "Mainnet",
    74  		DefaultRPCURL:          fmt.Sprintf("https://%s.api.status.im/grove/ethereum/sepolia/", stageName),
    75  		DefaultFallbackURL:     fmt.Sprintf("https://%s.api.status.im/infura/ethereum/sepolia/", stageName),
    76  		RPCURL:                 "https://sepolia-archival.rpc.grove.city/v1/",
    77  		FallbackURL:            "https://sepolia.infura.io/v3/",
    78  		BlockExplorerURL:       "https://sepolia.etherscan.io/",
    79  		IconURL:                "network/Network=Ethereum",
    80  		ChainColor:             "#627EEA",
    81  		ShortName:              "eth",
    82  		NativeCurrencyName:     "Ether",
    83  		NativeCurrencySymbol:   "ETH",
    84  		NativeCurrencyDecimals: 18,
    85  		IsTest:                 true,
    86  		Layer:                  1,
    87  		Enabled:                true,
    88  		RelatedChainID:         mainnetChainID,
    89  	}
    90  }
    91  
    92  func optimism(stageName string) params.Network {
    93  	return params.Network{
    94  		ChainID:                optimismChainID,
    95  		ChainName:              "Optimism",
    96  		DefaultRPCURL:          fmt.Sprintf("https://%s.api.status.im/grove/optimism/mainnet/", stageName),
    97  		DefaultFallbackURL:     fmt.Sprintf("https://%s.api.status.im/infura/optimism/mainnet/", stageName),
    98  		RPCURL:                 "https://optimism-archival.rpc.grove.city/v1/",
    99  		FallbackURL:            "https://optimism-mainnet.infura.io/v3/",
   100  		BlockExplorerURL:       "https://optimistic.etherscan.io",
   101  		IconURL:                "network/Network=Optimism",
   102  		ChainColor:             "#E90101",
   103  		ShortName:              "oeth",
   104  		NativeCurrencyName:     "Ether",
   105  		NativeCurrencySymbol:   "ETH",
   106  		NativeCurrencyDecimals: 18,
   107  		IsTest:                 false,
   108  		Layer:                  2,
   109  		Enabled:                true,
   110  		RelatedChainID:         optimismGoerliChainID,
   111  	}
   112  }
   113  
   114  func optimismGoerli(stageName string) params.Network {
   115  	return params.Network{
   116  		ChainID:                optimismGoerliChainID,
   117  		ChainName:              "Optimism",
   118  		RPCURL:                 "https://optimism-goerli.infura.io/v3/",
   119  		FallbackURL:            "",
   120  		BlockExplorerURL:       "https://goerli-optimism.etherscan.io/",
   121  		IconURL:                "network/Network=Optimism",
   122  		ChainColor:             "#E90101",
   123  		ShortName:              "goOpt",
   124  		NativeCurrencyName:     "Ether",
   125  		NativeCurrencySymbol:   "ETH",
   126  		NativeCurrencyDecimals: 18,
   127  		IsTest:                 true,
   128  		Layer:                  2,
   129  		Enabled:                false,
   130  		RelatedChainID:         optimismChainID,
   131  	}
   132  }
   133  
   134  func optimismSepolia(stageName string) params.Network {
   135  	return params.Network{
   136  		ChainID:                optimismSepoliaChainID,
   137  		ChainName:              "Optimism",
   138  		DefaultRPCURL:          fmt.Sprintf("https://%s.api.status.im/grove/optimism/sepolia/", stageName),
   139  		DefaultFallbackURL:     fmt.Sprintf("https://%s.api.status.im/infura/optimism/sepolia/", stageName),
   140  		RPCURL:                 "https://optimism-sepolia-archival.rpc.grove.city/v1/",
   141  		FallbackURL:            "https://optimism-sepolia.infura.io/v3/",
   142  		BlockExplorerURL:       "https://sepolia-optimism.etherscan.io/",
   143  		IconURL:                "network/Network=Optimism",
   144  		ChainColor:             "#E90101",
   145  		ShortName:              "oeth",
   146  		NativeCurrencyName:     "Ether",
   147  		NativeCurrencySymbol:   "ETH",
   148  		NativeCurrencyDecimals: 18,
   149  		IsTest:                 true,
   150  		Layer:                  2,
   151  		Enabled:                false,
   152  		RelatedChainID:         optimismChainID,
   153  	}
   154  }
   155  
   156  func arbitrum(stageName string) params.Network {
   157  	return params.Network{
   158  		ChainID:                arbitrumChainID,
   159  		ChainName:              "Arbitrum",
   160  		DefaultRPCURL:          fmt.Sprintf("https://%s.api.status.im/grove/arbitrum/mainnet/", stageName),
   161  		DefaultFallbackURL:     fmt.Sprintf("https://%s.api.status.im/infura/arbitrum/mainnet/", stageName),
   162  		RPCURL:                 "https://arbitrum-one.rpc.grove.city/v1/",
   163  		FallbackURL:            "https://arbitrum-mainnet.infura.io/v3/",
   164  		BlockExplorerURL:       "https://arbiscan.io/",
   165  		IconURL:                "network/Network=Arbitrum",
   166  		ChainColor:             "#51D0F0",
   167  		ShortName:              "arb1",
   168  		NativeCurrencyName:     "Ether",
   169  		NativeCurrencySymbol:   "ETH",
   170  		NativeCurrencyDecimals: 18,
   171  		IsTest:                 false,
   172  		Layer:                  2,
   173  		Enabled:                true,
   174  		RelatedChainID:         arbitrumGoerliChainID,
   175  	}
   176  }
   177  
   178  func arbitrumGoerli(stageName string) params.Network {
   179  	return params.Network{
   180  		ChainID:                arbitrumGoerliChainID,
   181  		ChainName:              "Arbitrum",
   182  		RPCURL:                 "https://arbitrum-goerli.infura.io/v3/",
   183  		FallbackURL:            "",
   184  		BlockExplorerURL:       "https://goerli.arbiscan.io/",
   185  		IconURL:                "network/Network=Arbitrum",
   186  		ChainColor:             "#51D0F0",
   187  		ShortName:              "goArb",
   188  		NativeCurrencyName:     "Ether",
   189  		NativeCurrencySymbol:   "ETH",
   190  		NativeCurrencyDecimals: 18,
   191  		IsTest:                 true,
   192  		Layer:                  2,
   193  		Enabled:                false,
   194  		RelatedChainID:         arbitrumChainID,
   195  	}
   196  }
   197  
   198  func arbitrumSepolia(stageName string) params.Network {
   199  	return params.Network{
   200  		ChainID:                arbitrumSepoliaChainID,
   201  		ChainName:              "Arbitrum",
   202  		DefaultRPCURL:          fmt.Sprintf("https://%s.api.status.im/grove/arbitrum/sepolia/", stageName),
   203  		DefaultFallbackURL:     fmt.Sprintf("https://%s.api.status.im/infura/arbitrum/sepolia/", stageName),
   204  		RPCURL:                 "https://arbitrum-sepolia-archival.rpc.grove.city/v1/",
   205  		FallbackURL:            "https://arbitrum-sepolia.infura.io/v3/",
   206  		BlockExplorerURL:       "https://sepolia-explorer.arbitrum.io/",
   207  		IconURL:                "network/Network=Arbitrum",
   208  		ChainColor:             "#51D0F0",
   209  		ShortName:              "arb1",
   210  		NativeCurrencyName:     "Ether",
   211  		NativeCurrencySymbol:   "ETH",
   212  		NativeCurrencyDecimals: 18,
   213  		IsTest:                 true,
   214  		Layer:                  2,
   215  		Enabled:                false,
   216  		RelatedChainID:         arbitrumChainID,
   217  	}
   218  }
   219  
   220  func defaultNetworks(stageName string) []params.Network {
   221  	return []params.Network{
   222  		mainnet(stageName),
   223  		goerli(stageName),
   224  		sepolia(stageName),
   225  		optimism(stageName),
   226  		optimismGoerli(stageName),
   227  		optimismSepolia(stageName),
   228  		arbitrum(stageName),
   229  		arbitrumGoerli(stageName),
   230  		arbitrumSepolia(stageName),
   231  	}
   232  }
   233  
   234  var mainnetGanacheTokenOverrides = params.TokenOverride{
   235  	Symbol:  sntSymbol,
   236  	Address: ganacheTokenAddress,
   237  }
   238  
   239  var goerliGanacheTokenOverrides = params.TokenOverride{
   240  	Symbol:  sttSymbol,
   241  	Address: ganacheTokenAddress,
   242  }
   243  
   244  func setRPCs(networks []params.Network, request *requests.WalletSecretsConfig) []params.Network {
   245  
   246  	var networksWithRPC []params.Network
   247  
   248  	for _, n := range networks {
   249  
   250  		if request.InfuraToken != "" {
   251  			if strings.Contains(n.RPCURL, "infura") {
   252  				n.RPCURL += request.InfuraToken
   253  			}
   254  			if strings.Contains(n.FallbackURL, "infura") {
   255  				n.FallbackURL += request.InfuraToken
   256  			}
   257  		}
   258  
   259  		if request.PoktToken != "" {
   260  			if strings.Contains(n.RPCURL, "grove") {
   261  				n.RPCURL += request.PoktToken
   262  			}
   263  			if strings.Contains(n.FallbackURL, "grove") {
   264  				n.FallbackURL += request.PoktToken
   265  			}
   266  
   267  		}
   268  
   269  		if request.GanacheURL != "" {
   270  			n.RPCURL = request.GanacheURL
   271  			n.FallbackURL = request.GanacheURL
   272  			if n.ChainID == mainnetChainID {
   273  				n.TokenOverrides = []params.TokenOverride{
   274  					mainnetGanacheTokenOverrides,
   275  				}
   276  			} else if n.ChainID == goerliChainID {
   277  				n.TokenOverrides = []params.TokenOverride{
   278  					goerliGanacheTokenOverrides,
   279  				}
   280  			}
   281  		}
   282  
   283  		networksWithRPC = append(networksWithRPC, n)
   284  	}
   285  
   286  	return networksWithRPC
   287  }
   288  
   289  func BuildDefaultNetworks(walletSecretsConfig *requests.WalletSecretsConfig) []params.Network {
   290  	return setRPCs(defaultNetworks(walletSecretsConfig.StatusProxyStageName), walletSecretsConfig)
   291  }