From 99dd1d276eb9505589d50cad10231691f9549727 Mon Sep 17 00:00:00 2001 From: jeff <113397187+cyberhorsey@users.noreply.github.com> Date: Wed, 17 Jan 2024 23:04:22 -0800 Subject: [PATCH] feat(relayer, eventindexer): move code to pkg folder, use new api subcommand for eventindexer/relayer (#15502) --- codecov.yml | 3 +- packages/eventindexer/api/api.go | 103 ++++++++++++++++++ packages/eventindexer/api/config.go | 77 +++++++++++++ packages/eventindexer/api/config_test.go | 67 ++++++++++++ packages/eventindexer/cmd/flags/api.go | 39 +++++++ packages/eventindexer/cmd/flags/common.go | 19 ++++ packages/eventindexer/cmd/flags/indexer.go | 39 +------ packages/eventindexer/cmd/main.go | 8 ++ .../cmd/utils/subcommand_action.go | 2 +- packages/eventindexer/{ => docs}/index.html | 0 packages/eventindexer/generator/config.go | 2 +- packages/eventindexer/generator/generator.go | 2 +- packages/eventindexer/indexer/config.go | 14 +-- packages/eventindexer/indexer/config_test.go | 9 +- packages/eventindexer/indexer/indexer.go | 39 +------ packages/eventindexer/{ => pkg}/db/db.go | 0 packages/eventindexer/{ => pkg}/http/cache.go | 0 .../eventindexer/{ => pkg}/http/errors.go | 0 .../eventindexer/{ => pkg}/http/galaxe.go | 0 .../get_assigned_blocks_by_prover_address.go | 0 .../http/get_by_address_and_event.go | 0 .../http/get_by_address_and_event_test.go | 0 .../{ => pkg}/http/get_chart_by_task.go | 0 .../http/get_count_by_address_and_event.go | 0 .../get_count_by_address_and_event_test.go | 0 ...et_nft_balances_by_address_and_chain_id.go | 0 .../eventindexer/{ => pkg}/http/get_stats.go | 0 .../{ => pkg}/http/get_stats_test.go | 0 .../{ => pkg}/http/get_unique_proposers.go | 0 .../http/get_unique_proposers_test.go | 0 .../{ => pkg}/http/get_unique_provers.go | 0 .../{ => pkg}/http/get_unique_provers_test.go | 0 .../eventindexer/{ => pkg}/http/routes.go | 0 .../eventindexer/{ => pkg}/http/server.go | 0 .../{ => pkg}/http/server_test.go | 4 +- .../{ => pkg}/http/user_added_liquidity.go | 0 .../{ => pkg}/http/user_bridged.go | 0 .../{ => pkg}/http/user_proposed_block.go | 0 .../{ => pkg}/http/user_proved_block.go | 0 .../{ => pkg}/http/user_swapped_on_taiko.go | 0 .../eventindexer/{ => pkg}/metrics/metrics.go | 0 .../{ => pkg}/metrics/metrics_test.go | 0 .../{ => pkg}/mock/event_repository.go | 0 .../{ => pkg}/mock/nft_balance_repository.go | 0 .../mock/processed_block_repository.go | 0 .../{ => pkg}/mock/stat_repository.go | 0 packages/eventindexer/{ => pkg}/mock/types.go | 0 .../eventindexer/{ => pkg}/repo/account.go | 0 .../{ => pkg}/repo/account_test.go | 2 +- packages/eventindexer/{ => pkg}/repo/block.go | 0 .../eventindexer/{ => pkg}/repo/block_test.go | 2 +- packages/eventindexer/{ => pkg}/repo/chart.go | 0 .../eventindexer/{ => pkg}/repo/chart_test.go | 2 +- .../{ => pkg}/repo/containers_test.go | 4 +- packages/eventindexer/{ => pkg}/repo/event.go | 0 .../eventindexer/{ => pkg}/repo/event_test.go | 0 .../{ => pkg}/repo/nft_balance.go | 0 .../{ => pkg}/repo/nft_balance_test.go | 2 +- .../{ => pkg}/repo/processed_block.go | 0 .../{ => pkg}/repo/processed_block_test.go | 2 +- packages/eventindexer/{ => pkg}/repo/stat.go | 0 .../eventindexer/{ => pkg}/repo/stat_test.go | 0 .../{ => pkg}/repo/transaction.go | 0 .../{ => pkg}/repo/transaction_test.go | 2 +- .../eventindexer/{ => pkg}/tasks/tasks.go | 0 packages/relayer/api/api.go | 100 +++++++++++++++++ packages/relayer/api/config.go | 67 ++++++++++++ packages/relayer/api/config_test.go | 71 ++++++++++++ packages/relayer/cmd/flags/api.go | 29 +++++ packages/relayer/cmd/flags/common.go | 40 ------- packages/relayer/cmd/flags/indexer.go | 26 ++--- packages/relayer/cmd/flags/processor.go | 3 +- packages/relayer/cmd/flags/queue.go | 41 +++++++ packages/relayer/cmd/main.go | 10 +- packages/relayer/cmd/utils/subcommand.go | 2 +- packages/relayer/{ => docs}/index.html | 0 packages/relayer/indexer/config.go | 12 +- packages/relayer/indexer/config_test.go | 9 +- packages/relayer/indexer/handle_event.go | 2 +- packages/relayer/indexer/handle_event_test.go | 2 +- packages/relayer/indexer/indexer.go | 36 +----- packages/relayer/indexer/indexer_test.go | 15 +-- ...t_initial_processing_block_by_mode_test.go | 2 +- packages/relayer/indexer/start_test.go | 2 +- packages/relayer/indexer/subscribe_test.go | 2 +- packages/relayer/{ => pkg}/db/db.go | 0 packages/relayer/{ => pkg}/db/db_test.go | 0 .../{ => pkg}/encoding/block_header.go | 0 .../{ => pkg}/encoding/block_header_test.go | 0 .../relayer/{ => pkg}/encoding/logs_bloom.go | 0 .../{ => pkg}/encoding/logs_bloom_test.go | 0 .../{ => pkg}/encoding/signal_proof.go | 0 .../{ => pkg}/encoding/signal_proof_test.go | 0 packages/relayer/{ => pkg}/encoding/types.go | 0 .../relayer/{indexer => pkg}/http/errors.go | 0 .../{indexer => pkg}/http/get_block_info.go | 0 .../http/get_events_by_address.go | 0 .../http/get_events_by_address_test.go | 0 .../relayer/{indexer => pkg}/http/routes.go | 0 .../relayer/{indexer => pkg}/http/server.go | 0 .../{indexer => pkg}/http/server_test.go | 4 +- packages/relayer/{ => pkg}/metrics/metrics.go | 0 .../relayer/{ => pkg}/metrics/metrics_test.go | 0 .../{ => pkg}/mock/block_repository.go | 0 packages/relayer/{ => pkg}/mock/blocker.go | 0 packages/relayer/{ => pkg}/mock/bridge.go | 0 packages/relayer/{ => pkg}/mock/caller.go | 0 packages/relayer/{ => pkg}/mock/db.go | 0 packages/relayer/{ => pkg}/mock/eth_client.go | 0 .../{ => pkg}/mock/event_repository.go | 0 .../relayer/{ => pkg}/mock/header_syncer.go | 0 packages/relayer/{ => pkg}/mock/queue.go | 2 +- .../relayer/{ => pkg}/mock/signalservice.go | 0 .../relayer/{ => pkg}/mock/token_vault.go | 0 .../relayer/{ => pkg}/proof/block_header.go | 2 +- .../{ => pkg}/proof/block_header_test.go | 4 +- .../{ => pkg}/proof/encoded_signal_proof.go | 2 +- .../proof/encoded_signal_proof_test.go | 2 +- packages/relayer/{ => pkg}/proof/prover.go | 0 .../relayer/{ => pkg}/proof/prover_test.go | 2 +- packages/relayer/{ => pkg}/proof/types.go | 0 .../relayer/{ => pkg}/proof/types_test.go | 0 packages/relayer/{ => pkg}/queue/queue.go | 0 .../relayer/{ => pkg}/queue/rabbitmq/queue.go | 2 +- packages/relayer/{ => pkg}/repo/block.go | 0 packages/relayer/{ => pkg}/repo/block_test.go | 2 +- .../relayer/{ => pkg}/repo/containers_test.go | 4 +- packages/relayer/{ => pkg}/repo/db.go | 0 packages/relayer/{ => pkg}/repo/event.go | 0 packages/relayer/{ => pkg}/repo/event_test.go | 2 +- packages/relayer/processor/config.go | 6 +- packages/relayer/processor/config_test.go | 4 +- .../processor/get_latest_nonce_test.go | 2 +- .../relayer/processor/is_profitable_test.go | 2 +- packages/relayer/processor/process_message.go | 4 +- .../relayer/processor/process_message_test.go | 4 +- packages/relayer/processor/processor.go | 6 +- packages/relayer/processor/processor_test.go | 4 +- .../processor/wait_for_confirmations_test.go | 2 +- .../processor/wait_header_synced_test.go | 2 +- 140 files changed, 710 insertions(+), 268 deletions(-) create mode 100644 packages/eventindexer/api/api.go create mode 100644 packages/eventindexer/api/config.go create mode 100644 packages/eventindexer/api/config_test.go create mode 100644 packages/eventindexer/cmd/flags/api.go rename packages/eventindexer/{ => docs}/index.html (100%) rename packages/eventindexer/{ => pkg}/db/db.go (100%) rename packages/eventindexer/{ => pkg}/http/cache.go (100%) rename packages/eventindexer/{ => pkg}/http/errors.go (100%) rename packages/eventindexer/{ => pkg}/http/galaxe.go (100%) rename packages/eventindexer/{ => pkg}/http/get_assigned_blocks_by_prover_address.go (100%) rename packages/eventindexer/{ => pkg}/http/get_by_address_and_event.go (100%) rename packages/eventindexer/{ => pkg}/http/get_by_address_and_event_test.go (100%) rename packages/eventindexer/{ => pkg}/http/get_chart_by_task.go (100%) rename packages/eventindexer/{ => pkg}/http/get_count_by_address_and_event.go (100%) rename packages/eventindexer/{ => pkg}/http/get_count_by_address_and_event_test.go (100%) rename packages/eventindexer/{ => pkg}/http/get_nft_balances_by_address_and_chain_id.go (100%) rename packages/eventindexer/{ => pkg}/http/get_stats.go (100%) rename packages/eventindexer/{ => pkg}/http/get_stats_test.go (100%) rename packages/eventindexer/{ => pkg}/http/get_unique_proposers.go (100%) rename packages/eventindexer/{ => pkg}/http/get_unique_proposers_test.go (100%) rename packages/eventindexer/{ => pkg}/http/get_unique_provers.go (100%) rename packages/eventindexer/{ => pkg}/http/get_unique_provers_test.go (100%) rename packages/eventindexer/{ => pkg}/http/routes.go (100%) rename packages/eventindexer/{ => pkg}/http/server.go (100%) rename packages/eventindexer/{ => pkg}/http/server_test.go (96%) rename packages/eventindexer/{ => pkg}/http/user_added_liquidity.go (100%) rename packages/eventindexer/{ => pkg}/http/user_bridged.go (100%) rename packages/eventindexer/{ => pkg}/http/user_proposed_block.go (100%) rename packages/eventindexer/{ => pkg}/http/user_proved_block.go (100%) rename packages/eventindexer/{ => pkg}/http/user_swapped_on_taiko.go (100%) rename packages/eventindexer/{ => pkg}/metrics/metrics.go (100%) rename packages/eventindexer/{ => pkg}/metrics/metrics_test.go (100%) rename packages/eventindexer/{ => pkg}/mock/event_repository.go (100%) rename packages/eventindexer/{ => pkg}/mock/nft_balance_repository.go (100%) rename packages/eventindexer/{ => pkg}/mock/processed_block_repository.go (100%) rename packages/eventindexer/{ => pkg}/mock/stat_repository.go (100%) rename packages/eventindexer/{ => pkg}/mock/types.go (100%) rename packages/eventindexer/{ => pkg}/repo/account.go (100%) rename packages/eventindexer/{ => pkg}/repo/account_test.go (95%) rename packages/eventindexer/{ => pkg}/repo/block.go (100%) rename packages/eventindexer/{ => pkg}/repo/block_test.go (97%) rename packages/eventindexer/{ => pkg}/repo/chart.go (100%) rename packages/eventindexer/{ => pkg}/repo/chart_test.go (94%) rename packages/eventindexer/{ => pkg}/repo/containers_test.go (92%) rename packages/eventindexer/{ => pkg}/repo/event.go (100%) rename packages/eventindexer/{ => pkg}/repo/event_test.go (100%) rename packages/eventindexer/{ => pkg}/repo/nft_balance.go (100%) rename packages/eventindexer/{ => pkg}/repo/nft_balance_test.go (98%) rename packages/eventindexer/{ => pkg}/repo/processed_block.go (100%) rename packages/eventindexer/{ => pkg}/repo/processed_block_test.go (96%) rename packages/eventindexer/{ => pkg}/repo/stat.go (100%) rename packages/eventindexer/{ => pkg}/repo/stat_test.go (100%) rename packages/eventindexer/{ => pkg}/repo/transaction.go (100%) rename packages/eventindexer/{ => pkg}/repo/transaction_test.go (97%) rename packages/eventindexer/{ => pkg}/tasks/tasks.go (100%) create mode 100644 packages/relayer/api/api.go create mode 100644 packages/relayer/api/config.go create mode 100644 packages/relayer/api/config_test.go create mode 100644 packages/relayer/cmd/flags/api.go create mode 100644 packages/relayer/cmd/flags/queue.go rename packages/relayer/{ => docs}/index.html (100%) rename packages/relayer/{ => pkg}/db/db.go (100%) rename packages/relayer/{ => pkg}/db/db_test.go (100%) rename packages/relayer/{ => pkg}/encoding/block_header.go (100%) rename packages/relayer/{ => pkg}/encoding/block_header_test.go (100%) rename packages/relayer/{ => pkg}/encoding/logs_bloom.go (100%) rename packages/relayer/{ => pkg}/encoding/logs_bloom_test.go (100%) rename packages/relayer/{ => pkg}/encoding/signal_proof.go (100%) rename packages/relayer/{ => pkg}/encoding/signal_proof_test.go (100%) rename packages/relayer/{ => pkg}/encoding/types.go (100%) rename packages/relayer/{indexer => pkg}/http/errors.go (100%) rename packages/relayer/{indexer => pkg}/http/get_block_info.go (100%) rename packages/relayer/{indexer => pkg}/http/get_events_by_address.go (100%) rename packages/relayer/{indexer => pkg}/http/get_events_by_address_test.go (100%) rename packages/relayer/{indexer => pkg}/http/routes.go (100%) rename packages/relayer/{indexer => pkg}/http/server.go (100%) rename packages/relayer/{indexer => pkg}/http/server_test.go (96%) rename packages/relayer/{ => pkg}/metrics/metrics.go (100%) rename packages/relayer/{ => pkg}/metrics/metrics_test.go (100%) rename packages/relayer/{ => pkg}/mock/block_repository.go (100%) rename packages/relayer/{ => pkg}/mock/blocker.go (100%) rename packages/relayer/{ => pkg}/mock/bridge.go (100%) rename packages/relayer/{ => pkg}/mock/caller.go (100%) rename packages/relayer/{ => pkg}/mock/db.go (100%) rename packages/relayer/{ => pkg}/mock/eth_client.go (100%) rename packages/relayer/{ => pkg}/mock/event_repository.go (100%) rename packages/relayer/{ => pkg}/mock/header_syncer.go (100%) rename packages/relayer/{ => pkg}/mock/queue.go (91%) rename packages/relayer/{ => pkg}/mock/signalservice.go (100%) rename packages/relayer/{ => pkg}/mock/token_vault.go (100%) rename packages/relayer/{ => pkg}/proof/block_header.go (92%) rename packages/relayer/{ => pkg}/proof/block_header_test.go (83%) rename packages/relayer/{ => pkg}/proof/encoded_signal_proof.go (98%) rename packages/relayer/{ => pkg}/proof/encoded_signal_proof_test.go (94%) rename packages/relayer/{ => pkg}/proof/prover.go (100%) rename packages/relayer/{ => pkg}/proof/prover_test.go (91%) rename packages/relayer/{ => pkg}/proof/types.go (100%) rename packages/relayer/{ => pkg}/proof/types_test.go (100%) rename packages/relayer/{ => pkg}/queue/queue.go (100%) rename packages/relayer/{ => pkg}/queue/rabbitmq/queue.go (99%) rename packages/relayer/{ => pkg}/repo/block.go (100%) rename packages/relayer/{ => pkg}/repo/block_test.go (96%) rename packages/relayer/{ => pkg}/repo/containers_test.go (92%) rename packages/relayer/{ => pkg}/repo/db.go (100%) rename packages/relayer/{ => pkg}/repo/event.go (100%) rename packages/relayer/{ => pkg}/repo/event_test.go (99%) diff --git a/codecov.yml b/codecov.yml index f7652af08ef..aaba45dcea6 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,7 +1,8 @@ coverage: ignore: - "packages/relayer/bindings/**/*" - - "packages/relayer/mock/**/*" + - "packages/eventindexer/contracts/**/*" + - "packages/relayer/pkg/mock/**/*" - "packages/relayer/cmd/**/*" status: project: off diff --git a/packages/eventindexer/api/api.go b/packages/eventindexer/api/api.go new file mode 100644 index 00000000000..da194ca21fa --- /dev/null +++ b/packages/eventindexer/api/api.go @@ -0,0 +1,103 @@ +package api + +import ( + "context" + "fmt" + "log/slog" + + nethttp "net/http" + + "github.com/ethereum/go-ethereum/ethclient" + "github.com/labstack/echo/v4" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/http" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/repo" + "github.com/urfave/cli/v2" +) + +type API struct { + httpPort uint64 + srv *http.Server + + ctx context.Context +} + +func (api *API) Start() error { + api.ctx = context.Background() + go func() { + if err := api.srv.Start(fmt.Sprintf(":%v", api.httpPort)); err != nethttp.ErrServerClosed { + slog.Error("http srv start", "error", err.Error()) + } + }() + + return nil +} + +func (api *API) Name() string { + return "api" +} + +func (api *API) InitFromCli(ctx context.Context, c *cli.Context) error { + cfg, err := NewConfigFromCliContext(c) + if err != nil { + return err + } + + return InitFromConfig(ctx, api, cfg) +} + +// nolint: funlen +func InitFromConfig(ctx context.Context, api *API, cfg *Config) error { + db, err := cfg.OpenDBFunc() + if err != nil { + return err + } + + eventRepository, err := repo.NewEventRepository(db) + if err != nil { + return err + } + + chartRepository, err := repo.NewChartRepository(db) + if err != nil { + return err + } + + statRepository, err := repo.NewStatRepository(db) + if err != nil { + return err + } + + nftBalanceRepository, err := repo.NewNFTBalanceRepository(db) + if err != nil { + return err + } + + ethClient, err := ethclient.Dial(cfg.RPCUrl) + if err != nil { + return err + } + + srv, err := http.NewServer(http.NewServerOpts{ + EventRepo: eventRepository, + StatRepo: statRepository, + NFTBalanceRepo: nftBalanceRepository, + ChartRepo: chartRepository, + Echo: echo.New(), + CorsOrigins: cfg.CORSOrigins, + EthClient: ethClient, + }) + if err != nil { + return err + } + + api.srv = srv + api.httpPort = cfg.HTTPPort + + return nil +} + +func (api *API) Close(ctx context.Context) { + if err := api.srv.Shutdown(ctx); err != nil { + slog.Error("srv shutdown", "error", err) + } +} diff --git a/packages/eventindexer/api/config.go b/packages/eventindexer/api/config.go new file mode 100644 index 00000000000..430f12d37f9 --- /dev/null +++ b/packages/eventindexer/api/config.go @@ -0,0 +1,77 @@ +package api + +import ( + "database/sql" + "strings" + + "github.com/taikoxyz/taiko-mono/packages/eventindexer/cmd/flags" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/db" + "github.com/urfave/cli/v2" + "gorm.io/driver/mysql" + "gorm.io/gorm" + "gorm.io/gorm/logger" +) + +type DB interface { + DB() (*sql.DB, error) + GormDB() *gorm.DB +} + +type Config struct { + // db configs + DatabaseUsername string + DatabasePassword string + DatabaseName string + DatabaseHost string + DatabaseMaxIdleConns uint64 + DatabaseMaxOpenConns uint64 + DatabaseMaxConnLifetime uint64 + RPCUrl string + HTTPPort uint64 + MetricsHTTPPort uint64 + ETHClientTimeout uint64 + CORSOrigins []string + OpenDBFunc func() (DB, error) +} + +// NewConfigFromCliContext creates a new config instance from command line flags. +func NewConfigFromCliContext(c *cli.Context) (*Config, error) { + cors := make([]string, 0) + + cors = append(cors, strings.Split(c.String(flags.CORSOrigins.Name), ",")...) + + return &Config{ + DatabaseUsername: c.String(flags.DatabaseUsername.Name), + DatabasePassword: c.String(flags.DatabasePassword.Name), + DatabaseName: c.String(flags.DatabaseName.Name), + DatabaseHost: c.String(flags.DatabaseHost.Name), + DatabaseMaxIdleConns: c.Uint64(flags.DatabaseMaxIdleConns.Name), + DatabaseMaxOpenConns: c.Uint64(flags.DatabaseMaxOpenConns.Name), + DatabaseMaxConnLifetime: c.Uint64(flags.DatabaseConnMaxLifetime.Name), + HTTPPort: c.Uint64(flags.HTTPPort.Name), + MetricsHTTPPort: c.Uint64(flags.MetricsHTTPPort.Name), + CORSOrigins: cors, + RPCUrl: c.String(flags.APIRPCUrl.Name), + OpenDBFunc: func() (DB, error) { + return db.OpenDBConnection(db.DBConnectionOpts{ + Name: c.String(flags.DatabaseUsername.Name), + Password: c.String(flags.DatabasePassword.Name), + Database: c.String(flags.DatabaseName.Name), + Host: c.String(flags.DatabaseHost.Name), + MaxIdleConns: c.Uint64(flags.DatabaseMaxIdleConns.Name), + MaxOpenConns: c.Uint64(flags.DatabaseMaxOpenConns.Name), + MaxConnLifetime: c.Uint64(flags.DatabaseConnMaxLifetime.Name), + OpenFunc: func(dsn string) (*db.DB, error) { + gormDB, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ + Logger: logger.Default.LogMode(logger.Silent), + }) + if err != nil { + return nil, err + } + + return db.New(gormDB), nil + }, + }) + }, + }, nil +} diff --git a/packages/eventindexer/api/config_test.go b/packages/eventindexer/api/config_test.go new file mode 100644 index 00000000000..9d0bac04747 --- /dev/null +++ b/packages/eventindexer/api/config_test.go @@ -0,0 +1,67 @@ +package api + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/cmd/flags" + "github.com/urfave/cli/v2" +) + +var ( + httpPort = "1000" + metricsHttpPort = "1001" + corsOrigins = "http://localhost:3000,http://localhost:3001" + databaseMaxIdleConns = "10" + databaseMaxOpenConns = "10" + databaseMaxConnLifetime = "30" +) + +func setupApp() *cli.App { + app := cli.NewApp() + app.Flags = flags.APIFlags + app.Action = func(ctx *cli.Context) error { + _, err := NewConfigFromCliContext(ctx) + return err + } + + return app +} + +func TestNewConfigFromCliContext(t *testing.T) { + app := setupApp() + + app.Action = func(ctx *cli.Context) error { + c, err := NewConfigFromCliContext(ctx) + + assert.Nil(t, err) + assert.Equal(t, "dbuser", c.DatabaseUsername) + assert.Equal(t, "dbpass", c.DatabasePassword) + assert.Equal(t, "dbname", c.DatabaseName) + assert.Equal(t, "dbhost", c.DatabaseHost) + assert.Equal(t, "rpcUrl", c.RPCUrl) + assert.Equal(t, uint64(1000), c.HTTPPort) + assert.Equal(t, uint64(1001), c.MetricsHTTPPort) + assert.Equal(t, uint64(10), c.DatabaseMaxIdleConns) + assert.Equal(t, uint64(10), c.DatabaseMaxOpenConns) + assert.Equal(t, uint64(30), c.DatabaseMaxConnLifetime) + assert.NotNil(t, c.OpenDBFunc) + + return err + } + + assert.Nil(t, app.Run([]string{ + "TestNewConfigFromCliContext", + "--" + flags.DatabaseUsername.Name, "dbuser", + "--" + flags.DatabasePassword.Name, "dbpass", + "--" + flags.DatabaseHost.Name, "dbhost", + "--" + flags.DatabaseName.Name, "dbname", + "--" + flags.APIRPCUrl.Name, "rpcUrl", + "--" + flags.HTTPPort.Name, httpPort, + "--" + flags.MetricsHTTPPort.Name, metricsHttpPort, + "--" + flags.CORSOrigins.Name, corsOrigins, + "--" + flags.DatabaseMaxIdleConns.Name, databaseMaxIdleConns, + "--" + flags.DatabaseMaxOpenConns.Name, databaseMaxOpenConns, + "--" + flags.DatabaseConnMaxLifetime.Name, databaseMaxConnLifetime, + })) +} diff --git a/packages/eventindexer/cmd/flags/api.go b/packages/eventindexer/cmd/flags/api.go new file mode 100644 index 00000000000..ce862f343bb --- /dev/null +++ b/packages/eventindexer/cmd/flags/api.go @@ -0,0 +1,39 @@ +package flags + +import "github.com/urfave/cli/v2" + +// required flags +var ( + APIRPCUrl = &cli.StringFlag{ + Name: "rpcUrl", + Usage: "RPC URL for the source chain", + Required: true, + Category: commonCategory, + EnvVars: []string{"RPC_URL"}, + } +) + +// optional flags +var ( + HTTPPort = &cli.Uint64Flag{ + Name: "http.port", + Usage: "Port to run http server on", + Category: indexerCategory, + Required: false, + Value: 4102, + EnvVars: []string{"HTTP_PORT"}, + } + CORSOrigins = &cli.StringFlag{ + Name: "http.corsOrigins", + Usage: "Comma-delinated list of cors origins", + Required: false, + Value: "*", + Category: indexerCategory, + } +) + +var APIFlags = MergeFlags(CommonFlags, []cli.Flag{ + APIRPCUrl, + HTTPPort, + CORSOrigins, +}) diff --git a/packages/eventindexer/cmd/flags/common.go b/packages/eventindexer/cmd/flags/common.go index cce7b249140..0e91aed5b58 100644 --- a/packages/eventindexer/cmd/flags/common.go +++ b/packages/eventindexer/cmd/flags/common.go @@ -63,6 +63,23 @@ var ( Category: commonCategory, EnvVars: []string{"DATABASE_CONN_MAX_LIFETIME"}, } + MetricsHTTPPort = &cli.Uint64Flag{ + Name: "metrics.port", + Usage: "Port to run metrics http server on", + Category: indexerCategory, + Required: false, + Value: 6061, + EnvVars: []string{"METRICS_HTTP_PORT"}, + } + + Layer = &cli.StringFlag{ + Name: "layer", + Usage: "Which layer indexing is occurring on", + Required: false, + Value: "l1", + Category: indexerCategory, + EnvVars: []string{"LAYER"}, + } ) // All common flags. @@ -75,6 +92,8 @@ var CommonFlags = []cli.Flag{ DatabaseMaxIdleConns, DatabaseConnMaxLifetime, DatabaseMaxOpenConns, + MetricsHTTPPort, + Layer, } // MergeFlags merges the given flag slices. diff --git a/packages/eventindexer/cmd/flags/indexer.go b/packages/eventindexer/cmd/flags/indexer.go index 37f16b529d6..57c2152bc40 100644 --- a/packages/eventindexer/cmd/flags/indexer.go +++ b/packages/eventindexer/cmd/flags/indexer.go @@ -4,7 +4,7 @@ import "github.com/urfave/cli/v2" // required flags var ( - RPCUrl = &cli.StringFlag{ + IndexerRPCUrl = &cli.StringFlag{ Name: "rpcUrl", Usage: "RPC URL for the source chain", Required: true, @@ -15,22 +15,6 @@ var ( // optional flags var ( - HTTPPort = &cli.Uint64Flag{ - Name: "http.port", - Usage: "Port to run http server on", - Category: indexerCategory, - Required: false, - Value: 4102, - EnvVars: []string{"HTTP_PORT"}, - } - MetricsHTTPPort = &cli.Uint64Flag{ - Name: "metrics.port", - Usage: "Port to run metrics http server on", - Category: indexerCategory, - Required: false, - Value: 6061, - EnvVars: []string{"METRICS_HTTP_PORT"}, - } ETHClientTimeout = &cli.Uint64Flag{ Name: "ethClientTimeout", Usage: "Timeout for eth client and contract binding calls", @@ -67,13 +51,6 @@ var ( Category: indexerCategory, EnvVars: []string{"ASSIGNMENT_HOOK_ADDRESS"}, } - CORSOrigins = &cli.StringFlag{ - Name: "http.corsOrigins", - Usage: "Comma-delinated list of cors origins", - Required: false, - Value: "*", - Category: indexerCategory, - } BlockBatchSize = &cli.Uint64Flag{ Name: "blockBatchSize", Usage: "Block batch size when iterating through blocks", @@ -115,31 +92,19 @@ var ( Category: indexerCategory, EnvVars: []string{"INDEX_NFTS"}, } - Layer = &cli.StringFlag{ - Name: "layer", - Usage: "Which layer indexing is occurring on", - Required: false, - Value: "l1", - Category: indexerCategory, - EnvVars: []string{"LAYER"}, - } ) var IndexerFlags = MergeFlags(CommonFlags, []cli.Flag{ - RPCUrl, + IndexerRPCUrl, // optional ETHClientTimeout, L1TaikoAddress, - HTTPPort, - MetricsHTTPPort, BridgeAddress, SwapAddresses, AssignmentHookAddress, - CORSOrigins, BlockBatchSize, SubscriptionBackoff, SyncMode, WatchMode, IndexNFTs, - Layer, }) diff --git a/packages/eventindexer/cmd/main.go b/packages/eventindexer/cmd/main.go index 53f652255aa..eed9a84fb7b 100644 --- a/packages/eventindexer/cmd/main.go +++ b/packages/eventindexer/cmd/main.go @@ -6,6 +6,7 @@ import ( "os" "github.com/joho/godotenv" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/api" "github.com/taikoxyz/taiko-mono/packages/eventindexer/cmd/flags" "github.com/taikoxyz/taiko-mono/packages/eventindexer/cmd/utils" "github.com/taikoxyz/taiko-mono/packages/eventindexer/generator" @@ -36,6 +37,13 @@ func main() { // All supported sub commands. app.Commands = []*cli.Command{ + { + Name: "api", + Flags: flags.APIFlags, + Usage: "Starts the http API software", + Description: "Taiko eventindexer http API software", + Action: utils.SubcommandAction(new(api.API)), + }, { Name: "indexer", Flags: flags.IndexerFlags, diff --git a/packages/eventindexer/cmd/utils/subcommand_action.go b/packages/eventindexer/cmd/utils/subcommand_action.go index b4fa237b775..7a61c7c1bcb 100644 --- a/packages/eventindexer/cmd/utils/subcommand_action.go +++ b/packages/eventindexer/cmd/utils/subcommand_action.go @@ -8,7 +8,7 @@ import ( "log/slog" - "github.com/taikoxyz/taiko-mono/packages/relayer/metrics" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/metrics" "github.com/urfave/cli/v2" ) diff --git a/packages/eventindexer/index.html b/packages/eventindexer/docs/index.html similarity index 100% rename from packages/eventindexer/index.html rename to packages/eventindexer/docs/index.html diff --git a/packages/eventindexer/generator/config.go b/packages/eventindexer/generator/config.go index 378b03c24c0..962d266a976 100644 --- a/packages/eventindexer/generator/config.go +++ b/packages/eventindexer/generator/config.go @@ -5,7 +5,7 @@ import ( "time" "github.com/taikoxyz/taiko-mono/packages/eventindexer/cmd/flags" - "github.com/taikoxyz/taiko-mono/packages/eventindexer/db" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/db" "github.com/urfave/cli/v2" "gorm.io/driver/mysql" "gorm.io/gorm" diff --git a/packages/eventindexer/generator/generator.go b/packages/eventindexer/generator/generator.go index 822aca79091..b49c581d457 100644 --- a/packages/eventindexer/generator/generator.go +++ b/packages/eventindexer/generator/generator.go @@ -10,7 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/shopspring/decimal" "github.com/taikoxyz/taiko-mono/packages/eventindexer" - "github.com/taikoxyz/taiko-mono/packages/eventindexer/tasks" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/tasks" "github.com/urfave/cli/v2" "gorm.io/gorm" ) diff --git a/packages/eventindexer/indexer/config.go b/packages/eventindexer/indexer/config.go index 32ff034db0a..e109afde0fb 100644 --- a/packages/eventindexer/indexer/config.go +++ b/packages/eventindexer/indexer/config.go @@ -6,7 +6,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/taikoxyz/taiko-mono/packages/eventindexer/cmd/flags" - "github.com/taikoxyz/taiko-mono/packages/eventindexer/db" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/db" "github.com/urfave/cli/v2" "gorm.io/driver/mysql" "gorm.io/gorm" @@ -28,14 +28,12 @@ type Config struct { DatabaseMaxOpenConns uint64 DatabaseMaxConnLifetime uint64 RPCUrl string - HTTPPort uint64 MetricsHTTPPort uint64 ETHClientTimeout uint64 L1TaikoAddress common.Address BridgeAddress common.Address AssignmentHookAddress common.Address SwapAddresses []common.Address - CORSOrigins []string BlockBatchSize uint64 SubscriptionBackoff uint64 SyncMode SyncMode @@ -57,12 +55,6 @@ func NewConfigFromCliContext(c *cli.Context) (*Config, error) { swaps = append(swaps, common.HexToAddress(v)) } - // and the same for CORS origins - - cors := make([]string, 0) - - cors = append(cors, strings.Split(c.String(flags.CORSOrigins.Name), ",")...) - return &Config{ DatabaseUsername: c.String(flags.DatabaseUsername.Name), DatabasePassword: c.String(flags.DatabasePassword.Name), @@ -71,17 +63,15 @@ func NewConfigFromCliContext(c *cli.Context) (*Config, error) { DatabaseMaxIdleConns: c.Uint64(flags.DatabaseMaxIdleConns.Name), DatabaseMaxOpenConns: c.Uint64(flags.DatabaseMaxOpenConns.Name), DatabaseMaxConnLifetime: c.Uint64(flags.DatabaseConnMaxLifetime.Name), - HTTPPort: c.Uint64(flags.HTTPPort.Name), MetricsHTTPPort: c.Uint64(flags.MetricsHTTPPort.Name), ETHClientTimeout: c.Uint64(flags.ETHClientTimeout.Name), L1TaikoAddress: common.HexToAddress(c.String(flags.L1TaikoAddress.Name)), BridgeAddress: common.HexToAddress(c.String(flags.BridgeAddress.Name)), AssignmentHookAddress: common.HexToAddress(c.String(flags.AssignmentHookAddress.Name)), SwapAddresses: swaps, - CORSOrigins: cors, BlockBatchSize: c.Uint64(flags.BlockBatchSize.Name), SubscriptionBackoff: c.Uint64(flags.SubscriptionBackoff.Name), - RPCUrl: c.String(flags.RPCUrl.Name), + RPCUrl: c.String(flags.IndexerRPCUrl.Name), WatchMode: WatchMode(c.String(flags.WatchMode.Name)), SyncMode: SyncMode(c.String(flags.SyncMode.Name)), IndexNFTs: c.Bool(flags.IndexNFTs.Name), diff --git a/packages/eventindexer/indexer/config_test.go b/packages/eventindexer/indexer/config_test.go index 1b86d67b635..a9eb2256cc2 100644 --- a/packages/eventindexer/indexer/config_test.go +++ b/packages/eventindexer/indexer/config_test.go @@ -10,13 +10,11 @@ import ( ) var ( - httpPort = "1000" metricsHttpPort = "1001" l1TaikoAddress = "0x63FaC9201494f0bd17B9892B9fae4d52fe3BD377" bridgeAddress = "0x73FaC9201494f0bd17B9892B9fae4d52fe3BD377" assignmentHookAddress = "0x83FaC9201494f0bd17B9892B9fae4d52fe3BD377" swapAddresses = "0x33FaC9201494f0bd17B9892B9fae4d52fe3BD377,0x13FaC9201494f0bd17B9892B9fae4d52fe3BD377" - corsOrigins = "http://localhost:3000,http://localhost:3001" databaseMaxIdleConns = "10" databaseMaxOpenConns = "10" databaseMaxConnLifetime = "30" @@ -26,6 +24,7 @@ var ( syncMode = "sync" watchMode = "filter" layer = "l1" + rpcUrl = "rpcUrl" ) func setupApp() *cli.App { @@ -51,7 +50,6 @@ func TestNewConfigFromCliContext(t *testing.T) { assert.Equal(t, "dbname", c.DatabaseName) assert.Equal(t, "dbhost", c.DatabaseHost) assert.Equal(t, "rpcUrl", c.RPCUrl) - assert.Equal(t, uint64(1000), c.HTTPPort) assert.Equal(t, uint64(1001), c.MetricsHTTPPort) assert.Equal(t, common.HexToAddress(l1TaikoAddress), c.L1TaikoAddress) assert.Equal(t, common.HexToAddress(bridgeAddress), c.BridgeAddress) @@ -66,6 +64,7 @@ func TestNewConfigFromCliContext(t *testing.T) { assert.Equal(t, WatchMode(watchMode), c.WatchMode) assert.Equal(t, true, c.IndexNFTs) assert.Equal(t, layer, c.Layer) + assert.Equal(t, rpcUrl, c.RPCUrl) assert.NotNil(t, c.OpenDBFunc) // assert.Nil(t, InitFromConfig(context.Background(), new(Indexer), c)) @@ -79,14 +78,11 @@ func TestNewConfigFromCliContext(t *testing.T) { "--" + flags.DatabasePassword.Name, "dbpass", "--" + flags.DatabaseHost.Name, "dbhost", "--" + flags.DatabaseName.Name, "dbname", - "--" + flags.RPCUrl.Name, "rpcUrl", "--" + flags.L1TaikoAddress.Name, l1TaikoAddress, "--" + flags.BridgeAddress.Name, bridgeAddress, "--" + flags.SwapAddresses.Name, swapAddresses, "--" + flags.AssignmentHookAddress.Name, assignmentHookAddress, - "--" + flags.HTTPPort.Name, httpPort, "--" + flags.MetricsHTTPPort.Name, metricsHttpPort, - "--" + flags.CORSOrigins.Name, corsOrigins, "--" + flags.DatabaseMaxIdleConns.Name, databaseMaxIdleConns, "--" + flags.DatabaseMaxOpenConns.Name, databaseMaxOpenConns, "--" + flags.DatabaseConnMaxLifetime.Name, databaseMaxConnLifetime, @@ -97,5 +93,6 @@ func TestNewConfigFromCliContext(t *testing.T) { "--" + flags.WatchMode.Name, watchMode, "--" + flags.IndexNFTs.Name, "--" + flags.Layer.Name, layer, + "--" + flags.IndexerRPCUrl.Name, rpcUrl, })) } diff --git a/packages/eventindexer/indexer/indexer.go b/packages/eventindexer/indexer/indexer.go index 1af622dfa2c..7269d6a75a2 100644 --- a/packages/eventindexer/indexer/indexer.go +++ b/packages/eventindexer/indexer/indexer.go @@ -2,24 +2,19 @@ package indexer import ( "context" - "fmt" "log/slog" "sync" "time" - nethttp "net/http" - "github.com/cyberhorsey/errors" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" - "github.com/labstack/echo/v4" "github.com/taikoxyz/taiko-mono/packages/eventindexer" "github.com/taikoxyz/taiko-mono/packages/eventindexer/contracts/assignmenthook" "github.com/taikoxyz/taiko-mono/packages/eventindexer/contracts/bridge" "github.com/taikoxyz/taiko-mono/packages/eventindexer/contracts/swap" "github.com/taikoxyz/taiko-mono/packages/eventindexer/contracts/taikol1" - "github.com/taikoxyz/taiko-mono/packages/eventindexer/http" - "github.com/taikoxyz/taiko-mono/packages/eventindexer/repo" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/repo" "github.com/urfave/cli/v2" ) @@ -70,9 +65,6 @@ type Indexer struct { assignmentHook *assignmenthook.AssignmentHook swaps []*swap.Swap - httpPort uint64 - srv *http.Server - indexNfts bool layer string @@ -87,11 +79,6 @@ type Indexer struct { func (indxr *Indexer) Start() error { indxr.ctx = context.Background() - go func() { - if err := indxr.srv.Start(fmt.Sprintf(":%v", indxr.httpPort)); err != nethttp.ErrServerClosed { - slog.Error("http srv start", "error", err.Error()) - } - }() indxr.wg.Add(1) @@ -151,11 +138,6 @@ func InitFromConfig(ctx context.Context, i *Indexer, cfg *Config) error { return err } - chartRepository, err := repo.NewChartRepository(db) - if err != nil { - return err - } - statRepository, err := repo.NewStatRepository(db) if err != nil { return err @@ -216,19 +198,6 @@ func InitFromConfig(ctx context.Context, i *Indexer, cfg *Config) error { } } - srv, err := http.NewServer(http.NewServerOpts{ - EventRepo: eventRepository, - StatRepo: statRepository, - NFTBalanceRepo: nftBalanceRepository, - ChartRepo: chartRepository, - Echo: echo.New(), - CorsOrigins: cfg.CORSOrigins, - EthClient: ethClient, - }) - if err != nil { - return err - } - i.blockSaveMutex = &sync.Mutex{} i.accountRepo = accountRepository i.eventRepo = eventRepository @@ -245,8 +214,6 @@ func InitFromConfig(ctx context.Context, i *Indexer, cfg *Config) error { i.swaps = swapContracts i.blockBatchSize = cfg.BlockBatchSize i.subscriptionBackoff = time.Duration(cfg.SubscriptionBackoff) * time.Second - i.srv = srv - i.httpPort = cfg.HTTPPort i.wg = &sync.WaitGroup{} i.syncMode = cfg.SyncMode @@ -258,9 +225,5 @@ func InitFromConfig(ctx context.Context, i *Indexer, cfg *Config) error { } func (indxr *Indexer) Close(ctx context.Context) { - if err := indxr.srv.Shutdown(ctx); err != nil { - slog.Error("srv shutdown", "error", err) - } - indxr.wg.Wait() } diff --git a/packages/eventindexer/db/db.go b/packages/eventindexer/pkg/db/db.go similarity index 100% rename from packages/eventindexer/db/db.go rename to packages/eventindexer/pkg/db/db.go diff --git a/packages/eventindexer/http/cache.go b/packages/eventindexer/pkg/http/cache.go similarity index 100% rename from packages/eventindexer/http/cache.go rename to packages/eventindexer/pkg/http/cache.go diff --git a/packages/eventindexer/http/errors.go b/packages/eventindexer/pkg/http/errors.go similarity index 100% rename from packages/eventindexer/http/errors.go rename to packages/eventindexer/pkg/http/errors.go diff --git a/packages/eventindexer/http/galaxe.go b/packages/eventindexer/pkg/http/galaxe.go similarity index 100% rename from packages/eventindexer/http/galaxe.go rename to packages/eventindexer/pkg/http/galaxe.go diff --git a/packages/eventindexer/http/get_assigned_blocks_by_prover_address.go b/packages/eventindexer/pkg/http/get_assigned_blocks_by_prover_address.go similarity index 100% rename from packages/eventindexer/http/get_assigned_blocks_by_prover_address.go rename to packages/eventindexer/pkg/http/get_assigned_blocks_by_prover_address.go diff --git a/packages/eventindexer/http/get_by_address_and_event.go b/packages/eventindexer/pkg/http/get_by_address_and_event.go similarity index 100% rename from packages/eventindexer/http/get_by_address_and_event.go rename to packages/eventindexer/pkg/http/get_by_address_and_event.go diff --git a/packages/eventindexer/http/get_by_address_and_event_test.go b/packages/eventindexer/pkg/http/get_by_address_and_event_test.go similarity index 100% rename from packages/eventindexer/http/get_by_address_and_event_test.go rename to packages/eventindexer/pkg/http/get_by_address_and_event_test.go diff --git a/packages/eventindexer/http/get_chart_by_task.go b/packages/eventindexer/pkg/http/get_chart_by_task.go similarity index 100% rename from packages/eventindexer/http/get_chart_by_task.go rename to packages/eventindexer/pkg/http/get_chart_by_task.go diff --git a/packages/eventindexer/http/get_count_by_address_and_event.go b/packages/eventindexer/pkg/http/get_count_by_address_and_event.go similarity index 100% rename from packages/eventindexer/http/get_count_by_address_and_event.go rename to packages/eventindexer/pkg/http/get_count_by_address_and_event.go diff --git a/packages/eventindexer/http/get_count_by_address_and_event_test.go b/packages/eventindexer/pkg/http/get_count_by_address_and_event_test.go similarity index 100% rename from packages/eventindexer/http/get_count_by_address_and_event_test.go rename to packages/eventindexer/pkg/http/get_count_by_address_and_event_test.go diff --git a/packages/eventindexer/http/get_nft_balances_by_address_and_chain_id.go b/packages/eventindexer/pkg/http/get_nft_balances_by_address_and_chain_id.go similarity index 100% rename from packages/eventindexer/http/get_nft_balances_by_address_and_chain_id.go rename to packages/eventindexer/pkg/http/get_nft_balances_by_address_and_chain_id.go diff --git a/packages/eventindexer/http/get_stats.go b/packages/eventindexer/pkg/http/get_stats.go similarity index 100% rename from packages/eventindexer/http/get_stats.go rename to packages/eventindexer/pkg/http/get_stats.go diff --git a/packages/eventindexer/http/get_stats_test.go b/packages/eventindexer/pkg/http/get_stats_test.go similarity index 100% rename from packages/eventindexer/http/get_stats_test.go rename to packages/eventindexer/pkg/http/get_stats_test.go diff --git a/packages/eventindexer/http/get_unique_proposers.go b/packages/eventindexer/pkg/http/get_unique_proposers.go similarity index 100% rename from packages/eventindexer/http/get_unique_proposers.go rename to packages/eventindexer/pkg/http/get_unique_proposers.go diff --git a/packages/eventindexer/http/get_unique_proposers_test.go b/packages/eventindexer/pkg/http/get_unique_proposers_test.go similarity index 100% rename from packages/eventindexer/http/get_unique_proposers_test.go rename to packages/eventindexer/pkg/http/get_unique_proposers_test.go diff --git a/packages/eventindexer/http/get_unique_provers.go b/packages/eventindexer/pkg/http/get_unique_provers.go similarity index 100% rename from packages/eventindexer/http/get_unique_provers.go rename to packages/eventindexer/pkg/http/get_unique_provers.go diff --git a/packages/eventindexer/http/get_unique_provers_test.go b/packages/eventindexer/pkg/http/get_unique_provers_test.go similarity index 100% rename from packages/eventindexer/http/get_unique_provers_test.go rename to packages/eventindexer/pkg/http/get_unique_provers_test.go diff --git a/packages/eventindexer/http/routes.go b/packages/eventindexer/pkg/http/routes.go similarity index 100% rename from packages/eventindexer/http/routes.go rename to packages/eventindexer/pkg/http/routes.go diff --git a/packages/eventindexer/http/server.go b/packages/eventindexer/pkg/http/server.go similarity index 100% rename from packages/eventindexer/http/server.go rename to packages/eventindexer/pkg/http/server.go diff --git a/packages/eventindexer/http/server_test.go b/packages/eventindexer/pkg/http/server_test.go similarity index 96% rename from packages/eventindexer/http/server_test.go rename to packages/eventindexer/pkg/http/server_test.go index 6204f6cc8f0..d289a4da7d3 100644 --- a/packages/eventindexer/http/server_test.go +++ b/packages/eventindexer/pkg/http/server_test.go @@ -12,8 +12,8 @@ import ( "github.com/patrickmn/go-cache" "github.com/stretchr/testify/assert" "github.com/taikoxyz/taiko-mono/packages/eventindexer" - "github.com/taikoxyz/taiko-mono/packages/eventindexer/mock" - "github.com/taikoxyz/taiko-mono/packages/eventindexer/repo" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/mock" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/repo" ) func newTestServer(url string) *Server { diff --git a/packages/eventindexer/http/user_added_liquidity.go b/packages/eventindexer/pkg/http/user_added_liquidity.go similarity index 100% rename from packages/eventindexer/http/user_added_liquidity.go rename to packages/eventindexer/pkg/http/user_added_liquidity.go diff --git a/packages/eventindexer/http/user_bridged.go b/packages/eventindexer/pkg/http/user_bridged.go similarity index 100% rename from packages/eventindexer/http/user_bridged.go rename to packages/eventindexer/pkg/http/user_bridged.go diff --git a/packages/eventindexer/http/user_proposed_block.go b/packages/eventindexer/pkg/http/user_proposed_block.go similarity index 100% rename from packages/eventindexer/http/user_proposed_block.go rename to packages/eventindexer/pkg/http/user_proposed_block.go diff --git a/packages/eventindexer/http/user_proved_block.go b/packages/eventindexer/pkg/http/user_proved_block.go similarity index 100% rename from packages/eventindexer/http/user_proved_block.go rename to packages/eventindexer/pkg/http/user_proved_block.go diff --git a/packages/eventindexer/http/user_swapped_on_taiko.go b/packages/eventindexer/pkg/http/user_swapped_on_taiko.go similarity index 100% rename from packages/eventindexer/http/user_swapped_on_taiko.go rename to packages/eventindexer/pkg/http/user_swapped_on_taiko.go diff --git a/packages/eventindexer/metrics/metrics.go b/packages/eventindexer/pkg/metrics/metrics.go similarity index 100% rename from packages/eventindexer/metrics/metrics.go rename to packages/eventindexer/pkg/metrics/metrics.go diff --git a/packages/eventindexer/metrics/metrics_test.go b/packages/eventindexer/pkg/metrics/metrics_test.go similarity index 100% rename from packages/eventindexer/metrics/metrics_test.go rename to packages/eventindexer/pkg/metrics/metrics_test.go diff --git a/packages/eventindexer/mock/event_repository.go b/packages/eventindexer/pkg/mock/event_repository.go similarity index 100% rename from packages/eventindexer/mock/event_repository.go rename to packages/eventindexer/pkg/mock/event_repository.go diff --git a/packages/eventindexer/mock/nft_balance_repository.go b/packages/eventindexer/pkg/mock/nft_balance_repository.go similarity index 100% rename from packages/eventindexer/mock/nft_balance_repository.go rename to packages/eventindexer/pkg/mock/nft_balance_repository.go diff --git a/packages/eventindexer/mock/processed_block_repository.go b/packages/eventindexer/pkg/mock/processed_block_repository.go similarity index 100% rename from packages/eventindexer/mock/processed_block_repository.go rename to packages/eventindexer/pkg/mock/processed_block_repository.go diff --git a/packages/eventindexer/mock/stat_repository.go b/packages/eventindexer/pkg/mock/stat_repository.go similarity index 100% rename from packages/eventindexer/mock/stat_repository.go rename to packages/eventindexer/pkg/mock/stat_repository.go diff --git a/packages/eventindexer/mock/types.go b/packages/eventindexer/pkg/mock/types.go similarity index 100% rename from packages/eventindexer/mock/types.go rename to packages/eventindexer/pkg/mock/types.go diff --git a/packages/eventindexer/repo/account.go b/packages/eventindexer/pkg/repo/account.go similarity index 100% rename from packages/eventindexer/repo/account.go rename to packages/eventindexer/pkg/repo/account.go diff --git a/packages/eventindexer/repo/account_test.go b/packages/eventindexer/pkg/repo/account_test.go similarity index 95% rename from packages/eventindexer/repo/account_test.go rename to packages/eventindexer/pkg/repo/account_test.go index fbb3a919ee4..4f148562b89 100644 --- a/packages/eventindexer/repo/account_test.go +++ b/packages/eventindexer/pkg/repo/account_test.go @@ -8,7 +8,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/assert" "github.com/taikoxyz/taiko-mono/packages/eventindexer" - "github.com/taikoxyz/taiko-mono/packages/eventindexer/db" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/db" ) func Test_NewAccountRepository(t *testing.T) { diff --git a/packages/eventindexer/repo/block.go b/packages/eventindexer/pkg/repo/block.go similarity index 100% rename from packages/eventindexer/repo/block.go rename to packages/eventindexer/pkg/repo/block.go diff --git a/packages/eventindexer/repo/block_test.go b/packages/eventindexer/pkg/repo/block_test.go similarity index 97% rename from packages/eventindexer/repo/block_test.go rename to packages/eventindexer/pkg/repo/block_test.go index eec8cfbfbb4..9c22c8492fd 100644 --- a/packages/eventindexer/repo/block_test.go +++ b/packages/eventindexer/pkg/repo/block_test.go @@ -9,7 +9,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/stretchr/testify/assert" "github.com/taikoxyz/taiko-mono/packages/eventindexer" - "github.com/taikoxyz/taiko-mono/packages/eventindexer/db" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/db" ) func Test_NewBlockRepo(t *testing.T) { diff --git a/packages/eventindexer/repo/chart.go b/packages/eventindexer/pkg/repo/chart.go similarity index 100% rename from packages/eventindexer/repo/chart.go rename to packages/eventindexer/pkg/repo/chart.go diff --git a/packages/eventindexer/repo/chart_test.go b/packages/eventindexer/pkg/repo/chart_test.go similarity index 94% rename from packages/eventindexer/repo/chart_test.go rename to packages/eventindexer/pkg/repo/chart_test.go index 85e906d3b1f..77b820f0666 100644 --- a/packages/eventindexer/repo/chart_test.go +++ b/packages/eventindexer/pkg/repo/chart_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/taikoxyz/taiko-mono/packages/eventindexer" - "github.com/taikoxyz/taiko-mono/packages/eventindexer/db" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/db" ) func Test_NewChartRepo(t *testing.T) { diff --git a/packages/eventindexer/repo/containers_test.go b/packages/eventindexer/pkg/repo/containers_test.go similarity index 92% rename from packages/eventindexer/repo/containers_test.go rename to packages/eventindexer/pkg/repo/containers_test.go index d0d809b7e6a..d047a450ba2 100644 --- a/packages/eventindexer/repo/containers_test.go +++ b/packages/eventindexer/pkg/repo/containers_test.go @@ -7,7 +7,7 @@ import ( "github.com/pressly/goose/v3" "github.com/taikoxyz/taiko-mono/packages/eventindexer" - "github.com/taikoxyz/taiko-mono/packages/eventindexer/db" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/db" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/wait" "gorm.io/driver/mysql" @@ -69,7 +69,7 @@ func testMysql(t *testing.T) (eventindexer.DB, func(), error) { } sqlDB, _ := gormDB.DB() - if err := goose.Up(sqlDB, "../migrations"); err != nil { + if err := goose.Up(sqlDB, "../../migrations"); err != nil { t.Fatal(err) } diff --git a/packages/eventindexer/repo/event.go b/packages/eventindexer/pkg/repo/event.go similarity index 100% rename from packages/eventindexer/repo/event.go rename to packages/eventindexer/pkg/repo/event.go diff --git a/packages/eventindexer/repo/event_test.go b/packages/eventindexer/pkg/repo/event_test.go similarity index 100% rename from packages/eventindexer/repo/event_test.go rename to packages/eventindexer/pkg/repo/event_test.go diff --git a/packages/eventindexer/repo/nft_balance.go b/packages/eventindexer/pkg/repo/nft_balance.go similarity index 100% rename from packages/eventindexer/repo/nft_balance.go rename to packages/eventindexer/pkg/repo/nft_balance.go diff --git a/packages/eventindexer/repo/nft_balance_test.go b/packages/eventindexer/pkg/repo/nft_balance_test.go similarity index 98% rename from packages/eventindexer/repo/nft_balance_test.go rename to packages/eventindexer/pkg/repo/nft_balance_test.go index 198cc8ec70c..0cec7705be4 100644 --- a/packages/eventindexer/repo/nft_balance_test.go +++ b/packages/eventindexer/pkg/repo/nft_balance_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/taikoxyz/taiko-mono/packages/eventindexer" - "github.com/taikoxyz/taiko-mono/packages/eventindexer/db" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/db" ) func Test_NewNFTBalanceRepo(t *testing.T) { diff --git a/packages/eventindexer/repo/processed_block.go b/packages/eventindexer/pkg/repo/processed_block.go similarity index 100% rename from packages/eventindexer/repo/processed_block.go rename to packages/eventindexer/pkg/repo/processed_block.go diff --git a/packages/eventindexer/repo/processed_block_test.go b/packages/eventindexer/pkg/repo/processed_block_test.go similarity index 96% rename from packages/eventindexer/repo/processed_block_test.go rename to packages/eventindexer/pkg/repo/processed_block_test.go index dc50d6095d7..947d310a566 100644 --- a/packages/eventindexer/repo/processed_block_test.go +++ b/packages/eventindexer/pkg/repo/processed_block_test.go @@ -6,7 +6,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/taikoxyz/taiko-mono/packages/eventindexer" - "github.com/taikoxyz/taiko-mono/packages/eventindexer/db" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/db" "gopkg.in/go-playground/assert.v1" ) diff --git a/packages/eventindexer/repo/stat.go b/packages/eventindexer/pkg/repo/stat.go similarity index 100% rename from packages/eventindexer/repo/stat.go rename to packages/eventindexer/pkg/repo/stat.go diff --git a/packages/eventindexer/repo/stat_test.go b/packages/eventindexer/pkg/repo/stat_test.go similarity index 100% rename from packages/eventindexer/repo/stat_test.go rename to packages/eventindexer/pkg/repo/stat_test.go diff --git a/packages/eventindexer/repo/transaction.go b/packages/eventindexer/pkg/repo/transaction.go similarity index 100% rename from packages/eventindexer/repo/transaction.go rename to packages/eventindexer/pkg/repo/transaction.go diff --git a/packages/eventindexer/repo/transaction_test.go b/packages/eventindexer/pkg/repo/transaction_test.go similarity index 97% rename from packages/eventindexer/repo/transaction_test.go rename to packages/eventindexer/pkg/repo/transaction_test.go index 7899facc85c..8f761c5e60b 100644 --- a/packages/eventindexer/repo/transaction_test.go +++ b/packages/eventindexer/pkg/repo/transaction_test.go @@ -10,7 +10,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/stretchr/testify/assert" "github.com/taikoxyz/taiko-mono/packages/eventindexer" - "github.com/taikoxyz/taiko-mono/packages/eventindexer/db" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/pkg/db" ) func Test_NewTransactionRepo(t *testing.T) { diff --git a/packages/eventindexer/tasks/tasks.go b/packages/eventindexer/pkg/tasks/tasks.go similarity index 100% rename from packages/eventindexer/tasks/tasks.go rename to packages/eventindexer/pkg/tasks/tasks.go diff --git a/packages/relayer/api/api.go b/packages/relayer/api/api.go new file mode 100644 index 00000000000..5bd1c427d38 --- /dev/null +++ b/packages/relayer/api/api.go @@ -0,0 +1,100 @@ +package api + +import ( + "context" + "database/sql" + "fmt" + "log/slog" + nethttp "net/http" + + "github.com/ethereum/go-ethereum/ethclient" + "github.com/labstack/echo/v4" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/http" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/repo" + "github.com/urfave/cli/v2" + "gorm.io/gorm" +) + +type DB interface { + DB() (*sql.DB, error) + GormDB() *gorm.DB +} + +type API struct { + srv *http.Server + httpPort uint64 +} + +func (api *API) InitFromCli(ctx context.Context, c *cli.Context) error { + cfg, err := NewConfigFromCliContext(c) + if err != nil { + return err + } + + return InitFromConfig(ctx, api, cfg) +} + +func InitFromConfig(ctx context.Context, api *API, cfg *Config) (err error) { + db, err := cfg.OpenDBFunc() + if err != nil { + return err + } + + eventRepository, err := repo.NewEventRepository(db) + if err != nil { + return err + } + + blockRepository, err := repo.NewBlockRepository(db) + if err != nil { + return err + } + + srcEthClient, err := ethclient.Dial(cfg.SrcRPCUrl) + if err != nil { + return err + } + + destEthClient, err := ethclient.Dial(cfg.DestRPCUrl) + if err != nil { + return err + } + + srv, err := http.NewServer(http.NewServerOpts{ + EventRepo: eventRepository, + Echo: echo.New(), + CorsOrigins: cfg.CORSOrigins, + SrcEthClient: srcEthClient, + DestEthClient: destEthClient, + BlockRepo: blockRepository, + }) + if err != nil { + return err + } + + api.srv = srv + api.httpPort = cfg.HTTPPort + + return nil +} + +func (api *API) Name() string { + return "api" +} + +func (api *API) Close(ctx context.Context) { + if err := api.srv.Shutdown(ctx); err != nil { + slog.Error("srv shutdown", "error", err) + } +} + +// nolint: funlen +func (api *API) Start() error { + go func() { + if err := api.srv.Start(fmt.Sprintf(":%v", api.httpPort)); err != nethttp.ErrServerClosed { + slog.Error("http srv start", "error", err.Error()) + } + }() + + return nil +} diff --git a/packages/relayer/api/config.go b/packages/relayer/api/config.go new file mode 100644 index 00000000000..5cd75cb4341 --- /dev/null +++ b/packages/relayer/api/config.go @@ -0,0 +1,67 @@ +package api + +import ( + "strings" + + "github.com/taikoxyz/taiko-mono/packages/relayer/cmd/flags" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/db" + "github.com/urfave/cli/v2" + "gorm.io/driver/mysql" + "gorm.io/gorm" + "gorm.io/gorm/logger" +) + +type Config struct { + // db configs + DatabaseUsername string + DatabasePassword string + DatabaseName string + DatabaseHost string + DatabaseMaxIdleConns uint64 + DatabaseMaxOpenConns uint64 + DatabaseMaxConnLifetime uint64 + CORSOrigins []string + // rpc configs + SrcRPCUrl string + DestRPCUrl string + HTTPPort uint64 + OpenDBFunc func() (DB, error) +} + +// NewConfigFromCliContext creates a new config instance from command line flags. +func NewConfigFromCliContext(c *cli.Context) (*Config, error) { + return &Config{ + DatabaseUsername: c.String(flags.DatabaseUsername.Name), + DatabasePassword: c.String(flags.DatabasePassword.Name), + DatabaseName: c.String(flags.DatabaseName.Name), + DatabaseHost: c.String(flags.DatabaseHost.Name), + DatabaseMaxIdleConns: c.Uint64(flags.DatabaseMaxIdleConns.Name), + DatabaseMaxOpenConns: c.Uint64(flags.DatabaseMaxOpenConns.Name), + DatabaseMaxConnLifetime: c.Uint64(flags.DatabaseConnMaxLifetime.Name), + CORSOrigins: strings.Split(c.String(flags.CORSOrigins.Name), ","), + HTTPPort: c.Uint64(flags.HTTPPort.Name), + SrcRPCUrl: c.String(flags.SrcRPCUrl.Name), + DestRPCUrl: c.String(flags.DestRPCUrl.Name), + OpenDBFunc: func() (DB, error) { + return db.OpenDBConnection(db.DBConnectionOpts{ + Name: c.String(flags.DatabaseUsername.Name), + Password: c.String(flags.DatabasePassword.Name), + Database: c.String(flags.DatabaseName.Name), + Host: c.String(flags.DatabaseHost.Name), + MaxIdleConns: c.Uint64(flags.DatabaseMaxIdleConns.Name), + MaxOpenConns: c.Uint64(flags.DatabaseMaxOpenConns.Name), + MaxConnLifetime: c.Uint64(flags.DatabaseConnMaxLifetime.Name), + OpenFunc: func(dsn string) (*db.DB, error) { + gormDB, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ + Logger: logger.Default.LogMode(logger.Silent), + }) + if err != nil { + return nil, err + } + + return db.New(gormDB), nil + }, + }) + }, + }, nil +} diff --git a/packages/relayer/api/config_test.go b/packages/relayer/api/config_test.go new file mode 100644 index 00000000000..a94d134f668 --- /dev/null +++ b/packages/relayer/api/config_test.go @@ -0,0 +1,71 @@ +package api + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/taikoxyz/taiko-mono/packages/relayer/cmd/flags" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" + "github.com/urfave/cli/v2" +) + +var ( + databaseMaxIdleConns = "10" + databaseMaxOpenConns = "10" + databaseMaxConnLifetime = "30" + HTTPPort = "1000" +) + +func setupApp() *cli.App { + app := cli.NewApp() + app.Flags = flags.APIFlags + app.Action = func(ctx *cli.Context) error { + _, err := NewConfigFromCliContext(ctx) + return err + } + + return app +} + +func TestNewConfigFromCliContext(t *testing.T) { + app := setupApp() + + app.Action = func(ctx *cli.Context) error { + c, err := NewConfigFromCliContext(ctx) + assert.Nil(t, err) + assert.Equal(t, "dbuser", c.DatabaseUsername) + assert.Equal(t, "dbpass", c.DatabasePassword) + assert.Equal(t, "dbname", c.DatabaseName) + assert.Equal(t, "dbhost", c.DatabaseHost) + assert.Equal(t, []string{"*"}, c.CORSOrigins) + assert.Equal(t, uint64(10), c.DatabaseMaxIdleConns) + assert.Equal(t, uint64(10), c.DatabaseMaxOpenConns) + assert.Equal(t, uint64(30), c.DatabaseMaxConnLifetime) + assert.Equal(t, uint64(1000), c.HTTPPort) + assert.Equal(t, "srcRpcUrl", c.SrcRPCUrl) + assert.Equal(t, "destRpcUrl", c.DestRPCUrl) + + c.OpenDBFunc = func() (DB, error) { + return &mock.DB{}, nil + } + + // assert.Nil(t, InitFromConfig(context.Background(), new(Indexer), c)) + + return err + } + + assert.Nil(t, app.Run([]string{ + "TestNewConfigFromCliContext", + "--" + flags.DatabaseUsername.Name, "dbuser", + "--" + flags.DatabasePassword.Name, "dbpass", + "--" + flags.DatabaseHost.Name, "dbhost", + "--" + flags.DatabaseName.Name, "dbname", + "--" + flags.CORSOrigins.Name, "*", + "--" + flags.DatabaseMaxOpenConns.Name, databaseMaxOpenConns, + "--" + flags.DatabaseMaxIdleConns.Name, databaseMaxIdleConns, + "--" + flags.DatabaseConnMaxLifetime.Name, databaseMaxConnLifetime, + "--" + flags.HTTPPort.Name, HTTPPort, + "--" + flags.SrcRPCUrl.Name, "srcRpcUrl", + "--" + flags.DestRPCUrl.Name, "destRpcUrl", + })) +} diff --git a/packages/relayer/cmd/flags/api.go b/packages/relayer/cmd/flags/api.go new file mode 100644 index 00000000000..acae753973a --- /dev/null +++ b/packages/relayer/cmd/flags/api.go @@ -0,0 +1,29 @@ +package flags + +import ( + "github.com/urfave/cli/v2" +) + +// optional +var ( + HTTPPort = &cli.Uint64Flag{ + Name: "http.port", + Usage: "Port to run http server on", + Category: indexerCategory, + Value: 4102, + EnvVars: []string{"HTTP_PORT"}, + } + CORSOrigins = &cli.StringFlag{ + Name: "http.corsOrigins", + Usage: "Comma-delinated list of cors origins", + Category: indexerCategory, + Value: "*", + EnvVars: []string{"HTTP_CORS_ORIGINS"}, + } +) + +var APIFlags = MergeFlags(CommonFlags, []cli.Flag{ + // optional + HTTPPort, + CORSOrigins, +}) diff --git a/packages/relayer/cmd/flags/common.go b/packages/relayer/cmd/flags/common.go index 2bb7d15fcca..441cea68236 100644 --- a/packages/relayer/cmd/flags/common.go +++ b/packages/relayer/cmd/flags/common.go @@ -39,34 +39,6 @@ var ( Category: commonCategory, EnvVars: []string{"DATABASE_NAME"}, } - QueueUsername = &cli.StringFlag{ - Name: "queue.username", - Usage: "Queue connection username", - Required: true, - Category: commonCategory, - EnvVars: []string{"QUEUE_USER"}, - } - QueuePassword = &cli.StringFlag{ - Name: "queue.password", - Usage: "Queue connection password", - Required: true, - Category: commonCategory, - EnvVars: []string{"QUEUE_PASSWORD"}, - } - QueueHost = &cli.StringFlag{ - Name: "queue.host", - Usage: "Queue connection host", - Required: true, - Category: commonCategory, - EnvVars: []string{"QUEUE_HOST"}, - } - QueuePort = &cli.Uint64Flag{ - Name: "queue.port", - Usage: "Queue connection port", - Required: true, - Category: commonCategory, - EnvVars: []string{"QUEUE_PORT"}, - } SrcRPCUrl = &cli.StringFlag{ Name: "srcRpcUrl", Usage: "RPC URL for the source chain", @@ -81,13 +53,6 @@ var ( Category: commonCategory, EnvVars: []string{"DEST_RPC_URL"}, } - DestBridgeAddress = &cli.StringFlag{ - Name: "destBridgeAddress", - Usage: "Bridge address for the destination chain", - Required: true, - Category: commonCategory, - EnvVars: []string{"DEST_BRIDGE_ADDRESS"}, - } ) var ( @@ -135,13 +100,8 @@ var CommonFlags = []cli.Flag{ DatabasePassword, DatabaseHost, DatabaseName, - QueueUsername, - QueuePassword, - QueueHost, - QueuePort, SrcRPCUrl, DestRPCUrl, - DestBridgeAddress, // optional DatabaseMaxIdleConns, DatabaseConnMaxLifetime, diff --git a/packages/relayer/cmd/flags/indexer.go b/packages/relayer/cmd/flags/indexer.go index 9608b131662..75e091d96d7 100644 --- a/packages/relayer/cmd/flags/indexer.go +++ b/packages/relayer/cmd/flags/indexer.go @@ -12,6 +12,13 @@ var ( Category: indexerCategory, EnvVars: []string{"SRC_BRIDGE_ADDRESS"}, } + DestBridgeAddress = &cli.StringFlag{ + Name: "destBridgeAddress", + Usage: "Bridge address for the destination chain", + Required: true, + Category: commonCategory, + EnvVars: []string{"DEST_BRIDGE_ADDRESS"}, + } ) // optional @@ -61,31 +68,16 @@ var ( Category: indexerCategory, EnvVars: []string{"SRC_TAIKO_ADDRESS"}, } - HTTPPort = &cli.Uint64Flag{ - Name: "http.port", - Usage: "Port to run http server on", - Category: indexerCategory, - Value: 4102, - EnvVars: []string{"HTTP_PORT"}, - } - CORSOrigins = &cli.StringFlag{ - Name: "http.corsOrigins", - Usage: "Comma-delinated list of cors origins", - Category: indexerCategory, - Value: "*", - EnvVars: []string{"HTTP_CORS_ORIGINS"}, - } ) -var IndexerFlags = MergeFlags(CommonFlags, []cli.Flag{ +var IndexerFlags = MergeFlags(CommonFlags, QueueFlags, []cli.Flag{ SrcBridgeAddress, // optional - HTTPPort, SrcTaikoAddress, BlockBatchSize, MaxNumGoroutines, SubscriptionBackoff, SyncMode, WatchMode, - CORSOrigins, + DestBridgeAddress, }) diff --git a/packages/relayer/cmd/flags/processor.go b/packages/relayer/cmd/flags/processor.go index fc913328d95..f8e6e1d2646 100644 --- a/packages/relayer/cmd/flags/processor.go +++ b/packages/relayer/cmd/flags/processor.go @@ -128,7 +128,7 @@ var ( } ) -var ProcessorFlags = MergeFlags(CommonFlags, []cli.Flag{ +var ProcessorFlags = MergeFlags(CommonFlags, QueueFlags, []cli.Flag{ SrcSignalServiceAddress, DestERC721VaultAddress, DestERC1155VaultAddress, @@ -147,4 +147,5 @@ var ProcessorFlags = MergeFlags(CommonFlags, []cli.Flag{ HopRPCUrls, HopSignalServiceAddresses, HopTaikoAddresses, + DestBridgeAddress, }) diff --git a/packages/relayer/cmd/flags/queue.go b/packages/relayer/cmd/flags/queue.go new file mode 100644 index 00000000000..4eaba56b09b --- /dev/null +++ b/packages/relayer/cmd/flags/queue.go @@ -0,0 +1,41 @@ +package flags + +import "github.com/urfave/cli/v2" + +var ( + QueueUsername = &cli.StringFlag{ + Name: "queue.username", + Usage: "Queue connection username", + Required: true, + Category: commonCategory, + EnvVars: []string{"QUEUE_USER"}, + } + QueuePassword = &cli.StringFlag{ + Name: "queue.password", + Usage: "Queue connection password", + Required: true, + Category: commonCategory, + EnvVars: []string{"QUEUE_PASSWORD"}, + } + QueueHost = &cli.StringFlag{ + Name: "queue.host", + Usage: "Queue connection host", + Required: true, + Category: commonCategory, + EnvVars: []string{"QUEUE_HOST"}, + } + QueuePort = &cli.Uint64Flag{ + Name: "queue.port", + Usage: "Queue connection port", + Required: true, + Category: commonCategory, + EnvVars: []string{"QUEUE_PORT"}, + } +) + +var QueueFlags = []cli.Flag{ + QueueUsername, + QueuePassword, + QueueHost, + QueuePort, +} diff --git a/packages/relayer/cmd/main.go b/packages/relayer/cmd/main.go index adb674a3f72..c098b4c7b62 100644 --- a/packages/relayer/cmd/main.go +++ b/packages/relayer/cmd/main.go @@ -6,6 +6,7 @@ import ( "os" "github.com/joho/godotenv" + "github.com/taikoxyz/taiko-mono/packages/relayer/api" "github.com/taikoxyz/taiko-mono/packages/relayer/cmd/flags" "github.com/taikoxyz/taiko-mono/packages/relayer/cmd/utils" "github.com/taikoxyz/taiko-mono/packages/relayer/indexer" @@ -29,13 +30,20 @@ func main() { app.Name = "Taiko Relayer" app.Usage = "The taiko relayer softwares command line interface" - app.Copyright = "Copyright 2021-2023 Taiko Labs" + app.Copyright = "Copyright 2021-2024 Taiko Labs" app.Description = "Bridge relayer implementation in Golang for Taiko protocol" app.Authors = []*cli.Author{{Name: "Taiko Labs", Email: "info@taiko.xyz"}} app.EnableBashCompletion = true // All supported sub commands. app.Commands = []*cli.Command{ + { + Name: "api", + Flags: flags.APIFlags, + Usage: "Starts the relayer http API software", + Description: "Taiko relayer http API software", + Action: utils.SubcommandAction(new(api.API)), + }, { Name: "indexer", Flags: flags.IndexerFlags, diff --git a/packages/relayer/cmd/utils/subcommand.go b/packages/relayer/cmd/utils/subcommand.go index b4fa237b775..7a61c7c1bcb 100644 --- a/packages/relayer/cmd/utils/subcommand.go +++ b/packages/relayer/cmd/utils/subcommand.go @@ -8,7 +8,7 @@ import ( "log/slog" - "github.com/taikoxyz/taiko-mono/packages/relayer/metrics" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/metrics" "github.com/urfave/cli/v2" ) diff --git a/packages/relayer/index.html b/packages/relayer/docs/index.html similarity index 100% rename from packages/relayer/index.html rename to packages/relayer/docs/index.html diff --git a/packages/relayer/indexer/config.go b/packages/relayer/indexer/config.go index 95add0a934f..3e70a388040 100644 --- a/packages/relayer/indexer/config.go +++ b/packages/relayer/indexer/config.go @@ -1,13 +1,11 @@ package indexer import ( - "strings" - "github.com/ethereum/go-ethereum/common" "github.com/taikoxyz/taiko-mono/packages/relayer/cmd/flags" - "github.com/taikoxyz/taiko-mono/packages/relayer/db" - "github.com/taikoxyz/taiko-mono/packages/relayer/queue" - "github.com/taikoxyz/taiko-mono/packages/relayer/queue/rabbitmq" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/db" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/queue" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/queue/rabbitmq" "github.com/urfave/cli/v2" "gorm.io/driver/mysql" "gorm.io/gorm" @@ -36,13 +34,11 @@ type Config struct { SrcRPCUrl string DestRPCUrl string ETHClientTimeout uint64 - CORSOrigins []string BlockBatchSize uint64 NumGoroutines uint64 SubscriptionBackoff uint64 SyncMode SyncMode WatchMode WatchMode - HTTPPort uint64 OpenQueueFunc func() (queue.Queue, error) OpenDBFunc func() (DB, error) } @@ -66,13 +62,11 @@ func NewConfigFromCliContext(c *cli.Context) (*Config, error) { QueueHost: c.String(flags.QueueHost.Name), SrcRPCUrl: c.String(flags.SrcRPCUrl.Name), DestRPCUrl: c.String(flags.DestRPCUrl.Name), - CORSOrigins: strings.Split(c.String(flags.CORSOrigins.Name), ","), BlockBatchSize: c.Uint64(flags.BlockBatchSize.Name), NumGoroutines: c.Uint64(flags.MaxNumGoroutines.Name), SubscriptionBackoff: c.Uint64(flags.SubscriptionBackoff.Name), WatchMode: WatchMode(c.String(flags.WatchMode.Name)), SyncMode: SyncMode(c.String(flags.SyncMode.Name)), - HTTPPort: c.Uint64(flags.HTTPPort.Name), ETHClientTimeout: c.Uint64(flags.ETHClientTimeout.Name), OpenDBFunc: func() (DB, error) { return db.OpenDBConnection(db.DBConnectionOpts{ diff --git a/packages/relayer/indexer/config_test.go b/packages/relayer/indexer/config_test.go index 1bdb9a7df71..f90d09567bc 100644 --- a/packages/relayer/indexer/config_test.go +++ b/packages/relayer/indexer/config_test.go @@ -6,8 +6,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/assert" "github.com/taikoxyz/taiko-mono/packages/relayer/cmd/flags" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" - "github.com/taikoxyz/taiko-mono/packages/relayer/queue" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/queue" "github.com/urfave/cli/v2" ) @@ -24,7 +24,6 @@ var ( subscriptionBackoff = "30" syncMode = "sync" watchMode = "filter" - HTTPPort = "1000" ) func setupApp() *cli.App { @@ -57,7 +56,6 @@ func TestNewConfigFromCliContext(t *testing.T) { assert.Equal(t, common.HexToAddress(destBridgeAddr), c.DestBridgeAddress) assert.Equal(t, common.HexToAddress(srcBridgeAddr), c.SrcBridgeAddress) assert.Equal(t, common.HexToAddress(srcTaikoAddr), c.SrcTaikoAddress) - assert.Equal(t, []string{"*"}, c.CORSOrigins) assert.Equal(t, uint64(10), c.ETHClientTimeout) assert.Equal(t, uint64(10), c.DatabaseMaxIdleConns) assert.Equal(t, uint64(10), c.DatabaseMaxOpenConns) @@ -67,7 +65,6 @@ func TestNewConfigFromCliContext(t *testing.T) { assert.Equal(t, uint64(30), c.SubscriptionBackoff) assert.Equal(t, SyncMode(syncMode), c.SyncMode) assert.Equal(t, WatchMode(watchMode), c.WatchMode) - assert.Equal(t, uint64(1000), c.HTTPPort) c.OpenDBFunc = func() (DB, error) { return &mock.DB{}, nil @@ -97,7 +94,6 @@ func TestNewConfigFromCliContext(t *testing.T) { "--" + flags.DestBridgeAddress.Name, destBridgeAddr, "--" + flags.SrcBridgeAddress.Name, srcBridgeAddr, "--" + flags.SrcTaikoAddress.Name, srcTaikoAddr, - "--" + flags.CORSOrigins.Name, "*", "--" + flags.ETHClientTimeout.Name, ethClientTimeout, "--" + flags.DatabaseMaxOpenConns.Name, databaseMaxOpenConns, "--" + flags.DatabaseMaxIdleConns.Name, databaseMaxIdleConns, @@ -107,6 +103,5 @@ func TestNewConfigFromCliContext(t *testing.T) { "--" + flags.SubscriptionBackoff.Name, subscriptionBackoff, "--" + flags.SyncMode.Name, syncMode, "--" + flags.WatchMode.Name, watchMode, - "--" + flags.HTTPPort.Name, HTTPPort, })) } diff --git a/packages/relayer/indexer/handle_event.go b/packages/relayer/indexer/handle_event.go index 87d13933846..57ca5cbffe4 100644 --- a/packages/relayer/indexer/handle_event.go +++ b/packages/relayer/indexer/handle_event.go @@ -12,7 +12,7 @@ import ( "github.com/pkg/errors" "github.com/taikoxyz/taiko-mono/packages/relayer" "github.com/taikoxyz/taiko-mono/packages/relayer/bindings/bridge" - "github.com/taikoxyz/taiko-mono/packages/relayer/queue" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/queue" ) // handleEvent handles an individual MessageSent event diff --git a/packages/relayer/indexer/handle_event_test.go b/packages/relayer/indexer/handle_event_test.go index 03d846a412a..b22e681147c 100644 --- a/packages/relayer/indexer/handle_event_test.go +++ b/packages/relayer/indexer/handle_event_test.go @@ -8,7 +8,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/assert" "github.com/taikoxyz/taiko-mono/packages/relayer" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" ) func Test_eventStatusFromMsgHash(t *testing.T) { diff --git a/packages/relayer/indexer/indexer.go b/packages/relayer/indexer/indexer.go index 191a65b40f7..994954ddf8a 100644 --- a/packages/relayer/indexer/indexer.go +++ b/packages/relayer/indexer/indexer.go @@ -6,7 +6,6 @@ import ( "fmt" "log/slog" "math/big" - nethttp "net/http" "sync" "time" @@ -17,13 +16,11 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" - "github.com/labstack/echo/v4" "github.com/taikoxyz/taiko-mono/packages/relayer" "github.com/taikoxyz/taiko-mono/packages/relayer/bindings/bridge" "github.com/taikoxyz/taiko-mono/packages/relayer/bindings/taikol1" - "github.com/taikoxyz/taiko-mono/packages/relayer/indexer/http" - "github.com/taikoxyz/taiko-mono/packages/relayer/queue" - "github.com/taikoxyz/taiko-mono/packages/relayer/repo" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/queue" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/repo" "github.com/urfave/cli/v2" "golang.org/x/sync/errgroup" "gorm.io/gorm" @@ -89,9 +86,6 @@ type Indexer struct { watchMode WatchMode syncMode SyncMode - srv *http.Server - httpPort uint64 - ethClientTimeout time.Duration wg *sync.WaitGroup @@ -134,18 +128,6 @@ func InitFromConfig(ctx context.Context, i *Indexer, cfg *Config) (err error) { return err } - srv, err := http.NewServer(http.NewServerOpts{ - EventRepo: eventRepository, - Echo: echo.New(), - CorsOrigins: cfg.CORSOrigins, - SrcEthClient: srcEthClient, - DestEthClient: destEthClient, - BlockRepo: blockRepository, - }) - if err != nil { - return err - } - q, err := cfg.OpenQueueFunc() if err != nil { return err @@ -193,9 +175,6 @@ func InitFromConfig(ctx context.Context, i *Indexer, cfg *Config) (err error) { i.queue = q - i.srv = srv - i.httpPort = cfg.HTTPPort - i.srcChainId = srcChainID i.destChainId = destChainID @@ -213,23 +192,12 @@ func (i *Indexer) Name() string { return "indexer" } -// TODO func (i *Indexer) Close(ctx context.Context) { - if err := i.srv.Shutdown(ctx); err != nil { - slog.Error("srv shutdown", "error", err) - } - i.wg.Wait() } // nolint: funlen func (i *Indexer) Start() error { - go func() { - if err := i.srv.Start(fmt.Sprintf(":%v", i.httpPort)); err != nethttp.ErrServerClosed { - slog.Error("http srv start", "error", err.Error()) - } - }() - i.ctx = context.Background() if err := i.queue.Start(i.ctx, i.queueName()); err != nil { diff --git a/packages/relayer/indexer/indexer_test.go b/packages/relayer/indexer/indexer_test.go index 14778603e00..655a71f635a 100644 --- a/packages/relayer/indexer/indexer_test.go +++ b/packages/relayer/indexer/indexer_test.go @@ -5,23 +5,12 @@ import ( "sync" "time" - "github.com/ethereum/go-ethereum/ethclient" - "github.com/labstack/echo/v4" "github.com/taikoxyz/taiko-mono/packages/relayer" - "github.com/taikoxyz/taiko-mono/packages/relayer/indexer/http" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" ) func newTestService(syncMode SyncMode, watchMode WatchMode) (*Indexer, relayer.Bridge) { b := &mock.Bridge{} - srv, _ := http.NewServer(http.NewServerOpts{ - Echo: echo.New(), - EventRepo: &mock.EventRepository{}, - BlockRepo: &mock.BlockRepository{}, - SrcEthClient: ðclient.Client{}, - DestEthClient: ðclient.Client{}, - CorsOrigins: []string{}, - }) return &Indexer{ blockRepo: &mock.BlockRepository{}, @@ -38,8 +27,6 @@ func newTestService(syncMode SyncMode, watchMode WatchMode) (*Indexer, relayer.B syncMode: syncMode, watchMode: watchMode, - httpPort: 4102, - srv: srv, wg: &sync.WaitGroup{}, diff --git a/packages/relayer/indexer/set_initial_processing_block_by_mode_test.go b/packages/relayer/indexer/set_initial_processing_block_by_mode_test.go index ffc6ed60272..9ebf1db5538 100644 --- a/packages/relayer/indexer/set_initial_processing_block_by_mode_test.go +++ b/packages/relayer/indexer/set_initial_processing_block_by_mode_test.go @@ -6,7 +6,7 @@ import ( "testing" "github.com/stretchr/testify/assert" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" ) func Test_SetInitialProcessingBlockByMode(t *testing.T) { diff --git a/packages/relayer/indexer/start_test.go b/packages/relayer/indexer/start_test.go index 4fb1f239f7e..aeeeb0794ef 100644 --- a/packages/relayer/indexer/start_test.go +++ b/packages/relayer/indexer/start_test.go @@ -5,7 +5,7 @@ import ( "time" "github.com/stretchr/testify/assert" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" ) func Test_Start(t *testing.T) { diff --git a/packages/relayer/indexer/subscribe_test.go b/packages/relayer/indexer/subscribe_test.go index 9c9705c6f1b..2564c3a65e0 100644 --- a/packages/relayer/indexer/subscribe_test.go +++ b/packages/relayer/indexer/subscribe_test.go @@ -6,7 +6,7 @@ import ( "time" "github.com/stretchr/testify/assert" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" ) func Test_subscribe(t *testing.T) { diff --git a/packages/relayer/db/db.go b/packages/relayer/pkg/db/db.go similarity index 100% rename from packages/relayer/db/db.go rename to packages/relayer/pkg/db/db.go diff --git a/packages/relayer/db/db_test.go b/packages/relayer/pkg/db/db_test.go similarity index 100% rename from packages/relayer/db/db_test.go rename to packages/relayer/pkg/db/db_test.go diff --git a/packages/relayer/encoding/block_header.go b/packages/relayer/pkg/encoding/block_header.go similarity index 100% rename from packages/relayer/encoding/block_header.go rename to packages/relayer/pkg/encoding/block_header.go diff --git a/packages/relayer/encoding/block_header_test.go b/packages/relayer/pkg/encoding/block_header_test.go similarity index 100% rename from packages/relayer/encoding/block_header_test.go rename to packages/relayer/pkg/encoding/block_header_test.go diff --git a/packages/relayer/encoding/logs_bloom.go b/packages/relayer/pkg/encoding/logs_bloom.go similarity index 100% rename from packages/relayer/encoding/logs_bloom.go rename to packages/relayer/pkg/encoding/logs_bloom.go diff --git a/packages/relayer/encoding/logs_bloom_test.go b/packages/relayer/pkg/encoding/logs_bloom_test.go similarity index 100% rename from packages/relayer/encoding/logs_bloom_test.go rename to packages/relayer/pkg/encoding/logs_bloom_test.go diff --git a/packages/relayer/encoding/signal_proof.go b/packages/relayer/pkg/encoding/signal_proof.go similarity index 100% rename from packages/relayer/encoding/signal_proof.go rename to packages/relayer/pkg/encoding/signal_proof.go diff --git a/packages/relayer/encoding/signal_proof_test.go b/packages/relayer/pkg/encoding/signal_proof_test.go similarity index 100% rename from packages/relayer/encoding/signal_proof_test.go rename to packages/relayer/pkg/encoding/signal_proof_test.go diff --git a/packages/relayer/encoding/types.go b/packages/relayer/pkg/encoding/types.go similarity index 100% rename from packages/relayer/encoding/types.go rename to packages/relayer/pkg/encoding/types.go diff --git a/packages/relayer/indexer/http/errors.go b/packages/relayer/pkg/http/errors.go similarity index 100% rename from packages/relayer/indexer/http/errors.go rename to packages/relayer/pkg/http/errors.go diff --git a/packages/relayer/indexer/http/get_block_info.go b/packages/relayer/pkg/http/get_block_info.go similarity index 100% rename from packages/relayer/indexer/http/get_block_info.go rename to packages/relayer/pkg/http/get_block_info.go diff --git a/packages/relayer/indexer/http/get_events_by_address.go b/packages/relayer/pkg/http/get_events_by_address.go similarity index 100% rename from packages/relayer/indexer/http/get_events_by_address.go rename to packages/relayer/pkg/http/get_events_by_address.go diff --git a/packages/relayer/indexer/http/get_events_by_address_test.go b/packages/relayer/pkg/http/get_events_by_address_test.go similarity index 100% rename from packages/relayer/indexer/http/get_events_by_address_test.go rename to packages/relayer/pkg/http/get_events_by_address_test.go diff --git a/packages/relayer/indexer/http/routes.go b/packages/relayer/pkg/http/routes.go similarity index 100% rename from packages/relayer/indexer/http/routes.go rename to packages/relayer/pkg/http/routes.go diff --git a/packages/relayer/indexer/http/server.go b/packages/relayer/pkg/http/server.go similarity index 100% rename from packages/relayer/indexer/http/server.go rename to packages/relayer/pkg/http/server.go diff --git a/packages/relayer/indexer/http/server_test.go b/packages/relayer/pkg/http/server_test.go similarity index 96% rename from packages/relayer/indexer/http/server_test.go rename to packages/relayer/pkg/http/server_test.go index 3fd3d9ba065..98595eb4d71 100644 --- a/packages/relayer/indexer/http/server_test.go +++ b/packages/relayer/pkg/http/server_test.go @@ -10,8 +10,8 @@ import ( echo "github.com/labstack/echo/v4" "github.com/stretchr/testify/assert" "github.com/taikoxyz/taiko-mono/packages/relayer" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" - "github.com/taikoxyz/taiko-mono/packages/relayer/repo" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/repo" ) func newTestServer(url string) *Server { diff --git a/packages/relayer/metrics/metrics.go b/packages/relayer/pkg/metrics/metrics.go similarity index 100% rename from packages/relayer/metrics/metrics.go rename to packages/relayer/pkg/metrics/metrics.go diff --git a/packages/relayer/metrics/metrics_test.go b/packages/relayer/pkg/metrics/metrics_test.go similarity index 100% rename from packages/relayer/metrics/metrics_test.go rename to packages/relayer/pkg/metrics/metrics_test.go diff --git a/packages/relayer/mock/block_repository.go b/packages/relayer/pkg/mock/block_repository.go similarity index 100% rename from packages/relayer/mock/block_repository.go rename to packages/relayer/pkg/mock/block_repository.go diff --git a/packages/relayer/mock/blocker.go b/packages/relayer/pkg/mock/blocker.go similarity index 100% rename from packages/relayer/mock/blocker.go rename to packages/relayer/pkg/mock/blocker.go diff --git a/packages/relayer/mock/bridge.go b/packages/relayer/pkg/mock/bridge.go similarity index 100% rename from packages/relayer/mock/bridge.go rename to packages/relayer/pkg/mock/bridge.go diff --git a/packages/relayer/mock/caller.go b/packages/relayer/pkg/mock/caller.go similarity index 100% rename from packages/relayer/mock/caller.go rename to packages/relayer/pkg/mock/caller.go diff --git a/packages/relayer/mock/db.go b/packages/relayer/pkg/mock/db.go similarity index 100% rename from packages/relayer/mock/db.go rename to packages/relayer/pkg/mock/db.go diff --git a/packages/relayer/mock/eth_client.go b/packages/relayer/pkg/mock/eth_client.go similarity index 100% rename from packages/relayer/mock/eth_client.go rename to packages/relayer/pkg/mock/eth_client.go diff --git a/packages/relayer/mock/event_repository.go b/packages/relayer/pkg/mock/event_repository.go similarity index 100% rename from packages/relayer/mock/event_repository.go rename to packages/relayer/pkg/mock/event_repository.go diff --git a/packages/relayer/mock/header_syncer.go b/packages/relayer/pkg/mock/header_syncer.go similarity index 100% rename from packages/relayer/mock/header_syncer.go rename to packages/relayer/pkg/mock/header_syncer.go diff --git a/packages/relayer/mock/queue.go b/packages/relayer/pkg/mock/queue.go similarity index 91% rename from packages/relayer/mock/queue.go rename to packages/relayer/pkg/mock/queue.go index 4e775cf0817..62d911ad166 100644 --- a/packages/relayer/mock/queue.go +++ b/packages/relayer/pkg/mock/queue.go @@ -4,7 +4,7 @@ import ( "context" "sync" - "github.com/taikoxyz/taiko-mono/packages/relayer/queue" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/queue" ) type Queue struct { diff --git a/packages/relayer/mock/signalservice.go b/packages/relayer/pkg/mock/signalservice.go similarity index 100% rename from packages/relayer/mock/signalservice.go rename to packages/relayer/pkg/mock/signalservice.go diff --git a/packages/relayer/mock/token_vault.go b/packages/relayer/pkg/mock/token_vault.go similarity index 100% rename from packages/relayer/mock/token_vault.go rename to packages/relayer/pkg/mock/token_vault.go diff --git a/packages/relayer/proof/block_header.go b/packages/relayer/pkg/proof/block_header.go similarity index 92% rename from packages/relayer/proof/block_header.go rename to packages/relayer/pkg/proof/block_header.go index 49ae9511298..fcb62d21d5e 100644 --- a/packages/relayer/proof/block_header.go +++ b/packages/relayer/pkg/proof/block_header.go @@ -6,7 +6,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/pkg/errors" - "github.com/taikoxyz/taiko-mono/packages/relayer/encoding" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/encoding" ) // blockHeader fetches block via rpc, then converts an ethereum block to the BlockHeader type that LibBridgeData diff --git a/packages/relayer/proof/block_header_test.go b/packages/relayer/pkg/proof/block_header_test.go similarity index 83% rename from packages/relayer/proof/block_header_test.go rename to packages/relayer/pkg/proof/block_header_test.go index 6f2f96da432..a97b3ecbca4 100644 --- a/packages/relayer/proof/block_header_test.go +++ b/packages/relayer/pkg/proof/block_header_test.go @@ -6,8 +6,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" - "github.com/taikoxyz/taiko-mono/packages/relayer/encoding" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/encoding" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" "gopkg.in/go-playground/assert.v1" ) diff --git a/packages/relayer/proof/encoded_signal_proof.go b/packages/relayer/pkg/proof/encoded_signal_proof.go similarity index 98% rename from packages/relayer/proof/encoded_signal_proof.go rename to packages/relayer/pkg/proof/encoded_signal_proof.go index 1742692ca80..85f15087aac 100644 --- a/packages/relayer/proof/encoded_signal_proof.go +++ b/packages/relayer/pkg/proof/encoded_signal_proof.go @@ -7,7 +7,7 @@ import ( "log/slog" "github.com/taikoxyz/taiko-mono/packages/relayer" - "github.com/taikoxyz/taiko-mono/packages/relayer/encoding" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/encoding" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" diff --git a/packages/relayer/proof/encoded_signal_proof_test.go b/packages/relayer/pkg/proof/encoded_signal_proof_test.go similarity index 94% rename from packages/relayer/proof/encoded_signal_proof_test.go rename to packages/relayer/pkg/proof/encoded_signal_proof_test.go index 36d57e2ae6a..8655fbb000e 100644 --- a/packages/relayer/proof/encoded_signal_proof_test.go +++ b/packages/relayer/pkg/proof/encoded_signal_proof_test.go @@ -7,7 +7,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/stretchr/testify/assert" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" ) var ( diff --git a/packages/relayer/proof/prover.go b/packages/relayer/pkg/proof/prover.go similarity index 100% rename from packages/relayer/proof/prover.go rename to packages/relayer/pkg/proof/prover.go diff --git a/packages/relayer/proof/prover_test.go b/packages/relayer/pkg/proof/prover_test.go similarity index 91% rename from packages/relayer/proof/prover_test.go rename to packages/relayer/pkg/proof/prover_test.go index aef67a5ee3f..6b7e1e3b2f9 100644 --- a/packages/relayer/proof/prover_test.go +++ b/packages/relayer/pkg/proof/prover_test.go @@ -5,7 +5,7 @@ import ( "github.com/ethereum/go-ethereum/ethclient" "github.com/taikoxyz/taiko-mono/packages/relayer" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" "gopkg.in/go-playground/assert.v1" ) diff --git a/packages/relayer/proof/types.go b/packages/relayer/pkg/proof/types.go similarity index 100% rename from packages/relayer/proof/types.go rename to packages/relayer/pkg/proof/types.go diff --git a/packages/relayer/proof/types_test.go b/packages/relayer/pkg/proof/types_test.go similarity index 100% rename from packages/relayer/proof/types_test.go rename to packages/relayer/pkg/proof/types_test.go diff --git a/packages/relayer/queue/queue.go b/packages/relayer/pkg/queue/queue.go similarity index 100% rename from packages/relayer/queue/queue.go rename to packages/relayer/pkg/queue/queue.go diff --git a/packages/relayer/queue/rabbitmq/queue.go b/packages/relayer/pkg/queue/rabbitmq/queue.go similarity index 99% rename from packages/relayer/queue/rabbitmq/queue.go rename to packages/relayer/pkg/queue/rabbitmq/queue.go index 967b04a3e55..552780ce36f 100644 --- a/packages/relayer/queue/rabbitmq/queue.go +++ b/packages/relayer/pkg/queue/rabbitmq/queue.go @@ -9,7 +9,7 @@ import ( "github.com/google/uuid" amqp "github.com/rabbitmq/amqp091-go" - "github.com/taikoxyz/taiko-mono/packages/relayer/queue" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/queue" ) type RabbitMQ struct { diff --git a/packages/relayer/repo/block.go b/packages/relayer/pkg/repo/block.go similarity index 100% rename from packages/relayer/repo/block.go rename to packages/relayer/pkg/repo/block.go diff --git a/packages/relayer/repo/block_test.go b/packages/relayer/pkg/repo/block_test.go similarity index 96% rename from packages/relayer/repo/block_test.go rename to packages/relayer/pkg/repo/block_test.go index 4aabd6d29b2..4df91dd1719 100644 --- a/packages/relayer/repo/block_test.go +++ b/packages/relayer/pkg/repo/block_test.go @@ -6,7 +6,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/taikoxyz/taiko-mono/packages/relayer" - "github.com/taikoxyz/taiko-mono/packages/relayer/db" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/db" "gopkg.in/go-playground/assert.v1" ) diff --git a/packages/relayer/repo/containers_test.go b/packages/relayer/pkg/repo/containers_test.go similarity index 92% rename from packages/relayer/repo/containers_test.go rename to packages/relayer/pkg/repo/containers_test.go index 2d2638fc018..67f186da3bc 100644 --- a/packages/relayer/repo/containers_test.go +++ b/packages/relayer/pkg/repo/containers_test.go @@ -6,7 +6,7 @@ import ( "testing" "github.com/pressly/goose/v3" - "github.com/taikoxyz/taiko-mono/packages/relayer/db" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/db" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/wait" "gorm.io/driver/mysql" @@ -68,7 +68,7 @@ func testMysql(t *testing.T) (DB, func(), error) { } sqlDB, _ := gormDB.DB() - if err := goose.Up(sqlDB, "../migrations"); err != nil { + if err := goose.Up(sqlDB, "../../migrations"); err != nil { t.Fatal(err) } diff --git a/packages/relayer/repo/db.go b/packages/relayer/pkg/repo/db.go similarity index 100% rename from packages/relayer/repo/db.go rename to packages/relayer/pkg/repo/db.go diff --git a/packages/relayer/repo/event.go b/packages/relayer/pkg/repo/event.go similarity index 100% rename from packages/relayer/repo/event.go rename to packages/relayer/pkg/repo/event.go diff --git a/packages/relayer/repo/event_test.go b/packages/relayer/pkg/repo/event_test.go similarity index 99% rename from packages/relayer/repo/event_test.go rename to packages/relayer/pkg/repo/event_test.go index 976058806d3..bf9ba228e57 100644 --- a/packages/relayer/repo/event_test.go +++ b/packages/relayer/pkg/repo/event_test.go @@ -11,7 +11,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/morkid/paginate" "github.com/taikoxyz/taiko-mono/packages/relayer" - "github.com/taikoxyz/taiko-mono/packages/relayer/db" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/db" "gopkg.in/go-playground/assert.v1" "gorm.io/datatypes" ) diff --git a/packages/relayer/processor/config.go b/packages/relayer/processor/config.go index 58a4b8c5aa7..9dca67a3a4c 100644 --- a/packages/relayer/processor/config.go +++ b/packages/relayer/processor/config.go @@ -7,9 +7,9 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/taikoxyz/taiko-mono/packages/relayer/cmd/flags" - "github.com/taikoxyz/taiko-mono/packages/relayer/db" - "github.com/taikoxyz/taiko-mono/packages/relayer/queue" - "github.com/taikoxyz/taiko-mono/packages/relayer/queue/rabbitmq" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/db" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/queue" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/queue/rabbitmq" "github.com/urfave/cli/v2" "gorm.io/driver/mysql" "gorm.io/gorm" diff --git a/packages/relayer/processor/config_test.go b/packages/relayer/processor/config_test.go index 6f88f9a547c..503d3deae23 100644 --- a/packages/relayer/processor/config_test.go +++ b/packages/relayer/processor/config_test.go @@ -6,8 +6,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/assert" "github.com/taikoxyz/taiko-mono/packages/relayer/cmd/flags" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" - "github.com/taikoxyz/taiko-mono/packages/relayer/queue" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/queue" "github.com/urfave/cli/v2" ) diff --git a/packages/relayer/processor/get_latest_nonce_test.go b/packages/relayer/processor/get_latest_nonce_test.go index cea74de61fc..c63d0f175f5 100644 --- a/packages/relayer/processor/get_latest_nonce_test.go +++ b/packages/relayer/processor/get_latest_nonce_test.go @@ -6,7 +6,7 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/stretchr/testify/assert" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" ) func Test_getLatestNonce(t *testing.T) { diff --git a/packages/relayer/processor/is_profitable_test.go b/packages/relayer/processor/is_profitable_test.go index bae4415c71d..03b5f3efc8f 100644 --- a/packages/relayer/processor/is_profitable_test.go +++ b/packages/relayer/processor/is_profitable_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/taikoxyz/taiko-mono/packages/relayer/bindings/bridge" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" ) func Test_isProfitable(t *testing.T) { diff --git a/packages/relayer/processor/process_message.go b/packages/relayer/processor/process_message.go index 41400e07ee0..d6ef883c64b 100644 --- a/packages/relayer/processor/process_message.go +++ b/packages/relayer/processor/process_message.go @@ -21,8 +21,8 @@ import ( "github.com/taikoxyz/taiko-mono/packages/relayer" "github.com/taikoxyz/taiko-mono/packages/relayer/bindings/bridge" "github.com/taikoxyz/taiko-mono/packages/relayer/bindings/icrosschainsync" - "github.com/taikoxyz/taiko-mono/packages/relayer/proof" - "github.com/taikoxyz/taiko-mono/packages/relayer/queue" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/proof" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/queue" ) var ( diff --git a/packages/relayer/processor/process_message_test.go b/packages/relayer/processor/process_message_test.go index f0ce5c0d3d3..d1174adec24 100644 --- a/packages/relayer/processor/process_message_test.go +++ b/packages/relayer/processor/process_message_test.go @@ -12,8 +12,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/taikoxyz/taiko-mono/packages/relayer" "github.com/taikoxyz/taiko-mono/packages/relayer/bindings/bridge" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" - "github.com/taikoxyz/taiko-mono/packages/relayer/queue" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/queue" ) func Test_sendProcessMessageCall(t *testing.T) { diff --git a/packages/relayer/processor/processor.go b/packages/relayer/processor/processor.go index 30cc9515058..07fd6ec73b3 100644 --- a/packages/relayer/processor/processor.go +++ b/packages/relayer/processor/processor.go @@ -28,9 +28,9 @@ import ( "github.com/taikoxyz/taiko-mono/packages/relayer/bindings/icrosschainsync" "github.com/taikoxyz/taiko-mono/packages/relayer/bindings/signalservice" "github.com/taikoxyz/taiko-mono/packages/relayer/bindings/taikol2" - "github.com/taikoxyz/taiko-mono/packages/relayer/proof" - "github.com/taikoxyz/taiko-mono/packages/relayer/queue" - "github.com/taikoxyz/taiko-mono/packages/relayer/repo" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/proof" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/queue" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/repo" ) type DB interface { diff --git a/packages/relayer/processor/processor_test.go b/packages/relayer/processor/processor_test.go index 77ee697fce2..dad91791fec 100644 --- a/packages/relayer/processor/processor_test.go +++ b/packages/relayer/processor/processor_test.go @@ -5,8 +5,8 @@ import ( "time" "github.com/ethereum/go-ethereum/crypto" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" - "github.com/taikoxyz/taiko-mono/packages/relayer/proof" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/proof" ) var dummyEcdsaKey = "8da4ef21b864d2cc526dbdb2a120bd2874c36c9d0a1fb7f8c63d7f7a8b41de8f" diff --git a/packages/relayer/processor/wait_for_confirmations_test.go b/packages/relayer/processor/wait_for_confirmations_test.go index e47135f0a15..c787dd00263 100644 --- a/packages/relayer/processor/wait_for_confirmations_test.go +++ b/packages/relayer/processor/wait_for_confirmations_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/stretchr/testify/assert" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" ) func Test_waitForConfirmations(t *testing.T) { diff --git a/packages/relayer/processor/wait_header_synced_test.go b/packages/relayer/processor/wait_header_synced_test.go index 8ed94de93d0..6ef36fcb280 100644 --- a/packages/relayer/processor/wait_header_synced_test.go +++ b/packages/relayer/processor/wait_header_synced_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/stretchr/testify/assert" - "github.com/taikoxyz/taiko-mono/packages/relayer/mock" + "github.com/taikoxyz/taiko-mono/packages/relayer/pkg/mock" ) func Test_waitHeaderSynced(t *testing.T) {