refactor_: set default node config values for frontend when doing local pair sync

This commit is contained in:
frank 2024-04-22 20:33:23 +08:00
parent 0ef4fb8cc7
commit 90b18d4f88
11 changed files with 73 additions and 37 deletions

View File

@ -253,6 +253,6 @@ func setRPCs(networks []params.Network, request *requests.WalletSecretsConfig) [
return networksWithRPC return networksWithRPC
} }
func BuildDefaultNetworks(request *requests.CreateAccount) []params.Network { func BuildDefaultNetworks(walletSecretsConfig *requests.WalletSecretsConfig) []params.Network {
return setRPCs(defaultNetworks, &request.WalletSecretsConfig) return setRPCs(defaultNetworks, walletSecretsConfig)
} }

View File

@ -19,7 +19,7 @@ func TestBuildDefaultNetworks(t *testing.T) {
}, },
} }
actualNetworks := BuildDefaultNetworks(request) actualNetworks := BuildDefaultNetworks(&request.WalletSecretsConfig)
require.Len(t, actualNetworks, 9) require.Len(t, actualNetworks, 9)
@ -75,7 +75,7 @@ func TestBuildDefaultNetworksGanache(t *testing.T) {
}, },
} }
actualNetworks := BuildDefaultNetworks(request) actualNetworks := BuildDefaultNetworks(&request.WalletSecretsConfig)
require.Len(t, actualNetworks, 9) require.Len(t, actualNetworks, 9)

View File

