Skip to content

Commit

Permalink
change client not requiring height provided, also change client being…
Browse files Browse the repository at this point in the history
… passed in
  • Loading branch information
sideninja committed May 8, 2024
1 parent 689797c commit 6e4dca5
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 38 deletions.
16 changes: 13 additions & 3 deletions bootstrap/bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,14 +99,24 @@ func startIngestion(
) error {
logger.Info().Msg("starting up event ingestion")

client, err := models.NewCrossSporkClient(cfg.AccessNodeHost, logger)
grpcClient, err := grpc.NewClient(cfg.AccessNodeHost)
if err != nil {
return fmt.Errorf("failed to create client connection for host: %s, with error: %w", cfg.AccessNodeHost, err)
}

client, err := models.NewCrossSporkClient(grpcClient, logger)
if err != nil {
return err
}

// if we provided access node previous spork hosts add them to the client
for height, host := range cfg.AccessNodePreviousSporkHosts {
if err := client.AddSpork(height, host); err != nil {
for _, host := range cfg.AccessNodePreviousSporkHosts {
grpcClient, err := grpc.NewClient(host)
if err != nil {
return fmt.Errorf("failed to create client connection for host: %s, with error: %w", host, err)
}

if err := client.AddSpork(grpcClient); err != nil {
return fmt.Errorf("failed to add previous spork host to the client: %w", err)
}
}
Expand Down
24 changes: 5 additions & 19 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"io"
"math/big"
"os"
"strconv"
"strings"
"time"

Expand All @@ -33,9 +32,8 @@ type Config struct {
DatabaseDir string
// AccessNodeHost defines the current spork Flow network AN host.
AccessNodeHost string
// AccessNodePreviousSporkHosts contains a map of latest heights for each spork,
// which can be accessed via the host of the AN provided
AccessNodePreviousSporkHosts map[uint64]string
// AccessNodePreviousSporkHosts contains a list of the ANs hosts for each spork
AccessNodePreviousSporkHosts []string
// GRPCPort for the RPC API server
RPCPort int
// GRPCHost for the RPC API server
Expand Down Expand Up @@ -73,9 +71,7 @@ type Config struct {
}

func FromFlags() (*Config, error) {
cfg := &Config{
AccessNodePreviousSporkHosts: make(map[uint64]string),
}
cfg := &Config{}
var evmNetwork, coinbase, gas, coa, key, keysPath, flowNetwork, logLevel, filterExpiry, accessSporkHosts string
var streamTimeout int
var initHeight uint64
Expand All @@ -85,7 +81,7 @@ func FromFlags() (*Config, error) {
flag.StringVar(&cfg.RPCHost, "rpc-host", "", "Host for the RPC API server")
flag.IntVar(&cfg.RPCPort, "rpc-port", 8545, "Port for the RPC API server")
flag.StringVar(&cfg.AccessNodeHost, "access-node-grpc-host", "localhost:3569", "Host to the flow access node gRPC API")
flag.StringVar(&accessSporkHosts, "access-node-spork-hosts", "", `Previous spork AN hosts, defined following the schema: {latest height}@{host} as comma separated list (e.g. "200@host-1.com,300@host2.com")`)
flag.StringVar(&accessSporkHosts, "access-node-spork-hosts", "", `Previous spork AN hosts, defined following the schema: {host1},{host2} as a comma separated list (e.g. "host-1.com,host2.com")`)
flag.StringVar(&evmNetwork, "evm-network-id", "previewnet", "EVM network ID (previewnet, testnet, mainnet)")
flag.StringVar(&flowNetwork, "flow-network-id", "flow-emulator", "Flow network ID (flow-emulator, flow-previewnet)")
flag.StringVar(&coinbase, "coinbase", "", "Coinbase address to use for fee collection")
Expand Down Expand Up @@ -192,17 +188,7 @@ func FromFlags() (*Config, error) {
if accessSporkHosts != "" {
heightHosts := strings.Split(accessSporkHosts, ",")
for _, hh := range heightHosts {
v := strings.Split(hh, "@")
if len(v) != 2 {
return nil, fmt.Errorf("failed to parse AN spork value provided with --access-node-spork-hosts flag")
}
heightVal, host := v[0], v[1]
height, err := strconv.Atoi(heightVal)
if err != nil {
return nil, fmt.Errorf("failed to parse AN host height value for previous sporks, provided with --access-node-spork-hosts flag")
}

cfg.AccessNodePreviousSporkHosts[uint64(height)] = host
cfg.AccessNodePreviousSporkHosts = append(cfg.AccessNodePreviousSporkHosts, hh)
}
}

Expand Down
26 changes: 10 additions & 16 deletions models/cross-spork_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"github.com/onflow/cadence"
"github.com/onflow/flow-go-sdk"
"github.com/onflow/flow-go-sdk/access"
"github.com/onflow/flow-go-sdk/access/grpc"
"github.com/rs/zerolog"
"golang.org/x/exp/maps"
"golang.org/x/exp/slices"
Expand All @@ -29,36 +28,31 @@ type CrossSporkClient struct {

// NewCrossSporkClient creates a new instance of the client, it accepts the
// host to the current spork AN API.
func NewCrossSporkClient(currentSporkHost string, logger zerolog.Logger) (*CrossSporkClient, error) {
// add current spork AN host as the default client
client, err := grpc.NewClient(currentSporkHost)
if err != nil {
return nil, err
}

func NewCrossSporkClient(currentSporkClient access.Client, logger zerolog.Logger) (*CrossSporkClient, error) {
return &CrossSporkClient{
logger,
make(map[uint64]access.Client),
client,
currentSporkClient,
}, nil
}

// AddSpork will add a new spork host defined by the last height boundary in that spork.
func (c *CrossSporkClient) AddSpork(lastHeight uint64, host string) error {
if _, ok := c.sporkHosts[lastHeight]; ok {
return fmt.Errorf("provided last height already exists")
func (c *CrossSporkClient) AddSpork(client access.Client) error {
header, err := client.GetLatestBlockHeader(context.Background(), true)
if err != nil {
return fmt.Errorf("could not get latest height using the spork client: %w", err)
}

client, err := grpc.NewClient(host)
if err != nil {
return err
lastHeight := header.Height

if _, ok := c.sporkHosts[lastHeight]; ok {
return fmt.Errorf("provided last height already exists")
}

c.sporkHosts[lastHeight] = client

c.logger.Info().
Uint64("spork-boundary", lastHeight).
Str("host", host).
Msg("added spork specific client")

return nil
Expand Down

0 comments on commit 6e4dca5

Please sign in to comment.