diff --git a/cmd/geth/config.go b/cmd/geth/config.go index e84a0b6d4..35fce6ce8 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -201,40 +201,78 @@ func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) { FilePath: ctx.GlobalString(utils.StateDiffFilePath.Name), } case shared.POSTGRES: - driverTypeStr := ctx.GlobalString(utils.StateDiffDBDriverTypeFlag.Name) - driverType, err := postgres.ResolveDriverType(driverTypeStr) + v2DriverTypeStr := ctx.GlobalString(utils.StateDiffV2DBDriverTypeFlag.Name) + v2DriverType, err := postgres.ResolveDriverType(v2DriverTypeStr) if err != nil { utils.Fatalf("%v", err) } - pgConfig := postgres.Config{ - Hostname: ctx.GlobalString(utils.StateDiffDBHostFlag.Name), - Port: ctx.GlobalInt(utils.StateDiffDBPortFlag.Name), - DatabaseName: ctx.GlobalString(utils.StateDiffDBNameFlag.Name), - Username: ctx.GlobalString(utils.StateDiffDBUserFlag.Name), - Password: ctx.GlobalString(utils.StateDiffDBPasswordFlag.Name), + v2PgConfig := postgres.Config{ + Hostname: ctx.GlobalString(utils.StateDiffV2DBHostFlag.Name), + Port: ctx.GlobalInt(utils.StateDiffV2DBPortFlag.Name), + DatabaseName: ctx.GlobalString(utils.StateDiffV2DBNameFlag.Name), + Username: ctx.GlobalString(utils.StateDiffV2DBUserFlag.Name), + Password: ctx.GlobalString(utils.StateDiffV2DBPasswordFlag.Name), ID: nodeID, ClientName: clientName, - Driver: driverType, + Driver: v2DriverType, } - if ctx.GlobalIsSet(utils.StateDiffDBMinConns.Name) { - pgConfig.MinConns = ctx.GlobalInt(utils.StateDiffDBMinConns.Name) + if ctx.GlobalIsSet(utils.StateDiffV2DBMinConns.Name) { + v2PgConfig.MinConns = ctx.GlobalInt(utils.StateDiffV2DBMinConns.Name) } - if ctx.GlobalIsSet(utils.StateDiffDBMaxConns.Name) { - pgConfig.MaxConns = ctx.GlobalInt(utils.StateDiffDBMaxConns.Name) + if ctx.GlobalIsSet(utils.StateDiffV2DBMaxConns.Name) { + v2PgConfig.MaxConns = ctx.GlobalInt(utils.StateDiffV2DBMaxConns.Name) } - if ctx.GlobalIsSet(utils.StateDiffDBMaxIdleConns.Name) { - pgConfig.MaxIdle = ctx.GlobalInt(utils.StateDiffDBMaxIdleConns.Name) + if ctx.GlobalIsSet(utils.StateDiffV2DBMaxIdleConns.Name) { + v2PgConfig.MaxIdle = ctx.GlobalInt(utils.StateDiffV2DBMaxIdleConns.Name) } - if ctx.GlobalIsSet(utils.StateDiffDBMaxConnLifetime.Name) { - pgConfig.MaxConnLifetime = ctx.GlobalDuration(utils.StateDiffDBMaxConnLifetime.Name) * time.Second + if ctx.GlobalIsSet(utils.StateDiffV2DBMaxConnLifetime.Name) { + v2PgConfig.MaxConnLifetime = ctx.GlobalDuration(utils.StateDiffV2DBMaxConnLifetime.Name) * time.Second } - if ctx.GlobalIsSet(utils.StateDiffDBMaxConnIdleTime.Name) { - pgConfig.MaxConnIdleTime = ctx.GlobalDuration(utils.StateDiffDBMaxConnIdleTime.Name) * time.Second + if ctx.GlobalIsSet(utils.StateDiffV2DBMaxConnIdleTime.Name) { + v2PgConfig.MaxConnIdleTime = ctx.GlobalDuration(utils.StateDiffV2DBMaxConnIdleTime.Name) * time.Second } - if ctx.GlobalIsSet(utils.StateDiffDBConnTimeout.Name) { - pgConfig.ConnTimeout = ctx.GlobalDuration(utils.StateDiffDBConnTimeout.Name) * time.Second + if ctx.GlobalIsSet(utils.StateDiffV2DBConnTimeout.Name) { + v2PgConfig.ConnTimeout = ctx.GlobalDuration(utils.StateDiffV2DBConnTimeout.Name) * time.Second + } + + v3DriverTypeStr := ctx.GlobalString(utils.StateDiffV2DBDriverTypeFlag.Name) + v3DriverType, err := postgres.ResolveDriverType(v3DriverTypeStr) + if err != nil { + utils.Fatalf("%v", err) + } + v3PgConfig := postgres.Config{ + Hostname: ctx.GlobalString(utils.StateDiffV3DBHostFlag.Name), + Port: ctx.GlobalInt(utils.StateDiffV3DBPortFlag.Name), + DatabaseName: ctx.GlobalString(utils.StateDiffV3DBNameFlag.Name), + Username: ctx.GlobalString(utils.StateDiffV3DBUserFlag.Name), + Password: ctx.GlobalString(utils.StateDiffV3DBPasswordFlag.Name), + ID: nodeID, + ClientName: clientName, + Driver: v3DriverType, + } + if ctx.GlobalIsSet(utils.StateDiffV3DBMinConns.Name) { + v3PgConfig.MinConns = ctx.GlobalInt(utils.StateDiffV3DBMinConns.Name) + } + if ctx.GlobalIsSet(utils.StateDiffV3DBMaxConns.Name) { + v3PgConfig.MaxConns = ctx.GlobalInt(utils.StateDiffV3DBMaxConns.Name) + } + if ctx.GlobalIsSet(utils.StateDiffV3DBMaxIdleConns.Name) { + v3PgConfig.MaxIdle = ctx.GlobalInt(utils.StateDiffV3DBMaxIdleConns.Name) + } + if ctx.GlobalIsSet(utils.StateDiffV3DBMaxConnLifetime.Name) { + v3PgConfig.MaxConnLifetime = ctx.GlobalDuration(utils.StateDiffV3DBMaxConnLifetime.Name) * time.Second + } + if ctx.GlobalIsSet(utils.StateDiffV3DBMaxConnIdleTime.Name) { + v3PgConfig.MaxConnIdleTime = ctx.GlobalDuration(utils.StateDiffV3DBMaxConnIdleTime.Name) * time.Second + } + if ctx.GlobalIsSet(utils.StateDiffV3DBConnTimeout.Name) { + v3PgConfig.ConnTimeout = ctx.GlobalDuration(utils.StateDiffV3DBConnTimeout.Name) * time.Second + } + + indexerConfig = postgres.MultiConfig{ + V2: v2PgConfig, + V3: v3PgConfig, } - indexerConfig = pgConfig case shared.DUMP: dumpTypeStr := ctx.GlobalString(utils.StateDiffDBDumpDst.Name) dumpType, err := dumpdb.ResolveDumpType(dumpTypeStr) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 3dfd2dad0..4b34c9ad4 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -796,6 +796,7 @@ var ( Name: "catalyst", Usage: "Catalyst mode (eth2 integration testing)", } + StateDiffFlag = cli.BoolFlag{ Name: "statediff", Usage: "Enables the processing of state diffs between each block", @@ -805,63 +806,118 @@ var ( Usage: "Statediff database type (current options: postgres, file, dump)", Value: "postgres", } - StateDiffDBDriverTypeFlag = cli.StringFlag{ - Name: "statediff.db.driver", - Usage: "Statediff database driver type", - Value: "pgx", - } StateDiffDBDumpDst = cli.StringFlag{ Name: "statediff.dump.dst", Usage: "Statediff database dump destination (default is stdout)", Value: "stdout", } - StateDiffDBHostFlag = cli.StringFlag{ - Name: "statediff.db.host", - Usage: "Statediff database hostname/ip", + + StateDiffV2DBDriverTypeFlag = cli.StringFlag{ + Name: "statediff.db.v2.driver", + Usage: "Statediff v2 database driver type", + Value: "pgx", + } + StateDiffV2DBHostFlag = cli.StringFlag{ + Name: "statediff.db.v2.host", + Usage: "Statediff v2 database hostname/ip", Value: "localhost", } - StateDiffDBPortFlag = cli.IntFlag{ - Name: "statediff.db.port", - Usage: "Statediff database port", + StateDiffV2DBPortFlag = cli.IntFlag{ + Name: "statediff.db.v2.port", + Usage: "Statediff v2 database port", Value: 5432, } - StateDiffDBNameFlag = cli.StringFlag{ - Name: "statediff.db.name", - Usage: "Statediff database name", + StateDiffV2DBNameFlag = cli.StringFlag{ + Name: "statediff.db.v2.name", + Usage: "Statediff v2 database name", } - StateDiffDBPasswordFlag = cli.StringFlag{ - Name: "statediff.db.password", - Usage: "Statediff database password", + StateDiffV2DBPasswordFlag = cli.StringFlag{ + Name: "statediff.db.v2.password", + Usage: "Statediff v2 database password", } - StateDiffDBUserFlag = cli.StringFlag{ - Name: "statediff.db.user", - Usage: "Statediff database username", + StateDiffV2DBUserFlag = cli.StringFlag{ + Name: "statediff.db.v2.user", + Usage: "Statediff v2 database username", Value: "postgres", } - StateDiffDBMaxConnLifetime = cli.DurationFlag{ - Name: "statediff.db.maxconnlifetime", - Usage: "Statediff database maximum connection lifetime (in seconds)", + StateDiffV2DBMaxConnLifetime = cli.DurationFlag{ + Name: "statediff.db.v2.maxconnlifetime", + Usage: "Statediff v2 database maximum connection lifetime (in seconds)", } - StateDiffDBMaxConnIdleTime = cli.DurationFlag{ - Name: "statediff.db.maxconnidletime", - Usage: "Statediff database maximum connection idle time (in seconds)", + StateDiffV2DBMaxConnIdleTime = cli.DurationFlag{ + Name: "statediff.db.v2.maxconnidletime", + Usage: "Statediff v2 database maximum connection idle time (in seconds)", } - StateDiffDBMaxConns = cli.IntFlag{ - Name: "statediff.db.maxconns", - Usage: "Statediff database maximum connections", + StateDiffV2DBMaxConns = cli.IntFlag{ + Name: "statediff.db.v2.maxconns", + Usage: "Statediff v2 database maximum connections", } - StateDiffDBMinConns = cli.IntFlag{ - Name: "statediff.db.minconns", - Usage: "Statediff database minimum connections", + StateDiffV2DBMinConns = cli.IntFlag{ + Name: "statediff.db.v2.minconns", + Usage: "Statediff v2 database minimum connections", } - StateDiffDBMaxIdleConns = cli.IntFlag{ - Name: "statediff.db.maxidleconns", - Usage: "Statediff database maximum idle connections", + StateDiffV2DBMaxIdleConns = cli.IntFlag{ + Name: "statediff.db.v2.maxidleconns", + Usage: "Statediff v2 database maximum idle connections", } - StateDiffDBConnTimeout = cli.DurationFlag{ - Name: "statediff.db.conntimeout", - Usage: "Statediff database connection timeout (in seconds)", + StateDiffV2DBConnTimeout = cli.DurationFlag{ + Name: "statediff.db.v2.conntimeout", + Usage: "Statediff v2 database connection timeout (in seconds)", } + + StateDiffV3DBDriverTypeFlag = cli.StringFlag{ + Name: "statediff.db.v3.driver", + Usage: "Statediff v3 database driver type", + Value: "pgx", + } + StateDiffV3DBHostFlag = cli.StringFlag{ + Name: "statediff.db.v3.host", + Usage: "Statediff v3 database hostname/ip", + Value: "localhost", + } + StateDiffV3DBPortFlag = cli.IntFlag{ + Name: "statediff.db.v3.port", + Usage: "Statediff v3 database port", + Value: 5432, + } + StateDiffV3DBNameFlag = cli.StringFlag{ + Name: "statediff.db.v3.name", + Usage: "Statediff v3 database name", + } + StateDiffV3DBPasswordFlag = cli.StringFlag{ + Name: "statediff.db.v3.password", + Usage: "Statediff v3 database password", + } + StateDiffV3DBUserFlag = cli.StringFlag{ + Name: "statediff.db.v3.user", + Usage: "Statediff v3 database username", + Value: "postgres", + } + StateDiffV3DBMaxConnLifetime = cli.DurationFlag{ + Name: "statediff.db.v3.maxconnlifetime", + Usage: "Statediff v3 database maximum connection lifetime (in seconds)", + } + StateDiffV3DBMaxConnIdleTime = cli.DurationFlag{ + Name: "statediff.db.v3.maxconnidletime", + Usage: "Statediff v3 database maximum connection idle time (in seconds)", + } + StateDiffV3DBMaxConns = cli.IntFlag{ + Name: "statediff.db.v3.maxconns", + Usage: "Statediff v3 database maximum connections", + } + StateDiffV3DBMinConns = cli.IntFlag{ + Name: "statediff.db.v3.minconns", + Usage: "Statediff v3 database minimum connections", + } + StateDiffV3DBMaxIdleConns = cli.IntFlag{ + Name: "statediff.db.v3.maxidleconns", + Usage: "Statediff v3 database maximum idle connections", + } + StateDiffV3DBConnTimeout = cli.DurationFlag{ + Name: "statediff.db.v3.conntimeout", + Usage: "Statediff v3 database connection timeout (in seconds)", + } + StateDiffDBNodeIDFlag = cli.StringFlag{ Name: "statediff.db.nodeid", Usage: "Node ID to use when writing state diffs to database",