diff --git a/pkg/solana/chain.go b/pkg/solana/chain.go index d63b6ab3b..8b4ad5787 100644 --- a/pkg/solana/chain.go +++ b/pkg/solana/chain.go @@ -236,6 +236,7 @@ func newChain(id string, cfg *config.TOMLConfig, ks loop.Keystore, lggr logger.L mnCfg := cfg.MultiNodeConfig() var nodes []mn.Node[mn.StringID, *client.Client] + var sendOnlyNodes []mn.SendOnlyNode[mn.StringID, *client.Client] for i, nodeInfo := range cfg.ListNodes() { rpcClient, err := client.NewClient(nodeInfo.URL.String(), cfg, DefaultRequestTimeout, logger.Named(lggr, "Client."+*nodeInfo.Name)) @@ -248,7 +249,11 @@ func newChain(id string, cfg *config.TOMLConfig, ks loop.Keystore, lggr logger.L mnCfg, mnCfg, lggr, *nodeInfo.URL.URL(), nil, *nodeInfo.Name, i, mn.StringID(id), 0, rpcClient, chainFamily) - nodes = append(nodes, newNode) + if nodeInfo.SendOnly { + sendOnlyNodes = append(sendOnlyNodes, newNode) + } else { + nodes = append(nodes, newNode) + } } multiNode := mn.NewMultiNode[mn.StringID, *client.Client]( @@ -256,7 +261,7 @@ func newChain(id string, cfg *config.TOMLConfig, ks loop.Keystore, lggr logger.L mn.NodeSelectionModeRoundRobin, 0, nodes, - []mn.SendOnlyNode[mn.StringID, *client.Client]{}, + sendOnlyNodes, mn.StringID(id), chainFamily, mnCfg.DeathDeclarationDelay(), diff --git a/pkg/solana/client/client.go b/pkg/solana/client/client.go index 35ab96e62..785e7e508 100644 --- a/pkg/solana/client/client.go +++ b/pkg/solana/client/client.go @@ -73,10 +73,11 @@ type Head struct { } func (h *Head) BlockNumber() int64 { - if h.BlockHeight == nil { + if !h.IsValid() { return 0 } - //nolint:gosec + // nolint:gosec + // G115: integer overflow conversion uint64 -> int64 return int64(*h.BlockHeight) } diff --git a/pkg/solana/config/config.go b/pkg/solana/config/config.go index 9d5cdc5a9..28698c7c3 100644 --- a/pkg/solana/config/config.go +++ b/pkg/solana/config/config.go @@ -146,8 +146,9 @@ func (c *Chain) SetDefaults() { } type Node struct { - Name *string - URL *config.URL + Name *string + URL *config.URL + SendOnly bool } func (n *Node) ValidateConfig() (err error) { diff --git a/pkg/solana/config/toml.go b/pkg/solana/config/toml.go index 599729ec5..90657fd2c 100644 --- a/pkg/solana/config/toml.go +++ b/pkg/solana/config/toml.go @@ -105,6 +105,7 @@ func setFromNode(n, f *Node) { if f.URL != nil { n.URL = f.URL } + n.SendOnly = f.SendOnly } type TOMLConfig struct { @@ -192,20 +193,6 @@ func (c *TOMLConfig) ValidateConfig() (err error) { if len(c.Nodes) == 0 { err = errors.Join(err, config.ErrMissing{Name: "Nodes", Msg: "must have at least one node"}) } - - for _, node := range c.Nodes { - if node.Name == nil { - err = errors.Join(err, config.ErrMissing{Name: "Name", Msg: "required for all nodes"}) - } else if *node.Name == "" { - err = errors.Join(err, config.ErrEmpty{Name: "Name", Msg: "required for all nodes"}) - } - if node.URL == nil { - err = errors.Join(err, config.ErrMissing{Name: "URL", Msg: "required for all nodes"}) - } else if (*url.URL)(node.URL) == nil { - err = errors.Join(err, config.ErrEmpty{Name: "URL", Msg: "required for all nodes"}) - } - } - return }