From 02982e328bce2180b408f3e9db30d57c8c3cb6bc Mon Sep 17 00:00:00 2001 From: Ryan Tinianov Date: Wed, 25 Sep 2024 11:36:19 -0400 Subject: [PATCH 1/3] Add wasm spec factory (#14458) * Add wasm spec factory * Fix workflow tests * Fix and test spec validation for non-YAML specs * Revert use of logger in validate * tidy and reorder inputs * brotli the WASM so it's smaller for the sdk to pass around * Fix so sum is always based on wasm not encoded value * Fix typo and lint imports in wasm file spec factory * Fix sha sum on wasm * Fix go mod merge conflict :( * Fix lint and remove local hack for go version... --- .gitignore | 1 + core/scripts/go.mod | 2 + core/scripts/go.sum | 4 + core/services/job/models.go | 19 ++-- core/services/job/models_test.go | 37 ++++-- .../job/testdata/wasm/test_workflow_spec.go | 33 ++++++ core/services/job/wasm_file_spec_factory.go | 90 +++++++++++++++ .../job/wasm_file_spec_factory_test.go | 56 +++++++++ core/services/job/workflow_spec_factory.go | 45 ++------ .../job/workflow_spec_factory_test.go | 106 ------------------ core/services/job/yaml_spec_factory.go | 15 +-- core/services/job/yaml_spec_factory_test.go | 15 +-- core/services/workflows/delegate.go | 4 +- core/services/workflows/engine_test.go | 2 +- core/services/workflows/models_test.go | 5 +- go.mod | 2 + go.sum | 4 + integration-tests/go.mod | 2 + integration-tests/go.sum | 4 + integration-tests/load/go.mod | 2 + integration-tests/load/go.sum | 4 + 21 files changed, 272 insertions(+), 180 deletions(-) create mode 100644 core/services/job/testdata/wasm/test_workflow_spec.go create mode 100644 core/services/job/wasm_file_spec_factory.go create mode 100644 core/services/job/wasm_file_spec_factory_test.go delete mode 100644 core/services/job/workflow_spec_factory_test.go diff --git a/.gitignore b/.gitignore index 4c4e76bee98..a843d7b8773 100644 --- a/.gitignore +++ b/.gitignore @@ -52,6 +52,7 @@ race.* golangci-lint-output.txt /golangci-lint/ .covdata +core/services/job/testdata/wasm/testmodule.wasm # DB state ./db/ diff --git a/core/scripts/go.mod b/core/scripts/go.mod index 81501034ce4..f86d91ecab1 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -59,6 +59,7 @@ require ( github.com/NethermindEth/starknet.go v0.7.1-0.20240401080518-34a506f3cfdb // indirect github.com/VictoriaMetrics/fastcache v1.12.1 // indirect github.com/XSAM/otelsql v0.27.0 // indirect + github.com/andybalholm/brotli v1.1.0 // indirect github.com/armon/go-metrics v0.4.1 // indirect github.com/avast/retry-go/v4 v4.6.0 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect @@ -70,6 +71,7 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/btcsuite/btcd/btcutil v1.1.3 // indirect github.com/buger/jsonparser v1.1.1 // indirect + github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 // indirect github.com/bytedance/sonic v1.10.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect diff --git a/core/scripts/go.sum b/core/scripts/go.sum index 08f3fb2b764..8569a9ac200 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -115,6 +115,8 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= +github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= +github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/appleboy/gofight/v2 v2.1.2 h1:VOy3jow4vIK8BRQJoC/I9muxyYlJ2yb9ht2hZoS3rf4= github.com/appleboy/gofight/v2 v2.1.2/go.mod h1:frW+U1QZEdDgixycTj4CygQ48yLTUhplt43+Wczp3rw= @@ -178,6 +180,8 @@ github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZ github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 h1:NJvU4S8KEk1GnF6+FvlnzMD/8wXTj/mYJSG6Q4yu3Pw= +github.com/bytecodealliance/wasmtime-go/v23 v23.0.0/go.mod h1:5YIL+Ouiww2zpO7u+iZ1U1G5NvmwQYaXdmCZQGjQM0U= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= github.com/bytedance/sonic v1.10.1 h1:7a1wuFXL1cMy7a3f7/VFcEtriuXQnUBhtoVfOZiaysc= diff --git a/core/services/job/models.go b/core/services/job/models.go index b9ec8e726f4..90408df6c41 100644 --- a/core/services/job/models.go +++ b/core/services/job/models.go @@ -19,8 +19,8 @@ import ( commonassets "github.com/smartcontractkit/chainlink-common/pkg/assets" "github.com/smartcontractkit/chainlink-common/pkg/types" - pkgworkflows "github.com/smartcontractkit/chainlink-common/pkg/workflows" + "github.com/smartcontractkit/chainlink/v2/core/logger" "github.com/smartcontractkit/chainlink/v2/core/services/relay" "github.com/smartcontractkit/chainlink/v2/core/bridges" @@ -865,7 +865,8 @@ type WorkflowSpecType string const ( YamlSpec WorkflowSpecType = "yaml" - DefaultSpecType = YamlSpec + WASMFile WorkflowSpecType = "wasm_file" + DefaultSpecType = "" ) type WorkflowSpec struct { @@ -894,12 +895,8 @@ const ( // Validate checks the workflow spec for correctness func (w *WorkflowSpec) Validate(ctx context.Context) error { - s, err := pkgworkflows.ParseWorkflowSpecYaml(w.Workflow) + s, err := w.SDKSpec(ctx, logger.NullLogger) if err != nil { - return fmt.Errorf("%w: failed to parse workflow spec %s: %w", ErrInvalidWorkflowYAMLSpec, w.Workflow, err) - } - - if _, err = w.SDKSpec(ctx); err != nil { return err } @@ -913,12 +910,16 @@ func (w *WorkflowSpec) Validate(ctx context.Context) error { return nil } -func (w *WorkflowSpec) SDKSpec(ctx context.Context) (sdk.WorkflowSpec, error) { +func (w *WorkflowSpec) SDKSpec(ctx context.Context, lggr logger.Logger) (sdk.WorkflowSpec, error) { if w.sdkWorkflow != nil { return *w.sdkWorkflow, nil } - spec, cid, err := workflowSpecFactory.Spec(ctx, w.Workflow, []byte(w.Config), w.SpecType) + workflowSpecFactory, ok := workflowSpecFactories[w.SpecType] + if !ok { + return sdk.WorkflowSpec{}, fmt.Errorf("unknown spec type %s", w.SpecType) + } + spec, cid, err := workflowSpecFactory.Spec(ctx, lggr, w.Workflow, []byte(w.Config)) if err != nil { return sdk.WorkflowSpec{}, err } diff --git a/core/services/job/models_test.go b/core/services/job/models_test.go index 49bd29c9959..02aaff79317 100644 --- a/core/services/job/models_test.go +++ b/core/services/job/models_test.go @@ -1,7 +1,8 @@ -package job +package job_test import ( _ "embed" + "encoding/json" "reflect" "testing" "time" @@ -11,8 +12,10 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/codec" "github.com/smartcontractkit/chainlink-common/pkg/types" pkgworkflows "github.com/smartcontractkit/chainlink-common/pkg/workflows" + "github.com/smartcontractkit/chainlink-common/pkg/workflows/sdk" "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" + "github.com/smartcontractkit/chainlink/v2/core/services/job" "github.com/smartcontractkit/chainlink/v2/core/services/relay" "github.com/stretchr/testify/assert" @@ -27,7 +30,7 @@ func TestOCR2OracleSpec_RelayIdentifier(t *testing.T) { type fields struct { Relay string ChainID string - RelayConfig JSONConfig + RelayConfig job.JSONConfig } tests := []struct { name string @@ -71,7 +74,7 @@ func TestOCR2OracleSpec_RelayIdentifier(t *testing.T) { t.Run(tt.name, func(t *testing.T) { t.Parallel() - s := &OCR2OracleSpec{ + s := &job.OCR2OracleSpec{ Relay: tt.fields.Relay, ChainID: tt.fields.ChainID, RelayConfig: tt.fields.RelayConfig, @@ -96,7 +99,7 @@ var ( ) func TestOCR2OracleSpec(t *testing.T) { - val := OCR2OracleSpec{ + val := job.OCR2OracleSpec{ Relay: relay.NetworkEVM, PluginType: types.Median, ContractID: "foo", @@ -259,13 +262,13 @@ func TestOCR2OracleSpec(t *testing.T) { }) t.Run("round-trip", func(t *testing.T) { - var gotVal OCR2OracleSpec + var gotVal job.OCR2OracleSpec require.NoError(t, toml.Unmarshal([]byte(compact), &gotVal)) gotB, err := toml.Marshal(gotVal) require.NoError(t, err) require.Equal(t, compact, string(gotB)) t.Run("pretty", func(t *testing.T) { - var gotVal OCR2OracleSpec + var gotVal job.OCR2OracleSpec require.NoError(t, toml.Unmarshal([]byte(pretty), &gotVal)) gotB, err := toml.Marshal(gotVal) require.NoError(t, err) @@ -321,7 +324,7 @@ func TestWorkflowSpec_Validate(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - w := &WorkflowSpec{ + w := &job.WorkflowSpec{ Workflow: tt.fields.Workflow, } err := w.Validate(testutils.Context(t)) @@ -333,4 +336,24 @@ func TestWorkflowSpec_Validate(t *testing.T) { } }) } + + t.Run("WASM can validate", func(t *testing.T) { + config, err := json.Marshal(sdk.NewWorkflowParams{ + Owner: "owner", + Name: "name", + }) + require.NoError(t, err) + + w := &job.WorkflowSpec{ + Workflow: createTestBinary(t), + SpecType: job.WASMFile, + Config: string(config), + } + + err = w.Validate(testutils.Context(t)) + require.NoError(t, err) + assert.Equal(t, "owner", w.WorkflowOwner) + assert.Equal(t, "name", w.WorkflowName) + require.NotEmpty(t, w.WorkflowID) + }) } diff --git a/core/services/job/testdata/wasm/test_workflow_spec.go b/core/services/job/testdata/wasm/test_workflow_spec.go new file mode 100644 index 00000000000..40b9c0bbb67 --- /dev/null +++ b/core/services/job/testdata/wasm/test_workflow_spec.go @@ -0,0 +1,33 @@ +//go:build wasip1 + +package main + +import ( + "encoding/json" + "log" + + "github.com/smartcontractkit/chainlink-common/pkg/workflows/wasm" + + "github.com/smartcontractkit/chainlink-common/pkg/capabilities/cli/cmd/testdata/fixtures/capabilities/basictrigger" + "github.com/smartcontractkit/chainlink-common/pkg/workflows/sdk" +) + +func BuildWorkflow(config []byte) *sdk.WorkflowSpecFactory { + params := sdk.NewWorkflowParams{} + if err := json.Unmarshal(config, ¶ms); err != nil { + log.Fatal(err) + } + + workflow := sdk.NewWorkflowSpecFactory(params) + + triggerCfg := basictrigger.TriggerConfig{Name: "trigger", Number: 100} + _ = triggerCfg.New(workflow) + + return workflow +} + +func main() { + runner := wasm.NewRunner() + workflow := BuildWorkflow(runner.Config()) + runner.Run(workflow) +} diff --git a/core/services/job/wasm_file_spec_factory.go b/core/services/job/wasm_file_spec_factory.go new file mode 100644 index 00000000000..d5fca2fc721 --- /dev/null +++ b/core/services/job/wasm_file_spec_factory.go @@ -0,0 +1,90 @@ +package job + +import ( + "bytes" + "context" + "crypto/sha256" + "errors" + "fmt" + "io" + "os" + "path" + "strings" + + "github.com/smartcontractkit/chainlink-common/pkg/workflows/sdk" + "github.com/smartcontractkit/chainlink-common/pkg/workflows/wasm/host" + + "github.com/smartcontractkit/chainlink/v2/core/logger" + + "github.com/andybalholm/brotli" +) + +type WasmFileSpecFactory struct{} + +func (w WasmFileSpecFactory) Spec(ctx context.Context, lggr logger.Logger, workflow string, config []byte) (sdk.WorkflowSpec, string, error) { + compressedBinary, sha, err := w.rawSpecAndSha(workflow, config) + if err != nil { + return sdk.WorkflowSpec{}, "", err + } + + moduleConfig := &host.ModuleConfig{Logger: lggr} + spec, err := host.GetWorkflowSpec(moduleConfig, compressedBinary, config) + if err != nil { + return sdk.WorkflowSpec{}, "", err + } else if spec == nil { + return sdk.WorkflowSpec{}, "", errors.New("workflow spec not found when running wasm") + } + + return *spec, sha, nil +} + +// rawSpecAndSha returns the brotli compressed version of the raw wasm file, alongside the sha256 hash of the raw wasm file +func (w WasmFileSpecFactory) rawSpecAndSha(wf string, config []byte) ([]byte, string, error) { + read, err := os.ReadFile(wf) + if err != nil { + return nil, "", err + } + + extension := strings.ToLower(path.Ext(wf)) + switch extension { + case ".wasm", "": + return w.rawSpecAndShaFromWasm(read, config) + case ".br": + return w.rawSpecAndShaFromBrotli(read, config) + default: + return nil, "", fmt.Errorf("unsupported file type %s", extension) + } +} + +func (w WasmFileSpecFactory) rawSpecAndShaFromBrotli(wasm, config []byte) ([]byte, string, error) { + brr := brotli.NewReader(bytes.NewReader(wasm)) + rawWasm, err := io.ReadAll(brr) + if err != nil { + return nil, "", err + } + + return wasm, w.sha(rawWasm, config), nil +} + +func (w WasmFileSpecFactory) rawSpecAndShaFromWasm(wasm, config []byte) ([]byte, string, error) { + var b bytes.Buffer + bwr := brotli.NewWriter(&b) + if _, err := bwr.Write(wasm); err != nil { + return nil, "", err + } + + if err := bwr.Close(); err != nil { + return nil, "", err + } + + return b.Bytes(), w.sha(wasm, config), nil +} + +func (w WasmFileSpecFactory) sha(wasm, config []byte) string { + sum := sha256.New() + sum.Write(wasm) + sum.Write(config) + return fmt.Sprintf("%x", sum.Sum(nil)) +} + +var _ WorkflowSpecFactory = (*WasmFileSpecFactory)(nil) diff --git a/core/services/job/wasm_file_spec_factory_test.go b/core/services/job/wasm_file_spec_factory_test.go new file mode 100644 index 00000000000..f58ee81297a --- /dev/null +++ b/core/services/job/wasm_file_spec_factory_test.go @@ -0,0 +1,56 @@ +package job_test + +import ( + "crypto/sha256" + "encoding/json" + "fmt" + "os" + "os/exec" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/smartcontractkit/chainlink-common/pkg/workflows/sdk" + "github.com/smartcontractkit/chainlink-common/pkg/workflows/wasm/host" + + "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" + "github.com/smartcontractkit/chainlink/v2/core/logger" + "github.com/smartcontractkit/chainlink/v2/core/services/job" +) + +func TestWasmFileSpecFactory(t *testing.T) { + binaryLocation := createTestBinary(t) + config, err := json.Marshal(sdk.NewWorkflowParams{ + Owner: "owner", + Name: "name", + }) + require.NoError(t, err) + + factory := job.WasmFileSpecFactory{} + actual, actualSha, err := factory.Spec(testutils.Context(t), logger.NullLogger, binaryLocation, config) + require.NoError(t, err) + + rawBinary, err := os.ReadFile(binaryLocation) + require.NoError(t, err) + expected, err := host.GetWorkflowSpec(&host.ModuleConfig{Logger: logger.NullLogger, IsUncompressed: true}, rawBinary, config) + require.NoError(t, err) + + expectedSha := sha256.New() + expectedSha.Write(rawBinary) + expectedSha.Write(config) + require.Equal(t, fmt.Sprintf("%x", expectedSha.Sum(nil)), actualSha) + + require.Equal(t, *expected, actual) +} + +func createTestBinary(t *testing.T) string { + const testBinaryLocation = "testdata/wasm/testmodule.wasm" + + cmd := exec.Command("go", "build", "-o", testBinaryLocation, "github.com/smartcontractkit/chainlink/v2/core/services/job/testdata/wasm") + cmd.Env = append(os.Environ(), "GOOS=wasip1", "GOARCH=wasm") + + output, err := cmd.CombinedOutput() + require.NoError(t, err, string(output)) + + return testBinaryLocation +} diff --git a/core/services/job/workflow_spec_factory.go b/core/services/job/workflow_spec_factory.go index 565e6a9fce1..f1dc524bf11 100644 --- a/core/services/job/workflow_spec_factory.go +++ b/core/services/job/workflow_spec_factory.go @@ -2,50 +2,21 @@ package job import ( "context" - "crypto/sha256" "errors" - "fmt" "github.com/smartcontractkit/chainlink-common/pkg/workflows/sdk" + + "github.com/smartcontractkit/chainlink/v2/core/logger" ) var ErrInvalidWorkflowType = errors.New("invalid workflow type") -type SDKWorkflowSpecFactory interface { - Spec(ctx context.Context, rawSpec, config []byte) (sdk.WorkflowSpec, error) - RawSpec(ctx context.Context, wf string) ([]byte, error) -} - -type WorkflowSpecFactory map[WorkflowSpecType]SDKWorkflowSpecFactory - -func (wsf WorkflowSpecFactory) Spec( - ctx context.Context, workflow string, config []byte, tpe WorkflowSpecType) (sdk.WorkflowSpec, string, error) { - if tpe == "" { - tpe = DefaultSpecType - } - - factory, ok := wsf[tpe] - if !ok { - return sdk.WorkflowSpec{}, "", ErrInvalidWorkflowType - } - - rawSpec, err := factory.RawSpec(ctx, workflow) - if err != nil { - return sdk.WorkflowSpec{}, "", err - } - - spec, err := factory.Spec(ctx, rawSpec, config) - if err != nil { - return sdk.WorkflowSpec{}, "", err - } - - sum := sha256.New() - sum.Write(rawSpec) - sum.Write(config) - - return spec, fmt.Sprintf("%x", sum.Sum(nil)), nil +type WorkflowSpecFactory interface { + Spec(ctx context.Context, lggr logger.Logger, workflow string, config []byte) (sdk.WorkflowSpec, string, error) } -var workflowSpecFactory = WorkflowSpecFactory{ - YamlSpec: YAMLSpecFactory{}, +var workflowSpecFactories = map[WorkflowSpecType]WorkflowSpecFactory{ + YamlSpec: YAMLSpecFactory{}, + WASMFile: WasmFileSpecFactory{}, + DefaultSpecType: YAMLSpecFactory{}, } diff --git a/core/services/job/workflow_spec_factory_test.go b/core/services/job/workflow_spec_factory_test.go deleted file mode 100644 index dc2ff3bac9b..00000000000 --- a/core/services/job/workflow_spec_factory_test.go +++ /dev/null @@ -1,106 +0,0 @@ -package job_test - -import ( - "context" - "crypto/sha256" - "errors" - "fmt" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/smartcontractkit/chainlink-common/pkg/workflows/sdk" - - "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" - "github.com/smartcontractkit/chainlink/v2/core/services/job" -) - -func TestWorkflowSpecFactory_ToSpec(t *testing.T) { - t.Parallel() - - anyData := "any data" - anyConfig := []byte("any config") - anySpec := sdk.WorkflowSpec{Name: "name", Owner: "owner"} - - t.Run("delegates to factory and calculates CID", func(t *testing.T) { - runYamlSpecTest(t, anySpec, anyData, anyConfig, job.YamlSpec) - }) - - t.Run("delegates default", func(t *testing.T) { - runYamlSpecTest(t, anySpec, anyData, anyConfig, "") - }) - - t.Run("CID without config matches", func(t *testing.T) { - factory := job.WorkflowSpecFactory{ - job.YamlSpec: mockSdkSpecFactory{t: t, noConfig: true, SpecVal: anySpec}, - } - results, cid, err := factory.Spec(testutils.Context(t), anyData, nil, job.YamlSpec) - require.NoError(t, err) - - assert.Equal(t, anySpec, results) - - sha256Hash := sha256.New() - sha256Hash.Write([]byte(anyData)) - expectedCid := fmt.Sprintf("%x", sha256Hash.Sum(nil)) - assert.Equal(t, expectedCid, cid) - }) - - t.Run("returns errors from sdk factory", func(t *testing.T) { - anyErr := errors.New("nope") - factory := job.WorkflowSpecFactory{ - job.YamlSpec: mockSdkSpecFactory{t: t, Err: anyErr}, - } - - _, _, err := factory.Spec(testutils.Context(t), anyData, anyConfig, job.YamlSpec) - assert.Equal(t, anyErr, err) - }) - - t.Run("returns an error if the type is not supported", func(t *testing.T) { - factory := job.WorkflowSpecFactory{ - job.YamlSpec: mockSdkSpecFactory{t: t, SpecVal: anySpec}, - } - - _, _, err := factory.Spec(testutils.Context(t), anyData, anyConfig, "unsupported") - assert.Error(t, err) - }) -} - -func runYamlSpecTest(t *testing.T, anySpec sdk.WorkflowSpec, anyData string, anyConfig []byte, specType job.WorkflowSpecType) { - factory := job.WorkflowSpecFactory{ - job.YamlSpec: mockSdkSpecFactory{t: t, SpecVal: anySpec}, - } - - results, cid, err := factory.Spec(testutils.Context(t), anyData, anyConfig, specType) - - require.NoError(t, err) - assert.Equal(t, anySpec, results) - - sha256Hash := sha256.New() - sha256Hash.Write([]byte(anyData)) - sha256Hash.Write(anyConfig) - expectedCid := fmt.Sprintf("%x", sha256Hash.Sum(nil)) - assert.Equal(t, expectedCid, cid) -} - -type mockSdkSpecFactory struct { - t *testing.T - noConfig bool - SpecVal sdk.WorkflowSpec - Err error -} - -func (f mockSdkSpecFactory) RawSpec(_ context.Context, wf string) ([]byte, error) { - return []byte(wf), nil -} - -func (f mockSdkSpecFactory) Spec(_ context.Context, rawSpec, config []byte) (sdk.WorkflowSpec, error) { - assert.ElementsMatch(f.t, rawSpec, []byte("any data")) - if f.noConfig { - assert.Nil(f.t, config) - } else { - assert.ElementsMatch(f.t, config, []byte("any config")) - } - - return f.SpecVal, f.Err -} diff --git a/core/services/job/yaml_spec_factory.go b/core/services/job/yaml_spec_factory.go index ea344a3ffc4..40a26de181e 100644 --- a/core/services/job/yaml_spec_factory.go +++ b/core/services/job/yaml_spec_factory.go @@ -2,19 +2,20 @@ package job import ( "context" + "crypto/sha256" + "fmt" "github.com/smartcontractkit/chainlink-common/pkg/workflows" "github.com/smartcontractkit/chainlink-common/pkg/workflows/sdk" + + "github.com/smartcontractkit/chainlink/v2/core/logger" ) type YAMLSpecFactory struct{} -var _ SDKWorkflowSpecFactory = (*YAMLSpecFactory)(nil) - -func (y YAMLSpecFactory) Spec(_ context.Context, rawSpec, _ []byte) (sdk.WorkflowSpec, error) { - return workflows.ParseWorkflowSpecYaml(string(rawSpec)) -} +var _ WorkflowSpecFactory = (*YAMLSpecFactory)(nil) -func (y YAMLSpecFactory) RawSpec(_ context.Context, wf string) ([]byte, error) { - return []byte(wf), nil +func (y YAMLSpecFactory) Spec(ctx context.Context, lggr logger.Logger, workflow string, config []byte) (sdk.WorkflowSpec, string, error) { + spec, err := workflows.ParseWorkflowSpecYaml(workflow) + return spec, fmt.Sprintf("%x", sha256.Sum256([]byte(workflow))), err } diff --git a/core/services/job/yaml_spec_factory_test.go b/core/services/job/yaml_spec_factory_test.go index 4d075fe6e20..c12d4872d92 100644 --- a/core/services/job/yaml_spec_factory_test.go +++ b/core/services/job/yaml_spec_factory_test.go @@ -1,13 +1,17 @@ package job_test import ( + "crypto/sha256" + "fmt" "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" commonworkflows "github.com/smartcontractkit/chainlink-common/pkg/workflows" "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" + "github.com/smartcontractkit/chainlink/v2/core/logger" "github.com/smartcontractkit/chainlink/v2/core/services/job" ) @@ -64,19 +68,12 @@ targets: func TestYamlSpecFactory_GetSpec(t *testing.T) { t.Parallel() - actual, err := job.YAMLSpecFactory{}.Spec(testutils.Context(t), []byte(anyYamlSpec), []byte{}) + actual, actualSha, err := job.YAMLSpecFactory{}.Spec(testutils.Context(t), logger.NullLogger, anyYamlSpec, []byte{}) require.NoError(t, err) expected, err := commonworkflows.ParseWorkflowSpecYaml(anyYamlSpec) require.NoError(t, err) require.Equal(t, expected, actual) -} - -func TestYamlSpecFactory_GetRawSpec(t *testing.T) { - t.Parallel() - - actual, err := job.YAMLSpecFactory{}.RawSpec(testutils.Context(t), anyYamlSpec) - require.NoError(t, err) - require.Equal(t, []byte(anyYamlSpec), actual) + assert.Equal(t, fmt.Sprintf("%x", sha256.Sum256([]byte(anyYamlSpec))), actualSha) } diff --git a/core/services/workflows/delegate.go b/core/services/workflows/delegate.go index 2aac9ba97b5..fec32852863 100644 --- a/core/services/workflows/delegate.go +++ b/core/services/workflows/delegate.go @@ -35,7 +35,7 @@ func (d *Delegate) OnDeleteJob(context.Context, job.Job) error { return nil } // ServicesForSpec satisfies the job.Delegate interface. func (d *Delegate) ServicesForSpec(ctx context.Context, spec job.Job) ([]job.ServiceCtx, error) { - sdkSpec, err := spec.WorkflowSpec.SDKSpec(ctx) + sdkSpec, err := spec.WorkflowSpec.SDKSpec(ctx, d.logger) if err != nil { return nil, err } @@ -87,7 +87,7 @@ func ValidatedWorkflowJobSpec(ctx context.Context, tomlString string) (job.Job, return jb, fmt.Errorf("toml unmarshal error on workflow spec: %w", err) } - sdkSpec, err := spec.SDKSpec(ctx) + sdkSpec, err := spec.SDKSpec(ctx, logger.NullLogger) if err != nil { return jb, fmt.Errorf("failed to convert to sdk workflow spec: %w", err) } diff --git a/core/services/workflows/engine_test.go b/core/services/workflows/engine_test.go index 9bd1b285377..5379a880102 100644 --- a/core/services/workflows/engine_test.go +++ b/core/services/workflows/engine_test.go @@ -140,7 +140,7 @@ func newTestEngine(t *testing.T, reg *coreCap.Registry, spec string, opts ...fun sdkSpec, err := (&job.WorkflowSpec{ Workflow: spec, SpecType: job.YamlSpec, - }).SDKSpec(testutils.Context(t)) + }).SDKSpec(testutils.Context(t), logger.NullLogger) require.NoError(t, err) reg.SetLocalRegistry(&testConfigProvider{}) diff --git a/core/services/workflows/models_test.go b/core/services/workflows/models_test.go index 68944e64bad..c4b6a7bbf11 100644 --- a/core/services/workflows/models_test.go +++ b/core/services/workflows/models_test.go @@ -9,6 +9,7 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/workflows" "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" + "github.com/smartcontractkit/chainlink/v2/core/logger" "github.com/smartcontractkit/chainlink/v2/core/services/job" ) @@ -294,7 +295,7 @@ targets: for _, tc := range testCases { t.Run(tc.name, func(st *testing.T) { - spec, err := job.YAMLSpecFactory{}.Spec(testutils.Context(t), []byte(tc.yaml), nil) + spec, _, err := job.YAMLSpecFactory{}.Spec(testutils.Context(t), logger.NullLogger, tc.yaml, nil) require.NoError(t, err) wf, err := Parse(spec) @@ -323,7 +324,7 @@ targets: } func TestParsesIntsCorrectly(t *testing.T) { - spec, err := job.YAMLSpecFactory{}.Spec(testutils.Context(t), []byte(hardcodedWorkflow), nil) + spec, _, err := job.YAMLSpecFactory{}.Spec(testutils.Context(t), logger.NullLogger, hardcodedWorkflow, nil) require.NoError(t, err) wf, err := Parse(spec) diff --git a/go.mod b/go.mod index 53633f263b5..6c796344ae8 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/NethermindEth/juno v0.3.1 github.com/NethermindEth/starknet.go v0.7.1-0.20240401080518-34a506f3cfdb github.com/XSAM/otelsql v0.27.0 + github.com/andybalholm/brotli v1.1.0 github.com/avast/retry-go/v4 v4.6.0 github.com/btcsuite/btcd/btcec/v2 v2.3.2 github.com/cometbft/cometbft v0.37.5 @@ -151,6 +152,7 @@ require ( github.com/bits-and-blooms/bitset v1.10.0 // indirect github.com/blendle/zapdriver v1.3.1 // indirect github.com/buger/jsonparser v1.1.1 // indirect + github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 // indirect github.com/bytedance/sonic v1.10.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect diff --git a/go.sum b/go.sum index 166b268a80e..4b270409c3e 100644 --- a/go.sum +++ b/go.sum @@ -118,6 +118,8 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= +github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= +github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/appleboy/gofight/v2 v2.1.2 h1:VOy3jow4vIK8BRQJoC/I9muxyYlJ2yb9ht2hZoS3rf4= github.com/appleboy/gofight/v2 v2.1.2/go.mod h1:frW+U1QZEdDgixycTj4CygQ48yLTUhplt43+Wczp3rw= @@ -163,6 +165,8 @@ github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZ github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 h1:NJvU4S8KEk1GnF6+FvlnzMD/8wXTj/mYJSG6Q4yu3Pw= +github.com/bytecodealliance/wasmtime-go/v23 v23.0.0/go.mod h1:5YIL+Ouiww2zpO7u+iZ1U1G5NvmwQYaXdmCZQGjQM0U= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= github.com/bytedance/sonic v1.10.1 h1:7a1wuFXL1cMy7a3f7/VFcEtriuXQnUBhtoVfOZiaysc= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 5eeb68f773b..68eb1ec7e48 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -104,6 +104,7 @@ require ( github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30 // indirect github.com/alexflint/go-arg v1.4.2 // indirect github.com/alexflint/go-scalar v1.0.0 // indirect + github.com/andybalholm/brotli v1.1.0 // indirect github.com/armon/go-metrics v0.4.1 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/avast/retry-go v3.0.0+incompatible // indirect @@ -133,6 +134,7 @@ require ( github.com/blendle/zapdriver v1.3.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/buger/jsonparser v1.1.1 // indirect + github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 // indirect github.com/bytedance/sonic v1.10.1 // indirect github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b // indirect github.com/c9s/goprocinfo v0.0.0-20210130143923-c95fcf8c64a8 // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index 0a8d40353bd..8a6a0d64934 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -185,6 +185,8 @@ github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2uc github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= +github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= @@ -279,6 +281,8 @@ github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMU github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bxcodec/faker v2.0.1+incompatible h1:P0KUpUw5w6WJXwrPfv35oc91i4d8nf40Nwln+M/+faA= github.com/bxcodec/faker v2.0.1+incompatible/go.mod h1:BNzfpVdTwnFJ6GtfYTcQu6l6rHShT+veBxNCnjCx5XM= +github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 h1:NJvU4S8KEk1GnF6+FvlnzMD/8wXTj/mYJSG6Q4yu3Pw= +github.com/bytecodealliance/wasmtime-go/v23 v23.0.0/go.mod h1:5YIL+Ouiww2zpO7u+iZ1U1G5NvmwQYaXdmCZQGjQM0U= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= github.com/bytedance/sonic v1.10.1 h1:7a1wuFXL1cMy7a3f7/VFcEtriuXQnUBhtoVfOZiaysc= diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index 7fc07069d54..5dbf60f246d 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -29,6 +29,8 @@ require ( require ( github.com/AlekSi/pointer v1.1.0 // indirect + github.com/andybalholm/brotli v1.1.0 // indirect + github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 // indirect github.com/smartcontractkit/chainlink-automation v1.0.4 // indirect github.com/smartcontractkit/libocr v0.0.0-20240717100443-f6226e09bee7 // indirect ) diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index 0715c672cf5..155a513bb4a 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -183,6 +183,8 @@ github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2uc github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= +github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= @@ -273,6 +275,8 @@ github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMU github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bxcodec/faker v2.0.1+incompatible h1:P0KUpUw5w6WJXwrPfv35oc91i4d8nf40Nwln+M/+faA= github.com/bxcodec/faker v2.0.1+incompatible/go.mod h1:BNzfpVdTwnFJ6GtfYTcQu6l6rHShT+veBxNCnjCx5XM= +github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 h1:NJvU4S8KEk1GnF6+FvlnzMD/8wXTj/mYJSG6Q4yu3Pw= +github.com/bytecodealliance/wasmtime-go/v23 v23.0.0/go.mod h1:5YIL+Ouiww2zpO7u+iZ1U1G5NvmwQYaXdmCZQGjQM0U= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= github.com/bytedance/sonic v1.10.1 h1:7a1wuFXL1cMy7a3f7/VFcEtriuXQnUBhtoVfOZiaysc= From 8b01661e032add54c07f269624b46bddd4476b95 Mon Sep 17 00:00:00 2001 From: momentmaker Date: Wed, 25 Sep 2024 11:01:17 -0500 Subject: [PATCH 2/3] Bump version and update CHANGELOG fore core v2.17.0 (#14564) Signed-off-by: frank zhu --- .changeset/afraid-plums-look.md | 5 - .changeset/bright-rings-knock.md | 5 - .changeset/brown-geese-boil.md | 5 - .changeset/calm-laws-begin.md | 5 - .changeset/clever-months-brake.md | 5 - .changeset/cold-suns-hope.md | 5 - .changeset/curly-onions-tell.md | 5 - .changeset/curvy-beans-scream.md | 5 - .changeset/curvy-boxes-burn.md | 5 - .changeset/curvy-months-wave.md | 5 - .changeset/curvy-points-grin.md | 5 - .changeset/cyan-spies-dream.md | 5 - .changeset/famous-goats-hug.md | 5 - .changeset/famous-plums-kiss.md | 7 -- .changeset/five-nails-fold.md | 5 - .changeset/flat-emus-act.md | 5 - .changeset/four-eggs-invite.md | 5 - .changeset/gorgeous-lobsters-argue.md | 5 - .changeset/gorgeous-walls-sit.md | 5 - .changeset/green-eagles-deliver.md | 5 - .changeset/happy-feet-rhyme.md | 11 -- .changeset/hot-roses-add.md | 5 - .changeset/khaki-tigers-agree.md | 5 - .changeset/kind-houses-smile.md | 5 - .changeset/kind-numbers-melt.md | 13 -- .changeset/long-balloons-hunt.md | 5 - .changeset/loud-months-act.md | 5 - .changeset/loud-windows-call.md | 5 - .changeset/lucky-zebras-reflect.md | 7 -- .changeset/many-lamps-rush.md | 5 - .changeset/moody-turkeys-provide.md | 5 - .changeset/neat-yaks-switch.md | 5 - .changeset/olive-snails-sniff.md | 5 - .changeset/plenty-glasses-rest.md | 5 - .changeset/polite-numbers-exercise.md | 5 - .changeset/pretty-trees-smile.md | 5 - .changeset/rare-crabs-tell.md | 5 - .changeset/red-icons-build.md | 5 - .changeset/sharp-pianos-watch.md | 5 - .changeset/shiny-hornets-pretend.md | 5 - .changeset/short-candles-love.md | 5 - .changeset/short-shoes-crash.md | 5 - .changeset/shy-bulldogs-wink.md | 5 - .changeset/silly-boxes-sneeze.md | 5 - .changeset/silly-zebras-exercise.md | 5 - .changeset/sixty-cougars-mix.md | 5 - .changeset/sixty-fireants-return.md | 5 - .changeset/slow-lizards-shout.md | 5 - .changeset/sour-ears-wink.md | 5 - .changeset/stale-falcons-train.md | 5 - .changeset/strange-swans-yawn.md | 21 ---- .changeset/tame-rules-yell.md | 5 - .changeset/tender-lemons-obey.md | 5 - .changeset/thick-jobs-kneel.md | 5 - .changeset/thirty-emus-enjoy.md | 7 -- .changeset/tiny-doors-brush.md | 5 - .changeset/tough-boats-shop.md | 5 + .changeset/tricky-eagles-knock.md | 5 - .changeset/twenty-boxes-thank.md | 7 -- .changeset/two-pumas-lie.md | 5 - .changeset/unlucky-dolphins-flash.md | 5 - .changeset/warm-experts-promise.md | 5 - .changeset/wise-bears-end.md | 5 - .changeset/young-lions-provide.md | 5 - CHANGELOG.md | 174 ++++++++++++++++++++++++++ package.json | 2 +- 66 files changed, 180 insertions(+), 354 deletions(-) delete mode 100644 .changeset/afraid-plums-look.md delete mode 100644 .changeset/bright-rings-knock.md delete mode 100644 .changeset/brown-geese-boil.md delete mode 100644 .changeset/calm-laws-begin.md delete mode 100644 .changeset/clever-months-brake.md delete mode 100644 .changeset/cold-suns-hope.md delete mode 100644 .changeset/curly-onions-tell.md delete mode 100644 .changeset/curvy-beans-scream.md delete mode 100644 .changeset/curvy-boxes-burn.md delete mode 100644 .changeset/curvy-months-wave.md delete mode 100644 .changeset/curvy-points-grin.md delete mode 100644 .changeset/cyan-spies-dream.md delete mode 100644 .changeset/famous-goats-hug.md delete mode 100644 .changeset/famous-plums-kiss.md delete mode 100644 .changeset/five-nails-fold.md delete mode 100644 .changeset/flat-emus-act.md delete mode 100644 .changeset/four-eggs-invite.md delete mode 100644 .changeset/gorgeous-lobsters-argue.md delete mode 100644 .changeset/gorgeous-walls-sit.md delete mode 100644 .changeset/green-eagles-deliver.md delete mode 100644 .changeset/happy-feet-rhyme.md delete mode 100644 .changeset/hot-roses-add.md delete mode 100644 .changeset/khaki-tigers-agree.md delete mode 100644 .changeset/kind-houses-smile.md delete mode 100644 .changeset/kind-numbers-melt.md delete mode 100644 .changeset/long-balloons-hunt.md delete mode 100644 .changeset/loud-months-act.md delete mode 100644 .changeset/loud-windows-call.md delete mode 100644 .changeset/lucky-zebras-reflect.md delete mode 100644 .changeset/many-lamps-rush.md delete mode 100644 .changeset/moody-turkeys-provide.md delete mode 100644 .changeset/neat-yaks-switch.md delete mode 100644 .changeset/olive-snails-sniff.md delete mode 100644 .changeset/plenty-glasses-rest.md delete mode 100644 .changeset/polite-numbers-exercise.md delete mode 100644 .changeset/pretty-trees-smile.md delete mode 100644 .changeset/rare-crabs-tell.md delete mode 100644 .changeset/red-icons-build.md delete mode 100644 .changeset/sharp-pianos-watch.md delete mode 100644 .changeset/shiny-hornets-pretend.md delete mode 100644 .changeset/short-candles-love.md delete mode 100644 .changeset/short-shoes-crash.md delete mode 100644 .changeset/shy-bulldogs-wink.md delete mode 100644 .changeset/silly-boxes-sneeze.md delete mode 100644 .changeset/silly-zebras-exercise.md delete mode 100644 .changeset/sixty-cougars-mix.md delete mode 100644 .changeset/sixty-fireants-return.md delete mode 100644 .changeset/slow-lizards-shout.md delete mode 100644 .changeset/sour-ears-wink.md delete mode 100644 .changeset/stale-falcons-train.md delete mode 100644 .changeset/strange-swans-yawn.md delete mode 100644 .changeset/tame-rules-yell.md delete mode 100644 .changeset/tender-lemons-obey.md delete mode 100644 .changeset/thick-jobs-kneel.md delete mode 100644 .changeset/thirty-emus-enjoy.md delete mode 100644 .changeset/tiny-doors-brush.md create mode 100644 .changeset/tough-boats-shop.md delete mode 100644 .changeset/tricky-eagles-knock.md delete mode 100644 .changeset/twenty-boxes-thank.md delete mode 100644 .changeset/two-pumas-lie.md delete mode 100644 .changeset/unlucky-dolphins-flash.md delete mode 100644 .changeset/warm-experts-promise.md delete mode 100644 .changeset/wise-bears-end.md delete mode 100644 .changeset/young-lions-provide.md diff --git a/.changeset/afraid-plums-look.md b/.changeset/afraid-plums-look.md deleted file mode 100644 index a72348e5652..00000000000 --- a/.changeset/afraid-plums-look.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#internal updated to latest operator-ui to bring in new UI changes for supporting multiple job distributors diff --git a/.changeset/bright-rings-knock.md b/.changeset/bright-rings-knock.md deleted file mode 100644 index a3667ed20e0..00000000000 --- a/.changeset/bright-rings-knock.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -Bump to start the next version diff --git a/.changeset/brown-geese-boil.md b/.changeset/brown-geese-boil.md deleted file mode 100644 index fa7f65f733c..00000000000 --- a/.changeset/brown-geese-boil.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -FilteredLogs receive Expression instead of whole KeyFilter. #internal diff --git a/.changeset/calm-laws-begin.md b/.changeset/calm-laws-begin.md deleted file mode 100644 index 5549f1a966f..00000000000 --- a/.changeset/calm-laws-begin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#added Implements rate limiter for capabilities dispatcher diff --git a/.changeset/clever-months-brake.md b/.changeset/clever-months-brake.md deleted file mode 100644 index 0408383bd03..00000000000 --- a/.changeset/clever-months-brake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal diff --git a/.changeset/cold-suns-hope.md b/.changeset/cold-suns-hope.md deleted file mode 100644 index a6abf7e0785..00000000000 --- a/.changeset/cold-suns-hope.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal changes required for capability api chance to sync diff --git a/.changeset/curly-onions-tell.md b/.changeset/curly-onions-tell.md deleted file mode 100644 index 249f616c012..00000000000 --- a/.changeset/curly-onions-tell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#changed Make Mantle use default OP stack l1 gas oracle in core diff --git a/.changeset/curvy-beans-scream.md b/.changeset/curvy-beans-scream.md deleted file mode 100644 index 4252f965e32..00000000000 --- a/.changeset/curvy-beans-scream.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#changed: Add new OCR3DataFeeds telemetry type for Mercury jobs diff --git a/.changeset/curvy-boxes-burn.md b/.changeset/curvy-boxes-burn.md deleted file mode 100644 index 8a189c5f5d1..00000000000 --- a/.changeset/curvy-boxes-burn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -RMNCrypto evm implementation for CCIP - RMN Integration #added diff --git a/.changeset/curvy-months-wave.md b/.changeset/curvy-months-wave.md deleted file mode 100644 index 9e2552fed5f..00000000000 --- a/.changeset/curvy-months-wave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Use a lock to sync access to the ConfigDigest #internal diff --git a/.changeset/curvy-points-grin.md b/.changeset/curvy-points-grin.md deleted file mode 100644 index 43d500f44ef..00000000000 --- a/.changeset/curvy-points-grin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#updated refactor ccip oracle creator diff --git a/.changeset/cyan-spies-dream.md b/.changeset/cyan-spies-dream.md deleted file mode 100644 index e842f26bd43..00000000000 --- a/.changeset/cyan-spies-dream.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal validate capability trigger event ID before executing diff --git a/.changeset/famous-goats-hug.md b/.changeset/famous-goats-hug.md deleted file mode 100644 index 986f86bab28..00000000000 --- a/.changeset/famous-goats-hug.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -LogPoller polls logs even if chain have not reached finality #internal diff --git a/.changeset/famous-plums-kiss.md b/.changeset/famous-plums-kiss.md deleted file mode 100644 index b5920b98345..00000000000 --- a/.changeset/famous-plums-kiss.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"chainlink": minor ---- - -#updated move latest capabilities code from ccip repo to chainlink repo [CCIP-2946] - -PR issue: CCIP-2946 diff --git a/.changeset/five-nails-fold.md b/.changeset/five-nails-fold.md deleted file mode 100644 index 8ddd72a71d1..00000000000 --- a/.changeset/five-nails-fold.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#updated Changed TelemetryIngress.UniConn default to false diff --git a/.changeset/flat-emus-act.md b/.changeset/flat-emus-act.md deleted file mode 100644 index a4cbae12877..00000000000 --- a/.changeset/flat-emus-act.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Updated TXM Confirmer logic to resume pending task runs with failure if transaction is terminally stuck #internal diff --git a/.changeset/four-eggs-invite.md b/.changeset/four-eggs-invite.md deleted file mode 100644 index 46dac304a10..00000000000 --- a/.changeset/four-eggs-invite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -configuration updates diff --git a/.changeset/gorgeous-lobsters-argue.md b/.changeset/gorgeous-lobsters-argue.md deleted file mode 100644 index e1960eb61c1..00000000000 --- a/.changeset/gorgeous-lobsters-argue.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#changed Connect to multiple feeds managers on app start instead of just one (default to first) diff --git a/.changeset/gorgeous-walls-sit.md b/.changeset/gorgeous-walls-sit.md deleted file mode 100644 index dabda6f8eaa..00000000000 --- a/.changeset/gorgeous-walls-sit.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#added Soneium testnet chain configs diff --git a/.changeset/green-eagles-deliver.md b/.changeset/green-eagles-deliver.md deleted file mode 100644 index 179b93b1080..00000000000 --- a/.changeset/green-eagles-deliver.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Handle zkEVM node level OOC error as TerminallyStuck #internal diff --git a/.changeset/happy-feet-rhyme.md b/.changeset/happy-feet-rhyme.md deleted file mode 100644 index 6e1697d96ae..00000000000 --- a/.changeset/happy-feet-rhyme.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -"chainlink": minor ---- - -This PR introduce few changes: -- Add a new config option `EVM.NodePool.NewHeadsPollInterval` (0 by default indicate disabled), which is an interval for polling new block periodically using http client rather than subscribe to ws feed. -- Updated new head handler for polling new head over http, and register the subscription in node lifecycle logic. -- If the polling new heads is enabled, WS new heads subscription will be replaced with the new http based polling. - -Note: There will be another PR for making WS URL optional with some extra condition. -#added diff --git a/.changeset/hot-roses-add.md b/.changeset/hot-roses-add.md deleted file mode 100644 index 99f899666a4..00000000000 --- a/.changeset/hot-roses-add.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#internal Update to latest UI - PeerId field is introduced for OCR2 bootstrap node in chain config page diff --git a/.changeset/khaki-tigers-agree.md b/.changeset/khaki-tigers-agree.md deleted file mode 100644 index ba9e56cc1da..00000000000 --- a/.changeset/khaki-tigers-agree.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#added #nops Add Zircuit Configs diff --git a/.changeset/kind-houses-smile.md b/.changeset/kind-houses-smile.md deleted file mode 100644 index 037adbcad3c..00000000000 --- a/.changeset/kind-houses-smile.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal index don ID in ConfigSet event diff --git a/.changeset/kind-numbers-melt.md b/.changeset/kind-numbers-melt.md deleted file mode 100644 index 43e647399c1..00000000000 --- a/.changeset/kind-numbers-melt.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -"chainlink": minor ---- - -Adding feature flag for `LogBroadcaster` called `LogBroadcasterEnabled`, which is `true` by default to support backwards compatibility. -Adding `LogBroadcasterEnabled` allows certain chains to completely disable the `LogBroadcaster` feature, which is an old feature (getting replaced by logPoller) that only few products are using it: -* OCR1 Median -* *OCR2 Median when ChainReader is disabled -* *pre-OCR2 Keeper -* Flux Monitor -* Direct RequestOCR1 Median - -#added diff --git a/.changeset/long-balloons-hunt.md b/.changeset/long-balloons-hunt.md deleted file mode 100644 index 0408383bd03..00000000000 --- a/.changeset/long-balloons-hunt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal diff --git a/.changeset/loud-months-act.md b/.changeset/loud-months-act.md deleted file mode 100644 index d50254acb7a..00000000000 --- a/.changeset/loud-months-act.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#internal Added ChainWriter to ChainReader tests diff --git a/.changeset/loud-windows-call.md b/.changeset/loud-windows-call.md deleted file mode 100644 index 6dc8d6fac7f..00000000000 --- a/.changeset/loud-windows-call.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -Added gas limit estimation feature to EVM gas estimators. Introduced a new config `EVM.GasEstimator.EstimateLimit` to toggle this feature. #added diff --git a/.changeset/lucky-zebras-reflect.md b/.changeset/lucky-zebras-reflect.md deleted file mode 100644 index 0d06348a034..00000000000 --- a/.changeset/lucky-zebras-reflect.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"chainlink": minor ---- - -#internal Implement EVM ChainReader ValueComparator filtering by non-indexed event data. Right now only simple non indexed data where byte offsets don't exist is supported. - -PR issue: BCFR-203 diff --git a/.changeset/many-lamps-rush.md b/.changeset/many-lamps-rush.md deleted file mode 100644 index 93d779aec95..00000000000 --- a/.changeset/many-lamps-rush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#added Hedera configs diff --git a/.changeset/moody-turkeys-provide.md b/.changeset/moody-turkeys-provide.md deleted file mode 100644 index 5a89e4596e1..00000000000 --- a/.changeset/moody-turkeys-provide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#changed Allow registration of more than 1 feeds manager on CreateFeedsManager diff --git a/.changeset/neat-yaks-switch.md b/.changeset/neat-yaks-switch.md deleted file mode 100644 index 141c6dbddf8..00000000000 --- a/.changeset/neat-yaks-switch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Remove bid/ask fields for Mercury v4 schema #internal diff --git a/.changeset/olive-snails-sniff.md b/.changeset/olive-snails-sniff.md deleted file mode 100644 index fd91cae0505..00000000000 --- a/.changeset/olive-snails-sniff.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Adding USDCReaderTester contract for CCIP integration tests #internal diff --git a/.changeset/plenty-glasses-rest.md b/.changeset/plenty-glasses-rest.md deleted file mode 100644 index fd06cbd997c..00000000000 --- a/.changeset/plenty-glasses-rest.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal merge ccip contracts diff --git a/.changeset/polite-numbers-exercise.md b/.changeset/polite-numbers-exercise.md deleted file mode 100644 index 2adcdf305b8..00000000000 --- a/.changeset/polite-numbers-exercise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#internal Implement LatestHead for ChainService diff --git a/.changeset/pretty-trees-smile.md b/.changeset/pretty-trees-smile.md deleted file mode 100644 index 2019ff0a58c..00000000000 --- a/.changeset/pretty-trees-smile.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -use new estimation for insufficient fund instead of retry to overcome gas spike #internal diff --git a/.changeset/rare-crabs-tell.md b/.changeset/rare-crabs-tell.md deleted file mode 100644 index 9bd98213aec..00000000000 --- a/.changeset/rare-crabs-tell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#added Adds the ability to use out of order execution transactions in CCIP E2E tests diff --git a/.changeset/red-icons-build.md b/.changeset/red-icons-build.md deleted file mode 100644 index feee928a876..00000000000 --- a/.changeset/red-icons-build.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -Small fixes to multichain keyring adapter #internal diff --git a/.changeset/sharp-pianos-watch.md b/.changeset/sharp-pianos-watch.md deleted file mode 100644 index 4b60371b4b2..00000000000 --- a/.changeset/sharp-pianos-watch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal ccip reader nonces work. diff --git a/.changeset/shiny-hornets-pretend.md b/.changeset/shiny-hornets-pretend.md deleted file mode 100644 index ff9946f4e73..00000000000 --- a/.changeset/shiny-hornets-pretend.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -Introduce new gas estimator #internal diff --git a/.changeset/short-candles-love.md b/.changeset/short-candles-love.md deleted file mode 100644 index 5923f9796c5..00000000000 --- a/.changeset/short-candles-love.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal `ContractReader` interface update to accept `BoundContract` for all methods diff --git a/.changeset/short-shoes-crash.md b/.changeset/short-shoes-crash.md deleted file mode 100644 index 30431916241..00000000000 --- a/.changeset/short-shoes-crash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Optimize HeadTracker's memory usage #internal diff --git a/.changeset/shy-bulldogs-wink.md b/.changeset/shy-bulldogs-wink.md deleted file mode 100644 index a2ff2d21f15..00000000000 --- a/.changeset/shy-bulldogs-wink.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#added Full Open Telemetry support, configurable via `Telemetry` diff --git a/.changeset/silly-boxes-sneeze.md b/.changeset/silly-boxes-sneeze.md deleted file mode 100644 index c6236b57f91..00000000000 --- a/.changeset/silly-boxes-sneeze.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -bump chainlink-ccip #updated diff --git a/.changeset/silly-zebras-exercise.md b/.changeset/silly-zebras-exercise.md deleted file mode 100644 index a0e6fc28698..00000000000 --- a/.changeset/silly-zebras-exercise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal add support for values.Value type in the contract reader GetLatestValue and QueryKey methods diff --git a/.changeset/sixty-cougars-mix.md b/.changeset/sixty-cougars-mix.md deleted file mode 100644 index a641ce19762..00000000000 --- a/.changeset/sixty-cougars-mix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Use tx in insertLogsWithinTx #internal diff --git a/.changeset/sixty-fireants-return.md b/.changeset/sixty-fireants-return.md deleted file mode 100644 index 1ae63c7830e..00000000000 --- a/.changeset/sixty-fireants-return.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal gas limit default value diff --git a/.changeset/slow-lizards-shout.md b/.changeset/slow-lizards-shout.md deleted file mode 100644 index 3b21c6576e7..00000000000 --- a/.changeset/slow-lizards-shout.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Skip telemetry for market-status bridges #internal diff --git a/.changeset/sour-ears-wink.md b/.changeset/sour-ears-wink.md deleted file mode 100644 index d77fd548c51..00000000000 --- a/.changeset/sour-ears-wink.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal KMS client for deployment diff --git a/.changeset/stale-falcons-train.md b/.changeset/stale-falcons-train.md deleted file mode 100644 index ddaa0907f85..00000000000 --- a/.changeset/stale-falcons-train.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#added [Keystone] Batch identical trigger events diff --git a/.changeset/strange-swans-yawn.md b/.changeset/strange-swans-yawn.md deleted file mode 100644 index d18c743a8ae..00000000000 --- a/.changeset/strange-swans-yawn.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -"chainlink": patch ---- - -#changed - -Productionize transmitter for LLO - -Note that some minor changes to prometheus metrics will occur in the transition to LLO. Since feed IDs no longer apply, the metrics for transmissions change as follows: - -``` -"mercury_transmit_*" -[]string{"feedID", ...}, -``` - -Will change to: - -``` -"llo_mercury_transmit_*" -[]string{"donID", ...}, -``` diff --git a/.changeset/tame-rules-yell.md b/.changeset/tame-rules-yell.md deleted file mode 100644 index 91eb82442cd..00000000000 --- a/.changeset/tame-rules-yell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal update chainlink-ccip version diff --git a/.changeset/tender-lemons-obey.md b/.changeset/tender-lemons-obey.md deleted file mode 100644 index 2d6cb774b0c..00000000000 --- a/.changeset/tender-lemons-obey.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Enable FeeHistory estimator for Polygon zkEVM #nops diff --git a/.changeset/thick-jobs-kneel.md b/.changeset/thick-jobs-kneel.md deleted file mode 100644 index 8bcda7faf50..00000000000 --- a/.changeset/thick-jobs-kneel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Support per-method handlers in GatewayConnector diff --git a/.changeset/thirty-emus-enjoy.md b/.changeset/thirty-emus-enjoy.md deleted file mode 100644 index 4fbe030ec59..00000000000 --- a/.changeset/thirty-emus-enjoy.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"chainlink": minor ---- - -#bugfix Fix potential nil ptr reference for LinkFeedID and NativeFeedID in Mercury specs -#bugfix Ensure Streams PluginConfig is checked for contents correctly when validated -#changed New Feed IDs with 0x01 prefix can be parsed for Mercury report schemas diff --git a/.changeset/tiny-doors-brush.md b/.changeset/tiny-doors-brush.md deleted file mode 100644 index 2581817ba70..00000000000 --- a/.changeset/tiny-doors-brush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -moved deployments ccip tooling from ccip repo to chainlink repo #added diff --git a/.changeset/tough-boats-shop.md b/.changeset/tough-boats-shop.md new file mode 100644 index 00000000000..45a16fc965a --- /dev/null +++ b/.changeset/tough-boats-shop.md @@ -0,0 +1,5 @@ +--- +"chainlink": minor +--- + +start of next release diff --git a/.changeset/tricky-eagles-knock.md b/.changeset/tricky-eagles-knock.md deleted file mode 100644 index cbb4d4d8c71..00000000000 --- a/.changeset/tricky-eagles-knock.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -skip checking isJobManaged if the proposal in fms has already been deleted #changed diff --git a/.changeset/twenty-boxes-thank.md b/.changeset/twenty-boxes-thank.md deleted file mode 100644 index b90ec1d9fdf..00000000000 --- a/.changeset/twenty-boxes-thank.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"chainlink": patch ---- -#added -* Adds support for "tags" to Tasks that can be used generically. -* Adds a descendent task search method -* Added support in Mercury EA telemetry to utilize tags for telemetry extraction diff --git a/.changeset/two-pumas-lie.md b/.changeset/two-pumas-lie.md deleted file mode 100644 index fa8231fd198..00000000000 --- a/.changeset/two-pumas-lie.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -Updating CCIP OCR3 integration tests according to changes in the chainlink-ccip repo #internal diff --git a/.changeset/unlucky-dolphins-flash.md b/.changeset/unlucky-dolphins-flash.md deleted file mode 100644 index 116b56c87a6..00000000000 --- a/.changeset/unlucky-dolphins-flash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#internal Add ccip JobType in feeds service and other jobtype validations diff --git a/.changeset/warm-experts-promise.md b/.changeset/warm-experts-promise.md deleted file mode 100644 index 4ee25d4b61a..00000000000 --- a/.changeset/warm-experts-promise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -Remove PriceMin and TipCapMin check from attempt builder #internal diff --git a/.changeset/wise-bears-end.md b/.changeset/wise-bears-end.md deleted file mode 100644 index 30d10055dae..00000000000 --- a/.changeset/wise-bears-end.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -#updated mercury plugin to consider PluginConfig as optional if EnableTriggerCapability relay config is true. Then if PluginConfig is nil, skip fetching latestPrice for linkFeedId and nativeFeedId. diff --git a/.changeset/young-lions-provide.md b/.changeset/young-lions-provide.md deleted file mode 100644 index 45add9558d9..00000000000 --- a/.changeset/young-lions-provide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": patch ---- - -#added feed deployment to ccip integration tests diff --git a/CHANGELOG.md b/CHANGELOG.md index 395b95e63f8..6fb69c6bd1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,179 @@ # Changelog Chainlink Core +## 2.17.0 - UNRELEASED + +### Minor Changes + +- [#14316](https://github.com/smartcontractkit/chainlink/pull/14316) [`2a21b170f3`](https://github.com/smartcontractkit/chainlink/commit/2a21b170f38ded4cf0f15db283035e69b53aeeb9) Thanks [@graham-chainlink](https://github.com/graham-chainlink)! - #internal updated to latest operator-ui to bring in new UI changes for supporting multiple job distributors + +- [#14264](https://github.com/smartcontractkit/chainlink/pull/14264) [`33e6a0c1e4`](https://github.com/smartcontractkit/chainlink/commit/33e6a0c1e44b805064fe423b5570a40c07daed41) Thanks [@chainchad](https://github.com/chainchad)! - Bump to start the next version + +- [#14109](https://github.com/smartcontractkit/chainlink/pull/14109) [`2761cd5bc5`](https://github.com/smartcontractkit/chainlink/commit/2761cd5bc5ed91bc17d4d67265ddc8fa03b84540) Thanks [@Farber98](https://github.com/Farber98)! - FilteredLogs receive Expression instead of whole KeyFilter. #internal + +- [#14239](https://github.com/smartcontractkit/chainlink/pull/14239) [`674eac31cc`](https://github.com/smartcontractkit/chainlink/commit/674eac31cc161250fdadb838ba2a0fc7c796e932) Thanks [@bolekk](https://github.com/bolekk)! - #added Implements rate limiter for capabilities dispatcher + +- [#14470](https://github.com/smartcontractkit/chainlink/pull/14470) [`5885454e9a`](https://github.com/smartcontractkit/chainlink/commit/5885454e9a7eaa8f8c180ac3708afbdf5bdb08cd) Thanks [@austinborn](https://github.com/austinborn)! - #changed: Add new OCR3DataFeeds telemetry type for Mercury jobs + +- [#14266](https://github.com/smartcontractkit/chainlink/pull/14266) [`c323e0d600`](https://github.com/smartcontractkit/chainlink/commit/c323e0d600c659a4ea584dbae0a0db187afd51eb) Thanks [@asoliman92](https://github.com/asoliman92)! - #updated move latest capabilities code from ccip repo to chainlink repo [CCIP-2946] + + PR issue: CCIP-2946 + +- [#14197](https://github.com/smartcontractkit/chainlink/pull/14197) [`7f69993c86`](https://github.com/smartcontractkit/chainlink/commit/7f69993c8655053b7550f50b817ba9c6888037e2) Thanks [@graham-chainlink](https://github.com/graham-chainlink)! - #changed Connect to multiple feeds managers on app start instead of just one (default to first) + +- [#14373](https://github.com/smartcontractkit/chainlink/pull/14373) [`5acca3719e`](https://github.com/smartcontractkit/chainlink/commit/5acca3719ecd7a3189db3a8a8d09418ed8423016) Thanks [@huangzhen1997](https://github.com/huangzhen1997)! - This PR introduce few changes: + + - Add a new config option `EVM.NodePool.NewHeadsPollInterval` (0 by default indicate disabled), which is an interval for polling new block periodically using http client rather than subscribe to ws feed. + - Updated new head handler for polling new head over http, and register the subscription in node lifecycle logic. + - If the polling new heads is enabled, WS new heads subscription will be replaced with the new http based polling. + + Note: There will be another PR for making WS URL optional with some extra condition. + #added + +- [#14438](https://github.com/smartcontractkit/chainlink/pull/14438) [`6814bcef45`](https://github.com/smartcontractkit/chainlink/commit/6814bcef45a7157ac9835c25a9a5b95a135bdc01) Thanks [@graham-chainlink](https://github.com/graham-chainlink)! - #internal Update to latest UI - PeerId field is introduced for OCR2 bootstrap node in chain config page + +- [#14354](https://github.com/smartcontractkit/chainlink/pull/14354) [`bf6618da8a`](https://github.com/smartcontractkit/chainlink/commit/bf6618da8aa9695c747b81df172acdd43e379cb2) Thanks [@huangzhen1997](https://github.com/huangzhen1997)! - Adding feature flag for `LogBroadcaster` called `LogBroadcasterEnabled`, which is `true` by default to support backwards compatibility. + Adding `LogBroadcasterEnabled` allows certain chains to completely disable the `LogBroadcaster` feature, which is an old feature (getting replaced by logPoller) that only few products are using it: + + - OCR1 Median + - \*OCR2 Median when ChainReader is disabled + - \*pre-OCR2 Keeper + - Flux Monitor + - Direct RequestOCR1 Median + + #added + +- [#13735](https://github.com/smartcontractkit/chainlink/pull/13735) [`920413c3ce`](https://github.com/smartcontractkit/chainlink/commit/920413c3ce2ca8effc138e69ec063b0ce5e94c6b) Thanks [@silaslenihan](https://github.com/silaslenihan)! - #internal Added ChainWriter to ChainReader tests + +- [#14041](https://github.com/smartcontractkit/chainlink/pull/14041) [`8d818ea265`](https://github.com/smartcontractkit/chainlink/commit/8d818ea265ff08887e61ace4f83364a3ee149ef0) Thanks [@amit-momin](https://github.com/amit-momin)! - Added gas limit estimation feature to EVM gas estimators. Introduced a new config `EVM.GasEstimator.EstimateLimit` to toggle this feature. #added + +- [#14207](https://github.com/smartcontractkit/chainlink/pull/14207) [`328b62ae50`](https://github.com/smartcontractkit/chainlink/commit/328b62ae5067619e59da42f6db6703d3b327f1a2) Thanks [@ilija42](https://github.com/ilija42)! - #internal Implement EVM ChainReader ValueComparator filtering by non-indexed event data. Right now only simple non indexed data where byte offsets don't exist is supported. + + PR issue: BCFR-203 + +- [#14197](https://github.com/smartcontractkit/chainlink/pull/14197) [`7f69993c86`](https://github.com/smartcontractkit/chainlink/commit/7f69993c8655053b7550f50b817ba9c6888037e2) Thanks [@graham-chainlink](https://github.com/graham-chainlink)! - #changed Allow registration of more than 1 feeds manager on CreateFeedsManager + +- [#14394](https://github.com/smartcontractkit/chainlink/pull/14394) [`28989b30d9`](https://github.com/smartcontractkit/chainlink/commit/28989b30d94bbd3490330cd8e50e7d9223d33cff) Thanks [@ilija42](https://github.com/ilija42)! - #internal Implement LatestHead for ChainService + +- [#14234](https://github.com/smartcontractkit/chainlink/pull/14234) [`a234e14ebd`](https://github.com/smartcontractkit/chainlink/commit/a234e14ebd266269b4d5893b0d2aeeb01bc58a70) Thanks [@huangzhen1997](https://github.com/huangzhen1997)! - use new estimation for insufficient fund instead of retry to overcome gas spike #internal + +- [#14369](https://github.com/smartcontractkit/chainlink/pull/14369) [`e51472763d`](https://github.com/smartcontractkit/chainlink/commit/e51472763da4039242ebd4c3939ab44c87e595d1) Thanks [@archseer](https://github.com/archseer)! - Small fixes to multichain keyring adapter #internal + +- [#13833](https://github.com/smartcontractkit/chainlink/pull/13833) [`1ea9f79793`](https://github.com/smartcontractkit/chainlink/commit/1ea9f79793f646977b44e38a34b2e70c28b2849e) Thanks [@dimriou](https://github.com/dimriou)! - Introduce new gas estimator #internal + +- [#14110](https://github.com/smartcontractkit/chainlink/pull/14110) [`8454f46db1`](https://github.com/smartcontractkit/chainlink/commit/8454f46db1985c0a4968b4eb5e0a4a6b81dfef5c) Thanks [@jmank88](https://github.com/jmank88)! - #added Full Open Telemetry support, configurable via `Telemetry` + +- [#14504](https://github.com/smartcontractkit/chainlink/pull/14504) [`10f7aabc29`](https://github.com/smartcontractkit/chainlink/commit/10f7aabc2972615cae4edd8f3532ad6aea521cee) Thanks [@austinborn](https://github.com/austinborn)! - #bugfix Fix potential nil ptr reference for LinkFeedID and NativeFeedID in Mercury specs + #bugfix Ensure Streams PluginConfig is checked for contents correctly when validated + #changed New Feed IDs with 0x01 prefix can be parsed for Mercury report schemas + +- [#14370](https://github.com/smartcontractkit/chainlink/pull/14370) [`882cdce681`](https://github.com/smartcontractkit/chainlink/commit/882cdce6811a952a38c61c3fb88349990d635d59) Thanks [@dimriou](https://github.com/dimriou)! - Remove PriceMin and TipCapMin check from attempt builder #internal + +- [#13888](https://github.com/smartcontractkit/chainlink/pull/13888) [`37c5a2ff29`](https://github.com/smartcontractkit/chainlink/commit/37c5a2ff29ad1fe661547777e60a077430530be9) Thanks [@karen-stepanyan](https://github.com/karen-stepanyan)! - #updated mercury plugin to consider PluginConfig as optional if EnableTriggerCapability relay config is true. Then if PluginConfig is nil, skip fetching latestPrice for linkFeedId and nativeFeedId. + +### Patch Changes + +- [#14350](https://github.com/smartcontractkit/chainlink/pull/14350) [`070b272f30`](https://github.com/smartcontractkit/chainlink/commit/070b272f30054be6d4239d078121ca3b3054fc33) Thanks [@DeividasK](https://github.com/DeividasK)! - #internal + +- [#14317](https://github.com/smartcontractkit/chainlink/pull/14317) [`72f4cc8aaa`](https://github.com/smartcontractkit/chainlink/commit/72f4cc8aaa128202fd5974c6dbfb29c6beb1be12) Thanks [@ettec](https://github.com/ettec)! - #internal changes required for capability api chance to sync + +- [#14471](https://github.com/smartcontractkit/chainlink/pull/14471) [`a9a4f746bf`](https://github.com/smartcontractkit/chainlink/commit/a9a4f746bf3e18d2bf9228d591166c437d5a9e6a) Thanks [@matYang](https://github.com/matYang)! - #changed Make Mantle use default OP stack l1 gas oracle in core + +- [#14416](https://github.com/smartcontractkit/chainlink/pull/14416) [`3c5bdf8d4b`](https://github.com/smartcontractkit/chainlink/commit/3c5bdf8d4b2244b3826ab54a56ec172bb9a8459c) Thanks [@dimkouv](https://github.com/dimkouv)! - RMNCrypto evm implementation for CCIP - RMN Integration #added + +- [#14313](https://github.com/smartcontractkit/chainlink/pull/14313) [`b71e692e7b`](https://github.com/smartcontractkit/chainlink/commit/b71e692e7ba8523ec57ea5e10c5d9c6810e038e5) Thanks [@ferglor](https://github.com/ferglor)! - Use a lock to sync access to the ConfigDigest #internal + +- [#14423](https://github.com/smartcontractkit/chainlink/pull/14423) [`0187f18ba6`](https://github.com/smartcontractkit/chainlink/commit/0187f18ba62b44d4c8ff20f07ef8dfd6e0d7b451) Thanks [@asoliman92](https://github.com/asoliman92)! - #updated refactor ccip oracle creator + +- [#14314](https://github.com/smartcontractkit/chainlink/pull/14314) [`8fa3ebee3e`](https://github.com/smartcontractkit/chainlink/commit/8fa3ebee3e0ce09bf2e8270ab46c168756d25db0) Thanks [@DeividasK](https://github.com/DeividasK)! - #internal validate capability trigger event ID before executing + +- [#14366](https://github.com/smartcontractkit/chainlink/pull/14366) [`27d5cbf578`](https://github.com/smartcontractkit/chainlink/commit/27d5cbf5787531d541ba774397b3abdfcb8b20a7) Thanks [@dhaidashenko](https://github.com/dhaidashenko)! - LogPoller polls logs even if chain have not reached finality #internal + +- [#14401](https://github.com/smartcontractkit/chainlink/pull/14401) [`f6443a14e8`](https://github.com/smartcontractkit/chainlink/commit/f6443a14e836523dfa8a78b1b98a00999832f204) Thanks [@george-dorin](https://github.com/george-dorin)! - #updated Changed TelemetryIngress.UniConn default to false + +- [#14282](https://github.com/smartcontractkit/chainlink/pull/14282) [`1a2b7b61cb`](https://github.com/smartcontractkit/chainlink/commit/1a2b7b61cbd22256e4e29e891a74228fa453fc9d) Thanks [@amit-momin](https://github.com/amit-momin)! - Updated TXM Confirmer logic to resume pending task runs with failure if transaction is terminally stuck #internal + +- [#14325](https://github.com/smartcontractkit/chainlink/pull/14325) [`b1c59ddfe3`](https://github.com/smartcontractkit/chainlink/commit/b1c59ddfe31d53be6669df8f1cf246b222fbe3b0) Thanks [@DavidOrchard](https://github.com/DavidOrchard)! - configuration updates + +- [#14486](https://github.com/smartcontractkit/chainlink/pull/14486) [`1d6a88ee73`](https://github.com/smartcontractkit/chainlink/commit/1d6a88ee7313ccb857db3995d7d6ed363d7d6589) Thanks [@simsonraj](https://github.com/simsonraj)! - #added Soneium testnet chain configs + +- [#14315](https://github.com/smartcontractkit/chainlink/pull/14315) [`adb3c95799`](https://github.com/smartcontractkit/chainlink/commit/adb3c957993f9f022db395fd54e65528631c1030) Thanks [@friedemannf](https://github.com/friedemannf)! - Handle zkEVM node level OOC error as TerminallyStuck #internal + +- [#14541](https://github.com/smartcontractkit/chainlink/pull/14541) [`d9894d129d`](https://github.com/smartcontractkit/chainlink/commit/d9894d129d12204bdb14dcb0a7ce42fd19205a6d) Thanks [@friedemannf](https://github.com/friedemannf)! - #added #nops Add Zircuit Configs + +- [#14241](https://github.com/smartcontractkit/chainlink/pull/14241) [`7c248e7c46`](https://github.com/smartcontractkit/chainlink/commit/7c248e7c466ad278b0024e4ac743813009b16805) Thanks [@cds95](https://github.com/cds95)! - #internal index don ID in ConfigSet event + +- [#14543](https://github.com/smartcontractkit/chainlink/pull/14543) [`c4fa565f54`](https://github.com/smartcontractkit/chainlink/commit/c4fa565f5441bfa997907256e1990f9be276934d) Thanks [@DeividasK](https://github.com/DeividasK)! - #internal + +- [#14129](https://github.com/smartcontractkit/chainlink/pull/14129) [`85a8d09845`](https://github.com/smartcontractkit/chainlink/commit/85a8d09845d6bd30f62b1de4bf8c62f3a77a6c8e) Thanks [@simsonraj](https://github.com/simsonraj)! - #added Hedera configs + +- [#14252](https://github.com/smartcontractkit/chainlink/pull/14252) [`8490c9610b`](https://github.com/smartcontractkit/chainlink/commit/8490c9610b1208f3efafe29587032679e5727247) Thanks [@martin-cll](https://github.com/martin-cll)! - Remove bid/ask fields for Mercury v4 schema #internal + +- [#14516](https://github.com/smartcontractkit/chainlink/pull/14516) [`0e32c07d22`](https://github.com/smartcontractkit/chainlink/commit/0e32c07d22973343e722a228ff1c3b1e8f9bc04e) Thanks [@mateusz-sekara](https://github.com/mateusz-sekara)! - Adding USDCReaderTester contract for CCIP integration tests #internal + +- [#14345](https://github.com/smartcontractkit/chainlink/pull/14345) [`c83c68735b`](https://github.com/smartcontractkit/chainlink/commit/c83c68735bdee6bbd8510733b7415797cd08ecbd) Thanks [@makramkd](https://github.com/makramkd)! - #internal merge ccip contracts + +- [#14392](https://github.com/smartcontractkit/chainlink/pull/14392) [`3f83f9e8e6`](https://github.com/smartcontractkit/chainlink/commit/3f83f9e8e66029c78a52e2c1eeb5dfb95a615f55) Thanks [@kalverra](https://github.com/kalverra)! - #added Adds the ability to use out of order execution transactions in CCIP E2E tests + +- [#14318](https://github.com/smartcontractkit/chainlink/pull/14318) [`544ded0afa`](https://github.com/smartcontractkit/chainlink/commit/544ded0afa685de146da215a949ad08b3667bb99) Thanks [@winder](https://github.com/winder)! - #internal ccip reader nonces work. + +- [#13992](https://github.com/smartcontractkit/chainlink/pull/13992) [`c1878f7374`](https://github.com/smartcontractkit/chainlink/commit/c1878f7374b7fb2de450c83b6dcae62d2a36f3bf) Thanks [@EasterTheBunny](https://github.com/EasterTheBunny)! - #internal `ContractReader` interface update to accept `BoundContract` for all methods + +- [#14130](https://github.com/smartcontractkit/chainlink/pull/14130) [`31874ba5a4`](https://github.com/smartcontractkit/chainlink/commit/31874ba5a4abbc2dca7b985f04019485a339a71c) Thanks [@dhaidashenko](https://github.com/dhaidashenko)! - Optimize HeadTracker's memory usage #internal + +- [#14474](https://github.com/smartcontractkit/chainlink/pull/14474) [`aa04bfab89`](https://github.com/smartcontractkit/chainlink/commit/aa04bfab8950f001b92635388b2fb63ab1bbcec9) Thanks [@dimkouv](https://github.com/dimkouv)! - bump chainlink-ccip #updated + +- [#14488](https://github.com/smartcontractkit/chainlink/pull/14488) [`700dd7c074`](https://github.com/smartcontractkit/chainlink/commit/700dd7c074706b1a5fa89328876bdc4f3d39e025) Thanks [@ettec](https://github.com/ettec)! - #internal add support for values.Value type in the contract reader GetLatestValue and QueryKey methods + +- [#14361](https://github.com/smartcontractkit/chainlink/pull/14361) [`3a89dceab7`](https://github.com/smartcontractkit/chainlink/commit/3a89dceab79217880625f7af75db0d798cf79488) Thanks [@dhaidashenko](https://github.com/dhaidashenko)! - Use tx in insertLogsWithinTx #internal + +- [#14258](https://github.com/smartcontractkit/chainlink/pull/14258) [`7905901c40`](https://github.com/smartcontractkit/chainlink/commit/7905901c40fc6ab7c65066d02e2d63324e2d640f) Thanks [@ettec](https://github.com/ettec)! - #internal gas limit default value + +- [#14415](https://github.com/smartcontractkit/chainlink/pull/14415) [`d2d9568318`](https://github.com/smartcontractkit/chainlink/commit/d2d9568318abe0ce88bc12a1308e0e96131b0223) Thanks [@martin-cll](https://github.com/martin-cll)! - Skip telemetry for market-status bridges #internal + +- [#14484](https://github.com/smartcontractkit/chainlink/pull/14484) [`d2a01ca51b`](https://github.com/smartcontractkit/chainlink/commit/d2a01ca51bb4a7654d2ceb4f5c25f2ca2de3df11) Thanks [@ogtownsend](https://github.com/ogtownsend)! - #internal KMS client for deployment + +- [#14398](https://github.com/smartcontractkit/chainlink/pull/14398) [`52b480fcc5`](https://github.com/smartcontractkit/chainlink/commit/52b480fcc53bf0162cb3aa04cc13f946babb643a) Thanks [@bolekk](https://github.com/bolekk)! - #added [Keystone] Batch identical trigger events + +- [#14355](https://github.com/smartcontractkit/chainlink/pull/14355) [`356c70cb80`](https://github.com/smartcontractkit/chainlink/commit/356c70cb8079b1052faa45d0c53fa1d8212db355) Thanks [@samsondav](https://github.com/samsondav)! - #changed + + Productionize transmitter for LLO + + Note that some minor changes to prometheus metrics will occur in the transition to LLO. Since feed IDs no longer apply, the metrics for transmissions change as follows: + + ``` + "mercury_transmit_*" + []string{"feedID", ...}, + ``` + + Will change to: + + ``` + "llo_mercury_transmit_*" + []string{"donID", ...}, + ``` + +- [#14352](https://github.com/smartcontractkit/chainlink/pull/14352) [`718e885a53`](https://github.com/smartcontractkit/chainlink/commit/718e885a53d003e16f6bc2d1be5596e63ac88b24) Thanks [@winder](https://github.com/winder)! - #internal update chainlink-ccip version + +- [#14161](https://github.com/smartcontractkit/chainlink/pull/14161) [`2b1e8ad51b`](https://github.com/smartcontractkit/chainlink/commit/2b1e8ad51b98aa41eca78758d2041ffcd7fba94a) Thanks [@friedemannf](https://github.com/friedemannf)! - Enable FeeHistory estimator for Polygon zkEVM #nops + +- [#14367](https://github.com/smartcontractkit/chainlink/pull/14367) [`cd8be702ff`](https://github.com/smartcontractkit/chainlink/commit/cd8be702ffdaef0a9176da977411ab237e544da5) Thanks [@bolekk](https://github.com/bolekk)! - Support per-method handlers in GatewayConnector + +- [#14298](https://github.com/smartcontractkit/chainlink/pull/14298) [`85b33fd9ac`](https://github.com/smartcontractkit/chainlink/commit/85b33fd9acbd342d25bd84804d08451ab2590b97) Thanks [@AnieeG](https://github.com/AnieeG)! - moved deployments ccip tooling from ccip repo to chainlink repo #added + +- [#14281](https://github.com/smartcontractkit/chainlink/pull/14281) [`73c41d1f27`](https://github.com/smartcontractkit/chainlink/commit/73c41d1f27ac43ec6ed6a27368776b187c5e5e45) Thanks [@eutopian](https://github.com/eutopian)! - skip checking isJobManaged if the proposal in fms has already been deleted #changed + +- [#14467](https://github.com/smartcontractkit/chainlink/pull/14467) [`358fc17d5b`](https://github.com/smartcontractkit/chainlink/commit/358fc17d5b5149d962002225cee7c44215cc77d4) Thanks [@akuzni2](https://github.com/akuzni2)! - #added + + - Adds support for "tags" to Tasks that can be used generically. + - Adds a descendent task search method + - Added support in Mercury EA telemetry to utilize tags for telemetry extraction + +- [#14418](https://github.com/smartcontractkit/chainlink/pull/14418) [`a2c03fc380`](https://github.com/smartcontractkit/chainlink/commit/a2c03fc380ca5919bf2f33f771a6efd98a6f4103) Thanks [@mateusz-sekara](https://github.com/mateusz-sekara)! - Updating CCIP OCR3 integration tests according to changes in the chainlink-ccip repo #internal + +- [#14357](https://github.com/smartcontractkit/chainlink/pull/14357) [`ac3523aaa4`](https://github.com/smartcontractkit/chainlink/commit/ac3523aaa4cee6f30b9ac0f25cc7cce559067594) Thanks [@AnieeG](https://github.com/AnieeG)! - #internal Add ccip JobType in feeds service and other jobtype validations + +- [#14461](https://github.com/smartcontractkit/chainlink/pull/14461) [`22a8c993ae`](https://github.com/smartcontractkit/chainlink/commit/22a8c993ae6ae6ee69626bd239ba2a419fbad450) Thanks [@asoliman92](https://github.com/asoliman92)! - #added feed deployment to ccip integration tests + ## 2.16.0 - 2024-09-23 ### Minor Changes diff --git a/package.json b/package.json index 89494370e06..0382ca4e5cb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "chainlink", - "version": "2.16.0", + "version": "2.17.0", "description": "node of the decentralized oracle network, bridging on and off-chain computation", "main": "index.js", "scripts": { From 8c9bd82f7d336631c94ceed7f1ec895ff9057564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Deividas=20Kar=C5=BEinauskas?= Date: Wed, 25 Sep 2024 19:17:43 +0300 Subject: [PATCH 3/3] Fix Keystone Solidity issues (#14565) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remove forge from mock contract * Remove console and fix MaliciousRevertingReceiver for coverage 🤔 --- .../v0.8/keystone/test/KeystoneForwarder_ReportTest.t.sol | 1 - .../v0.8/keystone/test/mocks/MaliciousRevertingReceiver.sol | 6 ++---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/contracts/src/v0.8/keystone/test/KeystoneForwarder_ReportTest.t.sol b/contracts/src/v0.8/keystone/test/KeystoneForwarder_ReportTest.t.sol index 7751aa40a66..c6dc7fca538 100644 --- a/contracts/src/v0.8/keystone/test/KeystoneForwarder_ReportTest.t.sol +++ b/contracts/src/v0.8/keystone/test/KeystoneForwarder_ReportTest.t.sol @@ -6,7 +6,6 @@ import {IRouter} from "../interfaces/IRouter.sol"; import {MaliciousReportReceiver} from "./mocks/MaliciousReportReceiver.sol"; import {MaliciousRevertingReceiver} from "./mocks/MaliciousRevertingReceiver.sol"; import {KeystoneForwarder} from "../KeystoneForwarder.sol"; -import {console} from "forge-std/console.sol"; contract KeystoneForwarder_ReportTest is BaseTest { event MessageReceived(bytes metadata, bytes[] mercuryReports); diff --git a/contracts/src/v0.8/keystone/test/mocks/MaliciousRevertingReceiver.sol b/contracts/src/v0.8/keystone/test/mocks/MaliciousRevertingReceiver.sol index 3efb5d89ccd..d128b4a751e 100644 --- a/contracts/src/v0.8/keystone/test/mocks/MaliciousRevertingReceiver.sol +++ b/contracts/src/v0.8/keystone/test/mocks/MaliciousRevertingReceiver.sol @@ -3,11 +3,10 @@ pragma solidity 0.8.24; import {IERC165} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/interfaces/IERC165.sol"; import {IReceiver} from "../../interfaces/IReceiver.sol"; -import {Test} from "forge-std/Test.sol"; /// A malicious receiver that uses max allowed for ERC165 checks and consumes all gas in `onReport()` /// Causes parent Forwarder contract to revert if it doesn't handle gas tracking accurately -contract MaliciousRevertingReceiver is IReceiver, IERC165, Test { +contract MaliciousRevertingReceiver is IReceiver, IERC165 { function onReport(bytes calldata, bytes calldata) external view override { // consumes about 63/64 of all gas available uint256 targetGasRemaining = 200; @@ -16,8 +15,7 @@ contract MaliciousRevertingReceiver is IReceiver, IERC165, Test { function supportsInterface(bytes4 interfaceId) public pure override returns (bool) { // Consume up to the maximum amount of gas that can be consumed in this check - // This loop consumes roughly 29_000 gas - for (uint256 i = 0; i < 670; i++) {} + for (uint256 i = 0; i < 500; i++) {} return interfaceId == type(IReceiver).interfaceId || interfaceId == type(IERC165).interfaceId; }