Skip to content

Commit

Permalink
feat(rpc)_: integrate test.eth-rpc.status.im
Browse files Browse the repository at this point in the history
fixes #6327
  • Loading branch information
friofry committed Feb 6, 2025
1 parent 592d4b7 commit 263d8e9
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 56 deletions.
79 changes: 47 additions & 32 deletions api/default_networks.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package api

import (
"fmt"
"strings"

"github.com/status-im/status-go/params"
"github.com/status-im/status-go/params/networkhelper"
Expand Down Expand Up @@ -31,18 +32,25 @@ const (
DirectGrove = "direct-grove"
)

func smartProxyUrl(chainName, networkName string) string {
return fmt.Sprintf("https://test.eth-rpc.status.im/%s/%s/", chainName, networkName)
func getProxyHost(customUrl, stageName string) string {
if customUrl != "" {
return strings.TrimRight(customUrl, "/")
}
return fmt.Sprintf("https://%s.eth-rpc.status.im", stageName)
}

func smartProxyUrl(proxyHost, chainName, networkName string) string {
return fmt.Sprintf("%s/%s/%s/", proxyHost, chainName, networkName)
}

func mainnet(stageName string) params.Network {
func mainnet(proxyHost string) params.Network {
const chainID = MainnetChainID
const chainName = "ethereum"
const networkName = "mainnet"

rpcProviders := []params.RpcProvider{
// Smart proxy provider
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(chainName, networkName), false),
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(proxyHost, chainName, networkName), false),
// Direct providers
*params.NewDirectProvider(chainID, DirectInfura, "https://mainnet.infura.io/v3/", true),
*params.NewDirectProvider(chainID, DirectGrove, "https://eth.rpc.grove.city/v1/", false),
Expand All @@ -66,14 +74,14 @@ func mainnet(stageName string) params.Network {
}
}

func sepolia(stageName string) params.Network {
func sepolia(proxyHost string) params.Network {
const chainID = SepoliaChainID
const chainName = "ethereum"
const networkName = "sepolia"

rpcProviders := []params.RpcProvider{
// Smart proxy provider
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(chainName, networkName), false),
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(proxyHost, chainName, networkName), false),
// Direct providers
*params.NewDirectProvider(chainID, DirectInfura, "https://sepolia.infura.io/v3/", true),
*params.NewDirectProvider(chainID, DirectGrove, "https://eth-sepolia-testnet.rpc.grove.city/v1/", false),
Expand All @@ -97,14 +105,14 @@ func sepolia(stageName string) params.Network {
}
}

func optimism(stageName string) params.Network {
func optimism(proxyHost string) params.Network {
const chainID = OptimismChainID
const chainName = "optimism"
const networkName = "mainnet"

rpcProviders := []params.RpcProvider{
// Smart proxy provider
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(chainName, networkName), false),
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(proxyHost, chainName, networkName), false),
// Direct providers
*params.NewDirectProvider(chainID, DirectInfura, "https://optimism-mainnet.infura.io/v3/", true),
*params.NewDirectProvider(chainID, DirectGrove, "https://optimism.rpc.grove.city/v1/", false),
Expand All @@ -128,14 +136,14 @@ func optimism(stageName string) params.Network {
}
}

func optimismSepolia(stageName string) params.Network {
func optimismSepolia(proxyHost string) params.Network {
const chainID = OptimismSepoliaChainID
const chainName = "optimism"
const networkName = "sepolia"

rpcProviders := []params.RpcProvider{
// Smart proxy provider
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(chainName, networkName), false),
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(proxyHost, chainName, networkName), false),
// Direct providers
*params.NewDirectProvider(chainID, DirectInfura, "https://optimism-sepolia.infura.io/v3/", true),
*params.NewDirectProvider(chainID, DirectGrove, "https://optimism-sepolia-testnet.rpc.grove.city/v1/", false),
Expand All @@ -159,14 +167,14 @@ func optimismSepolia(stageName string) params.Network {
}
}

func arbitrum(stageName string) params.Network {
func arbitrum(proxyHost string) params.Network {
const chainID = ArbitrumChainID
const chainName = "arbitrum"
const networkName = "mainnet"

rpcProviders := []params.RpcProvider{
// Smart proxy provider
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(chainName, networkName), false),
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(proxyHost, chainName, networkName), false),
// Direct providers
*params.NewDirectProvider(chainID, DirectInfura, "https://arbitrum-mainnet.infura.io/v3/", true),
*params.NewDirectProvider(chainID, DirectGrove, "https://arbitrum-one.rpc.grove.city/v1/", false),
Expand All @@ -190,14 +198,14 @@ func arbitrum(stageName string) params.Network {
}
}

func arbitrumSepolia(stageName string) params.Network {
func arbitrumSepolia(proxyHost string) params.Network {
const chainID = ArbitrumSepoliaChainID
const chainName = "arbitrum"
const networkName = "sepolia"

rpcProviders := []params.RpcProvider{
// Smart proxy provider
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(chainName, networkName), false),
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(proxyHost, chainName, networkName), false),
// Direct providers
*params.NewDirectProvider(chainID, DirectInfura, "https://arbitrum-sepolia.infura.io/v3/", true),
*params.NewDirectProvider(chainID, DirectGrove, "https://arbitrum-sepolia-testnet.rpc.grove.city/v1/", false),
Expand All @@ -221,14 +229,14 @@ func arbitrumSepolia(stageName string) params.Network {
}
}

func base(stageName string) params.Network {
func base(proxyHost string) params.Network {
const chainID = BaseChainID
const chainName = "base"
const networkName = "mainnet"

rpcProviders := []params.RpcProvider{
// Smart proxy provider
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(chainName, networkName), false),
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(proxyHost, chainName, networkName), false),
// Direct providers
*params.NewDirectProvider(chainID, DirectInfura, "https://base-mainnet.infura.io/v3/", true),
*params.NewDirectProvider(chainID, DirectGrove, "https://base.rpc.grove.city/v1/", false),
Expand All @@ -252,14 +260,14 @@ func base(stageName string) params.Network {
}
}

func baseSepolia(stageName string) params.Network {
func baseSepolia(proxyHost string) params.Network {
const chainID = BaseSepoliaChainID
const chainName = "base"
const networkName = "sepolia"

rpcProviders := []params.RpcProvider{
// Smart proxy provider
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(chainName, networkName), false),
*params.NewProxyProvider(chainID, StatusSmartProxy, smartProxyUrl(proxyHost, chainName, networkName), false),
// Direct providers
*params.NewDirectProvider(chainID, DirectInfura, "https://base-sepolia.infura.io/v3/", true),
*params.NewDirectProvider(chainID, DirectGrove, "https://base-testnet.rpc.grove.city/v1/", false),
Expand All @@ -283,27 +291,34 @@ func baseSepolia(stageName string) params.Network {
}
}

func defaultNetworks(stageName string) []params.Network {
func defaultNetworks(proxyHost string) []params.Network {
return []params.Network{
mainnet(stageName),
sepolia(stageName),
optimism(stageName),
optimismSepolia(stageName),
arbitrum(stageName),
arbitrumSepolia(stageName),
base(stageName),
baseSepolia(stageName),
mainnet(proxyHost),
sepolia(proxyHost),
optimism(proxyHost),
optimismSepolia(proxyHost),
arbitrum(proxyHost),
arbitrumSepolia(proxyHost),
base(proxyHost),
baseSepolia(proxyHost),
}
}

func setRPCs(networks []params.Network, request *requests.WalletSecretsConfig) []params.Network {
func setRPCs(networks []params.Network, walletConfig *requests.WalletSecretsConfig) []params.Network {
authTokens := map[string]string{
"infura.io": request.InfuraToken,
"grove.city": request.PoktToken,
"infura.io": walletConfig.InfuraToken,
"grove.city": walletConfig.PoktToken,
}
return networkhelper.OverrideDirectProvidersAuth(networks, authTokens)
networks = networkhelper.OverrideDirectProvidersAuth(networks, authTokens)

return networkhelper.OverrideEmbeddedProxyProviders(
networks,
true,
walletConfig.EthRpcProxyUser,
walletConfig.EthRpcProxyPassword)
}

func BuildDefaultNetworks(walletSecretsConfig *requests.WalletSecretsConfig) []params.Network {
return setRPCs(defaultNetworks(walletSecretsConfig.StatusProxyStageName), walletSecretsConfig)
proxyHost := getProxyHost(walletSecretsConfig.EthRpcProxyUrl, walletSecretsConfig.StatusProxyStageName)
return setRPCs(defaultNetworks(proxyHost), walletSecretsConfig)
}
12 changes: 12 additions & 0 deletions api/defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -228,13 +228,25 @@ func buildWalletConfig(request *requests.WalletSecretsConfig, statusProxyEnabled
if request.StatusProxyMarketPassword != "" {
walletConfig.StatusProxyMarketPassword = request.StatusProxyMarketPassword
}

// FIXME: remove when EthRpcProxy* is integrated
if request.StatusProxyBlockchainUser != "" {
walletConfig.StatusProxyBlockchainUser = request.StatusProxyBlockchainUser
}
if request.StatusProxyBlockchainPassword != "" {
walletConfig.StatusProxyBlockchainPassword = request.StatusProxyBlockchainPassword
}

if request.EthRpcProxyUrl != "" {
walletConfig.EthRpcProxyUrl = request.EthRpcProxyUrl
}
if request.EthRpcProxyUser != "" {
walletConfig.EthRpcProxyUser = request.EthRpcProxyUser
}
if request.EthRpcProxyPassword != "" {
walletConfig.EthRpcProxyPassword = request.EthRpcProxyPassword
}

walletConfig.StatusProxyEnabled = statusProxyEnabled

return walletConfig
Expand Down
2 changes: 1 addition & 1 deletion api/geth_backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -564,7 +564,7 @@ func (b *GethStatusBackend) updateAccountColorHashAndColorID(keyUID string, acco
}

func (b *GethStatusBackend) overrideNetworks(conf *params.NodeConfig, request *requests.Login) {
conf.Networks = setRPCs(defaultNetworks(request.WalletSecretsConfig.StatusProxyStageName), &request.WalletSecretsConfig)
conf.Networks = BuildDefaultNetworks(&request.WalletSecretsConfig)
}

func (b *GethStatusBackend) LoginAccount(request *requests.Login) error {
Expand Down
7 changes: 2 additions & 5 deletions node/get_status_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -345,8 +345,8 @@ func (n *StatusNode) setupRPCClient() (err error) {
networks := networkhelper.OverrideEmbeddedProxyProviders(
n.config.Networks,
n.config.WalletConfig.StatusProxyEnabled,
n.config.WalletConfig.StatusProxyBlockchainUser,
n.config.WalletConfig.StatusProxyBlockchainPassword)
n.config.WalletConfig.EthRpcProxyUser,
n.config.WalletConfig.EthRpcProxyPassword)

config := rpc.ClientConfig{
Client: gethNodeClient,
Expand All @@ -360,9 +360,6 @@ func (n *StatusNode) setupRPCClient() (err error) {
return
}
n.rpcClient.Start(context.Background())
if err != nil {
return
}
return
}

Expand Down
35 changes: 20 additions & 15 deletions params/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -500,21 +500,26 @@ type NodeConfig struct {

// WalletConfig extra configuration for wallet.Service.
type WalletConfig struct {
Enabled bool
OpenseaAPIKey string `json:"OpenseaAPIKey"`
RaribleMainnetAPIKey string `json:"RaribleMainnetAPIKey"`
RaribleTestnetAPIKey string `json:"RaribleTestnetAPIKey"`
AlchemyAPIKeys map[uint64]string `json:"AlchemyAPIKeys"`
InfuraAPIKey string `json:"InfuraAPIKey"`
InfuraAPIKeySecret string `json:"InfuraAPIKeySecret"`
StatusProxyMarketUser string `json:"StatusProxyMarketUser"`
StatusProxyMarketPassword string `json:"StatusProxyMarketPassword"`
StatusProxyBlockchainUser string `json:"StatusProxyBlockchainUser"`
StatusProxyBlockchainPassword string `json:"StatusProxyBlockchainPassword"`
StatusProxyEnabled bool `json:"StatusProxyEnabled"`
StatusProxyStageName string `json:"StatusProxyStageName"`
EnableCelerBridge bool `json:"EnableCelerBridge"`
EnableMercuryoProvider bool `json:"EnableMercuryoProvider"`
Enabled bool
OpenseaAPIKey string `json:"OpenseaAPIKey"`
RaribleMainnetAPIKey string `json:"RaribleMainnetAPIKey"`
RaribleTestnetAPIKey string `json:"RaribleTestnetAPIKey"`
AlchemyAPIKeys map[uint64]string `json:"AlchemyAPIKeys"`
InfuraAPIKey string `json:"InfuraAPIKey"`
InfuraAPIKeySecret string `json:"InfuraAPIKeySecret"`
StatusProxyMarketUser string `json:"StatusProxyMarketUser"`
StatusProxyMarketPassword string `json:"StatusProxyMarketPassword"`
// FIXME: remove when EthRpcProxy* is integrated
StatusProxyBlockchainUser string `json:"StatusProxyBlockchainUser"`
StatusProxyBlockchainPassword string `json:"StatusProxyBlockchainPassword"`

StatusProxyEnabled bool `json:"StatusProxyEnabled"`
StatusProxyStageName string `json:"StatusProxyStageName"`
EnableCelerBridge bool `json:"EnableCelerBridge"`
EnableMercuryoProvider bool `json:"EnableMercuryoProvider"`
EthRpcProxyUrl string `json:"EthRpcProxyUrl"`
EthRpcProxyUser string `json:"EthRpcProxyUser"`
EthRpcProxyPassword string `json:"EthRpcProxyPassword"`
}

// MarshalJSON custom marshalling to avoid exposing sensitive data in log,
Expand Down
11 changes: 8 additions & 3 deletions protocol/requests/create_account.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,11 +105,16 @@ type WalletSecretsConfig struct {
AlchemyBaseMainnetToken string `json:"alchemyBaseMainnetToken"`
AlchemyBaseSepoliaToken string `json:"alchemyBaseSepoliaToken"`

StatusProxyStageName string `json:"statusProxyStageName"`
StatusProxyMarketUser string `json:"statusProxyMarketUser"`
StatusProxyMarketPassword string `json:"statusProxyMarketPassword"`
StatusProxyStageName string `json:"statusProxyStageName"`
StatusProxyMarketUser string `json:"statusProxyMarketUser"`
StatusProxyMarketPassword string `json:"statusProxyMarketPassword"`
// FIXME: remove when EthRpcProxy* is integrated
StatusProxyBlockchainUser string `json:"statusProxyBlockchainUser"`
StatusProxyBlockchainPassword string `json:"statusProxyBlockchainPassword"`

EthRpcProxyUrl string `json:"ethRpcProxyUrl"`
EthRpcProxyUser string `json:"ethRpcProxyUser"`
EthRpcProxyPassword string `json:"ethRpcProxyPassword"`
}

func (c *CreateAccount) Validate(validation *CreateAccountValidation) error {
Expand Down

0 comments on commit 263d8e9

Please sign in to comment.