Skip to content

Commit

Permalink
add support for multiple substrate urls
Browse files Browse the repository at this point in the history
  • Loading branch information
sameh-farouk committed Jan 20, 2025
1 parent d295390 commit 72d23b6
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 16 deletions.
2 changes: 1 addition & 1 deletion .app.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ IDENFY_API_SECRET=
IDENFY_CALLBACK_SIGN_KEY=
IDENFY_WHITELISTED_IPS=
IDENFY_DEV_MODE=false
TFCHAIN_WS_PROVIDER_URL=wss://tfchain.dev.grid.tf
TFCHAIN_WS_PROVIDER_URL=wss://tfchain.dev.grid.tf,wss://tfchain.02.dev.grid.tf
IP_LIMITER_MAX_TOKEN_REQUESTS=5
IP_LIMITER_TOKEN_EXPIRATION=1440
ID_LIMITER_MAX_TOKEN_REQUESTS=5
Expand Down
5 changes: 3 additions & 2 deletions internal/clients/substrate/substrate.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (
)

type WsProviderURLGetter interface {
GetWsProviderURL() string
GetWsProviderURL() []string
}

type SubstrateClient interface {
Expand All @@ -27,7 +27,8 @@ type Substrate struct {
}

func New(config WsProviderURLGetter, logger *slog.Logger) (*Substrate, error) {
mgr := tfchain.NewManager(config.GetWsProviderURL())
urls := config.GetWsProviderURL()
mgr := tfchain.NewManager(urls...)
api, err := mgr.Substrate()
if err != nil {
return nil, fmt.Errorf("initializing Substrate client: %w", err)
Expand Down
16 changes: 12 additions & 4 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,11 @@ func (c *Idenfy) GetCallbackSignKey() string {
}

type TFChain struct {
WsProviderURL string `env:"TFCHAIN_WS_PROVIDER_URL" env-default:"wss://tfchain.grid.tf"`
WsProviderURL []string `env:"TFCHAIN_WS_PROVIDER_URL" env-default:"wss://tfchain.grid.tf" env-separator:","`
}

// implement getter for TFChain
func (c *TFChain) GetWsProviderURL() string {
func (c *TFChain) GetWsProviderURL() []string {
return c.WsProviderURL
}

Expand Down Expand Up @@ -137,10 +137,18 @@ func (c *Config) Validate() error {
if len(c.Idenfy.CallbackSignKey) < 16 {
return errors.New("invalid callbackSignKey. it should be at least 16 characters long")
}

// WsProviderURL should not be empty
if len(c.TFChain.WsProviderURL) == 0 {
return errors.New("empty WsProviderURL")
}
// WsProviderURL should be valid URL and start with wss://
if u, err := url.ParseRequestURI(c.TFChain.WsProviderURL); err != nil || u.Scheme != "wss" {
return errors.New("invalid WsProviderURL")
for _, substrate_url := range c.TFChain.WsProviderURL {
if u, err := url.ParseRequestURI(substrate_url); err != nil || u.Scheme != "wss" {
return errors.New("invalid WsProviderURL")
}
}

// domain should not be empty and same as domain in CallbackUrl
if parsedCallbackUrl.Host != c.Challenge.Domain {
return errors.New("invalid Challenge Domain. It should be same as domain in CallbackUrl")
Expand Down
6 changes: 3 additions & 3 deletions scripts/dev/balance/check-account-balance.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (

func main() {
config := &TFChainConfig{
WsProviderURL: "wss://tfchain.dev.grid.tf",
WsProviderURL: []string{"wss://tfchain.dev.grid.tf"},
}

logger := slog.Default()
Expand All @@ -26,10 +26,10 @@ func main() {
}

type TFChainConfig struct {
WsProviderURL string
WsProviderURL []string
}

// implement SubstrateConfig for config.TFChain
func (c *TFChainConfig) GetWsProviderURL() string {
func (c *TFChainConfig) GetWsProviderURL() []string {
return c.WsProviderURL
}
6 changes: 3 additions & 3 deletions scripts/dev/chain/chain_name.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

func main() {
config := &TFChainConfig{
WsProviderURL: "wss://tfchain.dev.grid.tf",
WsProviderURL: []string{"wss://tfchain.dev.grid.tf"},
}

logger := slog.Default()
Expand All @@ -27,10 +27,10 @@ func main() {
}

type TFChainConfig struct {
WsProviderURL string
WsProviderURL []string
}

// implement SubstrateConfig for config.TFChain
func (c *TFChainConfig) GetWsProviderURL() string {
func (c *TFChainConfig) GetWsProviderURL() []string {
return c.WsProviderURL
}
6 changes: 3 additions & 3 deletions scripts/dev/twin/get-address-by-twin-id.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

func main() {
config := &TFChainConfig{
WsProviderURL: "wss://tfchain.dev.grid.tf",
WsProviderURL: []string{"wss://tfchain.dev.grid.tf"},
}

logger := slog.Default()
Expand All @@ -27,10 +27,10 @@ func main() {
}

type TFChainConfig struct {
WsProviderURL string
WsProviderURL []string
}

// implement SubstrateConfig for config.TFChain
func (c *TFChainConfig) GetWsProviderURL() string {
func (c *TFChainConfig) GetWsProviderURL() []string {
return c.WsProviderURL
}

0 comments on commit 72d23b6

Please sign in to comment.