diff --git a/.changeset/aptos-init-mock-trigger.md b/.changeset/aptos-init-mock-trigger.md deleted file mode 100644 index 1649d9f16db..00000000000 --- a/.changeset/aptos-init-mock-trigger.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"chainlink": patch ---- - -#internal -Forward-port the Aptos mock streams trigger compatibility path onto `develop` behind explicit local capability opt-in. diff --git a/.changeset/minor-bump-1776807784.md b/.changeset/minor-bump-1776807784.md deleted file mode 100644 index cd0ab0f3f81..00000000000 --- a/.changeset/minor-bump-1776807784.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chainlink": minor ---- - -Minor bump to start next version diff --git a/.github/actionlint.yml b/.github/actionlint.yml deleted file mode 100644 index 671945d1baf..00000000000 --- a/.github/actionlint.yml +++ /dev/null @@ -1,10 +0,0 @@ -# See https://github.com/rhysd/actionlint/blob/main/docs/config.md - -paths: - .github/workflows/**/*.{yml,yaml}: - ignore: - # ignore unknown runner labels, as we have fully custom runners - - 'label ".*" is unknown. available labels are .*' - # https://www.shellcheck.net/wiki/SC2129 - - '.*SC2129:style:1:1:.*' - diff --git a/.github/workflows/build-publish.yml b/.github/workflows/build-publish.yml index 3598c7eeb70..9dec338df50 100644 --- a/.github/workflows/build-publish.yml +++ b/.github/workflows/build-publish.yml @@ -44,9 +44,7 @@ jobs: - name: Detect prerelease phase id: detect-prerelease-phase - if: ${{ steps.release-tag-check.outputs.is-pre-release == 'true' && - (contains(github.ref_name, '-beta.') || contains(github.ref_name, - '-rc.')) }} + if: ${{ steps.release-tag-check.outputs.is-pre-release == 'true' && (contains(github.ref_name, '-beta.') || contains(github.ref_name, '-rc.')) }} shell: bash env: GIT_TAG: ${{ github.ref_name }} @@ -91,7 +89,7 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} docker-core: - needs: [ checks ] + needs: [checks] # No need to build the final image as we promote the last RC to use the final tag # so we only run the builds for pre-releases. if: needs.checks.outputs.is-pre-release == 'true' @@ -113,8 +111,7 @@ jobs: docker-cache-behaviour: "disable" docker-manifest-sign: true docker-registry-url-override: public.ecr.aws/chainlink - github-runner-arm64: ${{ github.repository != 'smartcontractkit/chainlink' && - 'ubuntu-24.04-4cores-16GB-ARM' || 'ubuntu-24.04-arm' }} + github-runner-arm64: ${{ github.repository != 'smartcontractkit/chainlink' && 'ubuntu-24.04-4cores-16GB-ARM' || 'ubuntu-24.04-arm' }} docker-image-tag-strip-prefix: v # strip out the "v" prefix from the git tag for the image tag. git-sha: ${{ github.sha }} github-event-name: ${{ github.event_name }} @@ -128,7 +125,7 @@ jobs: AWS_LAMBDA_GATI_URL: ${{ secrets.AWS_INFRA_RELENG_TOKEN_ISSUER_LAMBDA_URL }} docker-ccip: - needs: [ checks ] + needs: [checks] # No need to build the final image as we promote the last RC to use the final tag # so we only run the builds for pre-releases. if: needs.checks.outputs.is-pre-release == 'true' @@ -153,8 +150,7 @@ jobs: docker-cache-behaviour: "disable" docker-manifest-sign: true docker-registry-url-override: public.ecr.aws/chainlink - github-runner-arm64: ${{ github.repository != 'smartcontractkit/chainlink' && - 'ubuntu-24.04-4cores-16GB-ARM' || 'ubuntu-24.04-arm' }} + github-runner-arm64: ${{ github.repository != 'smartcontractkit/chainlink' && 'ubuntu-24.04-4cores-16GB-ARM' || 'ubuntu-24.04-arm' }} docker-image-tag-override: ${{ needs.checks.outputs.ccip-image-tag }} git-sha: ${{ github.sha }} github-event-name: ${{ github.event_name }} @@ -169,10 +165,9 @@ jobs: deploy: name: "Deploy" - needs: [ checks, docker-ccip ] + needs: [checks, docker-ccip] # We are only deploying CCIP pre-releases and skipping hotfix deployments for now. - if: needs.checks.outputs.is-pre-release == 'true' && - needs.checks.outputs.is-hotfix == 'false' + if: needs.checks.outputs.is-pre-release == 'true' && needs.checks.outputs.is-hotfix == 'false' runs-on: ubuntu-latest permissions: contents: read @@ -212,80 +207,28 @@ jobs: products: | ccip-prereleases-prod-testnet - emit-pre-release-image-published-event: - name: Emit pre-release image published event - needs: [ docker-core ] - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - name: Emit pre-release image published event - env: - DOCKER_MANIFEST_TAG: ${{ needs.docker-core.outputs.docker-manifest-tag }} - GITHUB_REF_NAME: ${{ github.ref_name }} - GH_TOKEN: ${{ github.token }} - run: | - gh api \ - --method POST \ - -H "Accept: application/vnd.github+json" \ - "/repos/${GITHUB_REPOSITORY}/dispatches" \ - --input - < 2.34.0 - tag_without_v="${GIT_TAG#v}" - echo "image-tag=$tag_without_v" | tee -a "$GITHUB_OUTPUT" - - name: Emit release image tagged event - env: - DOCKER_IMAGE_TAG: ${{ steps.compute-image-tag.outputs.image-tag }} - GITHUB_REF_NAME: ${{ github.ref_name }} - GH_TOKEN: ${{ github.token }} - run: | - gh api \ - --method POST \ - -H "Accept: application/vnd.github+json" \ - "/repos/${GITHUB_REPOSITORY}/dispatches" \ - --input - < workflowID mapping - triggerConfigs map[string]*crontypedapi.Config - scheduler gocron.Scheduler } -func NewManualCronTriggerService(parentLggr logger.Logger) (*ManualCronTriggerService, error) { +func NewManualCronTriggerService(parentLggr logger.Logger) *ManualCronTriggerService { lggr := logger.Named(parentLggr, "CronTriggerService") // ManualCronTriggerService - scheduler, err := gocron.NewScheduler() - if err != nil { - return nil, fmt.Errorf("failed to create cron scheduler: %w", err) - } - return &ManualCronTriggerService{ CapabilityInfo: manualCronTriggerInfo, config: ManualCronConfig{FastestScheduleIntervalSeconds: 1}, @@ -64,9 +55,7 @@ func NewManualCronTriggerService(parentLggr logger.Logger) (*ManualCronTriggerSe callbackCh: make(map[string]chan capabilities.TriggerAndId[*crontypedapi.Payload]), legacyCallbackCh: make(chan capabilities.TriggerAndId[*crontypedapi.LegacyPayload]), //nolint:staticcheck // LegacyPayload intentionally used for backward compatibility workflowIDs: make(map[string]string), - triggerConfigs: make(map[string]*crontypedapi.Config), - scheduler: scheduler, - }, nil + } } func (f *ManualCronTriggerService) Initialise(ctx context.Context, dependencies core.StandardCapabilitiesDependencies) error { @@ -86,7 +75,8 @@ func (f *ManualCronTriggerService) Initialise(ctx context.Context, dependencies f.config = cronConfig - if err := f.Start(ctx); err != nil { + err := f.Start(ctx) + if err != nil { return fmt.Errorf("error when starting trigger service: %w", err) } @@ -94,9 +84,8 @@ func (f *ManualCronTriggerService) Initialise(ctx context.Context, dependencies } func (f *ManualCronTriggerService) RegisterTrigger(ctx context.Context, triggerID string, metadata capabilities.RequestMetadata, input *crontypedapi.Config) (<-chan capabilities.TriggerAndId[*crontypedapi.Payload], caperrors.Error) { - f.callbackCh[triggerID] = make(chan capabilities.TriggerAndId[*crontypedapi.Payload], 1) + f.callbackCh[triggerID] = make(chan capabilities.TriggerAndId[*crontypedapi.Payload]) f.workflowIDs[triggerID] = metadata.WorkflowID - f.triggerConfigs[triggerID] = input return f.callbackCh[triggerID], nil } @@ -116,28 +105,7 @@ func (f *ManualCronTriggerService) AckEvent(ctx context.Context, triggerID strin return nil } -func (f *ManualCronTriggerService) ManualTrigger(ctx context.Context, triggerID string, skipWait <-chan struct{}) error { - config, exists := f.triggerConfigs[triggerID] - if !exists { - return fmt.Errorf(`trigger config "%s" not found`, triggerID) - } - - jobFired := make(chan struct{}, 1) - job, err := f.scheduler.NewJob( - gocron.CronJob(config.Schedule, allowSeconds), - gocron.NewTask(func() { - defer close(jobFired) - jobFired <- struct{}{} - }), - ) - if err != nil { - return fmt.Errorf("failed to create cron job: %w", err) - } - scheduledExecutionTime, err := job.NextRun() - if err != nil { - return fmt.Errorf("failed to get next scheduled execution time: %w", err) - } - +func (f *ManualCronTriggerService) ManualTrigger(ctx context.Context, triggerID string, scheduledExecutionTime time.Time) error { f.lggr.Debugf("ManualTrigger: %s", scheduledExecutionTime.Format(time.RFC3339Nano)) triggerEvent := f.createManualTriggerEvent(scheduledExecutionTime) @@ -160,22 +128,16 @@ func (f *ManualCronTriggerService) ManualTrigger(ctx context.Context, triggerID f.lggr.Errorw("failed to emit trigger execution started event", "err", err) } - defer func() { - _ = f.scheduler.RemoveJob(job.ID()) + go func() { + select { + case f.callbackCh[triggerID] <- triggerEvent: + // Successfully sent trigger response + case <-ctx.Done(): + // Context cancelled, cleanup goroutine + f.lggr.Debug("ManualTrigger goroutine cancelled due to context cancellation") + } }() - // Either wait for cron scheduler or skip wait signal - select { - case <-skipWait: - break - case <-jobFired: - break - case <-ctx.Done(): - return ctx.Err() - } - - // Sent trigger response - f.callbackCh[triggerID] <- triggerEvent return nil } @@ -199,15 +161,11 @@ func (f *ManualCronTriggerService) createManualTriggerEvent(scheduledExecutionTi func (f *ManualCronTriggerService) Start(ctx context.Context) error { f.lggr.Debugw("Starting ManualCronTriggerService") - f.scheduler.Start() return nil } func (f *ManualCronTriggerService) Close() error { f.lggr.Debug("Closing ManualCronTriggerService") - if err := f.scheduler.Shutdown(); err != nil { - f.lggr.Errorw("failed to close scheduler", "err", err) - } return nil } diff --git a/core/capabilities/launcher.go b/core/capabilities/launcher.go index 921ca1cf0a1..1f15ddd8087 100644 --- a/core/capabilities/launcher.go +++ b/core/capabilities/launcher.go @@ -501,7 +501,7 @@ func (w *launcher) addRemoteCapability(ctx context.Context, cid string, capabili methodConfig := capabilityConfig.CapabilityMethodConfig if methodConfig != nil { // v2 capability - handle via CombinedClient - errAdd := w.addRemoteCapabilityV2(ctx, capability.ID, methodConfig, myDON, remoteDON, localRegistry) + errAdd := w.addRemoteCapabilityV2(ctx, capability.ID, methodConfig, myDON, remoteDON) if errAdd != nil { return fmt.Errorf("failed to add remote v2 capability %s: %w", capability.ID, errAdd) } @@ -592,7 +592,7 @@ func (w *launcher) addRemoteCapability(ctx context.Context, cid string, capabili w.cachedShims.executableClients[shimKey] = execCap } // V1 capabilities read transmission schedule from every request - if errCfg := execCap.SetConfig(info, myDON.DON, defaultTargetRequestTimeout, nil, nil); errCfg != nil { + if errCfg := execCap.SetConfig(info, myDON.DON, defaultTargetRequestTimeout, nil); errCfg != nil { return nil, fmt.Errorf("failed to set trigger config: %w", errCfg) } return execCap.(capabilityService), nil @@ -618,7 +618,7 @@ func (w *launcher) addRemoteCapability(ctx context.Context, cid string, capabili w.cachedShims.executableClients[shimKey] = execCap } // V1 capabilities read transmission schedule from every request - if errCfg := execCap.SetConfig(info, myDON.DON, defaultTargetRequestTimeout, nil, nil); errCfg != nil { + if errCfg := execCap.SetConfig(info, myDON.DON, defaultTargetRequestTimeout, nil); errCfg != nil { return nil, fmt.Errorf("failed to set trigger config: %w", errCfg) } return execCap.(capabilityService), nil @@ -929,7 +929,7 @@ func signersFor(don registrysyncer.DON, localRegistry *registrysyncer.LocalRegis } // Add a V2 capability with multiple methods, using CombinedClient. -func (w *launcher) addRemoteCapabilityV2(ctx context.Context, capID string, methodConfig map[string]capabilities.CapabilityMethodConfig, myDON registrysyncer.DON, remoteDON registrysyncer.DON, localRegistry *registrysyncer.LocalRegistry) error { +func (w *launcher) addRemoteCapabilityV2(ctx context.Context, capID string, methodConfig map[string]capabilities.CapabilityMethodConfig, myDON registrysyncer.DON, remoteDON registrysyncer.DON) error { info, err := capabilities.NewRemoteCapabilityInfo( capID, capabilities.CapabilityTypeCombined, @@ -984,12 +984,7 @@ func (w *launcher) addRemoteCapabilityV2(ctx context.Context, capID string, meth Schedule: transmission.EnumToString(config.RemoteExecutableConfig.TransmissionSchedule), DeltaStage: config.RemoteExecutableConfig.DeltaStage, } - - signers, err := signersFor(remoteDON, localRegistry) - if err != nil { - return fmt.Errorf("failed to get signers for executable client: %w", err) - } - err = client.SetConfig(info, myDON.DON, config.RemoteExecutableConfig.RequestTimeout, transmissionConfig, signers) + err := client.SetConfig(info, myDON.DON, config.RemoteExecutableConfig.RequestTimeout, transmissionConfig) if err != nil { w.lggr.Errorw("failed to update client config", "capID", capID, "method", method, "error", err) continue diff --git a/core/capabilities/registry.go b/core/capabilities/registry.go index c0790a21ebb..830c201182e 100644 --- a/core/capabilities/registry.go +++ b/core/capabilities/registry.go @@ -83,36 +83,25 @@ func NewRegistry(lggr logger.Logger) *Registry { // interface. It is used when ExternalCapabilitiesRegistry is not available. type TestMetadataRegistry struct { core.UnimplementedCapabilitiesRegistryMetadata - // WorkflowDONF allows local CRE to override the synthetic workflow DON fault - // tolerance for compatibility paths that still expect a multi-signer shape. - WorkflowDONF uint8 } -const ( - testWorkflowDONID = 1 - testWorkflowDONConfigVersion = 1 -) - func (t *TestMetadataRegistry) LocalNode(ctx context.Context) (capabilities.Node, error) { peerID := p2ptypes.PeerID{} - return capabilities.Node{ - PeerID: &peerID, - WorkflowDON: newTestWorkflowDON(peerID, t.WorkflowDONF), - CapabilityDONs: []capabilities.DON{}, - }, nil -} - -func newTestWorkflowDON(peerID p2ptypes.PeerID, faultTolerance uint8) capabilities.DON { - return capabilities.DON{ - ID: testWorkflowDONID, - ConfigVersion: testWorkflowDONConfigVersion, + workflowDON := capabilities.DON{ + ID: 1, + ConfigVersion: 1, Members: []p2ptypes.PeerID{ peerID, }, - F: faultTolerance, + F: 0, IsPublic: false, AcceptsWorkflows: true, } + return capabilities.Node{ + PeerID: &peerID, + WorkflowDON: workflowDON, + CapabilityDONs: []capabilities.DON{}, + }, nil } func (t *TestMetadataRegistry) NodeByPeerID(ctx context.Context, _ p2ptypes.PeerID) (capabilities.Node, error) { diff --git a/core/capabilities/registry_test.go b/core/capabilities/registry_test.go deleted file mode 100644 index 3dfa7b9f547..00000000000 --- a/core/capabilities/registry_test.go +++ /dev/null @@ -1,39 +0,0 @@ -package capabilities - -import ( - "context" - "testing" - - "github.com/stretchr/testify/require" -) - -func TestTestMetadataRegistry_LocalNode_UsesConfiguredWorkflowDONF(t *testing.T) { - t.Parallel() - - tests := []struct { - name string - registry TestMetadataRegistry - expectedDonF uint8 - }{ - { - name: "default workflow DON fault tolerance", - registry: TestMetadataRegistry{}, - expectedDonF: 0, - }, - { - name: "mock trigger workflow DON fault tolerance", - registry: TestMetadataRegistry{WorkflowDONF: 1}, - expectedDonF: 1, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - t.Parallel() - - node, err := tt.registry.LocalNode(context.Background()) - require.NoError(t, err) - require.Equal(t, tt.expectedDonF, node.WorkflowDON.F) - }) - } -} diff --git a/core/capabilities/remote/executable/client.go b/core/capabilities/remote/executable/client.go index 96abdc76eb3..fe664aa6988 100644 --- a/core/capabilities/remote/executable/client.go +++ b/core/capabilities/remote/executable/client.go @@ -46,14 +46,12 @@ type dynamicConfig struct { requestTimeout time.Duration // Has to be set only for V2 capabilities. V1 capabilities read transmission schedule from every request. transmissionConfig *transmission.TransmissionConfig - // Has to be set only for V2 capabilities using OCR. - signers [][]byte } type Client interface { commoncap.ExecutableCapability Receive(ctx context.Context, msg *types.MessageBody) - SetConfig(remoteCapabilityInfo commoncap.CapabilityInfo, localDonInfo commoncap.DON, requestTimeout time.Duration, transmissionConfig *transmission.TransmissionConfig, signers [][]byte) error + SetConfig(remoteCapabilityInfo commoncap.CapabilityInfo, localDonInfo commoncap.DON, requestTimeout time.Duration, transmissionConfig *transmission.TransmissionConfig) error } var _ Client = &client{} @@ -80,7 +78,7 @@ func NewClient(capabilityID string, capMethodName string, dispatcher types.Dispa // SetConfig sets the remote capability configuration dynamically // TransmissionConfig has to be set only for V2 capabilities. V1 capabilities read transmission schedule from every request. -func (c *client) SetConfig(remoteCapabilityInfo commoncap.CapabilityInfo, localDonInfo commoncap.DON, requestTimeout time.Duration, transmissionConfig *transmission.TransmissionConfig, signers [][]byte) error { +func (c *client) SetConfig(remoteCapabilityInfo commoncap.CapabilityInfo, localDonInfo commoncap.DON, requestTimeout time.Duration, transmissionConfig *transmission.TransmissionConfig) error { if remoteCapabilityInfo.ID == "" || remoteCapabilityInfo.ID != c.capabilityID { return fmt.Errorf("capability info provided does not match the client's capabilityID: %s != %s", remoteCapabilityInfo.ID, c.capabilityID) } @@ -100,7 +98,6 @@ func (c *client) SetConfig(remoteCapabilityInfo commoncap.CapabilityInfo, localD localDONInfo: localDonInfo, requestTimeout: requestTimeout, transmissionConfig: transmissionConfig, - signers: signers, }) c.lggr.Infow("SetConfig", "remoteDONName", remoteCapabilityInfo.DON.Name, "remoteDONID", remoteCapabilityInfo.DON.ID, "requestTimeout", requestTimeout, "transmissionConfig", transmissionConfig) return nil @@ -237,7 +234,7 @@ func (c *client) Execute(ctx context.Context, capReq commoncap.CapabilityRequest } req, err := request.NewClientExecuteRequest(ctx, c.lggr, capReq, cfg.remoteCapabilityInfo, cfg.localDONInfo, c.dispatcher, - cfg.requestTimeout, cfg.transmissionConfig, c.capMethodName, cfg.signers) + cfg.requestTimeout, cfg.transmissionConfig, c.capMethodName) if err != nil { return commoncap.CapabilityResponse{}, fmt.Errorf("failed to create client request: %w", err) } diff --git a/core/capabilities/remote/executable/client_test.go b/core/capabilities/remote/executable/client_test.go index 4d82eb85e57..93c463f59c1 100644 --- a/core/capabilities/remote/executable/client_test.go +++ b/core/capabilities/remote/executable/client_test.go @@ -243,7 +243,7 @@ func testClient(t *testing.T, numWorkflowPeers int, workflowNodeResponseTimeout for i := range numWorkflowPeers { workflowPeerDispatcher := broker.NewDispatcherForNode(workflowPeers[i]) caller := executable.NewClient(capInfo.ID, "", workflowPeerDispatcher, lggr) - err := caller.SetConfig(capInfo, workflowDonInfo, workflowNodeResponseTimeout, nil, nil) + err := caller.SetConfig(capInfo, workflowDonInfo, workflowNodeResponseTimeout, nil) require.NoError(t, err) servicetest.Run(t, caller) broker.RegisterReceiverNode(workflowPeers[i], caller) @@ -403,7 +403,7 @@ func TestClient_SetConfig(t *testing.T) { DeltaStage: 10 * time.Millisecond, } - err := client.SetConfig(validCapInfo, validDonInfo, validTimeout, transmissionConfig, nil) + err := client.SetConfig(validCapInfo, validDonInfo, validTimeout, transmissionConfig) require.NoError(t, err) // Verify config was set @@ -418,7 +418,7 @@ func TestClient_SetConfig(t *testing.T) { CapabilityType: commoncap.CapabilityTypeAction, } - err := client.SetConfig(invalidCapInfo, validDonInfo, validTimeout, nil, nil) + err := client.SetConfig(invalidCapInfo, validDonInfo, validTimeout, nil) require.Error(t, err) assert.Contains(t, err.Error(), "capability info provided does not match the client's capabilityID") assert.Contains(t, err.Error(), "different_capability@1.0.0 != test_capability@1.0.0") @@ -431,7 +431,7 @@ func TestClient_SetConfig(t *testing.T) { F: 0, } - err := client.SetConfig(validCapInfo, invalidDonInfo, validTimeout, nil, nil) + err := client.SetConfig(validCapInfo, invalidDonInfo, validTimeout, nil) require.Error(t, err) assert.Contains(t, err.Error(), "empty localDonInfo provided") }) @@ -439,7 +439,7 @@ func TestClient_SetConfig(t *testing.T) { t.Run("successful config update", func(t *testing.T) { // Set initial config initialTimeout := 10 * time.Second - err := client.SetConfig(validCapInfo, validDonInfo, initialTimeout, nil, nil) + err := client.SetConfig(validCapInfo, validDonInfo, initialTimeout, nil) require.NoError(t, err) // Replace with new config @@ -450,7 +450,7 @@ func TestClient_SetConfig(t *testing.T) { F: 1, } - err = client.SetConfig(validCapInfo, newDonInfo, newTimeout, nil, nil) + err = client.SetConfig(validCapInfo, newDonInfo, newTimeout, nil) require.NoError(t, err) // Verify the config was completely replaced @@ -494,7 +494,7 @@ func TestClient_SetConfig_StartClose(t *testing.T) { }) t.Run("start succeeds after config set", func(t *testing.T) { - require.NoError(t, client.SetConfig(validCapInfo, validDonInfo, validTimeout, nil, nil)) + require.NoError(t, client.SetConfig(validCapInfo, validDonInfo, validTimeout, nil)) require.NoError(t, client.Start(ctx)) require.NoError(t, client.Close()) }) @@ -504,12 +504,12 @@ func TestClient_SetConfig_StartClose(t *testing.T) { freshClient := executable.NewClient(capabilityID, "execute", dispatcher, lggr) // Set initial config and start - require.NoError(t, freshClient.SetConfig(validCapInfo, validDonInfo, validTimeout, nil, nil)) + require.NoError(t, freshClient.SetConfig(validCapInfo, validDonInfo, validTimeout, nil)) require.NoError(t, freshClient.Start(ctx)) // Update config while running validCapInfo.Description = "new description" - require.NoError(t, freshClient.SetConfig(validCapInfo, validDonInfo, validTimeout, nil, nil)) + require.NoError(t, freshClient.SetConfig(validCapInfo, validDonInfo, validTimeout, nil)) // Verify config was updated info, err := freshClient.Info(ctx) diff --git a/core/capabilities/remote/executable/endtoend_test.go b/core/capabilities/remote/executable/endtoend_test.go index 2917df3124b..996c0ca4657 100644 --- a/core/capabilities/remote/executable/endtoend_test.go +++ b/core/capabilities/remote/executable/endtoend_test.go @@ -309,7 +309,7 @@ func testRemoteExecutableCapability(ctx context.Context, t *testing.T, underlyin for i := range numWorkflowPeers { workflowPeerDispatcher := broker.NewDispatcherForNode(workflowPeers[i]) workflowNode := executable.NewClient(capInfo.ID, "", workflowPeerDispatcher, lggr) - err := workflowNode.SetConfig(capInfo, workflowDonInfo, workflowNodeTimeout, nil, nil) + err := workflowNode.SetConfig(capInfo, workflowDonInfo, workflowNodeTimeout, nil) require.NoError(t, err) servicetest.Run(t, workflowNode) broker.RegisterReceiverNode(workflowPeers[i], workflowNode) diff --git a/core/capabilities/remote/executable/hasher.go b/core/capabilities/remote/executable/hasher.go index 7373864222d..7d8ba908d2f 100644 --- a/core/capabilities/remote/executable/hasher.go +++ b/core/capabilities/remote/executable/hasher.go @@ -10,7 +10,6 @@ import ( "google.golang.org/protobuf/types/known/anypb" "github.com/smartcontractkit/chainlink-common/pkg/capabilities/pb" - aptoscappb "github.com/smartcontractkit/chainlink-common/pkg/capabilities/v2/chain-capabilities/aptos" evmcappb "github.com/smartcontractkit/chainlink-common/pkg/capabilities/v2/chain-capabilities/evm" solcappb "github.com/smartcontractkit/chainlink-common/pkg/capabilities/v2/chain-capabilities/solana" "github.com/smartcontractkit/chainlink/v2/core/capabilities/remote/types" @@ -129,20 +128,6 @@ func (r *writeReportExcludeSignaturesHasher) Hash(msg *types.MessageBody) ([32]b return [32]byte{}, errors.New("WriteReportRequest.Report is nil") } - wrReq.Report.Sigs = nil // exclude signatures from hash - payload, err = anypb.New(&wrReq) - if err != nil { - return [32]byte{}, fmt.Errorf("failed to marshal WriteReportRequest back to anypb: %w", err) - } - case writeReportFamilyAptos: - var wrReq aptoscappb.WriteReportRequest - if err = req.Payload.UnmarshalTo(&wrReq); err != nil { - return [32]byte{}, fmt.Errorf("failed to unmarshal Payload to WriteReportRequest: %w", err) - } - if wrReq.Report == nil { - return [32]byte{}, errors.New("WriteReportRequest.Report is nil") - } - wrReq.Report.Sigs = nil // exclude signatures from hash payload, err = anypb.New(&wrReq) if err != nil { @@ -166,7 +151,6 @@ type writeReportFamily string var ( writeReportFamilyEVM writeReportFamily = "evm" writeReportFamilySolana writeReportFamily = "solana" - writeReportFamilyAptos writeReportFamily = "aptos" ) func getWriteReportFamily(msg *types.MessageBody) (writeReportFamily, error) { @@ -180,11 +164,9 @@ func getWriteReportFamily(msg *types.MessageBody) (writeReportFamily, error) { return writeReportFamilyEVM, nil case "solana": return writeReportFamilySolana, nil - case "aptos": - return writeReportFamilyAptos, nil } - return "", errors.New("report family is unknown, available families: evm, solana, aptos") + return "", errors.New("report family is unknown, available families: evm, solana") } func NewWriteReportExcludeSignaturesHasher() types.MessageHasher { diff --git a/core/capabilities/remote/executable/request/client_request.go b/core/capabilities/remote/executable/request/client_request.go index e78bf39b08c..a771be2ad7c 100644 --- a/core/capabilities/remote/executable/request/client_request.go +++ b/core/capabilities/remote/executable/request/client_request.go @@ -14,7 +14,6 @@ import ( ragep2ptypes "github.com/smartcontractkit/libocr/ragep2p/types" - "github.com/smartcontractkit/chainlink-common/keystore/corekeys/ocr2key" "github.com/smartcontractkit/chainlink-common/pkg/beholder" commoncap "github.com/smartcontractkit/chainlink-common/pkg/capabilities" caperrors "github.com/smartcontractkit/chainlink-common/pkg/capabilities/errors" @@ -61,23 +60,19 @@ type clientResponse struct { } type ClientRequest struct { - id string - cancelFn context.CancelFunc - responseCh chan clientResponse - createdAt time.Time - responseIDCount map[[32]byte]int - meteringResponses map[[32]byte][]commoncap.MeteringNodeDetail - errorCount map[string]int - totalErrorCount int - payloadNotAvailableCount int - responseReceived map[p2ptypes.PeerID]bool - lggr logger.Logger - signers [][]byte - workflowExecutionID string - referenceID string - - requiredResponseConfirmations int - remoteNodeCount int + id string + cancelFn context.CancelFunc + responseCh chan clientResponse + createdAt time.Time + responseIDCount map[[32]byte]int + meteringResponses map[[32]byte][]commoncap.MeteringNodeDetail + errorCount map[string]int + totalErrorCount int + responseReceived map[p2ptypes.PeerID]bool + lggr logger.Logger + + requiredIdenticalResponses int + remoteNodeCount int requestTimeout time.Duration @@ -90,7 +85,6 @@ type ClientRequest struct { func NewClientExecuteRequest(ctx context.Context, lggr logger.Logger, req commoncap.CapabilityRequest, remoteCapabilityInfo commoncap.CapabilityInfo, localDonInfo commoncap.DON, dispatcher types.Dispatcher, requestTimeout time.Duration, transmissionConfig *transmission.TransmissionConfig, capMethodName string, - signers [][]byte, ) (*ClientRequest, error) { rawRequest, err := proto.MarshalOptions{Deterministic: true}.Marshal(pb.CapabilityRequestToProto(req)) if err != nil { @@ -120,7 +114,7 @@ func NewClientExecuteRequest(ctx context.Context, lggr logger.Logger, req common } lggr = logger.With(lggr, "requestId", requestID) // cap ID and method name included in the parent logger - return newClientRequest(ctx, lggr, requestID, remoteCapabilityInfo, localDonInfo, dispatcher, requestTimeout, tc, types.MethodExecute, rawRequest, workflowExecutionID, req.Metadata.ReferenceID, capMethodName, signers) + return newClientRequest(ctx, lggr, requestID, remoteCapabilityInfo, localDonInfo, dispatcher, requestTimeout, tc, types.MethodExecute, rawRequest, workflowExecutionID, req.Metadata.ReferenceID, capMethodName) } var defaultDelayMargin = 10 * time.Second @@ -128,7 +122,6 @@ var defaultDelayMargin = 10 * time.Second func newClientRequest(ctx context.Context, lggr logger.Logger, requestID string, remoteCapabilityInfo commoncap.CapabilityInfo, localDonInfo commoncap.DON, dispatcher types.Dispatcher, requestTimeout time.Duration, tc transmission.TransmissionConfig, methodType string, rawRequest []byte, workflowExecutionID string, stepRef string, capMethodName string, - signers [][]byte, ) (*ClientRequest, error) { remoteCapabilityDonInfo := remoteCapabilityInfo.DON if remoteCapabilityDonInfo == nil { @@ -221,22 +214,19 @@ func newClientRequest(ctx context.Context, lggr logger.Logger, requestID string, } return &ClientRequest{ - id: requestID, - cancelFn: cancelFn, - createdAt: time.Now(), - requestTimeout: requestTimeout, - requiredResponseConfirmations: int(remoteCapabilityDonInfo.F + 1), - remoteNodeCount: len(remoteCapabilityDonInfo.Members), - responseIDCount: make(map[[32]byte]int), - meteringResponses: make(map[[32]byte][]commoncap.MeteringNodeDetail), - errorCount: make(map[string]int), - responseReceived: responseReceived, - responseCh: make(chan clientResponse, 1), - wg: &wg, - lggr: lggr, - signers: signers, - workflowExecutionID: workflowExecutionID, - referenceID: stepRef, + id: requestID, + cancelFn: cancelFn, + createdAt: time.Now(), + requestTimeout: requestTimeout, + requiredIdenticalResponses: int(remoteCapabilityDonInfo.F + 1), + remoteNodeCount: len(remoteCapabilityDonInfo.Members), + responseIDCount: make(map[[32]byte]int), + meteringResponses: make(map[[32]byte][]commoncap.MeteringNodeDetail), + errorCount: make(map[string]int), + responseReceived: responseReceived, + responseCh: make(chan clientResponse, 1), + wg: &wg, + lggr: lggr, }, nil } @@ -338,32 +328,29 @@ func (c *ClientRequest) OnMessage(_ context.Context, msg *types.MessageBody) err c.responseReceived[sender] = true if msg.Error == types.Error_OK { - resp, err := pb.UnmarshalCapabilityResponse(msg.Payload) - if err != nil { - return fmt.Errorf("failed to unmarshal capability response: %w", err) - } - // metering reports per node are aggregated into a single array of values. for any single node message, the // metering values are extracted from the CapabilityResponse, added to an array, and the CapabilityResponse // is marshalled without the metering value to get the hash. each node could have a different metering value // which would result in different hashes. removing the metering detail allows for direct comparison of results. - responseID, err := c.getMessageHash(resp) + responseID, metadata, err := c.getMessageHashAndMetadata(msg) if err != nil { return fmt.Errorf("failed to get message hash: %w", err) } - lggr := logger.With(c.lggr, "responseID", hex.EncodeToString(responseID[:]), "requiredCount", c.requiredResponseConfirmations, "peer", sender) + lggr := logger.With(c.lggr, "responseID", hex.EncodeToString(responseID[:]), "requiredCount", c.requiredIdenticalResponses, "peer", sender) nodeReports, exists := c.meteringResponses[responseID] if !exists { nodeReports = make([]commoncap.MeteringNodeDetail, 0) } - rpt, err := commoncap.ExtractMeteringFromMetadata(sender, resp.Metadata) - if err != nil { - lggr.Warnw("invalid metering detail", "err", err) - } else { + if len(metadata.Metering) == 1 { + rpt := metadata.Metering[0] + rpt.Peer2PeerID = sender.String() + nodeReports = append(nodeReports, rpt) + } else { + lggr.Warnw("node metering detail did not contain exactly 1 record", "records", len(metadata.Metering)) } c.responseIDCount[responseID]++ @@ -373,7 +360,7 @@ func (c *ClientRequest) OnMessage(_ context.Context, msg *types.MessageBody) err lggr.Warnw("received multiple unique responses for the same request", "count for responseID", len(c.responseIDCount)) } - if c.responseIDCount[responseID] == c.requiredResponseConfirmations || c.hasValidAttestation(resp) { + if c.responseIDCount[responseID] == c.requiredIdenticalResponses { payload, err := c.encodePayloadWithMetadata(msg, commoncap.ResponseMetadata{Metering: nodeReports}) if err != nil { return fmt.Errorf("failed to encode payload with metadata: %w", err) @@ -383,16 +370,6 @@ func (c *ClientRequest) OnMessage(_ context.Context, msg *types.MessageBody) err } } else { c.lggr.Debugw("received error from peer", "error", msg.Error, "errorMsg", msg.ErrorMsg, "peer", sender) - if commoncap.ErrResponsePayloadNotAvailable.Is(errors.New(msg.ErrorMsg)) { - c.payloadNotAvailableCount++ - if c.payloadNotAvailableCount == c.remoteNodeCount-c.requiredResponseConfirmations+1 { - // return an error to indicate unexpected state, but do not send an error as we might still receive a response with valid attestation. - return fmt.Errorf("unexpected state: received %d payload not available responses, while max allowed is %d. This means a bug in the code, please investigate", - c.payloadNotAvailableCount, c.remoteNodeCount-c.requiredResponseConfirmations) - } - return nil - } - c.errorCount[msg.ErrorMsg]++ c.totalErrorCount++ @@ -400,9 +377,9 @@ func (c *ClientRequest) OnMessage(_ context.Context, msg *types.MessageBody) err c.lggr.Warnw("received multiple different errors for the same request", "numDifferentErrors", len(c.errorCount)) } - if c.errorCount[msg.ErrorMsg] == c.requiredResponseConfirmations { + if c.errorCount[msg.ErrorMsg] == c.requiredIdenticalResponses { c.sendResponse(clientResponse{Err: newRemoteCapabilityExecuteError(msg.Error, msg.ErrorMsg)}) - } else if c.totalErrorCount == c.remoteNodeCount-c.requiredResponseConfirmations+1 { + } else if c.totalErrorCount == c.remoteNodeCount-c.requiredIdenticalResponses+1 { c.sendResponse(clientResponse{Err: newRemoteCapabilityExecuteErrorWithMessage( fmt.Sprintf("received %d errors, last error %s : %s", c.totalErrorCount, msg.Error, msg.ErrorMsg), msg.ErrorMsg, @@ -412,59 +389,6 @@ func (c *ClientRequest) OnMessage(_ context.Context, msg *types.MessageBody) err return nil } -func (c *ClientRequest) hasValidAttestation(resp commoncap.CapabilityResponse) bool { - if resp.OCRAttestation == nil { - return false - } - - err := c.verifyAttestation(resp) - if err != nil { - c.lggr.Errorw("Attestation is present, but not valid. This is most likely a bug and requires investigation - falling back to identical responses verification", "error", err) - return false - } - - return true -} - -func (c *ClientRequest) verifyAttestation(resp commoncap.CapabilityResponse) error { - attestation := resp.OCRAttestation - if attestation == nil { - return errors.New("attestation is missing") - } - - if len(attestation.Sigs) < c.requiredResponseConfirmations { - return fmt.Errorf("not enough signatures: got %d, need at least %d", len(attestation.Sigs), c.requiredResponseConfirmations) - } - - if len(c.signers) < c.requiredResponseConfirmations { - return fmt.Errorf("number of configured OCR signers is less than required confirmations: got %d, need at least %d", len(c.signers), c.requiredResponseConfirmations) - } - - reportData, err := commoncap.ResponseToReportData(c.workflowExecutionID, c.referenceID, resp.Payload.Value, resp.Metadata) - if err != nil { - return fmt.Errorf("failed to convert response to report data: %w", err) - } - sigData := ocr2key.ReportToSigData3(attestation.ConfigDigest, attestation.SequenceNumber, reportData[:]) - signed := make([]bool, len(c.signers)) - for _, sig := range attestation.Sigs { - if int(sig.Signer) >= len(c.signers) { - return fmt.Errorf("invalid signer index: %d", sig.Signer) - } - - if signed[sig.Signer] { - return fmt.Errorf("duplicate signature from signer index: %d", sig.Signer) - } - - if !ocr2key.EvmVerifyBlob(c.signers[sig.Signer], sigData, sig.Signature) { - return fmt.Errorf("invalid signature from signer index: %d", sig.Signer) - } - - signed[sig.Signer] = true - } - - return nil -} - func (c *ClientRequest) sendResponse(response clientResponse) { c.responseCh <- response close(c.responseCh) @@ -476,17 +400,23 @@ func (c *ClientRequest) sendResponse(response clientResponse) { c.lggr.Debugw("received OK response") } -func (c *ClientRequest) getMessageHash(msg commoncap.CapabilityResponse) ([32]byte, error) { - // clear metadata to ensure it doesn't affect the hash, as different nodes might have different metadata (e.g. different metering values) - // since msg is passed as value, this won't affect the original message - msg.Metadata = commoncap.ResponseMetadata{} - msg.OCRAttestation = nil - payload, err := pb.MarshalCapabilityResponse(msg) +func (c *ClientRequest) getMessageHashAndMetadata(msg *types.MessageBody) ([32]byte, commoncap.ResponseMetadata, error) { + var metadata commoncap.ResponseMetadata + + resp, err := pb.UnmarshalCapabilityResponse(msg.Payload) + if err != nil { + return [32]byte{}, metadata, err + } + + metadata = resp.Metadata + resp.Metadata = commoncap.ResponseMetadata{} + + payload, err := pb.MarshalCapabilityResponse(resp) if err != nil { - return [32]byte{}, err + return [32]byte{}, metadata, err } - return sha256.Sum256(payload), nil + return sha256.Sum256(payload), metadata, nil } func (c *ClientRequest) encodePayloadWithMetadata(msg *types.MessageBody, metadata commoncap.ResponseMetadata) ([]byte, error) { diff --git a/core/capabilities/remote/executable/request/client_request_internal_test.go b/core/capabilities/remote/executable/request/client_request_internal_test.go deleted file mode 100644 index 2193bc3fa50..00000000000 --- a/core/capabilities/remote/executable/request/client_request_internal_test.go +++ /dev/null @@ -1,191 +0,0 @@ -package request - -import ( - "crypto/rand" - "testing" - - ocrtypes "github.com/smartcontractkit/libocr/offchainreporting2plus/types" - "github.com/stretchr/testify/require" - "google.golang.org/protobuf/proto" - "google.golang.org/protobuf/types/known/anypb" - - "github.com/smartcontractkit/chainlink-common/keystore/corekeys" - "github.com/smartcontractkit/chainlink-common/keystore/corekeys/ocr2key" - commoncap "github.com/smartcontractkit/chainlink-common/pkg/capabilities" - "github.com/smartcontractkit/chainlink-common/pkg/logger" - "github.com/smartcontractkit/chainlink-protos/cre/go/values" -) - -func Test_ClientRequest_VerifyAttestation(t *testing.T) { - const workflowExecutionID = "95ef5e32deb99a10ee6804bc4af13855687559d7ff6552ac6dbb2ce0abbadeed" - const referenceID = "step1" - spendUnit, spendValue := "testunit", "42" - - val, err := values.NewMap(map[string]any{"response": "attested"}) - require.NoError(t, err) - valueProto := values.ProtoMap(val) - valueBytes, err := proto.Marshal(valueProto) - require.NoError(t, err) - - configDigest := ocrtypes.ConfigDigest{1, 2, 3, 4, 5} - seqNr := uint64(100) - - kb1, err := ocr2key.New(corekeys.EVM) - require.NoError(t, err) - kb2, err := ocr2key.New(corekeys.EVM) - require.NoError(t, err) - - validResp := commoncap.CapabilityResponse{ - Metadata: commoncap.ResponseMetadata{ - Metering: []commoncap.MeteringNodeDetail{ - {SpendUnit: spendUnit, SpendValue: spendValue}, - }, - }, - Payload: &anypb.Any{TypeUrl: "type.googleapis.com/values.v1.Map", Value: valueBytes}, - } - - reportData, err := commoncap.ResponseToReportData(workflowExecutionID, referenceID, valueBytes, validResp.Metadata) - require.NoError(t, err) - - sig1, err := kb1.Sign3(configDigest, seqNr, reportData[:]) - require.NoError(t, err) - sig2, err := kb2.Sign3(configDigest, seqNr, reportData[:]) - require.NoError(t, err) - - signers := [][]byte{kb1.PublicKey(), kb2.PublicKey()} - - validResp.OCRAttestation = &commoncap.OCRAttestation{ - ConfigDigest: configDigest, - SequenceNumber: seqNr, - Sigs: []commoncap.AttributedSignature{ - {Signer: 0, Signature: sig1}, - {Signer: 1, Signature: sig2}, - }, - } - - c := &ClientRequest{ - lggr: logger.Test(t), - signers: signers, - workflowExecutionID: workflowExecutionID, - referenceID: referenceID, - requiredResponseConfirmations: 2, - } - - t.Run("not enough signers returns error", func(t *testing.T) { - cBad := &ClientRequest{ - workflowExecutionID: workflowExecutionID, - referenceID: referenceID, - lggr: logger.Test(t), - requiredResponseConfirmations: 2, - } - err := cBad.verifyAttestation(validResp) - require.Error(t, err) - require.Contains(t, err.Error(), "number of configured OCR signers is less than required confirmations: got 0, need at least 2") - }) - - t.Run("not enough signatures returns error", func(t *testing.T) { - respFewSigs := commoncap.CapabilityResponse{ - Metadata: commoncap.ResponseMetadata{ - Metering: []commoncap.MeteringNodeDetail{{SpendUnit: spendUnit, SpendValue: spendValue}}, - }, - Payload: &anypb.Any{TypeUrl: "type.googleapis.com/values.v1.Map", Value: valueBytes}, - OCRAttestation: &commoncap.OCRAttestation{ - ConfigDigest: configDigest, - SequenceNumber: seqNr, - Sigs: []commoncap.AttributedSignature{{Signer: 0, Signature: sig1}}, - }, - } - err := c.verifyAttestation(respFewSigs) - require.Error(t, err) - require.Contains(t, err.Error(), "not enough signatures") - }) - - t.Run("invalid signer index returns error", func(t *testing.T) { - respBadSigner := commoncap.CapabilityResponse{ - Metadata: commoncap.ResponseMetadata{ - Metering: []commoncap.MeteringNodeDetail{{SpendUnit: spendUnit, SpendValue: spendValue}}, - }, - Payload: &anypb.Any{TypeUrl: "type.googleapis.com/values.v1.Map", Value: valueBytes}, - OCRAttestation: &commoncap.OCRAttestation{ - ConfigDigest: configDigest, - SequenceNumber: seqNr, - Sigs: []commoncap.AttributedSignature{ - {Signer: 0, Signature: sig1}, - {Signer: 99, Signature: sig2}, - }, - }, - } - err := c.verifyAttestation(respBadSigner) - require.Error(t, err) - require.Contains(t, err.Error(), "invalid signer index") - }) - - t.Run("duplicate signature returns error", func(t *testing.T) { - respDupSig := commoncap.CapabilityResponse{ - Metadata: commoncap.ResponseMetadata{ - Metering: []commoncap.MeteringNodeDetail{{SpendUnit: spendUnit, SpendValue: spendValue}}, - }, - Payload: &anypb.Any{TypeUrl: "type.googleapis.com/values.v1.Map", Value: valueBytes}, - OCRAttestation: &commoncap.OCRAttestation{ - ConfigDigest: configDigest, - SequenceNumber: seqNr, - Sigs: []commoncap.AttributedSignature{ - {Signer: 0, Signature: sig1}, - {Signer: 0, Signature: sig1}, - }, - }, - } - err := c.verifyAttestation(respDupSig) - require.Error(t, err) - require.Contains(t, err.Error(), "duplicate signature") - }) - - t.Run("invalid signature returns error", func(t *testing.T) { - badSig := make([]byte, 65) - _, err := rand.Read(badSig) - require.NoError(t, err) - respBadSig := commoncap.CapabilityResponse{ - Metadata: commoncap.ResponseMetadata{ - Metering: []commoncap.MeteringNodeDetail{{SpendUnit: spendUnit, SpendValue: spendValue}}, - }, - Payload: &anypb.Any{TypeUrl: "type.googleapis.com/values.v1.Map", Value: valueBytes}, - OCRAttestation: &commoncap.OCRAttestation{ - ConfigDigest: configDigest, - SequenceNumber: seqNr, - Sigs: []commoncap.AttributedSignature{ - {Signer: 0, Signature: sig1}, - {Signer: 1, Signature: badSig}, - }, - }, - } - err = c.verifyAttestation(respBadSig) - require.Error(t, err) - require.Contains(t, err.Error(), "invalid signature") - }) - - t.Run("wrong payload bytes produces invalid signature", func(t *testing.T) { - wrongBytes := []byte("tampered") - respWrongPayload := commoncap.CapabilityResponse{ - Metadata: commoncap.ResponseMetadata{ - Metering: []commoncap.MeteringNodeDetail{{SpendUnit: spendUnit, SpendValue: spendValue}}, - }, - Payload: &anypb.Any{TypeUrl: "x", Value: wrongBytes}, - OCRAttestation: &commoncap.OCRAttestation{ - ConfigDigest: configDigest, - SequenceNumber: seqNr, - Sigs: []commoncap.AttributedSignature{ - {Signer: 0, Signature: sig1}, - {Signer: 1, Signature: sig2}, - }, - }, - } - err := c.verifyAttestation(respWrongPayload) - require.Error(t, err) - require.Contains(t, err.Error(), "invalid signature") - }) - - t.Run("valid attestation succeeds", func(t *testing.T) { - err := c.verifyAttestation(validResp) - require.NoError(t, err) - }) -} diff --git a/core/capabilities/remote/executable/request/client_request_test.go b/core/capabilities/remote/executable/request/client_request_test.go index 3b42dd37b88..a871c2b6335 100644 --- a/core/capabilities/remote/executable/request/client_request_test.go +++ b/core/capabilities/remote/executable/request/client_request_test.go @@ -8,20 +8,15 @@ import ( "testing" "time" - ocrtypes "github.com/smartcontractkit/libocr/offchainreporting2plus/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.uber.org/zap/zapcore" - "google.golang.org/protobuf/types/known/anypb" - "github.com/smartcontractkit/chainlink-common/keystore/corekeys" - "github.com/smartcontractkit/chainlink-common/keystore/corekeys/ocr2key" "github.com/smartcontractkit/chainlink-common/pkg/beholder/beholdertest" commoncap "github.com/smartcontractkit/chainlink-common/pkg/capabilities" caperrors "github.com/smartcontractkit/chainlink-common/pkg/capabilities/errors" "github.com/smartcontractkit/chainlink-common/pkg/capabilities/pb" "github.com/smartcontractkit/chainlink-protos/cre/go/values" - pbvalues "github.com/smartcontractkit/chainlink-protos/cre/go/values/pb" "github.com/smartcontractkit/chainlink-protos/workflows/go/events" "google.golang.org/protobuf/proto" @@ -91,7 +86,7 @@ func Test_ClientRequest_MessageValidation(t *testing.T) { dispatcher := newClientRequestTestDispatcher() req, err := request.NewClientExecuteRequest(ctx, logger.Test(t), capabilityRequest, capInfo, - workflowDonInfo, dispatcher, 10*time.Minute, nil, "", nil) + workflowDonInfo, dispatcher, 10*time.Minute, nil, "") defer req.Cancel(errors.New("test end")) require.NoError(t, err) @@ -142,7 +137,7 @@ func Test_ClientRequest_MessageValidation(t *testing.T) { dispatcher := newClientRequestTestDispatcher() req, err := request.NewClientExecuteRequest(ctx, logger.Test(t), capabilityRequest, capInfo, - workflowDonInfo, dispatcher, 10*time.Minute, nil, "", nil) + workflowDonInfo, dispatcher, 10*time.Minute, nil, "") require.NoError(t, err) defer req.Cancel(errors.New("test end")) @@ -176,7 +171,7 @@ func Test_ClientRequest_MessageValidation(t *testing.T) { dispatcher := newClientRequestTestDispatcher() req, err := request.NewClientExecuteRequest(ctx, logger.Test(t), capabilityRequest, capInfo, - workflowDonInfo, dispatcher, 10*time.Minute, nil, "", nil) + workflowDonInfo, dispatcher, 10*time.Minute, nil, "") require.NoError(t, err) defer req.Cancel(errors.New("test end")) @@ -207,7 +202,7 @@ func Test_ClientRequest_MessageValidation(t *testing.T) { dispatcher := newClientRequestTestDispatcher() req, err := request.NewClientExecuteRequest(ctx, logger.Test(t), capabilityRequest, capInfo, - workflowDonInfo, dispatcher, 10*time.Minute, nil, "", nil) + workflowDonInfo, dispatcher, 10*time.Minute, nil, "") require.NoError(t, err) defer req.Cancel(errors.New("test end")) @@ -249,7 +244,7 @@ func Test_ClientRequest_MessageValidation(t *testing.T) { dispatcher := newClientRequestTestDispatcher() req, err := request.NewClientExecuteRequest(ctx, logger.Test(t), capabilityRequest, capInfo, - workflowDonInfo, dispatcher, 10*time.Minute, nil, "", nil) + workflowDonInfo, dispatcher, 10*time.Minute, nil, "") require.NoError(t, err) defer req.Cancel(errors.New("test end")) @@ -293,7 +288,7 @@ func Test_ClientRequest_MessageValidation(t *testing.T) { dispatcher := newClientRequestTestDispatcher() req, err := request.NewClientExecuteRequest(ctx, logger.Test(t), capabilityRequest, capInfo, - workflowDonInfo, dispatcher, 10*time.Minute, nil, "", nil) + workflowDonInfo, dispatcher, 10*time.Minute, nil, "") require.NoError(t, err) defer req.Cancel(errors.New("test end")) @@ -352,7 +347,7 @@ func Test_ClientRequest_MessageValidation(t *testing.T) { dispatcher := newClientRequestTestDispatcher() req, err := request.NewClientExecuteRequest(ctx, logger.Test(t), capabilityRequest, capInfo, - workflowDonInfo, dispatcher, 10*time.Minute, nil, "", nil) + workflowDonInfo, dispatcher, 10*time.Minute, nil, "") require.NoError(t, err) defer req.Cancel(errors.New("test end")) @@ -382,236 +377,6 @@ func Test_ClientRequest_MessageValidation(t *testing.T) { assert.Equal(t, resp, values.NewString("response1")) }) - t.Run("Execute Request With Valid Attestation", func(t *testing.T) { - const F = 1 - const N = 3*F + 1 - capabilityPeers, capDonInfo, capInfo := capabilityDon(t, N, F) - - configDigest := ocrtypes.ConfigDigest{1, 2, 3, 4, 5} - kb1, err := ocr2key.New(corekeys.EVM) - require.NoError(t, err) - kb2, err := ocr2key.New(corekeys.EVM) - require.NoError(t, err) - - seqNr := uint64(100) - - payload, err := values.NewMap(map[string]int{ - "number": 42, - }) - require.NoError(t, err) - payloadAsAny, err := anypb.New(values.Proto(payload)) - require.NoError(t, err) - - spendUnit, spendValue := "testunit", "42" - capResponse := commoncap.CapabilityResponse{ - Metadata: commoncap.ResponseMetadata{ - Metering: []commoncap.MeteringNodeDetail{ - {SpendUnit: spendUnit, SpendValue: spendValue}, - }, - }, - Payload: payloadAsAny, - } - - reportData, err := commoncap.ResponseToReportData(capabilityRequest.Metadata.WorkflowExecutionID, capabilityRequest.Metadata.ReferenceID, payloadAsAny.Value, capResponse.Metadata) - require.NoError(t, err) - - sig1, err := kb1.Sign3(configDigest, seqNr, reportData[:]) - require.NoError(t, err) - sig2, err := kb2.Sign3(configDigest, seqNr, reportData[:]) - require.NoError(t, err) - - capResponse.OCRAttestation = &commoncap.OCRAttestation{ - ConfigDigest: configDigest, - SequenceNumber: seqNr, - Sigs: []commoncap.AttributedSignature{ - {Signer: 0, Signature: sig1}, - {Signer: 1, Signature: sig2}, - }, - } - - rawResponseWithAttestation, err := pb.MarshalCapabilityResponse(capResponse) - require.NoError(t, err) - - ocrSigners := [][]byte{kb1.PublicKey(), kb2.PublicKey()} - - assertValidResponse := func(t *testing.T, result []byte) { - capResponse, err := pb.UnmarshalCapabilityResponse(result) - require.NoError(t, err) - - var pbValue pbvalues.Value - require.NoError(t, capResponse.Payload.UnmarshalTo(&pbValue)) - receivedValue, err := values.FromProto(&pbValue) - require.NoError(t, err) - - var receivedMap map[string]int - require.NoError(t, receivedValue.UnwrapTo(&receivedMap)) - - assert.Equal(t, 42, receivedMap["number"]) - require.GreaterOrEqual(t, len(capResponse.Metadata.Metering), 1) - require.Equal(t, spendUnit, capResponse.Metadata.Metering[0].SpendUnit) - require.Equal(t, spendValue, capResponse.Metadata.Metering[0].SpendValue) - } - - t.Run("succeeds on first peer with valid attestation", func(t *testing.T) { - ctx := t.Context() - - dispatcher := &clientRequestTestDispatcher{msgs: make(chan *types.MessageBody, 100)} - req, err := request.NewClientExecuteRequest(ctx, logger.Test(t), capabilityRequest, capInfo, - workflowDonInfo, dispatcher, 10*time.Minute, nil, "", ocrSigners) - require.NoError(t, err) - defer req.Cancel(errors.New("test end")) - - for range N { - <-dispatcher.msgs - } - - assert.Empty(t, dispatcher.msgs) - - msg := &types.MessageBody{ - CapabilityId: capInfo.ID, - CapabilityDonId: capDonInfo.ID, - CallerDonId: workflowDonInfo.ID, - Method: types.MethodExecute, - Payload: rawResponseWithAttestation, - MessageId: []byte("messageID"), - } - msg.Sender = capabilityPeers[0][:] - err = req.OnMessage(ctx, msg) - require.NoError(t, err) - - response := <-req.ResponseChan() - assertValidResponse(t, response.Result) - }) - t.Run("attestation is not valid, but we fallback to identical responses", func(t *testing.T) { - ctx := t.Context() - - dispatcher := &clientRequestTestDispatcher{msgs: make(chan *types.MessageBody, 100)} - req, err := request.NewClientExecuteRequest(ctx, logger.Test(t), capabilityRequest, capInfo, - workflowDonInfo, dispatcher, 10*time.Minute, nil, "", ocrSigners) - require.NoError(t, err) - defer req.Cancel(errors.New("test end")) - - for range N { - <-dispatcher.msgs - } - - assert.Empty(t, dispatcher.msgs) - - for i := range F + 1 { - respInvalidAtt := commoncap.CapabilityResponse{ - Metadata: commoncap.ResponseMetadata{ - Metering: []commoncap.MeteringNodeDetail{ - {SpendUnit: spendUnit, SpendValue: spendValue}, - }, - }, - OCRAttestation: &commoncap.OCRAttestation{ - ConfigDigest: configDigest, - // make the sequence number invalid - SequenceNumber: seqNr + uint64(i) + 1, // #nosec G115 -- i is non-negative and within uint64 range - Sigs: []commoncap.AttributedSignature{ - {Signer: 0, Signature: sig1}, - {Signer: 1, Signature: sig2}, - }, - }, - Payload: payloadAsAny, - } - - rawRespInvalidAtt, err := pb.MarshalCapabilityResponse(respInvalidAtt) - require.NoError(t, err) - - msg := &types.MessageBody{ - CapabilityId: capInfo.ID, - CapabilityDonId: capDonInfo.ID, - CallerDonId: workflowDonInfo.ID, - Method: types.MethodExecute, - Payload: rawRespInvalidAtt, - MessageId: []byte("messageID"), - } - msg.Sender = capabilityPeers[i][:] - err = req.OnMessage(ctx, msg) - require.NoError(t, err) - } - - response := <-req.ResponseChan() - assertValidResponse(t, response.Result) - }) - - t.Run("2F peers return ErrResponsePayloadNotAvailable then success", func(t *testing.T) { - ctx := t.Context() - dispatcher := &clientRequestTestDispatcher{msgs: make(chan *types.MessageBody, 100)} - req, err := request.NewClientExecuteRequest(ctx, logger.Test(t), capabilityRequest, capInfo, - workflowDonInfo, dispatcher, 10*time.Minute, nil, "", ocrSigners) - require.NoError(t, err) - defer req.Cancel(errors.New("test end")) - - for range N { - <-dispatcher.msgs - } - - assert.Empty(t, dispatcher.msgs) - - for i := range 2 * F { - msgNA := &types.MessageBody{ - CapabilityId: capInfo.ID, - CapabilityDonId: capDonInfo.ID, - CallerDonId: workflowDonInfo.ID, - Method: types.MethodExecute, - MessageId: []byte("messageID"), - Error: types.Error_INTERNAL_ERROR, - ErrorMsg: commoncap.ErrResponsePayloadNotAvailable.Error(), - } - msgNA.Sender = capabilityPeers[i][:] - require.NoError(t, req.OnMessage(ctx, msgNA)) - } - - msgOK := &types.MessageBody{ - CapabilityId: capInfo.ID, - CapabilityDonId: capDonInfo.ID, - CallerDonId: workflowDonInfo.ID, - Method: types.MethodExecute, - Payload: rawResponseWithAttestation, - MessageId: []byte("messageID"), - } - msgOK.Sender = capabilityPeers[2*F][:] - require.NoError(t, req.OnMessage(ctx, msgOK)) - - response := <-req.ResponseChan() - assertValidResponse(t, response.Result) - }) - - t.Run("2F+1 peers return ErrResponsePayloadNotAvailable", func(t *testing.T) { - ctx := t.Context() - dispatcher := &clientRequestTestDispatcher{msgs: make(chan *types.MessageBody, 100)} - req, err := request.NewClientExecuteRequest(ctx, logger.Test(t), capabilityRequest, capInfo, - workflowDonInfo, dispatcher, 10*time.Minute, nil, "", ocrSigners) - require.NoError(t, err) - defer req.Cancel(errors.New("test end")) - - for range N { - <-dispatcher.msgs - } - - assert.Empty(t, dispatcher.msgs) - - noPayloadMsg := types.MessageBody{ - CapabilityId: capInfo.ID, - CapabilityDonId: capDonInfo.ID, - CallerDonId: workflowDonInfo.ID, - Method: types.MethodExecute, - MessageId: []byte("messageID"), - Error: types.Error_INTERNAL_ERROR, - ErrorMsg: commoncap.ErrResponsePayloadNotAvailable.Error(), - } - - for i := range 2 * F { - noPayloadMsg.Sender = capabilityPeers[i][:] - require.NoError(t, req.OnMessage(ctx, &noPayloadMsg)) - } - - noPayloadMsg.Sender = capabilityPeers[2*F][:] - require.Error(t, req.OnMessage(ctx, &noPayloadMsg)) - }) - }) t.Run("Executes full schedule", func(t *testing.T) { beholderTester := beholdertest.NewObserver(t) @@ -637,7 +402,6 @@ func Test_ClientRequest_MessageValidation(t *testing.T) { 10*time.Minute, nil, "", - nil, ) require.NoError(t, err) defer req.Cancel(errors.New("test end")) @@ -752,7 +516,6 @@ func Test_ClientRequest_MessageValidation(t *testing.T) { 10*time.Minute, nil, "", - nil, ) require.NoError(t, err) defer req.Cancel(errors.New("test end")) @@ -842,7 +605,7 @@ func Test_ClientRequest_MessageValidation(t *testing.T) { dispatcher := newClientRequestTestDispatcher() req, err := request.NewClientExecuteRequest(ctx, logger.Test(t), capabilityRequest, capInfo, - workflowDonInfo, dispatcher, 10*time.Minute, nil, "", nil) + workflowDonInfo, dispatcher, 10*time.Minute, nil, "") require.NoError(t, err) defer req.Cancel(errors.New("test end")) @@ -907,7 +670,6 @@ func Test_ClientRequest_MessageValidation(t *testing.T) { DeltaStage: 1000 * time.Millisecond, }, "", - nil, ) require.NoError(t, err) defer req.Cancel(errors.New("test end")) diff --git a/core/capabilities/streams/mock_trigger.go b/core/capabilities/streams/mock_trigger.go deleted file mode 100644 index 04b50e7ac10..00000000000 --- a/core/capabilities/streams/mock_trigger.go +++ /dev/null @@ -1,367 +0,0 @@ -package streams - -import ( - "context" - "crypto/ecdsa" - "fmt" - "math/big" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/smartcontractkit/libocr/offchainreporting2plus/chains/evmutil" - ocrTypes "github.com/smartcontractkit/libocr/offchainreporting2plus/types" - - "github.com/smartcontractkit/chainlink-common/pkg/capabilities" - "github.com/smartcontractkit/chainlink-common/pkg/capabilities/datastreams" - "github.com/smartcontractkit/chainlink-common/pkg/capabilities/triggers" - "github.com/smartcontractkit/chainlink-common/pkg/capabilities/triggers/streams" - "github.com/smartcontractkit/chainlink-common/pkg/services" - "github.com/smartcontractkit/chainlink-common/pkg/types/core" - v3 "github.com/smartcontractkit/chainlink-common/pkg/types/mercury/v3" - - "github.com/smartcontractkit/chainlink-evm/pkg/mercury/v3/reportcodec" - "github.com/smartcontractkit/chainlink/v2/core/logger" -) - -const ( - mockTriggerCapabilityName = "mock-streams-trigger" - mockTriggerCapabilityVersion = "1.0.0" - mockTriggerRegisterResolution = 100 - defaultLoopIntervalMs int64 = 1000 - mockSignerFaultTolerance = 1 - mockSignerKeyLength = 32 - mockSignerKeyLastByteIndex = mockSignerKeyLength - 1 - reportExpiryOffsetSeconds = 1_000_000 - initialMockPriceA int64 = 300_000 - initialMockPriceB int64 = 40_000 - initialMockPriceC int64 = 5_000_000 -) - -func RegisterMockTrigger(lggr logger.Logger, capRegistry core.CapabilitiesRegistry) (*MockTriggerService, error) { - ctx := context.Background() - trigger, err := NewMockTriggerService(mockTriggerRegisterResolution, lggr) - if err != nil { - return nil, err - } - if err := trigger.Start(ctx); err != nil { - return nil, err - } - if err := capRegistry.Add(ctx, trigger); err != nil { - _ = trigger.Close() - return nil, err - } - - return trigger, nil -} - -const MockTriggerCapabilityID = mockTriggerCapabilityName + "@" + mockTriggerCapabilityVersion - -var capInfo = capabilities.MustNewCapabilityInfo( - MockTriggerCapabilityID, - capabilities.CapabilityTypeTrigger, - "Mock Streams Trigger", -) - -// Wraps the MercuryTriggerService to produce a trigger with mocked data -type MockTriggerService struct { - *triggers.MercuryTriggerService - meta datastreams.Metadata - signers []*ecdsa.PrivateKey - stopCh services.StopChan - closeOnce sync.Once - wg sync.WaitGroup - loopInterval time.Duration - subscribers map[string][]streams.FeedId - subscribersMu sync.Mutex - lggr logger.Logger -} - -func NewMockTriggerService(tickerResolutionMs int64, lggr logger.Logger) (*MockTriggerService, error) { - trigger, err := triggers.NewMercuryTriggerService(tickerResolutionMs, mockTriggerCapabilityName, mockTriggerCapabilityVersion, lggr) - if err != nil { - return nil, err - } - trigger.CapabilityInfo = capInfo - - if tickerResolutionMs <= 0 { - tickerResolutionMs = defaultLoopIntervalMs - } - - meta, signers, err := newMockMetadataAndSigners() - if err != nil { - return nil, err - } - - // MercuryTrigger is typically wrapped by other modules that ignore the trigger's meta and provide a different one. - // Since we're skipping those wrappers we need to provide our own meta here. - trigger.SetMetaOverride(meta) - - return &MockTriggerService{ - MercuryTriggerService: trigger, - meta: meta, - signers: signers, - stopCh: make(services.StopChan), - loopInterval: time.Duration(tickerResolutionMs) * time.Millisecond, - subscribers: make(map[string][]streams.FeedId), - lggr: lggr, - }, nil -} - -func newMockMetadataAndSigners() (datastreams.Metadata, []*ecdsa.PrivateKey, error) { - meta := datastreams.Metadata{MinRequiredSignatures: 2*mockSignerFaultTolerance + 1} - signers := make([]*ecdsa.PrivateKey, 0, meta.MinRequiredSignatures) - for i := 0; i < meta.MinRequiredSignatures; i++ { - privKey, err := newMockSigner(i + 1) - if err != nil { - return datastreams.Metadata{}, nil, err - } - signers = append(signers, privKey) - meta.Signers = append(meta.Signers, crypto.PubkeyToAddress(privKey.PublicKey).Bytes()) - } - return meta, signers, nil -} - -func newMockSigner(index int) (*ecdsa.PrivateKey, error) { - bytes := make([]byte, mockSignerKeyLength) - lastByte, err := toUint8(index) - if err != nil { - return nil, err - } - bytes[mockSignerKeyLastByteIndex] = lastByte - privKey, err := crypto.ToECDSA(bytes) - if err != nil { - return nil, err - } - return privKey, nil -} - -func (m *MockTriggerService) Start(ctx context.Context) error { - if err := m.MercuryTriggerService.Start(ctx); err != nil { - return err - } - m.wg.Add(1) - go m.loop() - return nil -} - -func (m *MockTriggerService) Close() error { - m.closeOnce.Do(func() { - close(m.stopCh) - }) - m.wg.Wait() - return m.MercuryTriggerService.Close() -} - -func (m *MockTriggerService) RegisterTrigger(ctx context.Context, req capabilities.TriggerRegistrationRequest) (<-chan capabilities.TriggerResponse, error) { - ch, err := m.MercuryTriggerService.RegisterTrigger(ctx, req) - if err != nil { - return nil, err - } - - config, err := m.ValidateConfig(req.Config) - if err != nil { - _ = m.MercuryTriggerService.UnregisterTrigger(ctx, req) - return nil, err - } - m.subscribersMu.Lock() - defer m.subscribersMu.Unlock() - m.subscribers[req.Metadata.WorkflowID] = config.FeedIds - return ch, nil -} - -func (m *MockTriggerService) UnregisterTrigger(ctx context.Context, req capabilities.TriggerRegistrationRequest) error { - err := m.MercuryTriggerService.UnregisterTrigger(ctx, req) - if err != nil { - return err - } - - m.subscribersMu.Lock() - defer m.subscribersMu.Unlock() - delete(m.subscribers, req.Metadata.WorkflowID) - return nil -} - -const baseTimestamp = 1000000000 - -// NOTE: duplicated from codec_test.go -func newReport(lggr logger.Logger, feedID [32]byte, price *big.Int, timestamp int64) ([]byte, error) { - uintTimestamp, err := toUint32(timestamp) - if err != nil { - return nil, err - } - expiresAt, err := toUint32(timestamp + reportExpiryOffsetSeconds) - if err != nil { - return nil, err - } - v3Codec := reportcodec.NewReportCodec(feedID, lggr) - raw, err := v3Codec.BuildReport(context.Background(), v3.ReportFields{ - BenchmarkPrice: price, - Timestamp: uintTimestamp, - ValidFromTimestamp: uintTimestamp, - Bid: price, - Ask: price, - LinkFee: price, - NativeFee: price, - ExpiresAt: expiresAt, - }) - if err != nil { - return nil, err - } - return raw, nil -} - -func toUint32(v int64) (uint32, error) { - if v < 0 || v > int64(^uint32(0)) { - return 0, fmt.Errorf("value %d out of uint32 range", v) - } - return uint32(v), nil -} - -func toUint8(v int) (uint8, error) { - if v < 0 || v > int(^uint8(0)) { - return 0, fmt.Errorf("value %d out of uint8 range", v) - } - return uint8(v), nil -} - -func rawReportContext(reportCtx ocrTypes.ReportContext) []byte { - rc := evmutil.RawReportContext(reportCtx) - flat := make([]byte, 0, len(rc)*32) - for _, r := range rc { - flat = append(flat, r[:]...) - } - return flat -} - -func (m *MockTriggerService) loop() { - defer m.wg.Done() - - ticker := time.NewTicker(m.loopInterval) - defer ticker.Stop() - - prices := []int64{initialMockPriceA, initialMockPriceB, initialMockPriceC} - iteration := 0 - - for { - select { - case <-m.stopCh: - return - case <-ticker.C: - } - - incrementPrices(prices) - iteration++ - - timestamp := time.Now().Unix() - reportCtx, err := newReportContext(iteration) - if err != nil { - m.lggr.Errorw("failed to build Mock report context", "err", err, "timestamp", timestamp) - continue - } - reports, err := m.buildReports(timestamp, prices[0], reportCtx) - if err != nil { - m.lggr.Errorw("failed to build Mock reports", "err", err, "timestamp", timestamp) - continue - } - if len(reports) == 0 { - continue - } - - m.lggr.Infow("New set of Mock reports", "timestamp", timestamp, "payload", reports) - if err := m.ProcessReport(reports); err != nil { - m.lggr.Errorw("failed to process Mock reports", "err", err, "timestamp", timestamp, "payload", reports) - } - } -} - -func incrementPrices(prices []int64) { - for i := range prices { - prices[i]++ - } -} - -func newReportContext(iteration int) (ocrTypes.ReportContext, error) { - epoch, err := toUint32(int64(baseTimestamp + iteration)) - if err != nil { - return ocrTypes.ReportContext{}, err - } - return ocrTypes.ReportContext{ - ReportTimestamp: ocrTypes.ReportTimestamp{Epoch: epoch}, - }, nil -} - -func (m *MockTriggerService) buildReports(timestamp, price int64, reportCtx ocrTypes.ReportContext) ([]datastreams.FeedReport, error) { - subscribers := m.snapshotSubscribers() - reports := make([]datastreams.FeedReport, 0, subscriberCount(subscribers)) - for _, feedIDs := range subscribers { - for _, feedID := range feedIDs { - report, err := m.newSignedReport(string(feedID), price, timestamp, reportCtx) - if err != nil { - return nil, err - } - reports = append(reports, report) - } - } - return reports, nil -} - -func (m *MockTriggerService) snapshotSubscribers() map[string][]streams.FeedId { - m.subscribersMu.Lock() - defer m.subscribersMu.Unlock() - - snapshot := make(map[string][]streams.FeedId, len(m.subscribers)) - for workflowID, feedIDs := range m.subscribers { - snapshot[workflowID] = cloneFeedIDs(feedIDs) - } - return snapshot -} - -func subscriberCount(subscribers map[string][]streams.FeedId) int { - total := 0 - for _, feedIDs := range subscribers { - total += len(feedIDs) - } - return total -} - -func cloneFeedIDs(feedIDs []streams.FeedId) []streams.FeedId { - cloned := make([]streams.FeedId, len(feedIDs)) - copy(cloned, feedIDs) - return cloned -} - -func (m *MockTriggerService) newSignedReport(feedID string, price, timestamp int64, reportCtx ocrTypes.ReportContext) (datastreams.FeedReport, error) { - fullReport, err := newReport(m.lggr, common.HexToHash(feedID), big.NewInt(price), timestamp) - if err != nil { - return datastreams.FeedReport{}, fmt.Errorf("build report for feed %s: %w", feedID, err) - } - - report := datastreams.FeedReport{ - FeedID: feedID, - FullReport: fullReport, - ReportContext: rawReportContext(reportCtx), - ObservationTimestamp: timestamp, - } - - if err := m.signReport(&report); err != nil { - return datastreams.FeedReport{}, fmt.Errorf("sign report for feed %s: %w", feedID, err) - } - - return report, nil -} - -func (m *MockTriggerService) signReport(report *datastreams.FeedReport) error { - sigData := append(crypto.Keccak256(report.FullReport), report.ReportContext...) - hash := crypto.Keccak256(sigData) - report.Signatures = make([][]byte, 0, m.meta.MinRequiredSignatures) - for n := 0; n < m.meta.MinRequiredSignatures; n++ { - sig, err := crypto.Sign(hash, m.signers[n]) - if err != nil { - return err - } - report.Signatures = append(report.Signatures, sig) - } - return nil -} diff --git a/core/capabilities/streams/mock_trigger_test.go b/core/capabilities/streams/mock_trigger_test.go deleted file mode 100644 index 362db73941a..00000000000 --- a/core/capabilities/streams/mock_trigger_test.go +++ /dev/null @@ -1,164 +0,0 @@ -package streams - -import ( - "context" - "math/big" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/stretchr/testify/require" - - ocrTypes "github.com/smartcontractkit/libocr/offchainreporting2plus/types" - - commoncap "github.com/smartcontractkit/chainlink-common/pkg/capabilities" - "github.com/smartcontractkit/chainlink-common/pkg/capabilities/datastreams" - triggercfg "github.com/smartcontractkit/chainlink-common/pkg/capabilities/triggers/streams" - "github.com/smartcontractkit/chainlink-protos/cre/go/values" - - "github.com/smartcontractkit/chainlink/v2/core/logger" -) - -const testFeedID triggercfg.FeedId = "0x0000000000000000000000000000000000000000000000000000000000000001" - -func TestMockTriggerServiceStartClose(t *testing.T) { - t.Parallel() - - svc, err := NewMockTriggerService(10, logger.TestLogger(t)) - require.NoError(t, err) - require.NoError(t, svc.Start(context.Background())) - - done := make(chan error, 1) - go func() { - done <- svc.Close() - }() - - select { - case err := <-done: - require.NoError(t, err) - case <-time.After(time.Second): - t.Fatal("timed out waiting for mock trigger service to close") - } -} - -func TestMockTriggerServiceRegisterEmitUnregister(t *testing.T) { - t.Parallel() - - ctx := context.Background() - svc, err := NewMockTriggerService(200, logger.TestLogger(t)) - require.NoError(t, err) - require.NoError(t, svc.MercuryTriggerService.Start(ctx)) - t.Cleanup(func() { - require.NoError(t, svc.MercuryTriggerService.Close()) - }) - - req := newMockTriggerRequest(t, "workflow-a", "trigger-a", 200) - ch, err := svc.RegisterTrigger(ctx, req) - require.NoError(t, err) - - svc.subscribersMu.Lock() - require.Equal(t, []triggercfg.FeedId{testFeedID}, svc.subscribers[req.Metadata.WorkflowID]) - svc.subscribersMu.Unlock() - - require.NoError(t, svc.ProcessReport([]datastreams.FeedReport{newSignedMockFeedReport(t, svc, testFeedID)})) - - var resp commoncap.TriggerResponse - select { - case resp = <-ch: - case <-time.After(2 * time.Second): - t.Fatal("timed out waiting for mock trigger event") - } - - triggerEvent := datastreams.StreamsTriggerEvent{} - require.NoError(t, resp.Event.Outputs.UnwrapTo(&triggerEvent)) - require.Equal(t, MockTriggerCapabilityID, resp.Event.TriggerType) - require.Len(t, triggerEvent.Payload, 1) - require.Len(t, triggerEvent.Payload[0].Signatures, svc.meta.MinRequiredSignatures) - require.Len(t, triggerEvent.Metadata.Signers, svc.meta.MinRequiredSignatures) - require.Equal(t, svc.meta.MinRequiredSignatures, triggerEvent.Metadata.MinRequiredSignatures) - - require.NoError(t, svc.UnregisterTrigger(ctx, req)) - - svc.subscribersMu.Lock() - require.Empty(t, svc.subscribers) - svc.subscribersMu.Unlock() - - select { - case _, ok := <-ch: - require.False(t, ok) - case <-time.After(time.Second): - t.Fatal("timed out waiting for subscriber channel to close") - } -} - -func TestMockTriggerServiceUnregisterKeepsSubscriberStateOnError(t *testing.T) { - t.Parallel() - - ctx := context.Background() - svc, err := NewMockTriggerService(200, logger.TestLogger(t)) - require.NoError(t, err) - require.NoError(t, svc.MercuryTriggerService.Start(ctx)) - t.Cleanup(func() { - require.NoError(t, svc.MercuryTriggerService.Close()) - }) - - req := newMockTriggerRequest(t, "workflow-a", "trigger-a", 200) - _, err = svc.RegisterTrigger(ctx, req) - require.NoError(t, err) - - badReq := req - badReq.TriggerID = "trigger-b" - err = svc.UnregisterTrigger(ctx, badReq) - require.Error(t, err) - - svc.subscribersMu.Lock() - require.Equal(t, []triggercfg.FeedId{testFeedID}, svc.subscribers[req.Metadata.WorkflowID]) - svc.subscribersMu.Unlock() -} - -func newMockTriggerRequest(t *testing.T, workflowID, triggerID string, maxFrequencyMs uint64) commoncap.TriggerRegistrationRequest { - t.Helper() - - cfg, err := values.WrapMap(triggercfg.TriggerConfig{ - FeedIds: []triggercfg.FeedId{testFeedID}, - MaxFrequencyMs: maxFrequencyMs, - }) - require.NoError(t, err) - - return commoncap.TriggerRegistrationRequest{ - TriggerID: triggerID, - Metadata: commoncap.RequestMetadata{ - WorkflowID: workflowID, - }, - Config: cfg, - } -} - -func newSignedMockFeedReport(t *testing.T, svc *MockTriggerService, feedID triggercfg.FeedId) datastreams.FeedReport { - t.Helper() - - timestamp := time.Now().Unix() - reportCtx := ocrTypes.ReportContext{ - ReportTimestamp: ocrTypes.ReportTimestamp{Epoch: uint32(baseTimestamp + 1)}, - } - - report := datastreams.FeedReport{ - FeedID: string(feedID), - ReportContext: rawReportContext(reportCtx), - ObservationTimestamp: timestamp, - } - fullReport, err := newReport(svc.lggr, common.HexToHash(string(feedID)), big.NewInt(123456), timestamp) - require.NoError(t, err) - report.FullReport = fullReport - - sigData := append(crypto.Keccak256(report.FullReport), report.ReportContext...) - hash := crypto.Keccak256(sigData) - for _, signer := range svc.signers { - sig, err := crypto.Sign(hash, signer) - require.NoError(t, err) - report.Signatures = append(report.Signatures, sig) - } - - return report -} diff --git a/core/capabilities/vault/authorizer_test.go b/core/capabilities/vault/authorizer_test.go index f0ecbb7ad91..18f717aaf19 100644 --- a/core/capabilities/vault/authorizer_test.go +++ b/core/capabilities/vault/authorizer_test.go @@ -11,20 +11,29 @@ import ( vaultcommon "github.com/smartcontractkit/chainlink-common/pkg/capabilities/actions/vault" jsonrpc "github.com/smartcontractkit/chainlink-common/pkg/jsonrpc2" + "github.com/smartcontractkit/chainlink-common/pkg/settings/cresettings" + "github.com/smartcontractkit/chainlink-common/pkg/settings/limits" vault "github.com/smartcontractkit/chainlink/v2/core/capabilities/vault" vaultmocks "github.com/smartcontractkit/chainlink/v2/core/capabilities/vault/mocks" "github.com/smartcontractkit/chainlink/v2/core/capabilities/vault/vaulttypes" "github.com/smartcontractkit/chainlink/v2/core/logger" ) -func TestAuthorizer_RejectsJWTBasedAuthWhenUnavailable(t *testing.T) { +func testLimitsFactory() limits.Factory { + return limits.Factory{Settings: cresettings.DefaultGetter} +} + +func TestAuthorizer_RejectsJWTBasedAuthWhenDisabled(t *testing.T) { params, err := json.Marshal(vaultcommon.CreateSecretsRequest{}) require.NoError(t, err) allowListBasedAuth := vaultmocks.NewAuthorizer(t) allowListBasedAuth.EXPECT().AuthorizeRequest(mock.Anything, mock.Anything).Maybe() - a := vault.NewAuthorizer(allowListBasedAuth, nil, logger.TestLogger(t)) + jwtBasedAuth, err := vault.NewJWTBasedAuth(vault.JWTBasedAuthConfig{}, testLimitsFactory(), logger.TestLogger(t), vault.WithDisabledJWTBasedAuth()) + require.NoError(t, err) + + a := vault.NewAuthorizer(allowListBasedAuth, jwtBasedAuth, logger.TestLogger(t)) authResult, err := a.AuthorizeRequest(t.Context(), jsonrpc.Request[json.RawMessage]{ ID: "1", @@ -33,7 +42,7 @@ func TestAuthorizer_RejectsJWTBasedAuthWhenUnavailable(t *testing.T) { Auth: "jwt-token", }) require.Nil(t, authResult) - require.ErrorContains(t, err, "JWTBasedAuth is nil") + require.ErrorContains(t, err, "JWTBasedAuth is disabled") allowListBasedAuth.AssertNotCalled(t, "AuthorizeRequest", mock.Anything, mock.Anything) } @@ -117,7 +126,10 @@ func TestAuthorizer_RejectsAllowListBasedAuthReplay(t *testing.T) { req := jsonrpc.Request[json.RawMessage]{ID: "1", Method: vaulttypes.MethodSecretsCreate} allowListBasedAuth.EXPECT().AuthorizeRequest(mock.Anything, req).Return(vault.NewAuthResult("", "0xabc", "digest-1", time.Now().Add(time.Minute).Unix()), nil).Twice() - a := vault.NewAuthorizer(allowListBasedAuth, nil, logger.TestLogger(t)) + jwtBasedAuth, err := vault.NewJWTBasedAuth(vault.JWTBasedAuthConfig{}, testLimitsFactory(), logger.TestLogger(t), vault.WithDisabledJWTBasedAuth()) + require.NoError(t, err) + + a := vault.NewAuthorizer(allowListBasedAuth, jwtBasedAuth, logger.TestLogger(t)) authResult, err := a.AuthorizeRequest(t.Context(), req) require.NoError(t, err) diff --git a/core/capabilities/vault/gw_handler.go b/core/capabilities/vault/gw_handler.go index f15627b2e91..71e8646ad6c 100644 --- a/core/capabilities/vault/gw_handler.go +++ b/core/capabilities/vault/gw_handler.go @@ -58,6 +58,20 @@ type gatewayConnector interface { RemoveHandler(ctx context.Context, methods []string) error } +type gatewayHandlerConfig struct { + authorizer Authorizer +} + +// GatewayHandlerOption customizes GatewayHandler construction for tests and future auth extensions. +type GatewayHandlerOption func(*gatewayHandlerConfig) + +// WithAuthorizer overrides the default Vault request authorizer. +func WithAuthorizer(authorizer Authorizer) GatewayHandlerOption { + return func(cfg *gatewayHandlerConfig) { + cfg.authorizer = authorizer + } +} + // GatewayHandler serves Vault requests received from the gateway on the node side. type GatewayHandler struct { services.Service @@ -72,36 +86,24 @@ type GatewayHandler struct { } // NewGatewayHandler creates a Vault gateway connector handler with internal auth wiring. -// Pass a non-nil authorizer only in tests or other cases that need to override the default -// allowlist/JWT authorization chain. -func NewGatewayHandler( - secretsService vaulttypes.SecretsService, - connector gatewayConnector, - workflowRegistrySyncer workflowsyncerv2.WorkflowRegistrySyncer, - lggr logger.Logger, - limitsFactory limits.Factory, - authorizer Authorizer, - auth0 *Auth0Config, -) (*GatewayHandler, error) { - var jwtAuthService services.Service - var jwtBasedAuth Authorizer - if auth0 != nil { - var err error - jwtAuthService, err = NewJWTBasedAuth(JWTBasedAuthConfig{ - IssuerURL: auth0.IssuerURL, - Audience: auth0.Audience, - }, limitsFactory, lggr) +func NewGatewayHandler(secretsService vaulttypes.SecretsService, connector gatewayConnector, workflowRegistrySyncer workflowsyncerv2.WorkflowRegistrySyncer, lggr logger.Logger, limitsFactory limits.Factory, opts ...GatewayHandlerOption) (*GatewayHandler, error) { + cfg := gatewayHandlerConfig{} + for _, opt := range opts { + opt(&cfg) + } + if cfg.authorizer == nil { + allowListBasedAuth := NewAllowListBasedAuth(lggr, workflowRegistrySyncer) + jwtBasedAuth, err := NewJWTBasedAuth(JWTBasedAuthConfig{}, limitsFactory, lggr, WithDisabledJWTBasedAuth()) if err != nil { return nil, fmt.Errorf("failed to create JWTBasedAuth: %w", err) } - jwtBasedAuth = jwtAuthService.(Authorizer) - } - - if authorizer == nil { - allowListBasedAuth := NewAllowListBasedAuth(lggr, workflowRegistrySyncer) - authorizer = NewAuthorizer(allowListBasedAuth, jwtBasedAuth, lggr) + cfg.authorizer = NewAuthorizer(allowListBasedAuth, jwtBasedAuth, lggr) + return newGatewayHandlerWithAuthorizer(secretsService, connector, cfg.authorizer, jwtBasedAuth, lggr) } + return newGatewayHandlerWithAuthorizer(secretsService, connector, cfg.authorizer, nil, lggr) +} +func newGatewayHandlerWithAuthorizer(secretsService vaulttypes.SecretsService, connector gatewayConnector, authorizer Authorizer, jwtAuthService services.Service, lggr logger.Logger) (*GatewayHandler, error) { metrics, err := newMetrics() if err != nil { return nil, fmt.Errorf("failed to create metrics: %w", err) @@ -225,11 +227,6 @@ func (h *GatewayHandler) authorizeAndPrefixRequest(ctx context.Context, req *jso h.lggr.Errorw("failed to normalize gateway request for authorization", "method", req.Method, "requestID", originalRequestID, "error", err) return nil, err } - authReq, err := StripRequestIdentity(authReq) - if err != nil { - h.lggr.Errorw("failed to strip authorized identity fields before authorization", "method", req.Method, "requestID", originalRequestID, "error", err) - return nil, err - } h.lggr.Debugw("authorizing gateway request", "method", req.Method, "requestID", originalRequestID) authResult, err := h.authorizer.AuthorizeRequest(ctx, authReq) diff --git a/core/capabilities/vault/gw_handler_test.go b/core/capabilities/vault/gw_handler_test.go index f71b3ea6daa..4d853877dca 100644 --- a/core/capabilities/vault/gw_handler_test.go +++ b/core/capabilities/vault/gw_handler_test.go @@ -121,56 +121,6 @@ func TestGatewayHandler_HandleGatewayMessage(t *testing.T) { }, expectedError: false, }, - { - name: "success - create secrets strips forwarded identity before reauthorization", - setupMocks: func(ss *vaulttypesmocks.SecretsService, gc *connector_mocks.GatewayConnector, ra *vaultcapmocks.Authorizer) { - ra.EXPECT().AuthorizeRequest(mock.Anything, mock.MatchedBy(func(req jsonrpc.Request[json.RawMessage]) bool { - if req.Method != vaulttypes.MethodSecretsCreate || req.ID != "1" || req.Params == nil { - return false - } - parsed := &vaultcommon.CreateSecretsRequest{} - if err := json.Unmarshal(*req.Params, parsed); err != nil { - return false - } - return parsed.OrgId == "" && parsed.WorkflowOwner == "" - })).Return(authResult("org-1", "0xworkflow"), nil) - ss.EXPECT().CreateSecrets(mock.Anything, mock.MatchedBy(func(req *vaultcommon.CreateSecretsRequest) bool { - return len(req.EncryptedSecrets) == 1 && - req.EncryptedSecrets[0].Id.Key == "test-secret" && - req.EncryptedSecrets[0].Id.Owner == "org-1" && - req.RequestId == "org-1"+vaulttypes.RequestIDSeparator+"1" && - req.OrgId == "org-1" && - req.WorkflowOwner == "0xworkflow" - })).Return(&vaulttypes.Response{ID: "test-secret"}, nil) - - gc.On("SendToGateway", mock.Anything, "gateway-1", mock.MatchedBy(func(resp *jsonrpc.Response[json.RawMessage]) bool { - return resp.Error == nil - })).Return(nil) - }, - request: &jsonrpc.Request[json.RawMessage]{ - Method: vaulttypes.MethodSecretsCreate, - ID: "org-1" + vaulttypes.RequestIDSeparator + "1", - Params: func() *json.RawMessage { - params, _ := json.Marshal(vaultcommon.CreateSecretsRequest{ - RequestId: "org-1" + vaulttypes.RequestIDSeparator + "1", - OrgId: "org-1", - WorkflowOwner: "0xworkflow", - EncryptedSecrets: []*vaultcommon.EncryptedSecret{ - { - Id: &vaultcommon.SecretIdentifier{ - Key: "test-secret", - Owner: "org-1", - }, - EncryptedValue: "encrypted-value", - }, - }, - }) - raw := json.RawMessage(params) - return &raw - }(), - }, - expectedError: false, - }, { name: "failure - service error", setupMocks: func(ss *vaulttypesmocks.SecretsService, gc *connector_mocks.GatewayConnector, ra *vaultcapmocks.Authorizer) { @@ -506,6 +456,9 @@ func TestGatewayHandler_HandleGatewayMessage(t *testing.T) { secretsService := vaulttypesmocks.NewSecretsService(t) gwConnector := connector_mocks.NewGatewayConnector(t) allowListBasedAuth := vaultcapmocks.NewAuthorizer(t) + limitsFactory := limits.Factory{Settings: cresettings.DefaultGetter} + jwtBasedAuth, err := vaultcap.NewJWTBasedAuth(vaultcap.JWTBasedAuthConfig{}, limitsFactory, lggr, vaultcap.WithDisabledJWTBasedAuth()) + require.NoError(t, err) tt.setupMocks(secretsService, gwConnector, allowListBasedAuth) @@ -514,9 +467,8 @@ func TestGatewayHandler_HandleGatewayMessage(t *testing.T) { gwConnector, nil, lggr, - limits.Factory{Settings: cresettings.DefaultGetter}, - vaultcap.NewAuthorizer(allowListBasedAuth, nil, lggr), - nil, + limitsFactory, + vaultcap.WithAuthorizer(vaultcap.NewAuthorizer(allowListBasedAuth, jwtBasedAuth, lggr)), ) require.NoError(t, err) @@ -538,15 +490,17 @@ func TestGatewayHandler_Lifecycle(t *testing.T) { secretsService := vaulttypesmocks.NewSecretsService(t) gwConnector := connector_mocks.NewGatewayConnector(t) allowListBasedAuth := vaultcapmocks.NewAuthorizer(t) + limitsFactory := limits.Factory{Settings: cresettings.DefaultGetter} + jwtBasedAuth, err := vaultcap.NewJWTBasedAuth(vaultcap.JWTBasedAuthConfig{}, limitsFactory, lggr, vaultcap.WithDisabledJWTBasedAuth()) + require.NoError(t, err) handler, err := vaultcap.NewGatewayHandler( secretsService, gwConnector, nil, lggr, - limits.Factory{Settings: cresettings.DefaultGetter}, - vaultcap.NewAuthorizer(allowListBasedAuth, nil, lggr), - nil, + limitsFactory, + vaultcap.WithAuthorizer(vaultcap.NewAuthorizer(allowListBasedAuth, jwtBasedAuth, lggr)), ) require.NoError(t, err) @@ -568,28 +522,3 @@ func TestGatewayHandler_Lifecycle(t *testing.T) { assert.Equal(t, vaultcap.HandlerName, id) }) } - -func TestGatewayHandler_Lifecycle_DefaultAuthorizer_NoJWTConfig(t *testing.T) { - lggr := logger.TestLogger(t) - ctx := t.Context() - - secretsService := vaulttypesmocks.NewSecretsService(t) - gwConnector := connector_mocks.NewGatewayConnector(t) - - handler, err := vaultcap.NewGatewayHandler( - secretsService, - gwConnector, - nil, - lggr, - limits.Factory{Settings: cresettings.DefaultGetter}, - nil, - nil, - ) - require.NoError(t, err) - - gwConnector.On("AddHandler", mock.Anything, vaulttypes.Methods, handler).Return(nil).Once() - require.NoError(t, handler.Start(ctx)) - - gwConnector.On("RemoveHandler", mock.Anything, vaulttypes.Methods).Return(nil).Once() - require.NoError(t, handler.Close()) -} diff --git a/core/capabilities/vault/jwt_based_auth.go b/core/capabilities/vault/jwt_based_auth.go index 5a919f87f41..69edcc8e4cc 100644 --- a/core/capabilities/vault/jwt_based_auth.go +++ b/core/capabilities/vault/jwt_based_auth.go @@ -27,7 +27,6 @@ var ( ErrMissingToken = errors.New("missing JWT token") ErrInvalidToken = errors.New("invalid JWT token") ErrMissingOrgID = errors.New("missing org_id claim") - ErrMissingWorkflowOwner = errors.New("missing workflow_owner in authorization_details") ErrMissingRequestDigest = errors.New("missing request_digest in authorization_details") ErrJWKSFetchFailed = errors.New("failed to fetch JWKS") ErrJWKSKeyNotFound = errors.New("signing key not found in JWKS") @@ -38,12 +37,6 @@ const ( defaultHTTPTimeout = 5 * time.Second ) -// Auth0Config captures the Vault JWT issuer settings shared by gateway and node handlers. -type Auth0Config struct { - IssuerURL string `json:"issuerURL" toml:"issuerURL" yaml:"issuerURL"` - Audience string `json:"audience" toml:"audience" yaml:"audience"` -} - // JWTBasedAuthConfig holds the configuration for JWTBasedAuth validation. type JWTBasedAuthConfig struct { IssuerURL string @@ -56,7 +49,7 @@ type JWTBasedAuthConfig struct { // relevant to Vault request authorization. type JWTClaims struct { OrgID string - WorkflowOwner string // from authorization_details + WorkflowOwner string // from authorization_details; may be empty for new JWT-only clients RequestDigest string // from authorization_details ExpiresAt time.Time } @@ -91,6 +84,7 @@ type jwtBasedAuth struct { jwksURL string refreshInterval time.Duration authEnabledGate limits.GateLimiter + refreshEnabled bool mu sync.RWMutex keySet *jsonWebKeySet @@ -103,7 +97,8 @@ type jwtBasedAuth struct { } type jwtBasedAuthOptions struct { - authEnabledGate limits.GateLimiter + authEnabledGate limits.GateLimiter + skipConfigChecks bool } // JWTBasedAuthOption customizes JWTBasedAuth construction without multiplying constructors. @@ -116,6 +111,14 @@ func WithJWTBasedAuthGateLimiter(gateLimiter limits.GateLimiter) JWTBasedAuthOpt } } +// WithDisabledJWTBasedAuth makes the constructed JWTBasedAuth fail closed without requiring issuer config. +func WithDisabledJWTBasedAuth() JWTBasedAuthOption { + return func(opts *jwtBasedAuthOptions) { + opts.authEnabledGate = limits.NewGateLimiter(false) + opts.skipConfigChecks = true + } +} + // NewJWTBasedAuth creates a JWTBasedAuth authorizer that verifies Auth0-issued JWTs // against the provider's JWKS endpoint. The JWKS is fetched lazily on first // use and refreshed on key-ID cache misses (rate-limited). @@ -127,10 +130,10 @@ func NewJWTBasedAuth(cfg JWTBasedAuthConfig, limitsFactory limits.Factory, lggr if options.authEnabledGate == nil { options.authEnabledGate = newVaultJWTAuthEnabledGateLimiter(limitsFactory, lggr) } - if cfg.IssuerURL == "" { + if !options.skipConfigChecks && cfg.IssuerURL == "" { return nil, errors.New("issuer URL is required") } - if cfg.Audience == "" { + if !options.skipConfigChecks && cfg.Audience == "" { return nil, errors.New("audience is required") } @@ -153,6 +156,7 @@ func NewJWTBasedAuth(cfg JWTBasedAuthConfig, limitsFactory limits.Factory, lggr jwksURL: jwksURL, refreshInterval: refreshInterval, authEnabledGate: options.authEnabledGate, + refreshEnabled: !options.skipConfigChecks, httpClient: httpClient, lggr: logger.Named(lggr, "VaultJWTBasedAuth"), } @@ -176,6 +180,11 @@ func newVaultJWTAuthEnabledGateLimiter(limitsFactory limits.Factory, lggr logger } func (v *jwtBasedAuth) start(context.Context) error { + if !v.refreshEnabled { + v.lggr.Debug("JWTBasedAuth periodic JWKS refresh disabled") + return nil + } + v.eng.GoTick(services.NewTicker(v.refreshInterval), func(ctx context.Context) { if err := v.refreshJWKS(ctx); err != nil { v.lggr.Warnw("periodic JWKS refresh failed", "error", err) @@ -200,21 +209,21 @@ func (v *jwtBasedAuth) AuthorizeRequest(ctx context.Context, req jsonrpc.Request return nil, errors.New("JWTBasedAuth is disabled") } - claims, err := v.validateToken(ctx, req.Auth) + requestDigest, err := req.Digest() if err != nil { - v.lggr.Debugw("JWTBasedAuth token validation failed", "method", req.Method, "requestID", req.ID, "error", err) - return nil, fmt.Errorf("invalid JWT auth token: %w", err) + v.lggr.Debugw("JWTBasedAuth failed to compute request digest", "method", req.Method, "requestID", req.ID, "error", err) + return nil, fmt.Errorf("failed to compute request digest: %w", err) } - requestDigest, err := req.Digest() + claims, err := v.validateToken(ctx, req.Auth) if err != nil { - v.lggr.Debugw("JWTBasedAuth failed to compute request digest", "method", req.Method, "requestID", req.ID, "orgID", claims.OrgID, "workflowOwner", claims.WorkflowOwner, "error", err) - return nil, fmt.Errorf("failed to compute request digest: %w", err) + v.lggr.Debugw("JWTBasedAuth token validation failed", "method", req.Method, "requestID", req.ID, "error", err) + return nil, fmt.Errorf("invalid JWT auth token: %w", err) } if !strings.EqualFold(requestDigest, claims.RequestDigest) { v.lggr.Debugw("JWTBasedAuth request digest mismatch", "method", req.Method, "requestID", req.ID, "orgID", claims.OrgID, "workflowOwner", claims.WorkflowOwner, "computedDigest", requestDigest, "claimedDigest", claims.RequestDigest) - return nil, fmt.Errorf("request digest mismatch: computed=%s claimed=%s", requestDigest, claims.RequestDigest) + return nil, errors.New("request digest mismatch") } v.lggr.Debugw("JWTBasedAuth authorization succeeded", "method", req.Method, "requestID", req.ID, "orgID", claims.OrgID, "workflowOwner", claims.WorkflowOwner, "digest", requestDigest, "expiresAt", claims.ExpiresAt.UTC().Unix()) @@ -325,9 +334,6 @@ func extractAuthorizationDetails(claims jwt.MapClaims) (workflowOwner, requestDi if requestDigest == "" { return "", "", ErrMissingRequestDigest } - if workflowOwner == "" { - return "", "", ErrMissingWorkflowOwner - } return workflowOwner, requestDigest, nil } diff --git a/core/capabilities/vault/jwt_based_auth_test.go b/core/capabilities/vault/jwt_based_auth_test.go index 6e5a62a27b6..a7e1c890379 100644 --- a/core/capabilities/vault/jwt_based_auth_test.go +++ b/core/capabilities/vault/jwt_based_auth_test.go @@ -166,7 +166,7 @@ func TestJWTBasedAuth_ValidToken(t *testing.T) { assert.False(t, result.ExpiresAt.IsZero()) } -func TestJWTBasedAuth_RejectsTokenWithoutWorkflowOwner(t *testing.T) { +func TestJWTBasedAuth_ValidToken_NoWorkflowOwner(t *testing.T) { rsaKey := generateTestRSAKey(t, "key-1") jwksServer := newTestJWKSServer(t, rsaKey) @@ -190,8 +190,10 @@ func TestJWTBasedAuth_RejectsTokenWithoutWorkflowOwner(t *testing.T) { tokenString := createTestJWT(t, rsaKey, claims) result, err := v.validateToken(context.Background(), tokenString) - require.Nil(t, result) - require.ErrorIs(t, err, ErrMissingWorkflowOwner) + require.NoError(t, err) + assert.Equal(t, "org_no_wfowner", result.OrgID) + assert.Empty(t, result.WorkflowOwner) + assert.Equal(t, "digest456", result.RequestDigest) } func TestJWTBasedAuth_ExpiredToken(t *testing.T) { @@ -447,6 +449,18 @@ func TestJWTBasedAuth_StartRefreshesJWKSPeriodically(t *testing.T) { require.NoError(t, v.Close()) } +func TestJWTBasedAuth_DisabledStartSkipsPeriodicRefresh(t *testing.T) { + v, err := NewJWTBasedAuth( + JWTBasedAuthConfig{}, + limits.Factory{Settings: cresettings.DefaultGetter}, + logger.TestLogger(t), + WithDisabledJWTBasedAuth(), + ) + require.NoError(t, err) + require.NoError(t, v.Start(t.Context())) + require.NoError(t, v.Close()) +} + func TestNewJWTBasedAuth_InvalidConfig(t *testing.T) { lggr := logger.TestLogger(t) @@ -505,48 +519,6 @@ func TestNewJWTBasedAuth_UsesVaultJWTAuthEnabledLimiter_Enabled(t *testing.T) { require.ErrorContains(t, err, ErrMissingToken.Error()) } -func TestJWTBasedAuth_AuthorizeCreateRequestFromRawJSON(t *testing.T) { - rsaKey := generateTestRSAKey(t, "key-1") - jwksServer := newTestJWKSServer(t, rsaKey) - - issuer := jwksServer.URL() + "/" - audience := "https://vault.test.chain.link" - v := newTestValidator(t, issuer, audience) - - rawRequest := []byte(`{"jsonrpc":"2.0","id":"req-1","method":"vault.secrets.create","params":{"request_id":"req-1","encrypted_secrets":[{"id":{"key":"7611","namespace":"main","owner":"org-123"},"encrypted_value":"cipher+/=="}]}}`) - req, err := jsonrpc.DecodeRequest[json.RawMessage](rawRequest, "") - require.NoError(t, err) - - digest, err := req.Digest() - require.NoError(t, err) - - token := createTestJWT(t, rsaKey, jwt.MapClaims{ - "iss": issuer, - "aud": audience, - "exp": jwt.NewNumericDate(time.Now().Add(5 * time.Minute)), - "iat": jwt.NewNumericDate(time.Now()), - "org_id": "org-123", - "authorization_details": []interface{}{ - map[string]interface{}{ - "type": "request_digest", - "value": digest, - }, - map[string]interface{}{ - "type": "workflow_owner", - "value": "0xAbCdEf0123456789AbCdEf0123456789AbCdEf01", - }, - }, - }) - - req, err = jsonrpc.DecodeRequest[json.RawMessage](rawRequest, token) - require.NoError(t, err) - - authResult, err := v.AuthorizeRequest(t.Context(), req) - require.NoError(t, err) - require.Equal(t, "org-123", authResult.OrgID()) - require.Equal(t, digest, authResult.Digest()) -} - func setDefaultGetter(t *testing.T, payload string) { t.Helper() diff --git a/core/capabilities/vault/request_normalization.go b/core/capabilities/vault/request_normalization.go deleted file mode 100644 index 9d0039cfd02..00000000000 --- a/core/capabilities/vault/request_normalization.go +++ /dev/null @@ -1,74 +0,0 @@ -package vault - -import ( - "encoding/json" - - vaultcommon "github.com/smartcontractkit/chainlink-common/pkg/capabilities/actions/vault" - jsonrpc "github.com/smartcontractkit/chainlink-common/pkg/jsonrpc2" - "github.com/smartcontractkit/chainlink/v2/core/capabilities/vault/vaulttypes" -) - -// NormalizeRequestWithIdentity returns a copy of req with the supplied identity -// fields materialized into params for Vault secret-management methods. Requests -// with malformed params are returned unchanged so downstream parsing can surface -// the existing method-specific error paths. -func NormalizeRequestWithIdentity(req jsonrpc.Request[json.RawMessage], orgID, workflowOwner string) (jsonrpc.Request[json.RawMessage], error) { - if req.Params == nil { - return req, nil - } - - rewrite := func(payload any) error { - b, err := json.Marshal(payload) - if err != nil { - return err - } - raw := json.RawMessage(b) - req.Params = &raw - return nil - } - - switch req.Method { - case vaulttypes.MethodSecretsCreate: - parsed := &vaultcommon.CreateSecretsRequest{} - if err := json.Unmarshal(*req.Params, parsed); err != nil { - return req, nil - } - parsed.OrgId = orgID - parsed.WorkflowOwner = workflowOwner - return req, rewrite(parsed) - case vaulttypes.MethodSecretsUpdate: - parsed := &vaultcommon.UpdateSecretsRequest{} - if err := json.Unmarshal(*req.Params, parsed); err != nil { - return req, nil - } - parsed.OrgId = orgID - parsed.WorkflowOwner = workflowOwner - return req, rewrite(parsed) - case vaulttypes.MethodSecretsDelete: - parsed := &vaultcommon.DeleteSecretsRequest{} - if err := json.Unmarshal(*req.Params, parsed); err != nil { - return req, nil - } - parsed.OrgId = orgID - parsed.WorkflowOwner = workflowOwner - return req, rewrite(parsed) - case vaulttypes.MethodSecretsList: - parsed := &vaultcommon.ListSecretIdentifiersRequest{} - if err := json.Unmarshal(*req.Params, parsed); err != nil { - return req, nil - } - parsed.OrgId = orgID - parsed.WorkflowOwner = workflowOwner - return req, rewrite(parsed) - default: - return req, nil - } -} - -// StripRequestIdentity removes any org/workflow identity fields from Vault -// secret-management request params. This restores the request body shape used by -// the original client when the gateway had previously injected trusted identity -// fields for internal forwarding. -func StripRequestIdentity(req jsonrpc.Request[json.RawMessage]) (jsonrpc.Request[json.RawMessage], error) { - return NormalizeRequestWithIdentity(req, "", "") -} diff --git a/core/capabilities/vault/request_normalization_test.go b/core/capabilities/vault/request_normalization_test.go deleted file mode 100644 index c0573c048ce..00000000000 --- a/core/capabilities/vault/request_normalization_test.go +++ /dev/null @@ -1,73 +0,0 @@ -package vault - -import ( - "encoding/json" - "testing" - - "github.com/stretchr/testify/require" - - vaultcommon "github.com/smartcontractkit/chainlink-common/pkg/capabilities/actions/vault" - jsonrpc "github.com/smartcontractkit/chainlink-common/pkg/jsonrpc2" - "github.com/smartcontractkit/chainlink/v2/core/capabilities/vault/vaulttypes" -) - -func TestNormalizeRequestWithIdentity_RoundTripsCreateRequestIdentity(t *testing.T) { - req := mustVaultJSONRPCRequest(t, vaulttypes.MethodSecretsCreate, &vaultcommon.CreateSecretsRequest{ - RequestId: "req-1", - OrgId: "", - WorkflowOwner: "", - }) - - withIdentity, err := NormalizeRequestWithIdentity(req, "org-123", "0xowner") - require.NoError(t, err) - - parsedWithIdentity := mustParseCreateSecretsRequest(t, withIdentity) - require.Equal(t, "org-123", parsedWithIdentity.OrgId) - require.Equal(t, "0xowner", parsedWithIdentity.WorkflowOwner) - - stripped, err := StripRequestIdentity(withIdentity) - require.NoError(t, err) - - parsedStripped := mustParseCreateSecretsRequest(t, stripped) - require.Empty(t, parsedStripped.OrgId) - require.Empty(t, parsedStripped.WorkflowOwner) - require.Equal(t, "req-1", parsedStripped.RequestId) -} - -func TestStripRequestIdentity_LeavesMalformedParamsUnchanged(t *testing.T) { - raw := json.RawMessage(`{"not":"valid"`) - req := jsonrpc.Request[json.RawMessage]{ - Version: jsonrpc.JsonRpcVersion, - ID: "req-1", - Method: vaulttypes.MethodSecretsCreate, - Params: &raw, - } - - stripped, err := StripRequestIdentity(req) - require.NoError(t, err) - require.Equal(t, string(raw), string(*stripped.Params)) -} - -func mustVaultJSONRPCRequest(t *testing.T, method string, payload any) jsonrpc.Request[json.RawMessage] { - t.Helper() - - b, err := json.Marshal(payload) - require.NoError(t, err) - - raw := json.RawMessage(b) - return jsonrpc.Request[json.RawMessage]{ - Version: jsonrpc.JsonRpcVersion, - ID: "req-1", - Method: method, - Params: &raw, - } -} - -func mustParseCreateSecretsRequest(t *testing.T, req jsonrpc.Request[json.RawMessage]) *vaultcommon.CreateSecretsRequest { - t.Helper() - - parsed := &vaultcommon.CreateSecretsRequest{} - require.NotNil(t, req.Params) - require.NoError(t, json.Unmarshal(*req.Params, parsed)) - return parsed -} diff --git a/core/capabilities/vault/validator.go b/core/capabilities/vault/validator.go index 58592e6460a..e569c7d7d80 100644 --- a/core/capabilities/vault/validator.go +++ b/core/capabilities/vault/validator.go @@ -23,16 +23,16 @@ type RequestValidator struct { } func (r *RequestValidator) ValidateCreateSecretsRequest(ctx context.Context, publicKey *tdh2easy.PublicKey, request *vaultcommon.CreateSecretsRequest) error { - return r.validateWriteRequest(ctx, publicKey, request.RequestId, request.OrgId, request.WorkflowOwner, request.EncryptedSecrets) + return r.validateWriteRequest(ctx, publicKey, request.RequestId, request.EncryptedSecrets) } func (r *RequestValidator) ValidateUpdateSecretsRequest(ctx context.Context, publicKey *tdh2easy.PublicKey, request *vaultcommon.UpdateSecretsRequest) error { - return r.validateWriteRequest(ctx, publicKey, request.RequestId, request.OrgId, request.WorkflowOwner, request.EncryptedSecrets) + return r.validateWriteRequest(ctx, publicKey, request.RequestId, request.EncryptedSecrets) } -// validateWriteRequest performs common validation for CreateSecrets and UpdateSecrets requests. -// It treats publicKey as optional, since it can be nil if the gateway nodes don't have the public key cached yet. -func (r *RequestValidator) validateWriteRequest(ctx context.Context, publicKey *tdh2easy.PublicKey, id string, orgID string, workflowOwner string, encryptedSecrets []*vaultcommon.EncryptedSecret) error { +// validateWriteRequest performs common validation for CreateSecrets and UpdateSecrets requests +// It treats publicKey as optional, since it can be nil if the gateway nodes don't have the public key cached yet +func (r *RequestValidator) validateWriteRequest(ctx context.Context, publicKey *tdh2easy.PublicKey, id string, encryptedSecrets []*vaultcommon.EncryptedSecret) error { if id == "" { return errors.New("request ID must not be empty") } @@ -66,11 +66,7 @@ func (r *RequestValidator) validateWriteRequest(ctx context.Context, publicKey * if err := r.validateCiphertextSize(ctx, req.EncryptedValue); err != nil { return fmt.Errorf("secret encrypted value at index %d is invalid: %w", idx, err) } - expectedWorkflowOwner := workflowOwner - if expectedWorkflowOwner == "" && orgID == "" { - expectedWorkflowOwner = req.Id.Owner - } - err := EnsureRightLabelOnSecret(publicKey, req.EncryptedValue, expectedWorkflowOwner, orgID) + err := EnsureRightLabelOnSecret(publicKey, req.EncryptedValue, req.Id.Owner, "") if err != nil { return errors.New("Encrypted Secret at index [" + strconv.Itoa(idx) + "] doesn't have owner as the label. Error: " + err.Error()) } diff --git a/core/capabilities/vault/validator_test.go b/core/capabilities/vault/validator_test.go index dfbefe41076..8ac916ea499 100644 --- a/core/capabilities/vault/validator_test.go +++ b/core/capabilities/vault/validator_test.go @@ -298,60 +298,3 @@ func TestRequestValidator_CiphertextSizeLimit(t *testing.T) { }) } } - -func TestRequestValidator_ValidateCreateSecretsRequest_UsesRequestIdentityForOrgLabels(t *testing.T) { - pk, _ := generateTestKeys(t) - validator := NewRequestValidator( - limits.NewUpperBoundLimiter(10), - limits.NewUpperBoundLimiter[pkgconfig.Size](10*pkgconfig.KByte), - ) - - orgID := "org_2xAbCdEfGhIjKlMnOpQrStUvWxYz" - workflowOwner := "0x0001020304050607080900010203040506070809" - encrypted := encryptWithOrgIDLabel(t, pk, orgID) - - err := validator.ValidateCreateSecretsRequest(t.Context(), pk, &vaultcommon.CreateSecretsRequest{ - RequestId: "request-id", - OrgId: orgID, - WorkflowOwner: workflowOwner, - EncryptedSecrets: []*vaultcommon.EncryptedSecret{ - { - Id: &vaultcommon.SecretIdentifier{ - Key: "key", - Namespace: "namespace", - Owner: orgID, - }, - EncryptedValue: encrypted, - }, - }, - }) - - require.NoError(t, err) -} - -func TestRequestValidator_ValidateCreateSecretsRequest_FallsBackToSecretOwnerForLegacyRequests(t *testing.T) { - pk, _ := generateTestKeys(t) - validator := NewRequestValidator( - limits.NewUpperBoundLimiter(10), - limits.NewUpperBoundLimiter[pkgconfig.Size](10*pkgconfig.KByte), - ) - - workflowOwner := "0x0001020304050607080900010203040506070809" - encrypted := encryptWithEthAddressLabel(t, pk, workflowOwner) - - err := validator.ValidateCreateSecretsRequest(t.Context(), pk, &vaultcommon.CreateSecretsRequest{ - RequestId: "request-id", - EncryptedSecrets: []*vaultcommon.EncryptedSecret{ - { - Id: &vaultcommon.SecretIdentifier{ - Key: "key", - Namespace: "namespace", - Owner: workflowOwner, - }, - EncryptedValue: encrypted, - }, - }, - }) - - require.NoError(t, err) -} diff --git a/core/cmd/admin_commands.go b/core/cmd/admin_commands.go index 06f8c0e836c..7d6bbbe2bbd 100644 --- a/core/cmd/admin_commands.go +++ b/core/cmd/admin_commands.go @@ -332,25 +332,16 @@ func (s *Shell) Profile(c *cli.Context) error { genDir := filepath.Join(baseDir, "debuginfo-"+time.Now().Format(time.RFC3339)) vitals := c.StringSlice("vitals") - // supportsDeltaVitals contains profiles that can be run with or without seconds param. - // (see https://pkg.go.dev/net/http/pprof#hdr-Parameters) - supportsDeltaVitals := []string{ + allVitals := []string{ "allocs", // A sampling of all past memory allocations "block", // Stack traces that led to blocking on synchronization primitives "cmdline", // The command line invocation of the current program "goroutine", // Stack traces of all current goroutines "heap", // A sampling of memory allocations of live objects. "mutex", // Stack traces of holders of contended mutexes + "profile", // CPU profile. "threadcreate", // Stack traces that led to the creation of new OS threads - } - // durationOnlyVitals contains profiles that can be run only with the seconds param. - durationOnlyVitals := []string{ - "profile", // CPU profile. - "trace", // A trace of execution of the current program. - } - allVitals := supportsDeltaVitals - if seconds > 0 { - allVitals = append(allVitals, durationOnlyVitals...) + "trace", // A trace of execution of the current program. } if len(vitals) == 0 { vitals = slices.Clone(allVitals) @@ -445,10 +436,7 @@ func (s *Shell) profile(ctx context.Context, genDir string, name string, vitals defer wgPprof.Done() ctx, cancel := context.WithTimeout(ctx, time.Duration(max(seconds, 0)+web.PPROFOverheadSeconds)*time.Second) defer cancel() - uri := fmt.Sprintf(path+"/debug/pprof/%s", vt) - if seconds > 0 { - uri += fmt.Sprintf("?seconds=%d", seconds) - } + uri := fmt.Sprintf(path+"/debug/pprof/%s?seconds=%d", vt, seconds) resp, err := s.HTTP.Get(ctx, uri) if err != nil { errs <- fmt.Errorf("error collecting %s: %w", uri, err) diff --git a/core/scripts/cre/environment/configs/capability_defaults.toml b/core/scripts/cre/environment/configs/capability_defaults.toml index f04783f936c..65fb75d3247 100644 --- a/core/scripts/cre/environment/configs/capability_defaults.toml +++ b/core/scripts/cre/environment/configs/capability_defaults.toml @@ -105,14 +105,6 @@ OutgoingPerSenderBurst = 10 OutgoingPerSenderRPS = 10 -#[capability_configs.vault] -# no binary path for vault, it's built-in - -[capability_configs.vault.values] - [capability_configs.vault.values.auth0] - issuerURL = "http://host.docker.internal:18123/" - audience = "https://vault.test.chain.link" - [capability_configs.write-evm] # No binary_name needed - this is a built-in capability, it doesn't exist as a separate binary diff --git a/core/scripts/cre/environment/configs/workflow-gateway-capabilities-don-vault-jwt_auth-enabled.toml b/core/scripts/cre/environment/configs/workflow-gateway-legacy-vault-don.toml similarity index 65% rename from core/scripts/cre/environment/configs/workflow-gateway-capabilities-don-vault-jwt_auth-enabled.toml rename to core/scripts/cre/environment/configs/workflow-gateway-legacy-vault-don.toml index 7e332e45abb..b352240acd3 100644 --- a/core/scripts/cre/environment/configs/workflow-gateway-capabilities-don-vault-jwt_auth-enabled.toml +++ b/core/scripts/cre/environment/configs/workflow-gateway-legacy-vault-don.toml @@ -1,23 +1,22 @@ -# Custom local CRE topology for Vault e2e coverage on top of workflow-gateway-capabilities-don. -# It enables the VaultJWTAuthEnabled and VaultOrgIdAsSecretOwnerEnabled CRE flags on workflow, capabilities, and gateway nodes. +# NOTE: Identical to workflow-gatewway-capabilities.toml but with a vault capability config override +# to disable the new pending queue feature. [chip_router] image = "local-cre-chip-router:v1.0.1" [[blockchains]] type = "anvil" chain_id = "1337" - container_name = "anvil-1337" docker_cmd_params = ["-b", "0.5", "--mixed-mining"] [[blockchains]] type = "anvil" chain_id = "2337" - container_name = "anvil-2337" port = "8546" docker_cmd_params = ["-b", "0.5", "--mixed-mining"] [jd] - csa_encryption_key = "d1093c0060d50a3c89c189b2e485da5a3ce57f3dcb38ab7e2c0d5f0bb2314a44" + csa_encryption_key = "d1093c0060d50a3c89c189b2e485da5a3ce57f3dcb38ab7e2c0d5f0bb2314a44" # any random 32 byte hex string + # change to your version image = "job-distributor:0.22.1" [fake] @@ -26,7 +25,13 @@ [fake_http] port = 8666 +#[s3provider] +# # use all defaults +# port = 9000 +# console_port = 9001 + [infra] + # either "docker" or "kubernetes" type = "docker" [[nodesets]] @@ -35,10 +40,15 @@ don_types = ["workflow"] override_mode = "all" http_port_range_start = 10100 + + # even though this DON is not using any capability for chain with ID 2337 we still need it to be connected to it, + # because bootstrap job for capability DON will be created on the boostrap node from this DON supported_evm_chains = [1337, 2337] - env_vars = { CL_EVM_CMD = "", OTEL_SERVICE_NAME = "chainlink-node", CL_CRE_SETTINGS_DEFAULT = '{"VaultJWTAuthEnabled":"true","VaultOrgIdAsSecretOwnerEnabled":"true"}' } + + env_vars = { CL_EVM_CMD = "", OTEL_SERVICE_NAME = "chainlink-node" } capabilities = ["ocr3", "custom-compute", "web-api-trigger", "cron", "http-action", "http-trigger", "consensus", "don-time", "write-evm-1337", "read-contract-1337", "evm-1337"] - registry_based_launch_allowlist = ["cron-trigger@1.0.0"] + + # See ./examples/workflow-don-overrides.toml to learn how to override capability configs [nodesets.db] image = "postgres:12.0" @@ -50,6 +60,7 @@ docker_ctx = "../../../.." docker_file = "core/chainlink.Dockerfile" docker_build_args = { "CL_IS_PROD_BUILD" = "false" } + # image = "chainlink-tmp:latest" user_config_overrides = "" [[nodesets]] @@ -59,10 +70,18 @@ exposes_remote_capabilities = true override_mode = "all" http_port_range_start = 10200 + + # we need to have chain 1337 configured (even if no capability uses it), because we use node addresses on chain 1337 + # to identify nodes in the gateway configuration (required by both web-api-target and vault capabilities) supported_evm_chains = [1337, 2337] - env_vars = { CL_EVM_CMD = "", OTEL_SERVICE_NAME = "chainlink-node", CL_CRE_SETTINGS_DEFAULT = '{"VaultJWTAuthEnabled":"true","VaultOrgIdAsSecretOwnerEnabled":"true"}' } + + env_vars = { CL_EVM_CMD = "", OTEL_SERVICE_NAME = "chainlink-node" } capabilities = ["web-api-target", "vault", "write-evm-2337", "read-contract-2337", "evm-2337"] + [nodesets.capability_configs] + [nodesets.capability_configs.vault.values] + EnableDeterministicPendingQueue = false # don't use the new pending queue feature for this DON. + [nodesets.db] image = "postgres:12.0" port = 13100 @@ -73,6 +92,7 @@ docker_ctx = "../../../.." docker_file = "core/chainlink.Dockerfile" docker_build_args = { "CL_IS_PROD_BUILD" = "false" } + # image = "chainlink-tmp:latest" user_config_overrides = "" [[nodesets]] @@ -81,7 +101,8 @@ don_types = ["bootstrap", "gateway"] override_mode = "each" http_port_range_start = 10300 - env_vars = { CL_EVM_CMD = "", OTEL_SERVICE_NAME = "chainlink-node", CL_CRE_SETTINGS_DEFAULT = '{"VaultJWTAuthEnabled":"true","VaultOrgIdAsSecretOwnerEnabled":"true"}' } + + env_vars = { CL_EVM_CMD = "", OTEL_SERVICE_NAME = "chainlink-node" } supported_evm_chains = [1337, 2337] [nodesets.db] @@ -94,5 +115,8 @@ docker_ctx = "../../../.." docker_file = "core/chainlink.Dockerfile" docker_build_args = { "CL_IS_PROD_BUILD" = "false" } + # 5002 is the web API capabilities port for incoming requests + # 15002 is the vault port for incoming requests custom_ports = ["5002:5002","15002:15002"] + # image = "chainlink-tmp:latest" user_config_overrides = "" diff --git a/core/scripts/cre/environment/docs/TOPOLOGIES.md b/core/scripts/cre/environment/docs/TOPOLOGIES.md index 1f332a17dbf..f6fd917157b 100644 --- a/core/scripts/cre/environment/docs/TOPOLOGIES.md +++ b/core/scripts/cre/environment/docs/TOPOLOGIES.md @@ -6,13 +6,11 @@ This file is generated by `go run . topology generate`. Do not edit manually. |---|---|---:| | `configs/workflow-don-solana.toml` | `multi-don` | 3 ([details](topologies/workflow-don-solana.md)) | | `configs/workflow-don-tron.toml` | `single-don` | 2 ([details](topologies/workflow-don-tron.md)) | -| `configs/workflow-gateway-capabilities-don-vault-jwt_auth-enabled.toml` | `multi-don` | 3 ([details](topologies/workflow-gateway-capabilities-don-vault-jwt_auth-enabled.md)) | | `configs/workflow-gateway-capabilities-don.toml` | `multi-don` | 3 ([details](topologies/workflow-gateway-capabilities-don.md)) | -| `configs/workflow-gateway-don-aptos.toml` | `single-don` | 2 ([details](topologies/workflow-gateway-don-aptos.md)) | | `configs/workflow-gateway-don-grpc-source.toml` | `single-don` | 2 ([details](topologies/workflow-gateway-don-grpc-source.md)) | | `configs/workflow-gateway-don.toml` | `single-don` | 2 ([details](topologies/workflow-gateway-don.md)) | +| `configs/workflow-gateway-legacy-vault-don.toml` | `multi-don` | 3 ([details](topologies/workflow-gateway-legacy-vault-don.md)) | | `configs/workflow-gateway-mock-don.toml` | `multi-don` | 3 ([details](topologies/workflow-gateway-mock-don.md)) | -| `configs/workflow-gateway-sharded-5-dons.toml` | `sharded` | 7 ([details](topologies/workflow-gateway-sharded-5-dons.md)) | | `configs/workflow-gateway-sharded-don.toml` | `sharded` | 3 ([details](topologies/workflow-gateway-sharded-don.md)) | Tip: run `go run . topology list` for quick terminal guidance. diff --git a/core/scripts/cre/environment/docs/topologies/workflow-gateway-don-aptos.md b/core/scripts/cre/environment/docs/topologies/workflow-gateway-don-aptos.md deleted file mode 100644 index 7660a2b2c43..00000000000 --- a/core/scripts/cre/environment/docs/topologies/workflow-gateway-don-aptos.md +++ /dev/null @@ -1,34 +0,0 @@ -# DON Topology - -- Config: `configs/workflow-gateway-don-aptos.toml` -- Class: `single-don` -- Infra: `docker` - -## Capability Matrix - -This matrix is the source of truth for capability placement by DON. - -| Capability | `bootstrap-gateway` | `workflow` | -|---|---|---| -| `aptos` | `-` | `local (4)` | -| `consensus` | `-` | `local` | -| `cron` | `-` | `local` | - -## DONs - -### `bootstrap-gateway` - -- Types: `bootstrap`, `gateway` -- Nodes: `1` -- Roles: `bootstrap`, `gateway` -- EVM chains: `1337` -- Exposes remote capabilities: `false` - -### `workflow` - -- Types: `workflow` -- Nodes: `4` -- Roles: `plugin` -- EVM chains: `1337` -- Exposes remote capabilities: `false` - diff --git a/core/scripts/cre/environment/docs/topologies/workflow-gateway-don-grpc-source.md b/core/scripts/cre/environment/docs/topologies/workflow-gateway-don-grpc-source.md index 3f9845a8068..12ed6c9eed4 100644 --- a/core/scripts/cre/environment/docs/topologies/workflow-gateway-don-grpc-source.md +++ b/core/scripts/cre/environment/docs/topologies/workflow-gateway-don-grpc-source.md @@ -41,4 +41,5 @@ This matrix is the source of truth for capability placement by DON. - Roles: `plugin` - EVM chains: `1337,2337` - Exposes remote capabilities: `false` +- Workflow additional sources: `enabled` diff --git a/core/scripts/cre/environment/docs/topologies/workflow-gateway-capabilities-don-vault-jwt_auth-enabled.md b/core/scripts/cre/environment/docs/topologies/workflow-gateway-legacy-vault-don.md similarity index 93% rename from core/scripts/cre/environment/docs/topologies/workflow-gateway-capabilities-don-vault-jwt_auth-enabled.md rename to core/scripts/cre/environment/docs/topologies/workflow-gateway-legacy-vault-don.md index 69fdc5910db..767d3e27fc4 100644 --- a/core/scripts/cre/environment/docs/topologies/workflow-gateway-capabilities-don-vault-jwt_auth-enabled.md +++ b/core/scripts/cre/environment/docs/topologies/workflow-gateway-legacy-vault-don.md @@ -1,6 +1,6 @@ # DON Topology -- Config: `configs/workflow-gateway-capabilities-don-vault-jwt_auth-enabled.toml` +- Config: `configs/workflow-gateway-legacy-vault-don.toml` - Class: `multi-don` - Infra: `docker` diff --git a/core/scripts/cre/environment/docs/topologies/workflow-gateway-sharded-5-dons.md b/core/scripts/cre/environment/docs/topologies/workflow-gateway-sharded-5-dons.md deleted file mode 100644 index d5e054d27c9..00000000000 --- a/core/scripts/cre/environment/docs/topologies/workflow-gateway-sharded-5-dons.md +++ /dev/null @@ -1,84 +0,0 @@ -# DON Topology - -- Config: `configs/workflow-gateway-sharded-5-dons.toml` -- Class: `sharded` -- Infra: `docker` - -## Capability Matrix - -This matrix is the source of truth for capability placement by DON. - -| Capability | `bootstrap-gateway` | `shard0` | `shard1` | `shard2` | `shard3` | `shard4` | `shard5` | -|---|---|---|---|---|---|---|---| -| `consensus` | `-` | `local` | `local` | `local` | `local` | `local` | `local` | -| `cron` | `-` | `local` | `local` | `local` | `local` | `local` | `local` | -| `custom-compute` | `-` | `local` | `local` | `local` | `local` | `local` | `local` | -| `don-time` | `-` | `local` | `local` | `local` | `local` | `local` | `local` | -| `evm` | `-` | `local (1337,2337)` | `local (1337,2337)` | `local (1337,2337)` | `local (1337,2337)` | `local (1337,2337)` | `local (1337,2337)` | -| `http-action` | `-` | `local` | `-` | `-` | `-` | `-` | `-` | -| `http-trigger` | `-` | `local` | `-` | `-` | `-` | `-` | `-` | -| `ocr3` | `-` | `local` | `local` | `local` | `local` | `local` | `local` | -| `read-contract` | `-` | `local (1337,2337)` | `local (1337,2337)` | `local (1337,2337)` | `local (1337,2337)` | `local (1337,2337)` | `local (1337,2337)` | -| `vault` | `-` | `local` | `-` | `-` | `-` | `-` | `-` | -| `web-api-target` | `-` | `local` | `local` | `local` | `local` | `local` | `local` | -| `web-api-trigger` | `-` | `local` | `local` | `local` | `local` | `local` | `local` | -| `write-evm` | `-` | `local (1337,2337)` | `local (1337,2337)` | `local (1337,2337)` | `local (1337,2337)` | `local (1337,2337)` | `local (1337,2337)` | - -## DONs - -### `bootstrap-gateway` - -- Types: `bootstrap`, `gateway` -- Nodes: `1` -- Roles: `bootstrap`, `gateway` -- EVM chains: `1337,2337` -- Exposes remote capabilities: `false` - -### `shard0` - -- Types: `shard`, `workflow` -- Nodes: `4` -- Roles: `plugin` -- EVM chains: `1337,2337` -- Exposes remote capabilities: `false` - -### `shard1` - -- Types: `shard`, `workflow` -- Nodes: `4` -- Roles: `plugin` -- EVM chains: `1337,2337` -- Exposes remote capabilities: `false` - -### `shard2` - -- Types: `shard`, `workflow` -- Nodes: `4` -- Roles: `plugin` -- EVM chains: `1337,2337` -- Exposes remote capabilities: `false` - -### `shard3` - -- Types: `shard`, `workflow` -- Nodes: `4` -- Roles: `plugin` -- EVM chains: `1337,2337` -- Exposes remote capabilities: `false` - -### `shard4` - -- Types: `shard`, `workflow` -- Nodes: `4` -- Roles: `plugin` -- EVM chains: `1337,2337` -- Exposes remote capabilities: `false` - -### `shard5` - -- Types: `shard`, `workflow` -- Nodes: `4` -- Roles: `plugin` -- EVM chains: `1337,2337` -- Exposes remote capabilities: `false` - diff --git a/core/scripts/cre/environment/environment/workflow.go b/core/scripts/cre/environment/environment/workflow.go index 631e6e226a1..407c25f7eb0 100644 --- a/core/scripts/cre/environment/environment/workflow.go +++ b/core/scripts/cre/environment/environment/workflow.go @@ -475,7 +475,7 @@ func deployWorkflow( fmt.Printf("\n⚙️ Registering workflow '%s' with the workflow registry\n\n", workflowNameFlag) - workflowID, registerErr := creworkflow.RegisterWithContract(ctx, sethClient, common.HexToAddress(workflowRegistryAddress), workflowRegistryVersion, uint64(donIDFlag), workflowNameFlag, "file://"+wasmWorkflowFilePathFlag, configPath, secretsPath, nil, &containerTargetDirFlag) + workflowID, registerErr := creworkflow.RegisterWithContract(ctx, sethClient, common.HexToAddress(workflowRegistryAddress), workflowRegistryVersion, uint64(donIDFlag), workflowNameFlag, "file://"+wasmWorkflowFilePathFlag, configPath, secretsPath, &containerTargetDirFlag) if registerErr != nil { return errors.Wrapf(registerErr, "❌ failed to register workflow %s", workflowNameFlag) } diff --git a/core/scripts/cre/environment/examples/workflows/v1/proof-of-reserve/cron-based/go.mod b/core/scripts/cre/environment/examples/workflows/v1/proof-of-reserve/cron-based/go.mod index 651f69e8f45..c1a9836216f 100644 --- a/core/scripts/cre/environment/examples/workflows/v1/proof-of-reserve/cron-based/go.mod +++ b/core/scripts/cre/environment/examples/workflows/v1/proof-of-reserve/cron-based/go.mod @@ -3,12 +3,10 @@ module github.com/smartcontractkit/chainlink/core/scripts/cre/environment/exampl go 1.26.2 require ( - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420210428-afd603dd8f5c + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260401185621-720567ef9343 gopkg.in/yaml.v3 v3.0.1 ) -require github.com/pkg/errors v0.9.1 // indirect - require ( github.com/bahlo/generic-list-go v0.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -18,12 +16,12 @@ require ( github.com/cloudevents/sdk-go/binding/format/protobuf/v2 v2.16.2 // indirect github.com/cloudevents/sdk-go/v2 v2.16.2 // indirect github.com/ethereum/go-ethereum v1.17.1 - github.com/gabriel-vasile/mimetype v1.4.13 // indirect + github.com/gabriel-vasile/mimetype v1.4.10 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.30.1 // indirect + github.com/go-playground/validator/v10 v10.28.0 // indirect github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect @@ -38,6 +36,7 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.23.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.66.1 // indirect @@ -45,8 +44,8 @@ require ( 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-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect - github.com/smartcontractkit/libocr v0.0.0-20260403184524-b6409238958d // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260326111235-8c09d1a4491f // indirect + github.com/smartcontractkit/libocr v0.0.0-20260304194147-a03701e2c02e // indirect github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect @@ -56,7 +55,7 @@ require ( go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.13.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 // indirect diff --git a/core/scripts/cre/environment/examples/workflows/v1/proof-of-reserve/cron-based/go.sum b/core/scripts/cre/environment/examples/workflows/v1/proof-of-reserve/cron-based/go.sum index 6978509eb42..6cd2214c054 100644 --- a/core/scripts/cre/environment/examples/workflows/v1/proof-of-reserve/cron-based/go.sum +++ b/core/scripts/cre/environment/examples/workflows/v1/proof-of-reserve/cron-based/go.sum @@ -20,8 +20,8 @@ github.com/dominikbraun/graph v0.23.0 h1:TdZB4pPqCLFxYhdyMFb1TBdFxp8XLcJfTTBQucV github.com/dominikbraun/graph v0.23.0/go.mod h1:yOjYyogZLY1LSG9E33JWZJiq5k83Qy2C6POAuiViluc= github.com/ethereum/go-ethereum v1.17.1 h1:IjlQDjgxg2uL+GzPRkygGULPMLzcYWncEI7wbaizvho= github.com/ethereum/go-ethereum v1.17.1/go.mod h1:7UWOVHL7K3b8RfVRea022btnzLCaanwHtBuH1jUCH/I= -github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= -github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= +github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0= +github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -33,8 +33,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.30.1 h1:f3zDSN/zOma+w6+1Wswgd9fLkdwy06ntQJp0BBvFG0w= -github.com/go-playground/validator/v10 v10.30.1/go.mod h1:oSuBIQzuJxL//3MelwSLD5hc2Tu889bF0Idm9Dg26cM= +github.com/go-playground/validator/v10 v10.28.0 h1:Q7ibns33JjyW48gHkuFT91qX48KG0ktULL6FgHdG688= +github.com/go-playground/validator/v10 v10.28.0/go.mod h1:GoI6I1SjPBh9p7ykNE/yj3fFYbyDOpwMn5KXd+m2hUU= github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= @@ -92,14 +92,14 @@ github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6Ng github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420210428-afd603dd8f5c h1:iEEZ+pi1z1ii4iTWBymkZ4W0ba2yxoiba8+ejgVZ1t8= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420210428-afd603dd8f5c/go.mod h1:Ukc8qY13EcRcSQv6ZBmTKl0YE6F8uE5lj4zsX5aXvXM= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260401185621-720567ef9343 h1:hB/4b6UVS4gO4U+DB8ngBAluyV4soIgtEJp5q5gbMpA= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260401185621-720567ef9343/go.mod h1:6tlxlsiWypGdpaZI+Kz5gFm53gCAcU/pTU3PR9CiFB8= 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-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= -github.com/smartcontractkit/libocr v0.0.0-20260403184524-b6409238958d h1:PvXor5Fjer7FIONSqYXbpd1LkA14hWrlAyxXzOrC9t8= -github.com/smartcontractkit/libocr v0.0.0-20260403184524-b6409238958d/go.mod h1:PLdNK6GlqfxIWXzziPkU7dCAVlVFeYkyyW7AQY0R+4Q= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260326111235-8c09d1a4491f h1:8p3vE987AHM3Of1JvnNJXNE/AtWtfNvJhk3TeeAG3Qw= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260326111235-8c09d1a4491f/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/libocr v0.0.0-20260304194147-a03701e2c02e h1:poXTj5cFVM6XfC4HICIDYkDVc/A6OYB0eeID0wU2JQE= +github.com/smartcontractkit/libocr v0.0.0-20260304194147-a03701e2c02e/go.mod h1:PLdNK6GlqfxIWXzziPkU7dCAVlVFeYkyyW7AQY0R+4Q= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= @@ -126,8 +126,8 @@ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0 h1:w1K go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0/go.mod h1:HBy4BjzgVE8139ieRI75oXm3EcDN+6GhD88JT1Kjvxg= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 h1:mq/Qcf28TWz719lE3/hMB4KkyDuLJIvgJnFGcd0kEUI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0/go.mod h1:yk5LXEYhsL2htyDNJbEq7fWzNEigeEdV5xBF/Y+kAv0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 h1:EtFWSnwW9hGObjkIdmlnWSydO+Qs8OwzfzXLUPg4xOc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0/go.mod h1:QjUEoiGCPkvFZ/MjK6ZZfNOS6mfVEVKYE99dFhuN2LI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 h1:3iZJKlCZufyRzPzlQhUIWVmfltrXuGyfjREgGP3UUjc= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0/go.mod h1:/G+nUPfhq2e+qiXMGxMwumDrP5jtzU+mWN7/sjT2rak= go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.13.0 h1:yEX3aC9KDgvYPhuKECHbOlr5GLwH6KTjLJ1sBSkkxkc= diff --git a/core/scripts/cre/environment/examples/workflows/v2/cron/go.mod b/core/scripts/cre/environment/examples/workflows/v2/cron/go.mod index 4f0c6de66ed..5a5e46c6880 100644 --- a/core/scripts/cre/environment/examples/workflows/v2/cron/go.mod +++ b/core/scripts/cre/environment/examples/workflows/v2/cron/go.mod @@ -15,7 +15,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 // indirect github.com/stretchr/testify v1.11.1 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect diff --git a/core/scripts/cre/environment/examples/workflows/v2/cron/go.sum b/core/scripts/cre/environment/examples/workflows/v2/cron/go.sum index 36d3ea1282d..e26a567397f 100644 --- a/core/scripts/cre/environment/examples/workflows/v2/cron/go.sum +++ b/core/scripts/cre/environment/examples/workflows/v2/cron/go.sum @@ -20,8 +20,8 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v1.3.0 h1:qBZ4y6qlTOynSpU1QAi2Fgr3tUZQ332b6hit9EVZqkk= diff --git a/core/scripts/cre/environment/examples/workflows/v2/http/go.mod b/core/scripts/cre/environment/examples/workflows/v2/http/go.mod index 4278b58b5ff..e9d1900ddec 100644 --- a/core/scripts/cre/environment/examples/workflows/v2/http/go.mod +++ b/core/scripts/cre/environment/examples/workflows/v2/http/go.mod @@ -15,7 +15,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 // indirect github.com/stretchr/testify v1.11.1 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/core/scripts/cre/environment/examples/workflows/v2/http/go.sum b/core/scripts/cre/environment/examples/workflows/v2/http/go.sum index 4e28761948b..8ef31e279ae 100644 --- a/core/scripts/cre/environment/examples/workflows/v2/http/go.sum +++ b/core/scripts/cre/environment/examples/workflows/v2/http/go.sum @@ -20,8 +20,8 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/networking/http v1.3.0 h1:m0OkXuaLtIcYvBrLtxSfygrGtBJvPwaSoANe48434BA= diff --git a/core/scripts/cre/environment/examples/workflows/v2/http_simple/go.mod b/core/scripts/cre/environment/examples/workflows/v2/http_simple/go.mod index 4278b58b5ff..e9d1900ddec 100644 --- a/core/scripts/cre/environment/examples/workflows/v2/http_simple/go.mod +++ b/core/scripts/cre/environment/examples/workflows/v2/http_simple/go.mod @@ -15,7 +15,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 // indirect github.com/stretchr/testify v1.11.1 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/core/scripts/cre/environment/examples/workflows/v2/http_simple/go.sum b/core/scripts/cre/environment/examples/workflows/v2/http_simple/go.sum index 4e28761948b..8ef31e279ae 100644 --- a/core/scripts/cre/environment/examples/workflows/v2/http_simple/go.sum +++ b/core/scripts/cre/environment/examples/workflows/v2/http_simple/go.sum @@ -20,8 +20,8 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/networking/http v1.3.0 h1:m0OkXuaLtIcYvBrLtxSfygrGtBJvPwaSoANe48434BA= diff --git a/core/scripts/cre/environment/examples/workflows/v2/node-mode/go.mod b/core/scripts/cre/environment/examples/workflows/v2/node-mode/go.mod index b1e1e976134..13fcd9e7b38 100644 --- a/core/scripts/cre/environment/examples/workflows/v2/node-mode/go.mod +++ b/core/scripts/cre/environment/examples/workflows/v2/node-mode/go.mod @@ -15,7 +15,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 // indirect github.com/stretchr/testify v1.11.1 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect diff --git a/core/scripts/cre/environment/examples/workflows/v2/node-mode/go.sum b/core/scripts/cre/environment/examples/workflows/v2/node-mode/go.sum index b1ce5ad376b..25a0bcfa7af 100644 --- a/core/scripts/cre/environment/examples/workflows/v2/node-mode/go.sum +++ b/core/scripts/cre/environment/examples/workflows/v2/node-mode/go.sum @@ -22,8 +22,8 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v1.3.0 h1:qBZ4y6qlTOynSpU1QAi2Fgr3tUZQ332b6hit9EVZqkk= diff --git a/core/scripts/cre/environment/examples/workflows/v2/proof-of-reserve/cron-based/go.mod b/core/scripts/cre/environment/examples/workflows/v2/proof-of-reserve/cron-based/go.mod index 9c071dcd94b..75c3492b748 100644 --- a/core/scripts/cre/environment/examples/workflows/v2/proof-of-reserve/cron-based/go.mod +++ b/core/scripts/cre/environment/examples/workflows/v2/proof-of-reserve/cron-based/go.mod @@ -4,9 +4,9 @@ go 1.26.2 require ( github.com/ethereum/go-ethereum v1.17.1 - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420210428-afd603dd8f5c + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260401185621-720567ef9343 github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20251222115927-36a18321243c - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260326111235-8c09d1a4491f github.com/smartcontractkit/cre-sdk-go v1.5.0 github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/evm v0.10.0 github.com/smartcontractkit/cre-sdk-go/capabilities/networking/http v1.3.0 @@ -34,13 +34,13 @@ require ( github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect github.com/ethereum/c-kzg-4844/v2 v2.1.6 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.13 // indirect + github.com/gabriel-vasile/mimetype v1.4.10 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.30.1 // indirect + github.com/go-playground/validator/v10 v10.28.0 // indirect github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect @@ -49,7 +49,7 @@ require ( github.com/holiman/uint256 v1.3.2 // indirect github.com/invopop/jsonschema v0.13.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.18.4 // indirect + github.com/klauspost/compress v1.18.2 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/mailru/easyjson v0.9.0 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect @@ -75,12 +75,12 @@ require ( 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/libocr v0.0.0-20260403184524-b6409238958d // indirect + github.com/smartcontractkit/libocr v0.0.0-20260304194147-a03701e2c02e // indirect github.com/stretchr/testify v1.11.1 // indirect github.com/supranational/blst v0.3.16 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/tklauser/go-sysconf v0.3.16 // indirect - github.com/tklauser/numcpus v0.11.0 // indirect + github.com/tklauser/go-sysconf v0.3.15 // indirect + github.com/tklauser/numcpus v0.10.0 // indirect github.com/urfave/cli/v2 v2.27.7 // indirect github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect @@ -92,7 +92,7 @@ require ( go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.13.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 // indirect diff --git a/core/scripts/cre/environment/examples/workflows/v2/proof-of-reserve/cron-based/go.sum b/core/scripts/cre/environment/examples/workflows/v2/proof-of-reserve/cron-based/go.sum index 2e0a2438571..0f118648aad 100644 --- a/core/scripts/cre/environment/examples/workflows/v2/proof-of-reserve/cron-based/go.sum +++ b/core/scripts/cre/environment/examples/workflows/v2/proof-of-reserve/cron-based/go.sum @@ -76,8 +76,8 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= -github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= -github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= +github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0= +github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= @@ -97,8 +97,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.30.1 h1:f3zDSN/zOma+w6+1Wswgd9fLkdwy06ntQJp0BBvFG0w= -github.com/go-playground/validator/v10 v10.30.1/go.mod h1:oSuBIQzuJxL//3MelwSLD5hc2Tu889bF0Idm9Dg26cM= +github.com/go-playground/validator/v10 v10.28.0 h1:Q7ibns33JjyW48gHkuFT91qX48KG0ktULL6FgHdG688= +github.com/go-playground/validator/v10 v10.28.0/go.mod h1:GoI6I1SjPBh9p7ykNE/yj3fFYbyDOpwMn5KXd+m2hUU= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= @@ -137,8 +137,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grafana/pyroscope-go v1.2.8 h1:UvCwIhlx9DeV7F6TW/z8q1Mi4PIm3vuUJ2ZlCEvmA4M= -github.com/grafana/pyroscope-go v1.2.8/go.mod h1:SSi59eQ1/zmKoY/BKwa5rSFsJaq+242Bcrr4wPix1g8= +github.com/grafana/pyroscope-go v1.2.7 h1:VWBBlqxjyR0Cwk2W6UrE8CdcdD80GOFNutj0Kb1T8ac= +github.com/grafana/pyroscope-go v1.2.7/go.mod h1:o/bpSLiJYYP6HQtvcoVKiE9s5RiNgjYTj1DhiddP2Pc= github.com/grafana/pyroscope-go/godeltaprof v0.1.9 h1:c1Us8i6eSmkW+Ez05d3co8kasnuOY813tbMN8i/a3Og= github.com/grafana/pyroscope-go/godeltaprof v0.1.9/go.mod h1:2+l7K7twW49Ct4wFluZD3tZ6e0SjanjcUUBPVD/UuGU= github.com/graph-gophers/graphql-go v1.5.0 h1:fDqblo50TEpD0LY7RXk/LFVYEVqo3+tXMNMPSVXA1yc= @@ -169,8 +169,8 @@ github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7Bd github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= -github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk= +github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -263,14 +263,14 @@ github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKl github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420210428-afd603dd8f5c h1:iEEZ+pi1z1ii4iTWBymkZ4W0ba2yxoiba8+ejgVZ1t8= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420210428-afd603dd8f5c/go.mod h1:Ukc8qY13EcRcSQv6ZBmTKl0YE6F8uE5lj4zsX5aXvXM= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260401185621-720567ef9343 h1:hB/4b6UVS4gO4U+DB8ngBAluyV4soIgtEJp5q5gbMpA= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260401185621-720567ef9343/go.mod h1:6tlxlsiWypGdpaZI+Kz5gFm53gCAcU/pTU3PR9CiFB8= 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-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-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260326111235-8c09d1a4491f h1:8p3vE987AHM3Of1JvnNJXNE/AtWtfNvJhk3TeeAG3Qw= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260326111235-8c09d1a4491f/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/evm v0.10.0 h1:G0w0cLzHy/5m74IzSGz1Ynjffym4ZxLeUrRLp8EFP5w= @@ -279,8 +279,8 @@ github.com/smartcontractkit/cre-sdk-go/capabilities/networking/http v1.3.0 h1:m0 github.com/smartcontractkit/cre-sdk-go/capabilities/networking/http v1.3.0/go.mod h1:QpLhMGMa//e4G9qMmmCK4NPMcadRBaWC2FDV9hniMrI= github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v1.3.0 h1:qBZ4y6qlTOynSpU1QAi2Fgr3tUZQ332b6hit9EVZqkk= github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v1.3.0/go.mod h1:Rzhy75vD3FqQo/SV6lypnxIwjWac6IOWzI5BYj3tYMU= -github.com/smartcontractkit/libocr v0.0.0-20260403184524-b6409238958d h1:PvXor5Fjer7FIONSqYXbpd1LkA14hWrlAyxXzOrC9t8= -github.com/smartcontractkit/libocr v0.0.0-20260403184524-b6409238958d/go.mod h1:PLdNK6GlqfxIWXzziPkU7dCAVlVFeYkyyW7AQY0R+4Q= +github.com/smartcontractkit/libocr v0.0.0-20260304194147-a03701e2c02e h1:poXTj5cFVM6XfC4HICIDYkDVc/A6OYB0eeID0wU2JQE= +github.com/smartcontractkit/libocr v0.0.0-20260304194147-a03701e2c02e/go.mod h1:PLdNK6GlqfxIWXzziPkU7dCAVlVFeYkyyW7AQY0R+4Q= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -298,10 +298,10 @@ github.com/supranational/blst v0.3.16 h1:bTDadT+3fK497EvLdWRQEjiGnUtzJ7jjIUMF0jq github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= -github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYICU0nA= -github.com/tklauser/go-sysconf v0.3.16/go.mod h1:/qNL9xxDhc7tx3HSRsLWNnuzbVfh3e7gh/BmM179nYI= -github.com/tklauser/numcpus v0.11.0 h1:nSTwhKH5e1dMNsCdVBukSZrURJRoHbSEQjdEbY+9RXw= -github.com/tklauser/numcpus v0.11.0/go.mod h1:z+LwcLq54uWZTX0u/bGobaV34u6V7KNlTZejzM6/3MQ= +github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4= +github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4= +github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso= +github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ= github.com/urfave/cli/v2 v2.27.7 h1:bH59vdhbjLv3LAvIu6gd0usJHgoTTPhCFib8qqOwXYU= github.com/urfave/cli/v2 v2.27.7/go.mod h1:CyNAG/xg+iAOg0N4MPGZqVmv2rCoP267496AOXUZjA4= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= @@ -332,8 +332,8 @@ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0 h1:w1K go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0/go.mod h1:HBy4BjzgVE8139ieRI75oXm3EcDN+6GhD88JT1Kjvxg= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 h1:mq/Qcf28TWz719lE3/hMB4KkyDuLJIvgJnFGcd0kEUI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0/go.mod h1:yk5LXEYhsL2htyDNJbEq7fWzNEigeEdV5xBF/Y+kAv0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 h1:EtFWSnwW9hGObjkIdmlnWSydO+Qs8OwzfzXLUPg4xOc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0/go.mod h1:QjUEoiGCPkvFZ/MjK6ZZfNOS6mfVEVKYE99dFhuN2LI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 h1:3iZJKlCZufyRzPzlQhUIWVmfltrXuGyfjREgGP3UUjc= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0/go.mod h1:/G+nUPfhq2e+qiXMGxMwumDrP5jtzU+mWN7/sjT2rak= go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.13.0 h1:yEX3aC9KDgvYPhuKECHbOlr5GLwH6KTjLJ1sBSkkxkc= diff --git a/core/scripts/cre/environment/examples/workflows/v2/time/go.mod b/core/scripts/cre/environment/examples/workflows/v2/time/go.mod index 1d1f2710c5e..6d3da6d4353 100644 --- a/core/scripts/cre/environment/examples/workflows/v2/time/go.mod +++ b/core/scripts/cre/environment/examples/workflows/v2/time/go.mod @@ -14,7 +14,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 // indirect github.com/stretchr/testify v1.11.1 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect diff --git a/core/scripts/cre/environment/examples/workflows/v2/time/go.sum b/core/scripts/cre/environment/examples/workflows/v2/time/go.sum index f421c7eaf65..3d3b855d741 100644 --- a/core/scripts/cre/environment/examples/workflows/v2/time/go.sum +++ b/core/scripts/cre/environment/examples/workflows/v2/time/go.sum @@ -20,8 +20,8 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.10.0 h1:g7UrVaNKVEmIhVkJTk4f8raCM8Kp/RTFnAT64wqNmTY= diff --git a/core/scripts/cre/environment/examples/workflows/v2/time_consensus/go.mod b/core/scripts/cre/environment/examples/workflows/v2/time_consensus/go.mod index 1d1f2710c5e..6d3da6d4353 100644 --- a/core/scripts/cre/environment/examples/workflows/v2/time_consensus/go.mod +++ b/core/scripts/cre/environment/examples/workflows/v2/time_consensus/go.mod @@ -14,7 +14,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 // indirect github.com/stretchr/testify v1.11.1 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect diff --git a/core/scripts/cre/environment/examples/workflows/v2/time_consensus/go.sum b/core/scripts/cre/environment/examples/workflows/v2/time_consensus/go.sum index f421c7eaf65..3d3b855d741 100644 --- a/core/scripts/cre/environment/examples/workflows/v2/time_consensus/go.sum +++ b/core/scripts/cre/environment/examples/workflows/v2/time_consensus/go.sum @@ -20,8 +20,8 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.10.0 h1:g7UrVaNKVEmIhVkJTk4f8raCM8Kp/RTFnAT64wqNmTY= diff --git a/core/scripts/go.mod b/core/scripts/go.mod index 64f14fb1bc2..b427d79d9e5 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -46,10 +46,10 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.98 github.com/smartcontractkit/chainlink-automation v0.8.1 github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a - github.com/smartcontractkit/chainlink-common/keystore v1.1.0 + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4 + github.com/smartcontractkit/chainlink-common/keystore v1.0.2 github.com/smartcontractkit/chainlink-data-streams v0.1.13 - github.com/smartcontractkit/chainlink-deployments-framework v0.96.0 + github.com/smartcontractkit/chainlink-deployments-framework v0.95.0 github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03 github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20260119171452-39c98c3b33cd github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 @@ -107,7 +107,6 @@ require ( github.com/NethermindEth/juno v0.12.5 // indirect github.com/NethermindEth/starknet.go v0.8.0 // indirect github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 // indirect - github.com/Unheilbar/anchor-go v1.0.3 // indirect github.com/VictoriaMetrics/fastcache v1.13.0 // indirect github.com/XSAM/otelsql v0.37.0 // indirect github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect @@ -363,8 +362,7 @@ require ( github.com/jackc/pgproto3/v2 v2.3.3 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgtype v1.14.4 // indirect - github.com/jackc/pgx/v5 v5.9.2 // indirect - github.com/jackc/puddle/v2 v2.2.2 // indirect + github.com/jackc/pgx/v4 v4.18.3 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jhump/protocompile v0.0.0-20221021153901-4f6f732835e8 // indirect github.com/jinzhu/copier v0.4.0 // indirect @@ -487,12 +485,12 @@ require ( github.com/smartcontractkit/ccip-contract-examples/chains/evm v0.0.0-20260129135848-c86808ba5cb9 // indirect github.com/smartcontractkit/ccip-owner-contracts v0.1.0 // indirect github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65 // indirect - github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa // indirect - github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd // indirect + github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de // indirect + github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4 // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20260415165642-49f23e4d76cc // indirect github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc // indirect - github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3 // indirect + github.com/smartcontractkit/chainlink-ccv v0.0.0-20260408181529-b5080e662563 // indirect github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20251211140724-319861e514c4 // 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 @@ -513,8 +511,8 @@ require ( github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0 // indirect github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c423b3 // indirect github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997 // indirect - github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c // indirect - github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260421131224-c46cbfe7bc6c // indirect + github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863 // indirect + github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260217175957-8f1af02c5075 // indirect github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0 // indirect github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20260409184948-5b16fae57fe0 // indirect github.com/smartcontractkit/chainlink-testing-framework/framework/components/fake v0.10.0 // indirect @@ -652,8 +650,3 @@ require ( ) replace github.com/fbsobreira/gotron-sdk => github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20260218133534-cbd44da2856b - -// moby/go-archive v0.2.0 removed deprecated aliases (archive.Gzip, etc.) that -// docker/cli@v28.5.x still uses. docker/compose has not migrated to docker/cli v29 -// yet, so we pin to v0.1.0 which has both the old aliases and the new compression API. -replace github.com/moby/go-archive v0.2.0 => github.com/moby/go-archive v0.1.0 diff --git a/core/scripts/go.sum b/core/scripts/go.sum index aa307d1997d..5b68a08a34f 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -121,8 +121,6 @@ github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= github.com/TyphonHill/go-mermaid v1.0.0 h1:VtmgQwgZA+KNHJvG/O591ibBVuDkGhg2+F/olVXnXAs= github.com/TyphonHill/go-mermaid v1.0.0/go.mod h1:BqMEbKnr2HHpZ4lJJvGjL47v6rZAUpJcOaE/db1Ppwc= -github.com/Unheilbar/anchor-go v1.0.3 h1:rIZ9FU7L+OazdTR+FB6Q2Fe65LvsDXA649vR3LJRJl0= -github.com/Unheilbar/anchor-go v1.0.3/go.mod h1:v5AdT7FpHKNcIppfr3bix/ZP3Kr8oOzmxSxEWsCMEd0= github.com/VictoriaMetrics/fastcache v1.13.0 h1:AW4mheMR5Vd9FkAPUv+NH6Nhw+fmbTMGMsNAoA/+4G0= github.com/VictoriaMetrics/fastcache v1.13.0/go.mod h1:hHXhl4DA2fTL2HTZDJFXWgW0LNjo6B+4aj2Wmng3TjU= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= @@ -348,6 +346,7 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= @@ -1100,14 +1099,10 @@ github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgS github.com/jackc/pgx/v4 v4.18.2/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= github.com/jackc/pgx/v4 v4.18.3 h1:dE2/TrEsGX3RBprb3qryqSV9Y60iZN1C6i8IrmW9/BA= github.com/jackc/pgx/v4 v4.18.3/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= -github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= -github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= -github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -1312,8 +1307,8 @@ github.com/moby/buildkit v0.28.1 h1:Tq6H6gOMU2JyEQ5rA0pa7Ey3VGNR3qpw90liSIpMQoo= github.com/moby/buildkit v0.28.1/go.mod h1:xO6wb9VBXszkIBxaGTLXc1rQORVQFIJRt3GSX7KzCFc= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/go-archive v0.1.0 h1:Kk/5rdW/g+H8NHdJW2gsXyZ7UnzvJNOy6VKJqueWdcQ= -github.com/moby/go-archive v0.1.0/go.mod h1:G9B+YoujNohJmrIYFBpSd54GTUB4lt9S+xVQvsJyFuo= +github.com/moby/go-archive v0.2.0 h1:zg5QDUM2mi0JIM9fdQZWC7U8+2ZfixfTYoHL7rWUcP8= +github.com/moby/go-archive v0.2.0/go.mod h1:mNeivT14o8xU+5q1YnNrkQVpK+dnNe/K6fHqnTg4qPU= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/moby/api v1.54.0 h1:7kbUgyiKcoBhm0UrWbdrMs7RX8dnwzURKVbZGy2GnL0= @@ -1636,10 +1631,10 @@ github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65 h github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65/go.mod h1:BbVsx2VcwSVWkd0C5TcAkQBnFaeYFnogJgUa9BUla18= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa h1:GE4B480m+/OMgkmZ9mEI1Abh927N7oW+Ruq9uuKIFQw= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa/go.mod h1:1XxxpkgCmG/z6y30yRuVrcxre6zixIVX3xzi706Db/8= -github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd h1:Jtw6p5iisjXZyFOcBvWh6PDQKtvryrRU2JMmezdutjo= -github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd/go.mod h1:zLqdD2kBX7NsntBneclb2yrHhjFaJdoyA8dK5eimlrE= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de h1:coysmw4zHm6TLOZawoe2h0hHh/25ft+hq9+9mRNkqTs= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de/go.mod h1:1XxxpkgCmG/z6y30yRuVrcxre6zixIVX3xzi706Db/8= +github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4 h1:b6IxxglkWivZ5nfYdYkHF4w0l2BJyEmSdyMYRm47aB4= +github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4/go.mod h1:zLqdD2kBX7NsntBneclb2yrHhjFaJdoyA8dK5eimlrE= github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc h1:dP1ERzdTbiJbHVXfHYdBAi1+8NjgkyQuY2oFNWWWDsQ= github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:7XR5wfgT8hjSsiV+t0EAWvna+rYQeMPaoZf/0g+dios= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc h1:mvobZx5JV5PhG/9IXPReV+8mAGnupl0HIWQZ43zxzd4= @@ -1648,20 +1643,20 @@ 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-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc h1:entc0pB4VQEkhJf/ymOfnUh6zcu1sj1OU4YW3iPEW4s= github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:Ex2OUp35VJuCcRAjuBKwP+cevEPOSjy1pZXm3ncV4kQ= -github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3 h1:NTvhSs8sh0ZYr3JUw8GvPZcLQaeh6t2nleKg7hfnOnQ= -github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3/go.mod h1:sJeU9at/+chXZfh7io5HzW6C3fgDxjpEB6U1dsS+BnE= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a h1:mUEbGLi++YLS6nd6oaFHZ9tAqw0t2ojLu1cZAjCoZmU= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a/go.mod h1:ohOxnxpzD382PS3nN4zhdJmWD+rsBh8zTLGGHhTdJCE= -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-ccv v0.0.0-20260408181529-b5080e662563 h1:1sYQ2lG3zbAG2vASNF5kLke8DhGk5lNaJirwPDx3Vi4= +github.com/smartcontractkit/chainlink-ccv v0.0.0-20260408181529-b5080e662563/go.mod h1:nEuyjUh4wrK6mNXEAaOncl/AhCl31oaxOS160gNW0vc= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4 h1:/b6wjxXU3XhXw8iEmK2FLXp+etK1oD5MK5BedfsFC7U= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4/go.mod h1:Ukc8qY13EcRcSQv6ZBmTKl0YE6F8uE5lj4zsX5aXvXM= +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.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/monitoring v0.0.0-20251215152504-b1e41f508340 h1:PsjEI+5jZIz9AS4eOsLS5VpSWJINf38clXV3wryPyMk= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20251215152504-b1e41f508340/go.mod h1:P/0OSXUlFaxxD4B/P6HWbxYtIRmmWGDJAvanq19879c= github.com/smartcontractkit/chainlink-data-streams v0.1.13 h1:YOmt545DW6U0SyaqBf+NTGDLm1yMurVI7yOvxP5hlJk= github.com/smartcontractkit/chainlink-data-streams v0.1.13/go.mod h1:00aL7OK0BJdF9gn/4t4f/pctUu2VLwwfA8G/tl9rCrM= -github.com/smartcontractkit/chainlink-deployments-framework v0.96.0 h1:dwdKdXGDfzIwg1/PxQ3YxaeaFplyOtL+EPGtFPVGRmM= -github.com/smartcontractkit/chainlink-deployments-framework v0.96.0/go.mod h1:vjdYbQDNUd3IznXuxv5Gm7VZB804TKOqjNo1BhFOUDk= +github.com/smartcontractkit/chainlink-deployments-framework v0.95.0 h1:PHncc++Xk9OIP7JDiCvpqdMdP85YZWKQCpnRR7l477g= +github.com/smartcontractkit/chainlink-deployments-framework v0.95.0/go.mod h1:pTA1JrdlMSfb9WkrIfphq2KV/+paW7GHf15Oc/uJBxs= github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03 h1:z+Au1CpZhVYpn7mkmG/mYFBFkdZoqibQ3LngEHm8Fqs= github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03/go.mod h1:6vCMfxz7cMW0wWseNKtct+b1JJbbRVJJhh/t6pQWN3M= github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 h1:QJiXTG9CmaQAuMRn5JGi+Jhji7fSkehVnKpjc8oNJJY= @@ -1710,10 +1705,10 @@ github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c423b3/go.mod h1:TcOliTQU6r59DwG4lo3U+mFM9WWyBHGuFkkxQpvSujo= github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997 h1:W0HKHO8eE8BckTRnhSdqjHKbJcnk068nEWYnWRu6tJY= github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997/go.mod h1:GTpDgyK0OObf7jpch6p8N281KxN92wbB8serZhU9yRc= -github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c h1:2ZdBZCZWKUMOWLtReaBBHkmDtXc0WtwcqIROHAcm3j4= -github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c/go.mod h1:sUsEwLtVPBlz0wPcysaolS+HVj9cOAt4jYhwE6J8dXg= -github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260421131224-c46cbfe7bc6c h1:Hn/80PyYFrQhRlNSaq9HY4cjc/7AuP9zyWLle22t34A= -github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260421131224-c46cbfe7bc6c/go.mod h1:C5pZsbYX3qkhZTYWr1aYJi9QMfonFAun+Jl1npQ7UJA= +github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863 h1:mIvTzvbEjmotW8qsMH19g7DcZ7J6ghQbZoAIyDdOdBs= +github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863/go.mod h1:9lV2AZ+ylPlyB16gct6MXR4taaLh2tljljSDpPI4HkE= +github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260217175957-8f1af02c5075 h1:PcR7Zdh+Z+Dh/S4lQ1xDbnFrb6He70KW9O5+9DtgloE= +github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260217175957-8f1af02c5075/go.mod h1:APCV5fIW/a+JGM+Cz9yb6XyGt8ht5hISEYfpG/k4Z+k= github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0 h1:nmuT5gKyTHpsHBEJMDM1C+v1d8jR/N8Xfg3KvqJUm8U= github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0/go.mod h1:YQDu2RcdoAzI5xlhtpbjvaQQZwkUt/Q+IhLbP25M614= github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20260409184948-5b16fae57fe0 h1:y8Gpr9G/3/+zoJtYu4cXmZPEx6plXD3P4Rwp/qFbtY8= diff --git a/core/services/chainlink/testdata/config-multi-chain-effective.toml b/core/services/chainlink/testdata/config-multi-chain-effective.toml index ee3c20150eb..b71cff5c234 100644 --- a/core/services/chainlink/testdata/config-multi-chain-effective.toml +++ b/core/services/chainlink/testdata/config-multi-chain-effective.toml @@ -797,7 +797,7 @@ ComputeUnitLimitDefault = 200000 EstimateComputeUnitLimit = false LogPollerStartingLookback = '24h0m0s' LogPollerCPIEventsEnabled = true -LogPollerSlotsBatchSize = 1000 +LogPollerSlotsBatchSize = 100 [Solana.Workflow] AcceptanceTimeout = '45s' @@ -862,7 +862,7 @@ ComputeUnitLimitDefault = 200000 EstimateComputeUnitLimit = false LogPollerStartingLookback = '24h0m0s' LogPollerCPIEventsEnabled = true -LogPollerSlotsBatchSize = 1000 +LogPollerSlotsBatchSize = 100 [Solana.Workflow] AcceptanceTimeout = '45s' diff --git a/core/services/cre/cre.go b/core/services/cre/cre.go index b14cc7ba9d5..bdd681204be 100644 --- a/core/services/cre/cre.go +++ b/core/services/cre/cre.go @@ -37,7 +37,6 @@ import ( "github.com/smartcontractkit/chainlink/v2/core/capabilities/localcapmgr" "github.com/smartcontractkit/chainlink/v2/core/capabilities/remote" remotetypes "github.com/smartcontractkit/chainlink/v2/core/capabilities/remote/types" - capStreams "github.com/smartcontractkit/chainlink/v2/core/capabilities/streams" "github.com/smartcontractkit/chainlink/v2/core/config" "github.com/smartcontractkit/chainlink/v2/core/services/job" "github.com/smartcontractkit/chainlink/v2/core/services/keystore" @@ -187,13 +186,12 @@ func (s *Services) newSubservices( if cfg.CRE().Linking().URL() != "" { lggr.Debugw("Creating OrgResolver") - inner, ierr := newOrgResolver(cfg, capCfg, opts, lggr) + orgResolver, ierr := newOrgResolver(cfg, capCfg, opts, lggr) if ierr != nil { return nil, fmt.Errorf("could not create org resolver: %w", ierr) } - fallbackResolver := orgresolver.NewOrgResolverWithFallback(inner, lggr) - s.OrgResolver = fallbackResolver - srvs = append(srvs, fallbackResolver) + s.OrgResolver = orgResolver + srvs = append(srvs, orgResolver) } else { lggr.Warn("Skipping orgResolver, no linking service configured") } @@ -503,7 +501,7 @@ func (w *dispatcherWrapper) newSubservices( capCfg := cfg.Capabilities() if !capCfg.Peering().Enabled() && !capCfg.SharedPeering().Enabled() { - opts.CapabilitiesRegistry.SetLocalRegistry(newLocalTestMetadataRegistry(capCfg.Local())) + opts.CapabilitiesRegistry.SetLocalRegistry(&capabilities.TestMetadataRegistry{}) return nil, nil } @@ -548,17 +546,6 @@ func (w *dispatcherWrapper) newSubservices( return subs, nil } -func newLocalTestMetadataRegistry(localCfg config.LocalCapabilities) *capabilities.TestMetadataRegistry { - registry := &capabilities.TestMetadataRegistry{} - if localCfg != nil && localCfg.GetCapabilityConfig(capStreams.MockTriggerCapabilityID) != nil { - // The mock streams trigger emits 2F+1 signatures, so the synthetic local - // workflow DON needs to advertise F=1 only for that opt-in compatibility path. - registry.WorkflowDONF = 1 - } - - return registry -} - // newDispatcherWrapper creates a new dispatcherWrapper service with peer wrappers if peering is enabled func newDispatcherWrapper( cfg Config, diff --git a/core/services/cre/cre_test.go b/core/services/cre/cre_test.go deleted file mode 100644 index acb787fe3c4..00000000000 --- a/core/services/cre/cre_test.go +++ /dev/null @@ -1,78 +0,0 @@ -package cre - -import ( - "testing" - - "github.com/stretchr/testify/require" - - capStreams "github.com/smartcontractkit/chainlink/v2/core/capabilities/streams" - "github.com/smartcontractkit/chainlink/v2/core/config" -) - -type testLocalCapabilities struct { - cfgs map[string]config.CapabilityNodeConfig -} - -func (t testLocalCapabilities) RegistryBasedLaunchAllowlist() []string { - return nil -} - -func (t testLocalCapabilities) Capabilities() map[string]config.CapabilityNodeConfig { - return t.cfgs -} - -func (t testLocalCapabilities) IsAllowlisted(string) bool { - return false -} - -func (t testLocalCapabilities) GetCapabilityConfig(capabilityID string) config.CapabilityNodeConfig { - if t.cfgs == nil { - return nil - } - - return t.cfgs[capabilityID] -} - -type testCapabilityNodeConfig struct{} - -func (testCapabilityNodeConfig) BinaryPathOverride() string { - return "" -} - -func (testCapabilityNodeConfig) Config() map[string]string { - return nil -} - -func TestNewLocalTestMetadataRegistry(t *testing.T) { - t.Parallel() - - tests := []struct { - name string - localCfg config.LocalCapabilities - expectedF uint8 - }{ - { - name: "default workflow DON fault tolerance", - localCfg: nil, - expectedF: 0, - }, - { - name: "mock trigger opt-in uses workflow DON fault tolerance one", - localCfg: testLocalCapabilities{ - cfgs: map[string]config.CapabilityNodeConfig{ - capStreams.MockTriggerCapabilityID: testCapabilityNodeConfig{}, - }, - }, - expectedF: 1, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - t.Parallel() - - registry := newLocalTestMetadataRegistry(tt.localCfg) - require.Equal(t, tt.expectedF, registry.WorkflowDONF) - }) - } -} diff --git a/core/services/gateway/handlers/vault/handler.go b/core/services/gateway/handlers/vault/handler.go index b063ba94adf..54d09b89653 100644 --- a/core/services/gateway/handlers/vault/handler.go +++ b/core/services/gateway/handlers/vault/handler.go @@ -175,36 +175,24 @@ type SecretEntry struct { type Config struct { NodeRateLimiter ratelimit.RateLimiterConfig `json:"nodeRateLimiter"` RequestTimeoutSec int `json:"requestTimeoutSec"` - Auth0 *vaultcap.Auth0Config `json:"auth0,omitempty"` } // NewHandler creates the gateway-side Vault handler with internal auth wiring. func NewHandler(methodConfig json.RawMessage, donConfig *config.DONConfig, don gwhandlers.DON, capabilitiesRegistry capabilitiesRegistry, workflowRegistrySyncer workflowsyncerv2.WorkflowRegistrySyncer, lggr logger.Logger, clock clockwork.Clock, limitsFactory limits.Factory) (*handler, error) { - var cfg Config - if err := json.Unmarshal(methodConfig, &cfg); err != nil { - return nil, fmt.Errorf("failed to unmarshal method config: %w", err) - } - allowListBasedAuth := vaultcap.NewAllowListBasedAuth(lggr, workflowRegistrySyncer) - var jwtBasedAuth vaultcap.Authorizer - var jwtAuth services.Service - if cfg.Auth0 != nil { - validator, err := vaultcap.NewJWTBasedAuth(vaultcap.JWTBasedAuthConfig{ - IssuerURL: cfg.Auth0.IssuerURL, - Audience: cfg.Auth0.Audience, - }, limitsFactory, lggr) - if err != nil { - return nil, fmt.Errorf("failed to create JWTBasedAuth: %w", err) - } - jwtBasedAuth = validator - jwtAuth = validator + jwtBasedAuth, err := vaultcap.NewJWTBasedAuth(vaultcap.JWTBasedAuthConfig{}, limitsFactory, lggr, vaultcap.WithDisabledJWTBasedAuth()) + if err != nil { + return nil, fmt.Errorf("failed to create JWTBasedAuth: %w", err) } authorizer := vaultcap.NewAuthorizer(allowListBasedAuth, jwtBasedAuth, lggr) + return newHandlerWithJWTAuth(methodConfig, donConfig, don, capabilitiesRegistry, authorizer, jwtBasedAuth, lggr, clock, limitsFactory) +} - return newHandlerWithAuthorizer(methodConfig, donConfig, don, capabilitiesRegistry, authorizer, jwtAuth, lggr, clock, limitsFactory) +func newHandlerWithAuthorizer(methodConfig json.RawMessage, donConfig *config.DONConfig, don gwhandlers.DON, capabilitiesRegistry capabilitiesRegistry, authorizer vaultcap.Authorizer, lggr logger.Logger, clock clockwork.Clock, limitsFactory limits.Factory) (*handler, error) { + return newHandlerWithJWTAuth(methodConfig, donConfig, don, capabilitiesRegistry, authorizer, nil, lggr, clock, limitsFactory) } -func newHandlerWithAuthorizer(methodConfig json.RawMessage, donConfig *config.DONConfig, don gwhandlers.DON, capabilitiesRegistry capabilitiesRegistry, authorizer vaultcap.Authorizer, jwtAuth services.Service, lggr logger.Logger, clock clockwork.Clock, limitsFactory limits.Factory) (*handler, error) { +func newHandlerWithJWTAuth(methodConfig json.RawMessage, donConfig *config.DONConfig, don gwhandlers.DON, capabilitiesRegistry capabilitiesRegistry, authorizer vaultcap.Authorizer, jwtAuth services.Service, lggr logger.Logger, clock clockwork.Clock, limitsFactory limits.Factory) (*handler, error) { var cfg Config if err := json.Unmarshal(methodConfig, &cfg); err != nil { return nil, fmt.Errorf("failed to unmarshal method config: %w", err) @@ -409,17 +397,11 @@ func (h *handler) HandleJSONRPCUserMessage(ctx context.Context, req jsonrpc.Requ return h.handlePublicKeyGetSynchronously(ctx, req, publicKeyResponseBytes, callback) } - authResult, authErr := h.authorizer.AuthorizeRequest(ctx, req) - if authErr != nil { - h.lggr.Errorw("request not authorized", "method", req.Method, "requestID", req.ID, "hasAuth", req.Auth != "", "error", authErr) - return errors.New("request not authorized: " + authErr.Error()) - } - normalizedReq, normalizeErr := vaultcap.NormalizeRequestWithIdentity(req, authResult.OrgID(), authResult.WorkflowOwner()) - if normalizeErr != nil { - h.lggr.Errorw("failed to normalize authorized request identity", "method", req.Method, "requestID", req.ID, "orgID", authResult.OrgID(), "workflowOwner", authResult.WorkflowOwner(), "error", normalizeErr) - return normalizeErr + authResult, err := h.authorizer.AuthorizeRequest(ctx, req) + if err != nil { + h.lggr.Errorw("request not authorized", "method", req.Method, "requestID", req.ID, "hasAuth", req.Auth != "", "error", err) + return errors.New("request not authorized: " + err.Error()) } - req = normalizedReq authorizedOwner := authResult.AuthorizedOwner() // Generate a unique ID for the request. // Prefix request id with authorizedOwner, to ensure uniqueness across different owners @@ -427,9 +409,9 @@ func (h *handler) HandleJSONRPCUserMessage(ctx context.Context, req jsonrpc.Requ req.ID = authorizedOwner + vaulttypes.RequestIDSeparator + req.ID h.lggr.Debugw("handling authorized vault request", "method", req.Method, "requestID", req.ID, "authorizedOwner", authorizedOwner) - ar, activeRequestErr := h.newActiveRequest(req, callback) - if activeRequestErr != nil { - return activeRequestErr + ar, err := h.newActiveRequest(req, callback) + if err != nil { + return err } switch req.Method { diff --git a/core/services/gateway/handlers/vault/handler_test.go b/core/services/gateway/handlers/vault/handler_test.go index 3c06ea9a906..91a3df576ee 100644 --- a/core/services/gateway/handlers/vault/handler_test.go +++ b/core/services/gateway/handlers/vault/handler_test.go @@ -61,8 +61,10 @@ func setupHandler(t *testing.T) (handlers.Handler, *common.Callback, *mocks.DON, clock := clockwork.NewFakeClock() limitsFactory := limits.Factory{Settings: cresettings.DefaultGetter} - authorizer := vaultcap.NewAuthorizer(&stubAllowListBasedAuth{clock: clock}, nil, lggr) - handler, err := newHandlerWithAuthorizer(methodConfig, donConfig, don, nil, authorizer, nil, lggr, clock, limitsFactory) + jwtBasedAuth, err := vaultcap.NewJWTBasedAuth(vaultcap.JWTBasedAuthConfig{}, limitsFactory, lggr, vaultcap.WithDisabledJWTBasedAuth()) + require.NoError(t, err) + authorizer := vaultcap.NewAuthorizer(&stubAllowListBasedAuth{clock: clock}, jwtBasedAuth, lggr) + handler, err := newHandlerWithAuthorizer(methodConfig, donConfig, don, nil, authorizer, lggr, clock, limitsFactory) require.NoError(t, err) handler.aggregator = &mockAggregator{} cb := common.NewCallback() @@ -77,15 +79,6 @@ func (s *stubAllowListBasedAuth) AuthorizeRequest(_ context.Context, req jsonrpc return vaultcap.NewAuthResult("", owner, "digest-"+req.ID, s.clock.Now().Add(time.Minute).Unix()), nil } -type stubAuthorizer struct { - result *vaultcap.AuthResult - err error -} - -func (s *stubAuthorizer) AuthorizeRequest(_ context.Context, _ jsonrpc.Request[json.RawMessage]) (*vaultcap.AuthResult, error) { - return s.result, s.err -} - type mockAggregator struct { err error } @@ -226,79 +219,6 @@ func TestVaultHandler_HandleJSONRPCUserMessage(t *testing.T) { wg.Wait() }) - t.Run("overwrites request identity fields after authorization", func(t *testing.T) { - lggr := logger.Test(t) - don := mocks.NewDON(t) - donConfig := &config.DONConfig{ - DonId: "test_don_id", - Members: []config.NodeConfig{NodeOne}, - } - handlerConfig := Config{ - RequestTimeoutSec: 30, - NodeRateLimiter: ratelimit.RateLimiterConfig{ - GlobalRPS: 100, - GlobalBurst: 100, - PerSenderRPS: 10, - PerSenderBurst: 10, - }, - } - methodConfig, err := json.Marshal(handlerConfig) - require.NoError(t, err) - - clock := clockwork.NewFakeClock() - limitsFactory := limits.Factory{Settings: cresettings.DefaultGetter} - h, err := newHandlerWithAuthorizer( - methodConfig, - donConfig, - don, - nil, - &stubAuthorizer{result: vaultcap.NewAuthResult("org-1", "0xworkflow", "digest-1", clock.Now().Add(time.Minute).Unix())}, - nil, - lggr, - clock, - limitsFactory, - ) - require.NoError(t, err) - - forgedCreateSecretsRequest := &vaultcommon.CreateSecretsRequest{ - RequestId: "test_request_id", - OrgId: "forged-org", - WorkflowOwner: "0xforged", - EncryptedSecrets: []*vaultcommon.EncryptedSecret{ - { - Id: &vaultcommon.SecretIdentifier{ - Key: "test_id", - Owner: "org-1", - }, - EncryptedValue: "abc123", - }, - }, - } - requestParams, err := json.Marshal(forgedCreateSecretsRequest) - require.NoError(t, err) - - var forwarded jsonrpc.Request[json.RawMessage] - don.On("SendToNode", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) { - forwarded = *args.Get(2).(*jsonrpc.Request[json.RawMessage]) - }).Return(nil) - - req := jsonrpc.Request[json.RawMessage]{ - ID: "1", - Method: vaulttypes.MethodSecretsCreate, - Params: (*json.RawMessage)(&requestParams), - } - - err = h.HandleJSONRPCUserMessage(t.Context(), req, common.NewCallback()) - require.NoError(t, err) - - require.NotNil(t, forwarded.Params) - var forwardedCreateRequest vaultcommon.CreateSecretsRequest - require.NoError(t, json.Unmarshal(*forwarded.Params, &forwardedCreateRequest)) - require.Equal(t, "org-1", forwardedCreateRequest.OrgId) - require.Equal(t, "0xworkflow", forwardedCreateRequest.WorkflowOwner) - require.Equal(t, "org-1"+vaulttypes.RequestIDSeparator+"1", forwardedCreateRequest.RequestId) - }) - t.Run("nil EncryptedSecrets inside CreateSecrets body", func(t *testing.T) { var wg sync.WaitGroup h, callback, _, _ := setupHandler(t) diff --git a/core/services/job/orm.go b/core/services/job/orm.go index e425942901b..5cb52f79290 100644 --- a/core/services/job/orm.go +++ b/core/services/job/orm.go @@ -12,7 +12,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/google/uuid" - "github.com/jackc/pgx/v5/pgconn" + "github.com/jackc/pgconn" "github.com/jmoiron/sqlx" "github.com/lib/pq" "github.com/pkg/errors" diff --git a/core/services/ocr2/delegate.go b/core/services/ocr2/delegate.go index ad6751f51c8..7180c63ab08 100644 --- a/core/services/ocr2/delegate.go +++ b/core/services/ocr2/delegate.go @@ -676,7 +676,7 @@ func (d *Delegate) newServicesVaultPlugin( } srvs = append(srvs, vaultCapability) - handler, err := vaultcap.NewGatewayHandler(vaultCapability, gwconnector, syncer, d.lggr, limitsFactory, nil, cfg.Auth0) + handler, err := vaultcap.NewGatewayHandler(vaultCapability, gwconnector, syncer, d.lggr, limitsFactory) if err != nil { return nil, fmt.Errorf("failed to instantiate vault plugin: failed to create vault handler: %w", err) } diff --git a/core/services/ocr2/plugins/vault/config.go b/core/services/ocr2/plugins/vault/config.go index 28985b64f58..ba00b2eed4a 100644 --- a/core/services/ocr2/plugins/vault/config.go +++ b/core/services/ocr2/plugins/vault/config.go @@ -4,7 +4,6 @@ import ( "errors" commonconfig "github.com/smartcontractkit/chainlink-common/pkg/config" - vaultcap "github.com/smartcontractkit/chainlink/v2/core/capabilities/vault" ) type DKGConfig struct { @@ -14,7 +13,6 @@ type DKGConfig struct { type Config struct { RequestExpiryDuration commonconfig.Duration `json:"requestExpiryDuration"` DKG *DKGConfig `json:"dkg,omitempty"` - Auth0 *vaultcap.Auth0Config `json:"auth0,omitempty"` } func (c *Config) Validate() error { diff --git a/core/services/ocr2/plugins/vault/plugin.go b/core/services/ocr2/plugins/vault/plugin.go index 53785b47f96..c8f7f8c0dbb 100644 --- a/core/services/ocr2/plugins/vault/plugin.go +++ b/core/services/ocr2/plugins/vault/plugin.go @@ -390,25 +390,6 @@ func (r *ReportingPlugin) orgIDAsSecretOwnerEnabled(ctx context.Context) bool { return r.cfg.OrgIDAsSecretOwnerEnabled.AllowErr(ctx) == nil } -// canonicalResponseID rewrites successful CRUD responses to the canonical owner identity. -// -// When VaultOrgIdAsSecretOwnerEnabled is on, requests may still arrive keyed by -// workflow owner for backwards compatibility with existing clients and allowlist-based -// flows. The server persists and reasons about the canonical owner as org_id though, -// so responses should expose that canonical org owner instead of echoing the -// workflow-owner request key back to the client. -func (r *ReportingPlugin) canonicalResponseID(ctx context.Context, id *vaultcommon.SecretIdentifier, orgID string) *vaultcommon.SecretIdentifier { - if id == nil || orgID == "" || !r.orgIDAsSecretOwnerEnabled(ctx) { - return id - } - - return &vaultcommon.SecretIdentifier{ - Key: id.Key, - Namespace: id.Namespace, - Owner: orgID, - } -} - type pendingQueueStore interface { WritePendingQueue(ctx context.Context, pending []*vaultcommon.StoredPendingQueueItem) error } @@ -1930,7 +1911,7 @@ func (r *ReportingPlugin) stateTransitionCreateSecrets(ctx context.Context, stor }) continue } - resp, err := r.stateTransitionCreateSecretsRequest(ctx, store, req, resp, first.GetCreateSecretsRequest().OrgId) + resp, err := r.stateTransitionCreateSecretsRequest(ctx, store, req, resp) if err != nil { logUserErrorAware(r.lggr, "failed to handle create secret request", err, "id", req.Id, "requestID", reqID) errorMsg := userFacingError(err, "failed to handle create secret request") @@ -1952,7 +1933,7 @@ func (r *ReportingPlugin) stateTransitionCreateSecrets(ctx context.Context, stor } } -func (r *ReportingPlugin) stateTransitionCreateSecretsRequest(ctx context.Context, store WriteKVStore, req *vaultcommon.EncryptedSecret, resp *vaultcommon.CreateSecretResponse, orgID string) (*vaultcommon.CreateSecretResponse, error) { +func (r *ReportingPlugin) stateTransitionCreateSecretsRequest(ctx context.Context, store WriteKVStore, req *vaultcommon.EncryptedSecret, resp *vaultcommon.CreateSecretResponse) (*vaultcommon.CreateSecretResponse, error) { if resp.GetError() != "" { return resp, newUserError(resp.GetError()) } @@ -1993,7 +1974,7 @@ func (r *ReportingPlugin) stateTransitionCreateSecretsRequest(ctx context.Contex } return &vaultcommon.CreateSecretResponse{ - Id: r.canonicalResponseID(ctx, req.Id, orgID), + Id: req.Id, Success: true, Error: "", }, nil @@ -2048,7 +2029,7 @@ func (r *ReportingPlugin) stateTransitionUpdateSecrets(ctx context.Context, stor }) continue } - resp, err := r.stateTransitionUpdateSecretsRequest(ctx, store, req, resp, first.GetUpdateSecretsRequest().OrgId) + resp, err := r.stateTransitionUpdateSecretsRequest(ctx, store, req, resp) if err != nil { logUserErrorAware(r.lggr, "failed to handle update secret request", err, "id", req.Id, "requestID", reqID) errorMsg := userFacingError(err, "failed to handle update secret request") @@ -2070,7 +2051,7 @@ func (r *ReportingPlugin) stateTransitionUpdateSecrets(ctx context.Context, stor } } -func (r *ReportingPlugin) stateTransitionUpdateSecretsRequest(ctx context.Context, store WriteKVStore, req *vaultcommon.EncryptedSecret, resp *vaultcommon.UpdateSecretResponse, orgID string) (*vaultcommon.UpdateSecretResponse, error) { +func (r *ReportingPlugin) stateTransitionUpdateSecretsRequest(ctx context.Context, store WriteKVStore, req *vaultcommon.EncryptedSecret, resp *vaultcommon.UpdateSecretResponse) (*vaultcommon.UpdateSecretResponse, error) { if resp.GetError() != "" { return resp, newUserError(resp.GetError()) } @@ -2097,7 +2078,7 @@ func (r *ReportingPlugin) stateTransitionUpdateSecretsRequest(ctx context.Contex } return &vaultcommon.UpdateSecretResponse{ - Id: r.canonicalResponseID(ctx, req.Id, orgID), + Id: req.Id, Success: true, Error: "", }, nil @@ -2152,7 +2133,7 @@ func (r *ReportingPlugin) stateTransitionDeleteSecrets(ctx context.Context, stor }) continue } - resp, err := r.stateTransitionDeleteSecretsRequest(ctx, store, req, resp, first.GetDeleteSecretsRequest().OrgId) + resp, err := r.stateTransitionDeleteSecretsRequest(ctx, store, req, resp) if err != nil { logUserErrorAware(r.lggr, "failed to handle delete secret request", err, "id", id, "requestId", reqID) errorMsg := userFacingError(err, "failed to handle delete secret request") @@ -2174,7 +2155,7 @@ func (r *ReportingPlugin) stateTransitionDeleteSecrets(ctx context.Context, stor } } -func (r *ReportingPlugin) stateTransitionDeleteSecretsRequest(ctx context.Context, store WriteKVStore, id *vaultcommon.SecretIdentifier, resp *vaultcommon.DeleteSecretResponse, orgID string) (*vaultcommon.DeleteSecretResponse, error) { +func (r *ReportingPlugin) stateTransitionDeleteSecretsRequest(ctx context.Context, store WriteKVStore, id *vaultcommon.SecretIdentifier, resp *vaultcommon.DeleteSecretResponse) (*vaultcommon.DeleteSecretResponse, error) { if resp.GetError() != "" { return resp, newUserError(resp.GetError()) } @@ -2185,7 +2166,7 @@ func (r *ReportingPlugin) stateTransitionDeleteSecretsRequest(ctx context.Contex } return &vaultcommon.DeleteSecretResponse{ - Id: r.canonicalResponseID(ctx, id, orgID), + Id: id, Success: true, Error: "", }, nil diff --git a/core/services/ocr2/plugins/vault/plugin_test.go b/core/services/ocr2/plugins/vault/plugin_test.go index 96df7cebd24..9a5b37d4cd3 100644 --- a/core/services/ocr2/plugins/vault/plugin_test.go +++ b/core/services/ocr2/plugins/vault/plugin_test.go @@ -3723,114 +3723,6 @@ func TestPlugin_StateTransition_CreateSecretsRequest_UsesWorkflowOwnerMetadataWh assert.Nil(t, ss) } -func TestPlugin_StateTransition_CreateSecretsRequest_RewritesResponseOwnerToOrgIDWhenGateEnabled(t *testing.T) { - lggr, observed := logger.TestLoggerObserved(t, zapcore.DebugLevel) - store := requests.NewStore[*vaulttypes.Request]() - _, pk, shares, err := tdh2easy.GenerateKeys(1, 3) - require.NoError(t, err) - cfg := makeReportingPluginConfig( - t, - 10, - pk, - shares[0], - 5, - 1024, - 100, - 100, - 100, - 10, - ) - cfg.OrgIDAsSecretOwnerEnabled = limits.NewGateLimiter(true) - r := &ReportingPlugin{ - lggr: lggr, - onchainCfg: ocr3types.ReportingPluginConfig{ - N: 4, - F: 1, - }, - store: store, - metrics: newTestMetrics(t), - cfg: cfg, - } - - const ( - orgID = "org-create-success" - workflowOwner = "0x5555555555555555555555555555555555555555" - ) - - requestID := &vaultcommon.SecretIdentifier{ - Owner: workflowOwner, - Namespace: "main", - Key: "secret", - } - canonicalID := &vaultcommon.SecretIdentifier{ - Owner: orgID, - Namespace: "main", - Key: "secret", - } - - value := []byte("encrypted-value") - req := &vaultcommon.CreateSecretsRequest{ - RequestId: "request-id", - EncryptedSecrets: []*vaultcommon.EncryptedSecret{ - { - Id: requestID, - EncryptedValue: hex.EncodeToString(value), - }, - }, - OrgId: orgID, - WorkflowOwner: workflowOwner, - } - resp := &vaultcommon.CreateSecretsResponse{ - Responses: []*vaultcommon.CreateSecretResponse{ - { - Id: requestID, - Success: false, - Error: "", - }, - }, - } - - kv := &kv{m: make(map[string]response)} - rs := newTestReadStore(t, kv) - obsb := marshalObservations(t, observation{requestID, req, resp}) - reportPrecursor, err := r.StateTransition( - t.Context(), - 1, - types.AttributedQuery{}, - []types.AttributedObservation{ - {Observer: 0, Observation: types.Observation(obsb)}, - {Observer: 1, Observation: types.Observation(obsb)}, - {Observer: 2, Observation: types.Observation(obsb)}, - }, - kv, - nil, - ) - require.NoError(t, err) - - os := &vaultcommon.Outcomes{} - require.NoError(t, proto.Unmarshal(reportPrecursor, os)) - require.Len(t, os.Outcomes, 1) - - o := os.Outcomes[0] - assert.True(t, proto.Equal(req, o.GetCreateSecretsRequest())) - expectedResp := &vaultcommon.CreateSecretsResponse{ - Responses: []*vaultcommon.CreateSecretResponse{ - { - Id: canonicalID, - Success: true, - Error: "", - }, - }, - } - assert.True(t, proto.Equal(expectedResp, o.GetCreateSecretsResponse()), o.GetCreateSecretsResponse()) - - ss, err := rs.GetSecret(t.Context(), canonicalID) - require.NoError(t, err) - assert.Equal(t, []byte("encrypted-value"), ss.EncryptedSecret) - - assert.Equal(t, 1, observed.FilterMessage("sufficient observations for sha").Len()) -} - func TestPlugin_Reports(t *testing.T) { value := "encrypted-value" id := &vaultcommon.SecretIdentifier{ @@ -4641,7 +4533,7 @@ func TestPlugin_StateTransition_UpdateSecretsRequest_MigratesWorkflowOwnerSecret RequestId: "request-id", EncryptedSecrets: []*vaultcommon.EncryptedSecret{ { - Id: legacyID, + Id: id, EncryptedValue: hex.EncodeToString([]byte("encrypted-value")), }, }, @@ -4651,14 +4543,14 @@ func TestPlugin_StateTransition_UpdateSecretsRequest_MigratesWorkflowOwnerSecret resp := &vaultcommon.UpdateSecretsResponse{ Responses: []*vaultcommon.UpdateSecretResponse{ { - Id: legacyID, + Id: id, Success: false, Error: "", }, }, } - obsb := marshalObservations(t, observation{legacyID, req, resp}) + obsb := marshalObservations(t, observation{id, req, resp}) reportPrecursor, err := r.StateTransition( t.Context(), 1, @@ -4681,7 +4573,6 @@ func TestPlugin_StateTransition_UpdateSecretsRequest_MigratesWorkflowOwnerSecret assert.True(t, proto.Equal(req, o.GetUpdateSecretsRequest()), o.GetUpdateSecretsRequest()) require.Len(t, o.GetUpdateSecretsResponse().Responses, 1) assert.True(t, o.GetUpdateSecretsResponse().Responses[0].Success) - assert.Equal(t, orgID, o.GetUpdateSecretsResponse().Responses[0].Id.Owner) ss, err := rs.GetSecret(t.Context(), id) require.NoError(t, err) @@ -5168,21 +5059,21 @@ func TestPlugin_StateTransition_DeleteSecretsRequest_DeletesWorkflowOwnerSecretW } req := &vaultcommon.DeleteSecretsRequest{ RequestId: "request-id", - Ids: []*vaultcommon.SecretIdentifier{legacyID}, + Ids: []*vaultcommon.SecretIdentifier{id}, OrgId: orgID, WorkflowOwner: workflowOwner, } resp := &vaultcommon.DeleteSecretsResponse{ Responses: []*vaultcommon.DeleteSecretResponse{ { - Id: legacyID, + Id: id, Success: false, Error: "", }, }, } - obsb := marshalObservations(t, observation{legacyID, req, resp}) + obsb := marshalObservations(t, observation{id, req, resp}) reportPrecursor, err := r.StateTransition( t.Context(), 1, @@ -5205,7 +5096,6 @@ func TestPlugin_StateTransition_DeleteSecretsRequest_DeletesWorkflowOwnerSecretW assert.True(t, proto.Equal(req, o.GetDeleteSecretsRequest()), o.GetDeleteSecretsRequest()) require.Len(t, o.GetDeleteSecretsResponse().Responses, 1) assert.True(t, o.GetDeleteSecretsResponse().Responses[0].Success) - assert.True(t, proto.Equal(id, o.GetDeleteSecretsResponse().Responses[0].Id), o.GetDeleteSecretsResponse().Responses[0].Id) ss, err := rs.GetSecret(t.Context(), legacyID) require.NoError(t, err) diff --git a/core/services/pg/connection.go b/core/services/pg/connection.go index a659f76d8a1..5dcfe00b84e 100644 --- a/core/services/pg/connection.go +++ b/core/services/pg/connection.go @@ -8,8 +8,8 @@ import ( "os" "time" - "github.com/jackc/pgx/v5/pgconn" - _ "github.com/jackc/pgx/v5/stdlib" // need to make sure pgx driver is registered before opening connection + "github.com/jackc/pgconn" + _ "github.com/jackc/pgx/v4/stdlib" // need to make sure pgx driver is registered before opening connection "github.com/jmoiron/sqlx" commonpg "github.com/smartcontractkit/chainlink-common/pkg/sqlutil/pg" diff --git a/core/services/pg/connection_test.go b/core/services/pg/connection_test.go index f21793371f2..d21fb109b32 100644 --- a/core/services/pg/connection_test.go +++ b/core/services/pg/connection_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - _ "github.com/jackc/pgx/v5/stdlib" + _ "github.com/jackc/pgx/v4/stdlib" "github.com/pkg/errors" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/core/services/registrysyncer/syncer_test.go b/core/services/registrysyncer/syncer_test.go index 30e10d3cfd0..49e9fccc87f 100644 --- a/core/services/registrysyncer/syncer_test.go +++ b/core/services/registrysyncer/syncer_test.go @@ -23,6 +23,8 @@ import ( "google.golang.org/protobuf/types/known/durationpb" p2ptypes "github.com/smartcontractkit/libocr/ragep2p/types" + "github.com/smartcontractkit/quarantine" + "github.com/smartcontractkit/chainlink-common/pkg/capabilities" capabilitiespb "github.com/smartcontractkit/chainlink-common/pkg/capabilities/pb" "github.com/smartcontractkit/chainlink-common/pkg/types" @@ -373,6 +375,7 @@ func TestReader_Integration(t *testing.T) { } func TestSyncer_DBIntegration(t *testing.T) { + quarantine.Flaky(t, "DX-1925") ctx := testutils.Context(t) reg, regAddress, owner, sim := startNewChainWithRegistry(t) @@ -471,16 +474,15 @@ func TestSyncer_DBIntegration(t *testing.T) { syncerORM.ormMock.On("AddLocalRegistry", mock.Anything, mock.Anything).Return(nil) syncer, err := newTestSyncer(logger.TestLogger(t), func() (p2ptypes.PeerID, error) { return p2ptypes.PeerID{}, nil }, factory, regAddress.Hex(), syncerORM) require.NoError(t, err) - - l := &launcher{} - syncer.AddListener(l) - require.NoError(t, syncer.Start(ctx)) t.Cleanup(func() { - require.NoError(t, syncer.Close()) syncerORM.Cleanup() + require.NoError(t, syncer.Close()) }) + l := &launcher{} + syncer.AddListener(l) + var latestLocalRegistryCalled, addLocalRegistryCalled bool timeout := time.After(testutils.WaitTimeout(t)) diff --git a/core/services/standardcapabilities/delegate.go b/core/services/standardcapabilities/delegate.go index 6efab18b06f..7a59fe9e12e 100644 --- a/core/services/standardcapabilities/delegate.go +++ b/core/services/standardcapabilities/delegate.go @@ -66,7 +66,6 @@ type Delegate struct { creSettings core.SettingsBroadcaster ocrConfigService capregconfig.OCRConfigService localCfg coreconfig.LocalCapabilities - initErr error isNewlyCreatedJob bool } @@ -100,11 +99,6 @@ func NewDelegate( localCfg coreconfig.LocalCapabilities, opts ...func(*gateway.RoundRobinSelector), ) *Delegate { - initErr := registerOptionalMockStreamsTrigger(logger, localCfg, registry) - if initErr != nil { - logger.Errorw("Failed to register optional mock streams trigger", "err", initErr) - } - return &Delegate{ logger: logger, ds: ds, @@ -125,7 +119,6 @@ func NewDelegate( creSettings: creSettings, ocrConfigService: ocrConfigService, localCfg: localCfg, - initErr: initErr, selectorOpts: opts, } } @@ -140,10 +133,6 @@ func (d *Delegate) BeforeJobCreated(job job.Job) { } func (d *Delegate) ServicesForSpec(ctx context.Context, spec job.Job) ([]job.ServiceCtx, error) { - if d.initErr != nil { - return nil, d.initErr - } - command := spec.StandardCapabilitiesSpec.Command configJSON := spec.StandardCapabilitiesSpec.Config @@ -170,10 +159,6 @@ func (d *Delegate) NewServices( externalJobID uuid.UUID, oracleFactoryConfig job.OracleFactoryConfig, ) ([]job.ServiceCtx, error) { - if d.initErr != nil { - return nil, d.initErr - } - log := d.logger.Named("StandardCapabilities").Named(strconv.Itoa(int(jobID))).Named(jobName) kvStore := job.NewKVStore(jobID, d.ds) diff --git a/core/services/standardcapabilities/local_capabilities.go b/core/services/standardcapabilities/local_capabilities.go deleted file mode 100644 index a8b9aad85c8..00000000000 --- a/core/services/standardcapabilities/local_capabilities.go +++ /dev/null @@ -1,22 +0,0 @@ -package standardcapabilities - -import ( - "github.com/smartcontractkit/chainlink-common/pkg/types/core" - - capStreams "github.com/smartcontractkit/chainlink/v2/core/capabilities/streams" - coreconfig "github.com/smartcontractkit/chainlink/v2/core/config" - "github.com/smartcontractkit/chainlink/v2/core/logger" -) - -func shouldRegisterMockStreamsTrigger(localCfg coreconfig.LocalCapabilities) bool { - return localCfg != nil && localCfg.GetCapabilityConfig(capStreams.MockTriggerCapabilityID) != nil -} - -func registerOptionalMockStreamsTrigger(lggr logger.Logger, localCfg coreconfig.LocalCapabilities, registry core.CapabilitiesRegistry) error { - if !shouldRegisterMockStreamsTrigger(localCfg) { - return nil - } - - _, err := capStreams.RegisterMockTrigger(lggr, registry) - return err -} diff --git a/core/services/standardcapabilities/local_capabilities_test.go b/core/services/standardcapabilities/local_capabilities_test.go deleted file mode 100644 index c3a6cc0f61c..00000000000 --- a/core/services/standardcapabilities/local_capabilities_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package standardcapabilities - -import ( - "testing" - - "github.com/stretchr/testify/require" - - capStreams "github.com/smartcontractkit/chainlink/v2/core/capabilities/streams" - "github.com/smartcontractkit/chainlink/v2/core/config" -) - -type mockTriggerLocalCapabilities struct { - cfgs map[string]config.CapabilityNodeConfig -} - -func (s mockTriggerLocalCapabilities) RegistryBasedLaunchAllowlist() []string { - return nil -} - -func (s mockTriggerLocalCapabilities) Capabilities() map[string]config.CapabilityNodeConfig { - return s.cfgs -} - -func (s mockTriggerLocalCapabilities) IsAllowlisted(string) bool { - return false -} - -func (s mockTriggerLocalCapabilities) GetCapabilityConfig(capabilityID string) config.CapabilityNodeConfig { - if s.cfgs == nil { - return nil - } - return s.cfgs[capabilityID] -} - -type mockTriggerCapabilityNodeConfig struct{} - -func (mockTriggerCapabilityNodeConfig) BinaryPathOverride() string { - return "" -} - -func (mockTriggerCapabilityNodeConfig) Config() map[string]string { - return nil -} - -func TestShouldRegisterMockStreamsTrigger(t *testing.T) { - t.Parallel() - - tests := []struct { - name string - localCfg config.LocalCapabilities - want bool - }{ - {name: "nil config", localCfg: nil, want: false}, - { - name: "different local capability", - localCfg: mockTriggerLocalCapabilities{ - cfgs: map[string]config.CapabilityNodeConfig{ - "cron@1.0.0": mockTriggerCapabilityNodeConfig{}, - }, - }, - want: false, - }, - { - name: "mock trigger opted in", - localCfg: mockTriggerLocalCapabilities{ - cfgs: map[string]config.CapabilityNodeConfig{ - capStreams.MockTriggerCapabilityID: mockTriggerCapabilityNodeConfig{}, - }, - }, - want: true, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - t.Parallel() - require.Equal(t, tt.want, shouldRegisterMockStreamsTrigger(tt.localCfg)) - }) - } -} diff --git a/core/services/versioning/orm.go b/core/services/versioning/orm.go index 35e1407184f..a1b23b88dfc 100644 --- a/core/services/versioning/orm.go +++ b/core/services/versioning/orm.go @@ -7,7 +7,7 @@ import ( "time" "github.com/Masterminds/semver/v3" - "github.com/jackc/pgx/v5/pgconn" + "github.com/jackc/pgconn" "github.com/pkg/errors" "github.com/smartcontractkit/chainlink-common/pkg/sqlutil" diff --git a/core/services/workflows/v2/engine.go b/core/services/workflows/v2/engine.go index 20f60afa05c..37a7aecedbb 100644 --- a/core/services/workflows/v2/engine.go +++ b/core/services/workflows/v2/engine.go @@ -455,13 +455,16 @@ func (e *Engine) runTriggerSubscriptionPhase(ctx context.Context) error { registrationID := TriggerRegistrationID(e.cfg.WorkflowID, i) e.logger().Debugw("Registering trigger", "triggerID", sub.Id, "method", sub.Method) metadata := capabilities.RequestMetadata{ - WorkflowID: e.cfg.WorkflowID, - WorkflowOwner: e.cfg.WorkflowOwner, - WorkflowName: e.cfg.WorkflowName.Hex(), - WorkflowTag: e.cfg.WorkflowTag, - DecodedWorkflowName: e.cfg.WorkflowName.String(), - WorkflowDonID: e.localNode.Load().WorkflowDON.ID, - WorkflowDonConfigVersion: pinnedWorkflowDonConfigVersion, + WorkflowID: e.cfg.WorkflowID, + WorkflowOwner: e.cfg.WorkflowOwner, + WorkflowName: e.cfg.WorkflowName.Hex(), + WorkflowTag: e.cfg.WorkflowTag, + DecodedWorkflowName: e.cfg.WorkflowName.String(), + WorkflowDonID: e.localNode.Load().WorkflowDON.ID, + // TODO(CRE-1636): This should be pinnedWorkflowDonConfigVersion, but it causes CI timeouts + // that I can't reproduce locally. This values is unused in trigger subscription phase + // so it's not a problem. Still, let's do it right when CI is fixed. + WorkflowDonConfigVersion: e.localNode.Load().WorkflowDON.ConfigVersion, ReferenceID: fmt.Sprintf("trigger_%d", i), WorkflowRegistryChainSelector: e.cfg.WorkflowRegistryChainSelector, WorkflowRegistryAddress: e.cfg.WorkflowRegistryAddress, diff --git a/core/services/workflows/v2/engine_test.go b/core/services/workflows/v2/engine_test.go index 922c1c82367..d486b9adc81 100644 --- a/core/services/workflows/v2/engine_test.go +++ b/core/services/workflows/v2/engine_test.go @@ -607,7 +607,7 @@ func TestEngine_Execution(t *testing.T) { require.Equal(t, cfg.WorkflowName.Hex(), capturedTriggerRequest.Metadata.WorkflowName) require.Equal(t, cfg.WorkflowTag, capturedTriggerRequest.Metadata.WorkflowTag) require.Equal(t, uint32(0), capturedTriggerRequest.Metadata.WorkflowDonID) - require.Equal(t, uint32(1), capturedTriggerRequest.Metadata.WorkflowDonConfigVersion) + require.Equal(t, uint32(0), capturedTriggerRequest.Metadata.WorkflowDonConfigVersion) require.Equal(t, "trigger_0", capturedTriggerRequest.Metadata.ReferenceID) require.Equal(t, "method", capturedTriggerRequest.Method) require.Nil(t, capturedTriggerRequest.Payload) diff --git a/core/web/bridge_types_controller.go b/core/web/bridge_types_controller.go index 52e49ecfd1f..6b1d34673c8 100644 --- a/core/web/bridge_types_controller.go +++ b/core/web/bridge_types_controller.go @@ -7,9 +7,7 @@ import ( "net/http" "strings" - "github.com/gin-gonic/gin" - "github.com/jackc/pgx/v5/pgconn" - "github.com/pkg/errors" + "github.com/jackc/pgconn" "github.com/smartcontractkit/chainlink-common/pkg/assets" "github.com/smartcontractkit/chainlink/v2/core/bridges" @@ -17,6 +15,9 @@ import ( "github.com/smartcontractkit/chainlink/v2/core/services/chainlink" "github.com/smartcontractkit/chainlink/v2/core/store/models" "github.com/smartcontractkit/chainlink/v2/core/web/presenters" + + "github.com/gin-gonic/gin" + "github.com/pkg/errors" ) // ValidateBridgeTypeNotExist checks that a bridge has not already been created diff --git a/core/web/chains_controller_test.go b/core/web/chains_controller_test.go index 04399e70f73..be797537d9d 100644 --- a/core/web/chains_controller_test.go +++ b/core/web/chains_controller_test.go @@ -275,7 +275,7 @@ ComputeUnitLimitDefault = 200000 EstimateComputeUnitLimit = false LogPollerStartingLookback = '24h0m0s' LogPollerCPIEventsEnabled = true -LogPollerSlotsBatchSize = 1000 +LogPollerSlotsBatchSize = 100 Nodes = [] [Workflow] diff --git a/core/web/resolver/testdata/config-multi-chain-effective.toml b/core/web/resolver/testdata/config-multi-chain-effective.toml index 6d4542a1092..59957de7036 100644 --- a/core/web/resolver/testdata/config-multi-chain-effective.toml +++ b/core/web/resolver/testdata/config-multi-chain-effective.toml @@ -797,7 +797,7 @@ ComputeUnitLimitDefault = 200000 EstimateComputeUnitLimit = false LogPollerStartingLookback = '24h0m0s' LogPollerCPIEventsEnabled = true -LogPollerSlotsBatchSize = 1000 +LogPollerSlotsBatchSize = 100 [Solana.Workflow] AcceptanceTimeout = '45s' diff --git a/core/web/user_controller.go b/core/web/user_controller.go index aaef436d164..194f0c35601 100644 --- a/core/web/user_controller.go +++ b/core/web/user_controller.go @@ -6,7 +6,7 @@ import ( "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" - "github.com/jackc/pgx/v5/pgconn" + "github.com/jackc/pgconn" "github.com/pkg/errors" "github.com/smartcontractkit/chainlink/v2/core/auth" diff --git a/deployment/cre/forwarder/solana/sequence/operation/operation.go b/deployment/cre/forwarder/solana/sequence/operation/operation.go index 16f500cd4db..17ceac544db 100644 --- a/deployment/cre/forwarder/solana/sequence/operation/operation.go +++ b/deployment/cre/forwarder/solana/sequence/operation/operation.go @@ -99,7 +99,7 @@ type ( func initForwarder(b operations.Bundle, deps Deps, in InitForwarderInput) (InitForwarderOutput, error) { var out InitForwarderOutput if ks_forwarder.ProgramID.IsZero() { - ks_forwarder.ProgramID = in.ProgramID + ks_forwarder.SetProgramID(in.ProgramID) } stateKey, err := solana.NewRandomPrivateKey() @@ -107,7 +107,7 @@ func initForwarder(b operations.Bundle, deps Deps, in InitForwarderInput) (InitF return out, fmt.Errorf("failed to create random keys: %w", err) } - instruction, err := ks_forwarder.NewInitializeInstruction(stateKey.PublicKey(), deps.Chain.DeployerKey.PublicKey(), solana.SystemProgramID) + instruction, err := ks_forwarder.NewInitializeInstruction(stateKey.PublicKey(), deps.Chain.DeployerKey.PublicKey(), solana.SystemProgramID).ValidateAndBuild() if err != nil { return out, fmt.Errorf("failed to build and validate initialize instruction %w", err) } @@ -179,9 +179,9 @@ func setUpgradeAuthority(b operations.Bundle, deps Deps, in SetUpgradeAuthorityI func configureForwarder(b operations.Bundle, deps Deps, in ConfigureForwarderInput) (ConfigureForwarderOutput, error) { var out ConfigureForwarderOutput - var instructions solana.Instruction + var instructions *ks_forwarder.Instruction if ks_forwarder.ProgramID.IsZero() { - ks_forwarder.ProgramID = in.ProgramID + ks_forwarder.SetProgramID(in.ProgramID) } configPDA := solana.MustPublicKeyFromBase58(in.ConfigPDA) @@ -210,7 +210,7 @@ func configureForwarder(b operations.Bundle, deps Deps, in ConfigureForwarderInp configPDA, owner, solana.SystemProgramID, - ) + ).ValidateAndBuild() if err != nil { return out, fmt.Errorf("cant build init oracle instruction: %w", err) } @@ -223,7 +223,7 @@ func configureForwarder(b operations.Bundle, deps Deps, in ConfigureForwarderInp in.ForwarderState, configPDA, owner, - ) + ).ValidateAndBuild() if err != nil { return out, fmt.Errorf("cant build init oracle instruction: %w", err) } diff --git a/deployment/cre/jobs/operations/propose_gateway_job.go b/deployment/cre/jobs/operations/propose_gateway_job.go index f0b946d063e..239b6dc0f15 100644 --- a/deployment/cre/jobs/operations/propose_gateway_job.go +++ b/deployment/cre/jobs/operations/propose_gateway_job.go @@ -42,10 +42,9 @@ type DON struct { } type GatewayService struct { - ServiceName string `yaml:"servicename"` - Handlers []string `yaml:"handlers"` - DONs []string `yaml:"dons"` - Auth0 *pkg.Auth0Config `yaml:"auth0,omitempty"` + ServiceName string `yaml:"servicename"` + Handlers []string `yaml:"handlers"` + DONs []string `yaml:"dons"` } type ProposeGatewayJobDeps struct { @@ -173,7 +172,6 @@ func buildServiceCentricJob(deps ProposeGatewayJobDeps, input ProposeGatewayJobI ServiceName: svc.ServiceName, Handlers: svc.Handlers, DONs: svc.DONs, - Auth0: svc.Auth0, } } diff --git a/deployment/cre/jobs/operations/propose_ocr3_job.go b/deployment/cre/jobs/operations/propose_ocr3_job.go index 85048c14e06..ce3c781d514 100644 --- a/deployment/cre/jobs/operations/propose_ocr3_job.go +++ b/deployment/cre/jobs/operations/propose_ocr3_job.go @@ -36,7 +36,6 @@ type ProposeOCR3JobInput struct { // Optionals: specific to the worker vault OCR3 Job spec DKGContractAddress string VaultRequestExpiryDuration string - Auth0 *pkg.Auth0Config DONFilters []offchain.TargetDONFilter ExtraLabels map[string]string @@ -82,7 +81,7 @@ var ProposeOCR3Job = operations.NewSequence[ProposeOCR3JobInput, ProposeOCR3JobO specs, err := pkg.BuildOCR3JobConfigSpecs( deps.Env.Offchain, deps.Env.Logger, input.ContractAddress, input.ChainSelectorEVM, - input.ChainSelectorAptos, input.ChainSelectorSolana, nodes, input.BootstrapperOCR3Urls, input.DONName, input.JobName, input.TemplateName, input.DKGContractAddress, vaultReqExpiry, input.Auth0, + input.ChainSelectorAptos, input.ChainSelectorSolana, nodes, input.BootstrapperOCR3Urls, input.DONName, input.JobName, input.TemplateName, input.DKGContractAddress, vaultReqExpiry, ) if err != nil { return ProposeOCR3JobOutput{}, fmt.Errorf("failed to build OCR3 job config specs: %w", err) diff --git a/deployment/cre/jobs/orgsettings.go b/deployment/cre/jobs/orgsettings.go index 65436d607bd..c345a177e5f 100644 --- a/deployment/cre/jobs/orgsettings.go +++ b/deployment/cre/jobs/orgsettings.go @@ -25,7 +25,7 @@ func CombineCRESettingsFiles(wd string, fs fs.FS) ([]byte, error) { return settings.CombineTOMLFiles(os.DirFS(wd)) } -// copyOrgFiles makes a copy of each org file, with an `org_` prefix. +// copyOrgFiles makes two copies of each org file. One with an `org_` prefix and one lower-case. func copyOrgFiles(dir string) error { dir = filepath.Join(dir, "org") err := fs.WalkDir(os.DirFS(dir), ".", func(path string, d fs.DirEntry, err error) error { @@ -44,6 +44,13 @@ func copyOrgFiles(dir string) error { if err != nil { return fmt.Errorf("failed to copy file %s to %s: %w", name, prefixed, err) } + lower := strings.ToLower(name) + if name != lower { // no need for a copy + err = copyFile(dir, name, lower) + if err != nil { + return fmt.Errorf("failed to copy file %s to %s: %w", name, lower, err) + } + } return nil }) diff --git a/deployment/cre/jobs/pkg/gateway_job.go b/deployment/cre/jobs/pkg/gateway_job.go index a546c944609..3bc6828cac1 100644 --- a/deployment/cre/jobs/pkg/gateway_job.go +++ b/deployment/cre/jobs/pkg/gateway_job.go @@ -53,7 +53,6 @@ type GatewayServiceConfig struct { ServiceName string Handlers []string DONs []string - Auth0 *Auth0Config } type GatewayJob struct { @@ -228,7 +227,7 @@ func (g GatewayJob) buildLegacyDons() ([]legacyDON, error) { case GatewayHandlerTypeWebAPICapabilities: hs = append(hs, newDefaultWebAPICapabilitiesHandler()) case GatewayHandlerTypeVault: - hs = append(hs, newDefaultVaultHandler(g.RequestTimeoutSec, nil)) + hs = append(hs, newDefaultVaultHandler(g.RequestTimeoutSec)) case GatewayHandlerTypeHTTPCapabilities: hs = append(hs, newDefaultHTTPCapabilitiesHandler()) case GatewayHandlerTypeConfidentialRelay: @@ -272,7 +271,7 @@ func (g GatewayJob) buildServicesAndShardedDONs() ([]shardedDON, []service, erro case GatewayHandlerTypeWebAPICapabilities: handlers = append(handlers, newDefaultWebAPICapabilitiesHandler()) case GatewayHandlerTypeVault: - handlers = append(handlers, newDefaultVaultHandler(g.RequestTimeoutSec, svcCfg.Auth0)) + handlers = append(handlers, newDefaultVaultHandler(g.RequestTimeoutSec)) case GatewayHandlerTypeHTTPCapabilities: handlers = append(handlers, newDefaultHTTPCapabilitiesHandler()) case GatewayHandlerTypeConfidentialRelay: @@ -315,10 +314,9 @@ func newDefaultWebAPICapabilitiesHandler() handler { type vaultHandlerConfig struct { RequestTimeoutSec int `toml:"requestTimeoutSec"` NodeRateLimiter nodeRateLimiterConfig `toml:"NodeRateLimiter"` - Auth0 *Auth0Config `toml:"auth0,omitempty"` } -func newDefaultVaultHandler(requestTimeoutSec int, auth0 *Auth0Config) handler { +func newDefaultVaultHandler(requestTimeoutSec int) handler { return handler{ Name: GatewayHandlerTypeVault, ServiceName: ServiceNameVault, @@ -332,7 +330,6 @@ func newDefaultVaultHandler(requestTimeoutSec int, auth0 *Auth0Config) handler { PerSenderBurst: 10, PerSenderRPS: 10, }, - Auth0: auth0, }, } } diff --git a/deployment/cre/jobs/pkg/ocr3_job.go b/deployment/cre/jobs/pkg/ocr3_job.go index c5993a5556e..37960d90427 100644 --- a/deployment/cre/jobs/pkg/ocr3_job.go +++ b/deployment/cre/jobs/pkg/ocr3_job.go @@ -35,12 +35,6 @@ type OCR3JobConfigInput struct { // Optionals: specific to the worker vault OCR3 Job spec DKGContractQualifier string `yaml:"dkgContractQualifier"` VaultRequestExpiryDuration string `yaml:"vaultRequestExpiryDuration"` - Auth0 *Auth0Config -} - -type Auth0Config struct { - IssuerURL string `yaml:"issuerURL" toml:"issuerURL" json:"issuerURL"` - Audience string `yaml:"audience" toml:"audience" json:"audience"` } type OCR3JobConfig struct { @@ -58,7 +52,6 @@ type OCR3JobConfig struct { DKGContractAddress string VaultRequestExpiryDuration string - Auth0 *Auth0Config } func (c OCR3JobConfig) Validate() error { @@ -99,14 +92,6 @@ func (c OCR3JobConfig) Validate() error { if err != nil { return fmt.Errorf("VaultRequestExpiryDuration is not a valid duration: %w", err) } - if c.Auth0 != nil { - if c.Auth0.IssuerURL == "" { - return errors.New("Auth0.IssuerURL is required for worker-vault template when auth0 is configured") - } - if c.Auth0.Audience == "" { - return errors.New("Auth0.Audience is required for worker-vault template when auth0 is configured") - } - } } return nil @@ -144,7 +129,6 @@ func BuildOCR3JobConfigSpecs( donName, jobName, templateName string, dkgContractAddress string, vaultRequestExpiryDuration string, - auth0 *Auth0Config, ) ([]OCR3JobConfigSpec, error) { nodesLen := len(nodes) if nodesLen == 0 { @@ -212,7 +196,6 @@ func BuildOCR3JobConfigSpecs( TemplateName: templateName, DKGContractAddress: dkgContractAddress, VaultRequestExpiryDuration: vaultRequestExpiryDuration, - Auth0: auth0, } err1 := jobConfig.Validate() diff --git a/deployment/cre/jobs/pkg/templates/worker-vault.tmpl b/deployment/cre/jobs/pkg/templates/worker-vault.tmpl index 49a4025a93b..442b35afcaf 100644 --- a/deployment/cre/jobs/pkg/templates/worker-vault.tmpl +++ b/deployment/cre/jobs/pkg/templates/worker-vault.tmpl @@ -16,8 +16,3 @@ chainID = "{{ .ChainID }}" requestExpiryDuration = "{{ .VaultRequestExpiryDuration }}" [pluginConfig.dkg] dkgContractID = "{{ .DKGContractAddress }}" -{{- if .Auth0 }} -[pluginConfig.auth0] -issuerURL = "{{ .Auth0.IssuerURL }}" -audience = "{{ .Auth0.Audience }}" -{{- end }} diff --git a/deployment/cre/jobs/propose_aptos_cap.go b/deployment/cre/jobs/propose_aptos_cap.go index 4d4084128da..557f029dc2e 100644 --- a/deployment/cre/jobs/propose_aptos_cap.go +++ b/deployment/cre/jobs/propose_aptos_cap.go @@ -138,9 +138,10 @@ func (u ProposeAptosCapJobSpec) Apply(e cldf.Environment, input ProposeAptosCapJ Command: "/usr/local/bin/aptos", GenerateOracleFactory: true, ContractQualifier: input.OCRContractQualifier, - OCRSigningStrategy: "multi-chain", + OCRSigningStrategy: "single-chain", OCRChainSelector: pkg.ChainSelector(input.OCRChainSelector), ChainSelectorEVM: pkg.ChainSelector(input.OCRChainSelector), + ChainSelectorAptos: pkg.ChainSelector(input.ChainSelector), BootstrapPeers: input.BootstrapperOCR3Urls, } diff --git a/deployment/cre/jobs/propose_job_spec.go b/deployment/cre/jobs/propose_job_spec.go index 5502941e093..3a80678fdae 100644 --- a/deployment/cre/jobs/propose_job_spec.go +++ b/deployment/cre/jobs/propose_job_spec.go @@ -196,7 +196,6 @@ func (u ProposeJobSpec) Apply(e cldf.Environment, input ProposeJobSpecInput) (cl BootstrapperOCR3Urls: jobInput.BootstrapperOCR3Urls, DKGContractAddress: dkgContractAddr, VaultRequestExpiryDuration: jobInput.VaultRequestExpiryDuration, - Auth0: jobInput.Auth0, DONFilters: input.DONFilters, ExtraLabels: input.ExtraLabels, }, diff --git a/deployment/data-feeds/changeset/deploy.go b/deployment/data-feeds/changeset/deploy.go index c9838b05428..f218542ac9e 100644 --- a/deployment/data-feeds/changeset/deploy.go +++ b/deployment/data-feeds/changeset/deploy.go @@ -3,12 +3,9 @@ package changeset import ( "context" "fmt" - "time" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" - ethtypes "github.com/ethereum/go-ethereum/core/types" - "github.com/sethvargo/go-retry" proxy "github.com/smartcontractkit/chainlink-evm/gethwrappers/data-feeds/generated/aggregator_proxy" bundleproxy "github.com/smartcontractkit/chainlink-evm/gethwrappers/data-feeds/generated/bundle_aggregator_proxy" @@ -21,26 +18,6 @@ import ( "github.com/smartcontractkit/chainlink/deployment/data-feeds/changeset/types" ) -func waitForContractCode(ctx context.Context, client cldf_evm.OnchainClient, tx *ethtypes.Transaction) (common.Address, error) { - receipt, err := client.TransactionReceipt(ctx, tx.Hash()) - if err != nil { - return common.Address{}, fmt.Errorf("failed to get tx receipt: %w", err) - } - addr := receipt.ContractAddress - - err = retry.Do(ctx, retry.WithMaxDuration(90*time.Second, retry.WithCappedDuration(30*time.Second, retry.NewFibonacci(5*time.Second))), func(ctx context.Context) error { - code, err := client.CodeAt(ctx, addr, receipt.BlockNumber) - if err != nil { - return retry.RetryableError(err) - } - if len(code) == 0 { - return retry.RetryableError(fmt.Errorf("no contract code at %s (block %s) yet", addr, receipt.BlockNumber)) - } - return nil - }) - return addr, err -} - func DeployCache(chain cldf_evm.Chain, labels []string) (*types.DeployCacheResponse, error) { cacheAddr, tx, cacheContract, err := cache.DeployDataFeedsCache(chain.DeployerKey, chain.Client) if err != nil { @@ -52,10 +29,6 @@ func DeployCache(chain cldf_evm.Chain, labels []string) (*types.DeployCacheRespo return nil, fmt.Errorf("failed to confirm DataFeedsCache: %w", err) } - if _, err := waitForContractCode(context.Background(), chain.Client, tx); err != nil { - return nil, fmt.Errorf("failed to verify DataFeedsCache deployment: %w", err) - } - tvStr, err := cacheContract.TypeAndVersion(&bind.CallOpts{}) if err != nil { return nil, fmt.Errorf("failed to get type and version: %w", err) @@ -90,10 +63,6 @@ func DeployAggregatorProxy(chain cldf_evm.Chain, aggregator common.Address, acce return nil, fmt.Errorf("failed to confirm AggregatorProxy: %w", err) } - if _, err := waitForContractCode(context.Background(), chain.Client, tx); err != nil { - return nil, fmt.Errorf("failed to verify AggregatorProxy deployment: %w", err) - } - // AggregatorProxy contract doesn't implement typeAndVersion interface, so we have to set it manually tvStr := "AggregatorProxy 1.0.0" tv, err := cldf.TypeAndVersionFromString(tvStr) @@ -143,23 +112,42 @@ func DeployBundleAggregatorProxy(lggr logger.Logger, chain cldf_evm.Chain, aggre "blockNumber", blockNum, "predictedAddress", proxyAddr.Hex()) - deployedAddr, err := waitForContractCode(context.Background(), chain.Client, tx) + receipt, err := chain.Client.TransactionReceipt(context.Background(), tx.Hash()) if err != nil { - return nil, fmt.Errorf("failed to verify BundleAggregatorProxy deployment: %w", err) + return nil, fmt.Errorf("failed to get receipt for BundleAggregatorProxy deploy tx: %w", err) } - if deployedAddr != proxyAddr { - lggr.Warnw("BundleAggregatorProxy predicted address does not match deployed address", + receiptAddr := receipt.ContractAddress + if receiptAddr != proxyAddr { + lggr.Warnw("BundleAggregatorProxy predicted address does not match receipt address", "chainSelector", chain.Selector, "predictedAddress", proxyAddr.Hex(), - "deployedAddress", deployedAddr.Hex(), - "txHash", tx.Hash().Hex()) - proxyAddr = deployedAddr + "receiptAddress", receiptAddr.Hex(), + "txHash", tx.Hash().Hex(), + "txNonce", tx.Nonce(), + "receiptStatus", receipt.Status) + proxyAddr = receiptAddr } - lggr.Debugw("BundleAggregatorProxy deployed and code verified", + code, err := chain.Client.CodeAt(context.Background(), proxyAddr, nil) + if err != nil { + return nil, fmt.Errorf("failed to check code at BundleAggregatorProxy address %s: %w", proxyAddr, err) + } + if len(code) == 0 { + lggr.Errorw("No contract code found at BundleAggregatorProxy address after confirmed deployment", + "chainSelector", chain.Selector, + "address", proxyAddr.Hex(), + "txHash", tx.Hash().Hex(), + "txNonce", tx.Nonce(), + "receiptStatus", receipt.Status, + "blockNumber", receipt.BlockNumber) + return nil, fmt.Errorf("no contract code at BundleAggregatorProxy address %s (tx %s, status %d)", proxyAddr, tx.Hash(), receipt.Status) + } + + lggr.Debugw("BundleAggregatorProxy code verified at address", "chainSelector", chain.Selector, - "address", proxyAddr.Hex()) + "address", proxyAddr.Hex(), + "codeSize", len(code)) proxyContract, err := bundleproxy.NewBundleAggregatorProxy(proxyAddr, chain.Client) if err != nil { diff --git a/deployment/data-feeds/changeset/solana/sequence/operation/operation.go b/deployment/data-feeds/changeset/solana/sequence/operation/operation.go index d45be611356..4254e450868 100644 --- a/deployment/data-feeds/changeset/solana/sequence/operation/operation.go +++ b/deployment/data-feeds/changeset/solana/sequence/operation/operation.go @@ -180,7 +180,7 @@ func initCache(b operations.Bundle, deps Deps, in InitCacheInput) (InitCacheOutp var out InitCacheOutput if df_cache.ProgramID.IsZero() { - df_cache.ProgramID = in.ProgramID + df_cache.SetProgramID(in.ProgramID) } stateKey, err := solana.NewRandomPrivateKey() @@ -194,7 +194,7 @@ func initCache(b operations.Bundle, deps Deps, in InitCacheInput) (InitCacheOutp stateKey.PublicKey(), in.ForwarderProgramID, solana.SystemProgramID, - ) + ).ValidateAndBuild() if err != nil { return out, fmt.Errorf("failed to build and validate initialize instruction %w", err) } @@ -248,26 +248,22 @@ func setUpgradeAuthority(b operations.Bundle, deps Deps, in SetUpgradeAuthorityI func initCacheDecimalReport(b operations.Bundle, deps Deps, in InitCacheDecimalReportInput) (ConfigureCacheOutput, error) { var out ConfigureCacheOutput - ix, err := df_cache.NewInitDecimalReportsInstruction( + instruction := df_cache.NewInitDecimalReportsInstruction( in.DataIDs, in.FeedAdmin, in.State, solana.SystemProgramID, ) - if err != nil { - return out, fmt.Errorf("failed to build InitDecimalReports instruction: %w", err) - } - remainingAccounts := make(solana.AccountMetaSlice, 0, len(in.RemainingAccounts)) - for i := range in.RemainingAccounts { - remainingAccounts = append(remainingAccounts, &in.RemainingAccounts[i]) + for _, acc := range in.RemainingAccounts { + instruction.AccountMetaSlice = append(instruction.AccountMetaSlice, &acc) } - accounts := append(solana.AccountMetaSlice(ix.Accounts()), remainingAccounts...) - data, err := ix.Data() + + tx, err := instruction.ValidateAndBuild() + if err != nil { - return out, fmt.Errorf("failed to get InitDecimalReports instruction data: %w", err) + return out, fmt.Errorf("failed to build and validate initialize instruction %w", err) } - tx := solana.NewInstruction(ix.ProgramID(), accounts, data) proposals, err := confirmInstructionOrBuildProposal( deps, @@ -290,7 +286,7 @@ func initCacheDecimalReport(b operations.Bundle, deps Deps, in InitCacheDecimalR func configureCacheDecimalReport(b operations.Bundle, deps Deps, in ConfigureCacheDecimalReportInput) (ConfigureCacheOutput, error) { var out ConfigureCacheOutput - ix, err := df_cache.NewSetDecimalFeedConfigsInstruction( + instruction := df_cache.NewSetDecimalFeedConfigsInstruction( in.DataIDs, in.Descriptions, in.WorkflowMetadatas, @@ -298,20 +294,16 @@ func configureCacheDecimalReport(b operations.Bundle, deps Deps, in ConfigureCac in.State, solana.SystemProgramID, ) - if err != nil { - return out, fmt.Errorf("failed to build SetDecimalFeedConfigs instruction: %w", err) - } - remainingAccounts := make(solana.AccountMetaSlice, 0, len(in.RemainingAccounts)) - for i := range in.RemainingAccounts { - remainingAccounts = append(remainingAccounts, &in.RemainingAccounts[i]) + for _, acc := range in.RemainingAccounts { + instruction.AccountMetaSlice = append(instruction.AccountMetaSlice, &acc) } - accounts := append(solana.AccountMetaSlice(ix.Accounts()), remainingAccounts...) - data, err := ix.Data() + + tx, err := instruction.ValidateAndBuild() + if err != nil { - return out, fmt.Errorf("failed to get SetDecimalFeedConfigs instruction data: %w", err) + return out, fmt.Errorf("failed to build and validate initialize instruction %w", err) } - tx := solana.NewInstruction(ix.ProgramID(), accounts, data) proposals, err := confirmInstructionOrBuildProposal( deps, diff --git a/deployment/environment/crib/types.go b/deployment/environment/crib/types.go index e58614ada02..d0cc0946cc6 100644 --- a/deployment/environment/crib/types.go +++ b/deployment/environment/crib/types.go @@ -26,8 +26,8 @@ type DeployCCIPOutput struct { NodeIDs []string } -func NewDeployEnvironmentFromCribOutput(ctx context.Context, lggr logger.Logger, output DeployOutput) (*cldf.Environment, error) { - blockChains, err := devenv.NewChains(ctx, lggr, output.Chains) +func NewDeployEnvironmentFromCribOutput(lggr logger.Logger, output DeployOutput) (*cldf.Environment, error) { + blockChains, err := devenv.NewChains(lggr, output.Chains) if err != nil { return nil, err } diff --git a/deployment/environment/devenv/chain.go b/deployment/environment/devenv/chain.go index 154798f5ca4..ec4672b6ea3 100644 --- a/deployment/environment/devenv/chain.go +++ b/deployment/environment/devenv/chain.go @@ -149,7 +149,7 @@ func (c *ChainConfig) ToRPCs() []cldf_evm_client.RPC { return rpcs } -func NewChains(ctx context.Context, logger logger.Logger, configs []ChainConfig) (cldf_chain.BlockChains, error) { +func NewChains(logger logger.Logger, configs []ChainConfig) (cldf_chain.BlockChains, error) { var evmSyncMap sync.Map var solSyncMap sync.Map var aptosSyncMap sync.Map @@ -175,7 +175,7 @@ func NewChains(ctx context.Context, logger logger.Logger, configs []ChainConfig) switch chainCfg.ChainType { case EVMChainType: - ec, err := cldf_evm_client.NewMultiClient(ctx, logger, rpcConf, chainCfg.MultiClientOpts...) + ec, err := cldf_evm_client.NewMultiClient(logger, rpcConf, chainCfg.MultiClientOpts...) if err != nil { return fmt.Errorf("failed to create multi client: %w", err) } diff --git a/deployment/environment/devenv/environment.go b/deployment/environment/devenv/environment.go index c41f328ef2d..935cf771388 100644 --- a/deployment/environment/devenv/environment.go +++ b/deployment/environment/devenv/environment.go @@ -21,7 +21,7 @@ type EnvironmentConfig struct { } func NewEnvironment(ctx func() context.Context, lggr logger.Logger, config EnvironmentConfig) (*cldf.Environment, *DON, error) { - blockChains, err := NewChains(ctx(), lggr, config.Chains) + blockChains, err := NewChains(lggr, config.Chains) if err != nil { return nil, nil, fmt.Errorf("failed to create chains: %w", err) } diff --git a/deployment/go.mod b/deployment/go.mod index 6344d680d09..564bf439238 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -37,14 +37,14 @@ require ( github.com/smartcontractkit/ccip-owner-contracts v0.1.0 github.com/smartcontractkit/chain-selectors v1.0.98 github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65 - github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa + github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc 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-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a - github.com/smartcontractkit/chainlink-common/keystore v1.1.0 - github.com/smartcontractkit/chainlink-deployments-framework v0.96.0 + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4 + github.com/smartcontractkit/chainlink-common/keystore v1.0.2 + github.com/smartcontractkit/chainlink-deployments-framework v0.95.0 github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03 github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20260119171452-39c98c3b33cd @@ -52,8 +52,8 @@ require ( github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 github.com/smartcontractkit/chainlink-protos/job-distributor v0.18.0 github.com/smartcontractkit/chainlink-protos/orchestrator v0.10.0 - github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c - github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260421131224-c46cbfe7bc6c + github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863 + github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260217175957-8f1af02c5075 github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0 github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20260409184948-5b16fae57fe0 github.com/smartcontractkit/chainlink-testing-framework/framework v0.15.16 @@ -111,7 +111,6 @@ require ( github.com/NethermindEth/starknet.go v0.8.0 // indirect github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 // indirect github.com/TyphonHill/go-mermaid v1.0.0 // indirect - github.com/Unheilbar/anchor-go v1.0.3 // indirect github.com/VictoriaMetrics/fastcache v1.13.0 // indirect github.com/XSAM/otelsql v0.37.0 // indirect github.com/agnivade/levenshtein v1.1.1 // indirect @@ -323,8 +322,7 @@ require ( github.com/jackc/pgproto3/v2 v2.3.3 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgtype v1.14.4 // indirect - github.com/jackc/pgx/v5 v5.9.2 // indirect - github.com/jackc/puddle/v2 v2.2.2 // indirect + github.com/jackc/pgx/v4 v4.18.3 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jinzhu/copier v0.4.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect @@ -423,8 +421,8 @@ require ( github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 // indirect github.com/sirupsen/logrus v1.9.4 // indirect 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.0-20260423133643-8d6a915c04b3 // indirect + github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4 // indirect + github.com/smartcontractkit/chainlink-ccv v0.0.0-20260408181529-b5080e662563 // indirect github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 // indirect github.com/smartcontractkit/chainlink-data-streams v0.1.13 // indirect github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 // indirect diff --git a/deployment/go.sum b/deployment/go.sum index 16878c7b515..fa8db620451 100644 --- a/deployment/go.sum +++ b/deployment/go.sum @@ -112,8 +112,6 @@ github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608 github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= github.com/TyphonHill/go-mermaid v1.0.0 h1:VtmgQwgZA+KNHJvG/O591ibBVuDkGhg2+F/olVXnXAs= github.com/TyphonHill/go-mermaid v1.0.0/go.mod h1:BqMEbKnr2HHpZ4lJJvGjL47v6rZAUpJcOaE/db1Ppwc= -github.com/Unheilbar/anchor-go v1.0.3 h1:rIZ9FU7L+OazdTR+FB6Q2Fe65LvsDXA649vR3LJRJl0= -github.com/Unheilbar/anchor-go v1.0.3/go.mod h1:v5AdT7FpHKNcIppfr3bix/ZP3Kr8oOzmxSxEWsCMEd0= github.com/VictoriaMetrics/fastcache v1.13.0 h1:AW4mheMR5Vd9FkAPUv+NH6Nhw+fmbTMGMsNAoA/+4G0= github.com/VictoriaMetrics/fastcache v1.13.0/go.mod h1:hHXhl4DA2fTL2HTZDJFXWgW0LNjo6B+4aj2Wmng3TjU= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= @@ -328,6 +326,7 @@ github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= @@ -936,11 +935,12 @@ github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgS github.com/jackc/pgx/v4 v4.18.2/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= github.com/jackc/pgx/v4 v4.18.3 h1:dE2/TrEsGX3RBprb3qryqSV9Y60iZN1C6i8IrmW9/BA= github.com/jackc/pgx/v4 v4.18.3/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= -github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= -github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= +github.com/jackc/pgx/v5 v5.7.5 h1:JHGfMnQY+IEtGM63d+NGMjoRpysB2JBwDr5fsngwmJs= +github.com/jackc/pgx/v5 v5.7.5/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M= github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.3.0 h1:eHK/5clGOatcjX3oWGBO/MpxpbHzSwud5EWTSCI+MX0= github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= @@ -1382,10 +1382,10 @@ github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65 h github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65/go.mod h1:BbVsx2VcwSVWkd0C5TcAkQBnFaeYFnogJgUa9BUla18= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa h1:GE4B480m+/OMgkmZ9mEI1Abh927N7oW+Ruq9uuKIFQw= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa/go.mod h1:1XxxpkgCmG/z6y30yRuVrcxre6zixIVX3xzi706Db/8= -github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd h1:Jtw6p5iisjXZyFOcBvWh6PDQKtvryrRU2JMmezdutjo= -github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd/go.mod h1:zLqdD2kBX7NsntBneclb2yrHhjFaJdoyA8dK5eimlrE= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de h1:coysmw4zHm6TLOZawoe2h0hHh/25ft+hq9+9mRNkqTs= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de/go.mod h1:1XxxpkgCmG/z6y30yRuVrcxre6zixIVX3xzi706Db/8= +github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4 h1:b6IxxglkWivZ5nfYdYkHF4w0l2BJyEmSdyMYRm47aB4= +github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4/go.mod h1:zLqdD2kBX7NsntBneclb2yrHhjFaJdoyA8dK5eimlrE= github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc h1:dP1ERzdTbiJbHVXfHYdBAi1+8NjgkyQuY2oFNWWWDsQ= github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:7XR5wfgT8hjSsiV+t0EAWvna+rYQeMPaoZf/0g+dios= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc h1:mvobZx5JV5PhG/9IXPReV+8mAGnupl0HIWQZ43zxzd4= @@ -1394,20 +1394,20 @@ 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-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc h1:entc0pB4VQEkhJf/ymOfnUh6zcu1sj1OU4YW3iPEW4s= github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:Ex2OUp35VJuCcRAjuBKwP+cevEPOSjy1pZXm3ncV4kQ= -github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3 h1:NTvhSs8sh0ZYr3JUw8GvPZcLQaeh6t2nleKg7hfnOnQ= -github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3/go.mod h1:sJeU9at/+chXZfh7io5HzW6C3fgDxjpEB6U1dsS+BnE= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a h1:mUEbGLi++YLS6nd6oaFHZ9tAqw0t2ojLu1cZAjCoZmU= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a/go.mod h1:ohOxnxpzD382PS3nN4zhdJmWD+rsBh8zTLGGHhTdJCE= -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-ccv v0.0.0-20260408181529-b5080e662563 h1:1sYQ2lG3zbAG2vASNF5kLke8DhGk5lNaJirwPDx3Vi4= +github.com/smartcontractkit/chainlink-ccv v0.0.0-20260408181529-b5080e662563/go.mod h1:nEuyjUh4wrK6mNXEAaOncl/AhCl31oaxOS160gNW0vc= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4 h1:/b6wjxXU3XhXw8iEmK2FLXp+etK1oD5MK5BedfsFC7U= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4/go.mod h1:Ukc8qY13EcRcSQv6ZBmTKl0YE6F8uE5lj4zsX5aXvXM= +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/monitoring v0.0.0-20251215152504-b1e41f508340 h1:PsjEI+5jZIz9AS4eOsLS5VpSWJINf38clXV3wryPyMk= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20251215152504-b1e41f508340/go.mod h1:P/0OSXUlFaxxD4B/P6HWbxYtIRmmWGDJAvanq19879c= github.com/smartcontractkit/chainlink-data-streams v0.1.13 h1:YOmt545DW6U0SyaqBf+NTGDLm1yMurVI7yOvxP5hlJk= github.com/smartcontractkit/chainlink-data-streams v0.1.13/go.mod h1:00aL7OK0BJdF9gn/4t4f/pctUu2VLwwfA8G/tl9rCrM= -github.com/smartcontractkit/chainlink-deployments-framework v0.96.0 h1:dwdKdXGDfzIwg1/PxQ3YxaeaFplyOtL+EPGtFPVGRmM= -github.com/smartcontractkit/chainlink-deployments-framework v0.96.0/go.mod h1:vjdYbQDNUd3IznXuxv5Gm7VZB804TKOqjNo1BhFOUDk= +github.com/smartcontractkit/chainlink-deployments-framework v0.95.0 h1:PHncc++Xk9OIP7JDiCvpqdMdP85YZWKQCpnRR7l477g= +github.com/smartcontractkit/chainlink-deployments-framework v0.95.0/go.mod h1:pTA1JrdlMSfb9WkrIfphq2KV/+paW7GHf15Oc/uJBxs= github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03 h1:z+Au1CpZhVYpn7mkmG/mYFBFkdZoqibQ3LngEHm8Fqs= github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03/go.mod h1:6vCMfxz7cMW0wWseNKtct+b1JJbbRVJJhh/t6pQWN3M= github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 h1:QJiXTG9CmaQAuMRn5JGi+Jhji7fSkehVnKpjc8oNJJY= @@ -1456,10 +1456,10 @@ github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c423b3/go.mod h1:TcOliTQU6r59DwG4lo3U+mFM9WWyBHGuFkkxQpvSujo= github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997 h1:W0HKHO8eE8BckTRnhSdqjHKbJcnk068nEWYnWRu6tJY= github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997/go.mod h1:GTpDgyK0OObf7jpch6p8N281KxN92wbB8serZhU9yRc= -github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c h1:2ZdBZCZWKUMOWLtReaBBHkmDtXc0WtwcqIROHAcm3j4= -github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c/go.mod h1:sUsEwLtVPBlz0wPcysaolS+HVj9cOAt4jYhwE6J8dXg= -github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260421131224-c46cbfe7bc6c h1:Hn/80PyYFrQhRlNSaq9HY4cjc/7AuP9zyWLle22t34A= -github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260421131224-c46cbfe7bc6c/go.mod h1:C5pZsbYX3qkhZTYWr1aYJi9QMfonFAun+Jl1npQ7UJA= +github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863 h1:mIvTzvbEjmotW8qsMH19g7DcZ7J6ghQbZoAIyDdOdBs= +github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863/go.mod h1:9lV2AZ+ylPlyB16gct6MXR4taaLh2tljljSDpPI4HkE= +github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260217175957-8f1af02c5075 h1:PcR7Zdh+Z+Dh/S4lQ1xDbnFrb6He70KW9O5+9DtgloE= +github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260217175957-8f1af02c5075/go.mod h1:APCV5fIW/a+JGM+Cz9yb6XyGt8ht5hISEYfpG/k4Z+k= github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0 h1:nmuT5gKyTHpsHBEJMDM1C+v1d8jR/N8Xfg3KvqJUm8U= github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0/go.mod h1:YQDu2RcdoAzI5xlhtpbjvaQQZwkUt/Q+IhLbP25M614= github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20260409184948-5b16fae57fe0 h1:y8Gpr9G/3/+zoJtYu4cXmZPEx6plXD3P4Rwp/qFbtY8= diff --git a/deployment/keystone/changeset/solana/sequence/operation/operation.go b/deployment/keystone/changeset/solana/sequence/operation/operation.go index 454edf4402a..7385eeb0cdb 100644 --- a/deployment/keystone/changeset/solana/sequence/operation/operation.go +++ b/deployment/keystone/changeset/solana/sequence/operation/operation.go @@ -99,7 +99,7 @@ type ( func initForwarder(b operations.Bundle, deps Deps, in InitForwarderInput) (InitForwarderOutput, error) { var out InitForwarderOutput if ks_forwarder.ProgramID.IsZero() { - ks_forwarder.ProgramID = in.ProgramID + ks_forwarder.SetProgramID(in.ProgramID) } stateKey, err := solana.NewRandomPrivateKey() @@ -107,7 +107,7 @@ func initForwarder(b operations.Bundle, deps Deps, in InitForwarderInput) (InitF return out, fmt.Errorf("failed to create random keys: %w", err) } - instruction, err := ks_forwarder.NewInitializeInstruction(stateKey.PublicKey(), deps.Chain.DeployerKey.PublicKey(), solana.SystemProgramID) + instruction, err := ks_forwarder.NewInitializeInstruction(stateKey.PublicKey(), deps.Chain.DeployerKey.PublicKey(), solana.SystemProgramID).ValidateAndBuild() if err != nil { return out, fmt.Errorf("failed to build and validate initialize instruction %w", err) } @@ -179,9 +179,9 @@ func setUpgradeAuthority(b operations.Bundle, deps Deps, in SetUpgradeAuthorityI func configureForwarder(b operations.Bundle, deps Deps, in ConfigureForwarderInput) (ConfigureForwarderOutput, error) { var out ConfigureForwarderOutput - var instructions solana.Instruction + var instructions *ks_forwarder.Instruction if ks_forwarder.ProgramID.IsZero() { - ks_forwarder.ProgramID = in.ProgramID + ks_forwarder.SetProgramID(in.ProgramID) } configPDA := solana.MustPublicKeyFromBase58(in.ConfigPDA) @@ -210,7 +210,7 @@ func configureForwarder(b operations.Bundle, deps Deps, in ConfigureForwarderInp configPDA, owner, solana.SystemProgramID, - ) + ).ValidateAndBuild() if err != nil { return out, fmt.Errorf("cant build init oracle instruction: %w", err) } @@ -223,7 +223,7 @@ func configureForwarder(b operations.Bundle, deps Deps, in ConfigureForwarderInp in.ForwarderState, configPDA, owner, - ) + ).ValidateAndBuild() if err != nil { return out, fmt.Errorf("cant build init oracle instruction: %w", err) } diff --git a/devenv/fakes/go.mod b/devenv/fakes/go.mod index a45689612ac..392630845d3 100644 --- a/devenv/fakes/go.mod +++ b/devenv/fakes/go.mod @@ -13,9 +13,8 @@ require ( github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect github.com/Masterminds/semver/v3 v3.4.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/avast/retry-go/v4 v4.7.0 // indirect github.com/bits-and-blooms/bitset v1.24.0 // indirect - github.com/block-vision/sui-go-sdk v1.1.4 // indirect + github.com/block-vision/sui-go-sdk v1.1.2 // indirect github.com/bytedance/sonic v1.12.3 // indirect github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect @@ -26,7 +25,7 @@ require ( github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/errdefs/pkg v0.3.0 // indirect github.com/containerd/log v0.1.0 // indirect - github.com/containerd/platforms v1.0.0-rc.2 // indirect + github.com/containerd/platforms v1.0.0-rc.1 // indirect github.com/cpuguy83/dockercfg v0.3.2 // indirect github.com/creack/pty v1.1.24 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect @@ -36,33 +35,31 @@ require ( github.com/docker/docker v28.5.2+incompatible // indirect github.com/docker/go-connections v0.6.0 // indirect github.com/docker/go-units v0.5.0 // indirect - github.com/ebitengine/purego v0.10.0 // indirect + github.com/ebitengine/purego v0.9.0 // indirect github.com/ethereum/go-ethereum v1.17.1 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect - github.com/fxamacker/cbor/v2 v2.9.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.13 // indirect + github.com/gabriel-vasile/mimetype v1.4.10 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.30.1 // indirect - github.com/go-resty/resty/v2 v2.17.2 // indirect + github.com/go-playground/validator/v10 v10.28.0 // indirect + github.com/go-resty/resty/v2 v2.17.1 // indirect github.com/goccy/go-json v0.10.5 // indirect github.com/google/uuid v1.6.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.18.4 // indirect + github.com/klauspost/compress v1.18.2 // indirect github.com/klauspost/cpuid/v2 v2.2.10 // indirect github.com/leodido/go-urn v1.4.0 // indirect - github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 // indirect + github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3 // indirect github.com/magiconair/properties v1.8.10 // indirect - github.com/mailru/easyjson v0.9.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/moby/go-archive v0.2.0 // indirect + github.com/moby/go-archive v0.1.0 // indirect github.com/moby/patternmatcher v0.6.0 // indirect github.com/moby/sys/sequential v0.6.0 // indirect github.com/moby/sys/user v0.4.0 // indirect @@ -70,7 +67,7 @@ require ( github.com/moby/term v0.5.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/morikuni/aec v1.1.0 // indirect + github.com/morikuni/aec v1.0.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect @@ -78,18 +75,18 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect - github.com/shirou/gopsutil/v4 v4.26.2 // indirect - github.com/sirupsen/logrus v1.9.4 // indirect + github.com/shirou/gopsutil/v4 v4.25.9 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect github.com/smartcontractkit/chainlink-testing-framework/framework v0.15.16 // indirect github.com/stretchr/testify v1.11.1 // indirect - github.com/testcontainers/testcontainers-go v0.40.0 // indirect - github.com/tklauser/go-sysconf v0.3.16 // indirect - github.com/tklauser/numcpus v0.11.0 // indirect + github.com/testcontainers/testcontainers-go v0.39.0 // indirect + github.com/tklauser/go-sysconf v0.3.15 // indirect + github.com/tklauser/numcpus v0.10.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect go.opentelemetry.io/otel v1.43.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 // indirect go.opentelemetry.io/otel/metric v1.43.0 // indirect diff --git a/devenv/fakes/go.sum b/devenv/fakes/go.sum index 25d25e56d41..fe4984378ad 100644 --- a/devenv/fakes/go.sum +++ b/devenv/fakes/go.sum @@ -10,12 +10,12 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 h1:1zYrtlhrZ6/b6SAjLSfKzWtdgqK0U+HtH/VcBWh1BaU= github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6/go.mod h1:ioLG6R+5bUSO1oeGSDxOV3FADARuMoytZCSX6MEMQkI= -github.com/avast/retry-go/v4 v4.7.0 h1:yjDs35SlGvKwRNSykujfjdMxMhMQQM0TnIjJaHB+Zio= -github.com/avast/retry-go/v4 v4.7.0/go.mod h1:ZMPDa3sY2bKgpLtap9JRUgk2yTAba7cgiFhqxY2Sg6Q= +github.com/avast/retry-go/v4 v4.6.1 h1:VkOLRubHdisGrHnTu89g08aQEWEgRU7LVEop3GbIcMk= +github.com/avast/retry-go/v4 v4.6.1/go.mod h1:V6oF8njAwxJ5gRo1Q7Cxab24xs5NCWZBeaHHBklR8mA= github.com/bits-and-blooms/bitset v1.24.0 h1:H4x4TuulnokZKvHLfzVRTHJfFfnHEeSYJizujEZvmAM= github.com/bits-and-blooms/bitset v1.24.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/block-vision/sui-go-sdk v1.1.4 h1:1PPgYxQjo1P9UCgFOPTvDCuGEglRL32NwjKPulR4FQk= -github.com/block-vision/sui-go-sdk v1.1.4/go.mod h1:t8mWASwfyv+EyqHGO9ZrcDiCJWGOFEXqq50TMJ8GQco= +github.com/block-vision/sui-go-sdk v1.1.2 h1:p9DPfb51mEcTmF0Lx9ORpH+Nh9Rzg4Sv3Pu5gsJZ2AA= +github.com/block-vision/sui-go-sdk v1.1.2/go.mod h1:KlibJnwEpWt8qhQkIPxc/2ZE4kwh0Md6LvMHmW5kemA= github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= @@ -39,8 +39,8 @@ github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151X github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= -github.com/containerd/platforms v1.0.0-rc.2 h1:0SPgaNZPVWGEi4grZdV8VRYQn78y+nm6acgLGv/QzE4= -github.com/containerd/platforms v1.0.0-rc.2/go.mod h1:J71L7B+aiM5SdIEqmd9wp6THLVRzJGXfNuWCZCllLA4= +github.com/containerd/platforms v1.0.0-rc.1 h1:83KIq4yy1erSRgOVHNk1HYdPvzdJ5CnsWaRoJX4C41E= +github.com/containerd/platforms v1.0.0-rc.1/go.mod h1:J71L7B+aiM5SdIEqmd9wp6THLVRzJGXfNuWCZCllLA4= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA= github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= @@ -64,8 +64,8 @@ github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pM github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/ebitengine/purego v0.10.0 h1:QIw4xfpWT6GWTzaW5XEKy3HXoqrJGx1ijYHzTF0/ISU= -github.com/ebitengine/purego v0.10.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/ebitengine/purego v0.9.0 h1:mh0zpKBIXDceC63hpvPuGLiJ8ZAa3DfrFTudmfi8A4k= +github.com/ebitengine/purego v0.9.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/ethereum/c-kzg-4844 v1.0.0 h1:0X1LBXxaEtYD9xsyj9B9ctQEZIpnvVDeoBx8aHEwTNA= @@ -77,10 +77,10 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= -github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= -github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= -github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= -github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= +github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0= +github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.10.1 h1:T0ujvqyCSqRopADpgPgiTT63DUQVSfojyME59Ei63pQ= @@ -105,10 +105,10 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.30.1 h1:f3zDSN/zOma+w6+1Wswgd9fLkdwy06ntQJp0BBvFG0w= -github.com/go-playground/validator/v10 v10.30.1/go.mod h1:oSuBIQzuJxL//3MelwSLD5hc2Tu889bF0Idm9Dg26cM= -github.com/go-resty/resty/v2 v2.17.2 h1:FQW5oHYcIlkCNrMD2lloGScxcHJ0gkjshV3qcQAyHQk= -github.com/go-resty/resty/v2 v2.17.2/go.mod h1:kCKZ3wWmwJaNc7S29BRtUhJwy7iqmn+2mLtQrOyQlVA= +github.com/go-playground/validator/v10 v10.28.0 h1:Q7ibns33JjyW48gHkuFT91qX48KG0ktULL6FgHdG688= +github.com/go-playground/validator/v10 v10.28.0/go.mod h1:GoI6I1SjPBh9p7ykNE/yj3fFYbyDOpwMn5KXd+m2hUU= +github.com/go-resty/resty/v2 v2.17.1 h1:x3aMpHK1YM9e4va/TMDRlusDDoZiQ+ViDu/WpA6xTM4= +github.com/go-resty/resty/v2 v2.17.1/go.mod h1:kCKZ3wWmwJaNc7S29BRtUhJwy7iqmn+2mLtQrOyQlVA= github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -137,8 +137,8 @@ github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8Hm github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= -github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk= +github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= @@ -149,12 +149,12 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= -github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 h1:PTw+yKnXcOFCR6+8hHTyWBeQ/P4Nb7dd4/0ohEcWQuM= -github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= +github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3 h1:PwQumkgq4/acIiZhtifTV5OUqqiP82UAl0h87xj/l9k= +github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= -github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= @@ -164,8 +164,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/go-archive v0.2.0 h1:zg5QDUM2mi0JIM9fdQZWC7U8+2ZfixfTYoHL7rWUcP8= -github.com/moby/go-archive v0.2.0/go.mod h1:mNeivT14o8xU+5q1YnNrkQVpK+dnNe/K6fHqnTg4qPU= +github.com/moby/go-archive v0.1.0 h1:Kk/5rdW/g+H8NHdJW2gsXyZ7UnzvJNOy6VKJqueWdcQ= +github.com/moby/go-archive v0.1.0/go.mod h1:G9B+YoujNohJmrIYFBpSd54GTUB4lt9S+xVQvsJyFuo= github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU= @@ -185,8 +185,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/morikuni/aec v1.1.0 h1:vBBl0pUnvi/Je71dsRrhMBtreIqNMYErSAbEeb8jrXQ= -github.com/morikuni/aec v1.1.0/go.mod h1:xDRgiq/iw5l+zkao76YTKzKttOp2cwPEne25HDkJnBw= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= @@ -211,10 +211,10 @@ github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/gopsutil/v4 v4.26.2 h1:X8i6sicvUFih4BmYIGT1m2wwgw2VG9YgrDTi7cIRGUI= -github.com/shirou/gopsutil/v4 v4.26.2/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUNMGBtDkJBaLQ= -github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= -github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= +github.com/shirou/gopsutil/v4 v4.25.9 h1:JImNpf6gCVhKgZhtaAHJ0serfFGtlfIlSC08eaKdTrU= +github.com/shirou/gopsutil/v4 v4.25.9/go.mod h1:gxIxoC+7nQRwUl/xNhutXlD8lq+jxTgpIkEf3rADHL8= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartcontractkit/chainlink-testing-framework/framework v0.15.16 h1:pzrAgF6QFMQLS/kukXenLN87PCa48SEMlE7QvJxTOHs= github.com/smartcontractkit/chainlink-testing-framework/framework v0.15.16/go.mod h1:BALK9cj8sk12e15UF6uDhifHgIApa+6N11TcQfInEro= github.com/smartcontractkit/chainlink-testing-framework/framework/components/fake v0.10.1-0.20250711120409-5078050f9db4 h1:6iIj+U1SA19xftdEJwubATHBoGm4yc8q+MwWz6rlBDc= @@ -235,18 +235,18 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/supranational/blst v0.3.16 h1:bTDadT+3fK497EvLdWRQEjiGnUtzJ7jjIUMF0jqwYhE= github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= -github.com/testcontainers/testcontainers-go v0.40.0 h1:pSdJYLOVgLE8YdUY2FHQ1Fxu+aMnb6JfVz1mxk7OeMU= -github.com/testcontainers/testcontainers-go v0.40.0/go.mod h1:FSXV5KQtX2HAMlm7U3APNyLkkap35zNLxukw9oBi/MY= +github.com/testcontainers/testcontainers-go v0.39.0 h1:uCUJ5tA+fcxbFAB0uP3pIK3EJ2IjjDUHFSZ1H1UxAts= +github.com/testcontainers/testcontainers-go v0.39.0/go.mod h1:qmHpkG7H5uPf/EvOORKvS6EuDkBUPE3zpVGaH9NL7f8= github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYICU0nA= -github.com/tklauser/go-sysconf v0.3.16/go.mod h1:/qNL9xxDhc7tx3HSRsLWNnuzbVfh3e7gh/BmM179nYI= -github.com/tklauser/numcpus v0.11.0 h1:nSTwhKH5e1dMNsCdVBukSZrURJRoHbSEQjdEbY+9RXw= -github.com/tklauser/numcpus v0.11.0/go.mod h1:z+LwcLq54uWZTX0u/bGobaV34u6V7KNlTZejzM6/3MQ= +github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4= +github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4= +github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso= +github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= @@ -257,8 +257,8 @@ github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 h1:7iP2uCb7sGddAr30RRS6xjKy7AZ2JtTOPA3oolgVSw8= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0/go.mod h1:c7hN3ddxs/z6q9xwvfLPk+UHlWRQyaeR1LdgfL/66l0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k= @@ -290,6 +290,7 @@ golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/devenv/go.mod b/devenv/go.mod index a12bd1bc268..9d242ae976b 100644 --- a/devenv/go.mod +++ b/devenv/go.mod @@ -4,7 +4,7 @@ go 1.26.2 require ( github.com/Masterminds/semver/v3 v3.4.0 - github.com/avast/retry-go/v4 v4.7.0 + github.com/avast/retry-go/v4 v4.6.1 github.com/c-bata/go-prompt v0.2.6 github.com/cockroachdb/errors v1.11.3 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc @@ -21,9 +21,9 @@ require ( github.com/rs/zerolog v1.34.0 github.com/scylladb/go-reflectx v1.0.1 github.com/shopspring/decimal v1.4.0 - github.com/smartcontractkit/chain-selectors v1.0.98 + github.com/smartcontractkit/chain-selectors v1.0.97 github.com/smartcontractkit/chainlink-automation v0.8.1 - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420210428-afd603dd8f5c + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260401185621-720567ef9343 github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260318010722-59d4165024f1 github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20251211123524-f0c4fe7cfc0a github.com/smartcontractkit/chainlink-protos/job-distributor v0.12.0 @@ -31,7 +31,7 @@ require ( github.com/smartcontractkit/chainlink-testing-framework/framework/components/fake v0.14.9 github.com/smartcontractkit/chainlink-testing-framework/seth v1.51.5 github.com/smartcontractkit/chainlink-testing-framework/wasp v1.51.2 - github.com/smartcontractkit/libocr v0.0.0-20260403184524-b6409238958d + github.com/smartcontractkit/libocr v0.0.0-20260304194147-a03701e2c02e github.com/spf13/cobra v1.9.1 github.com/stretchr/testify v1.11.1 github.com/umbracle/ethgo v0.1.3 @@ -82,7 +82,7 @@ require ( github.com/benbjohnson/clock v1.3.5 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.24.4 // indirect - github.com/block-vision/sui-go-sdk v1.1.4 // indirect + github.com/block-vision/sui-go-sdk v1.1.2 // indirect github.com/btcsuite/btcd v0.24.2 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/btcsuite/btcd/btcutil v1.1.6 // indirect @@ -109,7 +109,7 @@ require ( github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/errdefs/pkg v0.3.0 // indirect github.com/containerd/log v0.1.0 // indirect - github.com/containerd/platforms v1.0.0-rc.2 // indirect + github.com/containerd/platforms v1.0.0-rc.1 // indirect github.com/coreos/go-semver v0.3.1 // indirect github.com/coreos/go-systemd/v22 v22.6.0 // indirect github.com/cpuguy83/dockercfg v0.3.2 // indirect @@ -136,7 +136,7 @@ require ( github.com/ferranbt/fastssz v0.1.4 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/fxamacker/cbor/v2 v2.9.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.13 // indirect + github.com/gabriel-vasile/mimetype v1.4.12 // indirect github.com/getsentry/sentry-go v0.27.0 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/gin-gonic/gin v1.10.1 // indirect @@ -168,7 +168,7 @@ require ( github.com/go-openapi/validate v0.25.2 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.30.1 // indirect + github.com/go-playground/validator/v10 v10.28.0 // indirect github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/goccy/go-json v0.10.5 // indirect @@ -195,7 +195,7 @@ require ( github.com/grafana/loki/pkg/push v0.0.0-20250630054201-94c0ba7b0952 // indirect github.com/grafana/loki/v3 v3.7.1 // indirect github.com/grafana/otel-profiling-go v0.5.1 // indirect - github.com/grafana/pyroscope-go v1.2.8 // indirect + github.com/grafana/pyroscope-go v1.2.7 // indirect github.com/grafana/pyroscope-go/godeltaprof v0.1.9 // indirect github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect @@ -238,7 +238,7 @@ require ( github.com/kr/text v0.2.0 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect - github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 // indirect + github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3 // indirect github.com/magiconair/properties v1.8.10 // indirect github.com/mailru/easyjson v0.9.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect @@ -255,7 +255,7 @@ require ( github.com/mitchellh/pointerstructure v1.2.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/moby/go-archive v0.2.0 // indirect + github.com/moby/go-archive v0.1.0 // indirect github.com/moby/patternmatcher v0.6.0 // indirect github.com/moby/spdystream v0.5.1 // indirect github.com/moby/sys/sequential v0.6.0 // indirect @@ -321,11 +321,11 @@ require ( github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 // indirect github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20260317132927-e8bc2c7b01f1 // indirect github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20251210101658-1c5c8e4c4f15 // indirect - github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20260326180413-c69f27e37a13 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20251021173435-e86785845942 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260326111235-8c09d1a4491f // indirect github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b // indirect github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.50.0 // indirect - github.com/smartcontractkit/freeport v0.1.3-0.20250828155247-add56fa28aad // indirect + github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e // indirect github.com/sony/gobreaker/v2 v2.4.0 // indirect github.com/spf13/cast v1.10.0 // indirect github.com/spf13/pflag v1.0.10 // indirect @@ -333,7 +333,7 @@ require ( github.com/stretchr/objx v0.5.2 // indirect github.com/supranational/blst v0.3.16 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/testcontainers/testcontainers-go v0.40.0 // indirect + github.com/testcontainers/testcontainers-go v0.39.0 // indirect github.com/tidwall/gjson v1.18.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect diff --git a/devenv/go.sum b/devenv/go.sum index 2c596e492fd..94675badbbc 100644 --- a/devenv/go.sum +++ b/devenv/go.sum @@ -81,8 +81,8 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/avast/retry-go v3.0.0+incompatible h1:4SOWQ7Qs+oroOTQOYnAHqelpCO0biHSxpiH9JdtuBj0= github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY= -github.com/avast/retry-go/v4 v4.7.0 h1:yjDs35SlGvKwRNSykujfjdMxMhMQQM0TnIjJaHB+Zio= -github.com/avast/retry-go/v4 v4.7.0/go.mod h1:ZMPDa3sY2bKgpLtap9JRUgk2yTAba7cgiFhqxY2Sg6Q= +github.com/avast/retry-go/v4 v4.6.1 h1:VkOLRubHdisGrHnTu89g08aQEWEgRU7LVEop3GbIcMk= +github.com/avast/retry-go/v4 v4.6.1/go.mod h1:V6oF8njAwxJ5gRo1Q7Cxab24xs5NCWZBeaHHBklR8mA= github.com/awalterschulze/gographviz v2.0.3+incompatible h1:9sVEXJBJLwGX7EQVhLm2elIKCm7P2YHFC8v6096G09E= github.com/awalterschulze/gographviz v2.0.3+incompatible/go.mod h1:GEV5wmg4YquNw7v1kkyoX9etIk8yVmXj+AkDHuuETHs= github.com/aws/aws-sdk-go-v2 v1.41.4 h1:10f50G7WyU02T56ox1wWXq+zTX9I1zxG46HYuG1hH/k= @@ -143,8 +143,8 @@ github.com/bitly/go-simplejson v0.5.1 h1:xgwPbetQScXt1gh9BmoJ6j9JMr3TElvuIyjR8pg github.com/bitly/go-simplejson v0.5.1/go.mod h1:YOPVLzCfwK14b4Sff3oP1AmGhI9T9Vsg84etUnlyp+Q= github.com/bits-and-blooms/bitset v1.24.4 h1:95H15Og1clikBrKr/DuzMXkQzECs1M6hhoGXLwLQOZE= github.com/bits-and-blooms/bitset v1.24.4/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/block-vision/sui-go-sdk v1.1.4 h1:1PPgYxQjo1P9UCgFOPTvDCuGEglRL32NwjKPulR4FQk= -github.com/block-vision/sui-go-sdk v1.1.4/go.mod h1:t8mWASwfyv+EyqHGO9ZrcDiCJWGOFEXqq50TMJ8GQco= +github.com/block-vision/sui-go-sdk v1.1.2 h1:p9DPfb51mEcTmF0Lx9ORpH+Nh9Rzg4Sv3Pu5gsJZ2AA= +github.com/block-vision/sui-go-sdk v1.1.2/go.mod h1:KlibJnwEpWt8qhQkIPxc/2ZE4kwh0Md6LvMHmW5kemA= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= @@ -242,8 +242,8 @@ github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151X github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= -github.com/containerd/platforms v1.0.0-rc.2 h1:0SPgaNZPVWGEi4grZdV8VRYQn78y+nm6acgLGv/QzE4= -github.com/containerd/platforms v1.0.0-rc.2/go.mod h1:J71L7B+aiM5SdIEqmd9wp6THLVRzJGXfNuWCZCllLA4= +github.com/containerd/platforms v1.0.0-rc.1 h1:83KIq4yy1erSRgOVHNk1HYdPvzdJ5CnsWaRoJX4C41E= +github.com/containerd/platforms v1.0.0-rc.1/go.mod h1:J71L7B+aiM5SdIEqmd9wp6THLVRzJGXfNuWCZCllLA4= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= @@ -335,8 +335,8 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= -github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= -github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= +github.com/gabriel-vasile/mimetype v1.4.12 h1:e9hWvmLYvtp846tLHam2o++qitpguFiYCKbn0w9jyqw= +github.com/gabriel-vasile/mimetype v1.4.12/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= @@ -424,8 +424,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.30.1 h1:f3zDSN/zOma+w6+1Wswgd9fLkdwy06ntQJp0BBvFG0w= -github.com/go-playground/validator/v10 v10.30.1/go.mod h1:oSuBIQzuJxL//3MelwSLD5hc2Tu889bF0Idm9Dg26cM= +github.com/go-playground/validator/v10 v10.28.0 h1:Q7ibns33JjyW48gHkuFT91qX48KG0ktULL6FgHdG688= +github.com/go-playground/validator/v10 v10.28.0/go.mod h1:GoI6I1SjPBh9p7ykNE/yj3fFYbyDOpwMn5KXd+m2hUU= github.com/go-resty/resty/v2 v2.17.2 h1:FQW5oHYcIlkCNrMD2lloGScxcHJ0gkjshV3qcQAyHQk= github.com/go-resty/resty/v2 v2.17.2/go.mod h1:kCKZ3wWmwJaNc7S29BRtUhJwy7iqmn+2mLtQrOyQlVA= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= @@ -533,8 +533,8 @@ github.com/grafana/memberlist v0.3.1-0.20260410131411-8c2f3bdae9db h1:3PCT+MeCID github.com/grafana/memberlist v0.3.1-0.20260410131411-8c2f3bdae9db/go.mod h1:h60o12SZn/ua/j0B6iKAZezA4eDaGsIuPO70eOaJ6WE= github.com/grafana/otel-profiling-go v0.5.1 h1:stVPKAFZSa7eGiqbYuG25VcqYksR6iWvF3YH66t4qL8= github.com/grafana/otel-profiling-go v0.5.1/go.mod h1:ftN/t5A/4gQI19/8MoWurBEtC6gFw8Dns1sJZ9W4Tls= -github.com/grafana/pyroscope-go v1.2.8 h1:UvCwIhlx9DeV7F6TW/z8q1Mi4PIm3vuUJ2ZlCEvmA4M= -github.com/grafana/pyroscope-go v1.2.8/go.mod h1:SSi59eQ1/zmKoY/BKwa5rSFsJaq+242Bcrr4wPix1g8= +github.com/grafana/pyroscope-go v1.2.7 h1:VWBBlqxjyR0Cwk2W6UrE8CdcdD80GOFNutj0Kb1T8ac= +github.com/grafana/pyroscope-go v1.2.7/go.mod h1:o/bpSLiJYYP6HQtvcoVKiE9s5RiNgjYTj1DhiddP2Pc= github.com/grafana/pyroscope-go/godeltaprof v0.1.9 h1:c1Us8i6eSmkW+Ez05d3co8kasnuOY813tbMN8i/a3Og= github.com/grafana/pyroscope-go/godeltaprof v0.1.9/go.mod h1:2+l7K7twW49Ct4wFluZD3tZ6e0SjanjcUUBPVD/UuGU= github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853 h1:cLN4IBkmkYZNnk7EAJ0BHIethd+J6LqxFNw5mSiI2bM= @@ -733,8 +733,8 @@ github.com/lib/pq v1.11.1 h1:wuChtj2hfsGmmx3nf1m7xC2XpK6OtelS2shMY+bGMtI= github.com/lib/pq v1.11.1/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= github.com/linode/linodego v1.66.0 h1:rK8QJFaV53LWOEJvb/evhTg/dP5ElvtuZmx4iv4RJds= github.com/linode/linodego v1.66.0/go.mod h1:12ykGs9qsvxE+OU3SXuW2w+DTruWF35FPlXC7gGk2tU= -github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 h1:PTw+yKnXcOFCR6+8hHTyWBeQ/P4Nb7dd4/0ohEcWQuM= -github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= +github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3 h1:PwQumkgq4/acIiZhtifTV5OUqqiP82UAl0h87xj/l9k= +github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= @@ -793,8 +793,8 @@ github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zx github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/go-archive v0.2.0 h1:zg5QDUM2mi0JIM9fdQZWC7U8+2ZfixfTYoHL7rWUcP8= -github.com/moby/go-archive v0.2.0/go.mod h1:mNeivT14o8xU+5q1YnNrkQVpK+dnNe/K6fHqnTg4qPU= +github.com/moby/go-archive v0.1.0 h1:Kk/5rdW/g+H8NHdJW2gsXyZ7UnzvJNOy6VKJqueWdcQ= +github.com/moby/go-archive v0.1.0/go.mod h1:G9B+YoujNohJmrIYFBpSd54GTUB4lt9S+xVQvsJyFuo= github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= github.com/moby/spdystream v0.5.1 h1:9sNYeYZUcci9R6/w7KDaFWEWeV4LStVG78Mpyq/Zm/Y= @@ -1016,12 +1016,12 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= -github.com/smartcontractkit/chain-selectors v1.0.98 h1:fuI7CQ1o5cX64eO4/LvwtfhdpGFH5vnsM/bFHRwEiww= -github.com/smartcontractkit/chain-selectors v1.0.98/go.mod h1:qy7whtgG5g+7z0jt0nRyii9bLND9m15NZTzuQPkMZ5w= +github.com/smartcontractkit/chain-selectors v1.0.97 h1:ECOin+SkJv2MUrfqTUu28J0kub04Epds5NPMHERfGjo= +github.com/smartcontractkit/chain-selectors v1.0.97/go.mod h1:qy7whtgG5g+7z0jt0nRyii9bLND9m15NZTzuQPkMZ5w= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420210428-afd603dd8f5c h1:iEEZ+pi1z1ii4iTWBymkZ4W0ba2yxoiba8+ejgVZ1t8= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420210428-afd603dd8f5c/go.mod h1:Ukc8qY13EcRcSQv6ZBmTKl0YE6F8uE5lj4zsX5aXvXM= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260401185621-720567ef9343 h1:hB/4b6UVS4gO4U+DB8ngBAluyV4soIgtEJp5q5gbMpA= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260401185621-720567ef9343/go.mod h1:6tlxlsiWypGdpaZI+Kz5gFm53gCAcU/pTU3PR9CiFB8= 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= @@ -1034,10 +1034,10 @@ github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20260317132927-e8b github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20260317132927-e8bc2c7b01f1/go.mod h1:kGprqyjsz6qFNVszOQoHc24wfvCjyipNZFste/3zcbs= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20251210101658-1c5c8e4c4f15 h1:IXF7+k8I1YY/yvXC1wnS3FAAggtCy6ByEQ9hv/F2FvQ= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20251210101658-1c5c8e4c4f15/go.mod h1:HG/aei0MgBOpsyRLexdKGtOUO8yjSJO3iUu0Uu8KBm4= -github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20260326180413-c69f27e37a13 h1:3KLLkTCIAy9CvT35Ey0k6pcWX/u+qsm3Y/58TI5VSAg= -github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20260326180413-c69f27e37a13/go.mod h1:Y7h84PqCe/Vimf2h1Nc6tMiOJStDbtM33fEUeaaF5xk= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20251021173435-e86785845942 h1:T/eCDsUI8EJT4n5zSP4w1mz4RHH+ap8qieA17QYfBhk= +github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20251021173435-e86785845942/go.mod h1:2JTBNp3FlRdO/nHc4dsc9bfxxMClMO1Qt8sLJgtreBY= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260326111235-8c09d1a4491f h1:8p3vE987AHM3Of1JvnNJXNE/AtWtfNvJhk3TeeAG3Qw= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260326111235-8c09d1a4491f/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/chainlink-protos/job-distributor v0.12.0 h1:/bhoALRzNXZkdzxBkNM505pMofNy0K0eW1nCzXw+AUI= github.com/smartcontractkit/chainlink-protos/job-distributor v0.12.0/go.mod h1:/dVVLXrsp+V0AbcYGJo3XMzKg3CkELsweA/TTopCsKE= github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b h1:QuI6SmQFK/zyUlVWEf0GMkiUYBPY4lssn26nKSd/bOM= @@ -1052,10 +1052,10 @@ github.com/smartcontractkit/chainlink-testing-framework/seth v1.51.5 h1:RwZXxdIA github.com/smartcontractkit/chainlink-testing-framework/seth v1.51.5/go.mod h1:kHYJnZUqiPF7/xN5273prV+srrLJkS77GbBXHLKQpx0= github.com/smartcontractkit/chainlink-testing-framework/wasp v1.51.2 h1:QFO9Ar1zY9SHj//7LXWq5caVrfyTFrkRcfkMQeSOAaQ= github.com/smartcontractkit/chainlink-testing-framework/wasp v1.51.2/go.mod h1:OLczwaAvyObFG+eq4tQHkWqkbPBB0cHkZj0JzY3inik= -github.com/smartcontractkit/freeport v0.1.3-0.20250828155247-add56fa28aad h1:lgHxTHuzJIF3Vj6LSMOnjhqKgRqYW+0MV2SExtCYL1Q= -github.com/smartcontractkit/freeport v0.1.3-0.20250828155247-add56fa28aad/go.mod h1:T4zH9R8R8lVWKfU7tUvYz2o2jMv1OpGCdpY2j2QZXzU= -github.com/smartcontractkit/libocr v0.0.0-20260403184524-b6409238958d h1:PvXor5Fjer7FIONSqYXbpd1LkA14hWrlAyxXzOrC9t8= -github.com/smartcontractkit/libocr v0.0.0-20260403184524-b6409238958d/go.mod h1:PLdNK6GlqfxIWXzziPkU7dCAVlVFeYkyyW7AQY0R+4Q= +github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e h1:Hv9Mww35LrufCdM9wtS9yVi/rEWGI1UnjHbcKKU0nVY= +github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e/go.mod h1:T4zH9R8R8lVWKfU7tUvYz2o2jMv1OpGCdpY2j2QZXzU= +github.com/smartcontractkit/libocr v0.0.0-20260304194147-a03701e2c02e h1:poXTj5cFVM6XfC4HICIDYkDVc/A6OYB0eeID0wU2JQE= +github.com/smartcontractkit/libocr v0.0.0-20260304194147-a03701e2c02e/go.mod h1:PLdNK6GlqfxIWXzziPkU7dCAVlVFeYkyyW7AQY0R+4Q= github.com/sony/gobreaker/v2 v2.4.0 h1:g2KJRW1Ubty3+ZOcSEUN7K+REQJdN6yo6XvaML+jptg= github.com/sony/gobreaker/v2 v2.4.0/go.mod h1:pTyFJgcZ3h2tdQVLZZruK2C0eoFL1fb/G83wK1ZQl+s= github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= @@ -1095,8 +1095,8 @@ github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3 github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= -github.com/testcontainers/testcontainers-go v0.40.0 h1:pSdJYLOVgLE8YdUY2FHQ1Fxu+aMnb6JfVz1mxk7OeMU= -github.com/testcontainers/testcontainers-go v0.40.0/go.mod h1:FSXV5KQtX2HAMlm7U3APNyLkkap35zNLxukw9oBi/MY= +github.com/testcontainers/testcontainers-go v0.39.0 h1:uCUJ5tA+fcxbFAB0uP3pIK3EJ2IjjDUHFSZ1H1UxAts= +github.com/testcontainers/testcontainers-go v0.39.0/go.mod h1:qmHpkG7H5uPf/EvOORKvS6EuDkBUPE3zpVGaH9NL7f8= github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= diff --git a/devenv/tests/automation/load_test.go b/devenv/tests/automation/load_test.go index 20dff13fe60..787cb285ba9 100644 --- a/devenv/tests/automation/load_test.go +++ b/devenv/tests/automation/load_test.go @@ -77,6 +77,7 @@ func TestLoad(t *testing.T) { }, }, ) + t.Error("failed to scan Docker container logs:", scanErr) if t.Failed() { saveErr := framework.StreamCTFContainerLogsFanout( diff --git a/devenv/tests/logpoller/logpoller_test.go b/devenv/tests/logpoller/logpoller_test.go index e9617ae46a3..b868d21ac7d 100644 --- a/devenv/tests/logpoller/logpoller_test.go +++ b/devenv/tests/logpoller/logpoller_test.go @@ -27,13 +27,6 @@ import ( "github.com/smartcontractkit/chainlink/devenv/products/automation" ) -var ignoredSlowQueryLog = products.NewAllowedLogMessage( - "SLOW SQL QUERY", - "It is expected, because we are pausing the Postgres container", - zapcore.DPanicLevel, - products.WarnAboutAllowedMsgs_No, -) - // consistency test with no network disruptions with approximate emission of 1500-1600 logs per second for ~110-120 seconds // 6 filters are registered @@ -52,7 +45,7 @@ func TestLogPoller(t *testing.T) { MaxEmitWaitTimeMs: 600, }, } - executePollerTest(t, cfg, ignoredSlowQueryLog) + executePollerTest(t, cfg) } // consistency test that registers filters after events were emitted and then triggers replay via API @@ -76,7 +69,7 @@ func TestLogPollerReplay(t *testing.T) { MaxEmitWaitTimeMs: 600, }, } - executeLogPollerReplay(t, cfg, "5m", ignoredSlowQueryLog) + executeLogPollerReplay(t, cfg, "5m") } // TODO: adjust these values to what we are/can really run, they seem to be outdated @@ -100,7 +93,7 @@ func XTestLogPollerHeavyLoad(t *testing.T) { }, } - executePollerTest(t, cfg, ignoredSlowQueryLog) + executePollerTest(t, cfg) } // consistency test that introduces random disruptions by pausing Chainlink containers for random interval of 5-20 seconds @@ -127,7 +120,7 @@ func TestLogPollerChaosChainlinkNodes(t *testing.T) { }, } - executePollerTest(t, cfg, ignoredSlowQueryLog) + executePollerTest(t, cfg) } // consistency test that introduces random disruptions by pausing Postgres container for random interval of 5-20 seconds @@ -154,7 +147,12 @@ func TestLogPollerChaosPostgres(t *testing.T) { }, } - executePollerTest(t, cfg, ignoredSlowQueryLog) + executePollerTest(t, cfg, products.NewAllowedLogMessage( + "SLOW SQL QUERY", + "It is expected, because we are pausing the Postgres container", + zapcore.DPanicLevel, + products.WarnAboutAllowedMsgs_No, + )) } func executePollerTest(t *testing.T, cfg *Config, allowedLogMessages ...products.AllowedLogMessage) { @@ -313,7 +311,7 @@ func executePollerTest(t *testing.T, cfg *Config, allowedLogMessages ...products waitUntilNodesHaveTheSameLogsAsEvm(l, nil, t, allNodesLogCountMatches, lpTestEnv, cfg, startBlock, endBlock, "5m") } -func executeLogPollerReplay(t *testing.T, cfg *Config, consistencyTimeout string, allowedLogMessages ...products.AllowedLogMessage) { +func executeLogPollerReplay(t *testing.T, cfg *Config, consistencyTimeout string) { outputFile := "../../env-out.toml" in, err := de.LoadOutput[de.Cfg](outputFile) require.NoError(t, err) @@ -328,7 +326,7 @@ func executeLogPollerReplay(t *testing.T, cfg *Config, consistencyTimeout string l := framework.L ctx := t.Context() t.Cleanup(func() { - cleanupErr := products.CleanupContainerLogs(products.DefaultSettings(allowedLogMessages...)) + cleanupErr := products.CleanupContainerLogs(products.DefaultSettings()) require.NoError(t, cleanupErr, "failed to process cleanup container logs") }) diff --git a/devenv/tests/ocr2/soak_test.go b/devenv/tests/ocr2/soak_test.go index 0f0789d8d09..defa50edd4a 100644 --- a/devenv/tests/ocr2/soak_test.go +++ b/devenv/tests/ocr2/soak_test.go @@ -44,6 +44,7 @@ func TestOCR2Soak(t *testing.T) { }, }, ) + t.Error("failed to scan Docker container logs:", scanErr) if t.Failed() { saveErr := framework.StreamCTFContainerLogsFanout( diff --git a/docs/local-cre/agent-skills/local-cre-e2e/AGENTS.md b/docs/local-cre/agent-skills/local-cre-e2e/AGENTS.md deleted file mode 100644 index 3e087b45bff..00000000000 --- a/docs/local-cre/agent-skills/local-cre-e2e/AGENTS.md +++ /dev/null @@ -1,22 +0,0 @@ -# Local CRE E2E Agent Notes - -This directory holds a reusable agent skill for running Local CRE and CRE e2e tests. - -## Scope - -These instructions apply only to files under `docs/local-cre/agent-skills/local-cre-e2e/`. - -## Intent - -- Keep the skill practical and workflow-oriented. -- Favor commands that work from a clean checkout. -- Prefer the default topology unless the user explicitly needs a different topology or a custom override. -- Keep topology customization guidance minimal and repo-specific. - -## When Updating The Skill - -- Keep the skill aligned with: - - `docs/local-cre/` - - `core/scripts/cre/environment/configs/` -- If test commands or topology selection rules change, update this skill in the same PR when possible. -- Do not add generic AI-agent boilerplate; keep it specific to Local CRE usage in this repo. diff --git a/docs/local-cre/agent-skills/local-cre-e2e/SKILL.md b/docs/local-cre/agent-skills/local-cre-e2e/SKILL.md deleted file mode 100644 index ed58a2077d9..00000000000 --- a/docs/local-cre/agent-skills/local-cre-e2e/SKILL.md +++ /dev/null @@ -1,220 +0,0 @@ ---- -name: local-cre-e2e -description: Configure and run local CRE environments and CRE end-to-end tests in the chainlink repo. Use this when starting local CRE on the default topology, running smoke or regression CRE tests, or creating a custom topology to override flags, limits, capability config, or user config overrides. ---- - -# Local CRE E2E - -Use this skill when working in the `chainlink` repo and you need to: -- start, stop, or restart local CRE -- run CRE smoke or regression e2e tests on the default topology -- run a test against a specific topology -- create a custom topology to override limits, flags, capability config, or user config overrides - -This skill is for local CRE system-test workflows, not for generic unit tests. - -## Assumptions - -- Repo root is the `chainlink` checkout. -- Local CRE commands are run from `core/scripts/cre/environment`. -- CRE e2e test commands are run from `system-tests/tests`. -- Only one local CRE environment should be treated as active at a time unless the harness is explicitly known to support isolation. - -## Default Workflow - -Use the default topology when the user asks to run the standard local CRE suite or to verify a change without special flags. - -1. Stop any existing local CRE environment: - -```bash -cd core/scripts/cre/environment -go run . env stop -a -``` - -2. If the environment has not been prepared yet, set it up once: - -```bash -cd core/scripts/cre/environment -go run . env setup -``` - -3. Start local CRE on the default topology: - -```bash -cd core/scripts/cre/environment -go run . env start -``` - -4. Optionally bring up observability helpers: - -```bash -go run . obs up -``` - -Use `--with-beholder` on `env start` only when the test depends on the real Beholder stack or when you want Red Panda Console to debug workflow events. - -## Running E2E Tests On The Default Topology - -For the normal CRE smoke suite: - -```bash -cd system-tests/tests -go test ./smoke/cre -timeout 20m -run '^Test_CRE_' -``` - -For only the V2 smoke suite: - -```bash -cd system-tests/tests -go test ./smoke/cre -timeout 15m -run '^Test_CRE_V2' -``` - -For regression tests: - -```bash -cd system-tests/tests -go test ./regression/cre -timeout 20m -run '^Test_CRE_' -``` - -Rule of thumb: -- `smoke` is for happy-path and sanity coverage -- `regression` is for edge cases and negative cases - -## Running A Specific Test Or Bucket - -Use a narrow regex when debugging a single scenario or bucket: - -```bash -cd system-tests/tests -go test ./smoke/cre -timeout 20m -run '^Test_CRE_V2_Suite_Bucket_B$' -count=1 -v -``` - -Examples: - -```bash -cd system-tests/tests -go test ./smoke/cre -timeout 20m -run 'Test_CRE_V2_Suite_Bucket_B/.*/Vault' -count=1 -v -``` - -```bash -cd system-tests/tests -go test ./regression/cre -timeout 20m -run '^Test_CRE_V2_Consensus_Regression$' -count=1 -v -``` - -Prefer `-count=1` when re-running flaky or stateful CRE scenarios. - -## Using A Specific Topology - -Use a non-default topology when the test requires a specific DON layout, chain, or feature configuration. - -1. Stop the existing environment: - -```bash -cd core/scripts/cre/environment -go run . env stop -a -``` - -2. Start local CRE with `CTF_CONFIGS` pointing at the topology file: - -```bash -cd core/scripts/cre/environment -CTF_CONFIGS=./configs/workflow-gateway-capabilities-don.toml go run . env start -``` - -3. Run the target test: - -```bash -cd system-tests/tests -TOPOLOGY_NAME=workflow-gateway-capabilities \ -go test ./smoke/cre -timeout 20m -run '^Test_CRE_V2_Suite_Bucket_B$' -count=1 -v -``` - -`TOPOLOGY_NAME` is optional but useful because many CRE suite tests include it in subtest names. - -## Creating A Custom Topology - -Create a custom topology when the user wants to override: -- limits -- feature flags -- capability config -- DON composition -- additional sources -- `user_config_overrides` - -Workflow: - -1. Pick the closest existing topology from `core/scripts/cre/environment/configs/`. -2. Copy it to a new file in the same directory. -3. Change only the fields needed for the scenario. -4. Start local CRE with `CTF_CONFIGS=`. -5. Run only the relevant tests first. - -Example: - -```bash -cd core/scripts/cre/environment/configs -cp workflow-gateway-capabilities-don.toml workflow-gateway-capabilities-don-my-override.toml -``` - -Then start it: - -```bash -cd ../ -CTF_CONFIGS=./configs/workflow-gateway-capabilities-don-my-override.toml go run . env start -``` - -Then run the intended tests: - -```bash -cd ../../../system-tests/tests -TOPOLOGY_NAME=workflow-gateway-capabilities-my-override \ -go test ./smoke/cre -timeout 20m -run '^Test_CRE_V2_Suite_Bucket_B$' -count=1 -v -``` - -## Override Guidelines - -When making a custom topology: -- keep the diff small and purpose-specific -- prefer copying the nearest topology instead of building a new one from scratch -- use a descriptive filename that states what changed -- do not change unrelated images, chains, or capabilities unless the test needs it -- if the topology is only for a one-off local check, keep it local and avoid adding it to CI - -Typical override points: -- `nodesets.capability_configs` -- `nodesets.user_config_overrides` -- CRE feature flags -- additional mock or support-service endpoints - -## Restart And Cleanup - -When changing topology or low-level config, prefer a full stop/start instead of assuming the running environment will converge. - -Clean restart: - -```bash -cd core/scripts/cre/environment -go run . env stop -a -CTF_CONFIGS=./configs/.toml go run . env start -``` - -When done: - -```bash -cd core/scripts/cre/environment -go run . env stop -a -``` - -## Troubleshooting - -- If tests unexpectedly use the wrong topology, stop local CRE and restart with the intended `CTF_CONFIGS`. -- If the test suite appears to reuse stale state, rerun with `-count=1`. -- If a test depends on logs, traces, or dashboards, bring up `go run . obs up`. -- If a topology-specific failure looks unrelated to the test, first confirm the environment actually started with the intended topology. - -## References - -For longer repo-specific guidance, see: -- `docs/local-cre/index.md` -- `docs/local-cre/system-tests/index.md` -- `docs/local-cre/system-tests/running-tests.md` diff --git a/docs/local-cre/index.md b/docs/local-cre/index.md index e5f1593106b..f351f849d9c 100644 --- a/docs/local-cre/index.md +++ b/docs/local-cre/index.md @@ -16,7 +16,6 @@ Use this doc set when you need to: - deploy or debug workflows - run or extend CRE smoke tests - understand how the test helpers interact with a running Local CRE environment -- reuse repo-local agent guidance for Local CRE under `docs/local-cre/agent-skills/local-cre-e2e/` ## Start Here diff --git a/go.mod b/go.mod index 5126963c519..02bf604cff3 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,6 @@ require ( github.com/gin-contrib/sessions v0.0.5 github.com/gin-contrib/size v0.0.0-20230212012657-e14a14094dc4 github.com/gin-gonic/gin v1.10.1 - github.com/go-co-op/gocron/v2 v2.18.0 github.com/go-json-experiment/json v0.0.0-20250223041408-d3c622f1b874 github.com/go-ldap/ldap/v3 v3.4.6 github.com/go-viper/mapstructure/v2 v2.5.0 @@ -51,7 +50,8 @@ require ( github.com/hashicorp/go-retryablehttp v0.7.8 github.com/holiman/uint256 v1.3.2 github.com/imdario/mergo v0.3.16 - github.com/jackc/pgx/v5 v5.9.2 + github.com/jackc/pgconn v1.14.3 + github.com/jackc/pgx/v4 v4.18.3 github.com/jmoiron/sqlx v1.4.0 github.com/jonboulle/clockwork v0.5.0 github.com/jpillora/backoff v1.0.0 @@ -79,13 +79,13 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.98 github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65 github.com/smartcontractkit/chainlink-automation v0.8.1 - github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa + github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc 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.0-20260423133643-8d6a915c04b3 - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a - github.com/smartcontractkit/chainlink-common/keystore v1.1.0 + github.com/smartcontractkit/chainlink-ccv v0.0.0-20260408181529-b5080e662563 + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4 + github.com/smartcontractkit/chainlink-common/keystore v1.0.2 github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 github.com/smartcontractkit/chainlink-data-streams v0.1.13 github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03 @@ -103,7 +103,7 @@ require ( github.com/smartcontractkit/chainlink-protos/ring/go v0.0.0-20260331131315-f08a616d8dcd github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0 github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997 - github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c + github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863 github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0 github.com/smartcontractkit/chainlink-ton v0.0.0-20260415120434-cecc380f8d87 github.com/smartcontractkit/cre-sdk-go v1.5.0 @@ -297,13 +297,11 @@ require ( github.com/influxdata/tdigest v0.0.1 // indirect github.com/invopop/jsonschema v0.13.0 // indirect github.com/jackc/chunkreader/v2 v2.0.1 // indirect - github.com/jackc/pgconn v1.14.3 // indirect github.com/jackc/pgio v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgproto3/v2 v2.3.3 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgtype v1.14.4 // indirect - github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jinzhu/copier v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect @@ -360,7 +358,7 @@ require ( github.com/sethvargo/go-retry v0.3.0 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 // indirect - github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd // indirect + github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4 // indirect github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20260410144512-ca02ad6ed16a // indirect github.com/smartcontractkit/chainlink-protos/chainlink-ccv/committee-verifier v0.0.0-20251211142334-5c3421fe2c8d // indirect github.com/smartcontractkit/chainlink-protos/chainlink-ccv/heartbeat v0.0.0-20260115142640-f6b99095c12e // indirect diff --git a/go.sum b/go.sum index 4cdf1239c41..9ea16cd37ca 100644 --- a/go.sum +++ b/go.sum @@ -248,6 +248,7 @@ github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= @@ -471,8 +472,6 @@ github.com/gin-gonic/gin v1.10.1 h1:T0ujvqyCSqRopADpgPgiTT63DUQVSfojyME59Ei63pQ= github.com/gin-gonic/gin v1.10.1/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/go-asn1-ber/asn1-ber v1.5.5 h1:MNHlNMBDgEKD4TcKr36vQN68BA00aDfjIt3/bD50WnA= github.com/go-asn1-ber/asn1-ber v1.5.5/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= -github.com/go-co-op/gocron/v2 v2.18.0 h1:DS3Uhru66q1jy/5f9V0itmi3cLXcn2b7N+duGfgT7gU= -github.com/go-co-op/gocron/v2 v2.18.0/go.mod h1:Zii6he+Zfgy5W9B+JKk/KwejFOW0kZTFvHtwIpR4aBI= github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk= github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -824,14 +823,10 @@ github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgS github.com/jackc/pgx/v4 v4.18.2/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= github.com/jackc/pgx/v4 v4.18.3 h1:dE2/TrEsGX3RBprb3qryqSV9Y60iZN1C6i8IrmW9/BA= github.com/jackc/pgx/v4 v4.18.3/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= -github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= -github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= -github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -1232,22 +1227,22 @@ github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65 h github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65/go.mod h1:BbVsx2VcwSVWkd0C5TcAkQBnFaeYFnogJgUa9BUla18= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa h1:GE4B480m+/OMgkmZ9mEI1Abh927N7oW+Ruq9uuKIFQw= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa/go.mod h1:1XxxpkgCmG/z6y30yRuVrcxre6zixIVX3xzi706Db/8= -github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd h1:Jtw6p5iisjXZyFOcBvWh6PDQKtvryrRU2JMmezdutjo= -github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd/go.mod h1:zLqdD2kBX7NsntBneclb2yrHhjFaJdoyA8dK5eimlrE= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de h1:coysmw4zHm6TLOZawoe2h0hHh/25ft+hq9+9mRNkqTs= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de/go.mod h1:1XxxpkgCmG/z6y30yRuVrcxre6zixIVX3xzi706Db/8= +github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4 h1:b6IxxglkWivZ5nfYdYkHF4w0l2BJyEmSdyMYRm47aB4= +github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4/go.mod h1:zLqdD2kBX7NsntBneclb2yrHhjFaJdoyA8dK5eimlrE= github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc h1:dP1ERzdTbiJbHVXfHYdBAi1+8NjgkyQuY2oFNWWWDsQ= github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:7XR5wfgT8hjSsiV+t0EAWvna+rYQeMPaoZf/0g+dios= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc h1:mvobZx5JV5PhG/9IXPReV+8mAGnupl0HIWQZ43zxzd4= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:gzCVLUlNov/zFXSC7G6zcGkZU1IfNOHaakbAPDe5Woc= github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20260415165642-49f23e4d76cc h1:War93neyFmv7pzuElZeZC3qc/OfGtLvEXvqL3qeBfM0= 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.0-20260423133643-8d6a915c04b3 h1:NTvhSs8sh0ZYr3JUw8GvPZcLQaeh6t2nleKg7hfnOnQ= -github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3/go.mod h1:sJeU9at/+chXZfh7io5HzW6C3fgDxjpEB6U1dsS+BnE= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a h1:mUEbGLi++YLS6nd6oaFHZ9tAqw0t2ojLu1cZAjCoZmU= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a/go.mod h1:ohOxnxpzD382PS3nN4zhdJmWD+rsBh8zTLGGHhTdJCE= -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-ccv v0.0.0-20260408181529-b5080e662563 h1:1sYQ2lG3zbAG2vASNF5kLke8DhGk5lNaJirwPDx3Vi4= +github.com/smartcontractkit/chainlink-ccv v0.0.0-20260408181529-b5080e662563/go.mod h1:nEuyjUh4wrK6mNXEAaOncl/AhCl31oaxOS160gNW0vc= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4 h1:/b6wjxXU3XhXw8iEmK2FLXp+etK1oD5MK5BedfsFC7U= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4/go.mod h1:Ukc8qY13EcRcSQv6ZBmTKl0YE6F8uE5lj4zsX5aXvXM= +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/monitoring v0.0.0-20251215152504-b1e41f508340 h1:PsjEI+5jZIz9AS4eOsLS5VpSWJINf38clXV3wryPyMk= @@ -1298,8 +1293,8 @@ github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c423b3/go.mod h1:TcOliTQU6r59DwG4lo3U+mFM9WWyBHGuFkkxQpvSujo= github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997 h1:W0HKHO8eE8BckTRnhSdqjHKbJcnk068nEWYnWRu6tJY= github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997/go.mod h1:GTpDgyK0OObf7jpch6p8N281KxN92wbB8serZhU9yRc= -github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c h1:2ZdBZCZWKUMOWLtReaBBHkmDtXc0WtwcqIROHAcm3j4= -github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c/go.mod h1:sUsEwLtVPBlz0wPcysaolS+HVj9cOAt4jYhwE6J8dXg= +github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863 h1:mIvTzvbEjmotW8qsMH19g7DcZ7J6ghQbZoAIyDdOdBs= +github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863/go.mod h1:9lV2AZ+ylPlyB16gct6MXR4taaLh2tljljSDpPI4HkE= github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0 h1:nmuT5gKyTHpsHBEJMDM1C+v1d8jR/N8Xfg3KvqJUm8U= github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0/go.mod h1:YQDu2RcdoAzI5xlhtpbjvaQQZwkUt/Q+IhLbP25M614= github.com/smartcontractkit/chainlink-ton v0.0.0-20260415120434-cecc380f8d87 h1:NgA2+Q0wfHicP/QeY1hgULQ1ZBk1sgBpOJi3GpxfjE8= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 84872a6e700..1eb3c0cd321 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -25,13 +25,13 @@ require ( github.com/segmentio/ksuid v1.0.4 github.com/smartcontractkit/chain-selectors v1.0.98 github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65 - github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa + github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc 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-common v0.11.2-0.20260422075950-29f37fa83c8a - github.com/smartcontractkit/chainlink-common/keystore v1.1.0 - github.com/smartcontractkit/chainlink-deployments-framework v0.96.0 + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4 + github.com/smartcontractkit/chainlink-common/keystore v1.0.2 + github.com/smartcontractkit/chainlink-deployments-framework v0.95.0 github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03 github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20260119171452-39c98c3b33cd github.com/smartcontractkit/chainlink-protos/job-distributor v0.18.0 @@ -300,8 +300,7 @@ require ( github.com/jackc/pgproto3/v2 v2.3.3 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgtype v1.14.4 // indirect - github.com/jackc/pgx/v5 v5.9.2 // indirect - github.com/jackc/puddle/v2 v2.2.2 // indirect + github.com/jackc/pgx/v4 v4.18.3 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jinzhu/copier v0.4.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect @@ -402,9 +401,9 @@ require ( github.com/smartcontractkit/ccip-contract-examples/chains/evm v0.0.0-20260129135848-c86808ba5cb9 // indirect github.com/smartcontractkit/ccip-owner-contracts v0.1.0 // indirect 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-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4 // indirect github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc // indirect - github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3 // indirect + github.com/smartcontractkit/chainlink-ccv v0.0.0-20260408181529-b5080e662563 // indirect github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 // indirect github.com/smartcontractkit/chainlink-data-streams v0.1.13 // indirect github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 // indirect @@ -428,7 +427,7 @@ require ( github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0 // indirect github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c423b3 // indirect github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997 // indirect - github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c // indirect + github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863 // indirect github.com/smartcontractkit/chainlink-testing-framework/framework v0.15.16 // indirect github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20260408092456-3c6369888d4a // indirect github.com/smartcontractkit/freeport v0.1.3-0.20250828155247-add56fa28aad // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index ec95c625311..0f6f83bfb25 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -315,6 +315,7 @@ github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= @@ -919,11 +920,12 @@ github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgS github.com/jackc/pgx/v4 v4.18.2/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= github.com/jackc/pgx/v4 v4.18.3 h1:dE2/TrEsGX3RBprb3qryqSV9Y60iZN1C6i8IrmW9/BA= github.com/jackc/pgx/v4 v4.18.3/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= -github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= -github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= +github.com/jackc/pgx/v5 v5.7.5 h1:JHGfMnQY+IEtGM63d+NGMjoRpysB2JBwDr5fsngwmJs= +github.com/jackc/pgx/v5 v5.7.5/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M= github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.3.0 h1:eHK/5clGOatcjX3oWGBO/MpxpbHzSwud5EWTSCI+MX0= github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= @@ -1367,10 +1369,10 @@ github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65 h github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65/go.mod h1:BbVsx2VcwSVWkd0C5TcAkQBnFaeYFnogJgUa9BUla18= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa h1:GE4B480m+/OMgkmZ9mEI1Abh927N7oW+Ruq9uuKIFQw= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa/go.mod h1:1XxxpkgCmG/z6y30yRuVrcxre6zixIVX3xzi706Db/8= -github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd h1:Jtw6p5iisjXZyFOcBvWh6PDQKtvryrRU2JMmezdutjo= -github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd/go.mod h1:zLqdD2kBX7NsntBneclb2yrHhjFaJdoyA8dK5eimlrE= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de h1:coysmw4zHm6TLOZawoe2h0hHh/25ft+hq9+9mRNkqTs= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de/go.mod h1:1XxxpkgCmG/z6y30yRuVrcxre6zixIVX3xzi706Db/8= +github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4 h1:b6IxxglkWivZ5nfYdYkHF4w0l2BJyEmSdyMYRm47aB4= +github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4/go.mod h1:zLqdD2kBX7NsntBneclb2yrHhjFaJdoyA8dK5eimlrE= github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc h1:dP1ERzdTbiJbHVXfHYdBAi1+8NjgkyQuY2oFNWWWDsQ= github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:7XR5wfgT8hjSsiV+t0EAWvna+rYQeMPaoZf/0g+dios= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc h1:mvobZx5JV5PhG/9IXPReV+8mAGnupl0HIWQZ43zxzd4= @@ -1379,20 +1381,20 @@ 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-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc h1:entc0pB4VQEkhJf/ymOfnUh6zcu1sj1OU4YW3iPEW4s= github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:Ex2OUp35VJuCcRAjuBKwP+cevEPOSjy1pZXm3ncV4kQ= -github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3 h1:NTvhSs8sh0ZYr3JUw8GvPZcLQaeh6t2nleKg7hfnOnQ= -github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3/go.mod h1:sJeU9at/+chXZfh7io5HzW6C3fgDxjpEB6U1dsS+BnE= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a h1:mUEbGLi++YLS6nd6oaFHZ9tAqw0t2ojLu1cZAjCoZmU= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a/go.mod h1:ohOxnxpzD382PS3nN4zhdJmWD+rsBh8zTLGGHhTdJCE= -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-ccv v0.0.0-20260408181529-b5080e662563 h1:1sYQ2lG3zbAG2vASNF5kLke8DhGk5lNaJirwPDx3Vi4= +github.com/smartcontractkit/chainlink-ccv v0.0.0-20260408181529-b5080e662563/go.mod h1:nEuyjUh4wrK6mNXEAaOncl/AhCl31oaxOS160gNW0vc= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4 h1:/b6wjxXU3XhXw8iEmK2FLXp+etK1oD5MK5BedfsFC7U= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4/go.mod h1:Ukc8qY13EcRcSQv6ZBmTKl0YE6F8uE5lj4zsX5aXvXM= +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/monitoring v0.0.0-20251215152504-b1e41f508340 h1:PsjEI+5jZIz9AS4eOsLS5VpSWJINf38clXV3wryPyMk= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20251215152504-b1e41f508340/go.mod h1:P/0OSXUlFaxxD4B/P6HWbxYtIRmmWGDJAvanq19879c= github.com/smartcontractkit/chainlink-data-streams v0.1.13 h1:YOmt545DW6U0SyaqBf+NTGDLm1yMurVI7yOvxP5hlJk= github.com/smartcontractkit/chainlink-data-streams v0.1.13/go.mod h1:00aL7OK0BJdF9gn/4t4f/pctUu2VLwwfA8G/tl9rCrM= -github.com/smartcontractkit/chainlink-deployments-framework v0.96.0 h1:dwdKdXGDfzIwg1/PxQ3YxaeaFplyOtL+EPGtFPVGRmM= -github.com/smartcontractkit/chainlink-deployments-framework v0.96.0/go.mod h1:vjdYbQDNUd3IznXuxv5Gm7VZB804TKOqjNo1BhFOUDk= +github.com/smartcontractkit/chainlink-deployments-framework v0.95.0 h1:PHncc++Xk9OIP7JDiCvpqdMdP85YZWKQCpnRR7l477g= +github.com/smartcontractkit/chainlink-deployments-framework v0.95.0/go.mod h1:pTA1JrdlMSfb9WkrIfphq2KV/+paW7GHf15Oc/uJBxs= github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03 h1:z+Au1CpZhVYpn7mkmG/mYFBFkdZoqibQ3LngEHm8Fqs= github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03/go.mod h1:6vCMfxz7cMW0wWseNKtct+b1JJbbRVJJhh/t6pQWN3M= github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 h1:QJiXTG9CmaQAuMRn5JGi+Jhji7fSkehVnKpjc8oNJJY= @@ -1441,8 +1443,8 @@ github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c423b3/go.mod h1:TcOliTQU6r59DwG4lo3U+mFM9WWyBHGuFkkxQpvSujo= github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997 h1:W0HKHO8eE8BckTRnhSdqjHKbJcnk068nEWYnWRu6tJY= github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997/go.mod h1:GTpDgyK0OObf7jpch6p8N281KxN92wbB8serZhU9yRc= -github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c h1:2ZdBZCZWKUMOWLtReaBBHkmDtXc0WtwcqIROHAcm3j4= -github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c/go.mod h1:sUsEwLtVPBlz0wPcysaolS+HVj9cOAt4jYhwE6J8dXg= +github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863 h1:mIvTzvbEjmotW8qsMH19g7DcZ7J6ghQbZoAIyDdOdBs= +github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863/go.mod h1:9lV2AZ+ylPlyB16gct6MXR4taaLh2tljljSDpPI4HkE= github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0 h1:nmuT5gKyTHpsHBEJMDM1C+v1d8jR/N8Xfg3KvqJUm8U= github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0/go.mod h1:YQDu2RcdoAzI5xlhtpbjvaQQZwkUt/Q+IhLbP25M614= github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20260409184948-5b16fae57fe0 h1:y8Gpr9G/3/+zoJtYu4cXmZPEx6plXD3P4Rwp/qFbtY8= diff --git a/integration-tests/load/ccip/ccip_staging_test.go b/integration-tests/load/ccip/ccip_staging_test.go index 919c7b1d8b0..c1cee510147 100644 --- a/integration-tests/load/ccip/ccip_staging_test.go +++ b/integration-tests/load/ccip/ccip_staging_test.go @@ -43,7 +43,7 @@ func TestStaging_CCIP_Load(t *testing.T) { AptosKey: aptosTestKey, }) require.NoError(t, err) - env, err := crib.NewDeployEnvironmentFromCribOutput(t.Context(), lggr, cribDeployOutput) + env, err := crib.NewDeployEnvironmentFromCribOutput(lggr, cribDeployOutput) require.NoError(t, err) require.NotNil(t, env) userOverrides.Validate(t, env) diff --git a/integration-tests/load/ccip/ccip_test.go b/integration-tests/load/ccip/ccip_test.go index b870f4f4bd3..42783f0d0c1 100644 --- a/integration-tests/load/ccip/ccip_test.go +++ b/integration-tests/load/ccip/ccip_test.go @@ -110,7 +110,7 @@ func TestCCIPLoad_RPS(t *testing.T) { AptosKey: aptosTestKey, }) require.NoError(t, err) - env, err := crib.NewDeployEnvironmentFromCribOutput(t.Context(), lggr, cribDeployOutput) + env, err := crib.NewDeployEnvironmentFromCribOutput(lggr, cribDeployOutput) require.NoError(t, err) require.NotNil(t, env) userOverrides.Validate(t, env) diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index b5a1f412ca7..cabb0c79843 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -16,12 +16,12 @@ require ( github.com/rs/zerolog v1.34.0 github.com/smartcontractkit/chain-selectors v1.0.98 github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65 - github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa + github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc 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-common v0.11.2-0.20260422075950-29f37fa83c8a - github.com/smartcontractkit/chainlink-deployments-framework v0.96.0 + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4 + github.com/smartcontractkit/chainlink-deployments-framework v0.95.0 github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03 github.com/smartcontractkit/chainlink-testing-framework/framework v0.15.16 github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.5 @@ -340,8 +340,7 @@ require ( github.com/jackc/pgproto3/v2 v2.3.3 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgtype v1.14.4 // indirect - github.com/jackc/pgx/v5 v5.9.2 // indirect - github.com/jackc/puddle/v2 v2.2.2 // indirect + github.com/jackc/pgx/v4 v4.18.3 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jaegertracing/jaeger-idl v0.6.0 // indirect github.com/jinzhu/copier v0.4.0 // indirect @@ -478,10 +477,10 @@ require ( github.com/smartcontractkit/ccip-contract-examples/chains/evm v0.0.0-20260129135848-c86808ba5cb9 // indirect github.com/smartcontractkit/ccip-owner-contracts v0.1.0 // indirect 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-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4 // indirect github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc // indirect - github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3 // indirect - github.com/smartcontractkit/chainlink-common/keystore v1.1.0 // indirect + github.com/smartcontractkit/chainlink-ccv v0.0.0-20260408181529-b5080e662563 // 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-data-streams v0.1.13 // indirect github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 // indirect @@ -507,7 +506,7 @@ require ( github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0 // indirect github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c423b3 // indirect github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997 // indirect - github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c // indirect + github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863 // indirect github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0 // indirect github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20260409184948-5b16fae57fe0 // indirect github.com/smartcontractkit/chainlink-testing-framework/lib v1.54.7 // indirect diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index a1fa6c372d2..69dad1a2cfd 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -376,6 +376,7 @@ github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnht github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 h1:6xNmx7iTtyBRev0+D/Tv1FZd4SCg8axKApyNyRsAt/w= github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5/go.mod h1:KdCmV+x/BuvyMxRnYBlmVaq4OLiKW6iRQfvC62cvdkI= +github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= @@ -1104,11 +1105,12 @@ github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgS github.com/jackc/pgx/v4 v4.18.2/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= github.com/jackc/pgx/v4 v4.18.3 h1:dE2/TrEsGX3RBprb3qryqSV9Y60iZN1C6i8IrmW9/BA= github.com/jackc/pgx/v4 v4.18.3/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= -github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= -github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= +github.com/jackc/pgx/v5 v5.8.0 h1:TYPDoleBBme0xGSAX3/+NujXXtpZn9HBONkQC7IEZSo= +github.com/jackc/pgx/v5 v5.8.0/go.mod h1:QVeDInX2m9VyzvNeiCJVjCkNFqzsNb43204HshNSZKw= github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.3.0 h1:eHK/5clGOatcjX3oWGBO/MpxpbHzSwud5EWTSCI+MX0= github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= @@ -1635,10 +1637,10 @@ github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65 h github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65/go.mod h1:BbVsx2VcwSVWkd0C5TcAkQBnFaeYFnogJgUa9BUla18= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa h1:GE4B480m+/OMgkmZ9mEI1Abh927N7oW+Ruq9uuKIFQw= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa/go.mod h1:1XxxpkgCmG/z6y30yRuVrcxre6zixIVX3xzi706Db/8= -github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd h1:Jtw6p5iisjXZyFOcBvWh6PDQKtvryrRU2JMmezdutjo= -github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd/go.mod h1:zLqdD2kBX7NsntBneclb2yrHhjFaJdoyA8dK5eimlrE= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de h1:coysmw4zHm6TLOZawoe2h0hHh/25ft+hq9+9mRNkqTs= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de/go.mod h1:1XxxpkgCmG/z6y30yRuVrcxre6zixIVX3xzi706Db/8= +github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4 h1:b6IxxglkWivZ5nfYdYkHF4w0l2BJyEmSdyMYRm47aB4= +github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4/go.mod h1:zLqdD2kBX7NsntBneclb2yrHhjFaJdoyA8dK5eimlrE= github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc h1:dP1ERzdTbiJbHVXfHYdBAi1+8NjgkyQuY2oFNWWWDsQ= github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:7XR5wfgT8hjSsiV+t0EAWvna+rYQeMPaoZf/0g+dios= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc h1:mvobZx5JV5PhG/9IXPReV+8mAGnupl0HIWQZ43zxzd4= @@ -1647,20 +1649,20 @@ 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-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc h1:entc0pB4VQEkhJf/ymOfnUh6zcu1sj1OU4YW3iPEW4s= github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:Ex2OUp35VJuCcRAjuBKwP+cevEPOSjy1pZXm3ncV4kQ= -github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3 h1:NTvhSs8sh0ZYr3JUw8GvPZcLQaeh6t2nleKg7hfnOnQ= -github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3/go.mod h1:sJeU9at/+chXZfh7io5HzW6C3fgDxjpEB6U1dsS+BnE= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a h1:mUEbGLi++YLS6nd6oaFHZ9tAqw0t2ojLu1cZAjCoZmU= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a/go.mod h1:ohOxnxpzD382PS3nN4zhdJmWD+rsBh8zTLGGHhTdJCE= -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-ccv v0.0.0-20260408181529-b5080e662563 h1:1sYQ2lG3zbAG2vASNF5kLke8DhGk5lNaJirwPDx3Vi4= +github.com/smartcontractkit/chainlink-ccv v0.0.0-20260408181529-b5080e662563/go.mod h1:nEuyjUh4wrK6mNXEAaOncl/AhCl31oaxOS160gNW0vc= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4 h1:/b6wjxXU3XhXw8iEmK2FLXp+etK1oD5MK5BedfsFC7U= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4/go.mod h1:Ukc8qY13EcRcSQv6ZBmTKl0YE6F8uE5lj4zsX5aXvXM= +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/monitoring v0.0.0-20251215152504-b1e41f508340 h1:PsjEI+5jZIz9AS4eOsLS5VpSWJINf38clXV3wryPyMk= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20251215152504-b1e41f508340/go.mod h1:P/0OSXUlFaxxD4B/P6HWbxYtIRmmWGDJAvanq19879c= github.com/smartcontractkit/chainlink-data-streams v0.1.13 h1:YOmt545DW6U0SyaqBf+NTGDLm1yMurVI7yOvxP5hlJk= github.com/smartcontractkit/chainlink-data-streams v0.1.13/go.mod h1:00aL7OK0BJdF9gn/4t4f/pctUu2VLwwfA8G/tl9rCrM= -github.com/smartcontractkit/chainlink-deployments-framework v0.96.0 h1:dwdKdXGDfzIwg1/PxQ3YxaeaFplyOtL+EPGtFPVGRmM= -github.com/smartcontractkit/chainlink-deployments-framework v0.96.0/go.mod h1:vjdYbQDNUd3IznXuxv5Gm7VZB804TKOqjNo1BhFOUDk= +github.com/smartcontractkit/chainlink-deployments-framework v0.95.0 h1:PHncc++Xk9OIP7JDiCvpqdMdP85YZWKQCpnRR7l477g= +github.com/smartcontractkit/chainlink-deployments-framework v0.95.0/go.mod h1:pTA1JrdlMSfb9WkrIfphq2KV/+paW7GHf15Oc/uJBxs= github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03 h1:z+Au1CpZhVYpn7mkmG/mYFBFkdZoqibQ3LngEHm8Fqs= github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03/go.mod h1:6vCMfxz7cMW0wWseNKtct+b1JJbbRVJJhh/t6pQWN3M= github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 h1:QJiXTG9CmaQAuMRn5JGi+Jhji7fSkehVnKpjc8oNJJY= @@ -1709,8 +1711,8 @@ github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c423b3/go.mod h1:TcOliTQU6r59DwG4lo3U+mFM9WWyBHGuFkkxQpvSujo= github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997 h1:W0HKHO8eE8BckTRnhSdqjHKbJcnk068nEWYnWRu6tJY= github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997/go.mod h1:GTpDgyK0OObf7jpch6p8N281KxN92wbB8serZhU9yRc= -github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c h1:2ZdBZCZWKUMOWLtReaBBHkmDtXc0WtwcqIROHAcm3j4= -github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c/go.mod h1:sUsEwLtVPBlz0wPcysaolS+HVj9cOAt4jYhwE6J8dXg= +github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863 h1:mIvTzvbEjmotW8qsMH19g7DcZ7J6ghQbZoAIyDdOdBs= +github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863/go.mod h1:9lV2AZ+ylPlyB16gct6MXR4taaLh2tljljSDpPI4HkE= github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0 h1:nmuT5gKyTHpsHBEJMDM1C+v1d8jR/N8Xfg3KvqJUm8U= github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0/go.mod h1:YQDu2RcdoAzI5xlhtpbjvaQQZwkUt/Q+IhLbP25M614= github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20260409184948-5b16fae57fe0 h1:y8Gpr9G/3/+zoJtYu4cXmZPEx6plXD3P4Rwp/qFbtY8= diff --git a/integration-tests/testsetups/ccip/test_helpers.go b/integration-tests/testsetups/ccip/test_helpers.go index 3a3574836a0..62bc77724d5 100644 --- a/integration-tests/testsetups/ccip/test_helpers.go +++ b/integration-tests/testsetups/ccip/test_helpers.go @@ -100,7 +100,7 @@ func (l *DeployedLocalDevEnvironment) StartChains(t *testing.T) { require.NotEmpty(t, homeChainSel, "homeChainSel should not be empty") feedSel := l.devEnvTestCfg.CCIP.GetFeedChainSelector() require.NotEmpty(t, feedSel, "feedSel should not be empty") - blockChains, err := devenv.NewChains(ctx, lggr, envConfig.Chains) + blockChains, err := devenv.NewChains(lggr, envConfig.Chains) require.NoError(t, err) replayBlocks, err := testhelpers.LatestBlocksByChain(ctx, l.Env) require.NoError(t, err) diff --git a/plugins/plugins.private.yaml b/plugins/plugins.private.yaml index d3eefc11d56..322f91bb865 100644 --- a/plugins/plugins.private.yaml +++ b/plugins/plugins.private.yaml @@ -9,7 +9,7 @@ defaults: plugins: cron: - moduleURI: "github.com/smartcontractkit/capabilities/cron" - gitRef: "caad4730b7d4f28911967204045526bcd884cc83" + gitRef: "46fc278ec3c3ba1bc7369be9e221334b292046f4" installPath: "." flags: "-tags timetzdata" readcontract: @@ -39,7 +39,7 @@ plugins: installPath: "." solana: - moduleURI: "github.com/smartcontractkit/capabilities/chain_capabilities/solana" - gitRef: "3ab8f47891f9edd6f20cb881fc312fa98243e902" + gitRef: "6d553b1b59f12d948f163012c822f7417d66d996" installPath: "." aptos: - moduleURI: "github.com/smartcontractkit/capabilities/chain_capabilities/aptos" diff --git a/plugins/plugins.public.yaml b/plugins/plugins.public.yaml index ec022c0ded8..df6bcf17a92 100644 --- a/plugins/plugins.public.yaml +++ b/plugins/plugins.public.yaml @@ -35,7 +35,7 @@ plugins: solana: - moduleURI: "github.com/smartcontractkit/chainlink-solana" - gitRef: "v1.1.2-0.20260421131224-c46cbfe7bc6c" + gitRef: "v1.1.2-0.20260416172015-a42711f2b863" installPath: "./pkg/solana/cmd/chainlink-solana" starknet: diff --git a/system-tests/lib/cre/environment/blockchains/solana/solana.go b/system-tests/lib/cre/environment/blockchains/solana/solana.go index 3ecb0d764af..119003b4ca7 100644 --- a/system-tests/lib/cre/environment/blockchains/solana/solana.go +++ b/system-tests/lib/cre/environment/blockchains/solana/solana.go @@ -222,7 +222,7 @@ func initSolanaInput(bi *blockchain.Input) error { } // TODO PLEX-1718 use latest contracts sha for now. Derive commit sha from go.mod once contracts are in a separate go module - err2 = solutils.DownloadChainlinkSolanaProgramArtifacts(context.Background(), bi.ContractsDir, "ea62f88cbdb4", logger.Nop()) + err2 = solutils.DownloadChainlinkSolanaProgramArtifacts(context.Background(), bi.ContractsDir, "b18eed21017b", logger.Nop()) }) if err2 != nil { return fmt.Errorf("failed to download solana artifacts: %w", err2) diff --git a/system-tests/lib/cre/environment/config/config.go b/system-tests/lib/cre/environment/config/config.go index 4ea96dae7a6..ef1ceb9044f 100644 --- a/system-tests/lib/cre/environment/config/config.go +++ b/system-tests/lib/cre/environment/config/config.go @@ -174,8 +174,6 @@ func (c *Config) Load(absPath string) error { return errors.Wrap(loadErr, "failed to load environment configuration") } - transformHostDockerInternalReferences(in) - for _, nodeSet := range in.NodeSets { if err := nodeSet.ValidateChainCapabilities(in.Blockchains); err != nil { return errors.Wrap(err, "failed to validate chain capabilities") @@ -188,78 +186,6 @@ func (c *Config) Load(absPath string) error { return nil } -func transformHostDockerInternalReferences(cfg *Config) { - if cfg == nil { - return - } - - for _, nodeSet := range cfg.NodeSets { - if nodeSet == nil { - continue - } - - for _, nodeSpec := range nodeSet.NodeSpecs { - if nodeSpec == nil || nodeSpec.Node == nil || nodeSpec.Node.UserConfigOverrides == "" { - continue - } - nodeSpec.Node.UserConfigOverrides = replaceHostDockerInternal(nodeSpec.Node.UserConfigOverrides) - } - - transformCapabilityConfigs(nodeSet.CapabilityConfigs) - } - - transformCapabilityConfigs(cfg.CapabilityConfigs) -} - -func transformCapabilityConfigs(capabilityConfigs map[string]cre.CapabilityConfig) { - if len(capabilityConfigs) == 0 { - return - } - - for key, cfg := range capabilityConfigs { - cfg.Values = transformCapabilityConfigValues(cfg.Values) - capabilityConfigs[key] = cfg - } -} - -func transformCapabilityConfigValues(values map[string]any) map[string]any { - if len(values) == 0 { - return values - } - - transformed := make(map[string]any, len(values)) - for key, value := range values { - transformed[key] = transformCapabilityConfigValue(value) - } - - return transformed -} - -func transformCapabilityConfigValue(value any) any { - switch typed := value.(type) { - case string: - return replaceHostDockerInternal(typed) - case map[string]any: - return transformCapabilityConfigValues(typed) - case []any: - transformed := make([]any, len(typed)) - for i, element := range typed { - transformed[i] = transformCapabilityConfigValue(element) - } - return transformed - default: - return value - } -} - -func replaceHostDockerInternal(value string) string { - if value == "" { - return value - } - - return strings.ReplaceAll(value, "host.docker.internal", strings.TrimPrefix(framework.HostDockerInternal(), "http://")) -} - const ( StateDirname = "core/scripts/cre/environment/state" LocalCREStateFilename = "local_cre.toml" diff --git a/system-tests/lib/cre/environment/config/config_test.go b/system-tests/lib/cre/environment/config/config_test.go deleted file mode 100644 index 004196d3622..00000000000 --- a/system-tests/lib/cre/environment/config/config_test.go +++ /dev/null @@ -1,60 +0,0 @@ -package config - -import ( - "strings" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/smartcontractkit/chainlink-testing-framework/framework" - "github.com/smartcontractkit/chainlink-testing-framework/framework/components/clnode" - - "github.com/smartcontractkit/chainlink/system-tests/lib/cre" -) - -func TestTransformHostDockerInternalReferences(t *testing.T) { - t.Parallel() - - dockerHost := strings.TrimPrefix(framework.HostDockerInternal(), "http://") - cfg := &Config{ - NodeSets: []*cre.NodeSet{ - { - NodeSpecs: []*cre.NodeSpecWithRole{ - { - Input: &clnode.Input{ - Node: &clnode.NodeInput{}, - }, - }, - }, - CapabilityConfigs: map[cre.CapabilityFlag]cre.CapabilityConfig{ - cre.VaultCapability: { - Values: map[string]any{ - "auth0": map[string]any{ - "issuerURL": "http://host.docker.internal:18123/", - "urls": []any{"host.docker.internal:18124"}, - }, - }, - }, - }, - }, - }, - CapabilityConfigs: map[string]cre.CapabilityConfig{ - cre.VaultCapability: { - Values: map[string]any{ - "endpoint": "host.docker.internal:9999", - }, - }, - }, - } - cfg.NodeSets[0].NodeSpecs[0].Node.UserConfigOverrides = "[CRE.Linking]\nURL = \"host.docker.internal:18124\"\n" - - transformHostDockerInternalReferences(cfg) - - require.Contains(t, cfg.NodeSets[0].NodeSpecs[0].Node.UserConfigOverrides, dockerHost+":18124") - - auth0 := cfg.NodeSets[0].CapabilityConfigs[cre.VaultCapability].Values["auth0"].(map[string]any) - require.Equal(t, framework.HostDockerInternal()+":18123/", auth0["issuerURL"]) - require.Equal(t, []any{dockerHost + ":18124"}, auth0["urls"]) - - require.Equal(t, dockerHost+":9999", cfg.CapabilityConfigs[cre.VaultCapability].Values["endpoint"]) -} diff --git a/system-tests/lib/cre/features/solana/v2/solana.go b/system-tests/lib/cre/features/solana/v2/solana.go index 443d28ca61a..da0b8e9029a 100644 --- a/system-tests/lib/cre/features/solana/v2/solana.go +++ b/system-tests/lib/cre/features/solana/v2/solana.go @@ -55,8 +55,7 @@ const ( "transmitter":"{{.NodeAddress}}", "isLocal":{{.IsLocal}}, "chainId":"{{.ChainID}}", - "network":"{{.Network}}", - "deltaStage":{{printf "%d" .DeltaStage}} + "network":"{{.Network}}" }` deltaStage = 14*time.Second + 2*time.Second // finalization time + 2 seconds delta requestTimeout = 30 * time.Second @@ -221,7 +220,6 @@ func createJobs( "IsLocal": true, "Network": "solana", "ChainID": solChainID, - "DeltaStage": deltaStage, } templateData, aErr := credon.ApplyRuntimeValues(maps.Clone(config.Values), runtimeFallbacks) diff --git a/system-tests/lib/cre/features/vault/vault.go b/system-tests/lib/cre/features/vault/vault.go index 0a7cc67ebff..ce6d9d11530 100644 --- a/system-tests/lib/cre/features/vault/vault.go +++ b/system-tests/lib/cre/features/vault/vault.go @@ -3,11 +3,8 @@ package vault import ( "context" "encoding/hex" - "encoding/json" "fmt" - "slices" "strconv" - "strings" "time" "dario.cat/mergo" @@ -23,7 +20,6 @@ import ( "github.com/smartcontractkit/smdkg/dkgocr/dkgocrtypes" "github.com/smartcontractkit/tdh2/go/tdh2/tdh2easy" - "github.com/smartcontractkit/chainlink-testing-framework/framework" "github.com/smartcontractkit/chainlink-testing-framework/lib/utils/ptr" depcontracts "github.com/smartcontractkit/chainlink/deployment/cre/ocr3/ocr3_1/changeset/operations/contracts" "github.com/smartcontractkit/chainlink/v2/core/capabilities/vault/vaultutils" @@ -59,10 +55,6 @@ const ( type Vault struct{} -type runtimeConfig struct { - Auth0 *cre.GatewayServiceAuth0Config `json:"auth0"` -} - func (o *Vault) Flag() cre.CapabilityFlag { return flag } @@ -74,11 +66,6 @@ func (o *Vault) PreEnvStartup( topology *cre.Topology, creEnv *cre.Environment, ) (*cre.PreEnvStartupOutput, error) { - auth0Config, cfgErr := resolveRuntimeConfig(don.MustNodeSet()) - if cfgErr != nil { - return nil, errors.Wrap(cfgErr, "failed to resolve vault runtime config") - } - // use registry chain, because that is the chain we used when generating gateway connector part of node config (check below) registryChainID, chErr := chainselectors.ChainIdFromSelector(creEnv.RegistryChainSelector) if chErr != nil { @@ -91,11 +78,6 @@ func (o *Vault) PreEnvStartup( if hErr != nil { return nil, errors.Wrapf(hErr, "failed to add gateway handlers to gateway config for don %s ", don.Name) } - if auth0Config.Auth0 != nil { - if err := applyGatewayAuth0Config(topology, don.Name, auth0Config.Auth0); err != nil { - return nil, errors.Wrapf(err, "failed to apply auth0 gateway config for don %s", don.Name) - } - } cErr := don.ConfigureForGatewayAccess(registryChainID, *topology.GatewayConnectors) if cErr != nil { @@ -104,21 +86,19 @@ func (o *Vault) PreEnvStartup( workflowRegistryAddress := contracts.MustGetAddressFromDataStore(creEnv.CldfEnvironment.DataStore, creEnv.RegistryChainSelector, keystone_changeset.WorkflowRegistry.String(), creEnv.ContractVersions[keystone_changeset.WorkflowRegistry.String()], "") - donsToConfigure := []*cre.DonMetadata{don} - workflowDONs, wfErr := topology.DonsMetadata.WorkflowDONs() - if wfErr == nil { - for _, workflowDON := range workflowDONs { - if workflowDON.ID == don.ID { - continue - } - donsToConfigure = append(donsToConfigure, workflowDON) - } + // enable workflow registry syncer in node's TOML config + workerNodes, wErr := don.Workers() + if wErr != nil { + return nil, errors.Wrap(wErr, "failed to find worker nodes") } - for _, donToConfigure := range donsToConfigure { - if err := configureWorkersNodeConfig(donToConfigure, registryChainID, common.HexToAddress(workflowRegistryAddress), creEnv.ContractVersions[keystone_changeset.WorkflowRegistry.String()]); err != nil { - return nil, err + for _, workerNode := range workerNodes { + currentConfig := don.MustNodeSet().NodeSpecs[workerNode.Index].Node.TestConfigOverrides + updatedConfig, uErr := updateNodeConfig(workerNode, currentConfig, registryChainID, common.HexToAddress(workflowRegistryAddress), creEnv.ContractVersions[keystone_changeset.WorkflowRegistry.String()]) + if uErr != nil { + return nil, errors.Wrapf(uErr, "failed to update node config for node index %d", workerNode.Index) } + don.MustNodeSet().NodeSpecs[workerNode.Index].Node.TestConfigOverrides = *updatedConfig } capabilities := []keystone_changeset.DONCapabilityWithConfig{{ @@ -153,10 +133,6 @@ func updateNodeConfig(workerNode *cre.NodeMetadata, currentConfig string, regist SyncStrategy: ptr.Ptr("reconciliation"), ContractVersion: ptr.Ptr(wfRegVersion.String()), } - typedConfig.CRE.Linking = &coretoml.LinkingConfig{ - URL: ptr.Ptr(strings.TrimPrefix(framework.HostDockerInternal(), "http://") + ":18124"), - TLSEnabled: ptr.Ptr(false), - } stringifiedConfig, mErr := toml.Marshal(typedConfig) if mErr != nil { @@ -166,24 +142,6 @@ func updateNodeConfig(workerNode *cre.NodeMetadata, currentConfig string, regist return ptr.Ptr(string(stringifiedConfig)), nil } -func configureWorkersNodeConfig(don *cre.DonMetadata, registryChainID uint64, workflowRegistryAddress common.Address, wfRegVersion *semver.Version) error { - workerNodes, wErr := don.Workers() - if wErr != nil { - return errors.Wrapf(wErr, "failed to find worker nodes for don %s", don.Name) - } - - for _, workerNode := range workerNodes { - currentConfig := don.MustNodeSet().NodeSpecs[workerNode.Index].Node.TestConfigOverrides - updatedConfig, uErr := updateNodeConfig(workerNode, currentConfig, registryChainID, workflowRegistryAddress, wfRegVersion) - if uErr != nil { - return errors.Wrapf(uErr, "failed to update node config for don %s node index %d", don.Name, workerNode.Index) - } - don.MustNodeSet().NodeSpecs[workerNode.Index].Node.TestConfigOverrides = *updatedConfig - } - - return nil -} - func (o *Vault) PostEnvStartup( ctx context.Context, testLogger zerolog.Logger, @@ -296,15 +254,6 @@ func createJobs( don *cre.Don, dons *cre.Dons, ) error { - auth0Config := &runtimeConfig{} - if capConfig, ok := don.GetCapabilityConfig(flag); ok { - var err error - auth0Config, err = decodeRuntimeConfig(capConfig.Values) - if err != nil { - return fmt.Errorf("failed to resolve vault runtime config: %w", err) - } - } - bootstrap, isBootstrap := dons.Bootstrap() if !isBootstrap { return errors.New("could not find bootstrap node in topology, exactly one bootstrap node is required") @@ -335,9 +284,6 @@ func createJobs( "bootstrapperOCR3Urls": []string{ocrPeeringCfg.OCRBootstraperPeerID + "@" + ocrPeeringCfg.OCRBootstraperHost + ":" + strconv.Itoa(ocrPeeringCfg.Port)}, }, } - if auth0Config.Auth0 != nil { - workerInput.Inputs["auth0"] = auth0Config.Auth0 - } workerVerErr := cre_jobs.ProposeJobSpec{}.VerifyPreconditions(*creEnv.CldfEnvironment, workerInput) if workerVerErr != nil { @@ -368,61 +314,6 @@ func createJobs( return nil } -func resolveRuntimeConfig(nodeSet *cre.NodeSet) (*runtimeConfig, error) { - if nodeSet == nil { - return &runtimeConfig{}, nil - } - - capConfig, ok := nodeSet.GetCapabilityConfig(flag) - if !ok || len(capConfig.Values) == 0 { - return &runtimeConfig{}, nil - } - - return decodeRuntimeConfig(capConfig.Values) -} - -func decodeRuntimeConfig(values map[string]any) (*runtimeConfig, error) { - if len(values) == 0 { - return &runtimeConfig{}, nil - } - - b, err := json.Marshal(values) - if err != nil { - return nil, fmt.Errorf("failed to marshal vault capability values: %w", err) - } - - cfg := &runtimeConfig{} - if err := json.Unmarshal(b, cfg); err != nil { - return nil, fmt.Errorf("failed to decode vault capability values: %w", err) - } - - return cfg, nil -} - -func applyGatewayAuth0Config(topology *cre.Topology, donName string, auth0 *cre.GatewayServiceAuth0Config) error { - if topology == nil || auth0 == nil { - return nil - } - - for idx := range topology.GatewayServiceConfigs { - svc := &topology.GatewayServiceConfigs[idx] - if svc.ServiceName != pkg.ServiceNameVault || !slices.Contains(svc.DONs, donName) { - continue - } - if svc.Auth0 != nil && (svc.Auth0.IssuerURL != auth0.IssuerURL || svc.Auth0.Audience != auth0.Audience) { - return fmt.Errorf("vault gateway service %q already has conflicting auth0 config", svc.ServiceName) - } - - svc.Auth0 = &cre.GatewayServiceAuth0Config{ - IssuerURL: auth0.IssuerURL, - Audience: auth0.Audience, - } - return nil - } - - return fmt.Errorf("vault gateway service config not found for DON %s", donName) -} - func deployVaultContracts(testLogger zerolog.Logger, qualifier string, registryChainSelector uint64, env *cldf.Environment, contractVersions map[cre.ContractType]*semver.Version) (*common.Address, *common.Address, error) { memoryDatastore, mErr := contracts.NewDataStoreFromExisting(env.DataStore) if mErr != nil { diff --git a/system-tests/lib/cre/types.go b/system-tests/lib/cre/types.go index 6069223bed0..2973508587d 100644 --- a/system-tests/lib/cre/types.go +++ b/system-tests/lib/cre/types.go @@ -24,7 +24,7 @@ import ( "github.com/smartcontractkit/chainlink-deployments-framework/datastore" cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" jobv1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/job" - ks_sol "github.com/smartcontractkit/chainlink/deployment/cre/forwarder/solana" + ks_sol "github.com/smartcontractkit/chainlink/deployment/keystone/changeset/solana" coretoml "github.com/smartcontractkit/chainlink/v2/core/config/toml" corechainlink "github.com/smartcontractkit/chainlink/v2/core/services/chainlink" @@ -430,16 +430,10 @@ func (c *ConfigureCapabilityRegistryInput) Validate() error { // GatewayServiceConfig represents a service in the service-centric gateway format. // Each service groups handlers and references the DON names it operates on. -type GatewayServiceAuth0Config struct { - IssuerURL string `yaml:"issuerURL" toml:"issuerURL" json:"issuerURL"` - Audience string `yaml:"audience" toml:"audience" json:"audience"` -} - type GatewayServiceConfig struct { - ServiceName string `yaml:"servicename"` - Handlers []string `yaml:"handlers"` - DONs []string `yaml:"dons"` - Auth0 *GatewayServiceAuth0Config `yaml:"auth0,omitempty"` + ServiceName string `yaml:"servicename"` + Handlers []string `yaml:"handlers"` + DONs []string `yaml:"dons"` } type GatewayConnectors struct { diff --git a/system-tests/lib/cre/vault/jwt_auth.go b/system-tests/lib/cre/vault/jwt_auth.go deleted file mode 100644 index 5a6c44553e4..00000000000 --- a/system-tests/lib/cre/vault/jwt_auth.go +++ /dev/null @@ -1,429 +0,0 @@ -package vault - -import ( - "context" - "crypto/rand" - "crypto/rsa" - "crypto/x509" - "encoding/base64" - "encoding/json" - "encoding/pem" - "errors" - "fmt" - "math/big" - "net" - "net/http" - "net/url" - "strconv" - "strings" - "sync" - "time" - - "github.com/golang-jwt/jwt/v5" - - jsonrpc "github.com/smartcontractkit/chainlink-common/pkg/jsonrpc2" - "github.com/smartcontractkit/chainlink-testing-framework/framework" -) - -const ( - DefaultJWTIssuerKeyID = "vault-jwt-test-key" - DefaultJWTAudience = "https://vault.test.chain.link" - DefaultJWTLifetime = 5 * time.Minute - defaultJWTPrivateKeyPEM = `-----BEGIN PRIVATE KEY----- -MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDYhEVPZ8YdC3Va -DGZ2hWPt+VYptOt0heTulBOwBW0ESavpfvokLYGFu+bLkGhIw365nCFw0eulLZYN -tD4nzq7F5Swtb2iIaDK19PBVNcukU/CY6j44KC1eomyaOvPXKWKwcc7qxjy9bIyA -TyOmOlxNxcNRSjL2SOApFkzb8M/RymHlMT/RY5ubytvjcbQgn2gy19U7HuNLYW1P -gviAAMY635u0A+HAxXx83lQSz9gy08/uBarmKAd2OadCA8cNiTSYyfUS6m1pycA7 -j8ZHY75xL4hm+p2PJd9V1x3Z4S1TpZDIj+YAG/v4ZHB1vLTLoPIgwLEqwGRRWijl -sbdUZRd9AgMBAAECggEAGCiWFTiWheof43bLvgC/OC/gedHajctc0nQKSFMqqVZR -DMIixgOf1pyzMVaBFFFf4/T0VELQAMO34PqSDt4EaUdbaQxrxQCfW+cjI9bXTJQj -HeTRIXH2Mf98j67xQzo2bUqdlFufLmGcwbpS13rejrz4wKq/SfSyslLvK4FQpu8x -5J9ntn2wdgeUQCm62FyuNPxFMBldcovnwf9bbojTjMAatWfyF++W8OAcRqZCab1H -1WNPyhBqG5vDVMtgBdTkwZHqI01B+ozMnBLuEhsLVzvQWE79ZouWtU76GIeFlr0n -bC/3uWq9LBo1kEbLIPucxYA14ytWfpQwUvy1k11s4QKBgQD4dz2fVYSVb6hn0Pon -EQtunruNB7F2JlobY2s3C7aBKs+l48J16whKFcqHUA6NpuSvyUhFTqIpxM0LXdar -6nWu4Yw0kbqACJOHXuG71VhfkUgRJMOZoC/V0RKudoTwWDzFgNXvYF3bqtpmQDW7 -2dUrSJ+jMOU7eCzXOdHDTFGhbQKBgQDfFQT/NACHapIn5w6c1Dha6fy7t1Z6A2zw -bUUzAh5C1kZ8yeDrkVfr5Ys+Y7Am/tfFteXO2XRSGH5yqq9YHVr0RihavqX72FGT -YY2rmyht+JjnZ3y+vOG5LXePR9tilvGei3jH0lTRPdwKpa6feHKry9MBx5xmqKqQ -xKRmyXaUUQKBgQCcOp3MqgEL1YGWhZhFKDp/+98B9mxnVgYiYojvu7Wt0jVuoZ+M -dZRowPrvyi7ccqwou+9tZNwiV1R2aTKqNmp44+k8xMT37GyXGdnmOWev77HY1b0H -w+lQEH4mpO9CELlllnTuZzGdBfj9gjJHQ9j9tlRqUDxTAGVxjzGOE1bgoQKBgQCu -DxmCAlIzVqzJY5hcN53tGcrvsKJRu2CBy9CFdy6jWctPzLipNROT5Nubh27HTmqP -QlkX50XCVIg88f60UttH44HTJBQgh+1GgIRolDycaa7sRyvnKzs4IEi8TAXaTAok -eZB44Rz60jhhOlsg5HscnoF6TwQyeYH0SOo5pRHXsQKBgQCY/pua7PceD5ZQ4lae -Pi5E9LzPjoeFegVgAP7bRUeC21nzLZlKYOcRCV2WkGLsz60bZm+7VEyFZmrrFoTE -58G0eCLCUq3Dj+NPfIvXNWwSuUAdDspWOBSCyENP+y+jLzIa2OtCj+KJe6Oe28pf -CcSeCJqr6aLeDRPcuD7yUat1OA== ------END PRIVATE KEY-----` -) - -var ( - ErrMissingOrgID = errors.New("org_id is required") - ErrMissingRequestDigest = errors.New("request_digest is required") - ErrMissingIssuer = errors.New("issuer is required") - ErrMissingKeyID = errors.New("kid is required") - ErrMissingPrivateKey = errors.New("private key is required") -) - -type jwtWebKey struct { - Kid string `json:"kid"` - Alg string `json:"alg"` - Kty string `json:"kty"` - Use string `json:"use"` - N string `json:"n"` - E string `json:"e"` -} - -type jwtWebKeySet struct { - Keys []jwtWebKey `json:"keys"` -} - -// JWTTokenClaims describes the claims shape expected by Vault's JWT authorizer. -type JWTTokenClaims struct { - OrgID string - WorkflowOwner string - RequestDigest string - Issuer string - Audience string - Subject string - JWTID string - KeyID string - IssuedAt time.Time - ExpiresAt time.Time - ExtraClaims map[string]any -} - -// TestJWTIssuer is a minimal fake Auth0-style issuer for local CRE and system tests. -// It serves a JWKS endpoint and can mint RS256 JWTs matching Vault's expected claims. -type TestJWTIssuer struct { - server *http.Server - listener net.Listener - signers map[string]*rsa.PrivateKey - defaultKeyID string - mu sync.RWMutex -} - -// NewTestJWTIssuer creates a fake issuer with one generated RSA key and starts serving JWKS immediately. -func NewTestJWTIssuer() (*TestJWTIssuer, error) { - return NewTestJWTIssuerOnAddr("0.0.0.0:0") -} - -// NewTestJWTIssuerOnAddr creates a fake issuer bound to the provided TCP address. -func NewTestJWTIssuerOnAddr(listenAddr string) (*TestJWTIssuer, error) { - privateKey, err := parseDefaultJWTSigningKey() - if err != nil { - return nil, err - } - - return NewTestJWTIssuerWithKeysOnAddr(map[string]*rsa.PrivateKey{ - DefaultJWTIssuerKeyID: privateKey, - }, DefaultJWTIssuerKeyID, listenAddr) -} - -func parseDefaultJWTSigningKey() (*rsa.PrivateKey, error) { - block, _ := pem.Decode([]byte(defaultJWTPrivateKeyPEM)) - if block == nil { - return nil, errors.New("failed to decode default JWT signing key PEM") - } - - privateKey, err := x509.ParsePKCS8PrivateKey(block.Bytes) - if err != nil { - return nil, fmt.Errorf("failed to parse default JWT signing key: %w", err) - } - - rsaKey, ok := privateKey.(*rsa.PrivateKey) - if !ok { - return nil, errors.New("default JWT signing key is not RSA") - } - - return rsaKey, nil -} - -// NewTestJWTIssuerWithKeys creates a fake issuer backed by the provided key set. -func NewTestJWTIssuerWithKeys(signers map[string]*rsa.PrivateKey, defaultKeyID string) (*TestJWTIssuer, error) { - return NewTestJWTIssuerWithKeysOnAddr(signers, defaultKeyID, "0.0.0.0:0") -} - -// NewTestJWTIssuerWithKeysOnAddr creates a fake issuer backed by the provided key set and listen address. -func NewTestJWTIssuerWithKeysOnAddr(signers map[string]*rsa.PrivateKey, defaultKeyID, listenAddr string) (*TestJWTIssuer, error) { - if len(signers) == 0 { - return nil, errors.New("at least one signer is required") - } - if _, ok := signers[defaultKeyID]; !ok { - return nil, fmt.Errorf("default signer %q is not present in key set", defaultKeyID) - } - if listenAddr == "" { - listenAddr = "0.0.0.0:0" - } - - // #nosec G102 -- test-only JWKS server must be reachable from Dockerized nodes during local CRE runs. - listener, err := (&net.ListenConfig{}).Listen(context.Background(), "tcp", listenAddr) - if err != nil { - return nil, fmt.Errorf("failed to allocate JWKS listener: %w", err) - } - - issuer := &TestJWTIssuer{ - listener: listener, - signers: signers, - defaultKeyID: defaultKeyID, - } - - mux := http.NewServeMux() - mux.HandleFunc("/.well-known/jwks.json", issuer.handleJWKS) - mux.HandleFunc("/.well-known/openid-configuration", issuer.handleOpenIDConfiguration) - - issuer.server = &http.Server{ - Handler: mux, - ReadHeaderTimeout: 5 * time.Second, - } - - go func() { - _ = issuer.server.Serve(listener) - }() - - return issuer, nil -} - -// Close shuts down the fake issuer. -func (i *TestJWTIssuer) Close() error { - if i == nil || i.server == nil { - return nil - } - - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - - return i.server.Shutdown(ctx) -} - -// LocalIssuerURL returns an issuer URL that the local test process can use. -func (i *TestJWTIssuer) LocalIssuerURL() string { - return i.baseURL("http://127.0.0.1") -} - -// DockerIssuerURL returns an issuer URL that Dockerized Chainlink nodes can use. -func (i *TestJWTIssuer) DockerIssuerURL() string { - return i.baseURL(framework.HostDockerInternal()) -} - -// MintToken signs a Vault-compatible JWT with one of the issuer's registered keys. -func (i *TestJWTIssuer) MintToken(claims JWTTokenClaims) (string, error) { - if claims.KeyID == "" { - claims.KeyID = i.defaultKeyID - } - if claims.Issuer == "" { - claims.Issuer = i.LocalIssuerURL() - } - if claims.Audience == "" { - claims.Audience = DefaultJWTAudience - } - - i.mu.RLock() - privateKey := i.signers[claims.KeyID] - i.mu.RUnlock() - if privateKey == nil { - return "", fmt.Errorf("signer %q not registered in issuer", claims.KeyID) - } - - return SignTestJWT(privateKey, claims) -} - -func (i *TestJWTIssuer) handleJWKS(w http.ResponseWriter, _ *http.Request) { - i.mu.RLock() - defer i.mu.RUnlock() - - keySet := jwtWebKeySet{ - Keys: make([]jwtWebKey, 0, len(i.signers)), - } - for keyID, privateKey := range i.signers { - keySet.Keys = append(keySet.Keys, rsaPublicKeyToJWK(keyID, &privateKey.PublicKey)) - } - - w.Header().Set("Content-Type", "application/json") - _ = json.NewEncoder(w).Encode(keySet) -} - -func (i *TestJWTIssuer) handleOpenIDConfiguration(w http.ResponseWriter, r *http.Request) { - issuerURL := requestBaseURL(r) - response := map[string]string{ - "issuer": issuerURL, - "jwks_uri": strings.TrimSuffix(issuerURL, "/") + "/.well-known/jwks.json", - } - - w.Header().Set("Content-Type", "application/json") - _ = json.NewEncoder(w).Encode(response) -} - -func (i *TestJWTIssuer) baseURL(host string) string { - if i == nil || i.listener == nil { - return "" - } - - tcpAddr, ok := i.listener.Addr().(*net.TCPAddr) - if !ok { - return "" - } - - return withPort(host, tcpAddr.Port) -} - -// GenerateJWTSigningKey creates an RSA signing key suitable for RS256 JWTs. -func GenerateJWTSigningKey() (*rsa.PrivateKey, error) { - privateKey, err := rsa.GenerateKey(rand.Reader, 2048) - if err != nil { - return nil, fmt.Errorf("failed to generate RSA signing key: %w", err) - } - return privateKey, nil -} - -// SignTestJWT signs a Vault-compatible RS256 JWT. -func SignTestJWT(privateKey *rsa.PrivateKey, claims JWTTokenClaims) (string, error) { - if privateKey == nil { - return "", ErrMissingPrivateKey - } - if claims.KeyID == "" { - return "", ErrMissingKeyID - } - if claims.Issuer == "" { - return "", ErrMissingIssuer - } - if claims.OrgID == "" { - return "", ErrMissingOrgID - } - if claims.RequestDigest == "" { - return "", ErrMissingRequestDigest - } - - now := time.Now().UTC() - if claims.IssuedAt.IsZero() { - claims.IssuedAt = now - } - if claims.ExpiresAt.IsZero() { - claims.ExpiresAt = claims.IssuedAt.Add(DefaultJWTLifetime) - } - if claims.Subject == "" { - claims.Subject = claims.OrgID - } - if claims.Audience == "" { - claims.Audience = DefaultJWTAudience - } - - tokenClaims := jwt.MapClaims{ - "iss": claims.Issuer, - "aud": claims.Audience, - "sub": claims.Subject, - "iat": jwt.NewNumericDate(claims.IssuedAt), - "exp": jwt.NewNumericDate(claims.ExpiresAt), - "org_id": claims.OrgID, - "authorization_details": []map[string]string{ - { - "type": "request_digest", - "value": claims.RequestDigest, - }, - }, - } - - if claims.WorkflowOwner != "" { - tokenClaims["authorization_details"] = []map[string]string{ - { - "type": "request_digest", - "value": claims.RequestDigest, - }, - { - "type": "workflow_owner", - "value": claims.WorkflowOwner, - }, - } - } - if claims.JWTID != "" { - tokenClaims["jti"] = claims.JWTID - } - for key, value := range claims.ExtraClaims { - tokenClaims[key] = value - } - - token := jwt.NewWithClaims(jwt.SigningMethodRS256, tokenClaims) - token.Header["kid"] = claims.KeyID - - tokenString, err := token.SignedString(privateKey) - if err != nil { - return "", fmt.Errorf("failed to sign JWT: %w", err) - } - - return tokenString, nil -} - -// ComputeRequestDigest mirrors the digest computation used by Vault's authorizer. -func ComputeRequestDigest(req jsonrpc.Request[json.RawMessage]) (string, error) { - return req.Digest() -} - -// ComputeRawRequestDigest computes a Vault request digest from the marshalled JSON-RPC request body. -func ComputeRawRequestDigest(requestBody []byte) (string, error) { - var req jsonrpc.Request[json.RawMessage] - if err := json.Unmarshal(requestBody, &req); err != nil { - return "", fmt.Errorf("failed to decode JSON-RPC request: %w", err) - } - return ComputeRequestDigest(req) -} - -func rsaPublicKeyToJWK(keyID string, publicKey *rsa.PublicKey) jwtWebKey { - return jwtWebKey{ - Kid: keyID, - Alg: "RS256", - Kty: "RSA", - Use: "sig", - N: base64.RawURLEncoding.EncodeToString(publicKey.N.Bytes()), - E: base64.RawURLEncoding.EncodeToString(big.NewInt(int64(publicKey.E)).Bytes()), - } -} - -func requestBaseURL(r *http.Request) string { - scheme := "http" - if r.TLS != nil { - scheme = "https" - } - if forwardedProto := r.Header.Get("X-Forwarded-Proto"); forwardedProto != "" { - scheme = forwardedProto - } - - return withPort(scheme+"://"+r.Host, portFromRequest(r)) -} - -func portFromRequest(r *http.Request) int { - if r.URL.Port() != "" { - port, _ := strconv.Atoi(r.URL.Port()) - return port - } - if _, rawPort, err := net.SplitHostPort(r.Host); err == nil { - port, _ := strconv.Atoi(rawPort) - return port - } - return 0 -} - -func withPort(rawBase string, port int) string { - base, err := url.Parse(rawBase) - if err != nil { - return rawBase - } - - host := base.Hostname() - if host == "" { - host = strings.Trim(rawBase, "/") - } - - if port > 0 { - base.Host = net.JoinHostPort(host, strconv.Itoa(port)) - } else { - base.Host = host - } - base.Path = "/" - base.RawPath = "" - base.RawQuery = "" - base.Fragment = "" - - return base.String() -} diff --git a/system-tests/lib/cre/vault/jwt_auth_test.go b/system-tests/lib/cre/vault/jwt_auth_test.go deleted file mode 100644 index 35ae0c825b2..00000000000 --- a/system-tests/lib/cre/vault/jwt_auth_test.go +++ /dev/null @@ -1,95 +0,0 @@ -package vault - -import ( - "encoding/json" - "testing" - - "github.com/stretchr/testify/require" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials/insecure" - - vaultcommon "github.com/smartcontractkit/chainlink-common/pkg/capabilities/actions/vault" - jsonrpc "github.com/smartcontractkit/chainlink-common/pkg/jsonrpc2" - "github.com/smartcontractkit/chainlink-common/pkg/settings/cresettings" - "github.com/smartcontractkit/chainlink-common/pkg/settings/limits" - linkingclient "github.com/smartcontractkit/chainlink-protos/linking-service/go/v1" - vaultcap "github.com/smartcontractkit/chainlink/v2/core/capabilities/vault" - "github.com/smartcontractkit/chainlink/v2/core/capabilities/vault/vaulttypes" - "github.com/smartcontractkit/chainlink/v2/core/logger" -) - -func TestTestJWTIssuer_WorksWithVaultJWTBasedAuth(t *testing.T) { - issuer, err := NewTestJWTIssuer() - require.NoError(t, err) - t.Cleanup(func() { - require.NoError(t, issuer.Close()) - }) - - params, err := json.Marshal(vaultcommon.ListSecretIdentifiersRequest{ - Namespace: "main", - }) - require.NoError(t, err) - - req := jsonrpc.Request[json.RawMessage]{ - Version: jsonrpc.JsonRpcVersion, - ID: "req-1", - Method: vaulttypes.MethodSecretsList, - Params: (*json.RawMessage)(¶ms), - } - - requestDigest, err := ComputeRequestDigest(req) - require.NoError(t, err) - - token, err := issuer.MintToken(JWTTokenClaims{ - KeyID: DefaultJWTIssuerKeyID, - Issuer: issuer.LocalIssuerURL(), - Audience: "https://api.test.chain.link", - OrgID: "org-test", - WorkflowOwner: "0xAbCdEf0123456789AbCdEf0123456789AbCdEf01", - RequestDigest: requestDigest, - }) - require.NoError(t, err) - - req.Auth = token - - auth, err := vaultcap.NewJWTBasedAuth(vaultcap.JWTBasedAuthConfig{ - IssuerURL: issuer.LocalIssuerURL(), - Audience: "https://api.test.chain.link", - }, limits.Factory{Settings: cresettings.DefaultGetter}, logger.TestLogger(t), vaultcap.WithJWTBasedAuthGateLimiter(limits.NewGateLimiter(true))) - require.NoError(t, err) - - authResult, err := auth.AuthorizeRequest(t.Context(), req) - require.NoError(t, err) - require.Equal(t, "org-test", authResult.OrgID()) - require.Equal(t, "0xAbCdEf0123456789AbCdEf0123456789AbCdEf01", authResult.WorkflowOwner()) - require.Equal(t, requestDigest, authResult.Digest()) -} - -func TestTestLinkingService_ResolvesOwner(t *testing.T) { - svc, err := NewTestLinkingService(map[string]string{ - "0xAbC": "org-123", - "d6d4fc38c209f53caa5a311a0cb44259daa4e9e1": "org-456", - }) - require.NoError(t, err) - t.Cleanup(func() { - require.NoError(t, svc.Close()) - }) - - conn, err := grpc.NewClient(svc.LocalURL(), grpc.WithTransportCredentials(insecure.NewCredentials())) - require.NoError(t, err) - t.Cleanup(func() { - require.NoError(t, conn.Close()) - }) - - resp, err := linkingclient.NewLinkingServiceClient(conn).GetOrganizationFromWorkflowOwner(t.Context(), &linkingclient.GetOrganizationFromWorkflowOwnerRequest{ - WorkflowOwner: "0xabc", - }) - require.NoError(t, err) - require.Equal(t, "org-123", resp.GetOrganizationId()) - - resp, err = linkingclient.NewLinkingServiceClient(conn).GetOrganizationFromWorkflowOwner(t.Context(), &linkingclient.GetOrganizationFromWorkflowOwnerRequest{ - WorkflowOwner: "0xD6d4fC38c209F53caa5a311a0cb44259dAA4E9e1", - }) - require.NoError(t, err) - require.Equal(t, "org-456", resp.GetOrganizationId()) -} diff --git a/system-tests/lib/cre/vault/linking_service.go b/system-tests/lib/cre/vault/linking_service.go deleted file mode 100644 index f1b3460df3a..00000000000 --- a/system-tests/lib/cre/vault/linking_service.go +++ /dev/null @@ -1,150 +0,0 @@ -package vault - -import ( - "context" - "errors" - "fmt" - "net" - "strings" - "sync" - - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - linkingclient "github.com/smartcontractkit/chainlink-protos/linking-service/go/v1" - "github.com/smartcontractkit/chainlink-testing-framework/framework" -) - -// TestLinkingService is a local gRPC fixture that resolves workflow owners to org IDs. -type TestLinkingService struct { - linkingclient.UnimplementedLinkingServiceServer - - server *grpc.Server - listener net.Listener - - mu sync.RWMutex - ownerToOrg map[string]string -} - -const SharedTestLinkingServiceAddr = "0.0.0.0:18124" - -var ( - sharedTestLinkingServiceOnce sync.Once - sharedTestLinkingService *TestLinkingService - errSharedTestLinkingService error -) - -// NewTestLinkingService starts a mock linking service immediately. -func NewTestLinkingService(ownerToOrg map[string]string) (*TestLinkingService, error) { - return NewTestLinkingServiceOnAddr(ownerToOrg, "0.0.0.0:0") -} - -// EnsureSharedTestLinkingServiceStarted starts the shared local linking service once -// on the fixed host port that Dockerized nodes use during local CRE runs. -func EnsureSharedTestLinkingServiceStarted() (*TestLinkingService, error) { - sharedTestLinkingServiceOnce.Do(func() { - sharedTestLinkingService, errSharedTestLinkingService = NewTestLinkingServiceOnAddr(nil, SharedTestLinkingServiceAddr) - }) - - return sharedTestLinkingService, errSharedTestLinkingService -} - -// NewTestLinkingServiceOnAddr starts a mock linking service on the provided TCP address. -func NewTestLinkingServiceOnAddr(ownerToOrg map[string]string, listenAddr string) (*TestLinkingService, error) { - if listenAddr == "" { - listenAddr = "0.0.0.0:0" - } - - // #nosec G102 -- test-only linking server must be reachable from Dockerized nodes during local CRE runs. - listener, err := (&net.ListenConfig{}).Listen(context.Background(), "tcp", listenAddr) - if err != nil { - return nil, fmt.Errorf("failed to allocate linking service listener: %w", err) - } - - svc := &TestLinkingService{ - listener: listener, - ownerToOrg: make(map[string]string, len(ownerToOrg)), - } - for owner, orgID := range ownerToOrg { - svc.ownerToOrg[normalizeWorkflowOwner(owner)] = orgID - } - - server := grpc.NewServer() - linkingclient.RegisterLinkingServiceServer(server, svc) - svc.server = server - - go func() { - _ = server.Serve(listener) - }() - - return svc, nil -} - -// Close stops the mock gRPC service. -func (s *TestLinkingService) Close() error { - if s == nil || s.server == nil { - return nil - } - - s.server.Stop() - if s.listener != nil { - if err := s.listener.Close(); err != nil && !errors.Is(err, net.ErrClosed) { - return err - } - } - - return nil -} - -// LocalURL returns the host-local gRPC address. -func (s *TestLinkingService) LocalURL() string { - return s.baseURL("127.0.0.1") -} - -// DockerURL returns the address Dockerized nodes can use. -func (s *TestLinkingService) DockerURL() string { - return s.baseURL(strings.TrimPrefix(framework.HostDockerInternal(), "http://")) -} - -// SetOwnerOrg installs or updates a workflow-owner mapping. -func (s *TestLinkingService) SetOwnerOrg(owner, orgID string) { - s.mu.Lock() - defer s.mu.Unlock() - - s.ownerToOrg[normalizeWorkflowOwner(owner)] = orgID -} - -// GetOrganizationFromWorkflowOwner implements the linking-service gRPC API. -func (s *TestLinkingService) GetOrganizationFromWorkflowOwner(_ context.Context, req *linkingclient.GetOrganizationFromWorkflowOwnerRequest) (*linkingclient.GetOrganizationFromWorkflowOwnerResponse, error) { - owner := normalizeWorkflowOwner(req.GetWorkflowOwner()) - - s.mu.RLock() - orgID, ok := s.ownerToOrg[owner] - s.mu.RUnlock() - if !ok { - return nil, status.Errorf(codes.NotFound, "workflow owner %q not linked", req.GetWorkflowOwner()) - } - - return &linkingclient.GetOrganizationFromWorkflowOwnerResponse{ - OrganizationId: orgID, - }, nil -} - -func (s *TestLinkingService) baseURL(host string) string { - if s == nil || s.listener == nil { - return "" - } - - tcpAddr, ok := s.listener.Addr().(*net.TCPAddr) - if !ok { - return "" - } - - return fmt.Sprintf("%s:%d", host, tcpAddr.Port) -} - -func normalizeWorkflowOwner(owner string) string { - owner = strings.ToLower(strings.TrimSpace(owner)) - return strings.TrimPrefix(owner, "0x") -} diff --git a/system-tests/lib/cre/workflow/workflow.go b/system-tests/lib/cre/workflow/workflow.go index 36cd5baa673..2e7df738450 100644 --- a/system-tests/lib/cre/workflow/workflow.go +++ b/system-tests/lib/cre/workflow/workflow.go @@ -55,7 +55,6 @@ func RegisterWithContract( version *semver.Version, donID uint64, workflowName, binaryURL string, configURL, secretsURL *string, - attributes []byte, artifactsDirInContainer *string, ) (string, error) { // Download and decode workflow binary @@ -93,7 +92,7 @@ func RegisterWithContract( // Register workflow based on version switch version.Major() { case 2: - if err := registerWorkflowV2(sc, workflowRegistryAddr, version, workflowName, workflowID, binaryURLToUse, configURLToUse, attributes); err != nil { + if err := registerWorkflowV2(sc, workflowRegistryAddr, version, workflowName, workflowID, binaryURLToUse, configURLToUse); err != nil { return "", err } default: @@ -150,7 +149,11 @@ func LinkOwner(sc *seth.Client, workflowRegistryAddr common.Address, version *se signature[64] += 27 _, err = sc.Decode(registry.LinkOwner(sc.NewTXOpts(), validityTimestamp, common.HexToHash(ownershipProof), signature)) - return err + if err != nil { + return err + } + + return nil default: return errors.New("invalid version for linking owner") } @@ -224,7 +227,6 @@ func registerWorkflowV2( workflowRegistryAddr common.Address, version *semver.Version, workflowName, workflowID, binaryURL, configURL string, - attributes []byte, ) error { registry, err := getRegistryV2Instance(sc, workflowRegistryAddr, version) if err != nil { @@ -249,7 +251,7 @@ func registerWorkflowV2( contracts.DonFamily, binaryURL, configURL, - attributes, + nil, false, )) if err != nil { diff --git a/system-tests/lib/go.mod b/system-tests/lib/go.mod index b3597bdd2d4..876ba16ff7f 100644 --- a/system-tests/lib/go.mod +++ b/system-tests/lib/go.mod @@ -21,7 +21,6 @@ require ( github.com/gagliardetto/solana-go v1.13.0 github.com/go-resty/resty/v2 v2.17.2 github.com/goccy/go-yaml v1.19.2 - github.com/golang-jwt/jwt/v5 v5.3.1 github.com/google/uuid v1.6.0 github.com/jmoiron/sqlx v1.4.0 github.com/pelletier/go-toml/v2 v2.3.0 @@ -32,16 +31,15 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.98 github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65 github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a - github.com/smartcontractkit/chainlink-common/keystore v1.1.0 - github.com/smartcontractkit/chainlink-deployments-framework v0.96.0 + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4 + github.com/smartcontractkit/chainlink-common/keystore v1.0.2 + github.com/smartcontractkit/chainlink-deployments-framework v0.95.0 github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03 github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20260119171452-39c98c3b33cd github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 github.com/smartcontractkit/chainlink-protos/job-distributor v0.18.0 - github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997 - github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c + github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863 github.com/smartcontractkit/chainlink-testing-framework/framework v0.15.17 github.com/smartcontractkit/chainlink-testing-framework/framework/components/chiprouter v1.0.2 github.com/smartcontractkit/chainlink-testing-framework/framework/components/dockercompose v0.1.15 @@ -91,7 +89,6 @@ require ( github.com/NethermindEth/juno v0.12.5 // indirect github.com/NethermindEth/starknet.go v0.8.0 // indirect github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 // indirect - github.com/Unheilbar/anchor-go v1.0.3 // indirect github.com/VictoriaMetrics/fastcache v1.13.0 // indirect github.com/XSAM/otelsql v0.37.0 // indirect github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect @@ -273,6 +270,7 @@ require ( github.com/gofrs/flock v0.13.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.2 // indirect + github.com/golang-jwt/jwt/v5 v5.3.1 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v1.0.0 // indirect github.com/google/btree v1.1.3 // indirect @@ -333,8 +331,7 @@ require ( github.com/jackc/pgproto3/v2 v2.3.3 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgtype v1.14.4 // indirect - github.com/jackc/pgx/v5 v5.9.2 // indirect - github.com/jackc/puddle/v2 v2.2.2 // indirect + github.com/jackc/pgx/v4 v4.18.3 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jinzhu/copier v0.4.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect @@ -453,12 +450,12 @@ require ( github.com/smartcontractkit/ccip-contract-examples/chains/evm v0.0.0-20260129135848-c86808ba5cb9 // indirect github.com/smartcontractkit/ccip-owner-contracts v0.1.0 // indirect github.com/smartcontractkit/chainlink-automation v0.8.1 // indirect - github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa // indirect - github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd // indirect + github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de // indirect + github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4 // indirect github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20260415165642-49f23e4d76cc // indirect github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc // indirect - github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3 // indirect + github.com/smartcontractkit/chainlink-ccv v0.0.0-20260408181529-b5080e662563 // indirect github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20251211140724-319861e514c4 // indirect github.com/smartcontractkit/chainlink-data-streams v0.1.13 // indirect github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 // indirect @@ -472,13 +469,14 @@ require ( github.com/smartcontractkit/chainlink-protos/chainlink-ccv/heartbeat v0.0.0-20260115142640-f6b99095c12e // indirect github.com/smartcontractkit/chainlink-protos/chainlink-ccv/message-discovery v0.0.0-20251211142334-5c3421fe2c8d // indirect github.com/smartcontractkit/chainlink-protos/chainlink-ccv/verifier v0.0.0-20251211142334-5c3421fe2c8d // indirect + github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b // indirect github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260319180422-b5808c964785 // indirect github.com/smartcontractkit/chainlink-protos/orchestrator v0.10.0 // indirect github.com/smartcontractkit/chainlink-protos/ring/go v0.0.0-20260331131315-f08a616d8dcd // indirect github.com/smartcontractkit/chainlink-protos/rmn/v1.6/go v0.0.0-20250131130834-15e0d4cde2a6 // indirect github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0 // indirect github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c423b3 // indirect - github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260421131224-c46cbfe7bc6c // indirect + github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260217175957-8f1af02c5075 // indirect github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0 // indirect github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20260409184948-5b16fae57fe0 // indirect github.com/smartcontractkit/chainlink-testing-framework/parrot v0.6.2 // indirect @@ -611,8 +609,3 @@ require ( // gotron-sdk is not longer maintained replace github.com/fbsobreira/gotron-sdk => github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20260218133534-cbd44da2856b - -// moby/go-archive v0.2.0 removed deprecated aliases (archive.Gzip, etc.) that -// docker/cli@v28.5.x still uses. docker/compose has not migrated to docker/cli v29 -// yet, so we pin to v0.1.0 which has both the old aliases and the new compression API. -replace github.com/moby/go-archive v0.2.0 => github.com/moby/go-archive v0.1.0 diff --git a/system-tests/lib/go.sum b/system-tests/lib/go.sum index 6f40d551a86..c0bc5480435 100644 --- a/system-tests/lib/go.sum +++ b/system-tests/lib/go.sum @@ -119,8 +119,6 @@ github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= github.com/TyphonHill/go-mermaid v1.0.0 h1:VtmgQwgZA+KNHJvG/O591ibBVuDkGhg2+F/olVXnXAs= github.com/TyphonHill/go-mermaid v1.0.0/go.mod h1:BqMEbKnr2HHpZ4lJJvGjL47v6rZAUpJcOaE/db1Ppwc= -github.com/Unheilbar/anchor-go v1.0.3 h1:rIZ9FU7L+OazdTR+FB6Q2Fe65LvsDXA649vR3LJRJl0= -github.com/Unheilbar/anchor-go v1.0.3/go.mod h1:v5AdT7FpHKNcIppfr3bix/ZP3Kr8oOzmxSxEWsCMEd0= github.com/VictoriaMetrics/fastcache v1.13.0 h1:AW4mheMR5Vd9FkAPUv+NH6Nhw+fmbTMGMsNAoA/+4G0= github.com/VictoriaMetrics/fastcache v1.13.0/go.mod h1:hHXhl4DA2fTL2HTZDJFXWgW0LNjo6B+4aj2Wmng3TjU= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= @@ -342,6 +340,7 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= @@ -1084,14 +1083,10 @@ github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgS github.com/jackc/pgx/v4 v4.18.2/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= github.com/jackc/pgx/v4 v4.18.3 h1:dE2/TrEsGX3RBprb3qryqSV9Y60iZN1C6i8IrmW9/BA= github.com/jackc/pgx/v4 v4.18.3/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= -github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= -github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= -github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -1287,8 +1282,8 @@ github.com/moby/buildkit v0.28.1 h1:Tq6H6gOMU2JyEQ5rA0pa7Ey3VGNR3qpw90liSIpMQoo= github.com/moby/buildkit v0.28.1/go.mod h1:xO6wb9VBXszkIBxaGTLXc1rQORVQFIJRt3GSX7KzCFc= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/go-archive v0.1.0 h1:Kk/5rdW/g+H8NHdJW2gsXyZ7UnzvJNOy6VKJqueWdcQ= -github.com/moby/go-archive v0.1.0/go.mod h1:G9B+YoujNohJmrIYFBpSd54GTUB4lt9S+xVQvsJyFuo= +github.com/moby/go-archive v0.2.0 h1:zg5QDUM2mi0JIM9fdQZWC7U8+2ZfixfTYoHL7rWUcP8= +github.com/moby/go-archive v0.2.0/go.mod h1:mNeivT14o8xU+5q1YnNrkQVpK+dnNe/K6fHqnTg4qPU= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/moby/api v1.53.0 h1:PihqG1ncw4W+8mZs69jlwGXdaYBeb5brF6BL7mPIS/w= @@ -1601,10 +1596,10 @@ github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65 h github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65/go.mod h1:BbVsx2VcwSVWkd0C5TcAkQBnFaeYFnogJgUa9BUla18= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa h1:GE4B480m+/OMgkmZ9mEI1Abh927N7oW+Ruq9uuKIFQw= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa/go.mod h1:1XxxpkgCmG/z6y30yRuVrcxre6zixIVX3xzi706Db/8= -github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd h1:Jtw6p5iisjXZyFOcBvWh6PDQKtvryrRU2JMmezdutjo= -github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd/go.mod h1:zLqdD2kBX7NsntBneclb2yrHhjFaJdoyA8dK5eimlrE= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de h1:coysmw4zHm6TLOZawoe2h0hHh/25ft+hq9+9mRNkqTs= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de/go.mod h1:1XxxpkgCmG/z6y30yRuVrcxre6zixIVX3xzi706Db/8= +github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4 h1:b6IxxglkWivZ5nfYdYkHF4w0l2BJyEmSdyMYRm47aB4= +github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4/go.mod h1:zLqdD2kBX7NsntBneclb2yrHhjFaJdoyA8dK5eimlrE= github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc h1:dP1ERzdTbiJbHVXfHYdBAi1+8NjgkyQuY2oFNWWWDsQ= github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:7XR5wfgT8hjSsiV+t0EAWvna+rYQeMPaoZf/0g+dios= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc h1:mvobZx5JV5PhG/9IXPReV+8mAGnupl0HIWQZ43zxzd4= @@ -1613,20 +1608,20 @@ 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-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc h1:entc0pB4VQEkhJf/ymOfnUh6zcu1sj1OU4YW3iPEW4s= github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:Ex2OUp35VJuCcRAjuBKwP+cevEPOSjy1pZXm3ncV4kQ= -github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3 h1:NTvhSs8sh0ZYr3JUw8GvPZcLQaeh6t2nleKg7hfnOnQ= -github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3/go.mod h1:sJeU9at/+chXZfh7io5HzW6C3fgDxjpEB6U1dsS+BnE= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a h1:mUEbGLi++YLS6nd6oaFHZ9tAqw0t2ojLu1cZAjCoZmU= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a/go.mod h1:ohOxnxpzD382PS3nN4zhdJmWD+rsBh8zTLGGHhTdJCE= -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-ccv v0.0.0-20260408181529-b5080e662563 h1:1sYQ2lG3zbAG2vASNF5kLke8DhGk5lNaJirwPDx3Vi4= +github.com/smartcontractkit/chainlink-ccv v0.0.0-20260408181529-b5080e662563/go.mod h1:nEuyjUh4wrK6mNXEAaOncl/AhCl31oaxOS160gNW0vc= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4 h1:/b6wjxXU3XhXw8iEmK2FLXp+etK1oD5MK5BedfsFC7U= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4/go.mod h1:Ukc8qY13EcRcSQv6ZBmTKl0YE6F8uE5lj4zsX5aXvXM= +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.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/monitoring v0.0.0-20251215152504-b1e41f508340 h1:PsjEI+5jZIz9AS4eOsLS5VpSWJINf38clXV3wryPyMk= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20251215152504-b1e41f508340/go.mod h1:P/0OSXUlFaxxD4B/P6HWbxYtIRmmWGDJAvanq19879c= github.com/smartcontractkit/chainlink-data-streams v0.1.13 h1:YOmt545DW6U0SyaqBf+NTGDLm1yMurVI7yOvxP5hlJk= github.com/smartcontractkit/chainlink-data-streams v0.1.13/go.mod h1:00aL7OK0BJdF9gn/4t4f/pctUu2VLwwfA8G/tl9rCrM= -github.com/smartcontractkit/chainlink-deployments-framework v0.96.0 h1:dwdKdXGDfzIwg1/PxQ3YxaeaFplyOtL+EPGtFPVGRmM= -github.com/smartcontractkit/chainlink-deployments-framework v0.96.0/go.mod h1:vjdYbQDNUd3IznXuxv5Gm7VZB804TKOqjNo1BhFOUDk= +github.com/smartcontractkit/chainlink-deployments-framework v0.95.0 h1:PHncc++Xk9OIP7JDiCvpqdMdP85YZWKQCpnRR7l477g= +github.com/smartcontractkit/chainlink-deployments-framework v0.95.0/go.mod h1:pTA1JrdlMSfb9WkrIfphq2KV/+paW7GHf15Oc/uJBxs= github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03 h1:z+Au1CpZhVYpn7mkmG/mYFBFkdZoqibQ3LngEHm8Fqs= github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03/go.mod h1:6vCMfxz7cMW0wWseNKtct+b1JJbbRVJJhh/t6pQWN3M= github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 h1:QJiXTG9CmaQAuMRn5JGi+Jhji7fSkehVnKpjc8oNJJY= @@ -1675,10 +1670,10 @@ github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c423b3/go.mod h1:TcOliTQU6r59DwG4lo3U+mFM9WWyBHGuFkkxQpvSujo= github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997 h1:W0HKHO8eE8BckTRnhSdqjHKbJcnk068nEWYnWRu6tJY= github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997/go.mod h1:GTpDgyK0OObf7jpch6p8N281KxN92wbB8serZhU9yRc= -github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c h1:2ZdBZCZWKUMOWLtReaBBHkmDtXc0WtwcqIROHAcm3j4= -github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c/go.mod h1:sUsEwLtVPBlz0wPcysaolS+HVj9cOAt4jYhwE6J8dXg= -github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260421131224-c46cbfe7bc6c h1:Hn/80PyYFrQhRlNSaq9HY4cjc/7AuP9zyWLle22t34A= -github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260421131224-c46cbfe7bc6c/go.mod h1:C5pZsbYX3qkhZTYWr1aYJi9QMfonFAun+Jl1npQ7UJA= +github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863 h1:mIvTzvbEjmotW8qsMH19g7DcZ7J6ghQbZoAIyDdOdBs= +github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863/go.mod h1:9lV2AZ+ylPlyB16gct6MXR4taaLh2tljljSDpPI4HkE= +github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260217175957-8f1af02c5075 h1:PcR7Zdh+Z+Dh/S4lQ1xDbnFrb6He70KW9O5+9DtgloE= +github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260217175957-8f1af02c5075/go.mod h1:APCV5fIW/a+JGM+Cz9yb6XyGt8ht5hISEYfpG/k4Z+k= github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0 h1:nmuT5gKyTHpsHBEJMDM1C+v1d8jR/N8Xfg3KvqJUm8U= github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0/go.mod h1:YQDu2RcdoAzI5xlhtpbjvaQQZwkUt/Q+IhLbP25M614= github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20260409184948-5b16fae57fe0 h1:y8Gpr9G/3/+zoJtYu4cXmZPEx6plXD3P4Rwp/qFbtY8= 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 1af37743151..23d4629353d 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 @@ -4,8 +4,8 @@ go 1.26.2 require ( github.com/ethereum/go-ethereum v1.17.1 - github.com/smartcontractkit/chain-selectors v1.0.98 - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420210428-afd603dd8f5c + github.com/smartcontractkit/chain-selectors v1.0.97 + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260401185621-720567ef9343 github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250806152407-159881c7589c github.com/smartcontractkit/chainlink-common/pkg/workflows/sdk/v2/pb v0.0.0-20250806155403-1d805e639a0f github.com/smartcontractkit/cre-sdk-go v1.5.0 @@ -26,12 +26,12 @@ require ( github.com/cloudevents/sdk-go/v2 v2.16.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.13 // indirect + github.com/gabriel-vasile/mimetype v1.4.10 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.30.1 // indirect + github.com/go-playground/validator/v10 v10.28.0 // indirect github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect @@ -55,8 +55,8 @@ require ( 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-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect - github.com/smartcontractkit/libocr v0.0.0-20260403184524-b6409238958d // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260326111235-8c09d1a4491f // indirect + github.com/smartcontractkit/libocr v0.0.0-20260304194147-a03701e2c02e // indirect github.com/stretchr/testify v1.11.1 // indirect github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect @@ -67,7 +67,7 @@ require ( go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.13.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 // 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 fde425ba577..c34c7c513cc 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 @@ -26,8 +26,8 @@ github.com/dominikbraun/graph v0.23.0 h1:TdZB4pPqCLFxYhdyMFb1TBdFxp8XLcJfTTBQucV github.com/dominikbraun/graph v0.23.0/go.mod h1:yOjYyogZLY1LSG9E33JWZJiq5k83Qy2C6POAuiViluc= github.com/ethereum/go-ethereum v1.17.1 h1:IjlQDjgxg2uL+GzPRkygGULPMLzcYWncEI7wbaizvho= github.com/ethereum/go-ethereum v1.17.1/go.mod h1:7UWOVHL7K3b8RfVRea022btnzLCaanwHtBuH1jUCH/I= -github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= -github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= +github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0= +github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -39,8 +39,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.30.1 h1:f3zDSN/zOma+w6+1Wswgd9fLkdwy06ntQJp0BBvFG0w= -github.com/go-playground/validator/v10 v10.30.1/go.mod h1:oSuBIQzuJxL//3MelwSLD5hc2Tu889bF0Idm9Dg26cM= +github.com/go-playground/validator/v10 v10.28.0 h1:Q7ibns33JjyW48gHkuFT91qX48KG0ktULL6FgHdG688= +github.com/go-playground/validator/v10 v10.28.0/go.mod h1:GoI6I1SjPBh9p7ykNE/yj3fFYbyDOpwMn5KXd+m2hUU= github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= @@ -100,18 +100,18 @@ github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6Ng github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chain-selectors v1.0.98 h1:fuI7CQ1o5cX64eO4/LvwtfhdpGFH5vnsM/bFHRwEiww= -github.com/smartcontractkit/chain-selectors v1.0.98/go.mod h1:qy7whtgG5g+7z0jt0nRyii9bLND9m15NZTzuQPkMZ5w= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420210428-afd603dd8f5c h1:iEEZ+pi1z1ii4iTWBymkZ4W0ba2yxoiba8+ejgVZ1t8= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420210428-afd603dd8f5c/go.mod h1:Ukc8qY13EcRcSQv6ZBmTKl0YE6F8uE5lj4zsX5aXvXM= +github.com/smartcontractkit/chain-selectors v1.0.97 h1:ECOin+SkJv2MUrfqTUu28J0kub04Epds5NPMHERfGjo= +github.com/smartcontractkit/chain-selectors v1.0.97/go.mod h1:qy7whtgG5g+7z0jt0nRyii9bLND9m15NZTzuQPkMZ5w= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260401185621-720567ef9343 h1:hB/4b6UVS4gO4U+DB8ngBAluyV4soIgtEJp5q5gbMpA= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260401185621-720567ef9343/go.mod h1:6tlxlsiWypGdpaZI+Kz5gFm53gCAcU/pTU3PR9CiFB8= 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/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= github.com/smartcontractkit/chainlink-common/pkg/workflows/sdk/v2/pb v0.0.0-20250806155403-1d805e639a0f/go.mod h1:yMGYq2fDYWPXZjkVuzgRiZVv/NaifvQUqK7CY6kNgW0= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260326111235-8c09d1a4491f h1:8p3vE987AHM3Of1JvnNJXNE/AtWtfNvJhk3TeeAG3Qw= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260326111235-8c09d1a4491f/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/evm v0.5.0 h1:ah2+pAuLOF8DMm2Kf7JXOV/OFkzDEfCDV8hQeiduyfg= @@ -120,8 +120,8 @@ github.com/smartcontractkit/cre-sdk-go/capabilities/networking/http v1.3.0 h1:m0 github.com/smartcontractkit/cre-sdk-go/capabilities/networking/http v1.3.0/go.mod h1:QpLhMGMa//e4G9qMmmCK4NPMcadRBaWC2FDV9hniMrI= github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v1.3.0 h1:qBZ4y6qlTOynSpU1QAi2Fgr3tUZQ332b6hit9EVZqkk= github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v1.3.0/go.mod h1:Rzhy75vD3FqQo/SV6lypnxIwjWac6IOWzI5BYj3tYMU= -github.com/smartcontractkit/libocr v0.0.0-20260403184524-b6409238958d h1:PvXor5Fjer7FIONSqYXbpd1LkA14hWrlAyxXzOrC9t8= -github.com/smartcontractkit/libocr v0.0.0-20260403184524-b6409238958d/go.mod h1:PLdNK6GlqfxIWXzziPkU7dCAVlVFeYkyyW7AQY0R+4Q= +github.com/smartcontractkit/libocr v0.0.0-20260304194147-a03701e2c02e h1:poXTj5cFVM6XfC4HICIDYkDVc/A6OYB0eeID0wU2JQE= +github.com/smartcontractkit/libocr v0.0.0-20260304194147-a03701e2c02e/go.mod h1:PLdNK6GlqfxIWXzziPkU7dCAVlVFeYkyyW7AQY0R+4Q= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= @@ -148,8 +148,8 @@ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0 h1:w1K go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0/go.mod h1:HBy4BjzgVE8139ieRI75oXm3EcDN+6GhD88JT1Kjvxg= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 h1:mq/Qcf28TWz719lE3/hMB4KkyDuLJIvgJnFGcd0kEUI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0/go.mod h1:yk5LXEYhsL2htyDNJbEq7fWzNEigeEdV5xBF/Y+kAv0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 h1:EtFWSnwW9hGObjkIdmlnWSydO+Qs8OwzfzXLUPg4xOc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0/go.mod h1:QjUEoiGCPkvFZ/MjK6ZZfNOS6mfVEVKYE99dFhuN2LI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 h1:3iZJKlCZufyRzPzlQhUIWVmfltrXuGyfjREgGP3UUjc= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0/go.mod h1:/G+nUPfhq2e+qiXMGxMwumDrP5jtzU+mWN7/sjT2rak= go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.13.0 h1:yEX3aC9KDgvYPhuKECHbOlr5GLwH6KTjLJ1sBSkkxkc= diff --git a/system-tests/tests/go.mod b/system-tests/tests/go.mod index 422bd87f74c..adcca9764d6 100644 --- a/system-tests/tests/go.mod +++ b/system-tests/tests/go.mod @@ -58,10 +58,10 @@ require ( github.com/rs/zerolog v1.34.0 github.com/shopspring/decimal v1.4.0 github.com/smartcontractkit/chain-selectors v1.0.98 - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a - github.com/smartcontractkit/chainlink-common/keystore v1.1.0 + github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4 + github.com/smartcontractkit/chainlink-common/keystore v1.0.2 github.com/smartcontractkit/chainlink-data-streams v0.1.13 - github.com/smartcontractkit/chainlink-deployments-framework v0.96.0 + github.com/smartcontractkit/chainlink-deployments-framework v0.95.0 github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20260119171452-39c98c3b33cd github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 @@ -101,7 +101,6 @@ require ( require ( github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 // indirect - github.com/Unheilbar/anchor-go v1.0.3 // indirect github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 // indirect github.com/beevik/ntp v1.5.0 // indirect @@ -128,8 +127,6 @@ require ( github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/in-toto/attestation v1.1.2 // indirect github.com/influxdata/tdigest v0.0.2-0.20210216194612-fc98d27c9e8b // indirect - github.com/jackc/pgx/v5 v5.9.2 // indirect - github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jhump/protocompile v0.0.0-20221021153901-4f6f732835e8 // indirect github.com/klauspost/crc32 v1.3.0 // indirect github.com/mfridman/interpolate v0.0.2 // indirect @@ -145,19 +142,19 @@ require ( github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 // indirect github.com/sigstore/sigstore v1.10.4 // indirect github.com/sigstore/sigstore-go v1.1.4 // indirect - github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd // indirect + github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4 // indirect github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20260415165642-49f23e4d76cc // indirect github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc // indirect - github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3 // indirect + github.com/smartcontractkit/chainlink-ccv v0.0.0-20260408181529-b5080e662563 // indirect github.com/smartcontractkit/chainlink-protos/chainlink-ccv/committee-verifier v0.0.0-20251211142334-5c3421fe2c8d // indirect github.com/smartcontractkit/chainlink-protos/chainlink-ccv/heartbeat v0.0.0-20260115142640-f6b99095c12e // indirect github.com/smartcontractkit/chainlink-protos/chainlink-ccv/message-discovery v0.0.0-20251211142334-5c3421fe2c8d // indirect github.com/smartcontractkit/chainlink-protos/chainlink-ccv/verifier v0.0.0-20251211142334-5c3421fe2c8d // indirect github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260319180422-b5808c964785 // indirect - github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c // indirect - github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260421131224-c46cbfe7bc6c // indirect + github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863 // indirect + github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260217175957-8f1af02c5075 // indirect github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20260409184948-5b16fae57fe0 // indirect github.com/stellar/go-stellar-sdk v0.1.0 // indirect github.com/stellar/go-xdr v0.0.0-20231122183749-b53fb00bcac2 // indirect @@ -385,7 +382,7 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/gogo/status v1.1.1 // indirect github.com/golang-jwt/jwt/v4 v4.5.2 // indirect - github.com/golang-jwt/jwt/v5 v5.3.1 + github.com/golang-jwt/jwt/v5 v5.3.1 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v1.0.0 // indirect github.com/google/btree v1.1.3 // indirect @@ -461,6 +458,7 @@ require ( github.com/jackc/pgproto3/v2 v2.3.3 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgtype v1.14.4 // indirect + github.com/jackc/pgx/v4 v4.18.3 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jaegertracing/jaeger-idl v0.6.0 // indirect github.com/jinzhu/copier v0.4.0 // indirect @@ -601,7 +599,7 @@ require ( github.com/smartcontractkit/ccip-owner-contracts v0.1.0 // indirect github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65 github.com/smartcontractkit/chainlink-automation v0.8.1 // indirect - github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa // indirect + github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de // indirect github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20251211140724-319861e514c4 github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03 // indirect github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 // indirect @@ -630,7 +628,7 @@ require ( github.com/smartcontractkit/mcms v0.41.1 // indirect github.com/smartcontractkit/smdkg v0.0.0-20251029093710-c38905e58aeb // indirect github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20241009055228-33d0c0bf38de // indirect - github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20251120172354-e8ec0386b06c + github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20251120172354-e8ec0386b06c // indirect github.com/smartcontractkit/wsrpc v0.8.5-0.20250502134807-c57d3d995945 // indirect github.com/sony/gobreaker/v2 v2.4.0 // indirect github.com/spf13/cast v1.10.0 // indirect diff --git a/system-tests/tests/go.sum b/system-tests/tests/go.sum index 517164d85eb..c61d3a97f02 100644 --- a/system-tests/tests/go.sum +++ b/system-tests/tests/go.sum @@ -151,8 +151,6 @@ github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMz github.com/Sereal/Sereal/Go/sereal v0.0.0-20231009093132-b9187f1a92c6/go.mod h1:JwrycNnC8+sZPDyzM3MQ86LvaGzSpfxg885KOOwFRW4= github.com/TyphonHill/go-mermaid v1.0.0 h1:VtmgQwgZA+KNHJvG/O591ibBVuDkGhg2+F/olVXnXAs= github.com/TyphonHill/go-mermaid v1.0.0/go.mod h1:BqMEbKnr2HHpZ4lJJvGjL47v6rZAUpJcOaE/db1Ppwc= -github.com/Unheilbar/anchor-go v1.0.3 h1:rIZ9FU7L+OazdTR+FB6Q2Fe65LvsDXA649vR3LJRJl0= -github.com/Unheilbar/anchor-go v1.0.3/go.mod h1:v5AdT7FpHKNcIppfr3bix/ZP3Kr8oOzmxSxEWsCMEd0= github.com/VictoriaMetrics/fastcache v1.13.0 h1:AW4mheMR5Vd9FkAPUv+NH6Nhw+fmbTMGMsNAoA/+4G0= github.com/VictoriaMetrics/fastcache v1.13.0/go.mod h1:hHXhl4DA2fTL2HTZDJFXWgW0LNjo6B+4aj2Wmng3TjU= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= @@ -405,6 +403,7 @@ github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 h1:6xNmx7iTtyBRev0+D/Tv1FZd4SCg8axKApyNyRsAt/w= github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5/go.mod h1:KdCmV+x/BuvyMxRnYBlmVaq4OLiKW6iRQfvC62cvdkI= +github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= @@ -1219,14 +1218,10 @@ github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgS github.com/jackc/pgx/v4 v4.18.2/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= github.com/jackc/pgx/v4 v4.18.3 h1:dE2/TrEsGX3RBprb3qryqSV9Y60iZN1C6i8IrmW9/BA= github.com/jackc/pgx/v4 v4.18.3/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= -github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= -github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= -github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jaegertracing/jaeger-idl v0.6.0 h1:LOVQfVby9ywdMPI9n3hMwKbyLVV3BL1XH2QqsP5KTMk= @@ -1816,10 +1811,10 @@ github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65 h github.com/smartcontractkit/chainlink-aptos v0.0.0-20260407161350-a86b1969da65/go.mod h1:BbVsx2VcwSVWkd0C5TcAkQBnFaeYFnogJgUa9BUla18= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa h1:GE4B480m+/OMgkmZ9mEI1Abh927N7oW+Ruq9uuKIFQw= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260423164805-f44aeafa2aaa/go.mod h1:1XxxpkgCmG/z6y30yRuVrcxre6zixIVX3xzi706Db/8= -github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd h1:Jtw6p5iisjXZyFOcBvWh6PDQKtvryrRU2JMmezdutjo= -github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260408145530-22e2d05695cd/go.mod h1:zLqdD2kBX7NsntBneclb2yrHhjFaJdoyA8dK5eimlrE= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de h1:coysmw4zHm6TLOZawoe2h0hHh/25ft+hq9+9mRNkqTs= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260417153334-3b564ef614de/go.mod h1:1XxxpkgCmG/z6y30yRuVrcxre6zixIVX3xzi706Db/8= +github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4 h1:b6IxxglkWivZ5nfYdYkHF4w0l2BJyEmSdyMYRm47aB4= +github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260406180811-0ec22f0243a4/go.mod h1:zLqdD2kBX7NsntBneclb2yrHhjFaJdoyA8dK5eimlrE= github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc h1:dP1ERzdTbiJbHVXfHYdBAi1+8NjgkyQuY2oFNWWWDsQ= github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:7XR5wfgT8hjSsiV+t0EAWvna+rYQeMPaoZf/0g+dios= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc h1:mvobZx5JV5PhG/9IXPReV+8mAGnupl0HIWQZ43zxzd4= @@ -1828,20 +1823,20 @@ 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-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc h1:entc0pB4VQEkhJf/ymOfnUh6zcu1sj1OU4YW3iPEW4s= github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:Ex2OUp35VJuCcRAjuBKwP+cevEPOSjy1pZXm3ncV4kQ= -github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3 h1:NTvhSs8sh0ZYr3JUw8GvPZcLQaeh6t2nleKg7hfnOnQ= -github.com/smartcontractkit/chainlink-ccv v0.0.0-20260423133643-8d6a915c04b3/go.mod h1:sJeU9at/+chXZfh7io5HzW6C3fgDxjpEB6U1dsS+BnE= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a h1:mUEbGLi++YLS6nd6oaFHZ9tAqw0t2ojLu1cZAjCoZmU= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260422075950-29f37fa83c8a/go.mod h1:ohOxnxpzD382PS3nN4zhdJmWD+rsBh8zTLGGHhTdJCE= -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-ccv v0.0.0-20260408181529-b5080e662563 h1:1sYQ2lG3zbAG2vASNF5kLke8DhGk5lNaJirwPDx3Vi4= +github.com/smartcontractkit/chainlink-ccv v0.0.0-20260408181529-b5080e662563/go.mod h1:nEuyjUh4wrK6mNXEAaOncl/AhCl31oaxOS160gNW0vc= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4 h1:/b6wjxXU3XhXw8iEmK2FLXp+etK1oD5MK5BedfsFC7U= +github.com/smartcontractkit/chainlink-common v0.11.2-0.20260420212628-f5928e7d3aa4/go.mod h1:Ukc8qY13EcRcSQv6ZBmTKl0YE6F8uE5lj4zsX5aXvXM= +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.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/monitoring v0.0.0-20251215152504-b1e41f508340 h1:PsjEI+5jZIz9AS4eOsLS5VpSWJINf38clXV3wryPyMk= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20251215152504-b1e41f508340/go.mod h1:P/0OSXUlFaxxD4B/P6HWbxYtIRmmWGDJAvanq19879c= github.com/smartcontractkit/chainlink-data-streams v0.1.13 h1:YOmt545DW6U0SyaqBf+NTGDLm1yMurVI7yOvxP5hlJk= github.com/smartcontractkit/chainlink-data-streams v0.1.13/go.mod h1:00aL7OK0BJdF9gn/4t4f/pctUu2VLwwfA8G/tl9rCrM= -github.com/smartcontractkit/chainlink-deployments-framework v0.96.0 h1:dwdKdXGDfzIwg1/PxQ3YxaeaFplyOtL+EPGtFPVGRmM= -github.com/smartcontractkit/chainlink-deployments-framework v0.96.0/go.mod h1:vjdYbQDNUd3IznXuxv5Gm7VZB804TKOqjNo1BhFOUDk= +github.com/smartcontractkit/chainlink-deployments-framework v0.95.0 h1:PHncc++Xk9OIP7JDiCvpqdMdP85YZWKQCpnRR7l477g= +github.com/smartcontractkit/chainlink-deployments-framework v0.95.0/go.mod h1:pTA1JrdlMSfb9WkrIfphq2KV/+paW7GHf15Oc/uJBxs= github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03 h1:z+Au1CpZhVYpn7mkmG/mYFBFkdZoqibQ3LngEHm8Fqs= github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260416173445-80f6efde0a03/go.mod h1:6vCMfxz7cMW0wWseNKtct+b1JJbbRVJJhh/t6pQWN3M= github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 h1:QJiXTG9CmaQAuMRn5JGi+Jhji7fSkehVnKpjc8oNJJY= @@ -1890,10 +1885,10 @@ github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c github.com/smartcontractkit/chainlink-protos/svr v1.1.1-0.20260203131522-bb8bc5c423b3/go.mod h1:TcOliTQU6r59DwG4lo3U+mFM9WWyBHGuFkkxQpvSujo= github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997 h1:W0HKHO8eE8BckTRnhSdqjHKbJcnk068nEWYnWRu6tJY= github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260323124644-faea187e6997/go.mod h1:GTpDgyK0OObf7jpch6p8N281KxN92wbB8serZhU9yRc= -github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c h1:2ZdBZCZWKUMOWLtReaBBHkmDtXc0WtwcqIROHAcm3j4= -github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260421131224-c46cbfe7bc6c/go.mod h1:sUsEwLtVPBlz0wPcysaolS+HVj9cOAt4jYhwE6J8dXg= -github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260421131224-c46cbfe7bc6c h1:Hn/80PyYFrQhRlNSaq9HY4cjc/7AuP9zyWLle22t34A= -github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260421131224-c46cbfe7bc6c/go.mod h1:C5pZsbYX3qkhZTYWr1aYJi9QMfonFAun+Jl1npQ7UJA= +github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863 h1:mIvTzvbEjmotW8qsMH19g7DcZ7J6ghQbZoAIyDdOdBs= +github.com/smartcontractkit/chainlink-solana v1.1.2-0.20260416172015-a42711f2b863/go.mod h1:9lV2AZ+ylPlyB16gct6MXR4taaLh2tljljSDpPI4HkE= +github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260217175957-8f1af02c5075 h1:PcR7Zdh+Z+Dh/S4lQ1xDbnFrb6He70KW9O5+9DtgloE= +github.com/smartcontractkit/chainlink-solana/contracts v0.0.0-20260217175957-8f1af02c5075/go.mod h1:APCV5fIW/a+JGM+Cz9yb6XyGt8ht5hISEYfpG/k4Z+k= github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0 h1:nmuT5gKyTHpsHBEJMDM1C+v1d8jR/N8Xfg3KvqJUm8U= github.com/smartcontractkit/chainlink-sui v0.0.0-20260409184948-5b16fae57fe0/go.mod h1:YQDu2RcdoAzI5xlhtpbjvaQQZwkUt/Q+IhLbP25M614= github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20260409184948-5b16fae57fe0 h1:y8Gpr9G/3/+zoJtYu4cXmZPEx6plXD3P4Rwp/qFbtY8= diff --git a/system-tests/tests/regression/cre/consensus/go.mod b/system-tests/tests/regression/cre/consensus/go.mod index 545ab1b278a..846bd13cb59 100644 --- a/system-tests/tests/regression/cre/consensus/go.mod +++ b/system-tests/tests/regression/cre/consensus/go.mod @@ -17,9 +17,9 @@ require ( github.com/holiman/uint256 v1.3.2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 // indirect github.com/stretchr/testify v1.11.1 // indirect - golang.org/x/sys v0.42.0 // indirect + golang.org/x/sys v0.41.0 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect ) diff --git a/system-tests/tests/regression/cre/consensus/go.sum b/system-tests/tests/regression/cre/consensus/go.sum index cbfd10ae413..a9eb91ed1ea 100644 --- a/system-tests/tests/regression/cre/consensus/go.sum +++ b/system-tests/tests/regression/cre/consensus/go.sum @@ -29,16 +29,16 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.10.0 h1:g7UrVaNKVEmIhVkJTk4f8raCM8Kp/RTFnAT64wqNmTY= github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.10.0/go.mod h1:PWyrIw16It4TSyq6mDXqmSR0jF2evZRKuBxu7pK1yDw= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= +golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/system-tests/tests/regression/cre/evm/evmread-negative/go.mod b/system-tests/tests/regression/cre/evm/evmread-negative/go.mod index 1c0f32d320a..21d1cb126e9 100644 --- a/system-tests/tests/regression/cre/evm/evmread-negative/go.mod +++ b/system-tests/tests/regression/cre/evm/evmread-negative/go.mod @@ -5,7 +5,7 @@ go 1.26.2 require ( github.com/ethereum/go-ethereum v1.17.1 github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20251022073203-7d8ae8cf67c1 - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 github.com/smartcontractkit/cre-sdk-go v1.5.0 github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/evm v0.10.0 github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v1.3.0 @@ -35,11 +35,10 @@ require ( github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect - github.com/grafana/pyroscope-go v1.2.8 // indirect github.com/graph-gophers/graphql-go v1.5.0 // indirect github.com/holiman/uint256 v1.3.2 // indirect github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 // indirect - github.com/klauspost/compress v1.18.4 // indirect + github.com/klauspost/compress v1.18.2 // indirect github.com/klauspost/cpuid/v2 v2.2.10 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect @@ -56,8 +55,8 @@ require ( github.com/stretchr/testify v1.11.1 // indirect github.com/supranational/blst v0.3.16 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/tklauser/go-sysconf v0.3.16 // indirect - github.com/tklauser/numcpus v0.11.0 // indirect + github.com/tklauser/go-sysconf v0.3.15 // indirect + github.com/tklauser/numcpus v0.10.0 // indirect github.com/urfave/cli/v2 v2.27.7 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect @@ -65,9 +64,9 @@ require ( go.opentelemetry.io/otel/metric v1.43.0 // indirect go.opentelemetry.io/otel/sdk v1.43.0 // indirect go.opentelemetry.io/otel/trace v1.43.0 // indirect - golang.org/x/crypto v0.49.0 // indirect + golang.org/x/crypto v0.48.0 // indirect golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa // indirect - golang.org/x/net v0.52.0 // indirect + golang.org/x/net v0.50.0 // indirect golang.org/x/sync v0.20.0 // indirect golang.org/x/sys v0.42.0 // indirect golang.org/x/time v0.14.0 // indirect diff --git a/system-tests/tests/regression/cre/evm/evmread-negative/go.sum b/system-tests/tests/regression/cre/evm/evmread-negative/go.sum index f7ec42f903c..1d7cb1ad5db 100644 --- a/system-tests/tests/regression/cre/evm/evmread-negative/go.sum +++ b/system-tests/tests/regression/cre/evm/evmread-negative/go.sum @@ -121,8 +121,8 @@ github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grafana/pyroscope-go v1.2.8 h1:UvCwIhlx9DeV7F6TW/z8q1Mi4PIm3vuUJ2ZlCEvmA4M= -github.com/grafana/pyroscope-go v1.2.8/go.mod h1:SSi59eQ1/zmKoY/BKwa5rSFsJaq+242Bcrr4wPix1g8= +github.com/grafana/pyroscope-go v1.2.7 h1:VWBBlqxjyR0Cwk2W6UrE8CdcdD80GOFNutj0Kb1T8ac= +github.com/grafana/pyroscope-go v1.2.7/go.mod h1:o/bpSLiJYYP6HQtvcoVKiE9s5RiNgjYTj1DhiddP2Pc= github.com/grafana/pyroscope-go/godeltaprof v0.1.9 h1:c1Us8i6eSmkW+Ez05d3co8kasnuOY813tbMN8i/a3Og= github.com/grafana/pyroscope-go/godeltaprof v0.1.9/go.mod h1:2+l7K7twW49Ct4wFluZD3tZ6e0SjanjcUUBPVD/UuGU= github.com/graph-gophers/graphql-go v1.5.0 h1:fDqblo50TEpD0LY7RXk/LFVYEVqo3+tXMNMPSVXA1yc= @@ -147,8 +147,8 @@ github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsD github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= -github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk= +github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -241,8 +241,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-evm/gethwrappers v0.0.0-20251022073203-7d8ae8cf67c1 h1:NTODgwAil7BLoijS7y6KnEuNbQ9v60VUhIR9FcAzIhg= github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20251022073203-7d8ae8cf67c1/go.mod h1:oyfOm4k0uqmgZIfxk1elI/59B02shbbJQiiUdPdbMgI= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/evm v0.10.0 h1:G0w0cLzHy/5m74IzSGz1Ynjffym4ZxLeUrRLp8EFP5w= @@ -265,10 +265,10 @@ github.com/supranational/blst v0.3.16 h1:bTDadT+3fK497EvLdWRQEjiGnUtzJ7jjIUMF0jq github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= -github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYICU0nA= -github.com/tklauser/go-sysconf v0.3.16/go.mod h1:/qNL9xxDhc7tx3HSRsLWNnuzbVfh3e7gh/BmM179nYI= -github.com/tklauser/numcpus v0.11.0 h1:nSTwhKH5e1dMNsCdVBukSZrURJRoHbSEQjdEbY+9RXw= -github.com/tklauser/numcpus v0.11.0/go.mod h1:z+LwcLq54uWZTX0u/bGobaV34u6V7KNlTZejzM6/3MQ= +github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4= +github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4= +github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso= +github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ= github.com/urfave/cli/v2 v2.27.7 h1:bH59vdhbjLv3LAvIu6gd0usJHgoTTPhCFib8qqOwXYU= github.com/urfave/cli/v2 v2.27.7/go.mod h1:CyNAG/xg+iAOg0N4MPGZqVmv2rCoP267496AOXUZjA4= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= @@ -303,8 +303,8 @@ golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWP golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= -golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= +golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= +golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa h1:Zt3DZoOFFYkKhDT3v7Lm9FDMEV06GpzjG2jrqW+QTE0= golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa/go.mod h1:K79w1Vqn7PoiZn+TkNpx3BUWUQksGO3JcVX6qIjytmA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -326,8 +326,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= -golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -383,8 +383,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= -golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= diff --git a/system-tests/tests/regression/cre/evm/evmwrite-negative/go.mod b/system-tests/tests/regression/cre/evm/evmwrite-negative/go.mod index 2fe10c2104b..68139e07852 100644 --- a/system-tests/tests/regression/cre/evm/evmwrite-negative/go.mod +++ b/system-tests/tests/regression/cre/evm/evmwrite-negative/go.mod @@ -18,9 +18,9 @@ require ( github.com/holiman/uint256 v1.3.2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 // indirect github.com/stretchr/testify v1.11.1 // indirect - golang.org/x/sys v0.42.0 // indirect + golang.org/x/sys v0.41.0 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect ) diff --git a/system-tests/tests/regression/cre/evm/evmwrite-negative/go.sum b/system-tests/tests/regression/cre/evm/evmwrite-negative/go.sum index ccbf4b492c5..828da1adae7 100644 --- a/system-tests/tests/regression/cre/evm/evmwrite-negative/go.sum +++ b/system-tests/tests/regression/cre/evm/evmwrite-negative/go.sum @@ -29,8 +29,8 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/evm v0.10.0 h1:G0w0cLzHy/5m74IzSGz1Ynjffym4ZxLeUrRLp8EFP5w= @@ -39,8 +39,8 @@ github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v1.3.0 h1:qBZ github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v1.3.0/go.mod h1:Rzhy75vD3FqQo/SV6lypnxIwjWac6IOWzI5BYj3tYMU= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= +golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/system-tests/tests/regression/cre/evm/logtrigger-negative/go.mod b/system-tests/tests/regression/cre/evm/logtrigger-negative/go.mod index 200e71979d7..5f7a145d8cc 100644 --- a/system-tests/tests/regression/cre/evm/logtrigger-negative/go.mod +++ b/system-tests/tests/regression/cre/evm/logtrigger-negative/go.mod @@ -13,7 +13,7 @@ require ( github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 // indirect github.com/stretchr/testify v1.11.1 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/system-tests/tests/regression/cre/evm/logtrigger-negative/go.sum b/system-tests/tests/regression/cre/evm/logtrigger-negative/go.sum index c8426f09994..43dc2a18fb1 100644 --- a/system-tests/tests/regression/cre/evm/logtrigger-negative/go.sum +++ b/system-tests/tests/regression/cre/evm/logtrigger-negative/go.sum @@ -8,8 +8,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/evm v0.10.0 h1:G0w0cLzHy/5m74IzSGz1Ynjffym4ZxLeUrRLp8EFP5w= diff --git a/system-tests/tests/regression/cre/http/go.mod b/system-tests/tests/regression/cre/http/go.mod index 0b6feec0299..126233865a6 100644 --- a/system-tests/tests/regression/cre/http/go.mod +++ b/system-tests/tests/regression/cre/http/go.mod @@ -14,6 +14,6 @@ require ( github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 // indirect github.com/stretchr/testify v1.11.1 // indirect ) diff --git a/system-tests/tests/regression/cre/http/go.sum b/system-tests/tests/regression/cre/http/go.sum index 702028391fd..ed8b59169ca 100644 --- a/system-tests/tests/regression/cre/http/go.sum +++ b/system-tests/tests/regression/cre/http/go.sum @@ -8,8 +8,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/networking/http v1.3.0 h1:m0OkXuaLtIcYvBrLtxSfygrGtBJvPwaSoANe48434BA= diff --git a/system-tests/tests/regression/cre/httpaction-negative/go.mod b/system-tests/tests/regression/cre/httpaction-negative/go.mod index 69eebf3ee5c..62944ca95ca 100644 --- a/system-tests/tests/regression/cre/httpaction-negative/go.mod +++ b/system-tests/tests/regression/cre/httpaction-negative/go.mod @@ -17,7 +17,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 // indirect github.com/stretchr/testify v1.11.1 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect ) diff --git a/system-tests/tests/regression/cre/httpaction-negative/go.sum b/system-tests/tests/regression/cre/httpaction-negative/go.sum index 164bf24149d..f69a82f56e2 100644 --- a/system-tests/tests/regression/cre/httpaction-negative/go.sum +++ b/system-tests/tests/regression/cre/httpaction-negative/go.sum @@ -20,8 +20,8 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/networking/http v1.3.0 h1:m0OkXuaLtIcYvBrLtxSfygrGtBJvPwaSoANe48434BA= diff --git a/system-tests/tests/smoke/cre/aptos/aptosread/go.mod b/system-tests/tests/smoke/cre/aptos/aptosread/go.mod index 68d63b55563..92eaeaa1e11 100644 --- a/system-tests/tests/smoke/cre/aptos/aptosread/go.mod +++ b/system-tests/tests/smoke/cre/aptos/aptosread/go.mod @@ -1,6 +1,6 @@ module github.com/smartcontractkit/chainlink/system-tests/tests/smoke/cre/aptos/aptosread -go 1.25.7 +go 1.25.5 require ( github.com/smartcontractkit/cre-sdk-go v1.4.1-0.20260312154349-ecb4cb615f37 @@ -11,10 +11,10 @@ require ( require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/go-viper/mapstructure/v2 v2.5.0 // indirect + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260325181729-0cac87f98cd4 // indirect github.com/stretchr/testify v1.11.1 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/system-tests/tests/smoke/cre/aptos/aptosread/go.sum b/system-tests/tests/smoke/cre/aptos/aptosread/go.sum index fe4661c30c6..32c4532781c 100644 --- a/system-tests/tests/smoke/cre/aptos/aptosread/go.sum +++ b/system-tests/tests/smoke/cre/aptos/aptosread/go.sum @@ -1,15 +1,15 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= -github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260325181729-0cac87f98cd4 h1:kqdSsgt2OzJnAk0io8GsA2lJE5hKlLM2EY4uy+R6H9Y= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260325181729-0cac87f98cd4/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.4.1-0.20260312154349-ecb4cb615f37 h1:+awsWWPj1CWtvcDwU8QAkUvljo/YYpnKGDrZc2afYls= github.com/smartcontractkit/cre-sdk-go v1.4.1-0.20260312154349-ecb4cb615f37/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/aptos v0.0.0-20260312154349-ecb4cb615f37 h1:UNem52lhklNEp4VdPBYHN+p1wgG0vDYEKSvonQgV+3o= diff --git a/system-tests/tests/smoke/cre/aptos/aptoswrite/go.mod b/system-tests/tests/smoke/cre/aptos/aptoswrite/go.mod index eadce046672..588331939b0 100644 --- a/system-tests/tests/smoke/cre/aptos/aptoswrite/go.mod +++ b/system-tests/tests/smoke/cre/aptos/aptoswrite/go.mod @@ -1,9 +1,9 @@ module github.com/smartcontractkit/chainlink/system-tests/tests/smoke/cre/aptos/aptoswrite -go 1.25.7 +go 1.25.5 require ( - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260325181729-0cac87f98cd4 github.com/smartcontractkit/cre-sdk-go v1.4.1-0.20260312154349-ecb4cb615f37 github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/aptos v0.0.0-20260312154349-ecb4cb615f37 github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.10.0 @@ -12,7 +12,7 @@ require ( require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/go-viper/mapstructure/v2 v2.5.0 // indirect + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/stretchr/testify v1.11.1 // indirect diff --git a/system-tests/tests/smoke/cre/aptos/aptoswrite/go.sum b/system-tests/tests/smoke/cre/aptos/aptoswrite/go.sum index fe4661c30c6..32c4532781c 100644 --- a/system-tests/tests/smoke/cre/aptos/aptoswrite/go.sum +++ b/system-tests/tests/smoke/cre/aptos/aptoswrite/go.sum @@ -1,15 +1,15 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= -github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260325181729-0cac87f98cd4 h1:kqdSsgt2OzJnAk0io8GsA2lJE5hKlLM2EY4uy+R6H9Y= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260325181729-0cac87f98cd4/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.4.1-0.20260312154349-ecb4cb615f37 h1:+awsWWPj1CWtvcDwU8QAkUvljo/YYpnKGDrZc2afYls= github.com/smartcontractkit/cre-sdk-go v1.4.1-0.20260312154349-ecb4cb615f37/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/aptos v0.0.0-20260312154349-ecb4cb615f37 h1:UNem52lhklNEp4VdPBYHN+p1wgG0vDYEKSvonQgV+3o= diff --git a/system-tests/tests/smoke/cre/aptos/aptoswriteroundtrip/go.mod b/system-tests/tests/smoke/cre/aptos/aptoswriteroundtrip/go.mod index ab05b90fd65..3acde03e5a6 100644 --- a/system-tests/tests/smoke/cre/aptos/aptoswriteroundtrip/go.mod +++ b/system-tests/tests/smoke/cre/aptos/aptoswriteroundtrip/go.mod @@ -1,9 +1,9 @@ module github.com/smartcontractkit/chainlink/system-tests/tests/smoke/cre/aptos/aptoswriteroundtrip -go 1.25.7 +go 1.25.5 require ( - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260325181729-0cac87f98cd4 github.com/smartcontractkit/cre-sdk-go v1.4.1-0.20260312154349-ecb4cb615f37 github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/aptos v0.0.0-20260312154349-ecb4cb615f37 github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.10.0 @@ -12,7 +12,7 @@ require ( require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/go-viper/mapstructure/v2 v2.5.0 // indirect + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/stretchr/testify v1.11.1 // indirect diff --git a/system-tests/tests/smoke/cre/aptos/aptoswriteroundtrip/go.sum b/system-tests/tests/smoke/cre/aptos/aptoswriteroundtrip/go.sum index fe4661c30c6..32c4532781c 100644 --- a/system-tests/tests/smoke/cre/aptos/aptoswriteroundtrip/go.sum +++ b/system-tests/tests/smoke/cre/aptos/aptoswriteroundtrip/go.sum @@ -1,15 +1,15 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= -github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260325181729-0cac87f98cd4 h1:kqdSsgt2OzJnAk0io8GsA2lJE5hKlLM2EY4uy+R6H9Y= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260325181729-0cac87f98cd4/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.4.1-0.20260312154349-ecb4cb615f37 h1:+awsWWPj1CWtvcDwU8QAkUvljo/YYpnKGDrZc2afYls= github.com/smartcontractkit/cre-sdk-go v1.4.1-0.20260312154349-ecb4cb615f37/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/aptos v0.0.0-20260312154349-ecb4cb615f37 h1:UNem52lhklNEp4VdPBYHN+p1wgG0vDYEKSvonQgV+3o= diff --git a/system-tests/tests/smoke/cre/cre_suite_test.go b/system-tests/tests/smoke/cre/cre_suite_test.go index 9a4c28fe64e..e039bfbe083 100644 --- a/system-tests/tests/smoke/cre/cre_suite_test.go +++ b/system-tests/tests/smoke/cre/cre_suite_test.go @@ -144,43 +144,8 @@ func runV2SuiteScenario(t *testing.T, topology string, scenario v2suite_config.S if parallelEnabled { t.Parallel() } - allowlistSubtestName := "allowlist_auth_when_jwt_auth_disabled" - jwtSubtestName := "jwt_auth_rejected_when_jwt_auth_disabled" - vaultConfig := getVaultDefaultTestConfig(t) - if isVaultJWTAuthEnabledTopology(topology) { - vaultConfig = getVaultJWTAuthEnabledTestConfig(t) - allowlistSubtestName = "allowlist_auth_when_jwt_auth_enabled" - jwtSubtestName = "jwt_auth_when_jwt_auth_enabled" - } - fixture := setupVaultSharedScenarioFixture(t, vaultConfig) - allowlistEnv := fixture.TestEnv - jwtEnv := fixture.TestEnv - if parallelEnabled && isVaultJWTAuthEnabledTopology(topology) { - allowlistEnv = t_helpers.SetupTestEnvironmentWithPerTestKeys(t, fixture.TestEnv.TestConfig) - jwtEnv = t_helpers.SetupTestEnvironmentWithPerTestKeys(t, fixture.TestEnv.TestConfig) - } - - t.Run(allowlistSubtestName, func(t *testing.T) { - if parallelEnabled { - t.Parallel() - } - ExecuteVaultAllowListBasedTests(t, fixture, allowlistEnv) - }) - if isVaultJWTAuthEnabledTopology(topology) { - t.Run(jwtSubtestName, func(t *testing.T) { - if parallelEnabled { - t.Parallel() - } - ExecuteVaultMixedAuthTest(t, fixture, jwtEnv) - }) - return - } - t.Run(jwtSubtestName, func(t *testing.T) { - if parallelEnabled { - t.Parallel() - } - ExecuteVaultJWTDisabledTest(t, fixture) - }) + testEnv := t_helpers.SetupTestEnvironmentWithPerTestKeys(t, t_helpers.GetDefaultTestConfig(t)) + ExecuteVaultTest(t, testEnv) }) case v2suite_config.SuiteScenarioCronBeholder: // NOTE: this test is not easily parallelisable, because it uses "real" ChIP Ingress stack diff --git a/system-tests/tests/smoke/cre/evm/evmread/go.mod b/system-tests/tests/smoke/cre/evm/evmread/go.mod index bc14cb9eaeb..8d6aab8a2e8 100644 --- a/system-tests/tests/smoke/cre/evm/evmread/go.mod +++ b/system-tests/tests/smoke/cre/evm/evmread/go.mod @@ -5,7 +5,7 @@ go 1.26.2 require ( github.com/ethereum/go-ethereum v1.17.1 github.com/google/go-cmp v0.7.0 - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 github.com/smartcontractkit/cre-sdk-go v1.5.0 github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/evm v0.10.0 github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v1.3.0 @@ -37,11 +37,10 @@ require ( github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect - github.com/grafana/pyroscope-go v1.2.8 // indirect github.com/graph-gophers/graphql-go v1.5.0 // indirect github.com/holiman/uint256 v1.3.2 // indirect github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 // indirect - github.com/klauspost/compress v1.18.4 // indirect + github.com/klauspost/compress v1.18.2 // indirect github.com/klauspost/cpuid/v2 v2.2.10 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect @@ -57,8 +56,8 @@ require ( github.com/shopspring/decimal v1.4.0 // indirect github.com/supranational/blst v0.3.16 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/tklauser/go-sysconf v0.3.16 // indirect - github.com/tklauser/numcpus v0.11.0 // indirect + github.com/tklauser/go-sysconf v0.3.15 // indirect + github.com/tklauser/numcpus v0.10.0 // indirect github.com/urfave/cli/v2 v2.27.7 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect @@ -66,9 +65,9 @@ require ( go.opentelemetry.io/otel/metric v1.43.0 // indirect go.opentelemetry.io/otel/sdk v1.43.0 // indirect go.opentelemetry.io/otel/trace v1.43.0 // indirect - golang.org/x/crypto v0.49.0 // indirect + golang.org/x/crypto v0.48.0 // indirect golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa // indirect - golang.org/x/net v0.52.0 // indirect + golang.org/x/net v0.50.0 // indirect golang.org/x/sync v0.20.0 // indirect golang.org/x/sys v0.42.0 // indirect golang.org/x/time v0.14.0 // indirect diff --git a/system-tests/tests/smoke/cre/evm/evmread/go.sum b/system-tests/tests/smoke/cre/evm/evmread/go.sum index 9b7cbfd4985..166f431c38a 100644 --- a/system-tests/tests/smoke/cre/evm/evmread/go.sum +++ b/system-tests/tests/smoke/cre/evm/evmread/go.sum @@ -121,8 +121,8 @@ github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grafana/pyroscope-go v1.2.8 h1:UvCwIhlx9DeV7F6TW/z8q1Mi4PIm3vuUJ2ZlCEvmA4M= -github.com/grafana/pyroscope-go v1.2.8/go.mod h1:SSi59eQ1/zmKoY/BKwa5rSFsJaq+242Bcrr4wPix1g8= +github.com/grafana/pyroscope-go v1.2.7 h1:VWBBlqxjyR0Cwk2W6UrE8CdcdD80GOFNutj0Kb1T8ac= +github.com/grafana/pyroscope-go v1.2.7/go.mod h1:o/bpSLiJYYP6HQtvcoVKiE9s5RiNgjYTj1DhiddP2Pc= github.com/grafana/pyroscope-go/godeltaprof v0.1.9 h1:c1Us8i6eSmkW+Ez05d3co8kasnuOY813tbMN8i/a3Og= github.com/grafana/pyroscope-go/godeltaprof v0.1.9/go.mod h1:2+l7K7twW49Ct4wFluZD3tZ6e0SjanjcUUBPVD/UuGU= github.com/graph-gophers/graphql-go v1.5.0 h1:fDqblo50TEpD0LY7RXk/LFVYEVqo3+tXMNMPSVXA1yc= @@ -147,8 +147,8 @@ github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsD github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= -github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk= +github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -239,8 +239,8 @@ github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKl github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/evm v0.10.0 h1:G0w0cLzHy/5m74IzSGz1Ynjffym4ZxLeUrRLp8EFP5w= @@ -263,10 +263,10 @@ github.com/supranational/blst v0.3.16 h1:bTDadT+3fK497EvLdWRQEjiGnUtzJ7jjIUMF0jq github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= -github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYICU0nA= -github.com/tklauser/go-sysconf v0.3.16/go.mod h1:/qNL9xxDhc7tx3HSRsLWNnuzbVfh3e7gh/BmM179nYI= -github.com/tklauser/numcpus v0.11.0 h1:nSTwhKH5e1dMNsCdVBukSZrURJRoHbSEQjdEbY+9RXw= -github.com/tklauser/numcpus v0.11.0/go.mod h1:z+LwcLq54uWZTX0u/bGobaV34u6V7KNlTZejzM6/3MQ= +github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4= +github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4= +github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso= +github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ= github.com/urfave/cli/v2 v2.27.7 h1:bH59vdhbjLv3LAvIu6gd0usJHgoTTPhCFib8qqOwXYU= github.com/urfave/cli/v2 v2.27.7/go.mod h1:CyNAG/xg+iAOg0N4MPGZqVmv2rCoP267496AOXUZjA4= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= @@ -301,8 +301,8 @@ golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWP golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= -golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= +golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= +golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa h1:Zt3DZoOFFYkKhDT3v7Lm9FDMEV06GpzjG2jrqW+QTE0= golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa/go.mod h1:K79w1Vqn7PoiZn+TkNpx3BUWUQksGO3JcVX6qIjytmA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -324,8 +324,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= -golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -381,8 +381,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= -golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= diff --git a/system-tests/tests/smoke/cre/evm/logtrigger/go.mod b/system-tests/tests/smoke/cre/evm/logtrigger/go.mod index 1de6762e546..e4a58230a3a 100644 --- a/system-tests/tests/smoke/cre/evm/logtrigger/go.mod +++ b/system-tests/tests/smoke/cre/evm/logtrigger/go.mod @@ -18,8 +18,8 @@ require ( github.com/holiman/uint256 v1.3.2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect - golang.org/x/sys v0.42.0 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 // indirect + golang.org/x/sys v0.41.0 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect ) diff --git a/system-tests/tests/smoke/cre/evm/logtrigger/go.sum b/system-tests/tests/smoke/cre/evm/logtrigger/go.sum index 10933a6c267..c9d84cc6700 100644 --- a/system-tests/tests/smoke/cre/evm/logtrigger/go.sum +++ b/system-tests/tests/smoke/cre/evm/logtrigger/go.sum @@ -29,16 +29,16 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/evm v0.10.0 h1:G0w0cLzHy/5m74IzSGz1Ynjffym4ZxLeUrRLp8EFP5w= github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/evm v0.10.0/go.mod h1:VVJ4mvA7wOU1Ic5b/vTaBMHEUysyxd0gdPPXkAu8CmY= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= +golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/system-tests/tests/smoke/cre/httpaction/go.mod b/system-tests/tests/smoke/cre/httpaction/go.mod index 3eab6020cc6..5f6fc7df03d 100644 --- a/system-tests/tests/smoke/cre/httpaction/go.mod +++ b/system-tests/tests/smoke/cre/httpaction/go.mod @@ -17,7 +17,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 // indirect github.com/stretchr/testify v1.11.1 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect ) diff --git a/system-tests/tests/smoke/cre/httpaction/go.sum b/system-tests/tests/smoke/cre/httpaction/go.sum index 164bf24149d..f69a82f56e2 100644 --- a/system-tests/tests/smoke/cre/httpaction/go.sum +++ b/system-tests/tests/smoke/cre/httpaction/go.sum @@ -20,8 +20,8 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/networking/http v1.3.0 h1:m0OkXuaLtIcYvBrLtxSfygrGtBJvPwaSoANe48434BA= diff --git a/system-tests/tests/smoke/cre/solana/solwrite/go.mod b/system-tests/tests/smoke/cre/solana/solwrite/go.mod index 224a5f0fc74..c5969993b03 100644 --- a/system-tests/tests/smoke/cre/solana/solwrite/go.mod +++ b/system-tests/tests/smoke/cre/solana/solwrite/go.mod @@ -5,7 +5,7 @@ go 1.26.2 require ( github.com/gagliardetto/binary v0.8.0 github.com/gagliardetto/solana-go v1.14.0 - github.com/smartcontractkit/chain-selectors v1.0.98 + github.com/smartcontractkit/chain-selectors v1.0.97 github.com/smartcontractkit/cre-sdk-go v1.5.0 github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/solana v0.1.0 github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v1.3.0 @@ -20,7 +20,7 @@ require ( github.com/gagliardetto/treeout v0.1.4 // indirect github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.18.4 // indirect + github.com/klauspost/compress v1.18.2 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/logrusorgru/aurora v2.0.3+incompatible // indirect github.com/mattn/go-colorable v0.1.14 // indirect @@ -33,15 +33,15 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 // indirect github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 // indirect github.com/stretchr/testify v1.11.1 // indirect go.mongodb.org/mongo-driver v1.17.2 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.1 // indirect - golang.org/x/crypto v0.49.0 // indirect - golang.org/x/sys v0.42.0 // indirect - golang.org/x/term v0.41.0 // indirect + golang.org/x/crypto v0.48.0 // indirect + golang.org/x/sys v0.41.0 // indirect + golang.org/x/term v0.40.0 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect ) diff --git a/system-tests/tests/smoke/cre/solana/solwrite/go.sum b/system-tests/tests/smoke/cre/solana/solwrite/go.sum index 5a2ca9550ea..b88a89c119e 100644 --- a/system-tests/tests/smoke/cre/solana/solwrite/go.sum +++ b/system-tests/tests/smoke/cre/solana/solwrite/go.sum @@ -26,8 +26,8 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= -github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk= +github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -62,10 +62,10 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7 github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chain-selectors v1.0.98 h1:fuI7CQ1o5cX64eO4/LvwtfhdpGFH5vnsM/bFHRwEiww= -github.com/smartcontractkit/chain-selectors v1.0.98/go.mod h1:qy7whtgG5g+7z0jt0nRyii9bLND9m15NZTzuQPkMZ5w= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chain-selectors v1.0.97 h1:ECOin+SkJv2MUrfqTUu28J0kub04Epds5NPMHERfGjo= +github.com/smartcontractkit/chain-selectors v1.0.97/go.mod h1:qy7whtgG5g+7z0jt0nRyii9bLND9m15NZTzuQPkMZ5w= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/solana v0.1.0 h1:8AzRC735Z3vCvcEyElBq8DXv884mQE67bCp6YNGI3jY= @@ -100,8 +100,8 @@ go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= -golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= +golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= +golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -119,11 +119,11 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= +golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.41.0 h1:QCgPso/Q3RTJx2Th4bDLqML4W6iJiaXFq2/ftQF13YU= -golang.org/x/term v0.41.0/go.mod h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A= +golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= +golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/system-tests/tests/smoke/cre/v2_solana_capability_test.go b/system-tests/tests/smoke/cre/v2_solana_capability_test.go index dde99eb7f0e..2551c0b5bf0 100644 --- a/system-tests/tests/smoke/cre/v2_solana_capability_test.go +++ b/system-tests/tests/smoke/cre/v2_solana_capability_test.go @@ -14,16 +14,14 @@ import ( solgo "github.com/gagliardetto/solana-go" "github.com/gagliardetto/solana-go/rpc" chainselectors "github.com/smartcontractkit/chain-selectors" - commonevents "github.com/smartcontractkit/chainlink-protos/workflows/go/common" - workflowevents "github.com/smartcontractkit/chainlink-protos/workflows/go/events" "github.com/stretchr/testify/require" "github.com/smartcontractkit/chainlink-deployments-framework/datastore" cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" "github.com/smartcontractkit/chainlink-testing-framework/framework" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" - ks_sol "github.com/smartcontractkit/chainlink/deployment/cre/forwarder/solana" df_sol "github.com/smartcontractkit/chainlink/deployment/data-feeds/changeset/solana" + ks_sol "github.com/smartcontractkit/chainlink/deployment/keystone/changeset/solana" "github.com/smartcontractkit/chainlink/deployment/utils/solutils" "github.com/smartcontractkit/chainlink/system-tests/lib/cre/environment/blockchains" "github.com/smartcontractkit/chainlink/system-tests/lib/cre/environment/blockchains/evm" @@ -77,27 +75,11 @@ func ExecuteSolanaWriteTest(t *testing.T, tenv *configuration.TestEnvironment) { workflowConfig.WFOwner = s.WFOwner const workflowFileLocation = "./solana/solwrite/main.go" - userLogsCh := make(chan *workflowevents.UserLogs, 1000) - baseMessageCh := make(chan *commonevents.BaseMessage, 1000) - server := t_helpers.StartChipTestSink(t, t_helpers.GetPublishFn(testLogger, userLogsCh, baseMessageCh)) - t.Cleanup(func() { - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - t_helpers.ShutdownChipSinkWithDrain(ctx, server, userLogsCh, baseMessageCh) - }) - - workflowID := t_helpers.CompileAndDeployWorkflow(t, + t_helpers.CompileAndDeployWorkflow(t, tenv, testLogger, workflowName, &workflowConfig, workflowFileLocation) waitForFeedUpdate(t, solChain.SolClient, &s) - - // Emitted from solwrite/main.go after a successful solana.WriteReport (user log via WASM runtime.Logger). - const successfulExecutionUserLog = "Submitted report on-chain" - t_helpers.WatchWorkflowLogs(t, testLogger, userLogsCh, baseMessageCh, - t_helpers.WorkflowEngineInitErrorLog, successfulExecutionUserLog, - 2*time.Minute, - t_helpers.WithUserLogWorkflowID(workflowID)) } func getSolChain(t *testing.T, ds datastore.DataStore, s *setup, bcs []blockchains.Blockchain) *solana.Blockchain { diff --git a/system-tests/tests/smoke/cre/v2_vault_don_test.go b/system-tests/tests/smoke/cre/v2_vault_don_test.go index 8a29f663903..d4277dce631 100644 --- a/system-tests/tests/smoke/cre/v2_vault_don_test.go +++ b/system-tests/tests/smoke/cre/v2_vault_don_test.go @@ -2,68 +2,96 @@ package cre import ( "context" + "encoding/hex" "encoding/json" + "math/big" "math/rand" + "net/http" + "net/url" + "slices" "strconv" - "strings" "testing" "time" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" - "github.com/golang-jwt/jwt/v5" "github.com/google/uuid" "github.com/stretchr/testify/require" + "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/proto" vault_helpers "github.com/smartcontractkit/chainlink-common/pkg/capabilities/actions/vault" + capabilitiespb "github.com/smartcontractkit/chainlink-common/pkg/capabilities/pb" jsonrpc "github.com/smartcontractkit/chainlink-common/pkg/jsonrpc2" + capabilities_registry_v2 "github.com/smartcontractkit/chainlink-evm/gethwrappers/workflow/generated/capabilities_registry_wrapper_v2" + "github.com/smartcontractkit/chainlink-protos/cre/go/values" commonevents "github.com/smartcontractkit/chainlink-protos/workflows/go/common" workflowevents "github.com/smartcontractkit/chainlink-protos/workflows/go/events" + ctfblockchain "github.com/smartcontractkit/chainlink-testing-framework/framework/components/blockchain" + "github.com/smartcontractkit/chainlink-testing-framework/seth" keystone_changeset "github.com/smartcontractkit/chainlink/deployment/keystone/changeset" crecontracts "github.com/smartcontractkit/chainlink/system-tests/lib/cre/contracts" "github.com/smartcontractkit/chainlink/system-tests/lib/cre/environment/blockchains/evm" + vaultsecret_config "github.com/smartcontractkit/chainlink/system-tests/tests/smoke/cre/vaultsecret/config" t_helpers "github.com/smartcontractkit/chainlink/system-tests/tests/test-helpers" "github.com/smartcontractkit/chainlink/v2/core/capabilities/vault/vaulttypes" - "github.com/smartcontractkit/chainlink/v2/core/capabilities/vault/vaultutils" workflow_registry_v2_wrapper "github.com/smartcontractkit/chainlink-evm/gethwrappers/workflow/generated/workflow_registry_wrapper_v2" - envconfig "github.com/smartcontractkit/chainlink/system-tests/lib/cre/environment/config" + "github.com/smartcontractkit/chainlink/system-tests/lib/cre" crevault "github.com/smartcontractkit/chainlink/system-tests/lib/cre/features/vault" "github.com/smartcontractkit/chainlink/system-tests/lib/cre/vault" + creworkflow "github.com/smartcontractkit/chainlink/system-tests/lib/cre/workflow" ttypes "github.com/smartcontractkit/chainlink/system-tests/tests/test-helpers/configuration" "github.com/smartcontractkit/chainlink-testing-framework/framework" ) -func ExecuteVaultAllowListBasedTests(t *testing.T, fixture *vaultScenarioFixture, testEnv *ttypes.TestEnvironment) { +func ExecuteVaultTest(t *testing.T, testEnv *ttypes.TestEnvironment) { var testLogger = framework.L - linkingService := fixture.LinkingService - gwURL := fixture.GatewayURL.String() - vaultPublicKey := fixture.VaultPublicKey - - t.Run("allowlist_crud_with_workflow_owner_identity", func(t *testing.T) { - sc := testEnv.CreEnvironment.Blockchains[0].(*evm.Blockchain).SethClient - owner := sc.MustGetRootKeyAddress().Hex() - expectedResponseOwner := owner - orgIDAsSecretOwnerEnabled := isVaultJWTAuthEnabledTopology(testEnv.TestConfig.EnvironmentConfigPath) - if linkingService != nil { - orgID := "org" + strings.ReplaceAll(uuid.NewString(), "-", "") - linkingService.SetOwnerOrg(owner, orgID) - if orgIDAsSecretOwnerEnabled { - expectedResponseOwner = orgID + testLogger.Info().Msgf("Ensuring DKG result packages are present...") + require.Eventually(t, func() bool { + for _, nodeSet := range testEnv.Config.NodeSets { + if slices.Contains(nodeSet.Capabilities, cre.VaultCapability) { + for i, node := range nodeSet.NodeSpecs { + if !slices.Contains(node.Roles, cre.BootstrapNode) { + packageCount, err := vault.GetResultPackageCount(t.Context(), i, nodeSet.DbInput.Port) + if err != nil || packageCount != 1 { + return false + } + } + } + return true } } - wfRegAddr := crecontracts.MustGetAddressFromDataStore(testEnv.CreEnvironment.CldfEnvironment.DataStore, testEnv.CreEnvironment.Blockchains[0].ChainSelector(), keystone_changeset.WorkflowRegistry.String(), testEnv.CreEnvironment.ContractVersions[keystone_changeset.WorkflowRegistry.String()], "") + return false + }, time.Second*300, time.Second*5) + + testLogger.Info().Msg("Getting gateway configuration...") + require.NotEmpty(t, testEnv.Dons.GatewayConnectors.Configurations, "expected at least one gateway configuration") + gatewayURL, err := url.Parse(testEnv.Dons.GatewayConnectors.Configurations[0].Incoming.Protocol + "://" + testEnv.Dons.GatewayConnectors.Configurations[0].Incoming.Host + ":" + strconv.Itoa(testEnv.Dons.GatewayConnectors.Configurations[0].Incoming.ExternalPort) + testEnv.Dons.GatewayConnectors.Configurations[0].Incoming.Path) + require.NoError(t, err, "failed to parse gateway URL") + testLogger.Info().Msgf("Gateway URL: %s", gatewayURL.String()) + + vaultPublicKey := FetchVaultPublicKey(t, gatewayURL.String()) + updateVaultCapabilityConfigInRegistry(t, testEnv, vaultPublicKey) + + gwURL := gatewayURL.String() + + t.Run("basic_crud", func(t *testing.T) { + if parallelEnabled { + t.Parallel() + } + subEnv := t_helpers.SetupTestEnvironmentWithPerTestKeys(t, testEnv.TestConfig) + sc := subEnv.CreEnvironment.Blockchains[0].(*evm.Blockchain).SethClient + owner := sc.MustGetRootKeyAddress().Hex() + wfRegAddr := crecontracts.MustGetAddressFromDataStore(subEnv.CreEnvironment.CldfEnvironment.DataStore, subEnv.CreEnvironment.Blockchains[0].ChainSelector(), keystone_changeset.WorkflowRegistry.String(), subEnv.CreEnvironment.ContractVersions[keystone_changeset.WorkflowRegistry.String()], "") wfReg, err := workflow_registry_v2_wrapper.NewWorkflowRegistry(common.HexToAddress(wfRegAddr), sc.Client) require.NoError(t, err) - requireVaultLinkOwner(t, sc, common.HexToAddress(wfRegAddr), testEnv.CreEnvironment.ContractVersions[keystone_changeset.WorkflowRegistry.String()]) + require.NoError(t, creworkflow.LinkOwner(sc, common.HexToAddress(wfRegAddr), subEnv.CreEnvironment.ContractVersions[keystone_changeset.WorkflowRegistry.String()])) secretID := strconv.Itoa(rand.Intn(10000)) - createValue := "secret-basic-create" - updateValue := "secret-basic-update" - createEnc, err := crevault.EncryptSecret(createValue, vaultPublicKey, sc.MustGetRootKeyAddress()) - require.NoError(t, err) - updateEnc, err := crevault.EncryptSecret(updateValue, vaultPublicKey, sc.MustGetRootKeyAddress()) + enc, err := crevault.EncryptSecret("secret-basic", vaultPublicKey, sc.MustGetRootKeyAddress()) require.NoError(t, err) ulCh := make(chan *workflowevents.UserLogs, 1000) bmCh := make(chan *commonevents.BaseMessage, 1000) @@ -76,283 +104,518 @@ func ExecuteVaultAllowListBasedTests(t *testing.T, fixture *vaultScenarioFixture }) namespaces := []string{"main", "alt"} - executeVaultAllowListSecretsCreateTest(t, createEnc, secretID, owner, expectedResponseOwner, gwURL, namespaces, sc, wfReg) - executeVaultSecretsUpdateTest(t, updateEnc, secretID, owner, expectedResponseOwner, gwURL, namespaces, sc, wfReg) - executeVaultSecretsListTest(t, secretID, owner, expectedResponseOwner, gwURL, "main", sc, wfReg) - executeVaultSecretsListTest(t, secretID, owner, expectedResponseOwner, gwURL, "alt", sc, wfReg) - executeVaultSecretsDeleteTest(t, secretID, owner, expectedResponseOwner, gwURL, []string{"main"}, sc, wfReg) - executeVaultSecretsWorkflowChecksTest(t, testEnv, "allowlist-final-verify", []vaultWorkflowCheck{ - {Name: "allowlist-main-not-found", SecretKey: secretID, SecretNamespace: "main", ExpectNotFound: true}, - {Name: "allowlist-alt-updated", SecretKey: secretID, SecretNamespace: "alt", ExpectedValue: updateValue}, - }, ulCh, bmCh) - executeVaultSecretsDeleteTest(t, secretID, owner, expectedResponseOwner, gwURL, []string{"alt"}, sc, wfReg) + executeVaultSecretsCreateTest(t, enc, secretID, owner, gwURL, namespaces, sc, wfReg) + executeVaultSecretsGetViaWorkflowTest(t, subEnv, "bget1", secretID, "main", ulCh, bmCh) + executeVaultSecretsGetViaWorkflowTest(t, subEnv, "bgeta1", secretID, "alt", ulCh, bmCh) + executeVaultSecretsUpdateTest(t, enc, secretID, owner, gwURL, namespaces, sc, wfReg) + executeVaultSecretsGetViaWorkflowTest(t, subEnv, "bget2", secretID, "main", ulCh, bmCh) + executeVaultSecretsGetViaWorkflowTest(t, subEnv, "bgeta2", secretID, "alt", ulCh, bmCh) + executeVaultSecretsListTest(t, secretID, owner, gwURL, "main", sc, wfReg) + executeVaultSecretsListTest(t, secretID, owner, gwURL, "alt", sc, wfReg) + executeVaultSecretsDeleteTest(t, secretID, owner, gwURL, []string{"main"}, sc, wfReg) + executeVaultSecretsGetNotFoundViaWorkflowTest(t, subEnv, "bdel1", secretID, "main", ulCh, bmCh) + executeVaultSecretsGetViaWorkflowTest(t, subEnv, "bgeta3", secretID, "alt", ulCh, bmCh) + executeVaultSecretsDeleteTest(t, secretID, owner, gwURL, []string{"alt"}, sc, wfReg) + executeVaultSecretsGetNotFoundViaWorkflowTest(t, subEnv, "bdela1", secretID, "alt", ulCh, bmCh) }) } -func ExecuteVaultMixedAuthTest(t *testing.T, fixture *vaultScenarioFixture, testEnv *ttypes.TestEnvironment) { +func executeVaultSecretsCreateTest(t *testing.T, encryptedSecret, secretID, owner, gatewayURL string, namespaces []string, sethClient *seth.Client, wfRegistryContract *workflow_registry_v2_wrapper.WorkflowRegistry) { + framework.L.Info().Msgf("Creating secrets (namespaces=%v)...", namespaces) + + uniqueRequestID := uuid.New().String() + + encryptedSecrets := make([]*vault_helpers.EncryptedSecret, 0, len(namespaces)) + for _, namespace := range namespaces { + encryptedSecrets = append(encryptedSecrets, &vault_helpers.EncryptedSecret{ + Id: &vault_helpers.SecretIdentifier{ + Key: secretID, + Owner: owner, + Namespace: namespace, + }, + EncryptedValue: encryptedSecret, + }) + } + + secretsCreateRequest := vault_helpers.CreateSecretsRequest{ + RequestId: uniqueRequestID, + EncryptedSecrets: encryptedSecrets, + } + secretsCreateRequestBody, err := json.Marshal(secretsCreateRequest) //nolint:govet // The lock field is not set on this proto + require.NoError(t, err, "failed to marshal secrets request") + secretsCreateRequestBodyJSON := json.RawMessage(secretsCreateRequestBody) + jsonRequest := jsonrpc.Request[json.RawMessage]{ + Version: jsonrpc.JsonRpcVersion, + ID: uniqueRequestID, + Method: vaulttypes.MethodSecretsCreate, + Params: &secretsCreateRequestBodyJSON, + } + allowlistRequest(t, owner, jsonRequest, sethClient, wfRegistryContract) + + requestBody, err := json.Marshal(jsonRequest) + require.NoError(t, err, "failed to marshal secrets request") + + statusCode, httpResponseBody := sendVaultRequestToGateway(t, gatewayURL, requestBody) + require.Equal(t, http.StatusOK, statusCode, "Gateway endpoint should respond with 200 OK") + + framework.L.Info().Msg("Checking jsonResponse structure...") + var jsonResponse jsonrpc.Response[vaulttypes.SignedOCRResponse] + err = json.Unmarshal(httpResponseBody, &jsonResponse) + require.NoError(t, err, "failed to unmarshal getResponse") + framework.L.Info().Msgf("JSON Body: %v", jsonResponse) + if jsonResponse.Error != nil { + require.Empty(t, jsonResponse.Error.Error()) + } + require.Equal(t, jsonrpc.JsonRpcVersion, jsonResponse.Version) + require.Equal(t, uniqueRequestID, jsonResponse.ID) + require.Equal(t, vaulttypes.MethodSecretsCreate, jsonResponse.Method) + + signedOCRResponse := jsonResponse.Result + framework.L.Info().Msgf("Signed OCR Response: %s", signedOCRResponse.String()) + + // TODO: Verify the authenticity of this signed report, by ensuring that the signatures indeed match the payload + createSecretsResponse := vault_helpers.CreateSecretsResponse{} + err = protojson.Unmarshal(signedOCRResponse.Payload, &createSecretsResponse) + require.NoError(t, err, "failed to decode payload into CreateSecretsResponse proto") + framework.L.Info().Msgf("CreateSecretsResponse decoded as: %s", createSecretsResponse.String()) + + require.Len(t, createSecretsResponse.Responses, len(namespaces), "Expected one item in the response per namespace") + respByNs := make(map[string]*vault_helpers.CreateSecretResponse, len(namespaces)) + for _, r := range createSecretsResponse.GetResponses() { + respByNs[r.GetId().GetNamespace()] = r + } + for _, namespace := range namespaces { + result, ok := respByNs[namespace] + require.True(t, ok, "missing response for namespace %s", namespace) + require.Empty(t, result.GetError()) + require.Equal(t, secretID, result.GetId().Key) + require.Equal(t, owner, result.GetId().Owner) + } + + framework.L.Info().Msgf("Secrets created successfully (namespaces=%v)", namespaces) +} + +func executeVaultSecretsGetViaWorkflowTest( + t *testing.T, testEnv *ttypes.TestEnvironment, + workflowBaseName, secretKey, secretNamespace string, + userLogsCh chan *workflowevents.UserLogs, baseMessageCh chan *commonevents.BaseMessage, +) { testLogger := framework.L - issuer := fixture.Issuer - linkingService := fixture.LinkingService + testLogger.Info().Msgf("Verifying secret retrieval via workflow (key=%s, namespace=%s)...", secretKey, secretNamespace) - gatewayURL := fixture.GatewayURL - vaultPublicKey := fixture.VaultPublicKey + workflowName := t_helpers.UniqueWorkflowName(testEnv, workflowBaseName) + cfg := &vaultsecret_config.Config{ + SecretKey: secretKey, + SecretNamespace: secretNamespace, + } + const workflowFileLocation = "./vaultsecret/main.go" + workflowID := t_helpers.CompileAndDeployWorkflow(t, testEnv, testLogger, workflowName, cfg, workflowFileLocation) - sc := testEnv.CreEnvironment.Blockchains[0].(*evm.Blockchain).SethClient - workflowOwner := sc.MustGetRootKeyAddress().Hex() - orgID := "org" + strings.ReplaceAll(uuid.NewString(), "-", "") - linkingService.SetOwnerOrg(workflowOwner, orgID) + expectedLog := "Vault secret retrieved successfully via workflow" + t_helpers.WatchWorkflowLogs(t, testLogger, userLogsCh, baseMessageCh, t_helpers.WorkflowEngineInitErrorLog, expectedLog, 4*time.Minute, t_helpers.WithUserLogWorkflowID(workflowID)) + testLogger.Info().Msg("Vault secret get via workflow test completed") +} - wfRegAddr := crecontracts.MustGetAddressFromDataStore( - testEnv.CreEnvironment.CldfEnvironment.DataStore, - testEnv.CreEnvironment.Blockchains[0].ChainSelector(), - keystone_changeset.WorkflowRegistry.String(), - testEnv.CreEnvironment.ContractVersions[keystone_changeset.WorkflowRegistry.String()], - "", - ) - wfReg, err := workflow_registry_v2_wrapper.NewWorkflowRegistry(common.HexToAddress(wfRegAddr), sc.Client) - require.NoError(t, err) - requireVaultLinkOwner(t, sc, common.HexToAddress(wfRegAddr), testEnv.CreEnvironment.ContractVersions[keystone_changeset.WorkflowRegistry.String()]) - - allowlistAuth := newAllowlistVaultRequestAuth(workflowOwner, sc, wfReg) - - ulCh := make(chan *workflowevents.UserLogs, 1000) - bmCh := make(chan *commonevents.BaseMessage, 1000) - sink := t_helpers.StartChipTestSink(t, t_helpers.GetPublishFn(testLogger, ulCh, bmCh)) - t.Cleanup(func() { - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - t_helpers.ShutdownChipSinkWithDrain(ctx, sink, ulCh, bmCh) - }) +func executeVaultSecretsGetNotFoundViaWorkflowTest( + t *testing.T, testEnv *ttypes.TestEnvironment, + workflowBaseName, secretKey, secretNamespace string, + userLogsCh chan *workflowevents.UserLogs, baseMessageCh chan *commonevents.BaseMessage, +) { + testLogger := framework.L + testLogger.Info().Msgf("Verifying secret is NOT retrievable via workflow after deletion (key=%s, namespace=%s)...", secretKey, secretNamespace) - gwURL := gatewayURL.String() - jwtAuth := newJWTVaultRequestAuth(issuer, orgID, workflowOwner) - vaultParsedPublicKey := mustVaultPublicKey(t, vaultPublicKey) - workflowOwnerAddress := common.HexToAddress(workflowOwner) + workflowName := t_helpers.UniqueWorkflowName(testEnv, workflowBaseName) + cfg := &vaultsecret_config.Config{ + SecretKey: secretKey, + SecretNamespace: secretNamespace, + ExpectNotFound: true, + } + const workflowFileLocation = "./vaultsecret/main.go" + workflowID := t_helpers.CompileAndDeployWorkflow(t, testEnv, testLogger, workflowName, cfg, workflowFileLocation) - t.Run("jwt_crud_with_workflow_owner", func(t *testing.T) { - secretID := strconv.Itoa(rand.Intn(10000)) - createValue := "secret-jwt-workflow-owner" - enc, err := vaultutils.EncryptSecretWithOrgID(createValue, vaultParsedPublicKey, orgID) - require.NoError(t, err) + expectedLog := "Vault secret correctly not found after deletion" + t_helpers.WatchWorkflowLogs(t, testLogger, userLogsCh, baseMessageCh, t_helpers.WorkflowEngineInitErrorLog, expectedLog, 4*time.Minute, t_helpers.WithUserLogWorkflowID(workflowID)) + testLogger.Info().Msg("Vault secret not-found via workflow test completed") +} - executeVaultJWTSecretsCreateTest(t, issuer, enc, secretID, orgID, workflowOwner, gwURL, []string{"main", "alt"}) - workflowID := startVaultSecretsWorkflowPhasesTest(t, testEnv, "jwt-lifecycle", []vaultWorkflowPhase{ - { - Name: "jwt-created", - Checks: []vaultWorkflowCheck{ - {Name: "jwt-create-get-main", SecretKey: secretID, SecretNamespace: "main", ExpectedValue: createValue}, - {Name: "jwt-create-get-alt", SecretKey: secretID, SecretNamespace: "alt", ExpectedValue: createValue}, - }, - }, - { - Name: "jwt-deleted", - Checks: []vaultWorkflowCheck{ - {Name: "jwt-delete-main-not-found", SecretKey: secretID, SecretNamespace: "main", ExpectNotFound: true}, - {Name: "jwt-delete-alt-not-found", SecretKey: secretID, SecretNamespace: "alt", ExpectNotFound: true}, - }, +func executeVaultSecretsUpdateTest(t *testing.T, encryptedSecret, secretID, owner, gatewayURL string, namespaces []string, sethClient *seth.Client, wfRegistryContract *workflow_registry_v2_wrapper.WorkflowRegistry) { + framework.L.Info().Msgf("Updating secrets (namespaces=%v)...", namespaces) + uniqueRequestID := uuid.New().String() + + encryptedSecrets := make([]*vault_helpers.EncryptedSecret, 0, len(namespaces)+1) + for _, namespace := range namespaces { + encryptedSecrets = append(encryptedSecrets, &vault_helpers.EncryptedSecret{ + Id: &vault_helpers.SecretIdentifier{ + Key: secretID, + Owner: owner, + Namespace: namespace, }, + EncryptedValue: encryptedSecret, }) - waitForVaultWorkflowPhase(t, workflowID, "jwt-created", ulCh, bmCh) - executeVaultJWTSecretsListTest(t, issuer, secretID, orgID, workflowOwner, gwURL, "main") - executeVaultJWTSecretsListTest(t, issuer, secretID, orgID, workflowOwner, gwURL, "alt") - executeVaultJWTSecretsDeleteTest(t, issuer, secretID, orgID, workflowOwner, gwURL, []string{"main", "alt"}) - waitForVaultWorkflowPhase(t, workflowID, "jwt-deleted", ulCh, bmCh) + } + encryptedSecrets = append(encryptedSecrets, &vault_helpers.EncryptedSecret{ + Id: &vault_helpers.SecretIdentifier{ + Key: "invalid", + Owner: owner, + Namespace: namespaces[0], + }, + EncryptedValue: encryptedSecret, }) - t.Run("mixed_allowlist_and_jwt_auth", func(t *testing.T) { - t.Run("cross_auth_create_update_list_and_delete", func(t *testing.T) { - allowlistSecretID := strconv.Itoa(rand.Intn(10000)) - jwtSecretID := strconv.Itoa(rand.Intn(10000)) - allowlistCreateValue := "secret-mixed-allowlist-create" - jwtCreateValue := "secret-mixed-jwt-create" - allowlistUpdateValue := "secret-mixed-allowlist-update" - jwtUpdateValue := "secret-mixed-jwt-update" - allowlistCreateEnc, err := crevault.EncryptSecret(allowlistCreateValue, vaultPublicKey, workflowOwnerAddress) - require.NoError(t, err) - jwtCreateEnc, err := vaultutils.EncryptSecretWithOrgID(jwtCreateValue, vaultParsedPublicKey, orgID) - require.NoError(t, err) - allowlistUpdateEnc, err := crevault.EncryptSecret(allowlistUpdateValue, vaultPublicKey, workflowOwnerAddress) - require.NoError(t, err) - jwtUpdateEnc, err := vaultutils.EncryptSecretWithOrgID(jwtUpdateValue, vaultParsedPublicKey, orgID) - require.NoError(t, err) - - executeVaultSecretsCreateWithAuth(t, allowlistAuth, allowlistCreateEnc, allowlistSecretID, orgID, gwURL, []string{"main"}) - executeVaultSecretsCreateWithAuth(t, jwtAuth, jwtCreateEnc, jwtSecretID, orgID, gwURL, []string{"main"}) - workflowID := startVaultSecretsWorkflowPhasesTest(t, testEnv, "mixed-lifecycle", []vaultWorkflowPhase{ - { - Name: "mixed-created", - Checks: []vaultWorkflowCheck{ - {Name: "mixed-allowlist-create-get-main", SecretKey: allowlistSecretID, SecretNamespace: "main", ExpectedValue: allowlistCreateValue}, - {Name: "mixed-jwt-create-get-main", SecretKey: jwtSecretID, SecretNamespace: "main", ExpectedValue: jwtCreateValue}, - }, - }, - { - Name: "mixed-updated", - Checks: []vaultWorkflowCheck{ - {Name: "mixed-jwt-update-get-main", SecretKey: allowlistSecretID, SecretNamespace: "main", ExpectedValue: jwtUpdateValue}, - {Name: "mixed-allowlist-update-get-main", SecretKey: jwtSecretID, SecretNamespace: "main", ExpectedValue: allowlistUpdateValue}, - }, - }, - { - Name: "mixed-deleted", - Checks: []vaultWorkflowCheck{ - {Name: "mixed-allowlist-delete-not-found", SecretKey: allowlistSecretID, SecretNamespace: "main", ExpectNotFound: true}, - {Name: "mixed-jwt-delete-not-found", SecretKey: jwtSecretID, SecretNamespace: "main", ExpectNotFound: true}, - }, - }, - }) - waitForVaultWorkflowPhase(t, workflowID, "mixed-created", ulCh, bmCh) - - executeVaultSecretsUpdateWithAuth(t, jwtAuth, jwtUpdateEnc, allowlistSecretID, orgID, gwURL, []string{"main"}) - executeVaultSecretsUpdateWithAuth(t, allowlistAuth, allowlistUpdateEnc, jwtSecretID, orgID, gwURL, []string{"main"}) - waitForVaultWorkflowPhase(t, workflowID, "mixed-updated", ulCh, bmCh) - - executeVaultSecretsListWithAuth(t, allowlistAuth, []string{allowlistSecretID, jwtSecretID}, orgID, gwURL, "main") - executeVaultSecretsListWithAuth(t, jwtAuth, []string{allowlistSecretID, jwtSecretID}, orgID, gwURL, "main") - - executeVaultSecretsDeleteWithAuth(t, allowlistAuth, allowlistSecretID, orgID, gwURL, []string{"main"}) - executeVaultSecretsDeleteWithAuth(t, jwtAuth, jwtSecretID, orgID, gwURL, []string{"main"}) - waitForVaultWorkflowPhase(t, workflowID, "mixed-deleted", ulCh, bmCh) - }) - }) + secretsUpdateRequest := vault_helpers.UpdateSecretsRequest{ + RequestId: uniqueRequestID, + EncryptedSecrets: encryptedSecrets, + } + secretsUpdateRequestBody, err := json.Marshal(secretsUpdateRequest) //nolint:govet // The lock field is not set on this proto + require.NoError(t, err, "failed to marshal secrets request") + secretsUpdateRequestBodyJSON := json.RawMessage(secretsUpdateRequestBody) + jsonRequest := jsonrpc.Request[json.RawMessage]{ + Version: jsonrpc.JsonRpcVersion, + ID: uniqueRequestID, + Method: vaulttypes.MethodSecretsUpdate, + Params: &secretsUpdateRequestBodyJSON, + } + allowlistRequest(t, owner, jsonRequest, sethClient, wfRegistryContract) - t.Run("jwt_rejected_when_workflow_owner_missing", func(t *testing.T) { - executeVaultJWTSecretsCreateUnauthorizedTest(t, issuer, vaultPublicKey, orgID, "", gwURL, "missing workflow_owner in authorization_details") - }) -} + requestBody, err := json.Marshal(jsonRequest) + require.NoError(t, err, "failed to marshal secrets request") -func ExecuteVaultJWTDisabledTest(t *testing.T, fixture *vaultScenarioFixture) { - t.Helper() - issuer := fixture.Issuer - gatewayURL := fixture.GatewayURL - vaultPublicKey := fixture.VaultPublicKey + statusCode, httpResponseBody := sendVaultRequestToGateway(t, gatewayURL, requestBody) + require.Equal(t, http.StatusOK, statusCode, "Gateway endpoint should respond with 200 OK") - orgID := "org" + strings.ReplaceAll(uuid.NewString(), "-", "") - gwURL := gatewayURL.String() + framework.L.Info().Msg("Checking jsonResponse structure...") + var jsonResponse jsonrpc.Response[vaulttypes.SignedOCRResponse] + err = json.Unmarshal(httpResponseBody, &jsonResponse) + require.NoError(t, err, "failed to unmarshal getResponse") + framework.L.Info().Msgf("JSON Body: %v", jsonResponse) + if jsonResponse.Error != nil { + require.Empty(t, jsonResponse.Error.Error()) + } - t.Run("jwt_with_workflow_owner_rejected_when_jwt_auth_disabled", func(t *testing.T) { - executeVaultJWTSecretsCreateUnauthorizedTest(t, issuer, vaultPublicKey, orgID, "0x1234567890abcdef1234567890abcdef12345678", gwURL, "JWTBasedAuth is disabled") - }) + require.Equal(t, jsonrpc.JsonRpcVersion, jsonResponse.Version) + require.Equal(t, uniqueRequestID, jsonResponse.ID) + require.Equal(t, vaulttypes.MethodSecretsUpdate, jsonResponse.Method) - t.Run("jwt_without_workflow_owner_rejected_when_jwt_auth_disabled", func(t *testing.T) { - executeVaultJWTSecretsCreateUnauthorizedTest(t, issuer, vaultPublicKey, orgID, "", gwURL, "JWTBasedAuth is disabled") - }) -} + signedOCRResponse := jsonResponse.Result + framework.L.Info().Msgf("Signed OCR Response: %s", signedOCRResponse.String()) -func TestVaultStaticTopologies_LoadExpectedConfig(t *testing.T) { - t.Parallel() - dockerHost := strings.TrimPrefix(framework.HostDockerInternal(), "http://") - - testCases := []struct { - name string - configPath string - wantJWTGate string - wantOrgGate string - wantLinking bool - }{ - { - name: "enabled", - configPath: vaultJWTAuthEnabledConfigPath, - wantJWTGate: "true", - wantOrgGate: "true", - wantLinking: false, - }, - { - name: "default", - configPath: vaultDefaultConfigPath, - wantJWTGate: "false", - wantOrgGate: "false", - wantLinking: false, - }, + // TODO: Verify the authenticity of this signed report, by ensuring that the signatures indeed match the payload + + updateSecretsResponse := vault_helpers.UpdateSecretsResponse{} + err = protojson.Unmarshal(signedOCRResponse.Payload, &updateSecretsResponse) + require.NoError(t, err, "failed to decode payload into UpdateSecretsResponse proto") + framework.L.Info().Msgf("UpdateSecretsResponse decoded as: %s", updateSecretsResponse.String()) + + require.Len(t, updateSecretsResponse.Responses, len(namespaces)+1, "Expected one updated item per namespace plus one invalid item") + var foundInvalid bool + updateRespByNs := make(map[string]*vault_helpers.UpdateSecretResponse, len(namespaces)) + for _, r := range updateSecretsResponse.GetResponses() { + if r.GetId().GetKey() == "invalid" { + require.Contains(t, r.Error, "key does not exist") + foundInvalid = true + continue + } + updateRespByNs[r.GetId().GetNamespace()] = r + } + require.True(t, foundInvalid, "expected an error response for the 'invalid' key") + for _, namespace := range namespaces { + result, ok := updateRespByNs[namespace] + require.True(t, ok, "missing update response for namespace %s", namespace) + require.Empty(t, result.GetError()) + require.Equal(t, secretID, result.GetId().Key) + require.Equal(t, owner, result.GetId().Owner) } - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - cfg := &envconfig.Config{} - require.NoError(t, cfg.Load(t_helpers.GetTestConfig(t, tc.configPath).EnvironmentConfigPath)) + framework.L.Info().Msgf("Secrets updated successfully (namespaces=%v)", namespaces) +} - for _, nodeSet := range cfg.NodeSets { - if nodeSet.Name != "workflow" && nodeSet.Name != "capabilities" { - continue - } - settingsRaw := nodeSet.EnvVars["CL_CRE_SETTINGS_DEFAULT"] - if settingsRaw == "" { - require.Equal(t, "false", tc.wantJWTGate) - require.Equal(t, "false", tc.wantOrgGate) - } else { - var settings map[string]string - require.NoError(t, json.Unmarshal([]byte(settingsRaw), &settings)) - require.Equal(t, tc.wantJWTGate, settings["VaultJWTAuthEnabled"]) - require.Equal(t, tc.wantOrgGate, settings["VaultOrgIdAsSecretOwnerEnabled"]) - } +func executeVaultSecretsListTest(t *testing.T, secretID, owner, gatewayURL, namespace string, sethClient *seth.Client, wfRegistryContract *workflow_registry_v2_wrapper.WorkflowRegistry) { + framework.L.Info().Msgf("Listing secrets (namespace=%s)...", namespace) + uniqueRequestID := uuid.New().String() + secretsListRequest := vault_helpers.ListSecretIdentifiersRequest{ + RequestId: uniqueRequestID, + Owner: owner, + Namespace: namespace, + } + secretsListRequestBody, err := json.Marshal(secretsListRequest) //nolint:govet // The lock field is not set on this proto + require.NoError(t, err, "failed to marshal secrets request") + secretsUpdateRequestBodyJSON := json.RawMessage(secretsListRequestBody) + jsonRequest := jsonrpc.Request[json.RawMessage]{ + Version: jsonrpc.JsonRpcVersion, + ID: uniqueRequestID, + Method: vaulttypes.MethodSecretsList, + Params: &secretsUpdateRequestBodyJSON, + } + allowlistRequest(t, owner, jsonRequest, sethClient, wfRegistryContract) + + // Ensure that multiple requests can be allowlisted + uniqueRequestIDTwo := uuid.New().String() + secretsListRequestTwo := vault_helpers.ListSecretIdentifiersRequest{ + RequestId: uniqueRequestIDTwo, + Owner: owner, + Namespace: namespace, + } + secretsListRequestBodyTwo, err := json.Marshal(secretsListRequestTwo) //nolint:govet // The lock field is not set on this proto + require.NoError(t, err, "failed to marshal secrets request") + secretsUpdateRequestBodyJSONTwo := json.RawMessage(secretsListRequestBodyTwo) + jsonRequestTwo := jsonrpc.Request[json.RawMessage]{ + Version: jsonrpc.JsonRpcVersion, + ID: uniqueRequestIDTwo, + Method: vaulttypes.MethodSecretsList, + Params: &secretsUpdateRequestBodyJSONTwo, + } + allowlistRequest(t, owner, jsonRequestTwo, sethClient, wfRegistryContract) + + // Request 1 + requestBody, err := json.Marshal(jsonRequest) + require.NoError(t, err, "failed to marshal secrets request") + + statusCode, httpResponseBody := sendVaultRequestToGateway(t, gatewayURL, requestBody) + require.Equal(t, http.StatusOK, statusCode, "Gateway endpoint should respond with 200 OK") + var jsonResponse jsonrpc.Response[vaulttypes.SignedOCRResponse] + err = json.Unmarshal(httpResponseBody, &jsonResponse) + require.NoError(t, err, "failed to unmarshal getResponse") + framework.L.Info().Msgf("JSON Body: %v", jsonResponse) + if jsonResponse.Error != nil { + require.Empty(t, jsonResponse.Error.Error()) + } - for _, nodeSpec := range nodeSet.NodeSpecs { - if tc.wantLinking { - require.Contains(t, nodeSpec.Node.UserConfigOverrides, "[CRE.Linking]") - require.Contains(t, nodeSpec.Node.UserConfigOverrides, dockerHost+":18124") - continue - } - require.Empty(t, nodeSpec.Node.UserConfigOverrides) - } - } - }) + require.Equal(t, jsonrpc.JsonRpcVersion, jsonResponse.Version) + require.Equal(t, uniqueRequestID, jsonResponse.ID) + require.Equal(t, vaulttypes.MethodSecretsList, jsonResponse.Method) + + signedOCRResponse := jsonResponse.Result + framework.L.Info().Msgf("Signed OCR Response: %s", signedOCRResponse.String()) + + // Request 2 + requestBodyTwo, err := json.Marshal(jsonRequestTwo) + require.NoError(t, err, "failed to marshal secrets request") + statusCodeTwo, httpResponseBodyTwo := sendVaultRequestToGateway(t, gatewayURL, requestBodyTwo) + require.Equal(t, http.StatusOK, statusCodeTwo, "Gateway endpoint should respond with 200 OK") + var jsonResponseTwo jsonrpc.Response[vaulttypes.SignedOCRResponse] + err = json.Unmarshal(httpResponseBodyTwo, &jsonResponseTwo) + require.NoError(t, err, "failed to unmarshal getResponse") + framework.L.Info().Msgf("JSON Body: %v", jsonResponseTwo) + if jsonResponseTwo.Error != nil { + require.Empty(t, jsonResponseTwo.Error.Error()) + } + require.Equal(t, jsonrpc.JsonRpcVersion, jsonResponseTwo.Version) + require.Equal(t, uniqueRequestIDTwo, jsonResponseTwo.ID) + require.Equal(t, vaulttypes.MethodSecretsList, jsonResponseTwo.Method) + signedOCRResponseTwo := jsonResponseTwo.Result + framework.L.Info().Msgf("Signed OCR Response: %s", signedOCRResponseTwo.String()) + + // TODO: Verify the authenticity of this signed report, by ensuring that the signatures indeed match the payload + + listSecretsResponse := vault_helpers.ListSecretIdentifiersResponse{} + err = protojson.Unmarshal(signedOCRResponse.Payload, &listSecretsResponse) + require.NoError(t, err, "failed to decode payload into ListSecretIdentifiersResponse proto") + framework.L.Info().Msgf("ListSecretIdentifiersResponse decoded as: %s", listSecretsResponse.String()) + + require.True(t, listSecretsResponse.Success, err) + require.GreaterOrEqual(t, len(listSecretsResponse.Identifiers), 1, "Expected at least one item in the response") + var keys = make([]string, 0, len(listSecretsResponse.Identifiers)) + for _, identifier := range listSecretsResponse.Identifiers { + keys = append(keys, identifier.Key) + require.Equal(t, owner, identifier.Owner) + require.Equal(t, namespace, identifier.Namespace) } + require.Contains(t, keys, secretID) + framework.L.Info().Msgf("Secrets listed successfully (namespace=%s)", namespace) } -func TestMustMintVaultJWTForRequest_UsesRawRequestDigest(t *testing.T) { - issuer, err := vault.NewTestJWTIssuer() - require.NoError(t, err) - t.Cleanup(func() { - require.NoError(t, issuer.Close()) - }) +func executeVaultSecretsDeleteTest(t *testing.T, secretID, owner, gatewayURL string, namespaces []string, sethClient *seth.Client, wfRegistryContract *workflow_registry_v2_wrapper.WorkflowRegistry) { + framework.L.Info().Msgf("Deleting secrets (namespaces=%v)...", namespaces) + uniqueRequestID := uuid.New().String() - params, err := json.Marshal(vault_helpers.CreateSecretsRequest{ - RequestId: "req-1", - EncryptedSecrets: []*vault_helpers.EncryptedSecret{ - { - Id: &vault_helpers.SecretIdentifier{ - Key: "9838", - Namespace: "main", - Owner: "org-123", - }, - EncryptedValue: "cipher+/==", - }, - }, + deleteIDs := make([]*vault_helpers.SecretIdentifier, 0, len(namespaces)+1) + for _, namespace := range namespaces { + deleteIDs = append(deleteIDs, &vault_helpers.SecretIdentifier{ + Key: secretID, + Owner: owner, + Namespace: namespace, + }) + } + deleteIDs = append(deleteIDs, &vault_helpers.SecretIdentifier{ + Key: "invalid", + Owner: owner, + Namespace: namespaces[0], }) - require.NoError(t, err) - rawParams := json.RawMessage(params) - req := jsonrpc.Request[json.RawMessage]{ + secretsDeleteRequest := vault_helpers.DeleteSecretsRequest{ + RequestId: uniqueRequestID, + Ids: deleteIDs, + } + secretsDeleteRequestBody, err := json.Marshal(secretsDeleteRequest) //nolint:govet // The lock field is not set on this proto + require.NoError(t, err, "failed to marshal secrets request") + secretsDeleteRequestBodyJSON := json.RawMessage(secretsDeleteRequestBody) + jsonRequest := jsonrpc.Request[json.RawMessage]{ Version: jsonrpc.JsonRpcVersion, - ID: "req-1", - Method: vaulttypes.MethodSecretsCreate, - Params: &rawParams, + ID: uniqueRequestID, + Method: vaulttypes.MethodSecretsDelete, + Params: &secretsDeleteRequestBodyJSON, + } + allowlistRequest(t, owner, jsonRequest, sethClient, wfRegistryContract) + + requestBody, err := json.Marshal(jsonRequest) + require.NoError(t, err, "failed to marshal secrets request") + + statusCode, httpResponseBody := sendVaultRequestToGateway(t, gatewayURL, requestBody) + require.Equal(t, http.StatusOK, statusCode, "Gateway endpoint should respond with 200 OK") + framework.L.Info().Msg("Checking jsonResponse structure...") + var jsonResponse jsonrpc.Response[vaulttypes.SignedOCRResponse] + err = json.Unmarshal(httpResponseBody, &jsonResponse) + require.NoError(t, err, "failed to unmarshal getResponse") + framework.L.Info().Msgf("JSON Body: %v", jsonResponse) + if jsonResponse.Error != nil { + require.Empty(t, jsonResponse.Error.Error()) + } + + require.Equal(t, jsonrpc.JsonRpcVersion, jsonResponse.Version) + require.Equal(t, uniqueRequestID, jsonResponse.ID) + require.Equal(t, vaulttypes.MethodSecretsDelete, jsonResponse.Method) + + signedOCRResponse := jsonResponse.Result + framework.L.Info().Msgf("Signed OCR Response: %s", signedOCRResponse.String()) + + // TODO: Verify the authenticity of this signed report, by ensuring that the signatures indeed match the payload + + deleteSecretsResponse := vault_helpers.DeleteSecretsResponse{} + err = protojson.Unmarshal(signedOCRResponse.Payload, &deleteSecretsResponse) + require.NoError(t, err, "failed to decode payload into DeleteSecretResponse proto") + framework.L.Info().Msgf("DeleteSecretResponse decoded as: %s", deleteSecretsResponse.String()) + + require.Len(t, deleteSecretsResponse.Responses, len(namespaces)+1, "Expected one deleted item per namespace plus one invalid item") + var foundDeleteInvalid bool + deleteRespByNs := make(map[string]*vault_helpers.DeleteSecretResponse, len(namespaces)) + for _, r := range deleteSecretsResponse.GetResponses() { + if r.GetId().GetKey() == "invalid" { + require.Contains(t, r.Error, "key does not exist") + foundDeleteInvalid = true + continue + } + deleteRespByNs[r.GetId().GetNamespace()] = r + } + require.True(t, foundDeleteInvalid, "expected an error response for the 'invalid' key") + for _, namespace := range namespaces { + result, ok := deleteRespByNs[namespace] + require.True(t, ok, "missing delete response for namespace %s", namespace) + require.True(t, result.Success, result.Error) + require.Equal(t, owner, result.Id.Owner) + require.Equal(t, secretID, result.Id.Key) } - req.Auth = mustMintVaultJWTForRequest(t, issuer, req, "org-123", "0xAbCdEf0123456789AbCdEf0123456789AbCdEf01") - - outboundReq := outboundRequestWithoutAuth(req) - requestDigest, err := outboundReq.Digest() - require.NoError(t, err) - - parsedToken, _, err := new(jwt.Parser).ParseUnverified(req.Auth, jwt.MapClaims{}) - require.NoError(t, err) - - claims, ok := parsedToken.Claims.(jwt.MapClaims) - require.True(t, ok) - authorizationDetails, ok := claims["authorization_details"].([]interface{}) - require.True(t, ok) - - var claimedDigest string - for _, detail := range authorizationDetails { - entry, ok := detail.(map[string]interface{}) - require.True(t, ok) - if entry["type"] == "request_digest" { - claimedDigest, ok = entry["value"].(string) - require.True(t, ok) + + framework.L.Info().Msgf("Secrets deleted successfully (namespaces=%v)", namespaces) +} + +// updateVaultCapabilityConfigInRegistry updates the on-chain capabilities registry +// so that the vault@1.0.0 capability config includes DefaultConfig with VaultPublicKey +// and Threshold. This is required for workflows that call runtime.GetSecret(). +// Uses the original deployer key (not per-test key) since the registry is owned by the deployer. +func updateVaultCapabilityConfigInRegistry(t *testing.T, testEnv *ttypes.TestEnvironment, vaultPublicKey string) { + t.Helper() + testLogger := framework.L + testLogger.Info().Msg("Updating vault capability config in capabilities registry with VaultPublicKey...") + + capRegAddr := crecontracts.MustGetAddressFromDataStore( + testEnv.CreEnvironment.CldfEnvironment.DataStore, + testEnv.CreEnvironment.RegistryChainSelector, + keystone_changeset.CapabilitiesRegistry.String(), + testEnv.CreEnvironment.ContractVersions[keystone_changeset.CapabilitiesRegistry.String()], + "", + ) + + require.IsType(t, &evm.Blockchain{}, testEnv.CreEnvironment.Blockchains[0]) + sethClient := testEnv.CreEnvironment.Blockchains[0].(*evm.Blockchain).SethClient + + deployerClient, err := seth.NewClientBuilder(). + WithRpcUrl(sethClient.URL). + WithPrivateKeys([]string{ctfblockchain.DefaultAnvilPrivateKey}). + WithProtections(false, false, seth.MustMakeDuration(time.Second)). + Build() + require.NoError(t, err, "failed to create deployer seth client") + + capReg, err := capabilities_registry_v2.NewCapabilitiesRegistry( + common.HexToAddress(capRegAddr), deployerClient.Client, + ) + require.NoError(t, err, "failed to create capabilities registry wrapper") + + allDONs, err := capReg.GetDONs(&bind.CallOpts{}, big.NewInt(0), big.NewInt(100)) + require.NoError(t, err, "failed to get DONs from registry") + + var don *capabilities_registry_v2.CapabilitiesRegistryDONInfo + for i := range allDONs { + for _, cc := range allDONs[i].CapabilityConfigurations { + if cc.CapabilityId == "vault@1.0.0" { + don = &allDONs[i] + break + } + } + if don != nil { break } } + require.NotNil(t, don, "could not find a DON with vault@1.0.0 capability in the registry") + testLogger.Info().Msgf("Found vault capability on DON %q (ID=%d)", don.Name, don.Id) + + newConfigs := make([]capabilities_registry_v2.CapabilitiesRegistryCapabilityConfiguration, 0, len(don.CapabilityConfigurations)) + for _, cc := range don.CapabilityConfigurations { + if cc.CapabilityId == "vault@1.0.0" { + existingConfig := &capabilitiespb.CapabilityConfig{} + if len(cc.Config) > 0 { + require.NoError(t, proto.Unmarshal(cc.Config, existingConfig), "failed to unmarshal existing vault capability config") + } + + vaultCfg := map[string]interface{}{ + "VaultPublicKey": vaultPublicKey, + "Threshold": 1, + } + valueMap, wrapErr := values.WrapMap(vaultCfg) + require.NoError(t, wrapErr, "failed to wrap vault config values") + + existingConfig.DefaultConfig = values.ProtoMap(valueMap) + + configBytes, marshalErr := proto.Marshal(existingConfig) + require.NoError(t, marshalErr, "failed to marshal updated vault capability config") + + cc.Config = configBytes + testLogger.Info().Msg("Injected VaultPublicKey and Threshold into vault@1.0.0 capability config") + } + newConfigs = append(newConfigs, cc) + } + + updateParams := capabilities_registry_v2.CapabilitiesRegistryUpdateDONParams{ + Name: don.Name, + Nodes: don.NodeP2PIds, + CapabilityConfigurations: newConfigs, + IsPublic: don.IsPublic, + F: don.F, + Config: don.Config, + } + + _, err = deployerClient.Decode(capReg.UpdateDONByName(deployerClient.NewTXOpts(), don.Name, updateParams)) + require.NoError(t, err, "UpdateDONByName tx failed") - require.NotEmpty(t, claimedDigest) - require.Equal(t, requestDigest, claimedDigest) + testLogger.Info().Msg("Waiting for registry syncer to propagate the on-chain config change...") + time.Sleep(15 * time.Second) // registry syncer polls every 12s; one tick + margin +} + +func allowlistRequest(t *testing.T, owner string, request jsonrpc.Request[json.RawMessage], sethClient *seth.Client, wfRegistryContract *workflow_registry_v2_wrapper.WorkflowRegistry) { + requestDigest, err := request.Digest() + require.NoError(t, err, "failed to get digest for request") + requestDigestBytes, err := hex.DecodeString(requestDigest) + require.NoError(t, err, "failed to decode digest") + reqDigestBytes := [32]byte(requestDigestBytes) + _, err = wfRegistryContract.AllowlistRequest(sethClient.NewTXOpts(), reqDigestBytes, uint32(time.Now().Add(1*time.Hour).Unix())) //nolint:gosec // disable G115 + require.NoError(t, err, "failed to allowlist request") + + framework.L.Info().Msgf("Allowlisting request digest at contract %s, for owner: %s, digestHexStr: %s", wfRegistryContract.Address().Hex(), owner, requestDigest) + allowedList, err := wfRegistryContract.GetAllowlistedRequests(&bind.CallOpts{}, big.NewInt(0), big.NewInt(100)) + require.NoError(t, err, "failed to validate allowlisted request") + for _, req := range allowedList { + if req.RequestDigest == reqDigestBytes { + framework.L.Info().Msgf("Request digest found in allowlist") + } + framework.L.Info().Msgf("Allowlisted request digestHexStr: %s, owner: %s, expiry: %d", hex.EncodeToString(req.RequestDigest[:]), req.Owner.Hex(), req.ExpiryTimestamp) + } } diff --git a/system-tests/tests/smoke/cre/v2_vault_don_test_helpers.go b/system-tests/tests/smoke/cre/v2_vault_don_test_helpers.go index 66cf024c963..1b3976c857c 100644 --- a/system-tests/tests/smoke/cre/v2_vault_don_test_helpers.go +++ b/system-tests/tests/smoke/cre/v2_vault_don_test_helpers.go @@ -2,57 +2,20 @@ package cre import ( "bytes" - "encoding/hex" "encoding/json" "io" - "math/big" - "math/rand" "net/http" - "net/url" - "slices" - "strconv" "strings" "testing" "time" - "github.com/Masterminds/semver/v3" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" "github.com/google/uuid" - "github.com/smartcontractkit/tdh2/go/tdh2/tdh2easy" "github.com/stretchr/testify/require" - "google.golang.org/protobuf/encoding/protojson" - "google.golang.org/protobuf/proto" - - "github.com/smartcontractkit/chainlink-protos/cre/go/values" vault_helpers "github.com/smartcontractkit/chainlink-common/pkg/capabilities/actions/vault" - capabilitiespb "github.com/smartcontractkit/chainlink-common/pkg/capabilities/pb" jsonrpc "github.com/smartcontractkit/chainlink-common/pkg/jsonrpc2" - capabilities_registry_v2 "github.com/smartcontractkit/chainlink-evm/gethwrappers/workflow/generated/capabilities_registry_wrapper_v2" - workflow_registry_v2_wrapper "github.com/smartcontractkit/chainlink-evm/gethwrappers/workflow/generated/workflow_registry_wrapper_v2" - commonevents "github.com/smartcontractkit/chainlink-protos/workflows/go/common" - workflowevents "github.com/smartcontractkit/chainlink-protos/workflows/go/events" "github.com/smartcontractkit/chainlink-testing-framework/framework" - ctfblockchain "github.com/smartcontractkit/chainlink-testing-framework/framework/components/blockchain" - "github.com/smartcontractkit/chainlink-testing-framework/seth" - keystone_changeset "github.com/smartcontractkit/chainlink/deployment/keystone/changeset" - "github.com/smartcontractkit/chainlink/system-tests/lib/cre" - crecontracts "github.com/smartcontractkit/chainlink/system-tests/lib/cre/contracts" - "github.com/smartcontractkit/chainlink/system-tests/lib/cre/environment/blockchains/evm" - "github.com/smartcontractkit/chainlink/system-tests/lib/cre/vault" - creworkflow "github.com/smartcontractkit/chainlink/system-tests/lib/cre/workflow" - vaultsecret_config "github.com/smartcontractkit/chainlink/system-tests/tests/smoke/cre/vaultsecret/config" - t_helpers "github.com/smartcontractkit/chainlink/system-tests/tests/test-helpers" - ttypes "github.com/smartcontractkit/chainlink/system-tests/tests/test-helpers/configuration" "github.com/smartcontractkit/chainlink/v2/core/capabilities/vault/vaulttypes" - "github.com/smartcontractkit/chainlink/v2/core/capabilities/vault/vaultutils" -) - -const ( - vaultDefaultConfigPath = "/configs/workflow-gateway-capabilities-don.toml" - vaultJWTAuthEnabledConfigPath = "/configs/workflow-gateway-capabilities-don-vault-jwt_auth-enabled.toml" - vaultJWTIssuerListenAddr = "0.0.0.0:18123" ) func FetchVaultPublicKey(t *testing.T, gatewayURL string) (publicKey string) { @@ -93,24 +56,7 @@ func FetchVaultPublicKey(t *testing.T, gatewayURL string) (publicKey string) { return publicKeyResponse.PublicKey } -func mustVaultPublicKey(t *testing.T, publicKey string) *tdh2easy.PublicKey { - t.Helper() - - publicKeyBytes, err := hex.DecodeString(publicKey) - require.NoError(t, err, "failed to decode vault public key") - - parsed := &tdh2easy.PublicKey{} - err = parsed.Unmarshal(publicKeyBytes) - require.NoError(t, err, "failed to unmarshal vault public key") - - return parsed -} - func sendVaultRequestToGateway(t *testing.T, gatewayURL string, requestBody []byte) (statusCode int, body []byte) { - return sendVaultRequestToGatewayWithHeaders(t, gatewayURL, requestBody, nil) -} - -func sendVaultRequestToGatewayWithHeaders(t *testing.T, gatewayURL string, requestBody []byte, headers map[string]string) (statusCode int, body []byte) { const maxRetries = 7 const retryInterval = 2 * time.Second @@ -122,9 +68,6 @@ func sendVaultRequestToGatewayWithHeaders(t *testing.T, gatewayURL string, reque req.Header.Set("Content-Type", "application/json") req.Header.Set("Accept", "application/json") - for key, value := range headers { - req.Header.Set(key, value) - } client := &http.Client{} resp, err := client.Do(req) @@ -167,708 +110,3 @@ func isGatewayNotAllowlistedError(body []byte) bool { return resp.Method == "" && resp.Error != nil && strings.Contains(resp.Error.Message, "request not allowlisted") } - -type vaultScenarioFixture struct { - TestEnv *ttypes.TestEnvironment - Issuer *vault.TestJWTIssuer - LinkingService *vault.TestLinkingService - GatewayURL *url.URL - VaultPublicKey string -} - -type vaultWorkflowCheck struct { - Name string - SecretKey string - SecretNamespace string - ExpectedValue string - ExpectNotFound bool -} - -type vaultWorkflowPhase struct { - Name string - Checks []vaultWorkflowCheck -} - -type vaultRequestAuth struct { - requestOwner string - authorize func(t *testing.T, req *jsonrpc.Request[json.RawMessage]) -} - -func getVaultJWTAuthEnabledTestConfig(t *testing.T) *ttypes.TestConfig { - t.Helper() - - return t_helpers.GetTestConfig(t, vaultJWTAuthEnabledConfigPath) -} - -func getVaultDefaultTestConfig(t *testing.T) *ttypes.TestConfig { - t.Helper() - - return t_helpers.GetTestConfig(t, vaultDefaultConfigPath) -} - -func isVaultJWTAuthEnabledTopology(topologyName string) bool { - return strings.Contains(topologyName, "vault-jwt_auth-enabled") -} - -func setupVaultScenarioFixture(t *testing.T, baseConfig *ttypes.TestConfig, usePerTestKeys bool) *vaultScenarioFixture { - t.Helper() - - issuer, err := vault.NewTestJWTIssuerOnAddr(vaultJWTIssuerListenAddr) - require.NoError(t, err) - t.Cleanup(func() { - require.NoError(t, issuer.Close()) - }) - - linkingService, err := vault.EnsureSharedTestLinkingServiceStarted() - require.NoError(t, err) - - var testEnv *ttypes.TestEnvironment - if usePerTestKeys { - testEnv = t_helpers.SetupTestEnvironmentWithPerTestKeys(t, baseConfig) - } else { - testEnv = t_helpers.SetupTestEnvironmentWithConfig(t, baseConfig) - } - - ensureVaultDKGResultPackages(t, testEnv) - gatewayURL := mustVaultGatewayURL(t, testEnv) - vaultPublicKey := FetchVaultPublicKey(t, gatewayURL.String()) - updateVaultCapabilityConfigInRegistry(t, testEnv, vaultPublicKey) - - return &vaultScenarioFixture{ - TestEnv: testEnv, - Issuer: issuer, - LinkingService: linkingService, - GatewayURL: gatewayURL, - VaultPublicKey: vaultPublicKey, - } -} - -func setupVaultSharedScenarioFixture(t *testing.T, baseConfig *ttypes.TestConfig) *vaultScenarioFixture { - t.Helper() - - return setupVaultScenarioFixture(t, baseConfig, false) -} - -func ensureVaultDKGResultPackages(t *testing.T, testEnv *ttypes.TestEnvironment) { - t.Helper() - - framework.L.Info().Msg("Ensuring DKG result packages are present...") - require.Eventually(t, func() bool { - for _, nodeSet := range testEnv.Config.NodeSets { - if slices.Contains(nodeSet.Capabilities, cre.VaultCapability) { - for i, node := range nodeSet.NodeSpecs { - if !slices.Contains(node.Roles, cre.BootstrapNode) { - packageCount, err := vault.GetResultPackageCount(t.Context(), i, nodeSet.DbInput.Port) - if err != nil || packageCount != 1 { - return false - } - } - } - return true - } - } - return false - }, time.Second*300, time.Second*5) -} - -func requireVaultLinkOwner(t *testing.T, sc *seth.Client, workflowRegistryAddr common.Address, version *semver.Version) { - t.Helper() - - err := creworkflow.LinkOwner(sc, workflowRegistryAddr, version) - if err != nil && !strings.Contains(err.Error(), "OwnershipLinkAlreadyExists") { - require.NoError(t, err) - } -} - -func mustVaultGatewayURL(t *testing.T, testEnv *ttypes.TestEnvironment) *url.URL { - t.Helper() - - framework.L.Info().Msg("Getting gateway configuration...") - require.NotEmpty(t, testEnv.Dons.GatewayConnectors.Configurations, "expected at least one gateway configuration") - gatewayURL, err := url.Parse(testEnv.Dons.GatewayConnectors.Configurations[0].Incoming.Protocol + "://" + testEnv.Dons.GatewayConnectors.Configurations[0].Incoming.Host + ":" + strconv.Itoa(testEnv.Dons.GatewayConnectors.Configurations[0].Incoming.ExternalPort) + testEnv.Dons.GatewayConnectors.Configurations[0].Incoming.Path) - require.NoError(t, err, "failed to parse gateway URL") - framework.L.Info().Msgf("Gateway URL: %s", gatewayURL.String()) - return gatewayURL -} - -func newAllowlistVaultRequestAuth(requestOwner string, sethClient *seth.Client, wfRegistryContract *workflow_registry_v2_wrapper.WorkflowRegistry) vaultRequestAuth { - return vaultRequestAuth{ - requestOwner: requestOwner, - authorize: func(t *testing.T, req *jsonrpc.Request[json.RawMessage]) { - allowlistRequest(t, requestOwner, *req, sethClient, wfRegistryContract) - }, - } -} - -func newJWTVaultRequestAuth(issuer *vault.TestJWTIssuer, orgID, workflowOwner string) vaultRequestAuth { - return vaultRequestAuth{ - requestOwner: orgID, - authorize: func(t *testing.T, req *jsonrpc.Request[json.RawMessage]) { - req.Auth = mustMintVaultJWTForRequest(t, issuer, *req, orgID, workflowOwner) - }, - } -} - -func (a vaultRequestAuth) apply(t *testing.T, req *jsonrpc.Request[json.RawMessage]) { - t.Helper() - if a.authorize != nil { - a.authorize(t, req) - } -} - -func newVaultJSONRequest(t *testing.T, requestID, method string, params any) jsonrpc.Request[json.RawMessage] { - t.Helper() - - requestBody, err := json.Marshal(params) - require.NoError(t, err, "failed to marshal secrets request") - requestBodyJSON := json.RawMessage(requestBody) - - return jsonrpc.Request[json.RawMessage]{ - Version: jsonrpc.JsonRpcVersion, - ID: requestID, - Method: method, - Params: &requestBodyJSON, - } -} - -func buildEncryptedSecrets(secretID, owner, encryptedSecret string, namespaces []string) []*vault_helpers.EncryptedSecret { - encryptedSecrets := make([]*vault_helpers.EncryptedSecret, 0, len(namespaces)) - for _, namespace := range namespaces { - encryptedSecrets = append(encryptedSecrets, &vault_helpers.EncryptedSecret{ - Id: &vault_helpers.SecretIdentifier{ - Key: secretID, - Owner: owner, - Namespace: namespace, - }, - EncryptedValue: encryptedSecret, - }) - } - - return encryptedSecrets -} - -func buildSecretIdentifiers(secretID, owner string, namespaces []string) []*vault_helpers.SecretIdentifier { - identifiers := make([]*vault_helpers.SecretIdentifier, 0, len(namespaces)) - for _, namespace := range namespaces { - identifiers = append(identifiers, &vault_helpers.SecretIdentifier{ - Key: secretID, - Owner: owner, - Namespace: namespace, - }) - } - - return identifiers -} - -func sendVaultSignedOCRRequestToGateway(t *testing.T, gatewayURL string, jsonRequest jsonrpc.Request[json.RawMessage]) jsonrpc.Response[vaulttypes.SignedOCRResponse] { - t.Helper() - - authToken := jsonRequest.Auth - jsonRequest = outboundRequestWithoutAuth(jsonRequest) - - requestBody, err := json.Marshal(jsonRequest) - require.NoError(t, err, "failed to marshal vault request") - - headers := map[string]string{} - if authToken != "" { - headers["Authorization"] = "Bearer " + authToken - } - - statusCode, httpResponseBody := sendVaultRequestToGatewayWithHeaders(t, gatewayURL, requestBody, headers) - require.Equal(t, http.StatusOK, statusCode, "Gateway endpoint should respond with 200 OK") - - var jsonResponse jsonrpc.Response[vaulttypes.SignedOCRResponse] - err = json.Unmarshal(httpResponseBody, &jsonResponse) - require.NoError(t, err, "failed to unmarshal gateway response") - if jsonResponse.Error != nil { - require.Empty(t, jsonResponse.Error.Error()) - } - require.Equal(t, jsonrpc.JsonRpcVersion, jsonResponse.Version) - - return jsonResponse -} - -func executeVaultSecretsCreateWithAuth(t *testing.T, auth vaultRequestAuth, encryptedSecret, secretID, expectedResponseOwner, gatewayURL string, namespaces []string) { - t.Helper() - - framework.L.Info().Msgf("Creating secrets (namespaces=%v)...", namespaces) - - uniqueRequestID := uuid.New().String() - secretsCreateRequest := vault_helpers.CreateSecretsRequest{ - RequestId: uniqueRequestID, - EncryptedSecrets: buildEncryptedSecrets(secretID, auth.requestOwner, encryptedSecret, namespaces), - } - jsonRequest := newVaultJSONRequest(t, uniqueRequestID, vaulttypes.MethodSecretsCreate, &secretsCreateRequest) - auth.apply(t, &jsonRequest) - - jsonResponse := sendVaultSignedOCRRequestToGateway(t, gatewayURL, jsonRequest) - require.Equal(t, uniqueRequestID, jsonResponse.ID) - require.Equal(t, vaulttypes.MethodSecretsCreate, jsonResponse.Method) - - createSecretsResponse := vault_helpers.CreateSecretsResponse{} - err := protojson.Unmarshal(jsonResponse.Result.Payload, &createSecretsResponse) - require.NoError(t, err, "failed to decode payload into CreateSecretsResponse proto") - - require.Len(t, createSecretsResponse.Responses, len(namespaces), "Expected one item in the response per namespace") - respByNs := make(map[string]*vault_helpers.CreateSecretResponse, len(namespaces)) - for _, r := range createSecretsResponse.GetResponses() { - respByNs[r.GetId().GetNamespace()] = r - } - for _, namespace := range namespaces { - result, ok := respByNs[namespace] - require.True(t, ok, "missing response for namespace %s", namespace) - require.Empty(t, result.GetError()) - require.Equal(t, secretID, result.GetId().Key) - require.Equal(t, expectedResponseOwner, result.GetId().Owner) - } -} - -func executeVaultSecretsUpdateWithAuth(t *testing.T, auth vaultRequestAuth, encryptedSecret, secretID, expectedResponseOwner, gatewayURL string, namespaces []string) { - t.Helper() - - framework.L.Info().Msgf("Updating secrets (namespaces=%v)...", namespaces) - require.NotEmpty(t, namespaces, "namespaces must not be empty") - - encryptedSecrets := buildEncryptedSecrets(secretID, auth.requestOwner, encryptedSecret, namespaces) - encryptedSecrets = append(encryptedSecrets, &vault_helpers.EncryptedSecret{ - Id: &vault_helpers.SecretIdentifier{ - Key: "invalid", - Owner: auth.requestOwner, - Namespace: namespaces[0], - }, - EncryptedValue: encryptedSecret, - }) - - uniqueRequestID := uuid.New().String() - secretsUpdateRequest := vault_helpers.UpdateSecretsRequest{ - RequestId: uniqueRequestID, - EncryptedSecrets: encryptedSecrets, - } - jsonRequest := newVaultJSONRequest(t, uniqueRequestID, vaulttypes.MethodSecretsUpdate, &secretsUpdateRequest) - auth.apply(t, &jsonRequest) - - jsonResponse := sendVaultSignedOCRRequestToGateway(t, gatewayURL, jsonRequest) - require.Equal(t, uniqueRequestID, jsonResponse.ID) - require.Equal(t, vaulttypes.MethodSecretsUpdate, jsonResponse.Method) - - updateSecretsResponse := vault_helpers.UpdateSecretsResponse{} - err := protojson.Unmarshal(jsonResponse.Result.Payload, &updateSecretsResponse) - require.NoError(t, err, "failed to decode payload into UpdateSecretsResponse proto") - - require.Len(t, updateSecretsResponse.Responses, len(namespaces)+1, "Expected one updated item per namespace plus one invalid item") - var foundInvalid bool - updateRespByNs := make(map[string]*vault_helpers.UpdateSecretResponse, len(namespaces)) - for _, r := range updateSecretsResponse.GetResponses() { - if r.GetId().GetKey() == "invalid" { - require.Contains(t, r.Error, "key does not exist") - foundInvalid = true - continue - } - updateRespByNs[r.GetId().GetNamespace()] = r - } - require.True(t, foundInvalid, "expected an error response for the 'invalid' key") - for _, namespace := range namespaces { - result, ok := updateRespByNs[namespace] - require.True(t, ok, "missing update response for namespace %s", namespace) - require.Empty(t, result.GetError()) - require.Equal(t, secretID, result.GetId().Key) - require.Equal(t, expectedResponseOwner, result.GetId().Owner) - } -} - -func executeVaultSecretsListWithAuth(t *testing.T, auth vaultRequestAuth, expectedKeys []string, expectedOwner, gatewayURL, namespace string) { - t.Helper() - - framework.L.Info().Msgf("Listing secrets (namespace=%s)...", namespace) - - uniqueRequestID := uuid.New().String() - secretsListRequest := vault_helpers.ListSecretIdentifiersRequest{ - RequestId: uniqueRequestID, - Owner: auth.requestOwner, - Namespace: namespace, - } - jsonRequest := newVaultJSONRequest(t, uniqueRequestID, vaulttypes.MethodSecretsList, &secretsListRequest) - auth.apply(t, &jsonRequest) - - jsonResponse := sendVaultSignedOCRRequestToGateway(t, gatewayURL, jsonRequest) - require.Equal(t, uniqueRequestID, jsonResponse.ID) - require.Equal(t, vaulttypes.MethodSecretsList, jsonResponse.Method) - - listSecretsResponse := vault_helpers.ListSecretIdentifiersResponse{} - err := protojson.Unmarshal(jsonResponse.Result.Payload, &listSecretsResponse) - require.NoError(t, err, "failed to decode payload into ListSecretIdentifiersResponse proto") - - require.True(t, listSecretsResponse.Success, err) - require.GreaterOrEqual(t, len(listSecretsResponse.Identifiers), len(expectedKeys), "Expected enough identifiers in the response") - keys := make([]string, 0, len(listSecretsResponse.Identifiers)) - for _, identifier := range listSecretsResponse.Identifiers { - keys = append(keys, identifier.Key) - require.Equal(t, expectedOwner, identifier.Owner) - require.Equal(t, namespace, identifier.Namespace) - } - for _, secretID := range expectedKeys { - require.Contains(t, keys, secretID) - } -} - -func executeVaultSecretsDeleteWithAuth(t *testing.T, auth vaultRequestAuth, secretID, expectedResponseOwner, gatewayURL string, namespaces []string) { - t.Helper() - - framework.L.Info().Msgf("Deleting secrets (namespaces=%v)...", namespaces) - require.NotEmpty(t, namespaces, "namespaces must not be empty") - - deleteIDs := buildSecretIdentifiers(secretID, auth.requestOwner, namespaces) - deleteIDs = append(deleteIDs, &vault_helpers.SecretIdentifier{ - Key: "invalid", - Owner: auth.requestOwner, - Namespace: namespaces[0], - }) - - uniqueRequestID := uuid.New().String() - secretsDeleteRequest := vault_helpers.DeleteSecretsRequest{ - RequestId: uniqueRequestID, - Ids: deleteIDs, - } - jsonRequest := newVaultJSONRequest(t, uniqueRequestID, vaulttypes.MethodSecretsDelete, &secretsDeleteRequest) - auth.apply(t, &jsonRequest) - - jsonResponse := sendVaultSignedOCRRequestToGateway(t, gatewayURL, jsonRequest) - require.Equal(t, uniqueRequestID, jsonResponse.ID) - require.Equal(t, vaulttypes.MethodSecretsDelete, jsonResponse.Method) - - deleteSecretsResponse := vault_helpers.DeleteSecretsResponse{} - err := protojson.Unmarshal(jsonResponse.Result.Payload, &deleteSecretsResponse) - require.NoError(t, err, "failed to decode payload into DeleteSecretResponse proto") - - require.Len(t, deleteSecretsResponse.Responses, len(namespaces)+1, "Expected one deleted item per namespace plus one invalid item") - var foundDeleteInvalid bool - deleteRespByNs := make(map[string]*vault_helpers.DeleteSecretResponse, len(namespaces)) - for _, r := range deleteSecretsResponse.GetResponses() { - if r.GetId().GetKey() == "invalid" { - require.Contains(t, r.Error, "key does not exist") - foundDeleteInvalid = true - continue - } - deleteRespByNs[r.GetId().GetNamespace()] = r - } - require.True(t, foundDeleteInvalid, "expected an error response for the 'invalid' key") - for _, namespace := range namespaces { - result, ok := deleteRespByNs[namespace] - require.True(t, ok, "missing delete response for namespace %s", namespace) - require.True(t, result.Success, result.Error) - require.Equal(t, expectedResponseOwner, result.Id.Owner) - require.Equal(t, secretID, result.Id.Key) - } -} - -func executeVaultAllowListSecretsCreateTest(t *testing.T, encryptedSecret, secretID, requestOwner, expectedResponseOwner, gatewayURL string, namespaces []string, sethClient *seth.Client, wfRegistryContract *workflow_registry_v2_wrapper.WorkflowRegistry) { - auth := newAllowlistVaultRequestAuth(requestOwner, sethClient, wfRegistryContract) - executeVaultSecretsCreateWithAuth(t, auth, encryptedSecret, secretID, expectedResponseOwner, gatewayURL, namespaces) -} - -func executeVaultJWTSecretsCreateTest(t *testing.T, issuer *vault.TestJWTIssuer, encryptedSecret, secretID, orgID, workflowOwner, gatewayURL string, namespaces []string) { - t.Helper() - - auth := newJWTVaultRequestAuth(issuer, orgID, workflowOwner) - executeVaultSecretsCreateWithAuth(t, auth, encryptedSecret, secretID, orgID, gatewayURL, namespaces) -} - -func executeVaultJWTSecretsListTest(t *testing.T, issuer *vault.TestJWTIssuer, secretID, orgID, workflowOwner, gatewayURL, namespace string) { - t.Helper() - - auth := newJWTVaultRequestAuth(issuer, orgID, workflowOwner) - executeVaultSecretsListWithAuth(t, auth, []string{secretID}, orgID, gatewayURL, namespace) -} - -func executeVaultJWTSecretsDeleteTest(t *testing.T, issuer *vault.TestJWTIssuer, secretID, orgID, workflowOwner, gatewayURL string, namespaces []string) { - t.Helper() - - auth := newJWTVaultRequestAuth(issuer, orgID, workflowOwner) - executeVaultSecretsDeleteWithAuth(t, auth, secretID, orgID, gatewayURL, namespaces) -} - -func mustMintVaultJWTForRequest(t *testing.T, issuer *vault.TestJWTIssuer, req jsonrpc.Request[json.RawMessage], orgID, workflowOwner string) string { - t.Helper() - - outboundReq := outboundRequestWithoutAuth(req) - requestDigest, err := outboundReq.Digest() - require.NoError(t, err, "failed to compute request digest") - - token, err := issuer.MintToken(vault.JWTTokenClaims{ - KeyID: vault.DefaultJWTIssuerKeyID, - Issuer: issuer.DockerIssuerURL(), - Audience: vault.DefaultJWTAudience, - OrgID: orgID, - WorkflowOwner: workflowOwner, - RequestDigest: requestDigest, - }) - require.NoError(t, err, "failed to mint JWT") - - return token -} - -func sendVaultJWTRequestToGatewayExpectError(t *testing.T, gatewayURL string, jsonRequest jsonrpc.Request[json.RawMessage], wantStatus int) jsonrpc.Response[json.RawMessage] { - t.Helper() - - authToken := jsonRequest.Auth - jsonRequest = outboundRequestWithoutAuth(jsonRequest) - - requestBody, err := json.Marshal(jsonRequest) - require.NoError(t, err, "failed to marshal JWT-authenticated request") - - headers := map[string]string{} - if authToken != "" { - headers["Authorization"] = "Bearer " + authToken - } - - statusCode, httpResponseBody := sendVaultRequestToGatewayWithHeaders(t, gatewayURL, requestBody, headers) - require.Equal(t, wantStatus, statusCode, "Gateway endpoint should respond with the expected error status") - - var jsonResponse jsonrpc.Response[json.RawMessage] - err = json.Unmarshal(httpResponseBody, &jsonResponse) - require.NoError(t, err, "failed to unmarshal gateway error response") - require.Equal(t, jsonrpc.JsonRpcVersion, jsonResponse.Version) - - return jsonResponse -} - -func outboundRequestWithoutAuth(req jsonrpc.Request[json.RawMessage]) jsonrpc.Request[json.RawMessage] { - req.Auth = "" - return req -} - -func executeVaultJWTSecretsCreateUnauthorizedTest( - t *testing.T, - issuer *vault.TestJWTIssuer, - vaultPublicKey, orgID, workflowOwner, gatewayURL string, - expectedAuthError string, -) { - t.Helper() - - secretID := strconv.Itoa(rand.Intn(10000)) - encryptedSecret, err := vaultutils.EncryptSecretWithOrgID("secret-jwt-disabled", mustVaultPublicKey(t, vaultPublicKey), orgID) - require.NoError(t, err) - - uniqueRequestID := uuid.New().String() - secretsCreateRequest := vault_helpers.CreateSecretsRequest{ - RequestId: uniqueRequestID, - EncryptedSecrets: []*vault_helpers.EncryptedSecret{{ - Id: &vault_helpers.SecretIdentifier{ - Key: secretID, - Owner: orgID, - Namespace: "main", - }, - EncryptedValue: encryptedSecret, - }}, - } - jsonRequest := newVaultJSONRequest(t, uniqueRequestID, vaulttypes.MethodSecretsCreate, &secretsCreateRequest) - jsonRequest.Auth = mustMintVaultJWTForRequest(t, issuer, jsonRequest, orgID, workflowOwner) - - jsonResponse := sendVaultJWTRequestToGatewayExpectError(t, gatewayURL, jsonRequest, http.StatusBadRequest) - require.Equal(t, uniqueRequestID, jsonResponse.ID) - require.Empty(t, jsonResponse.Method) - require.NotNil(t, jsonResponse.Error) - require.Contains(t, jsonResponse.Error.Error(), "request not authorized") - require.Contains(t, jsonResponse.Error.Error(), expectedAuthError) -} - -func executeVaultSecretsWorkflowChecksTest( - t *testing.T, testEnv *ttypes.TestEnvironment, - workflowBaseName string, - checks []vaultWorkflowCheck, - userLogsCh chan *workflowevents.UserLogs, baseMessageCh chan *commonevents.BaseMessage, -) { - t.Helper() - - workflowID := startVaultSecretsWorkflowPhasesTest(t, testEnv, workflowBaseName, []vaultWorkflowPhase{{ - Name: workflowBaseName, - Checks: checks, - }}) - waitForVaultWorkflowPhase(t, workflowID, workflowBaseName, userLogsCh, baseMessageCh) -} - -func startVaultSecretsWorkflowPhasesTest( - t *testing.T, testEnv *ttypes.TestEnvironment, - workflowBaseName string, - phases []vaultWorkflowPhase, -) string { - t.Helper() - - testLogger := framework.L - testLogger.Info(). - Str("workflow_base_name", workflowBaseName). - Int("phase_count", len(phases)). - Msg("Starting vault workflow phase verification") - - workflowName := t_helpers.UniqueWorkflowName(testEnv, workflowBaseName) - cfgPhases := make([]vaultsecret_config.Phase, 0, len(phases)) - for _, phase := range phases { - cfgChecks := make([]vaultsecret_config.Check, 0, len(phase.Checks)) - for _, check := range phase.Checks { - cfgChecks = append(cfgChecks, vaultsecret_config.Check{ - Name: check.Name, - SecretKey: check.SecretKey, - SecretNamespace: check.SecretNamespace, - ExpectedValue: check.ExpectedValue, - ExpectNotFound: check.ExpectNotFound, - }) - } - cfgPhases = append(cfgPhases, vaultsecret_config.Phase{ - Name: phase.Name, - Checks: cfgChecks, - }) - } - - cfg := &vaultsecret_config.Config{Phases: cfgPhases} - const workflowFileLocation = "./vaultsecret/main.go" - return t_helpers.CompileAndDeployWorkflow(t, testEnv, testLogger, workflowName, cfg, workflowFileLocation) -} - -func waitForVaultWorkflowPhase( - t *testing.T, - workflowID, phaseName string, - userLogsCh chan *workflowevents.UserLogs, - baseMessageCh chan *commonevents.BaseMessage, -) { - t.Helper() - - testLogger := framework.L - t_helpers.WatchWorkflowLogs( - t, - testLogger, - userLogsCh, - baseMessageCh, - t_helpers.WorkflowEngineInitErrorLog, - "Vault secret workflow phase completed: "+phaseName, - 4*time.Minute, - t_helpers.WithUserLogWorkflowID(workflowID), - ) - testLogger.Info().Str("phase_name", phaseName).Msg("Vault secret workflow phase completed") -} - -func executeVaultSecretsUpdateTest(t *testing.T, encryptedSecret, secretID, requestOwner, expectedResponseOwner, gatewayURL string, namespaces []string, sethClient *seth.Client, wfRegistryContract *workflow_registry_v2_wrapper.WorkflowRegistry) { - auth := newAllowlistVaultRequestAuth(requestOwner, sethClient, wfRegistryContract) - executeVaultSecretsUpdateWithAuth(t, auth, encryptedSecret, secretID, expectedResponseOwner, gatewayURL, namespaces) -} - -func executeVaultSecretsListTest(t *testing.T, secretID, requestOwner, expectedOwner, gatewayURL, namespace string, sethClient *seth.Client, wfRegistryContract *workflow_registry_v2_wrapper.WorkflowRegistry) { - auth := newAllowlistVaultRequestAuth(requestOwner, sethClient, wfRegistryContract) - executeVaultSecretsListWithAuth(t, auth, []string{secretID}, expectedOwner, gatewayURL, namespace) -} - -func executeVaultSecretsDeleteTest(t *testing.T, secretID, requestOwner, expectedResponseOwner, gatewayURL string, namespaces []string, sethClient *seth.Client, wfRegistryContract *workflow_registry_v2_wrapper.WorkflowRegistry) { - auth := newAllowlistVaultRequestAuth(requestOwner, sethClient, wfRegistryContract) - executeVaultSecretsDeleteWithAuth(t, auth, secretID, expectedResponseOwner, gatewayURL, namespaces) -} - -// updateVaultCapabilityConfigInRegistry updates the on-chain capabilities registry -// so that the vault@1.0.0 capability config includes DefaultConfig with VaultPublicKey -// and Threshold. This is required for workflows that call runtime.GetSecret(). -// Uses the original deployer key (not per-test key) since the registry is owned by the deployer. -func updateVaultCapabilityConfigInRegistry(t *testing.T, testEnv *ttypes.TestEnvironment, vaultPublicKey string) { - t.Helper() - testLogger := framework.L - testLogger.Info().Msg("Updating vault capability config in capabilities registry with VaultPublicKey...") - - capRegAddr := crecontracts.MustGetAddressFromDataStore( - testEnv.CreEnvironment.CldfEnvironment.DataStore, - testEnv.CreEnvironment.RegistryChainSelector, - keystone_changeset.CapabilitiesRegistry.String(), - testEnv.CreEnvironment.ContractVersions[keystone_changeset.CapabilitiesRegistry.String()], - "", - ) - - require.IsType(t, &evm.Blockchain{}, testEnv.CreEnvironment.Blockchains[0]) - sethClient := testEnv.CreEnvironment.Blockchains[0].(*evm.Blockchain).SethClient - - deployerClient, err := seth.NewClientBuilder(). - WithRpcUrl(sethClient.URL). - WithPrivateKeys([]string{ctfblockchain.DefaultAnvilPrivateKey}). - WithProtections(false, false, seth.MustMakeDuration(time.Second)). - Build() - require.NoError(t, err, "failed to create deployer seth client") - - capReg, err := capabilities_registry_v2.NewCapabilitiesRegistry( - common.HexToAddress(capRegAddr), deployerClient.Client, - ) - require.NoError(t, err, "failed to create capabilities registry wrapper") - - allDONs, err := capReg.GetDONs(&bind.CallOpts{}, big.NewInt(0), big.NewInt(100)) - require.NoError(t, err, "failed to get DONs from registry") - - var don *capabilities_registry_v2.CapabilitiesRegistryDONInfo - for i := range allDONs { - for _, cc := range allDONs[i].CapabilityConfigurations { - if cc.CapabilityId == "vault@1.0.0" { - don = &allDONs[i] - break - } - } - if don != nil { - break - } - } - require.NotNil(t, don, "could not find a DON with vault@1.0.0 capability in the registry") - testLogger.Info().Msgf("Found vault capability on DON %q (ID=%d)", don.Name, don.Id) - - newConfigs := make([]capabilities_registry_v2.CapabilitiesRegistryCapabilityConfiguration, 0, len(don.CapabilityConfigurations)) - for _, cc := range don.CapabilityConfigurations { - if cc.CapabilityId == "vault@1.0.0" { - existingConfig := &capabilitiespb.CapabilityConfig{} - if len(cc.Config) > 0 { - require.NoError(t, proto.Unmarshal(cc.Config, existingConfig), "failed to unmarshal existing vault capability config") - } - - vaultCfg := map[string]interface{}{ - "VaultPublicKey": vaultPublicKey, - "Threshold": 1, - } - valueMap, wrapErr := values.WrapMap(vaultCfg) - require.NoError(t, wrapErr, "failed to wrap vault config values") - - existingConfig.DefaultConfig = values.ProtoMap(valueMap) - - configBytes, marshalErr := proto.Marshal(existingConfig) - require.NoError(t, marshalErr, "failed to marshal updated vault capability config") - - cc.Config = configBytes - testLogger.Info().Msg("Injected VaultPublicKey and Threshold into vault@1.0.0 capability config") - } - newConfigs = append(newConfigs, cc) - } - - updateParams := capabilities_registry_v2.CapabilitiesRegistryUpdateDONParams{ - Name: don.Name, - Nodes: don.NodeP2PIds, - CapabilityConfigurations: newConfigs, - IsPublic: don.IsPublic, - F: don.F, - Config: don.Config, - } - - _, err = deployerClient.Decode(capReg.UpdateDONByName(deployerClient.NewTXOpts(), don.Name, updateParams)) - require.NoError(t, err, "UpdateDONByName tx failed") - - testLogger.Info().Msg("Waiting for registry syncer to propagate the on-chain config change...") - time.Sleep(15 * time.Second) // registry syncer polls every 12s; one tick + margin -} - -func allowlistRequest(t *testing.T, owner string, request jsonrpc.Request[json.RawMessage], sethClient *seth.Client, wfRegistryContract *workflow_registry_v2_wrapper.WorkflowRegistry) { - requestDigest, err := request.Digest() - require.NoError(t, err, "failed to get digest for request") - requestDigestBytes, err := hex.DecodeString(requestDigest) - require.NoError(t, err, "failed to decode digest") - reqDigestBytes := [32]byte(requestDigestBytes) - _, err = wfRegistryContract.AllowlistRequest(sethClient.NewTXOpts(), reqDigestBytes, uint32(time.Now().Add(1*time.Hour).Unix())) //nolint:gosec // disable G115 - require.NoError(t, err, "failed to allowlist request") - - framework.L.Info().Msgf("Allowlisting request digest at contract %s, for owner: %s, digestHexStr: %s", wfRegistryContract.Address().Hex(), owner, requestDigest) - allowedList, err := wfRegistryContract.GetAllowlistedRequests(&bind.CallOpts{}, big.NewInt(0), big.NewInt(100)) - require.NoError(t, err, "failed to validate allowlisted request") - for _, req := range allowedList { - if req.RequestDigest == reqDigestBytes { - framework.L.Info().Msgf("Request digest found in allowlist") - } - framework.L.Info().Msgf("Allowlisted request digestHexStr: %s, owner: %s, expiry: %d", hex.EncodeToString(req.RequestDigest[:]), req.Owner.Hex(), req.ExpiryTimestamp) - } -} diff --git a/system-tests/tests/smoke/cre/vaultsecret/config/config.go b/system-tests/tests/smoke/cre/vaultsecret/config/config.go index bde2a4c1b38..9b057eb7d17 100644 --- a/system-tests/tests/smoke/cre/vaultsecret/config/config.go +++ b/system-tests/tests/smoke/cre/vaultsecret/config/config.go @@ -1,58 +1,7 @@ package config -type Check struct { - Name string `yaml:"name,omitempty"` +type Config struct { SecretKey string `yaml:"secretKey"` SecretNamespace string `yaml:"secretNamespace"` - ExpectedValue string `yaml:"expectedValue,omitempty"` ExpectNotFound bool `yaml:"expectNotFound"` } - -type Phase struct { - Name string `yaml:"name"` - Checks []Check `yaml:"checks"` -} - -type Config struct { - Phases []Phase `yaml:"phases"` - Checks []Check `yaml:"checks"` - - // Legacy single-check fields kept for compatibility with any older callers. - SecretKey string `yaml:"secretKey,omitempty"` - SecretNamespace string `yaml:"secretNamespace,omitempty"` - ExpectedValue string `yaml:"expectedValue,omitempty"` - ExpectNotFound bool `yaml:"expectNotFound,omitempty"` -} - -func (c Config) EffectiveChecks() []Check { - if len(c.Checks) > 0 { - return c.Checks - } - - if c.SecretKey == "" && c.SecretNamespace == "" { - return nil - } - - return []Check{{ - SecretKey: c.SecretKey, - SecretNamespace: c.SecretNamespace, - ExpectedValue: c.ExpectedValue, - ExpectNotFound: c.ExpectNotFound, - }} -} - -func (c Config) EffectivePhases() []Phase { - if len(c.Phases) > 0 { - return c.Phases - } - - checks := c.EffectiveChecks() - if len(checks) == 0 { - return nil - } - - return []Phase{{ - Name: "default", - Checks: checks, - }} -} diff --git a/system-tests/tests/smoke/cre/vaultsecret/go.mod b/system-tests/tests/smoke/cre/vaultsecret/go.mod index e0fbaa7f7ca..12c623b2298 100644 --- a/system-tests/tests/smoke/cre/vaultsecret/go.mod +++ b/system-tests/tests/smoke/cre/vaultsecret/go.mod @@ -15,7 +15,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 // indirect + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 // indirect github.com/stretchr/testify v1.11.1 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect diff --git a/system-tests/tests/smoke/cre/vaultsecret/go.sum b/system-tests/tests/smoke/cre/vaultsecret/go.sum index 36d3ea1282d..e26a567397f 100644 --- a/system-tests/tests/smoke/cre/vaultsecret/go.sum +++ b/system-tests/tests/smoke/cre/vaultsecret/go.sum @@ -20,8 +20,8 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877 h1:6UueUIbck1Ogarm9rm/9TS6b09mKgMmx+YE8XFg63AQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260420204255-a3f3bdd56877/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/cre-sdk-go v1.5.0 h1:kepW3QDKARrOOHjXwWAZ9j5KLk6bxLzvi6OMrLsFwVo= github.com/smartcontractkit/cre-sdk-go v1.5.0/go.mod h1:yYrQFz1UH7hhRbPO0q4fgo1tfsJNd4yXnI3oCZE0RzM= github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v1.3.0 h1:qBZ4y6qlTOynSpU1QAi2Fgr3tUZQ332b6hit9EVZqkk= diff --git a/system-tests/tests/smoke/cre/vaultsecret/main.go b/system-tests/tests/smoke/cre/vaultsecret/main.go index dadd89c30db..b1233563cbe 100644 --- a/system-tests/tests/smoke/cre/vaultsecret/main.go +++ b/system-tests/tests/smoke/cre/vaultsecret/main.go @@ -36,84 +36,41 @@ func RunVaultSecretWorkflow(cfg config.Config, _ *slog.Logger, _ cre.SecretsProv } func onTrigger(cfg config.Config, runtime cre.Runtime, _ *cron.Payload) (string, error) { - phases := cfg.EffectivePhases() - if len(phases) == 0 { - return "", fmt.Errorf("no vault workflow phases configured") - } - - var lastErr error - for _, phase := range phases { - if err := evaluatePhase(runtime, phase); err != nil { - lastErr = err - runtime.Logger().Warn("Vault secret workflow phase not yet satisfied", - "phaseName", phase.Name, - "error", err, - ) - continue - } - - runtime.Logger().Info(fmt.Sprintf("Vault secret workflow phase completed: %s", phase.Name), - "phaseName", phase.Name, - "checkCount", len(phase.Checks), - ) - return fmt.Sprintf("Validated phase %s", phase.Name), nil - } - - return "", fmt.Errorf("no vault workflow phase matched current state: %w", lastErr) -} - -func evaluatePhase(runtime cre.Runtime, phase config.Phase) error { - if len(phase.Checks) == 0 { - return fmt.Errorf("phase %s has no checks", phase.Name) - } - - for _, check := range phase.Checks { - runtime.Logger().Info("Vault secret workflow triggered", - "phaseName", phase.Name, - "checkName", check.Name, - "secretKey", check.SecretKey, - "secretNamespace", check.SecretNamespace, - "expectNotFound", check.ExpectNotFound, - ) - - secret, err := runtime.GetSecret(&cre.SecretRequest{ - Namespace: check.SecretNamespace, - Id: check.SecretKey, - }).Await() - - if check.ExpectNotFound { - if err != nil && strings.Contains(err.Error(), "key does not exist") { - runtime.Logger().Info("Vault secret correctly not found after deletion", - "phaseName", phase.Name, - "checkName", check.Name, - "secretKey", check.SecretKey, - ) - continue - } - if err != nil { - return fmt.Errorf("phase %s check %s expected not found for key=%s but got: %w", phase.Name, check.Name, check.SecretKey, err) - } - return fmt.Errorf("phase %s check %s expected deleted secret key=%s, but it was still found", phase.Name, check.Name, check.SecretKey) + runtime.Logger().Info("Vault secret workflow triggered", + "secretKey", cfg.SecretKey, + "secretNamespace", cfg.SecretNamespace, + "expectNotFound", cfg.ExpectNotFound, + ) + + secret, err := runtime.GetSecret(&cre.SecretRequest{ + Namespace: cfg.SecretNamespace, + Id: cfg.SecretKey, + }).Await() + + if cfg.ExpectNotFound { + if err != nil && strings.Contains(err.Error(), "key does not exist") { + runtime.Logger().Info("Vault secret correctly not found after deletion", "secretKey", cfg.SecretKey) + return fmt.Sprintf("Secret correctly not found: key=%s", cfg.SecretKey), nil } - if err != nil { - return fmt.Errorf("phase %s check %s failed to get secret: %w", phase.Name, check.Name, err) - } - - if secret.Value == "" { - return fmt.Errorf("phase %s check %s secret value is empty for key=%s namespace=%s", phase.Name, check.Name, check.SecretKey, check.SecretNamespace) + runtime.Logger().Error("Expected 'key does not exist' but got a different error", + "error", err, "secretKey", cfg.SecretKey) + return "", fmt.Errorf("expected 'key does not exist' for key=%s, but got: %w", cfg.SecretKey, err) } + runtime.Logger().Error("Expected secret to be gone but retrieval succeeded", "secretKey", cfg.SecretKey) + return "", fmt.Errorf("expected secret key=%s to be deleted, but it was still found", cfg.SecretKey) + } - if check.ExpectedValue != "" && secret.Value != check.ExpectedValue { - return fmt.Errorf("phase %s check %s secret value mismatch for key=%s namespace=%s", phase.Name, check.Name, check.SecretKey, check.SecretNamespace) - } + if err != nil { + runtime.Logger().Error("Failed to get secret via workflow", "error", err) + return "", fmt.Errorf("failed to get secret: %w", err) + } - runtime.Logger().Info("Vault secret retrieved successfully via workflow", - "phaseName", phase.Name, - "checkName", check.Name, - "secretKey", check.SecretKey, - ) + if secret.Value == "" { + runtime.Logger().Error("Secret value is empty") + return "", fmt.Errorf("secret value is empty for key=%s namespace=%s", cfg.SecretKey, cfg.SecretNamespace) } - return nil + runtime.Logger().Info("Vault secret retrieved successfully via workflow", "secretKey", cfg.SecretKey) + return fmt.Sprintf("Secret retrieved: key=%s", cfg.SecretKey), nil } diff --git a/system-tests/tests/test-helpers/before_suite.go b/system-tests/tests/test-helpers/before_suite.go index 23197f4dc8e..8c83f676d7e 100644 --- a/system-tests/tests/test-helpers/before_suite.go +++ b/system-tests/tests/test-helpers/before_suite.go @@ -40,7 +40,6 @@ import ( "github.com/smartcontractkit/chainlink/system-tests/lib/cre/environment/blockchains" "github.com/smartcontractkit/chainlink/system-tests/lib/cre/environment/blockchains/evm" envconfig "github.com/smartcontractkit/chainlink/system-tests/lib/cre/environment/config" - crevault "github.com/smartcontractkit/chainlink/system-tests/lib/cre/vault" crecrypto "github.com/smartcontractkit/chainlink/system-tests/lib/crypto" ttypes "github.com/smartcontractkit/chainlink/system-tests/tests/test-helpers/configuration" @@ -129,8 +128,6 @@ func getOrCreateSharedEnvironment(t *testing.T, tconf *ttypes.TestConfig, flags sharedEnvMu.Unlock() entry.once.Do(func() { - _, err := crevault.EnsureSharedTestLinkingServiceStarted() - require.NoError(t, err, "failed to ensure linking service is running") createEnvironment(t, tconf, flags...) require.NoError(t, chiprouter.EnsureStarted(t.Context()), "failed to ensure chip ingress router is running") in := getEnvironmentConfig(t) diff --git a/system-tests/tests/test-helpers/t_helpers.go b/system-tests/tests/test-helpers/t_helpers.go index 537c8ba9253..830d071fb21 100644 --- a/system-tests/tests/test-helpers/t_helpers.go +++ b/system-tests/tests/test-helpers/t_helpers.go @@ -336,7 +336,6 @@ type WorkflowRegistrationConfig struct { DonID uint64 ContainerTargetDir string SethClient *seth.Client - Attributes []byte } /* @@ -645,7 +644,6 @@ func registerWorkflow(ctx context.Context, t *testing.T, binaryURL, configURL, nil, // no secrets yet - wfRegCfg.Attributes, containerTargetDir, ) require.NoError(t, registerErr, "failed to register workflow '%s'", wfRegCfg.WorkflowName) @@ -723,7 +721,6 @@ func CompileAndDeployWorkflow[T WorkflowConfig](t *testing.T, DonID: testEnv.Dons.MustWorkflowDON().ID, ContainerTargetDir: creworkflow.DefaultWorkflowTargetDir, SethClient: testEnv.CreEnvironment.Blockchains[0].(*evm.Blockchain).SethClient, - Attributes: cfg.attributes, } require.IsType(t, &evm.Blockchain{}, testEnv.CreEnvironment.Blockchains[0], "expected EVM blockchain type") workflowID := registerWorkflow(t.Context(), t, workflowRegConfig, testEnv.CreEnvironment.Blockchains[0].(*evm.Blockchain).SethClient, testLogger) @@ -732,7 +729,6 @@ func CompileAndDeployWorkflow[T WorkflowConfig](t *testing.T, type compileAndDeployWorkflowCfg struct { artifactCopyDONTypes []cre.CapabilityFlag - attributes []byte } // CompileAndDeployWorkflowOpt customizes workflow compilation/deployment behavior. @@ -748,16 +744,6 @@ func WithArtifactCopyDONTypes(donTypes ...cre.CapabilityFlag) CompileAndDeployWo } } -// WithAttributes sets the workflow attributes byte blob (JSON) written to the -// WorkflowRegistry contract on upsert. The CRE syncer reads this to decide -// routing (e.g. confidential execution via ConfidentialModule). The input is -// cloned so later caller mutations don't affect stored config. -func WithAttributes(attributes []byte) CompileAndDeployWorkflowOpt { - return func(cfg *compileAndDeployWorkflowCfg) { - cfg.attributes = slices.Clone(attributes) - } -} - func selectArtifactTargetDONs(testEnv *ttypes.TestEnvironment, donTypes []cre.CapabilityFlag) []*cre.Don { if len(donTypes) == 0 { donTypes = []cre.CapabilityFlag{cre.WorkflowDON} diff --git a/testdata/scripts/admin/profile/multi-chain-loopp.txtar b/testdata/scripts/admin/profile/multi-chain-loopp.txtar index bede57980e1..ad6ec0abc7b 100644 --- a/testdata/scripts/admin/profile/multi-chain-loopp.txtar +++ b/testdata/scripts/admin/profile/multi-chain-loopp.txtar @@ -11,7 +11,7 @@ exec curl --retry 10 --retry-max-time 60 --retry-connrefused $NODEURL exec chainlink --remote-node-url $NODEURL admin login -file creds --bypass-version-check exec chainlink --remote-node-url $NODEURL admin profile -seconds 1 -output_dir ./profiles -stderr 'Collecting profiles from host and 8 plugins: \[allocs block cmdline goroutine heap mutex threadcreate profile trace\]' +stderr 'Collecting profiles from host and 8 plugins: \[allocs block cmdline goroutine heap mutex profile threadcreate trace\]' exec sh -c 'eval "ls -R $WORK"' diff --git a/testdata/scripts/admin/profile/test-seconds.txtar b/testdata/scripts/admin/profile/test-seconds.txtar deleted file mode 100644 index 02b60b56bb8..00000000000 --- a/testdata/scripts/admin/profile/test-seconds.txtar +++ /dev/null @@ -1,33 +0,0 @@ -# start node -exec sh -c 'eval "echo \"$(cat config.toml.tmpl)\" > config.toml"' -exec chainlink node -c config.toml start -p password -a creds & - -# initialize client -env NODEURL=http://localhost:$PORT -exec curl --retry 10 --retry-max-time 60 --retry-connrefused $NODEURL -exec chainlink --remote-node-url $NODEURL admin login -file creds --bypass-version-check - -# seconds=0: no CPU and trace profiles are created -exec chainlink --remote-node-url $NODEURL admin profile -seconds 0 -output_dir ./profiles -stderr 'Collecting profiles: \[allocs block cmdline goroutine heap mutex threadcreate\]' - -# seconds=1: CPU and trace profiles are created -exec chainlink --remote-node-url $NODEURL admin profile -seconds 1 -output_dir ./profiles -stderr 'Collecting profiles: \[allocs block cmdline goroutine heap mutex threadcreate profile trace\]' - -exec sh -c 'eval "ls -R $WORK"' - --- testdb.txt -- -CL_DATABASE_URL --- testport.txt -- -PORT - --- password -- -T.tLHkcmwePT/p,]sYuntjwHKAsrhm#4eRs4LuKHwvHejWYAC2JP4M8HimwgmbaZ --- creds -- -notreal@fakeemail.ch -fj293fbBnlQ!f9vNs - --- config.toml.tmpl -- -[Webserver] -HTTPPort = $PORT diff --git a/tools/bin/go_core_ccip_deployment_tests b/tools/bin/go_core_ccip_deployment_tests index 5e286a42bb5..6c1b4f5a393 100755 --- a/tools/bin/go_core_ccip_deployment_tests +++ b/tools/bin/go_core_ccip_deployment_tests @@ -5,7 +5,7 @@ set +e SCRIPT_PATH=`dirname "$0"`; SCRIPT_PATH=`eval "cd \"$SCRIPT_PATH\" && pwd"` OUTPUT_FILE=${OUTPUT_FILE:-"./output.txt"} JUNIT_FILE=${JUNIT_FILE:-"./junit.xml"} -GO_TEST_TIMEOUT=${GO_TEST_TIMEOUT:-"15m"} +GO_TEST_TIMEOUT=${GO_TEST_TIMEOUT:-"25m"} # Adjusting freeport port block size for tests. export CL_RESERVE_PORTS=128 diff --git a/tools/bin/go_core_tests b/tools/bin/go_core_tests index f9aa0fd223c..858ec3ab241 100755 --- a/tools/bin/go_core_tests +++ b/tools/bin/go_core_tests @@ -5,7 +5,7 @@ set +e SCRIPT_PATH=`dirname "$0"`; SCRIPT_PATH=`eval "cd \"$SCRIPT_PATH\" && pwd"` OUTPUT_FILE=${OUTPUT_FILE:-"./output.txt"} JUNIT_FILE=${JUNIT_FILE:-"./junit.xml"} -GO_TEST_TIMEOUT=${GO_TEST_TIMEOUT:-"15m"} +GO_TEST_TIMEOUT=${GO_TEST_TIMEOUT:-"25m"} echo "Installing gotestsum..." go install gotest.tools/gotestsum@v1.13.0 diff --git a/tools/bin/go_core_tests_integration b/tools/bin/go_core_tests_integration index aaaa7fe7769..3949ffc8052 100755 --- a/tools/bin/go_core_tests_integration +++ b/tools/bin/go_core_tests_integration @@ -5,7 +5,7 @@ set +e SCRIPT_PATH=$(dirname "$0"); SCRIPT_PATH=$(eval "cd \"$SCRIPT_PATH\" && pwd") OUTPUT_FILE=${OUTPUT_FILE:-"./output.txt"} JUNIT_FILE=${JUNIT_FILE:-"./junit.xml"} -GO_TEST_TIMEOUT=${GO_TEST_TIMEOUT:-"15m"} +GO_TEST_TIMEOUT=${GO_TEST_TIMEOUT:-"25m"} EXTRA_FLAGS="" # Install gotestsum as test runner