diff --git a/datastore/changesets/delete_resources.go b/datastore/changesets/delete_resources.go new file mode 100644 index 0000000..42d236a --- /dev/null +++ b/datastore/changesets/delete_resources.go @@ -0,0 +1,107 @@ +package changesets + +import ( + "errors" + "fmt" + + cldfdatastore "github.com/smartcontractkit/chainlink-deployments-framework/datastore" + cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" + cldfops "github.com/smartcontractkit/chainlink-deployments-framework/operations" + + "github.com/smartcontractkit/cld-changesets/datastore/internal/keys" + datastoreseqs "github.com/smartcontractkit/cld-changesets/datastore/sequences" +) + +// DeleteResourcesChangeset stages deletions of address refs, contract metadata, and chain metadata +// in a single invocation. Staged deletions are not applied immediately; they are recorded in the +// Datastore and executed during the post-changeset merge phase. +type DeleteResourcesChangeset struct{} + +type DeleteResourcesChangesetInput struct { + AddressRefKeys []keys.AddressRefKey `json:"addressRefKeys"` + ContractMetadataKeys []keys.ContractMetadataKey `json:"contractMetadataKeys"` + ChainMetadataKeys []keys.ChainMetadataKey `json:"chainMetadataKeys"` +} + +// VerifyPreconditions ensures the input is valid. +func (DeleteResourcesChangeset) VerifyPreconditions(e cldf.Environment, input DeleteResourcesChangesetInput) error { + if e.DataStore == nil { + return errors.New("missing datastore in environment") + } + + if len(input.AddressRefKeys) == 0 && len(input.ContractMetadataKeys) == 0 && len(input.ChainMetadataKeys) == 0 { + return errors.New("at least one resource key slice must be non-empty") + } + + for i, key := range input.AddressRefKeys { + fwKey, err := key.ToFrameworkKey() + if err != nil { + return fmt.Errorf("addressRefKeys[%d]: %w", i, err) + } + + _, err = e.DataStore.Addresses().Get(fwKey) + if err != nil { + if errors.Is(err, cldfdatastore.ErrAddressRefNotFound) { + return fmt.Errorf("address ref entry for chain selector %v, type %v, version %v and qualifier %q does not exist", + fwKey.ChainSelector(), fwKey.Type(), fwKey.Version(), fwKey.Qualifier()) + } + + return fmt.Errorf("failed to retrieve address ref entry for chain selector %v, type %v, version %v and qualifier %q: %w", + fwKey.ChainSelector(), fwKey.Type(), fwKey.Version(), fwKey.Qualifier(), err) + } + } + + for _, key := range input.ContractMetadataKeys { + fwKey := key.ToFrameworkKey() + _, err := e.DataStore.ContractMetadata().Get(fwKey) + if err != nil { + if errors.Is(err, cldfdatastore.ErrContractMetadataNotFound) { + return fmt.Errorf("contract metadata entry for chain selector %v and address %v does not exist", + fwKey.ChainSelector(), fwKey.Address()) + } + + return fmt.Errorf("failed to retrieve contract metadata entry for chain selector %v and address %v: %w", + fwKey.ChainSelector(), fwKey.Address(), err) + } + } + + for _, key := range input.ChainMetadataKeys { + fwKey := key.ToFrameworkKey() + _, err := e.DataStore.ChainMetadata().Get(fwKey) + if err != nil { + if errors.Is(err, cldfdatastore.ErrChainMetadataNotFound) { + return fmt.Errorf("chain metadata entry for chain selector %v does not exist", fwKey.ChainSelector()) + } + + return fmt.Errorf("failed to retrieve chain metadata entry for chain selector %v: %w", fwKey.ChainSelector(), err) + } + } + + return nil +} + +// Apply executes the changeset, staging the resources to be deleted from the Datastore. +func (DeleteResourcesChangeset) Apply(e cldf.Environment, input DeleteResourcesChangesetInput) (cldf.ChangesetOutput, error) { + deps := datastoreseqs.DeleteResourcesSeqDeps{DataStore: e.DataStore} + seqInput := datastoreseqs.DeleteResourcesSeqInput{ + AddressRefKeys: input.AddressRefKeys, + ContractMetadataKeys: input.ContractMetadataKeys, + ChainMetadataKeys: input.ChainMetadataKeys, + } + + report, err := cldfops.ExecuteSequence( + e.OperationsBundle, + datastoreseqs.DeleteResourcesSeq, + deps, + seqInput, + ) + out := cldf.ChangesetOutput{ + DataStore: report.Output.DataStore, + Reports: report.ExecutionReports, + } + if err != nil { + return out, err + } + + return out, nil +} diff --git a/datastore/changesets/delete_resources_test.go b/datastore/changesets/delete_resources_test.go new file mode 100644 index 0000000..29c7265 --- /dev/null +++ b/datastore/changesets/delete_resources_test.go @@ -0,0 +1,216 @@ +package changesets + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/Masterminds/semver/v3" + + cldfdatastore "github.com/smartcontractkit/chainlink-deployments-framework/datastore" + cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" + cldfoperations "github.com/smartcontractkit/chainlink-deployments-framework/operations" + cldflogger "github.com/smartcontractkit/chainlink-deployments-framework/pkg/logger" + + "github.com/smartcontractkit/cld-changesets/datastore/internal/keys" +) + +func TestDeleteResourcesChangeset_VerifyPreconditions(t *testing.T) { + t.Parallel() + + version := semver.MustParse("1.0.0") + addressRef := cldfdatastore.AddressRef{Address: "0x01", ChainSelector: 1234, Type: "MyContract", Version: version, Qualifier: "q1"} + contractMetadata := cldfdatastore.ContractMetadata{Address: "0x02", ChainSelector: 1234, Metadata: "value"} + chainMetadata := cldfdatastore.ChainMetadata{ChainSelector: 5678, Metadata: "chain-value"} + + fullDS := func() cldfdatastore.DataStore { + ds := cldfdatastore.NewMemoryDataStore() + require.NoError(t, ds.Addresses().Add(addressRef)) + require.NoError(t, ds.ContractMetadata().Add(contractMetadata)) + require.NoError(t, ds.ChainMetadata().Add(chainMetadata)) + + return ds.Seal() + }() + + tests := []struct { + name string + env cldf.Environment + input DeleteResourcesChangesetInput + wantErr string + }{ + { + name: "success: all three resource types provided", + env: cldf.Environment{DataStore: fullDS}, + input: DeleteResourcesChangesetInput{ + AddressRefKeys: []keys.AddressRefKey{testAddressRefKey(addressRef)}, + ContractMetadataKeys: []keys.ContractMetadataKey{testContractMetadataKey(contractMetadata)}, + ChainMetadataKeys: []keys.ChainMetadataKey{testChainMetadataKey(chainMetadata)}, + }, + }, + { + name: "success: only address ref keys", + env: cldf.Environment{DataStore: fullDS}, + input: DeleteResourcesChangesetInput{ + AddressRefKeys: []keys.AddressRefKey{testAddressRefKey(addressRef)}, + }, + }, + { + name: "success: only contract metadata keys", + env: cldf.Environment{DataStore: fullDS}, + input: DeleteResourcesChangesetInput{ + ContractMetadataKeys: []keys.ContractMetadataKey{testContractMetadataKey(contractMetadata)}, + }, + }, + { + name: "success: only chain metadata keys", + env: cldf.Environment{DataStore: fullDS}, + input: DeleteResourcesChangesetInput{ + ChainMetadataKeys: []keys.ChainMetadataKey{testChainMetadataKey(chainMetadata)}, + }, + }, + { + name: "failure: missing datastore", + env: cldf.Environment{}, + input: DeleteResourcesChangesetInput{AddressRefKeys: []keys.AddressRefKey{testAddressRefKey(addressRef)}}, + wantErr: "missing datastore in environment", + }, + { + name: "failure: all key slices empty", + env: cldf.Environment{DataStore: cldfdatastore.NewMemoryDataStore().Seal()}, + input: DeleteResourcesChangesetInput{}, + wantErr: "at least one resource key slice must be non-empty", + }, + { + name: "failure: address ref entry does not exist", + env: cldf.Environment{DataStore: cldfdatastore.NewMemoryDataStore().Seal()}, + input: DeleteResourcesChangesetInput{ + AddressRefKeys: []keys.AddressRefKey{testAddressRefKey(addressRef)}, + }, + wantErr: fmt.Sprintf("address ref entry for chain selector %v, type %v, version %v and qualifier %q does not exist", + addressRef.ChainSelector, addressRef.Type, addressRef.Version, addressRef.Qualifier), + }, + { + name: "failure: contract metadata entry does not exist", + env: cldf.Environment{DataStore: cldfdatastore.NewMemoryDataStore().Seal()}, + input: DeleteResourcesChangesetInput{ + ContractMetadataKeys: []keys.ContractMetadataKey{testContractMetadataKey(contractMetadata)}, + }, + wantErr: fmt.Sprintf("contract metadata entry for chain selector %v and address %v does not exist", + contractMetadata.ChainSelector, contractMetadata.Address), + }, + { + name: "failure: chain metadata entry does not exist", + env: cldf.Environment{DataStore: cldfdatastore.NewMemoryDataStore().Seal()}, + input: DeleteResourcesChangesetInput{ + ChainMetadataKeys: []keys.ChainMetadataKey{testChainMetadataKey(chainMetadata)}, + }, + wantErr: fmt.Sprintf("chain metadata entry for chain selector %v does not exist", chainMetadata.ChainSelector), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + err := DeleteResourcesChangeset{}.VerifyPreconditions(tt.env, tt.input) + if tt.wantErr == "" { + require.NoError(t, err) + } else { + require.ErrorContains(t, err, tt.wantErr) + } + }) + } +} + +func TestDeleteResourcesChangeset_Apply(t *testing.T) { + t.Parallel() + + version := semver.MustParse("1.0.0") + addressRef := cldfdatastore.AddressRef{Address: "0x01", ChainSelector: 1234, Type: "MyContract", Version: version, Qualifier: "q1"} + contractMetadata := cldfdatastore.ContractMetadata{Address: "0x02", ChainSelector: 1234, Metadata: "value"} + chainMetadata := cldfdatastore.ChainMetadata{ChainSelector: 5678, Metadata: "chain-value"} + + fullDS := func() cldfdatastore.DataStore { + ds := cldfdatastore.NewMemoryDataStore() + require.NoError(t, ds.Addresses().Add(addressRef)) + require.NoError(t, ds.ContractMetadata().Add(contractMetadata)) + require.NoError(t, ds.ChainMetadata().Add(chainMetadata)) + + return ds.Seal() + }() + + bundle := cldfoperations.NewBundle(t.Context, cldflogger.Test(t), cldfoperations.NewMemoryReporter()) + + tests := []struct { + name string + input DeleteResourcesChangesetInput + wantReportCount int + wantAddressRefDeleted []string + wantContractMetaDeleted []string + wantChainMetaDeleted []string + }{ + { + name: "success: deletes only address refs", + input: DeleteResourcesChangesetInput{ + AddressRefKeys: []keys.AddressRefKey{testAddressRefKey(addressRef)}, + }, + wantReportCount: 4, + wantAddressRefDeleted: []string{addressRef.Key().String()}, + wantContractMetaDeleted: []string{}, + wantChainMetaDeleted: []string{}, + }, + { + name: "success: deletes mixed resources", + input: DeleteResourcesChangesetInput{ + AddressRefKeys: []keys.AddressRefKey{testAddressRefKey(addressRef)}, + ContractMetadataKeys: []keys.ContractMetadataKey{testContractMetadataKey(contractMetadata)}, + ChainMetadataKeys: []keys.ChainMetadataKey{testChainMetadataKey(chainMetadata)}, + }, + wantReportCount: 4, + wantAddressRefDeleted: []string{addressRef.Key().String()}, + wantContractMetaDeleted: []string{contractMetadata.Key().String()}, + wantChainMetaDeleted: []string{chainMetadata.Key().String()}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + env := cldf.Environment{ + DataStore: fullDS, + OperationsBundle: bundle, + } + + got, err := DeleteResourcesChangeset{}.Apply(env, tt.input) + require.NoError(t, err) + require.Len(t, got.Reports, tt.wantReportCount) + + memDS := got.DataStore.(*cldfdatastore.MemoryDataStore) + require.ElementsMatch(t, tt.wantAddressRefDeleted, memDS.AddressRefStore.DeletedRemoteKeys) + require.ElementsMatch(t, tt.wantContractMetaDeleted, memDS.ContractMetadataStore.DeletedRemoteKeys) + require.ElementsMatch(t, tt.wantChainMetaDeleted, memDS.ChainMetadataStore.DeletedRemoteKeys) + }) + } +} + +func testAddressRefKey(addressRef cldfdatastore.AddressRef) keys.AddressRefKey { + return keys.AddressRefKey{ + ChainSelector: addressRef.ChainSelector, + Type: addressRef.Type, + Version: addressRef.Version, + Qualifier: addressRef.Qualifier, + } +} + +func testContractMetadataKey(contractMetadata cldfdatastore.ContractMetadata) keys.ContractMetadataKey { + return keys.ContractMetadataKey{ + ChainSelector: contractMetadata.ChainSelector, + Address: contractMetadata.Address, + } +} + +func testChainMetadataKey(chainMetadata cldfdatastore.ChainMetadata) keys.ChainMetadataKey { + return keys.ChainMetadataKey{ChainSelector: chainMetadata.ChainSelector} +} diff --git a/datastore/sequences/delete_resources.go b/datastore/sequences/delete_resources.go new file mode 100644 index 0000000..cb61b59 --- /dev/null +++ b/datastore/sequences/delete_resources.go @@ -0,0 +1,74 @@ +package sequences + +import ( + "fmt" + + "github.com/Masterminds/semver/v3" + cldfdatastore "github.com/smartcontractkit/chainlink-deployments-framework/datastore" + cldfops "github.com/smartcontractkit/chainlink-deployments-framework/operations" + + "github.com/smartcontractkit/cld-changesets/datastore/internal/keys" + datastoreops "github.com/smartcontractkit/cld-changesets/datastore/operations" +) + +// DeleteResourcesSeqDeps holds non-serializable dependencies for the DeleteResourcesSeq sequence. +type DeleteResourcesSeqDeps struct { + DataStore cldfdatastore.DataStore +} + +// DeleteResourcesSeqInput is the serializable input of a DeleteResourcesSeq invocation. +type DeleteResourcesSeqInput struct { + AddressRefKeys []keys.AddressRefKey `json:"addressRefKeys"` + ContractMetadataKeys []keys.ContractMetadataKey `json:"contractMetadataKeys"` + ChainMetadataKeys []keys.ChainMetadataKey `json:"chainMetadataKeys"` +} + +// DeleteResourcesSeqOutput is the serializable output of a DeleteResourcesSeq invocation. +type DeleteResourcesSeqOutput struct { + DataStore cldfdatastore.MutableDataStore +} + +// DeleteResourcesSeq stages deletions across address refs, contract metadata, and chain metadata +// by composing the corresponding per-resource delete operations. Empty slices skip the corresponding +// resource type within each operation. Staged deletions are not applied immediately; they are recorded in the +// Datastore and executed during the post-changeset merge phase. +var DeleteResourcesSeq = cldfops.NewSequence( + "datastore-delete-resources", + semver.MustParse("1.0.0"), + "Stage deletions of address refs, contract metadata, and chain metadata from the Datastore", + func(b cldfops.Bundle, deps DeleteResourcesSeqDeps, input DeleteResourcesSeqInput) (DeleteResourcesSeqOutput, error) { + addressRefReport, err := cldfops.ExecuteOperation( + b, + datastoreops.DeleteAddressRefOp, + datastoreops.DeleteAddressRefDeps{DataStore: deps.DataStore}, + datastoreops.DeleteAddressRefInput{AddressRefKeys: input.AddressRefKeys}, + ) + if err != nil { + return DeleteResourcesSeqOutput{}, fmt.Errorf("failed to delete address refs: %w", err) + } + + contractMetadataReport, err := cldfops.ExecuteOperation( + b, + datastoreops.DeleteContractMetadataOp, + datastoreops.DeleteContractMetadataDeps{DataStore: addressRefReport.Output.DataStore.Seal()}, + datastoreops.DeleteContractMetadataInput{ContractMetadataKeys: input.ContractMetadataKeys}, + ) + if err != nil { + return DeleteResourcesSeqOutput{}, fmt.Errorf("failed to delete contract metadata: %w", err) + } + + chainMetadataReport, err := cldfops.ExecuteOperation( + b, + datastoreops.DeleteChainMetadataOp, + datastoreops.DeleteChainMetadataDeps{DataStore: contractMetadataReport.Output.DataStore.Seal()}, + datastoreops.DeleteChainMetadataInput{ChainMetadataKeys: input.ChainMetadataKeys}, + ) + if err != nil { + return DeleteResourcesSeqOutput{}, fmt.Errorf("failed to delete chain metadata: %w", err) + } + + b.Logger.Infow("Datastore resources successfully staged for deletion") + + return DeleteResourcesSeqOutput{DataStore: chainMetadataReport.Output.DataStore}, nil + }, +) diff --git a/datastore/sequences/delete_resources_test.go b/datastore/sequences/delete_resources_test.go new file mode 100644 index 0000000..19dcc72 --- /dev/null +++ b/datastore/sequences/delete_resources_test.go @@ -0,0 +1,153 @@ +package sequences + +import ( + "testing" + + "github.com/Masterminds/semver/v3" + "github.com/stretchr/testify/require" + + cldfdatastore "github.com/smartcontractkit/chainlink-deployments-framework/datastore" + cldfops "github.com/smartcontractkit/chainlink-deployments-framework/operations" + cldflogger "github.com/smartcontractkit/chainlink-deployments-framework/pkg/logger" + + "github.com/smartcontractkit/cld-changesets/datastore/internal/keys" +) + +func TestDeleteResourcesSeq(t *testing.T) { + t.Parallel() + + version := semver.MustParse("1.0.0") + addressRef := cldfdatastore.AddressRef{Address: "0x01", ChainSelector: 1234, Type: "MyContract", Version: version, Qualifier: "q1"} + contractMetadata := cldfdatastore.ContractMetadata{Address: "0x02", ChainSelector: 1234, Metadata: "value"} + chainMetadata := cldfdatastore.ChainMetadata{ChainSelector: 5678, Metadata: "chain-value"} + + bundle := func(t *testing.T) cldfops.Bundle { + t.Helper() + return cldfops.NewBundle(t.Context, cldflogger.Test(t), cldfops.NewMemoryReporter()) + } + + tests := []struct { + name string + input DeleteResourcesSeqInput + setup func(t *testing.T) cldfdatastore.DataStore + wantAddressRefDeleted []string + wantContractMetaDeleted []string + wantChainMetaDeleted []string + wantErr string + }{ + { + name: "success: deletes only address refs when other slices are empty", + setup: func(t *testing.T) cldfdatastore.DataStore { + t.Helper() + return testDataStore(t, addressRef, contractMetadata, chainMetadata).Seal() + }, + input: DeleteResourcesSeqInput{ + AddressRefKeys: []keys.AddressRefKey{testAddressRefKey(addressRef)}, + }, + wantAddressRefDeleted: []string{addressRef.Key().String()}, + wantContractMetaDeleted: []string{}, + wantChainMetaDeleted: []string{}, + }, + { + name: "success: deletes only contract metadata when other slices are empty", + setup: func(t *testing.T) cldfdatastore.DataStore { + t.Helper() + return testDataStore(t, addressRef, contractMetadata, chainMetadata).Seal() + }, + input: DeleteResourcesSeqInput{ + ContractMetadataKeys: []keys.ContractMetadataKey{testContractMetadataKey(contractMetadata)}, + }, + wantAddressRefDeleted: []string{}, + wantContractMetaDeleted: []string{contractMetadata.Key().String()}, + wantChainMetaDeleted: []string{}, + }, + { + name: "success: deletes only chain metadata when other slices are empty", + setup: func(t *testing.T) cldfdatastore.DataStore { + t.Helper() + return testDataStore(t, addressRef, contractMetadata, chainMetadata).Seal() + }, + input: DeleteResourcesSeqInput{ + ChainMetadataKeys: []keys.ChainMetadataKey{testChainMetadataKey(chainMetadata)}, + }, + wantAddressRefDeleted: []string{}, + wantContractMetaDeleted: []string{}, + wantChainMetaDeleted: []string{chainMetadata.Key().String()}, + }, + { + name: "success: deletes mixed resources in a single invocation", + setup: func(t *testing.T) cldfdatastore.DataStore { + t.Helper() + return testDataStore(t, addressRef, contractMetadata, chainMetadata).Seal() + }, + input: DeleteResourcesSeqInput{ + AddressRefKeys: []keys.AddressRefKey{testAddressRefKey(addressRef)}, + ContractMetadataKeys: []keys.ContractMetadataKey{testContractMetadataKey(contractMetadata)}, + ChainMetadataKeys: []keys.ChainMetadataKey{testChainMetadataKey(chainMetadata)}, + }, + wantAddressRefDeleted: []string{addressRef.Key().String()}, + wantContractMetaDeleted: []string{contractMetadata.Key().String()}, + wantChainMetaDeleted: []string{chainMetadata.Key().String()}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + deps := DeleteResourcesSeqDeps{DataStore: tt.setup(t)} + report, err := cldfops.ExecuteSequence(bundle(t), DeleteResourcesSeq, deps, tt.input) + + if tt.wantErr != "" { + require.ErrorContains(t, err, tt.wantErr) + return + } + + require.NoError(t, err) + memDS := report.Output.DataStore.(*cldfdatastore.MemoryDataStore) + require.ElementsMatch(t, tt.wantAddressRefDeleted, memDS.AddressRefStore.DeletedRemoteKeys) + require.ElementsMatch(t, tt.wantContractMetaDeleted, memDS.ContractMetadataStore.DeletedRemoteKeys) + require.ElementsMatch(t, tt.wantChainMetaDeleted, memDS.ChainMetadataStore.DeletedRemoteKeys) + }) + } +} + +// ----- helpers ----- + +func testDataStore(t *testing.T, addressRefs ...any) cldfdatastore.MutableDataStore { + t.Helper() + + ds := cldfdatastore.NewMemoryDataStore() + for _, r := range addressRefs { + switch v := r.(type) { + case cldfdatastore.AddressRef: + require.NoError(t, ds.Addresses().Add(v)) + case cldfdatastore.ContractMetadata: + require.NoError(t, ds.ContractMetadata().Add(v)) + case cldfdatastore.ChainMetadata: + require.NoError(t, ds.ChainMetadata().Add(v)) + } + } + + return ds +} + +func testAddressRefKey(addressRef cldfdatastore.AddressRef) keys.AddressRefKey { + return keys.AddressRefKey{ + ChainSelector: addressRef.ChainSelector, + Type: addressRef.Type, + Version: addressRef.Version, + Qualifier: addressRef.Qualifier, + } +} + +func testContractMetadataKey(contractMetadata cldfdatastore.ContractMetadata) keys.ContractMetadataKey { + return keys.ContractMetadataKey{ + ChainSelector: contractMetadata.ChainSelector, + Address: contractMetadata.Address, + } +} + +func testChainMetadataKey(chainMetadata cldfdatastore.ChainMetadata) keys.ChainMetadataKey { + return keys.ChainMetadataKey{ChainSelector: chainMetadata.ChainSelector} +} diff --git a/go.mod b/go.mod index 4ff5574..d906ad9 100644 --- a/go.mod +++ b/go.mod @@ -18,10 +18,10 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.102 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-deployments-framework v0.109.0 + github.com/smartcontractkit/chainlink-deployments-framework v0.111.0 github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20260421142741-9c7fbaf7c828 - github.com/smartcontractkit/chainlink-protos/job-distributor v0.18.0 - github.com/smartcontractkit/mcms v0.45.0 + github.com/smartcontractkit/chainlink-protos/job-distributor v0.19.0 + github.com/smartcontractkit/mcms v0.47.1-0.20260610155329-856384f2ce70 github.com/smartcontractkit/quarantine v0.0.0-20251203215908-fd0551c6adf9 github.com/smartcontractkit/wsrpc v0.8.5-0.20250502134807-c57d3d995945 github.com/spf13/cast v1.10.0 @@ -34,6 +34,7 @@ require ( ) require ( + cloud.google.com/go/compute/metadata v0.9.0 // indirect dario.cat/mergo v1.0.2 // indirect filippo.io/edwards25519 v1.1.1 // indirect github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect @@ -47,22 +48,22 @@ require ( github.com/avast/retry-go/v4 v4.7.0 // indirect github.com/awalterschulze/gographviz v2.0.3+incompatible // indirect github.com/aws/aws-sdk-go v1.55.8 // indirect - github.com/aws/aws-sdk-go-v2 v1.41.7 // indirect - github.com/aws/aws-sdk-go-v2/config v1.32.12 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.19.12 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect - github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.59.2 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 // indirect + github.com/aws/aws-sdk-go-v2 v1.42.0 // indirect + github.com/aws/aws-sdk-go-v2/config v1.32.24 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.23 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30 // indirect + github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.61.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29 // indirect github.com/aws/aws-sdk-go-v2/service/kms v1.50.1 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 // indirect - github.com/aws/smithy-go v1.26.0 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.1.5 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.31.3 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.43.3 // indirect + github.com/aws/smithy-go v1.27.1 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect github.com/benbjohnson/clock v1.3.5 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -129,7 +130,7 @@ require ( github.com/go-openapi/swag v0.23.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.2 // indirect + github.com/go-playground/validator/v10 v10.30.3 // indirect github.com/go-resty/resty/v2 v2.17.2 // indirect github.com/go-sql-driver/mysql v1.9.3 // indirect github.com/go-viper/mapstructure/v2 v2.5.0 // indirect @@ -236,6 +237,7 @@ require ( github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 // indirect github.com/sirupsen/logrus v1.9.4 // indirect github.com/smartcontractkit/chainlink-aptos v0.0.0-20260430175646-295a7f9a1500 // indirect + github.com/smartcontractkit/chainlink-canton v0.0.0-20260609155219-dcbe77d4a320 // indirect github.com/smartcontractkit/chainlink-common v0.11.2-0.20260506120607-7f10be016c89 // indirect github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 // indirect github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260505131349-78e491b80735 // indirect @@ -243,11 +245,12 @@ require ( github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260319180422-b5808c964785 // indirect github.com/smartcontractkit/chainlink-protos/op-catalog v0.1.0 // indirect github.com/smartcontractkit/chainlink-sui v0.0.0-20260527160341-aa3adc0abf67 // indirect - github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.4 // indirect + github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.5 // indirect github.com/smartcontractkit/chainlink-testing-framework/seth v1.51.5 // indirect github.com/smartcontractkit/chainlink-ton v1.0.5-0.20260514223130-48bc90aca745 // 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 + github.com/smartcontractkit/go-daml v0.0.0-20260604143752-c6f6567940ba // indirect github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect github.com/smartcontractkit/libocr v0.0.0-20260403184524-b6409238958d // indirect github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect diff --git a/go.sum b/go.sum index 2505a1b..30ac568 100644 --- a/go.sum +++ b/go.sum @@ -13,6 +13,8 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= +cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= @@ -82,38 +84,38 @@ github.com/aws/aws-sdk-go v1.22.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.55.8 h1:JRmEUbU52aJQZ2AjX4q4Wu7t4uZjOu71uyNmaWlUkJQ= github.com/aws/aws-sdk-go v1.55.8/go.mod h1:ZkViS9AqA6otK+JBBNH2++sx1sgxrPKcSzPPvQkUtXk= -github.com/aws/aws-sdk-go-v2 v1.41.7 h1:DWpAJt66FmnnaRIOT/8ASTucrvuDPZASqhhLey6tLY8= -github.com/aws/aws-sdk-go-v2 v1.41.7/go.mod h1:4LAfZOPHNVNQEckOACQx60Y8pSRjIkNZQz1w92xpMJc= -github.com/aws/aws-sdk-go-v2/config v1.32.12 h1:O3csC7HUGn2895eNrLytOJQdoL2xyJy0iYXhoZ1OmP0= -github.com/aws/aws-sdk-go-v2/config v1.32.12/go.mod h1:96zTvoOFR4FURjI+/5wY1vc1ABceROO4lWgWJuxgy0g= -github.com/aws/aws-sdk-go-v2/credentials v1.19.12 h1:oqtA6v+y5fZg//tcTWahyN9PEn5eDU/Wpvc2+kJ4aY8= -github.com/aws/aws-sdk-go-v2/credentials v1.19.12/go.mod h1:U3R1RtSHx6NB0DvEQFGyf/0sbrpJrluENHdPy1j/3TE= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 h1:zOgq3uezl5nznfoK3ODuqbhVg1JzAGDUhXOsU0IDCAo= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20/go.mod h1:z/MVwUARehy6GAg/yQ1GO2IMl0k++cu1ohP9zo887wE= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 h1:CNXO7mvgThFGqOFgbNAP2nol2qAWBOGfqR/7tQlvLmc= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20/go.mod h1:oydPDJKcfMhgfcgBUZaG+toBbwy8yPWubJXBVERtI4o= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 h1:tN6W/hg+pkM+tf9XDkWUbDEjGLb+raoBMFsTodcoYKw= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20/go.mod h1:YJ898MhD067hSHA6xYCx5ts/jEd8BSOLtQDL3iZsvbc= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= -github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.59.2 h1:I1oExVl2b6nJGv//TcU78k9Covm/htQ5gwPIcDlM2PI= -github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.59.2/go.mod h1:sxvHFUS0fM9Y3BpmDvwrO9fnQC0CrFSG8KD9THjv6k4= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 h1:2HvVAIq+YqgGotK6EkMf+KIEqTISmTYh5zLpYyeTo1Y= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20/go.mod h1:V4X406Y666khGa8ghKmphma/7C0DAtEQYhkq9z4vpbk= +github.com/aws/aws-sdk-go-v2 v1.42.0 h1:XvXMJTkFQtpBKIWZnmr9ZEOc2InWM2yldjXEJ/bymhA= +github.com/aws/aws-sdk-go-v2 v1.42.0/go.mod h1:27+ACypSLljLAEKsCYOmrjKh83vuTRkuAe9Uv/3A4bg= +github.com/aws/aws-sdk-go-v2/config v1.32.24 h1:aEDEj533yGdVvEHfkCY0D/1FbDrjnZr4pIulxRjqpHs= +github.com/aws/aws-sdk-go-v2/config v1.32.24/go.mod h1:yZtrGKJGlqfEW+/m2uTsJK+Jz7xF5R0eZfgcIG9m1ss= +github.com/aws/aws-sdk-go-v2/credentials v1.19.23 h1:Zhu3GOpRCkNjtE/gJpuPDsytSnaCCTQk8neAGsgzG5Y= +github.com/aws/aws-sdk-go-v2/credentials v1.19.23/go.mod h1:VsJF2ropPB37gDr7M2rLSpCE8IQWdpl62uae7qxZmqU= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29 h1:r6qZHbT+wxgWO/e9vYNUEtg7lv5+UN3pRqKhLXvnArg= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29/go.mod h1:QRnaRcTVGKPGRy8w78HMQtKUGRYcnMZAANATkeVA6Mo= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29 h1:f3vKqSo13fhTYb+JEcXwXefZQE26I1FB5eTSniU67ko= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29/go.mod h1:MzoLFUArKGpGD+ukmPiTPG1X5x4o6M2kq4v2dr1FiEc= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29 h1:RdwIf/CuUsvJX3RgJagbOyotl/cxoLY4xviKuE7p2GY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29/go.mod h1:71wt8W2EgswdZy9Mf9KNnzxZ3TiZlv4caKghPktDOkA= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30 h1:VTGy885W5DKBxWRUJbym9hytNaYzsyaPkCHGRRMAOhU= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30/go.mod h1:AS0HycUvJRFvTt613AYDOgO2jzw+00cVSMny8XB3yMY= +github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.61.4 h1:KDPcknxnbdpcAU04wq+9wfDW4Yoo9h0tsO8Uv+oES4c= +github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.61.4/go.mod h1:fhiInRlq2MkbUqzDYoWLF+dE/NdEg24s9TML5FcSwhA= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 h1:ZD2+BSw9vFsNlKYIasSNt3uDbjqqXIBcM13UJv/Lx2k= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12/go.mod h1:Ms4zlcVBbXbiP7EVLhl+lgjvA/a7YphqQ3Ih3174EmI= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29 h1:DRebniUGZ2MqiiIVmQJ04vIXr918hubdHMnarSLEWyU= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29/go.mod h1:LfRkPCD8YHDM2E5eTkos2UpwYeZnBcVarTa8L59bJHA= github.com/aws/aws-sdk-go-v2/service/kms v1.50.1 h1:wb/PYYm3wlcqGzw7Ls4GD3X5+seDDoNdVYIB6I/V87E= github.com/aws/aws-sdk-go-v2/service/kms v1.50.1/go.mod h1:xvHowJ6J9CuaFE04S8fitWQXytf4sHz3DTPGhw9FtmU= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 h1:0GFOLzEbOyZABS3PhYfBIx2rNBACYcKty+XGkTgw1ow= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.8/go.mod h1:LXypKvk85AROkKhOG6/YEcHFPoX+prKTowKnVdcaIxE= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 h1:kiIDLZ005EcKomYYITtfsjn7dtOwHDOFy7IbPXKek2o= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.13/go.mod h1:2h/xGEowcW/g38g06g3KpRWDlT+OTfxxI0o1KqayAB8= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 h1:jzKAXIlhZhJbnYwHbvUQZEB8KfgAEuG0dc08Bkda7NU= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17/go.mod h1:Al9fFsXjv4KfbzQHGe6V4NZSZQXecFcvaIF4e70FoRA= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 h1:Cng+OOwCHmFljXIxpEVXAGMnBia8MSU6Ch5i9PgBkcU= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.9/go.mod h1:LrlIndBDdjA/EeXeyNBle+gyCwTlizzW5ycgWnvIxkk= -github.com/aws/smithy-go v1.26.0 h1:9ouqbi+NyKP7fV3Te7UElCwdAb6Y8uk7LGwPE5tVe/s= -github.com/aws/smithy-go v1.26.0/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= +github.com/aws/aws-sdk-go-v2/service/signin v1.1.5 h1:6Xt6Ztjkwdia/7EtEaG7ki/qZUYlCcd7tGUotQed1QE= +github.com/aws/aws-sdk-go-v2/service/signin v1.1.5/go.mod h1:LxYujSTLPRlp2vTtcUO/+1ilrew8ytt6SvQyOgejzFQ= +github.com/aws/aws-sdk-go-v2/service/sso v1.31.3 h1:ey1XLTYXb9PcLt4535632o5kCGXNXEhNb620Dqwuylo= +github.com/aws/aws-sdk-go-v2/service/sso v1.31.3/go.mod h1:Lk7PlmoTYryQmyBG0EXqj5BcUbj3whXdU2s3yGI3EAc= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6 h1:yLr03zQE/5Eu5l3QU0Si+xMbLMbSDF2YXsigqXngs6g= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6/go.mod h1:Q5N6icH+KJZDLh+ESNwzdv6cZ6vLFF/egy3IOxWhmz4= +github.com/aws/aws-sdk-go-v2/service/sts v1.43.3 h1:VrIhKRCSK1umelSgB9RghvA9RTUYeQffyAS5ApXehNI= +github.com/aws/aws-sdk-go-v2/service/sts v1.43.3/go.mod h1:r8wkDOuLaaMFqFiYAb8dGY2A3gJCOujMc6CFOVC4Zhc= +github.com/aws/smithy-go v1.27.1 h1:4T340VFndXtADGF52gYa1POyL7s9E4Z1OeZ1hCscIw8= +github.com/aws/smithy-go v1.27.1/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= @@ -368,8 +370,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.2 h1:JiFIMtSSHb2/XBUbWM4i/MpeQm9ZK2xqPNk8vgvu5JQ= -github.com/go-playground/validator/v10 v10.30.2/go.mod h1:mAf2pIOVXjTEBrwUMGKkCWKKPs9NheYGabeB04txQSc= +github.com/go-playground/validator/v10 v10.30.3 h1:4MU6YkEwx7GbcPJOZxrtbu+QfF3pJLJuaYTeAH0DYy8= +github.com/go-playground/validator/v10 v10.30.3/go.mod h1:4Axh7oCNGcoGkqLoE4YWt6n20mcEIsPRlB7vPk3lpyc= 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= @@ -847,6 +849,8 @@ github.com/smartcontractkit/chain-selectors v1.0.102 h1:qYP4+72HfvogCHR5ymwRFee3 github.com/smartcontractkit/chain-selectors v1.0.102/go.mod h1:qy7whtgG5g+7z0jt0nRyii9bLND9m15NZTzuQPkMZ5w= github.com/smartcontractkit/chainlink-aptos v0.0.0-20260430175646-295a7f9a1500 h1:045jrHCLI+MpeAyByJkyHbEjq0+aTPt04C7+sbsNNtw= github.com/smartcontractkit/chainlink-aptos v0.0.0-20260430175646-295a7f9a1500/go.mod h1:zfE2R7887kiwXkGTHKPe5NBgwhFwIC3pnA2uAxrbvig= +github.com/smartcontractkit/chainlink-canton v0.0.0-20260609155219-dcbe77d4a320 h1:ix4tCtSTB7S2XGll+uqnhrqAQ+2iW/Zk/vnPjBMYRB0= +github.com/smartcontractkit/chainlink-canton v0.0.0-20260609155219-dcbe77d4a320/go.mod h1:WKmNUX4oy8IvB66ukudrE99uaXjlZ7WghCDwHOTyB1c= 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= @@ -855,14 +859,14 @@ github.com/smartcontractkit/chainlink-common v0.11.2-0.20260506120607-7f10be016c github.com/smartcontractkit/chainlink-common v0.11.2-0.20260506120607-7f10be016c89/go.mod h1:G2AII0QmWzXx8Ag9IKnGN3h/gwwNnhHUOCviJievdvo= 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-deployments-framework v0.109.0 h1:sURmdL2OnO55SETWIFzIEqQH7RCiHJyW7on8HvfnLY8= -github.com/smartcontractkit/chainlink-deployments-framework v0.109.0/go.mod h1:ubpvoLoRdru8IQHw3TFr7KthbjYpAwmiRmvvNCf2daA= +github.com/smartcontractkit/chainlink-deployments-framework v0.111.0 h1:T/tPyNwWLMQaNsryIrtVDmtakfSm07Zksv/dmhxYQuQ= +github.com/smartcontractkit/chainlink-deployments-framework v0.111.0/go.mod h1:F0GCGOpYbXsh1WeyfdUwziEJENphWNK7+5/u+4P2ND4= github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20260421142741-9c7fbaf7c828 h1:BmsFk/TSHL6dPPR86GTqgSrUXLSINNFC6cfpFRrQX+4= github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20260421142741-9c7fbaf7c828/go.mod h1:a260YnLyWq2NHLUN5cSVyMGk9nhO6RguCaTI2rsVqyA= github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260505131349-78e491b80735 h1:5bxDnwI0wuPoC0H5H3H2n9CnQPb5iakR6UmAY4j8KUg= github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260505131349-78e491b80735/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= -github.com/smartcontractkit/chainlink-protos/job-distributor v0.18.0 h1:q+VDPcxWrj5k9QizSYfUOSMnDH3Sd5HvbPguZOgfXTY= -github.com/smartcontractkit/chainlink-protos/job-distributor v0.18.0/go.mod h1:/dVVLXrsp+V0AbcYGJo3XMzKg3CkELsweA/TTopCsKE= +github.com/smartcontractkit/chainlink-protos/job-distributor v0.19.0 h1:FC+WdJ8YkRUlL94cN2EgdrA5TcJg04b82dqayq9rQz0= +github.com/smartcontractkit/chainlink-protos/job-distributor v0.19.0/go.mod h1:2ahgl5bI9+fMCD+dBC785Lak38Tb7ApdTe5I8a09Qp0= github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b h1:QuI6SmQFK/zyUlVWEf0GMkiUYBPY4lssn26nKSd/bOM= github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b/go.mod h1:qSTSwX3cBP3FKQwQacdjArqv0g6QnukjV4XuzO6UyoY= github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260319180422-b5808c964785 h1:oli+2uLU6jcrJGCuYFqk3475hiwL17SWlITWLv+tx/w= @@ -871,8 +875,8 @@ github.com/smartcontractkit/chainlink-protos/op-catalog v0.1.0 h1:hGEJFD2X3oNIPX github.com/smartcontractkit/chainlink-protos/op-catalog v0.1.0/go.mod h1:PjZD54vr6rIKEKQj6HNA4hllvYI/QpT+Zefj3tqkFAs= github.com/smartcontractkit/chainlink-sui v0.0.0-20260527160341-aa3adc0abf67 h1:NNvPOgvf5vbOYVLxLST+5E88iPOAnpmzZGPihEx8DFc= github.com/smartcontractkit/chainlink-sui v0.0.0-20260527160341-aa3adc0abf67/go.mod h1:k1HSbHyPaQWPOj6lXDIAe04EuwbC5ge1nK+cpG2E8hE= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.4 h1:8M+2pA0qx9rXaxmpKouUHj983vQCGzztHkG0XjE5Eew= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.4/go.mod h1:nyOjn4ADJGqRMe3+4ZXSV+J/7nWb1H2Vx8Qk57eLRYA= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.5 h1:EiQx0LCPzxlfO9piSPeMCVSZAnp/BxAsPIGh/jBal18= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.5/go.mod h1:nyOjn4ADJGqRMe3+4ZXSV+J/7nWb1H2Vx8Qk57eLRYA= github.com/smartcontractkit/chainlink-testing-framework/seth v1.51.5 h1:RwZXxdIAOyjp6cwc9Quxgr38k8r7ACz+Lxh9o/A6oH0= github.com/smartcontractkit/chainlink-testing-framework/seth v1.51.5/go.mod h1:kHYJnZUqiPF7/xN5273prV+srrLJkS77GbBXHLKQpx0= github.com/smartcontractkit/chainlink-ton v1.0.5-0.20260514223130-48bc90aca745 h1:eieKLvYuzwBPh/FdbUS1gnIanI86zgWby1L10o90g4o= @@ -883,12 +887,14 @@ github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.202510141 github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20251014120029-d73d15cc23f7/go.mod h1:ea1LESxlSSOgc2zZBqf1RTkXTMthHaspdqUHd7W4lF0= 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/go-daml v0.0.0-20260604143752-c6f6567940ba h1:peYJwUWOv54aigdk1VFzkmXdZmZK4xixfxv0Af1l6/I= +github.com/smartcontractkit/go-daml v0.0.0-20260604143752-c6f6567940ba/go.mod h1:SqWfl3Bp9NleC9jhzFUaOGzOZeKfldpY4QOW6A6NSNM= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7/go.mod h1:FX7/bVdoep147QQhsOPkYsPEXhGZjeYx6lBSaSXtZOA= 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/mcms v0.45.0 h1:6Zx80KKLQOPXLhvrRkJKClANnBJmPa/r69CV5UUq/0I= -github.com/smartcontractkit/mcms v0.45.0/go.mod h1:/uOE69QmF7opKlaBNzp8djypmBoYSW0mk4V2iKWP418= +github.com/smartcontractkit/mcms v0.47.1-0.20260610155329-856384f2ce70 h1:SBtw4WjSxS7AvFoFdWxLGju1GRIqi7ic2rgFXBUbwmo= +github.com/smartcontractkit/mcms v0.47.1-0.20260610155329-856384f2ce70/go.mod h1:7ZPOnN9CeoiiZkGQSPsyk23X+XFEtxQYpIx7kKy2ZP0= github.com/smartcontractkit/quarantine v0.0.0-20251203215908-fd0551c6adf9 h1:MOEuXYogv+RStASb8dWsyescu/xkigSi/Sv45NEjV7A= github.com/smartcontractkit/quarantine v0.0.0-20251203215908-fd0551c6adf9/go.mod h1:iwy4yWFuK+1JeoIRTaSOA9pl+8Kf//26zezxEXrAQEQ= github.com/smartcontractkit/wsrpc v0.8.5-0.20250502134807-c57d3d995945 h1:zxcODLrFytOKmAd8ty8S/XK6WcIEJEgRBaL7sY/7l4Y=