diff --git a/core/cmd/shell.go b/core/cmd/shell.go index 4c6d232a83c..abb0d12aa06 100644 --- a/core/cmd/shell.go +++ b/core/cmd/shell.go @@ -83,7 +83,7 @@ func metricViews() []sdkmetric.View { ) } -func initGlobals(cfgProm config.Prometheus, cfgTracing config.Tracing, cfgTelemetry config.Telemetry, lggr logger.Logger, csaPubKeyHex string, beholderAuthHeaders map[string]string) error { +func initGlobals(cfgProm config.Prometheus, cfgTelemetry config.Telemetry, cfgTracing config.Tracing, lggr logger.Logger, beholderClient *beholder.Client) error { // Avoid double initializations, but does not prevent relay methods from being called multiple times. var err error initGlobalsOnce.Do(func() { @@ -95,71 +95,97 @@ func initGlobals(cfgProm config.Prometheus, cfgTracing config.Tracing, cfgTeleme lggr.Errorw("Telemetry error", "err", err) })) - tracingCfg := loop.TracingConfig{ - Enabled: cfgTracing.Enabled(), - CollectorTarget: cfgTracing.CollectorTarget(), - NodeAttributes: cfgTracing.Attributes(), - SamplingRatio: cfgTracing.SamplingRatio(), - TLSCertPath: cfgTracing.TLSCertPath(), - OnDialError: func(error) { lggr.Errorw("Failed to dial", "err", err) }, - } if !cfgTelemetry.Enabled() { - return loop.SetupTracing(tracingCfg) - } - - var attributes []attribute.KeyValue - if tracingCfg.Enabled { - attributes = tracingCfg.Attributes() - } - for k, v := range cfgTelemetry.ResourceAttributes() { - attributes = append(attributes, attribute.String(k, v)) + return loop.SetupTracing(tracingConfig(cfgTracing, lggr)) } - clientCfg := beholder.Config{ - InsecureConnection: cfgTelemetry.InsecureConnection(), - CACertFile: cfgTelemetry.CACertFile(), - OtelExporterGRPCEndpoint: cfgTelemetry.OtelExporterGRPCEndpoint(), - ResourceAttributes: attributes, - TraceSampleRatio: cfgTelemetry.TraceSampleRatio(), - EmitterBatchProcessor: cfgTelemetry.EmitterBatchProcessor(), - EmitterExportTimeout: cfgTelemetry.EmitterExportTimeout(), - AuthPublicKeyHex: csaPubKeyHex, - AuthHeaders: beholderAuthHeaders, - AuthHeadersTTL: cfgTelemetry.AuthHeadersTTL(), - ChipIngressEmitterEnabled: cfgTelemetry.ChipIngressEndpoint() != "", - ChipIngressEmitterGRPCEndpoint: cfgTelemetry.ChipIngressEndpoint(), - ChipIngressInsecureConnection: cfgTelemetry.ChipIngressInsecureConnection(), - LogStreamingEnabled: cfgTelemetry.LogStreamingEnabled(), - LogLevel: cfgTelemetry.LogLevel(), - LogBatchProcessor: cfgTelemetry.LogBatchProcessor(), - LogExportTimeout: cfgTelemetry.LogExportTimeout(), - LogExportMaxBatchSize: cfgTelemetry.LogExportMaxBatchSize(), - LogExportInterval: cfgTelemetry.LogExportInterval(), - LogMaxQueueSize: cfgTelemetry.LogMaxQueueSize(), - // note: due to the OTEL specification, all histogram buckets - // must be defined when the beholder client is created - MetricViews: metricViews(), + if beholderClient != nil { + beholder.SetClient(beholderClient) + beholder.SetGlobalOtelProviders() } - - if tracingCfg.Enabled { - clientCfg.TraceSpanExporter, err = tracingCfg.NewSpanExporter() - if err != nil { - return err - } - } - var beholderClient *beholder.Client - beholderClient, err = beholder.NewClient(clientCfg) - if err != nil { - return err - } - beholder.SetClient(beholderClient) - beholder.SetGlobalOtelProviders() return nil }() }) return err } +func tracingConfig(cfgTracing config.Tracing, lggr logger.Logger) loop.TracingConfig { + return loop.TracingConfig{ + Enabled: cfgTracing.Enabled(), + CollectorTarget: cfgTracing.CollectorTarget(), + NodeAttributes: cfgTracing.Attributes(), + SamplingRatio: cfgTracing.SamplingRatio(), + TLSCertPath: cfgTracing.TLSCertPath(), + OnDialError: func(e error) { lggr.Errorw("Failed to dial", "err", e) }, + } +} + +// newBeholderClient builds a Beholder client from tracing/telemetry config +// and sets the CSA signer used for auth header refresh. +func newBeholderClient( + lggr logger.Logger, + keyStore keystore.Master, + cfgTracing config.Tracing, + cfgTelemetry config.Telemetry, + csaPubKeyHex string, + beholderAuthHeaders map[string]string, +) (*beholder.Client, error) { + attributes := make([]attribute.KeyValue, 0, len(cfgTelemetry.ResourceAttributes())) + for k, v := range cfgTelemetry.ResourceAttributes() { + attributes = append(attributes, attribute.String(k, v)) + } + + clientCfg := beholder.Config{ + InsecureConnection: cfgTelemetry.InsecureConnection(), + CACertFile: cfgTelemetry.CACertFile(), + OtelExporterGRPCEndpoint: cfgTelemetry.OtelExporterGRPCEndpoint(), + ResourceAttributes: attributes, + TraceSampleRatio: cfgTelemetry.TraceSampleRatio(), + EmitterBatchProcessor: cfgTelemetry.EmitterBatchProcessor(), + EmitterExportTimeout: cfgTelemetry.EmitterExportTimeout(), + AuthPublicKeyHex: csaPubKeyHex, + AuthHeaders: beholderAuthHeaders, + AuthHeadersTTL: cfgTelemetry.AuthHeadersTTL(), + ChipIngressEmitterEnabled: cfgTelemetry.ChipIngressEndpoint() != "", + ChipIngressEmitterGRPCEndpoint: cfgTelemetry.ChipIngressEndpoint(), + ChipIngressInsecureConnection: cfgTelemetry.ChipIngressInsecureConnection(), + ChipIngressBatchEmitterEnabled: cfgTelemetry.ChipIngressBatchEmitterEnabled(), + ChipIngressLogger: lggr, + LogStreamingEnabled: cfgTelemetry.LogStreamingEnabled(), + LogLevel: cfgTelemetry.LogLevel(), + LogBatchProcessor: cfgTelemetry.LogBatchProcessor(), + LogExportTimeout: cfgTelemetry.LogExportTimeout(), + LogExportMaxBatchSize: cfgTelemetry.LogExportMaxBatchSize(), + LogExportInterval: cfgTelemetry.LogExportInterval(), + LogMaxQueueSize: cfgTelemetry.LogMaxQueueSize(), + // Due to OpenTelemetry semantics, histogram bucket boundaries must be set + // when the Beholder client is constructed. + MetricViews: metricViews(), + } + + if cfgTracing.Enabled() { + tracingCfg := tracingConfig(cfgTracing, lggr) + // add tracing attributes to resource attributes + clientCfg.ResourceAttributes = append(clientCfg.ResourceAttributes, tracingCfg.Attributes()...) + + var err error + clientCfg.TraceSpanExporter, err = tracingCfg.NewSpanExporter() + if err != nil { + return nil, err + } + } + beholderClient, err := beholder.NewClient(clientCfg) + if err != nil { + return nil, err + } + + // Set the signer used to refresh auth headers when AuthHeadersTTL is non-zero. + // TTL 0 means static headers only; the signer will not run. + beholderClient.SetSigner(&keystore.CSASigner{CSA: keyStore.CSA()}) + + return beholderClient, nil +} + // ErrNoAPICredentialsAvailable is returned when not run from a terminal // and no API credentials have been provided var ErrNoAPICredentialsAvailable = errors.New("API credentials must be supplied") @@ -188,9 +214,10 @@ type Shell struct { secretsFiles []string secretsFileIsSet bool - LDB pg.LockedDB // initialized in BeforeNode - DS sqlutil.DataSource // initialized in BeforeNode - KeyStore keystore.Master // initialized in BeforeNode + LDB pg.LockedDB // initialized in BeforeNode + DS sqlutil.DataSource // initialized in BeforeNode + KeyStore keystore.Master // initialized in BeforeNode + BeholderClient *beholder.Client // initialized in BeforeNode CleanupOnce sync.Once // ensures cleanup happens exactly once } diff --git a/core/cmd/shell_local.go b/core/cmd/shell_local.go index 70cef412d3e..45d2068ff9a 100644 --- a/core/cmd/shell_local.go +++ b/core/cmd/shell_local.go @@ -1196,33 +1196,55 @@ func (s *Shell) beforeNode(c *cli.Context) error { return fmt.Errorf("failed to build Beholder auth: %w", err) } - // Initialize globals with beholder and telemetry - err = initGlobals(s.Config.Prometheus(), s.Config.Tracing(), s.Config.Telemetry(), s.Logger, csaPubKeyHex, beholderAuthHeaders) - if err != nil { + // Build Beholder client: a real one when telemetry is enabled, otherwise a + // no-op so that downstream code never needs to nil-check. + if s.Config.Telemetry().Enabled() { + var beholderErr error + s.BeholderClient, beholderErr = newBeholderClient(s.Logger, keyStore, s.Config.Tracing(), s.Config.Telemetry(), csaPubKeyHex, beholderAuthHeaders) + if beholderErr != nil { + return fmt.Errorf("failed creating beholder client: %w", beholderErr) + } + } else { + s.BeholderClient = beholder.NewNoopClient() + } + + // Prometheus, grpc, tracing, and (when telemetry is on) Beholder OTel globals. + if err = initGlobals(s.Config.Prometheus(), s.Config.Telemetry(), s.Config.Tracing(), s.Logger, s.BeholderClient); err != nil { return fmt.Errorf("failed initializing globals: %w", err) } - // Set the signing mechanism for beholder auth headers - // if the TTL is 0, we will use the static headers, and this signer will never be called. - beholder.GetClient().SetSigner(&keystore.CSASigner{CSA: keyStore.CSA()}) - // Emit node configuration through beholder - s.EmitNodeConfig(ctx) - // If log streaming is enabled swap core to add Otel - if s.Config.Telemetry().LogStreamingEnabled() { - if s.SetOtelCore == nil { - return errors.New("Shell.SetOtelCore is nil") - } - otelLogger := beholder.GetLogger() - logLevel := s.Config.Telemetry().LogLevel() - otelCore := otelzap.NewCore(otelLogger, otelzap.WithLevel(logLevel)) + // Wire log streaming before Start so ChipIngressLogger and other internals + // see the OTel-backed logger core. + if err = s.setupLogStreaming(); err != nil { + return err + } + + // Start the beholder client after log streaming is wired. + if err = s.BeholderClient.Start(ctx); err != nil { + return fmt.Errorf("failed to start beholder client: %w", err) + } - s.SetOtelCore(otelCore) - lggr.Info("Log streaming enabled") + if s.Config.Telemetry().Enabled() { + s.EmitNodeConfig(ctx) } return nil } +func (s *Shell) setupLogStreaming() error { + if !s.Config.Telemetry().LogStreamingEnabled() { + return nil + } + if s.SetOtelCore == nil { + return errors.New("Shell.SetOtelCore is nil") + } + logLevel := s.Config.Telemetry().LogLevel() + otelCore := otelzap.NewCore(s.BeholderClient.Logger, otelzap.WithLevel(logLevel)) + s.SetOtelCore(otelCore) + s.Logger.Info("Log streaming enabled") + return nil +} + // BeforeNode initializes database, keystore, logger, and beholder for node startup. // This is used as a Before hook in CLI commands that require these components. func (s *Shell) BeforeNode(c *cli.Context) error { @@ -1247,6 +1269,9 @@ func (s *Shell) afterNode(lggr logger.SugaredLogger) { log.Printf("Failed to close Logger: %v", err) } } + if err := s.BeholderClient.Close(); err != nil { + log.Printf("Failed to close Beholder client: %v", err) + } }) } diff --git a/core/cmd/shell_local_test.go b/core/cmd/shell_local_test.go index 23c97cf0118..1682c8dbe16 100644 --- a/core/cmd/shell_local_test.go +++ b/core/cmd/shell_local_test.go @@ -1,9 +1,11 @@ package cmd_test import ( + "context" "errors" "flag" "math/big" + "net/url" "os" "strconv" "sync" @@ -12,12 +14,15 @@ import ( gethTypes "github.com/ethereum/go-ethereum/core/types" "github.com/google/uuid" + "github.com/jmoiron/sqlx" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" "github.com/urfave/cli" + "go.uber.org/zap/zapcore" commonkeystore "github.com/smartcontractkit/chainlink-common/keystore" + "github.com/smartcontractkit/chainlink-common/pkg/beholder" commonconfig "github.com/smartcontractkit/chainlink-common/pkg/config" "github.com/smartcontractkit/chainlink-common/pkg/sqlutil" pgcommon "github.com/smartcontractkit/chainlink-common/pkg/sqlutil/pg" @@ -56,8 +61,15 @@ func resetShellForTest(shell *cmd.Shell) { shell.LDB = nil shell.DS = nil shell.KeyStore = nil + shell.BeholderClient = nil } +type stubLockedDB struct{} + +func (stubLockedDB) Open(context.Context) error { return nil } +func (stubLockedDB) Close() error { return nil } +func (stubLockedDB) DB() *sqlx.DB { return nil } + func genTestEVMRelayers(t *testing.T, cfg chainlink.GeneralConfig, ds sqlutil.DataSource, ethKeystore keystore.Eth, csaKeystore core.Keystore) *chainlink.CoreRelayerChainInteroperators { lggr := logger.TestLogger(t) f := chainlink.RelayerFactory{ @@ -585,12 +597,126 @@ func TestShell_BeforeNode(t *testing.T) { require.Error(t, err) } // Clean up database if it was opened - if shell.LDB != nil { - cleanupErr := shell.AfterNode(c) - require.NoError(t, cleanupErr) + cleanupShell(t, &shell, c) + }) + } +} + +func TestShell_BeholderLifecycle(t *testing.T) { + testutils.SkipShortDB(t) + rawDBURL, ok := os.LookupEnv("CL_DATABASE_URL") + if !ok { + t.Skip("CL_DATABASE_URL is required for this test") + } + parsedDBURL, err := url.Parse(rawDBURL) + if err != nil || parsedDBURL.Path == "" { + t.Skip("CL_DATABASE_URL must include a database path for this test") + } + + newShell := func(t *testing.T, overrideFn func(c *chainlink.Config, s *chainlink.Secrets), setOtelCore func(zapcore.Core)) (*cmd.Shell, *cli.Context) { + t.Helper() + + cfg, _ := heavyweight.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) { + c.Database.DriverName = pgcommon.DriverPostgres + c.EVM = nil + c.Insecure.OCRDevelopmentMode = nil + if overrideFn != nil { + overrideFn(c, s) } }) + + shell := &cmd.Shell{ + Config: cfg, + KeyStoreAuthenticator: cmd.TerminalKeyStoreAuthenticator{ + Prompter: &cltest.MockCountingPrompter{T: t, NotTerminal: true}, + }, + Logger: logger.TestLogger(t), + SetOtelCore: setOtelCore, + } + t.Cleanup(func() { resetShellForTest(shell) }) + + set := flag.NewFlagSet("test", 0) + flagSetApplyFromAction(shell.RunNode, set, "") + require.NoError(t, set.Set("password", "../internal/fixtures/correct_password.txt")) + + ctx := cli.NewContext(nil, set, nil) + cliApp := cmd.NewApp(shell) + require.NoError(t, cliApp.Before(ctx)) + + return shell, ctx + } + + t.Run("telemetry disabled assigns noop beholder client", func(t *testing.T) { + shell, c := newShell(t, nil, nil) + require.NoError(t, shell.BeforeNode(c)) + require.NotNil(t, shell.BeholderClient, "BeholderClient should be a no-op client when telemetry is disabled") + require.NoError(t, shell.AfterNode(c)) + }) + + t.Run("telemetry enabled starts and closes beholder", func(t *testing.T) { + shell, c := newShell(t, func(c *chainlink.Config, s *chainlink.Secrets) { + trueVal := true + c.Telemetry.Enabled = &trueVal + endpoint := "localhost:4317" + c.Telemetry.Endpoint = &endpoint + c.Telemetry.InsecureConnection = &trueVal + }, nil) + require.NoError(t, shell.BeforeNode(c)) + require.NotNil(t, shell.BeholderClient, "BeholderClient should be set when telemetry is enabled") + assert.NoError(t, shell.BeholderClient.Ready()) + require.NoError(t, shell.AfterNode(c)) + }) + + t.Run("after node is idempotent", func(t *testing.T) { + shell, c := newShell(t, nil, nil) + require.NoError(t, shell.BeforeNode(c)) + require.NoError(t, shell.AfterNode(c)) + require.NoError(t, shell.AfterNode(c)) + }) + + t.Run("log streaming sets otel core", func(t *testing.T) { + var setOtelCoreCalls int + shell, c := newShell(t, func(c *chainlink.Config, s *chainlink.Secrets) { + trueVal := true + c.Telemetry.Enabled = &trueVal + endpoint := "localhost:4317" + c.Telemetry.Endpoint = &endpoint + c.Telemetry.InsecureConnection = &trueVal + c.Telemetry.LogStreamingEnabled = &trueVal + }, func(core zapcore.Core) { + require.NotNil(t, core) + setOtelCoreCalls++ + }) + + require.NoError(t, shell.BeforeNode(c)) + assert.Equal(t, 1, setOtelCoreCalls) + require.NoError(t, shell.AfterNode(c)) + }) + + t.Run("log streaming fails when SetOtelCore is nil", func(t *testing.T) { + shell, c := newShell(t, func(c *chainlink.Config, s *chainlink.Secrets) { + trueVal := true + c.Telemetry.Enabled = &trueVal + endpoint := "localhost:4317" + c.Telemetry.Endpoint = &endpoint + c.Telemetry.InsecureConnection = &trueVal + c.Telemetry.LogStreamingEnabled = &trueVal + }, nil) // SetOtelCore intentionally nil + err := shell.BeforeNode(c) + require.Error(t, err) + assert.Contains(t, err.Error(), "SetOtelCore is nil") + }) +} + +func TestShell_AfterNode_NilBeholderClient(t *testing.T) { + shell := cmd.Shell{ + LDB: stubLockedDB{}, + Logger: logger.TestLogger(t), + BeholderClient: beholder.NewNoopClient(), } + assert.NotPanics(t, func() { + _ = shell.AfterNode(cli.NewContext(nil, flag.NewFlagSet("test", 0), nil)) + }) } func TestShell_RunNode_WithBeforeNode(t *testing.T) { @@ -681,10 +807,18 @@ func TestShell_RunNode_WithBeforeNode(t *testing.T) { // Don't test RunNode if BeforeNode failed } // Clean up database if it was opened - if shell.LDB != nil { - cleanupErr := shell.AfterNode(c) - require.NoError(t, cleanupErr) - } + cleanupShell(t, &shell, c) }) } } + +func cleanupShell(t *testing.T, shell *cmd.Shell, c *cli.Context) { + t.Helper() + if shell.LDB == nil { + return + } + if shell.BeholderClient == nil { + shell.BeholderClient = beholder.NewNoopClient() + } + require.NoError(t, shell.AfterNode(c)) +} diff --git a/core/config/docs/core.toml b/core/config/docs/core.toml index bee8778d270..9488a173f29 100644 --- a/core/config/docs/core.toml +++ b/core/config/docs/core.toml @@ -870,6 +870,9 @@ AuthHeadersTTL = '0s' # Default ChipIngressEndpoint = '' # Default # ChipIngressInsecureConnection disables TLS when connecting to CHIP Ingress. ChipIngressInsecureConnection = false # Default +# ChipIngressBatchEmitterEnabled enables batching for chip-ingress events. +# When false, events are sent individually (legacy behavior). +ChipIngressBatchEmitterEnabled = true # Default # DurableEmitterEnabled enables persisting outbound CHIP events to Postgres for at-least-once delivery. DurableEmitterEnabled = false # Default diff --git a/core/config/telemetry_config.go b/core/config/telemetry_config.go index a0a175ff1a7..3c62a938a85 100644 --- a/core/config/telemetry_config.go +++ b/core/config/telemetry_config.go @@ -18,6 +18,7 @@ type Telemetry interface { EmitterExportTimeout() time.Duration ChipIngressEndpoint() string ChipIngressInsecureConnection() bool + ChipIngressBatchEmitterEnabled() bool DurableEmitterEnabled() bool HeartbeatInterval() time.Duration LogStreamingEnabled() bool diff --git a/core/config/toml/types.go b/core/config/toml/types.go index f4d704e345c..f32ae215825 100644 --- a/core/config/toml/types.go +++ b/core/config/toml/types.go @@ -2858,9 +2858,10 @@ type Telemetry struct { EmitterExportTimeout *commonconfig.Duration AuthHeadersTTL *commonconfig.Duration ChipIngressEndpoint *string - ChipIngressInsecureConnection *bool - DurableEmitterEnabled *bool - HeartbeatInterval *commonconfig.Duration + ChipIngressInsecureConnection *bool + ChipIngressBatchEmitterEnabled *bool + DurableEmitterEnabled *bool + HeartbeatInterval *commonconfig.Duration LogLevel *string LogStreamingEnabled *bool LogBatchProcessor *bool @@ -2904,6 +2905,9 @@ func (b *Telemetry) setFrom(f *Telemetry) { if v := f.ChipIngressInsecureConnection; v != nil { b.ChipIngressInsecureConnection = v } + if v := f.ChipIngressBatchEmitterEnabled; v != nil { + b.ChipIngressBatchEmitterEnabled = v + } if v := f.DurableEmitterEnabled; v != nil { b.DurableEmitterEnabled = v } diff --git a/core/scripts/cre/environment/examples/workflows/proof-of-reserve/cron-based/go.mod b/core/scripts/cre/environment/examples/workflows/proof-of-reserve/cron-based/go.mod index 30f4b09ddef..48134142a68 100644 --- a/core/scripts/cre/environment/examples/workflows/proof-of-reserve/cron-based/go.mod +++ b/core/scripts/cre/environment/examples/workflows/proof-of-reserve/cron-based/go.mod @@ -74,7 +74,7 @@ require ( github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 // indirect + github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260519133128-43fabe4ea5a5 // indirect github.com/smartcontractkit/libocr v0.0.0-20260403184524-b6409238958d // indirect github.com/stretchr/testify v1.11.1 // indirect github.com/supranational/blst v0.3.16 // indirect diff --git a/core/scripts/cre/environment/examples/workflows/proof-of-reserve/cron-based/go.sum b/core/scripts/cre/environment/examples/workflows/proof-of-reserve/cron-based/go.sum index 39db5a83b17..db7779941b4 100644 --- a/core/scripts/cre/environment/examples/workflows/proof-of-reserve/cron-based/go.sum +++ b/core/scripts/cre/environment/examples/workflows/proof-of-reserve/cron-based/go.sum @@ -265,8 +265,8 @@ github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/smartcontractkit/chainlink-common v0.11.2-0.20260421191147-d10b9943ac71 h1:WSNUds78NMlwDttROK/hJZ6ZOremyrR5JXJmPlT8hO8= github.com/smartcontractkit/chainlink-common v0.11.2-0.20260421191147-d10b9943ac71/go.mod h1:kOIIjzxuRXK31j1JdZgUAGjqbGwmJ5gU5qI+FMkP6/I= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 h1:FJAFgXS9oqASnkS03RE1HQwYQQxrO4l46O5JSzxqLgg= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10/go.mod h1:oiDa54M0FwxevWwyAX773lwdWvFYYlYHHQV1LQ5HpWY= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260519133128-43fabe4ea5a5 h1:vf+zfE99/z1nXasFJ5bGYaoo2hpWUeB4HgIvTmIqefQ= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260519133128-43fabe4ea5a5/go.mod h1:HmUyH2oD9m+GRpKq7q3vuRnm1F2Uczf/Nd1v3ipMSK8= github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20251222115927-36a18321243c h1:eX7SCn5AGUGduv5OrjbVJkUSOnyeal0BtVem6zBSB2Y= github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20251222115927-36a18321243c/go.mod h1:oyfOm4k0uqmgZIfxk1elI/59B02shbbJQiiUdPdbMgI= github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260505131349-78e491b80735 h1:5bxDnwI0wuPoC0H5H3H2n9CnQPb5iakR6UmAY4j8KUg= diff --git a/core/scripts/go.mod b/core/scripts/go.mod index 8021d4bd5de..65166ad5d2a 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -43,7 +43,7 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.100 github.com/smartcontractkit/chainlink-automation v0.8.1 github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260506144252-c100eabfda74 - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264 + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2 github.com/smartcontractkit/chainlink-common/keystore v1.1.0 github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f github.com/smartcontractkit/chainlink-deployments-framework v0.105.0 @@ -480,7 +480,7 @@ require ( github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260506144252-c100eabfda74 // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20260511195239-0f6e1b177fc7 // indirect github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd // indirect - github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260511200925-b94130438417 // indirect + github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2 // indirect github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 // indirect github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 // indirect github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20260423135514-5b1a7565a99c // indirect diff --git a/core/scripts/go.sum b/core/scripts/go.sum index da1be327d0d..fe206a06a8b 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -1577,12 +1577,12 @@ github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260504204047-af98 github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260504204047-af9826978b72/go.mod h1:Ls0oszLvhzV3/D0ivG85sh8qmmcsVhKplmepQdFq98E= github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd h1:IMopuENFVS63AerRELdfWo6o60UNUidcldJOxJLmk24= github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd/go.mod h1:SBN8Urnh5sQvrQRbSo1Nr8coWatHg8LZoPw3R/42sho= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264 h1:r4sH0uvOoSXegOQPVaMEsu27q1dfWplIwO4WvdcEtKM= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264/go.mod h1:B+eYJSQmOc28kzs7OwJjwo0DEV2f01HnUk89r9R1d/Y= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2 h1:Ne11+eg/uuVJ5duEfr4ec+1EoeZt/dHS9IFIGDdTr00= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2/go.mod h1:Pu4czYGiGRAJo+a1M3ZXY+wEyItMe9wtJCVp0pBgAzg= github.com/smartcontractkit/chainlink-common/keystore v1.1.0 h1:2wzySccgk2fpWusPKO0bpeAZzfSU9eq6CS5U+JwYaVo= github.com/smartcontractkit/chainlink-common/keystore v1.1.0/go.mod h1:6JexOOhPhknQ0QMuppFIlOpm6wCp54yZMxai+tWugwY= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260511200925-b94130438417 h1:y1lYPEpZZrb1PQwrOWBFvOnJnTmhxmbRo2HfyJ6CoLA= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260511200925-b94130438417/go.mod h1:S3pRAqlhLZGJWRFOV8AqHRfl3dluPHYRJ19ndJMhAH4= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2 h1:22H/CQy2L1unVJ2KEViEqvM8evJLSIqJxEdfDeXB4o8= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2/go.mod h1:HmUyH2oD9m+GRpKq7q3vuRnm1F2Uczf/Nd1v3ipMSK8= github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f h1:vLlkJ+RxLV/k3bl4JN6WZOvNdwweVQmwxs+xXWL68jw= github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f/go.mod h1:dF5JiHWueHjYguUUUrFeb03MkcDqha/tssEkqTkgzp4= github.com/smartcontractkit/chainlink-deployments-framework v0.105.0 h1:Vp4EwkvxcBzgahIZdbWyCExDXLha93cS63xvwd2xwx8= diff --git a/core/services/chainlink/config_telemetry.go b/core/services/chainlink/config_telemetry.go index 800d4204838..db6f70b806a 100644 --- a/core/services/chainlink/config_telemetry.go +++ b/core/services/chainlink/config_telemetry.go @@ -100,6 +100,13 @@ func (b *telemetryConfig) ChipIngressInsecureConnection() bool { return *b.s.ChipIngressInsecureConnection } +func (b *telemetryConfig) ChipIngressBatchEmitterEnabled() bool { + if b.s.ChipIngressBatchEmitterEnabled == nil { + return true + } + return *b.s.ChipIngressBatchEmitterEnabled +} + func (b *telemetryConfig) DurableEmitterEnabled() bool { if b.s.DurableEmitterEnabled == nil { return false diff --git a/core/services/chainlink/config_telemetry_test.go b/core/services/chainlink/config_telemetry_test.go index 6fbeabf2c62..5baf19de43c 100644 --- a/core/services/chainlink/config_telemetry_test.go +++ b/core/services/chainlink/config_telemetry_test.go @@ -218,6 +218,25 @@ func TestTelemetryConfig_ChipIngressInsecureConnection(t *testing.T) { } } +func TestTelemetryConfig_ChipIngressBatchEmitterEnabled(t *testing.T) { + tests := []struct { + name string + telemetry toml.Telemetry + expected bool + }{ + {"DefaultNil", toml.Telemetry{ChipIngressBatchEmitterEnabled: nil}, true}, + {"ExplicitTrue", toml.Telemetry{ChipIngressBatchEmitterEnabled: ptr(true)}, true}, + {"ExplicitFalse", toml.Telemetry{ChipIngressBatchEmitterEnabled: ptr(false)}, false}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tc := telemetryConfig{s: tt.telemetry} + assert.Equal(t, tt.expected, tc.ChipIngressBatchEmitterEnabled()) + }) + } +} + func ptrDuration(d time.Duration) *config.Duration { return config.MustNewDuration(d) } diff --git a/core/services/chainlink/config_test.go b/core/services/chainlink/config_test.go index 4da1ebca3c5..2da00e5f676 100644 --- a/core/services/chainlink/config_test.go +++ b/core/services/chainlink/config_test.go @@ -558,10 +558,11 @@ func TestConfig_Marshal(t *testing.T) { EmitterBatchProcessor: ptr(true), EmitterExportTimeout: commoncfg.MustNewDuration(1 * time.Second), AuthHeadersTTL: commoncfg.MustNewDuration(0 * time.Second), - ChipIngressEndpoint: ptr("example.com/chip-ingress"), - ChipIngressInsecureConnection: ptr(false), - DurableEmitterEnabled: ptr(false), - HeartbeatInterval: commoncfg.MustNewDuration(1 * time.Second), + ChipIngressEndpoint: ptr("example.com/chip-ingress"), + ChipIngressInsecureConnection: ptr(false), + ChipIngressBatchEmitterEnabled: ptr(true), + DurableEmitterEnabled: ptr(false), + HeartbeatInterval: commoncfg.MustNewDuration(1 * time.Second), LogStreamingEnabled: ptr(false), LogLevel: ptr("info"), LogBatchProcessor: ptr(true), diff --git a/core/services/chainlink/testdata/config-empty-effective.toml b/core/services/chainlink/testdata/config-empty-effective.toml index c75dc38c94e..a03b4fc4b84 100644 --- a/core/services/chainlink/testdata/config-empty-effective.toml +++ b/core/services/chainlink/testdata/config-empty-effective.toml @@ -347,6 +347,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = '' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/core/services/chainlink/testdata/config-full.toml b/core/services/chainlink/testdata/config-full.toml index 273a73aad49..61ade6e07ab 100644 --- a/core/services/chainlink/testdata/config-full.toml +++ b/core/services/chainlink/testdata/config-full.toml @@ -381,6 +381,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = 'example.com/chip-ingress' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/core/services/chainlink/testdata/config-multi-chain-effective.toml b/core/services/chainlink/testdata/config-multi-chain-effective.toml index c69e1b9e109..bd9aeff0a7c 100644 --- a/core/services/chainlink/testdata/config-multi-chain-effective.toml +++ b/core/services/chainlink/testdata/config-multi-chain-effective.toml @@ -347,6 +347,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = '' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/core/web/resolver/testdata/config-empty-effective.toml b/core/web/resolver/testdata/config-empty-effective.toml index c75dc38c94e..a03b4fc4b84 100644 --- a/core/web/resolver/testdata/config-empty-effective.toml +++ b/core/web/resolver/testdata/config-empty-effective.toml @@ -347,6 +347,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = '' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/core/web/resolver/testdata/config-full.toml b/core/web/resolver/testdata/config-full.toml index 60d7c83aa78..4c35572d5d7 100644 --- a/core/web/resolver/testdata/config-full.toml +++ b/core/web/resolver/testdata/config-full.toml @@ -360,6 +360,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = 'example.com/chip-ingress' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/core/web/resolver/testdata/config-multi-chain-effective.toml b/core/web/resolver/testdata/config-multi-chain-effective.toml index a7fea91832b..08c2258a07f 100644 --- a/core/web/resolver/testdata/config-multi-chain-effective.toml +++ b/core/web/resolver/testdata/config-multi-chain-effective.toml @@ -347,6 +347,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = '' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/deployment/go.mod b/deployment/go.mod index afc14b4d5c5..5a4930c5000 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -42,7 +42,7 @@ require ( github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20260511195239-0f6e1b177fc7 github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260504204047-af9826978b72 - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264 + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2 github.com/smartcontractkit/chainlink-common/keystore v1.1.0 github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f github.com/smartcontractkit/chainlink-deployments-framework v0.105.0 @@ -418,7 +418,7 @@ require ( github.com/smartcontractkit/chainlink-automation v0.8.1 // indirect github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd // indirect github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd // indirect - github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 // indirect + github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2 // indirect github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 // indirect github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20260423135514-5b1a7565a99c // indirect github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20260423135514-5b1a7565a99c // indirect diff --git a/deployment/go.sum b/deployment/go.sum index ea356dc3d8b..5f57d4cadb6 100644 --- a/deployment/go.sum +++ b/deployment/go.sum @@ -1378,12 +1378,12 @@ github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd h github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd/go.mod h1:SBN8Urnh5sQvrQRbSo1Nr8coWatHg8LZoPw3R/42sho= github.com/smartcontractkit/chainlink-ccv/deployment v0.0.2-0.20260428205321-9ce8f4c44d23 h1:1Rt4HLpwbRN1YtBFcbsxSJYIiUP2wJ11qizevOEeCrs= github.com/smartcontractkit/chainlink-ccv/deployment v0.0.2-0.20260428205321-9ce8f4c44d23/go.mod h1:V+wrhuNve+JiFwoBr25d6y0lL1rYSCSJhTFyloL3ueo= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264 h1:r4sH0uvOoSXegOQPVaMEsu27q1dfWplIwO4WvdcEtKM= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264/go.mod h1:B+eYJSQmOc28kzs7OwJjwo0DEV2f01HnUk89r9R1d/Y= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2 h1:Ne11+eg/uuVJ5duEfr4ec+1EoeZt/dHS9IFIGDdTr00= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2/go.mod h1:Pu4czYGiGRAJo+a1M3ZXY+wEyItMe9wtJCVp0pBgAzg= github.com/smartcontractkit/chainlink-common/keystore v1.1.0 h1:2wzySccgk2fpWusPKO0bpeAZzfSU9eq6CS5U+JwYaVo= github.com/smartcontractkit/chainlink-common/keystore v1.1.0/go.mod h1:6JexOOhPhknQ0QMuppFIlOpm6wCp54yZMxai+tWugwY= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 h1:FJAFgXS9oqASnkS03RE1HQwYQQxrO4l46O5JSzxqLgg= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10/go.mod h1:oiDa54M0FwxevWwyAX773lwdWvFYYlYHHQV1LQ5HpWY= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2 h1:22H/CQy2L1unVJ2KEViEqvM8evJLSIqJxEdfDeXB4o8= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2/go.mod h1:HmUyH2oD9m+GRpKq7q3vuRnm1F2Uczf/Nd1v3ipMSK8= github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f h1:vLlkJ+RxLV/k3bl4JN6WZOvNdwweVQmwxs+xXWL68jw= github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f/go.mod h1:dF5JiHWueHjYguUUUrFeb03MkcDqha/tssEkqTkgzp4= github.com/smartcontractkit/chainlink-deployments-framework v0.105.0 h1:Vp4EwkvxcBzgahIZdbWyCExDXLha93cS63xvwd2xwx8= diff --git a/devenv/go.mod b/devenv/go.mod index 948fac1e36f..867f50c8632 100644 --- a/devenv/go.mod +++ b/devenv/go.mod @@ -320,7 +320,7 @@ require ( github.com/shirou/gopsutil/v4 v4.26.4 // indirect github.com/sirupsen/logrus v1.9.4 // indirect github.com/smartcontractkit/chainlink-common/keystore v1.0.2 // indirect - github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 // indirect + github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260519133128-43fabe4ea5a5 // indirect github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20260423135514-5b1a7565a99c // indirect github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20260508154216-3ed6f623098f // indirect github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20260505202410-b350dca113b4 // indirect diff --git a/devenv/go.sum b/devenv/go.sum index 61e2c7c5db1..75555a3f4b7 100644 --- a/devenv/go.sum +++ b/devenv/go.sum @@ -1022,8 +1022,8 @@ github.com/smartcontractkit/chainlink-common v0.11.2-0.20260511200925-b941304384 github.com/smartcontractkit/chainlink-common v0.11.2-0.20260511200925-b94130438417/go.mod h1:4aOus1Q9vodwIg9964hjCfXXhSEdffEN3w7aP0xutgM= github.com/smartcontractkit/chainlink-common/keystore v1.0.2 h1:AWisx4JT3QV8tcgh6J5NCrex+wAgTYpWyHsyNPSXzsQ= github.com/smartcontractkit/chainlink-common/keystore v1.0.2/go.mod h1:rSkIHdomyak3YnUtXLenl6poIq8q0V3UZPiiyYqPdGA= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 h1:FJAFgXS9oqASnkS03RE1HQwYQQxrO4l46O5JSzxqLgg= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10/go.mod h1:oiDa54M0FwxevWwyAX773lwdWvFYYlYHHQV1LQ5HpWY= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260519133128-43fabe4ea5a5 h1:vf+zfE99/z1nXasFJ5bGYaoo2hpWUeB4HgIvTmIqefQ= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260519133128-43fabe4ea5a5/go.mod h1:HmUyH2oD9m+GRpKq7q3vuRnm1F2Uczf/Nd1v3ipMSK8= github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260519095745-ddfc812d06a0 h1:rPVMnAi1+tWZOo8jTHavu/PbmoKNVRrKYOfxzujDuss= github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260519095745-ddfc812d06a0/go.mod h1:ow+Q/Tl8iDgDFaMkQveJJWEL6odFZAmuYRUm/dwk26M= github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20251211123524-f0c4fe7cfc0a h1:kVKWRGrSCioMY2lEVIEblerv/KkINIQS2hLUOw2wKOg= diff --git a/docs/CONFIG.md b/docs/CONFIG.md index 65ca521a9bc..8b31704df71 100644 --- a/docs/CONFIG.md +++ b/docs/CONFIG.md @@ -2361,6 +2361,7 @@ EmitterExportTimeout = '1s' # Default AuthHeadersTTL = '0s' # Default ChipIngressEndpoint = '' # Default ChipIngressInsecureConnection = false # Default +ChipIngressBatchEmitterEnabled = true # Default DurableEmitterEnabled = false # Default HeartbeatInterval = '1s' # Default LogLevel = "info" # Default @@ -2438,6 +2439,13 @@ ChipIngressInsecureConnection = false # Default ``` ChipIngressInsecureConnection disables TLS when connecting to CHIP Ingress. +### ChipIngressBatchEmitterEnabled +```toml +ChipIngressBatchEmitterEnabled = true # Default +``` +ChipIngressBatchEmitterEnabled enables batching for chip-ingress events. +When false, events are sent individually (legacy behavior). + ### DurableEmitterEnabled ```toml DurableEmitterEnabled = false # Default diff --git a/go.mod b/go.mod index ac67e076fa6..a8eaf2e8fe7 100644 --- a/go.mod +++ b/go.mod @@ -84,9 +84,9 @@ require ( github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20260415165642-49f23e4d76cc github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264 + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2 github.com/smartcontractkit/chainlink-common/keystore v1.1.0 - github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 + github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2 github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260519153648-e22912dab374 github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 diff --git a/go.sum b/go.sum index e9720c8f900..81c1543505a 100644 --- a/go.sum +++ b/go.sum @@ -1177,12 +1177,12 @@ github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20260 github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:67YbnoglYD61Pz/jTVCgav9wFq7S35OU8UyQSvPllRw= github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd h1:IMopuENFVS63AerRELdfWo6o60UNUidcldJOxJLmk24= github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd/go.mod h1:SBN8Urnh5sQvrQRbSo1Nr8coWatHg8LZoPw3R/42sho= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264 h1:r4sH0uvOoSXegOQPVaMEsu27q1dfWplIwO4WvdcEtKM= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264/go.mod h1:B+eYJSQmOc28kzs7OwJjwo0DEV2f01HnUk89r9R1d/Y= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2 h1:Ne11+eg/uuVJ5duEfr4ec+1EoeZt/dHS9IFIGDdTr00= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2/go.mod h1:Pu4czYGiGRAJo+a1M3ZXY+wEyItMe9wtJCVp0pBgAzg= github.com/smartcontractkit/chainlink-common/keystore v1.1.0 h1:2wzySccgk2fpWusPKO0bpeAZzfSU9eq6CS5U+JwYaVo= github.com/smartcontractkit/chainlink-common/keystore v1.1.0/go.mod h1:6JexOOhPhknQ0QMuppFIlOpm6wCp54yZMxai+tWugwY= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 h1:FJAFgXS9oqASnkS03RE1HQwYQQxrO4l46O5JSzxqLgg= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10/go.mod h1:oiDa54M0FwxevWwyAX773lwdWvFYYlYHHQV1LQ5HpWY= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2 h1:22H/CQy2L1unVJ2KEViEqvM8evJLSIqJxEdfDeXB4o8= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2/go.mod h1:HmUyH2oD9m+GRpKq7q3vuRnm1F2Uczf/Nd1v3ipMSK8= github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f h1:vLlkJ+RxLV/k3bl4JN6WZOvNdwweVQmwxs+xXWL68jw= github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f/go.mod h1:dF5JiHWueHjYguUUUrFeb03MkcDqha/tssEkqTkgzp4= github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260519153648-e22912dab374 h1:dWBveDfyBhtLJNaSAVJdHyYSEtTdxmAueMet2XFBHF0= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 9f805cafa71..ccdc67ebbf3 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -29,7 +29,7 @@ require ( github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260506144252-c100eabfda74 github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260506144252-c100eabfda74 github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20260511195239-0f6e1b177fc7 - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264 + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2 github.com/smartcontractkit/chainlink-common/keystore v1.1.0 github.com/smartcontractkit/chainlink-deployments-framework v0.105.0 github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260519153648-e22912dab374 @@ -394,7 +394,7 @@ require ( github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd // indirect github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260504204047-af9826978b72 // indirect github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd // indirect - github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 // indirect + github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2 // indirect github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f // indirect github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 // indirect github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index ea2aa840557..f5677da5559 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -1363,12 +1363,12 @@ github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd h github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd/go.mod h1:SBN8Urnh5sQvrQRbSo1Nr8coWatHg8LZoPw3R/42sho= github.com/smartcontractkit/chainlink-ccv/deployment v0.0.2-0.20260428205321-9ce8f4c44d23 h1:1Rt4HLpwbRN1YtBFcbsxSJYIiUP2wJ11qizevOEeCrs= github.com/smartcontractkit/chainlink-ccv/deployment v0.0.2-0.20260428205321-9ce8f4c44d23/go.mod h1:V+wrhuNve+JiFwoBr25d6y0lL1rYSCSJhTFyloL3ueo= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264 h1:r4sH0uvOoSXegOQPVaMEsu27q1dfWplIwO4WvdcEtKM= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264/go.mod h1:B+eYJSQmOc28kzs7OwJjwo0DEV2f01HnUk89r9R1d/Y= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2 h1:Ne11+eg/uuVJ5duEfr4ec+1EoeZt/dHS9IFIGDdTr00= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2/go.mod h1:Pu4czYGiGRAJo+a1M3ZXY+wEyItMe9wtJCVp0pBgAzg= github.com/smartcontractkit/chainlink-common/keystore v1.1.0 h1:2wzySccgk2fpWusPKO0bpeAZzfSU9eq6CS5U+JwYaVo= github.com/smartcontractkit/chainlink-common/keystore v1.1.0/go.mod h1:6JexOOhPhknQ0QMuppFIlOpm6wCp54yZMxai+tWugwY= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 h1:FJAFgXS9oqASnkS03RE1HQwYQQxrO4l46O5JSzxqLgg= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10/go.mod h1:oiDa54M0FwxevWwyAX773lwdWvFYYlYHHQV1LQ5HpWY= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2 h1:22H/CQy2L1unVJ2KEViEqvM8evJLSIqJxEdfDeXB4o8= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2/go.mod h1:HmUyH2oD9m+GRpKq7q3vuRnm1F2Uczf/Nd1v3ipMSK8= github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f h1:vLlkJ+RxLV/k3bl4JN6WZOvNdwweVQmwxs+xXWL68jw= github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f/go.mod h1:dF5JiHWueHjYguUUUrFeb03MkcDqha/tssEkqTkgzp4= github.com/smartcontractkit/chainlink-deployments-framework v0.105.0 h1:Vp4EwkvxcBzgahIZdbWyCExDXLha93cS63xvwd2xwx8= diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index 89a897ce4af..f14aa8ede60 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -20,7 +20,7 @@ require ( github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260506144252-c100eabfda74 github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260506144252-c100eabfda74 github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20260511195239-0f6e1b177fc7 - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264 + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2 github.com/smartcontractkit/chainlink-deployments-framework v0.105.0 github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260519153648-e22912dab374 github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.1 @@ -475,7 +475,7 @@ require ( github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260504204047-af9826978b72 // indirect github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd // indirect github.com/smartcontractkit/chainlink-common/keystore v1.1.0 // indirect - github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 // indirect + github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2 // indirect github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f // indirect github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 // indirect github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20260512150409-b4068bf735e6 // indirect diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index 935afa963c0..f0c29f974cb 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -1629,12 +1629,12 @@ github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd h github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd/go.mod h1:SBN8Urnh5sQvrQRbSo1Nr8coWatHg8LZoPw3R/42sho= github.com/smartcontractkit/chainlink-ccv/deployment v0.0.2-0.20260428205321-9ce8f4c44d23 h1:1Rt4HLpwbRN1YtBFcbsxSJYIiUP2wJ11qizevOEeCrs= github.com/smartcontractkit/chainlink-ccv/deployment v0.0.2-0.20260428205321-9ce8f4c44d23/go.mod h1:V+wrhuNve+JiFwoBr25d6y0lL1rYSCSJhTFyloL3ueo= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264 h1:r4sH0uvOoSXegOQPVaMEsu27q1dfWplIwO4WvdcEtKM= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264/go.mod h1:B+eYJSQmOc28kzs7OwJjwo0DEV2f01HnUk89r9R1d/Y= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2 h1:Ne11+eg/uuVJ5duEfr4ec+1EoeZt/dHS9IFIGDdTr00= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2/go.mod h1:Pu4czYGiGRAJo+a1M3ZXY+wEyItMe9wtJCVp0pBgAzg= github.com/smartcontractkit/chainlink-common/keystore v1.1.0 h1:2wzySccgk2fpWusPKO0bpeAZzfSU9eq6CS5U+JwYaVo= github.com/smartcontractkit/chainlink-common/keystore v1.1.0/go.mod h1:6JexOOhPhknQ0QMuppFIlOpm6wCp54yZMxai+tWugwY= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 h1:FJAFgXS9oqASnkS03RE1HQwYQQxrO4l46O5JSzxqLgg= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10/go.mod h1:oiDa54M0FwxevWwyAX773lwdWvFYYlYHHQV1LQ5HpWY= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2 h1:22H/CQy2L1unVJ2KEViEqvM8evJLSIqJxEdfDeXB4o8= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2/go.mod h1:HmUyH2oD9m+GRpKq7q3vuRnm1F2Uczf/Nd1v3ipMSK8= github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f h1:vLlkJ+RxLV/k3bl4JN6WZOvNdwweVQmwxs+xXWL68jw= github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f/go.mod h1:dF5JiHWueHjYguUUUrFeb03MkcDqha/tssEkqTkgzp4= github.com/smartcontractkit/chainlink-deployments-framework v0.105.0 h1:Vp4EwkvxcBzgahIZdbWyCExDXLha93cS63xvwd2xwx8= diff --git a/plugins/loop_registry.go b/plugins/loop_registry.go index 5727b399426..0875239411a 100644 --- a/plugins/loop_registry.go +++ b/plugins/loop_registry.go @@ -153,6 +153,7 @@ func (m *LoopRegistry) Register(id string) (*RegisteredLoop, error) { envCfg.TelemetryAuthPubKeyHex = m.telemetryAuthPubKeyHex envCfg.ChipIngressEndpoint = m.cfgTelemetry.ChipIngressEndpoint() envCfg.ChipIngressInsecureConnection = m.cfgTelemetry.ChipIngressInsecureConnection() + envCfg.ChipIngressBatchEmitterEnabled = m.cfgTelemetry.ChipIngressBatchEmitterEnabled() envCfg.TelemetryLogStreamingEnabled = m.cfgTelemetry.LogStreamingEnabled() envCfg.TelemetryLogLevel = m.cfgTelemetry.LogLevel() envCfg.TelemetryLogBatchProcessor = m.cfgTelemetry.LogBatchProcessor() diff --git a/plugins/loop_registry_test.go b/plugins/loop_registry_test.go index a99b9726983..ea7aef3b7f8 100644 --- a/plugins/loop_registry_test.go +++ b/plugins/loop_registry_test.go @@ -74,6 +74,8 @@ func (m mockCfgTelemetry) DurableEmitterEnabled() bool { return true } func (m mockCfgTelemetry) ChipIngressInsecureConnection() bool { return false } +func (m mockCfgTelemetry) ChipIngressBatchEmitterEnabled() bool { return false } + func (m mockCfgTelemetry) HeartbeatInterval() time.Duration { return 5 * time.Second } @@ -240,4 +242,5 @@ func TestLoopRegistry_Register(t *testing.T) { require.Equal(t, 2048, envCfg.TelemetryLogMaxQueueSize) require.Equal(t, "example.com/chip-ingress", envCfg.ChipIngressEndpoint) + require.False(t, envCfg.ChipIngressBatchEmitterEnabled) } diff --git a/system-tests/lib/go.mod b/system-tests/lib/go.mod index 789f3b531f6..c7fb6ac1ae2 100644 --- a/system-tests/lib/go.mod +++ b/system-tests/lib/go.mod @@ -33,7 +33,7 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.100 github.com/smartcontractkit/chainlink-aptos v0.0.0-20260507123701-77fc93b573bb github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264 + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2 github.com/smartcontractkit/chainlink-common/keystore v1.1.0 github.com/smartcontractkit/chainlink-deployments-framework v0.105.0 github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260519153648-e22912dab374 @@ -446,7 +446,7 @@ require ( github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260506144252-c100eabfda74 // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20260511195239-0f6e1b177fc7 // indirect github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd // indirect - github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20251211140724-319861e514c4 // indirect + github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2 // indirect github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f // indirect github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 // indirect github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 // indirect diff --git a/system-tests/lib/go.sum b/system-tests/lib/go.sum index 9de07ef2a1a..e320c771ddb 100644 --- a/system-tests/lib/go.sum +++ b/system-tests/lib/go.sum @@ -1544,12 +1544,12 @@ github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260504204047-af98 github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260504204047-af9826978b72/go.mod h1:Ls0oszLvhzV3/D0ivG85sh8qmmcsVhKplmepQdFq98E= github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd h1:IMopuENFVS63AerRELdfWo6o60UNUidcldJOxJLmk24= github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd/go.mod h1:SBN8Urnh5sQvrQRbSo1Nr8coWatHg8LZoPw3R/42sho= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264 h1:r4sH0uvOoSXegOQPVaMEsu27q1dfWplIwO4WvdcEtKM= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264/go.mod h1:B+eYJSQmOc28kzs7OwJjwo0DEV2f01HnUk89r9R1d/Y= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2 h1:Ne11+eg/uuVJ5duEfr4ec+1EoeZt/dHS9IFIGDdTr00= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2/go.mod h1:Pu4czYGiGRAJo+a1M3ZXY+wEyItMe9wtJCVp0pBgAzg= github.com/smartcontractkit/chainlink-common/keystore v1.1.0 h1:2wzySccgk2fpWusPKO0bpeAZzfSU9eq6CS5U+JwYaVo= github.com/smartcontractkit/chainlink-common/keystore v1.1.0/go.mod h1:6JexOOhPhknQ0QMuppFIlOpm6wCp54yZMxai+tWugwY= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20251211140724-319861e514c4 h1:NOUsjsMzNecbjiPWUQGlRSRAutEvCFrqqyETDJeh5q4= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20251211140724-319861e514c4/go.mod h1:Zpvul9sTcZNAZOVzt5vBl1XZGNvQebFpnpn3/KOQvOQ= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2 h1:22H/CQy2L1unVJ2KEViEqvM8evJLSIqJxEdfDeXB4o8= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2/go.mod h1:HmUyH2oD9m+GRpKq7q3vuRnm1F2Uczf/Nd1v3ipMSK8= github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f h1:vLlkJ+RxLV/k3bl4JN6WZOvNdwweVQmwxs+xXWL68jw= github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f/go.mod h1:dF5JiHWueHjYguUUUrFeb03MkcDqha/tssEkqTkgzp4= github.com/smartcontractkit/chainlink-deployments-framework v0.105.0 h1:Vp4EwkvxcBzgahIZdbWyCExDXLha93cS63xvwd2xwx8= diff --git a/system-tests/tests/canaries_sentinels/proof-of-reserve/cron-based/go.mod b/system-tests/tests/canaries_sentinels/proof-of-reserve/cron-based/go.mod index 408d4b4a296..ab54a27bc0a 100644 --- a/system-tests/tests/canaries_sentinels/proof-of-reserve/cron-based/go.mod +++ b/system-tests/tests/canaries_sentinels/proof-of-reserve/cron-based/go.mod @@ -54,7 +54,7 @@ require ( github.com/prometheus/procfs v0.16.1 // indirect github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 // indirect + github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260519133128-43fabe4ea5a5 // indirect github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260505131349-78e491b80735 // indirect github.com/smartcontractkit/libocr v0.0.0-20260403184524-b6409238958d // indirect github.com/stretchr/testify v1.11.1 // indirect diff --git a/system-tests/tests/canaries_sentinels/proof-of-reserve/cron-based/go.sum b/system-tests/tests/canaries_sentinels/proof-of-reserve/cron-based/go.sum index a284089c325..286b44f24a7 100644 --- a/system-tests/tests/canaries_sentinels/proof-of-reserve/cron-based/go.sum +++ b/system-tests/tests/canaries_sentinels/proof-of-reserve/cron-based/go.sum @@ -104,8 +104,8 @@ github.com/smartcontractkit/chain-selectors v1.0.98 h1:fuI7CQ1o5cX64eO4/Lvwtfhdp github.com/smartcontractkit/chain-selectors v1.0.98/go.mod h1:qy7whtgG5g+7z0jt0nRyii9bLND9m15NZTzuQPkMZ5w= github.com/smartcontractkit/chainlink-common v0.11.2-0.20260421191147-d10b9943ac71 h1:WSNUds78NMlwDttROK/hJZ6ZOremyrR5JXJmPlT8hO8= github.com/smartcontractkit/chainlink-common v0.11.2-0.20260421191147-d10b9943ac71/go.mod h1:kOIIjzxuRXK31j1JdZgUAGjqbGwmJ5gU5qI+FMkP6/I= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 h1:FJAFgXS9oqASnkS03RE1HQwYQQxrO4l46O5JSzxqLgg= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10/go.mod h1:oiDa54M0FwxevWwyAX773lwdWvFYYlYHHQV1LQ5HpWY= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260519133128-43fabe4ea5a5 h1:vf+zfE99/z1nXasFJ5bGYaoo2hpWUeB4HgIvTmIqefQ= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260519133128-43fabe4ea5a5/go.mod h1:HmUyH2oD9m+GRpKq7q3vuRnm1F2Uczf/Nd1v3ipMSK8= github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250806152407-159881c7589c h1:QaImySzrLcGzQc4wCF2yDqqb73jA3+9EIqybgx8zT4w= github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250806152407-159881c7589c/go.mod h1:U1UAbPhy6D7Qz0wHKGPoQO+dpR0hsYjgUz8xwRrmKwI= github.com/smartcontractkit/chainlink-common/pkg/workflows/sdk/v2/pb v0.0.0-20250806155403-1d805e639a0f h1:mnnlyMH5LgJRAzx/4mW2R+sbK1Acpfs3q0EokeAX5RI= diff --git a/system-tests/tests/go.mod b/system-tests/tests/go.mod index bfd1feae822..3214debbb73 100644 --- a/system-tests/tests/go.mod +++ b/system-tests/tests/go.mod @@ -55,7 +55,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/rs/zerolog v1.34.0 github.com/smartcontractkit/chain-selectors v1.0.100 - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264 + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2 github.com/smartcontractkit/chainlink-common/keystore v1.1.0 github.com/smartcontractkit/chainlink-deployments-framework v0.105.0 github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 @@ -510,7 +510,7 @@ require ( github.com/smartcontractkit/chainlink-aptos v0.0.0-20260507123701-77fc93b573bb github.com/smartcontractkit/chainlink-automation v0.8.1 // indirect github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260428205619-2db1389501a1 // indirect - github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20251211140724-319861e514c4 + github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2 github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260519153648-e22912dab374 // indirect github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 // indirect github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20260423135514-5b1a7565a99c // indirect diff --git a/system-tests/tests/go.sum b/system-tests/tests/go.sum index b58108d1d30..01851e57dac 100644 --- a/system-tests/tests/go.sum +++ b/system-tests/tests/go.sum @@ -1558,12 +1558,12 @@ github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260504204047-af98 github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260504204047-af9826978b72/go.mod h1:Ls0oszLvhzV3/D0ivG85sh8qmmcsVhKplmepQdFq98E= github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd h1:IMopuENFVS63AerRELdfWo6o60UNUidcldJOxJLmk24= github.com/smartcontractkit/chainlink-ccv v0.0.2-0.20260428133800-3b1484e8b1fd/go.mod h1:SBN8Urnh5sQvrQRbSo1Nr8coWatHg8LZoPw3R/42sho= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264 h1:r4sH0uvOoSXegOQPVaMEsu27q1dfWplIwO4WvdcEtKM= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260518100439-9564f35fd264/go.mod h1:B+eYJSQmOc28kzs7OwJjwo0DEV2f01HnUk89r9R1d/Y= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2 h1:Ne11+eg/uuVJ5duEfr4ec+1EoeZt/dHS9IFIGDdTr00= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260520194751-11a4f360f4e2/go.mod h1:Pu4czYGiGRAJo+a1M3ZXY+wEyItMe9wtJCVp0pBgAzg= github.com/smartcontractkit/chainlink-common/keystore v1.1.0 h1:2wzySccgk2fpWusPKO0bpeAZzfSU9eq6CS5U+JwYaVo= github.com/smartcontractkit/chainlink-common/keystore v1.1.0/go.mod h1:6JexOOhPhknQ0QMuppFIlOpm6wCp54yZMxai+tWugwY= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20251211140724-319861e514c4 h1:NOUsjsMzNecbjiPWUQGlRSRAutEvCFrqqyETDJeh5q4= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20251211140724-319861e514c4/go.mod h1:Zpvul9sTcZNAZOVzt5vBl1XZGNvQebFpnpn3/KOQvOQ= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2 h1:22H/CQy2L1unVJ2KEViEqvM8evJLSIqJxEdfDeXB4o8= +github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260520194751-11a4f360f4e2/go.mod h1:HmUyH2oD9m+GRpKq7q3vuRnm1F2Uczf/Nd1v3ipMSK8= github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f h1:vLlkJ+RxLV/k3bl4JN6WZOvNdwweVQmwxs+xXWL68jw= github.com/smartcontractkit/chainlink-data-streams v0.1.15-0.20260520173048-0333bc7b082f/go.mod h1:dF5JiHWueHjYguUUUrFeb03MkcDqha/tssEkqTkgzp4= github.com/smartcontractkit/chainlink-deployments-framework v0.105.0 h1:Vp4EwkvxcBzgahIZdbWyCExDXLha93cS63xvwd2xwx8= diff --git a/system-tests/tests/test-helpers/chip-testsink/server.go b/system-tests/tests/test-helpers/chip-testsink/server.go index 8360bc92074..092c7173496 100644 --- a/system-tests/tests/test-helpers/chip-testsink/server.go +++ b/system-tests/tests/test-helpers/chip-testsink/server.go @@ -124,6 +124,7 @@ func (s *Server) Publish(ctx context.Context, event *pb.CloudEvent) (*chippb.Pub return s.cfg.PublishFunc(ctx, event) } +// PublishBatch implements chippb.ChipIngressServer.PublishBatch. func (s *Server) PublishBatch(ctx context.Context, batch *chippb.CloudEventBatch) (*chippb.PublishResponse, error) { if batch == nil || len(batch.Events) == 0 { return &chippb.PublishResponse{}, nil @@ -144,7 +145,7 @@ func (s *Server) PublishBatch(ctx context.Context, batch *chippb.CloudEventBatch for _, event := range batch.Events { if _, err := s.cfg.PublishFunc(ctx, event); err != nil { - return nil, err + return nil, fmt.Errorf("publish batch: event %s: %w", event.GetId(), err) } } diff --git a/testdata/scripts/config/merge_raw_configs.txtar b/testdata/scripts/config/merge_raw_configs.txtar index 0cab9e36884..324b7cc325c 100644 --- a/testdata/scripts/config/merge_raw_configs.txtar +++ b/testdata/scripts/config/merge_raw_configs.txtar @@ -494,6 +494,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = '' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/testdata/scripts/node/validate/default.txtar b/testdata/scripts/node/validate/default.txtar index 417995f876b..aabe061d79f 100644 --- a/testdata/scripts/node/validate/default.txtar +++ b/testdata/scripts/node/validate/default.txtar @@ -359,6 +359,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = '' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/testdata/scripts/node/validate/defaults-override.txtar b/testdata/scripts/node/validate/defaults-override.txtar index 0ee74121954..898903102a6 100644 --- a/testdata/scripts/node/validate/defaults-override.txtar +++ b/testdata/scripts/node/validate/defaults-override.txtar @@ -420,6 +420,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = '' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/testdata/scripts/node/validate/disk-based-logging-disabled.txtar b/testdata/scripts/node/validate/disk-based-logging-disabled.txtar index 5ff1040b2c8..5bde7b0cd2c 100644 --- a/testdata/scripts/node/validate/disk-based-logging-disabled.txtar +++ b/testdata/scripts/node/validate/disk-based-logging-disabled.txtar @@ -403,6 +403,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = '' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar b/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar index eb0428b98c3..8bda909fd1d 100644 --- a/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar +++ b/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar @@ -403,6 +403,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = '' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/testdata/scripts/node/validate/disk-based-logging.txtar b/testdata/scripts/node/validate/disk-based-logging.txtar index 30690418df7..aa33e246032 100644 --- a/testdata/scripts/node/validate/disk-based-logging.txtar +++ b/testdata/scripts/node/validate/disk-based-logging.txtar @@ -403,6 +403,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = '' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/testdata/scripts/node/validate/fallback-override.txtar b/testdata/scripts/node/validate/fallback-override.txtar index 348685a9cb2..6fc727ea884 100644 --- a/testdata/scripts/node/validate/fallback-override.txtar +++ b/testdata/scripts/node/validate/fallback-override.txtar @@ -503,6 +503,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = '' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/testdata/scripts/node/validate/invalid-ocr-p2p.txtar b/testdata/scripts/node/validate/invalid-ocr-p2p.txtar index 0afed58bfb4..76c71751e9c 100644 --- a/testdata/scripts/node/validate/invalid-ocr-p2p.txtar +++ b/testdata/scripts/node/validate/invalid-ocr-p2p.txtar @@ -388,6 +388,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = '' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/testdata/scripts/node/validate/invalid.txtar b/testdata/scripts/node/validate/invalid.txtar index b7dbb2e63f5..95dd556212e 100644 --- a/testdata/scripts/node/validate/invalid.txtar +++ b/testdata/scripts/node/validate/invalid.txtar @@ -399,6 +399,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = '' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/testdata/scripts/node/validate/valid.txtar b/testdata/scripts/node/validate/valid.txtar index b79ec35e444..5cbff84e5f3 100644 --- a/testdata/scripts/node/validate/valid.txtar +++ b/testdata/scripts/node/validate/valid.txtar @@ -400,6 +400,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = '' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info' diff --git a/testdata/scripts/node/validate/warnings.txtar b/testdata/scripts/node/validate/warnings.txtar index 06394ea59ef..4bb114cee42 100644 --- a/testdata/scripts/node/validate/warnings.txtar +++ b/testdata/scripts/node/validate/warnings.txtar @@ -382,6 +382,7 @@ EmitterExportTimeout = '1s' AuthHeadersTTL = '0s' ChipIngressEndpoint = '' ChipIngressInsecureConnection = false +ChipIngressBatchEmitterEnabled = true DurableEmitterEnabled = false HeartbeatInterval = '1s' LogLevel = 'info'