@ -31,6 +31,8 @@ const defaultKeycardPairingDataFile = "/ethereum/mainnet_rpc/keycard/pairings.js
const defaultArchivesRelativePath = "data/archivedata" const defaultArchivesRelativePath = "data/archivedata"
const defaultTorrentTorrentsRelativePath = "data/torrents" const defaultTorrentTorrentsRelativePath = "data/torrents"
const DefaultDataDir = "/ethereum/mainnet_rpc"
var paths = []string{pathWalletRoot, pathEIP1581, pathDefaultChat, pathDefaultWallet} var paths = []string{pathWalletRoot, pathEIP1581, pathDefaultChat, pathDefaultWallet}
var DefaultFleet = params.FleetShardsTest var DefaultFleet = params.FleetShardsTest
@ -212,7 +214,7 @@ func defaultNodeConfig(installationID string, request *requests.CreateAccount) (
nodeConfig.LogFile = "geth.log" nodeConfig.LogFile = "geth.log"
nodeConfig.LogDir = request.LogFilePath nodeConfig.LogDir = request.LogFilePath
nodeConfig.LogLevel = "ERROR" nodeConfig.LogLevel = "ERROR"
nodeConfig.DataDir = "/ethereum/mainnet_rpc" nodeConfig.DataDir = DefaultDataDir
nodeConfig.KeycardPairingDataFile = defaultKeycardPairingDataFile nodeConfig.KeycardPairingDataFile = defaultKeycardPairingDataFile
nodeConfig.ProcessBackedupMessages = false nodeConfig.ProcessBackedupMessages = false
@ -223,7 +225,7 @@ func defaultNodeConfig(installationID string, request *requests.CreateAccount) (
nodeConfig.LogEnabled = false nodeConfig.LogEnabled = false
} }
nodeConfig.Networks = BuildDefaultNetworks(request) nodeConfig.Networks = BuildDefaultNetworks(&request.WalletSecretsConfig)
if request.NetworkID != nil { if request.NetworkID != nil {
nodeConfig.NetworkID = *request.NetworkID nodeConfig.NetworkID = *request.NetworkID

View File

@ -344,7 +344,7 @@ func defaultNodeConfig(installationID string) (*params.NodeConfig, error) {
nodeConfig := &params.NodeConfig{} nodeConfig := &params.NodeConfig{}
nodeConfig.NetworkID = 1 nodeConfig.NetworkID = 1
nodeConfig.LogLevel = "ERROR" nodeConfig.LogLevel = "ERROR"
nodeConfig.DataDir = "/ethereum/mainnet_rpc" nodeConfig.DataDir = api.DefaultDataDir
nodeConfig.UpstreamConfig = params.UpstreamRPCConfig{ nodeConfig.UpstreamConfig = params.UpstreamRPCConfig{
Enabled: true, Enabled: true,
URL: "https://mainnet.infura.io/v3/800c641949d64d768a5070a1b0511938", URL: "https://mainnet.infura.io/v3/800c641949d64d768a5070a1b0511938",

View File

@ -392,7 +392,7 @@ func defaultNodeConfig(installationID string) (*params.NodeConfig, error) {
nodeConfig := &params.NodeConfig{} nodeConfig := &params.NodeConfig{}
nodeConfig.NetworkID = 1 nodeConfig.NetworkID = 1
nodeConfig.LogLevel = "ERROR" nodeConfig.LogLevel = "ERROR"
nodeConfig.DataDir = "/ethereum/mainnet_rpc" nodeConfig.DataDir = api.DefaultDataDir
nodeConfig.UpstreamConfig = params.UpstreamRPCConfig{ nodeConfig.UpstreamConfig = params.UpstreamRPCConfig{
Enabled: true, Enabled: true,
URL: "https://mainnet.infura.io/v3/800c641949d64d768a5070a1b0511938", URL: "https://mainnet.infura.io/v3/800c641949d64d768a5070a1b0511938",

View File

@ -269,7 +269,7 @@ func defaultNodeConfig(installationID string) (*params.NodeConfig, error) {
nodeConfig := &params.NodeConfig{} nodeConfig := &params.NodeConfig{}
nodeConfig.NetworkID = 1 nodeConfig.NetworkID = 1
nodeConfig.LogLevel = "DEBUG" nodeConfig.LogLevel = "DEBUG"
nodeConfig.DataDir = "/ethereum/mainnet_rpc" nodeConfig.DataDir = api.DefaultDataDir
nodeConfig.HTTPEnabled = true nodeConfig.HTTPEnabled = true
nodeConfig.HTTPPort = 8545 nodeConfig.HTTPPort = 8545
// FIXME: This should be taken from CLI flags. // FIXME: This should be taken from CLI flags.

View File

@ -523,7 +523,11 @@ func setupReceivingClient(backend *api.GethStatusBackend, cs, configJSON string)
if err != nil { if err != nil {
return nil, err return nil, err
} }
err = validateAndVerifyNodeConfig(conf, conf.ReceiverConfig) receiverConf := conf.ReceiverConfig
if err = setDefaultNodeConfig(receiverConf.NodeConfig); err != nil {
return nil, err
}
err = validateAndVerifyNodeConfig(conf, receiverConf)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -10,6 +10,9 @@ import (
"regexp" "regexp"
"strings" "strings"
"github.com/status-im/status-go/params"
"github.com/status-im/status-go/protocol/requests"
"gopkg.in/go-playground/validator.v9" "gopkg.in/go-playground/validator.v9"
"github.com/status-im/status-go/account/generator" "github.com/status-im/status-go/account/generator"
@ -116,14 +119,6 @@ func validateAndVerifyPassword(s interface{}, senderConfig *SenderConfig) error
} }
func validateAndVerifyNodeConfig(s interface{}, receiverConfig *ReceiverConfig) error { func validateAndVerifyNodeConfig(s interface{}, receiverConfig *ReceiverConfig) error {
if receiverConfig.NodeConfig != nil {
// we should update with defaults before validation
err := receiverConfig.NodeConfig.UpdateWithDefaults()
if err != nil {
return err
}
}
err := validate(s) err := validate(s)
if err != nil { if err != nil {
return err return err
@ -250,3 +245,34 @@ func validateKeystoreFilesConfig(backend *api.GethStatusBackend, conf interface{
return nil return nil
} }
func setDefaultNodeConfig(c *params.NodeConfig) error {
if c == nil {
return nil
}
err := c.UpdateWithDefaults()
if err != nil {
return err
}
if len(c.Networks) == 0 {
c.Networks = api.BuildDefaultNetworks(&requests.WalletSecretsConfig{})
}
if c.NetworkID == 0 {
// because PR https://github.com/status-im/status-mobile/pull/19467/files removed :networks/networks,
// we need to set the networkID and RPCURL here to make local pairing work again
c.NetworkID = c.Networks[0].ChainID
c.UpstreamConfig = params.UpstreamRPCConfig{
URL: c.Networks[0].RPCURL,
Enabled: true,
}
}
if c.DataDir == "" {
c.DataDir = api.DefaultDataDir
}
return nil
}

View File

@ -75,9 +75,9 @@ func (s *ConfigTestSuite) TestValidationKeyUID() {
} }
func (s *ConfigTestSuite) TestValidationNotEndKeyUID() { func (s *ConfigTestSuite) TestValidationNotEndKeyUID() {
nodeConfig, err := defaultNodeConfig(uuid.New().String(), "") nodeConfig, err := nodeConfigForLocalPairSync(uuid.New().String(), "", "/dummy/path")
nodeConfig.RootDataDir = "/tmp" nodeConfig.RootDataDir = "/tmp"
require.NoError(s.T(), err, "defaultNodeConfig should not return error") require.NoError(s.T(), err, "nodeConfigForLocalPairSync should not return error")
s.T().Run("Valid keystore path without keyUID", func(t *testing.T) { s.T().Run("Valid keystore path without keyUID", func(t *testing.T) {
r := &ReceiverConfig{ r := &ReceiverConfig{
NodeConfig: nodeConfig, NodeConfig: nodeConfig,
@ -86,7 +86,7 @@ func (s *ConfigTestSuite) TestValidationNotEndKeyUID() {
KDFIterations: 1, KDFIterations: 1,
SettingCurrentNetwork: "mainnet", SettingCurrentNetwork: "mainnet",
} }
assert.NoError(t, setDefaultNodeConfig(r.NodeConfig))
assert.NoError(t, validateAndVerifyNodeConfig(r, r), "ReceiverConfig validation should pass") assert.NoError(t, validateAndVerifyNodeConfig(r, r), "ReceiverConfig validation should pass")
}) })
@ -98,6 +98,7 @@ func (s *ConfigTestSuite) TestValidationNotEndKeyUID() {
KDFIterations: 1, KDFIterations: 1,
SettingCurrentNetwork: "mainnet", SettingCurrentNetwork: "mainnet",
} }
assert.NoError(t, setDefaultNodeConfig(r.NodeConfig))
assert.Error(t, validateAndVerifyNodeConfig(r, r), "ReceiverConfig validation should fail") assert.Error(t, validateAndVerifyNodeConfig(r, r), "ReceiverConfig validation should fail")
}) })
} }

View File

@ -291,7 +291,11 @@ func StartUpReceiverServer(backend *api.GethStatusBackend, configJSON string) (s
if err != nil { if err != nil {
return "", err return "", err
} }
err = validateAndVerifyNodeConfig(conf, conf.ReceiverConfig) receiverConf := conf.ReceiverConfig
if err = setDefaultNodeConfig(receiverConf.NodeConfig); err != nil {
return "", err
}
err = validateAndVerifyNodeConfig(conf, receiverConf)
if err != nil { if err != nil {
return "", err return "", err
} }

View File

@ -114,8 +114,14 @@ func (s *SyncDeviceSuite) prepareBackendWithAccount(mnemonic, tmpdir string) *ap
account.Name = settings.Name account.Name = settings.Name
nodeConfig, err := defaultNodeConfig(settings.InstallationID, account.KeyUID) nodeConfig, err := nodeConfigForLocalPairSync(settings.InstallationID, account.KeyUID, tmpdir)
require.NoError(s.T(), err) require.NoError(s.T(), err)
nodeConfig.NetworkID = 1
nodeConfig.UpstreamConfig = params.UpstreamRPCConfig{
Enabled: true,
URL: "https://mainnet.infura.io/v3/800c641949d64d768a5070a1b0511938",
}
nodeConfig.DataDir = api.DefaultDataDir
walletDerivedAccount := derivedAddresses[pathDefaultWallet] walletDerivedAccount := derivedAddresses[pathDefaultWallet]
walletAccount := &accounts.Account{ walletAccount := &accounts.Account{
@ -187,7 +193,7 @@ func (s *SyncDeviceSuite) pairAccounts(serverBackend *api.GethStatusBackend, ser
err = clientBackend.OpenAccounts() err = clientBackend.OpenAccounts()
require.NoError(s.T(), err) require.NoError(s.T(), err)
clientNodeConfig, err := defaultNodeConfig(uuid.New().String(), "") clientNodeConfig, err := nodeConfigForLocalPairSync(uuid.New().String(), "", clientDir)
require.NoError(s.T(), err) require.NoError(s.T(), err)
clientKeystoreDir := filepath.Join(clientDir, keystoreDir) clientKeystoreDir := filepath.Join(clientDir, keystoreDir)
@ -290,7 +296,7 @@ func (s *SyncDeviceSuite) TestPairingSyncDeviceClientAsSender() {
require.NoError(s.T(), err) require.NoError(s.T(), err)
err = serverBackend.OpenAccounts() err = serverBackend.OpenAccounts()
require.NoError(s.T(), err) require.NoError(s.T(), err)
serverNodeConfig, err := defaultNodeConfig(uuid.New().String(), "") serverNodeConfig, err := nodeConfigForLocalPairSync(uuid.New().String(), "", serverTmpDir)
require.NoError(s.T(), err) require.NoError(s.T(), err)
serverKeystoreDir := filepath.Join(serverTmpDir, keystoreDir) serverKeystoreDir := filepath.Join(serverTmpDir, keystoreDir)
serverPayloadSourceConfig := &ReceiverServerConfig{ serverPayloadSourceConfig := &ReceiverServerConfig{
@ -471,7 +477,7 @@ func (s *SyncDeviceSuite) TestPairingSyncDeviceClientAsReceiver() {
require.NoError(s.T(), err) require.NoError(s.T(), err)
err = clientBackend.OpenAccounts() err = clientBackend.OpenAccounts()
require.NoError(s.T(), err) require.NoError(s.T(), err)
clientNodeConfig, err := defaultNodeConfig(uuid.New().String(), "") clientNodeConfig, err := nodeConfigForLocalPairSync(uuid.New().String(), "", clientTmpDir)
require.NoError(s.T(), err) require.NoError(s.T(), err)
clientKeystoreDir := filepath.Join(clientTmpDir, keystoreDir) clientKeystoreDir := filepath.Join(clientTmpDir, keystoreDir)
clientPayloadSourceConfig := ReceiverClientConfig{ clientPayloadSourceConfig := ReceiverClientConfig{
@ -724,19 +730,12 @@ func defaultSettings(generatedAccountInfo generator.GeneratedAccountInfo, derive
return syncSettings, nil return syncSettings, nil
} }
func defaultNodeConfig(installationID, keyUID string) (*params.NodeConfig, error) { func nodeConfigForLocalPairSync(installationID, keyUID, tmpDir string) (*params.NodeConfig, error) {
// Set mainnet // Set mainnet
nodeConfig := &params.NodeConfig{} nodeConfig := &params.NodeConfig{}
nodeConfig.NetworkID = 1
nodeConfig.LogLevel = "DEBUG" nodeConfig.LogLevel = "DEBUG"
nodeConfig.DataDir = filepath.Join("ethereum/mainnet_rpc")
nodeConfig.KeyStoreDir = filepath.Join(keystoreDir, keyUID) nodeConfig.KeyStoreDir = filepath.Join(keystoreDir, keyUID)
nodeConfig.KeycardPairingDataFile = filepath.Join("keycard", "pairings.json") nodeConfig.KeycardPairingDataFile = filepath.Join("keycard", "pairings.json")
nodeConfig.UpstreamConfig = params.UpstreamRPCConfig{
Enabled: true,
URL: "https://mainnet.infura.io/v3/800c641949d64d768a5070a1b0511938",
}
nodeConfig.Name = "StatusIM" nodeConfig.Name = "StatusIM"
clusterConfig, err := params.LoadClusterConfigFromFleet("eth.prod") clusterConfig, err := params.LoadClusterConfigFromFleet("eth.prod")
if err != nil { if err != nil {
@ -756,7 +755,7 @@ func defaultNodeConfig(installationID, keyUID string) (*params.NodeConfig, error
} }
nodeConfig.ShhextConfig = params.ShhextConfig{ nodeConfig.ShhextConfig = params.ShhextConfig{
BackupDisabledDataDir: nodeConfig.DataDir, BackupDisabledDataDir: tmpDir,
InstallationID: installationID, InstallationID: installationID,
MaxMessageDeliveryAttempts: 6, MaxMessageDeliveryAttempts: 6,
MailServerConfirmations: true, MailServerConfirmations: true,
@ -1283,7 +1282,7 @@ func (s *SyncDeviceSuite) TestPreventLoggedInAccountLocalPairingClientAsReceiver
s.NoError(err) s.NoError(err)
clientKeystoreDir := filepath.Join(clientTmpDir, keystoreDir) clientKeystoreDir := filepath.Join(clientTmpDir, keystoreDir)
clientNodeConfig, err := defaultNodeConfig(uuid.New().String(), "") clientNodeConfig, err := nodeConfigForLocalPairSync(uuid.New().String(), "", clientTmpDir)
s.NoError(err) s.NoError(err)
clientPayloadSourceConfig := ReceiverClientConfig{ clientPayloadSourceConfig := ReceiverClientConfig{
ReceiverConfig: &ReceiverConfig{ ReceiverConfig: &ReceiverConfig{
@ -1312,7 +1311,7 @@ func (s *SyncDeviceSuite) TestPreventLoggedInAccountLocalPairingClientAsSender()
s.NoError(clientBackend.Logout()) s.NoError(clientBackend.Logout())
}() }()
serverNodeConfig, err := defaultNodeConfig(uuid.New().String(), "") serverNodeConfig, err := nodeConfigForLocalPairSync(uuid.New().String(), "", serverTmpDir)
s.NoError(err) s.NoError(err)
serverKeystoreDir := filepath.Join(serverTmpDir, keystoreDir) serverKeystoreDir := filepath.Join(serverTmpDir, keystoreDir)
serverPayloadSourceConfig := &ReceiverServerConfig{ serverPayloadSourceConfig := &ReceiverServerConfig{