diff --git a/core/services/keystore/aptos.go b/core/services/keystore/aptos.go index 2187c14b299..de1d9bcdc99 100644 --- a/core/services/keystore/aptos.go +++ b/core/services/keystore/aptos.go @@ -169,6 +169,10 @@ type AptosLooppSigner struct { var _ loop.Keystore = &AptosLooppSigner{} +func (lk *AptosLooppSigner) Decrypt(ctx context.Context, id string, ciphertext []byte) ([]byte, error) { + return nil, nil +} + // Returns a list of Aptos Public Keys func (s *AptosLooppSigner) Accounts(ctx context.Context) (accounts []string, err error) { ks, err := s.GetAll() diff --git a/core/services/keystore/cosmos.go b/core/services/keystore/cosmos.go index e2ba122ee84..5585c7dab5f 100644 --- a/core/services/keystore/cosmos.go +++ b/core/services/keystore/cosmos.go @@ -154,6 +154,10 @@ type CosmosLoopSigner struct { var _ core.Keystore = &CosmosLoopSigner{} +func (lk *CosmosLoopSigner) Decrypt(ctx context.Context, id string, ciphertext []byte) ([]byte, error) { + return nil, nil +} + func (lk *CosmosLoopSigner) Sign(ctx context.Context, id string, hash []byte) ([]byte, error) { k, err := lk.Get(id) if err != nil { diff --git a/core/services/keystore/csa.go b/core/services/keystore/csa.go index 9ef756a308d..b3bb998454f 100644 --- a/core/services/keystore/csa.go +++ b/core/services/keystore/csa.go @@ -28,6 +28,10 @@ type CSA interface { var _ core.Keystore = &CSASigner{} +func (lk *CSASigner) Decrypt(ctx context.Context, id string, ciphertext []byte) ([]byte, error) { + return nil, nil +} + type CSASigner struct { CSA core.UnimplementedKeystore diff --git a/core/services/keystore/eth.go b/core/services/keystore/eth.go index 1f1d5f2ee7f..b2846a42e90 100644 --- a/core/services/keystore/eth.go +++ b/core/services/keystore/eth.go @@ -50,6 +50,10 @@ type Eth interface { var _ loop.Keystore = &EthSigner{} +func (lk *EthSigner) Decrypt(ctx context.Context, id string, ciphertext []byte) ([]byte, error) { + return nil, nil +} + type EthSigner struct { Eth core.UnimplementedKeystore diff --git a/core/services/keystore/solana.go b/core/services/keystore/solana.go index 1dd225cc4e2..4adec93e88e 100644 --- a/core/services/keystore/solana.go +++ b/core/services/keystore/solana.go @@ -30,6 +30,10 @@ type SolanaLooppSigner struct { var _ core.Keystore = &SolanaLooppSigner{} +func (lk *SolanaLooppSigner) Decrypt(ctx context.Context, id string, ciphertext []byte) ([]byte, error) { + return nil, nil +} + func (s *SolanaLooppSigner) Accounts(ctx context.Context) (accounts []string, err error) { ks, err := s.GetAll() if err != nil { diff --git a/core/services/keystore/starknet.go b/core/services/keystore/starknet.go index 7b033fea0d2..496c5f76ef0 100644 --- a/core/services/keystore/starknet.go +++ b/core/services/keystore/starknet.go @@ -159,6 +159,10 @@ type StarknetLooppSigner struct { var _ core.Keystore = &StarknetLooppSigner{} +func (lk *StarknetLooppSigner) Decrypt(ctx context.Context, id string, ciphertext []byte) ([]byte, error) { + return nil, nil +} + // Sign implements [loop.Keystore] // hash is expected to be the byte representation of big.Int // the returned []byte is an encoded [github.com/smartcontractkit/chainlink-common/pkg/loop/adapters/starknet.Signature]. diff --git a/core/services/keystore/ton.go b/core/services/keystore/ton.go index 3aee29a643b..e7b5163b69b 100644 --- a/core/services/keystore/ton.go +++ b/core/services/keystore/ton.go @@ -168,6 +168,10 @@ type TONLooppSigner struct { var _ core.Keystore = &TONLooppSigner{} +func (lk *TONLooppSigner) Decrypt(ctx context.Context, id string, ciphertext []byte) ([]byte, error) { + return nil, nil +} + // Returns a list of TON Public Keys func (s *TONLooppSigner) Accounts(ctx context.Context) (accounts []string, err error) { ks, err := s.GetAll() diff --git a/core/services/keystore/tron.go b/core/services/keystore/tron.go index ead77760cc0..dc4f0e92d91 100644 --- a/core/services/keystore/tron.go +++ b/core/services/keystore/tron.go @@ -173,6 +173,10 @@ type TronLOOPSigner struct { var _ core.Keystore = &TronLOOPSigner{} +func (lk *TronLOOPSigner) Decrypt(ctx context.Context, id string, ciphertext []byte) ([]byte, error) { + return nil, nil +} + func (lk *TronLOOPSigner) Accounts(ctx context.Context) ([]string, error) { keys, err := lk.GetAll() if err != nil { diff --git a/core/services/ocr2/delegate.go b/core/services/ocr2/delegate.go index dfa3338e0f7..1388ae178dd 100644 --- a/core/services/ocr2/delegate.go +++ b/core/services/ocr2/delegate.go @@ -45,13 +45,13 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/types" cciptypes "github.com/smartcontractkit/chainlink-common/pkg/types/ccip" "github.com/smartcontractkit/chainlink-common/pkg/types/core" + sm "github.com/smartcontractkit/chainlink-common/pkg/types/core/securemint" llotypes "github.com/smartcontractkit/chainlink-common/pkg/types/llo" "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox" "github.com/smartcontractkit/chainlink-common/pkg/workflows/dontime" datastreamsllo "github.com/smartcontractkit/chainlink-data-streams/llo" "github.com/smartcontractkit/chainlink-evm/pkg/chains/legacyevm" "github.com/smartcontractkit/chainlink-evm/pkg/keys" - "github.com/smartcontractkit/por_mock_ocr3plugin/por" "github.com/smartcontractkit/chainlink/v2/core/bridges" gatewayconnector "github.com/smartcontractkit/chainlink/v2/core/capabilities/gateway_connector" @@ -1510,7 +1510,7 @@ func (d *Delegate) newServicesSecureMint( lggr.ErrorIf(d.jobORM.RecordError(ctx, jb.ID, msg), "unable to record error") }) - oracleArgsNoPlugin := libocr2.OCR3OracleArgs[por.ChainSelector]{ + oracleArgsNoPlugin := libocr2.OCR3OracleArgs[sm.ChainSelector]{ BinaryNetworkEndpointFactory: d.peerWrapper.Peer2, V2Bootstrappers: bootstrapPeers, Database: ocrDB, diff --git a/core/services/ocr2/plugins/median/services.go b/core/services/ocr2/plugins/median/services.go index 0f1ca434d43..65a7e0a7756 100644 --- a/core/services/ocr2/plugins/median/services.go +++ b/core/services/ocr2/plugins/median/services.go @@ -149,6 +149,7 @@ func NewMedianServices(ctx context.Context, } if cmdName := env.MedianPlugin.Cmd.Get(); cmdName != "" { + lggr.Infof("Median plugin loop configured") // use unique logger names so we can use it to register a loop medianLggr := lggr.Named("Median").Named(spec.ContractID).Named(spec.GetID()) envVars, err2 := plugins.ParseEnvFile(env.MedianPlugin.Env.Get()) @@ -171,6 +172,7 @@ func NewMedianServices(ctx context.Context, argsNoPlugin.ReportingPluginFactory = median srvs = append(srvs, median) } else { + lggr.Infof("Median plugin configured without loop") argsNoPlugin.ReportingPluginFactory, err = median.NewPlugin(lggr).NewMedianFactory(ctx, medianProvider, spec.ContractID, dataSource, juelsPerFeeCoinSource, gasPriceSubunitsDataSource, errorLog, pluginConfig.DeviationFunctionDefinition) if err != nil { err = fmt.Errorf("failed to create median factory: %w", err) diff --git a/core/services/ocr3/securemint/README.md b/core/services/ocr3/securemint/README.md index b89c7bb30c0..6137e8c3f7f 100644 --- a/core/services/ocr3/securemint/README.md +++ b/core/services/ocr3/securemint/README.md @@ -1,8 +1,12 @@ # SecureMint Plugin +TODO(gg): make sure that the two secure mint integration tests run successfully in CI. + ## Overview The SecureMint plugin is a plugin that allows for secure minting of tokens. +It's looppified, meaning its implementation is in https://github.com/smartcontractkit/chainlink-secure-mint/. +Make sure to install the plugin. ## Validation @@ -18,7 +22,7 @@ make setup-testdb ### Run test: ```bash - time SECURE_TRANSMITTER_HACK_DISABLED=true CL_DATABASE_URL=postgresql://chainlink_dev:insecurepassword@localhost:5432/chainlink_development_test?sslmode=disable go test -timeout 2m -run ^TestIntegration_SecureMint_happy_path$ github.com/smartcontractkit/chainlink/v2/core/services/ocr3/securemint -v 2>&1 | tee all.log | awk '/DEBUG|INFO|WARN|ERROR/ { print > "node_logs.log"; next }; { print > "other.log" }; tail all.log' + time CL_SECUREMINT_CMD=/Users/ggerritsen/go/bin/chainlink-secure-mint CL_DATABASE_URL=postgresql://chainlink_dev:insecurepassword@localhost:5432/chainlink_development_test?sslmode=disable go test -timeout 2m -run ^TestIntegration_SecureMint_happy_path$ github.com/smartcontractkit/chainlink/v2/core/services/ocr3/securemint -v 2>&1 | tee all.log | awk '/DEBUG|INFO|WARN|ERROR/ { print > "node_logs.log"; next }; { print > "other.log" }; tail all.log' ``` ### If you change any dependencies: diff --git a/core/services/ocr3/securemint/ea/ea.go b/core/services/ocr3/securemint/ea/ea.go index dcd7349c7bd..b094638ccbd 100644 --- a/core/services/ocr3/securemint/ea/ea.go +++ b/core/services/ocr3/securemint/ea/ea.go @@ -9,16 +9,16 @@ import ( "strconv" "time" + "github.com/smartcontractkit/chainlink-common/pkg/types/core/securemint" "github.com/smartcontractkit/chainlink/v2/core/logger" "github.com/smartcontractkit/chainlink/v2/core/services/job" sm_config "github.com/smartcontractkit/chainlink/v2/core/services/ocr3/securemint/config" "github.com/smartcontractkit/chainlink/v2/core/services/ocrcommon" "github.com/smartcontractkit/chainlink/v2/core/services/pipeline" - "github.com/smartcontractkit/por_mock_ocr3plugin/por" ) -// externalAdapter implements por.ExternalAdapter -var _ por.ExternalAdapter = &externalAdapter{} +// externalAdapter implements securemint.ExternalAdapter +var _ securemint.ExternalAdapter = &externalAdapter{} type externalAdapter struct { config *sm_config.SecureMintConfig @@ -44,7 +44,7 @@ func NewExternalAdapter(config *sm_config.SecureMintConfig, runner pipeline.Runn } // GetPayload retrieves the payload for the given blocks by executing a pipeline run. -func (ea *externalAdapter) GetPayload(ctx context.Context, blocks por.Blocks) (por.ExternalAdapterPayload, error) { +func (ea *externalAdapter) GetPayload(ctx context.Context, blocks securemint.Blocks) (securemint.ExternalAdapterPayload, error) { ea.lggr.Debugf("GetPayload called with blocks parameter: %v", blocks) // Create the request for the external adapter @@ -56,7 +56,7 @@ func (ea *externalAdapter) GetPayload(ctx context.Context, blocks por.Blocks) (p // coalesce blocks with config.ChainSelectors coalescedBlocks := make(map[uint64]uint64) for _, chainSelector := range ea.chainSelectors { - coalescedBlocks[chainSelector] = uint64(blocks[por.ChainSelector(chainSelector)]) + coalescedBlocks[chainSelector] = uint64(blocks[securemint.ChainSelector(chainSelector)]) } // add coalesced blocks to request @@ -68,7 +68,7 @@ func (ea *externalAdapter) GetPayload(ctx context.Context, blocks por.Blocks) (p // Serialize EA request to JSON reqJSON, err := json.Marshal(req) if err != nil { - return por.ExternalAdapterPayload{}, fmt.Errorf("failed to marshal ea request: %w (request: %#v)", err, req) + return securemint.ExternalAdapterPayload{}, fmt.Errorf("failed to marshal ea request: %w (request: %#v)", err, req) } ea.lggr.Debugf("GetPayload serialized ea request to JSON: %v", string(reqJSON)) @@ -86,7 +86,7 @@ func (ea *externalAdapter) GetPayload(ctx context.Context, blocks por.Blocks) (p run, trrs, err := ea.runner.ExecuteRun(ctx, ea.spec, pipeline.NewVarsFrom(vars)) if err != nil { - return por.ExternalAdapterPayload{}, fmt.Errorf("failed to execute GetPayload: %w", err) + return securemint.ExternalAdapterPayload{}, fmt.Errorf("failed to execute GetPayload: %w", err) } ea.saver.Save(run) @@ -99,12 +99,12 @@ func (ea *externalAdapter) GetPayload(ctx context.Context, blocks por.Blocks) (p resultMap, ok := trr.Result.Value.(map[string]any) if !ok { - return por.ExternalAdapterPayload{}, fmt.Errorf("unexpected result type for GetPayload: %T", trr.Result.Value) + return securemint.ExternalAdapterPayload{}, fmt.Errorf("unexpected result type for GetPayload: %T", trr.Result.Value) } payload, err := ea.convertMapToPayload(resultMap) if err != nil { - return por.ExternalAdapterPayload{}, fmt.Errorf("failed to convert EA response map to payload: %w, map: %#v", err, resultMap) + return securemint.ExternalAdapterPayload{}, fmt.Errorf("failed to convert EA response map to payload: %w, map: %#v", err, resultMap) } ea.lggr.Debugw("GetPayload result", "payload", payload) @@ -112,51 +112,51 @@ func (ea *externalAdapter) GetPayload(ctx context.Context, blocks por.Blocks) (p ea.lggr.Debugw("Plugin does not know about any chains or blocks yet, not returning any mintables") // set Mintables to empty map - plugin will error out if it's not empty when it hasn't requested any mintables yet // TODO(gg): we should probably update the plugin to handle this case - payload.Mintables = make(por.Mintables) + payload.Mintables = make(securemint.Mintables) } ea.lggr.Debugw("GetPayload returning", "payload", payload) return payload, nil } - return por.ExternalAdapterPayload{}, errors.New("no terminal result for GetPayload") + return securemint.ExternalAdapterPayload{}, errors.New("no terminal result for GetPayload") } -// convertMapToPayload converts a map[string]any response to por.ExternalAdapterPayload -func (ea *externalAdapter) convertMapToPayload(resultMap map[string]any) (por.ExternalAdapterPayload, error) { +// convertMapToPayload converts a map[string]any response to securemint.ExternalAdapterPayload +func (ea *externalAdapter) convertMapToPayload(resultMap map[string]any) (securemint.ExternalAdapterPayload, error) { // Marshal and unmarshal to convert to Response struct b, err := json.Marshal(resultMap) if err != nil { - return por.ExternalAdapterPayload{}, fmt.Errorf("failed to marshal EA payload map: %w", err) + return securemint.ExternalAdapterPayload{}, fmt.Errorf("failed to marshal EA payload map: %w", err) } ea.lggr.Debugf("EA response: %s", string(b)) var eaResponse Response if err := json.Unmarshal(b, &eaResponse); err != nil { - return por.ExternalAdapterPayload{}, fmt.Errorf("failed to unmarshal EA response: %w", err) + return securemint.ExternalAdapterPayload{}, fmt.Errorf("failed to unmarshal EA response: %w", err) } // Create the payload - payload := por.ExternalAdapterPayload{ - Mintables: make(por.Mintables), - LatestBlocks: make(por.Blocks), + payload := securemint.ExternalAdapterPayload{ + Mintables: make(securemint.Mintables), + LatestBlocks: make(securemint.Blocks), } // Convert mintables for chainSelector, mintable := range eaResponse.Mintables { chainSelectorUint64, err := strconv.ParseUint(chainSelector, 10, 64) if err != nil { - return por.ExternalAdapterPayload{}, fmt.Errorf("failed to parse chain selector: %s", chainSelector) + return securemint.ExternalAdapterPayload{}, fmt.Errorf("failed to parse chain selector: %s", chainSelector) } mintableAmount, ok := new(big.Int).SetString(mintable.Mintable, 10) if !ok { - return por.ExternalAdapterPayload{}, fmt.Errorf("failed to parse mintable amount: %s", mintable.Mintable) + return securemint.ExternalAdapterPayload{}, fmt.Errorf("failed to parse mintable amount: %s", mintable.Mintable) } - payload.Mintables[por.ChainSelector(chainSelectorUint64)] = por.BlockMintablePair{ - Block: por.BlockNumber(mintable.Block), + payload.Mintables[securemint.ChainSelector(chainSelectorUint64)] = securemint.BlockMintablePair{ + Block: securemint.BlockNumber(mintable.Block), Mintable: mintableAmount, } } @@ -164,9 +164,9 @@ func (ea *externalAdapter) convertMapToPayload(resultMap map[string]any) (por.Ex // Convert reserve info reserveAmount, ok := new(big.Int).SetString(eaResponse.ReserveInfo.ReserveAmount, 10) if !ok { - return por.ExternalAdapterPayload{}, fmt.Errorf("failed to parse reserve amount: %s", eaResponse.ReserveInfo.ReserveAmount) + return securemint.ExternalAdapterPayload{}, fmt.Errorf("failed to parse reserve amount: %s", eaResponse.ReserveInfo.ReserveAmount) } - payload.ReserveInfo = por.ReserveInfo{ + payload.ReserveInfo = securemint.ReserveInfo{ ReserveAmount: reserveAmount, Timestamp: time.UnixMilli(eaResponse.ReserveInfo.Timestamp), } @@ -175,9 +175,9 @@ func (ea *externalAdapter) convertMapToPayload(resultMap map[string]any) (por.Ex for chainSelector, block := range eaResponse.LatestBlocks { chainSelectorUint64, err := strconv.ParseUint(chainSelector, 10, 64) if err != nil { - return por.ExternalAdapterPayload{}, fmt.Errorf("failed to parse chain selector: %s", chainSelector) + return securemint.ExternalAdapterPayload{}, fmt.Errorf("failed to parse chain selector: %s", chainSelector) } - payload.LatestBlocks[por.ChainSelector(chainSelectorUint64)] = por.BlockNumber(block) + payload.LatestBlocks[securemint.ChainSelector(chainSelectorUint64)] = securemint.BlockNumber(block) } return payload, nil diff --git a/core/services/ocr3/securemint/ea/ea_test.go b/core/services/ocr3/securemint/ea/ea_test.go index 05c29c53ade..0d3fdaa47df 100644 --- a/core/services/ocr3/securemint/ea/ea_test.go +++ b/core/services/ocr3/securemint/ea/ea_test.go @@ -7,6 +7,7 @@ import ( "testing" "time" + "github.com/smartcontractkit/chainlink-common/pkg/types/core/securemint" "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" "github.com/smartcontractkit/chainlink/v2/core/logger" "github.com/smartcontractkit/chainlink/v2/core/services/job" @@ -14,7 +15,6 @@ import ( "github.com/smartcontractkit/chainlink/v2/core/services/ocrcommon" "github.com/smartcontractkit/chainlink/v2/core/services/pipeline" "github.com/smartcontractkit/chainlink/v2/core/services/pipeline/mocks" - "github.com/smartcontractkit/por_mock_ocr3plugin/por" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" @@ -36,13 +36,14 @@ func Test_GetPayload(t *testing.T) { config := &sm_config.SecureMintConfig{ Token: "eth", Reserves: "platform", - ChainSelectors: []uint64{5009297550715157269}, + ChainSelectors: []string{"5009297550715157269"}, } job := job.Job{} spec := pipeline.Spec{} executedRun := &pipeline.Run{} - ea := NewExternalAdapter(config, runner, job, spec, saver, lggr) + ea, err := NewExternalAdapter(config, runner, job, spec, saver, lggr) + require.NoError(t, err) results := pipeline.TaskRunResults{ { @@ -76,7 +77,7 @@ func Test_GetPayload(t *testing.T) { require.NoError(t, err) }) - payload, err := ea.GetPayload(ctx, por.Blocks{1234567890: 1234567890, 5009297550715157269: 10}) + payload, err := ea.GetPayload(ctx, securemint.Blocks{1234567890: 1234567890, 5009297550715157269: 10}) require.NoError(t, err, "GetPayload should not return an error") // Validate the 'ea_request' parameter serialized to json @@ -99,18 +100,18 @@ func Test_GetPayload(t *testing.T) { // Validate the resulting payload amount, ok := big.NewInt(10).SetString("10332550000000000000000", 10) require.True(t, ok, "Failed to parse reserve amount from string") - expectedPayload := por.ExternalAdapterPayload{ - Mintables: por.Mintables{ + expectedPayload := securemint.ExternalAdapterPayload{ + Mintables: securemint.Mintables{ 5009297550715157269: { Block: 8, Mintable: big.NewInt(10), }, }, - ReserveInfo: por.ReserveInfo{ + ReserveInfo: securemint.ReserveInfo{ ReserveAmount: amount, Timestamp: time.UnixMilli(1749483841486), }, - LatestBlocks: por.Blocks{ + LatestBlocks: securemint.Blocks{ 5009297550715157269: 23, }, } diff --git a/core/services/ocr3/securemint/keyringadapter/example_usage.go b/core/services/ocr3/securemint/keyringadapter/example_usage.go index 528ca938e63..59626973da4 100644 --- a/core/services/ocr3/securemint/keyringadapter/example_usage.go +++ b/core/services/ocr3/securemint/keyringadapter/example_usage.go @@ -3,9 +3,9 @@ package keyringadapter import ( "fmt" + "github.com/smartcontractkit/chainlink-common/pkg/types/core/securemint" "github.com/smartcontractkit/libocr/offchainreporting2plus/ocr3types" "github.com/smartcontractkit/libocr/offchainreporting2plus/types" - "github.com/smartcontractkit/por_mock_ocr3plugin/por" ) // ExampleUsage demonstrates how to use the OnchainKeyringAdapter @@ -32,9 +32,9 @@ func ExampleUsage() { // Step 3: Use the adapter as an OCR3 OnchainKeyring for PoR configDigest := types.ConfigDigest([32]byte{1, 2, 3, 4, 5}) // example digest seqNr := uint64(42) - chainSelector := por.ChainSelector(1234) // example chain selector + chainSelector := securemint.ChainSelector(1234) // example chain selector - reportWithInfo := ocr3types.ReportWithInfo[por.ChainSelector]{ + reportWithInfo := ocr3types.ReportWithInfo[securemint.ChainSelector]{ Report: []byte("example-por-report"), Info: chainSelector, } diff --git a/core/services/ocr3/securemint/keyringadapter/onchain_keyring_adapter.go b/core/services/ocr3/securemint/keyringadapter/onchain_keyring_adapter.go index 071ee025c3d..0770ba70483 100644 --- a/core/services/ocr3/securemint/keyringadapter/onchain_keyring_adapter.go +++ b/core/services/ocr3/securemint/keyringadapter/onchain_keyring_adapter.go @@ -1,9 +1,9 @@ package keyringadapter import ( + "github.com/smartcontractkit/chainlink-common/pkg/types/core/securemint" "github.com/smartcontractkit/libocr/offchainreporting2plus/ocr3types" "github.com/smartcontractkit/libocr/offchainreporting2plus/types" - "github.com/smartcontractkit/por_mock_ocr3plugin/por" ) // SecureMintOCR3OnchainKeyringAdapter adapts an OCR2 OnchainKeyring to implement ocr3types.OnchainKeyring[ChainSelector] @@ -15,7 +15,7 @@ type SecureMintOCR3OnchainKeyringAdapter struct { } // Ensure OnchainKeyringAdapter implements the OCR3 OnchainKeyring interface for PoR ChainSelector -var _ ocr3types.OnchainKeyring[por.ChainSelector] = &SecureMintOCR3OnchainKeyringAdapter{} +var _ ocr3types.OnchainKeyring[securemint.ChainSelector] = &SecureMintOCR3OnchainKeyringAdapter{} // NewSecureMintOCR3OnchainKeyringAdapter creates a new adapter that wraps an OCR2 OnchainKeyring // to implement the OCR3 OnchainKeyring interface for PoR ChainSelector. @@ -36,7 +36,7 @@ func (adapter *SecureMintOCR3OnchainKeyringAdapter) PublicKey() types.OnchainPub func (adapter *SecureMintOCR3OnchainKeyringAdapter) Sign( configDigest types.ConfigDigest, seqNr uint64, - reportWithInfo ocr3types.ReportWithInfo[por.ChainSelector], + reportWithInfo ocr3types.ReportWithInfo[securemint.ChainSelector], ) (signature []byte, err error) { // Convert OCR3 parameters to OCR2 ReportContext // Note: seqNr is converted to uint32 for Epoch field, which may truncate for very large values @@ -58,7 +58,7 @@ func (adapter *SecureMintOCR3OnchainKeyringAdapter) Verify( publicKey types.OnchainPublicKey, configDigest types.ConfigDigest, seqNr uint64, - reportWithInfo ocr3types.ReportWithInfo[por.ChainSelector], + reportWithInfo ocr3types.ReportWithInfo[securemint.ChainSelector], signature []byte, ) bool { // Convert OCR3 parameters to OCR2 ReportContext diff --git a/core/services/ocr3/securemint/keyringadapter/onchain_keyring_adapter_test.go b/core/services/ocr3/securemint/keyringadapter/onchain_keyring_adapter_test.go index b7d65088382..95caba0613b 100644 --- a/core/services/ocr3/securemint/keyringadapter/onchain_keyring_adapter_test.go +++ b/core/services/ocr3/securemint/keyringadapter/onchain_keyring_adapter_test.go @@ -6,9 +6,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/smartcontractkit/chainlink-common/pkg/types/core/securemint" "github.com/smartcontractkit/libocr/offchainreporting2plus/ocr3types" "github.com/smartcontractkit/libocr/offchainreporting2plus/types" - "github.com/smartcontractkit/por_mock_ocr3plugin/por" ) // mockOCR2OnchainKeyring is a mock implementation of types.OnchainKeyring for testing @@ -52,11 +52,11 @@ func TestPorOnchainKeyringAdapter(t *testing.T) { testConfigDigest := types.ConfigDigest([32]byte{1, 2, 3, 4, 5}) testSeqNr := uint64(42) testReport := types.Report([]byte("test-report")) - testChainSelector := por.ChainSelector(1234) + testChainSelector := securemint.ChainSelector(1234) testSignature := []byte("test-signature") testMaxSigLen := 65 - reportWithInfo := ocr3types.ReportWithInfo[por.ChainSelector]{ + reportWithInfo := ocr3types.ReportWithInfo[securemint.ChainSelector]{ Report: testReport, Info: testChainSelector, } @@ -70,7 +70,7 @@ func TestPorOnchainKeyringAdapter(t *testing.T) { adapter := NewSecureMintOCR3OnchainKeyringAdapter(mockKeyring) // Verify that the adapter implements the OCR3 OnchainKeyring interface - var _ ocr3types.OnchainKeyring[por.ChainSelector] = adapter + var _ ocr3types.OnchainKeyring[securemint.ChainSelector] = adapter }) t.Run("PublicKey returns the underlying keyring's public key", func(t *testing.T) { diff --git a/core/services/ocr3/securemint/services.go b/core/services/ocr3/securemint/services.go index 138ddb257a6..44b7c6d0f50 100644 --- a/core/services/ocr3/securemint/services.go +++ b/core/services/ocr3/securemint/services.go @@ -9,6 +9,7 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/loop" "github.com/smartcontractkit/chainlink-common/pkg/types" coretypes "github.com/smartcontractkit/chainlink-common/pkg/types/core" + "github.com/smartcontractkit/chainlink-common/pkg/types/core/securemint" "github.com/smartcontractkit/chainlink/v2/core/config/env" "github.com/smartcontractkit/chainlink/v2/core/logger" "github.com/smartcontractkit/chainlink/v2/core/services" @@ -21,8 +22,6 @@ import ( evm_types "github.com/smartcontractkit/chainlink/v2/core/services/relay/evm/types" "github.com/smartcontractkit/chainlink/v2/plugins" libocr "github.com/smartcontractkit/libocr/offchainreporting2plus" - "github.com/smartcontractkit/por_mock_ocr3plugin/por" - sm_plugin "github.com/smartcontractkit/por_mock_ocr3plugin/por" ) var _ JobConfig = (*smJobConfig)(nil) @@ -66,7 +65,7 @@ func NewSecureMintServices(ctx context.Context, relayer loop.Relayer, pipelineRunner pipeline.Runner, lggr logger.Logger, - argsNoPlugin libocr.OCR3OracleArgs[por.ChainSelector], + argsNoPlugin libocr.OCR3OracleArgs[securemint.ChainSelector], cfg JobConfig, capabilitiesRegistry coretypes.CapabilitiesRegistry, ) (srvs []job.ServiceCtx, err error) { @@ -135,9 +134,9 @@ func NewSecureMintServices(ctx context.Context, if err != nil { return nil, fmt.Errorf("failed to create secure mint transmitter: %w", err) } + srvs = append(srvs, transmitter) argsNoPlugin.ContractTransmitter = transmitter XXX_SingletonTransmitter.Store(transmitter) - srvs = append(srvs, transmitter) abort := func() { if cerr := services.MultiCloser(srvs).Close(); cerr != nil { @@ -146,38 +145,49 @@ func NewSecureMintServices(ctx context.Context, } // Create the reporting plugin factory - if cmdName := env.SecureMintPlugin.Cmd.Get(); cmdName != "" { + cmdName := env.SecureMintPlugin.Cmd.Get() + if cmdName == "" { abort() - return nil, errors.New("LOOPP for securemint plugin not implemented yet") + return nil, errors.New("secure mint plugin loop is not configured, non-loopp mode is not supported for secure mint") } + lggr.Infof("Configuration indicates loopp usage for secure mint") - ea, err := sm_ea.NewExternalAdapter(secureMintPluginConfig, pipelineRunner, jb, *jb.PipelineSpec, runSaver, lggr) + // use unique logger names so we can use it to register a loop + secureMintLggr := lggr.Named("SecureMint").Named(spec.ContractID).Named(spec.GetID()) + envVars, err := plugins.ParseEnvFile(env.SecureMintPlugin.Env.Get()) if err != nil { - return nil, fmt.Errorf("failed to create secure mint external adapter: %w", err) + err = fmt.Errorf("failed to parse secure mint env file: %w", err) + abort() + return } - - // Create the original SecureMint plugin factory - smPluginFactory := &sm_plugin.PorReportingPluginFactory{ - Logger: argsNoPlugin.Logger, - ExternalAdapter: ea, - ContractReader: newStubContractReader(argsNoPlugin.ContractConfigTracker), // since we don't write to chain yet, we mock the contract reader which returns the most recent config digest from the config contract - ReportMarshaler: sm_plugin.NewMockReportMarshaler(), + cmdFn, telem, err := cfg.RegisterLOOP(plugins.CmdConfig{ + ID: secureMintLggr.Name(), + Cmd: cmdName, + Env: envVars, + }) + if err != nil { + err = fmt.Errorf("failed to register loop: %w", err) + abort() + return } - // Get relay ID for chain identification - rid, err := spec.RelayID() + ea, err := sm_ea.NewExternalAdapter(secureMintPluginConfig, pipelineRunner, jb, *jb.PipelineSpec, runSaver, lggr) if err != nil { - return nil, fmt.Errorf("failed to get relay ID: %w", err) + return nil, fmt.Errorf("failed to create secure mint external adapter: %w", err) } + secureMintPluginFactory := loop.NewPluginSecureMintService(lggr, telem, cmdFn, ea) + srvs = append(srvs, secureMintPluginFactory) + // Wrap the factory with prometheus metrics monitoring - argsNoPlugin.ReportingPluginFactory = promwrapper.NewReportingPluginFactory( - smPluginFactory, + promPluginFactory := promwrapper.NewReportingPluginFactory( + secureMintPluginFactory, lggr, - "evm", - rid.ChainID, + "", + spec.ChainID, "secure-mint", ) + argsNoPlugin.ReportingPluginFactory = promPluginFactory // Create the oracle var oracle libocr.Oracle diff --git a/core/services/ocr3/securemint/stub_contractreader.go b/core/services/ocr3/securemint/stub_contractreader.go deleted file mode 100644 index f358aea41b5..00000000000 --- a/core/services/ocr3/securemint/stub_contractreader.go +++ /dev/null @@ -1,38 +0,0 @@ -package securemint - -import ( - "context" - "fmt" - "time" - - ocrtypes "github.com/smartcontractkit/libocr/offchainreporting2plus/types" - "github.com/smartcontractkit/por_mock_ocr3plugin/por" - sm_plugin "github.com/smartcontractkit/por_mock_ocr3plugin/por" -) - -var _ sm_plugin.ContractReader = &stubContractReader{} - -// stubContractReader is a mock implementation of the ContractReader interface. -// It retrieves the latest config digest from the config contract and then uses that to return mocked report details. -type stubContractReader struct { - contractConfigTracker ocrtypes.ContractConfigTracker -} - -func newStubContractReader(contractConfigTracker ocrtypes.ContractConfigTracker) *stubContractReader { - return &stubContractReader{ - contractConfigTracker: contractConfigTracker, - } -} - -func (m *stubContractReader) GetLatestTransmittedReportDetails(ctx context.Context, _ por.ChainSelector) (sm_plugin.TransmittedReportDetails, error) { - _, configDigest, err := m.contractConfigTracker.LatestConfigDetails(ctx) - if err != nil { - return sm_plugin.TransmittedReportDetails{}, fmt.Errorf("failed to get config digest: %w", err) - } - - return sm_plugin.TransmittedReportDetails{ - ConfigDigest: [32]byte(configDigest), - SeqNr: 1, // Mock sequence number - LatestTimestamp: time.Now(), // Mock timestamp - }, nil -} diff --git a/core/services/ocr3/securemint/transmitter.go b/core/services/ocr3/securemint/transmitter.go index 36a162616fc..aa81f75267d 100644 --- a/core/services/ocr3/securemint/transmitter.go +++ b/core/services/ocr3/securemint/transmitter.go @@ -10,12 +10,12 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/logger" "github.com/smartcontractkit/chainlink-common/pkg/services" coretypes "github.com/smartcontractkit/chainlink-common/pkg/types/core" + "github.com/smartcontractkit/chainlink-common/pkg/types/core/securemint" "github.com/smartcontractkit/chainlink-protos/cre/go/values" "github.com/smartcontractkit/chainlink/v2/core/services/ocr3/securemint/config" "github.com/smartcontractkit/libocr/offchainreporting2/types" "github.com/smartcontractkit/libocr/offchainreporting2plus/ocr3types" ocr2types "github.com/smartcontractkit/libocr/offchainreporting2plus/types" - "github.com/smartcontractkit/por_mock_ocr3plugin/por" ) const ( @@ -26,7 +26,7 @@ const ( ) type Transmitter interface { - ocr3types.ContractTransmitter[por.ChainSelector] + ocr3types.ContractTransmitter[securemint.ChainSelector] services.Service } @@ -133,7 +133,7 @@ func (t *transmitter) Transmit( ctx context.Context, cd ocr2types.ConfigDigest, seqNr uint64, - ocr3Report ocr3types.ReportWithInfo[por.ChainSelector], + ocr3Report ocr3types.ReportWithInfo[securemint.ChainSelector], sigs []types.AttributedOnchainSignature, ) error { t.eng.Debugw("Transmit called", "cd", cd, "seqNr", seqNr, "report", ocr3Report, "sigs", sigs) diff --git a/core/services/ocr3/securemint/transmitter_test.go b/core/services/ocr3/securemint/transmitter_test.go index e2fee11e5a8..3af8735e332 100644 --- a/core/services/ocr3/securemint/transmitter_test.go +++ b/core/services/ocr3/securemint/transmitter_test.go @@ -11,12 +11,12 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/capabilities" "github.com/smartcontractkit/chainlink-common/pkg/logger" - "github.com/smartcontractkit/chainlink-common/pkg/values" + "github.com/smartcontractkit/chainlink-common/pkg/types/core/securemint" + "github.com/smartcontractkit/chainlink-protos/cre/go/values" p2ptypes "github.com/smartcontractkit/chainlink/v2/core/services/p2p/types" "github.com/smartcontractkit/libocr/offchainreporting2/types" "github.com/smartcontractkit/libocr/offchainreporting2plus/ocr3types" ocr2types "github.com/smartcontractkit/libocr/offchainreporting2plus/types" - "github.com/smartcontractkit/por_mock_ocr3plugin/por" ) func TestTransmitter_NewTransmitter(t *testing.T) { @@ -175,9 +175,9 @@ func TestTransmitter_Transmit(t *testing.T) { // Create test data cd := ocr2types.ConfigDigest{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32} seqNr := uint64(123) - report := ocr3types.ReportWithInfo[por.ChainSelector]{ + report := ocr3types.ReportWithInfo[securemint.ChainSelector]{ Report: []byte("test report data"), - Info: por.ChainSelector(1), // Use ChainSelector as the Info type + Info: securemint.ChainSelector(1), // Use ChainSelector as the Info type } sigs := []types.AttributedOnchainSignature{ { @@ -233,7 +233,7 @@ func TestTransmitter_Transmit(t *testing.T) { require.NoError(t, err) // json umarshal bytes to string and check if it contains "test report data" - var report ocr3types.ReportWithInfo[por.ChainSelector] + var report ocr3types.ReportWithInfo[securemint.ChainSelector] err = json.Unmarshal(reportBytes, &report) require.NoError(t, err) assert.Equal(t, "test report data", string(report.Report)) @@ -268,9 +268,9 @@ func TestTransmitter_Transmit_NoSubscribers(t *testing.T) { // Test transmission without any registered triggers cd := ocr2types.ConfigDigest{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32} seqNr := uint64(127) - report := ocr3types.ReportWithInfo[por.ChainSelector]{ + report := ocr3types.ReportWithInfo[securemint.ChainSelector]{ Report: []byte("test report data no subscribers"), - Info: por.ChainSelector(1), // Use ChainSelector as the Info type + Info: securemint.ChainSelector(1), // Use ChainSelector as the Info type } sigs := []types.AttributedOnchainSignature{} @@ -317,3 +317,7 @@ func (m *mockCapabilitiesRegistry) GetTrigger(ctx context.Context, ID string) (c func (m *mockCapabilitiesRegistry) NodeByPeerID(ctx context.Context, peerID p2ptypes.PeerID) (capabilities.Node, error) { return capabilities.Node{}, nil } + +func (m *mockCapabilitiesRegistry) DONsForCapability(ctx context.Context, capabilityID string) ([]capabilities.DONWithNodes, error) { + return nil, nil +} diff --git a/go.mod b/go.mod index 3a1a071a6a3..eb822c704d3 100644 --- a/go.mod +++ b/go.mod @@ -2,9 +2,14 @@ module github.com/smartcontractkit/chainlink/v2 go 1.24.5 +toolchain go1.24.6 + +// use local chainlink-common +replace github.com/smartcontractkit/chainlink-common => ../chainlink-common + require ( github.com/Depado/ginprom v1.8.0 - github.com/Masterminds/semver/v3 v3.3.1 + github.com/Masterminds/semver/v3 v3.4.0 github.com/NethermindEth/juno v0.12.5 github.com/NethermindEth/starknet.go v0.8.0 github.com/andybalholm/brotli v1.1.1 @@ -44,7 +49,7 @@ require ( github.com/graph-gophers/dataloader v5.0.0+incompatible github.com/graph-gophers/graphql-go v1.5.0 github.com/hashicorp/go-envparse v0.1.0 - github.com/hashicorp/go-plugin v1.6.3 + github.com/hashicorp/go-plugin v1.7.0 github.com/hashicorp/go-retryablehttp v0.7.7 github.com/hdevalence/ed25519consensus v0.2.0 github.com/holiman/uint256 v1.3.2 @@ -85,7 +90,6 @@ require ( github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250805210128-7f8a0f403c3a github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250804184440-c0506474fc44 github.com/smartcontractkit/chainlink-common v0.9.4-0.20250828173926-fcae05ee4a0b - github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250806152407-159881c7589c github.com/smartcontractkit/chainlink-data-streams v0.1.2 github.com/smartcontractkit/chainlink-evm v0.3.2 github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20250827130336-5922343458be @@ -93,8 +97,8 @@ require ( github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250818175541-3389ac08a563 github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250717121125-2350c82883e2 github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250729142306-508e798f6a5d - github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20250722175102-6dcdf5122683 - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20250819150450-95ef563f6e6d + github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20250722225531-876fd6b94976 + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20250829155125-f4655b0b4605 github.com/smartcontractkit/chainlink-protos/orchestrator v0.8.1 github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0 github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20250822025801-598d3d86f873 @@ -136,7 +140,7 @@ require ( golang.org/x/term v0.33.0 golang.org/x/time v0.12.0 gonum.org/v1/gonum v0.16.0 - google.golang.org/grpc v1.73.0 + google.golang.org/grpc v1.74.2 google.golang.org/protobuf v1.36.7 gopkg.in/guregu/null.v4 v4.0.0 gopkg.in/natefinch/lumberjack.v2 v2.2.1 @@ -144,6 +148,8 @@ require ( k8s.io/utils v0.0.0-20241104163129-6fe5fd82f078 ) +require github.com/cenkalti/backoff/v5 v5.0.2 // indirect + require ( cosmossdk.io/api v0.7.6 // indirect cosmossdk.io/collections v0.4.0 // indirect @@ -163,7 +169,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/VictoriaMetrics/fastcache v1.12.2 // indirect github.com/XSAM/otelsql v0.37.0 // indirect - github.com/apache/arrow-go/v18 v18.3.0 // indirect + github.com/apache/arrow-go/v18 v18.3.1 // indirect github.com/atombender/go-jsonschema v0.16.1-0.20240916205339-a74cd4e2851c // indirect github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect @@ -181,7 +187,6 @@ require ( github.com/bytedance/sonic v1.12.3 // indirect github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cloudevents/sdk-go/binding/format/protobuf/v2 v2.16.1 // indirect github.com/cloudevents/sdk-go/v2 v2.16.1 // indirect @@ -236,7 +241,7 @@ require ( 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.25.0 // indirect + github.com/go-playground/validator/v10 v10.26.0 // indirect github.com/go-webauthn/x v0.1.5 // indirect github.com/goccy/go-json v0.10.5 // indirect github.com/goccy/go-yaml v1.12.0 // indirect @@ -256,7 +261,7 @@ require ( github.com/gorilla/mux v1.8.1 // indirect github.com/grafana/pyroscope-go/godeltaprof v0.1.8 // indirect github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 // indirect - github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.1 // indirect + github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect @@ -310,7 +315,7 @@ require ( github.com/mtibben/percent v0.2.1 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect - github.com/oklog/run v1.1.0 // indirect + github.com/oklog/run v1.2.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b // indirect github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect @@ -322,7 +327,7 @@ require ( github.com/pion/transport/v3 v3.0.1 // indirect 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/prometheus/procfs v0.16.0 // indirect + github.com/prometheus/procfs v0.16.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/rs/cors v1.11.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect @@ -368,20 +373,20 @@ require ( go.mongodb.org/mongo-driver v1.17.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.11.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.11.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.35.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.35.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.36.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.36.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.13.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.35.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.36.0 // indirect go.opentelemetry.io/otel/log v0.13.0 // indirect go.opentelemetry.io/otel/sdk v1.37.0 // indirect go.opentelemetry.io/otel/sdk/log v0.13.0 // indirect - go.opentelemetry.io/proto/otlp v1.5.0 // indirect + go.opentelemetry.io/proto/otlp v1.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/ratelimit v0.3.1 // indirect golang.org/x/arch v0.11.0 // indirect @@ -391,8 +396,8 @@ require ( golang.org/x/tools v0.35.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250528174236-200df99c418a // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect gopkg.in/guregu/null.v2 v2.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gotest.tools/v3 v3.5.2 // indirect diff --git a/go.sum b/go.sum index 721ce8fb8ba..e026f792087 100644 --- a/go.sum +++ b/go.sum @@ -79,8 +79,8 @@ github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e/go.mod h1:g4AWEaM3y github.com/Depado/ginprom v1.8.0 h1:zaaibRLNI1dMiiuj1MKzatm8qrcHzikMlCc1anqOdyo= github.com/Depado/ginprom v1.8.0/go.mod h1:XBaKzeNBqPF4vxJpNLincSQZeMDnZp1tIbU0FU0UKgg= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/semver/v3 v3.3.1 h1:QtNSWtVZ3nBfk8mAOu/B6v7FMJ+NHTIgUPi7rj+4nv4= -github.com/Masterminds/semver/v3 v3.3.1/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= +github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/NethermindEth/juno v0.12.5 h1:a+KYQg8MxzNJIbbqGHq+vU9nTyuWu3acbyXxcUPUDOY= @@ -109,8 +109,8 @@ github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2uc github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/arrow-go/v18 v18.3.0 h1:Xq4A6dZj9Nu33sqZibzn012LNnewkTUlfKVUFD/RX/I= -github.com/apache/arrow-go/v18 v18.3.0/go.mod h1:eEM1DnUTHhgGAjf/ChvOAQbUQ+EPohtDrArffvUjPg8= +github.com/apache/arrow-go/v18 v18.3.1 h1:oYZT8FqONiK74JhlH3WKVv+2NKYoyZ7C2ioD4Dj3ixk= +github.com/apache/arrow-go/v18 v18.3.1/go.mod h1:12QBya5JZT6PnBihi5NJTzbACrDGXYkrgjujz3MRQXU= github.com/apache/thrift v0.21.0 h1:tdPmh/ptjE1IJnhbhrcl2++TauVjy242rkV/UzJChnE= github.com/apache/thrift v0.21.0/go.mod h1:W1H8aR/QRtYNvrPeFXBtobyRkd0/YVhTc6i07XIAgDw= github.com/appleboy/gofight/v2 v2.1.2 h1:VOy3jow4vIK8BRQJoC/I9muxyYlJ2yb9ht2hZoS3rf4= @@ -189,6 +189,8 @@ github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEe github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8= +github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v1.1.1 h1:nCb6ZLdB7NRaqsm91JtQTAme2SKJzXVsdPIPkyJr1MU= github.com/cespare/cp v1.1.1/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= @@ -438,8 +440,8 @@ github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl 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.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= -github.com/go-playground/validator/v10 v10.25.0 h1:5Dh7cjvzR7BRZadnsVOzPhWsrwUr0nmsZJxEAnFLNO8= -github.com/go-playground/validator/v10 v10.25.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus= +github.com/go-playground/validator/v10 v10.26.0 h1:SP05Nqhjcvz81uJaRfEV0YBSSSGMc/iMaVtFbr3Sw2k= +github.com/go-playground/validator/v10 v10.26.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -594,8 +596,8 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDa github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.1 h1:KcFzXwzM/kGhIRHvc8jdixfIJjVzuUJdnv+5xsPutog= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.1/go.mod h1:qOchhhIlmRcqk/O9uCo/puJlyo07YINaIqdZfZG3Jkc= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 h1:sGm2vDRFUrQJO/Veii4h4zG2vvqG6uWNkBHSTqXOZk0= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2/go.mod h1:wd1YpapPLivG6nQgbf7ZkG1hhSOXDhhn4MLTknx2aAc= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= @@ -626,8 +628,8 @@ github.com/hashicorp/go-metrics v0.5.4 h1:8mmPiIJkTPPEbAiV97IxdAGNdRdaWwVap1BU6e github.com/hashicorp/go-metrics v0.5.4/go.mod h1:CG5yz4NZ/AI/aQt9Ucm/vdBnbh7fvmv4lxZ350i+QQI= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-plugin v1.6.3 h1:xgHB+ZUSYeuJi96WtxEjzi23uh7YQpznjGh0U0UUrwg= -github.com/hashicorp/go-plugin v1.6.3/go.mod h1:MRobyh+Wc/nYy1V4KAXUiYfzxoYhs7V1mlH1Z7iY2h0= +github.com/hashicorp/go-plugin v1.7.0 h1:YghfQH/0QmPNc/AZMTFE3ac8fipZyZECHdDPshfk+mA= +github.com/hashicorp/go-plugin v1.7.0/go.mod h1:BExt6KEaIYx804z8k4gRzRLEvxKVb+kn0NMcihqOqb8= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= @@ -736,8 +738,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/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls= -github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k= +github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94= +github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o= @@ -895,8 +897,8 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q= github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= -github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= -github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= +github.com/oklog/run v1.2.0 h1:O8x3yXwah4A73hJdlrwo/2X6J62gE5qTMusH0dvz60E= +github.com/oklog/run v1.2.0/go.mod h1:mgDbKRSwPhJfesJ4PntqFUbKQRZ50NgmZTSPlFA0YFk= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -998,8 +1000,8 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.16.0 h1:xh6oHhKwnOJKMYiYBDWmkHqQPyiY40sny36Cmx2bbsM= -github.com/prometheus/procfs v0.16.0/go.mod h1:8veyXUu3nGP7oaCxhX6yeaM5u4stL2FeMXnCqhDthZg= +github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= +github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= github.com/prometheus/prometheus v0.304.2 h1:HhjbaAwet87x8Be19PFI/5W96UMubGy3zt24kayEuh4= github.com/prometheus/prometheus v0.304.2/go.mod h1:ioGx2SGKTY+fLnJSQCdTHqARVldGNS8OlIe3kvp98so= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= @@ -1086,14 +1088,10 @@ github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250805210128-7 github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250805210128-7f8a0f403c3a/go.mod h1:Ve1xD71bl193YIZQEoJMmBqLGQJdNs29bwbuObwvbhQ= github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250804184440-c0506474fc44 h1:S00lus9RPu5JuxKRtGEET+aIUfASahHpTRV5RgPARSI= github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250804184440-c0506474fc44/go.mod h1:xtZNi6pOKdC3sLvokDvXOhgHzT+cyBqH/gWwvxTxqrg= -github.com/smartcontractkit/chainlink-common v0.9.4-0.20250828173926-fcae05ee4a0b h1:TeVcu9rFlXcFWhLyU+GZOtLXZQjMv3KQl5hqp4yOozY= -github.com/smartcontractkit/chainlink-common v0.9.4-0.20250828173926-fcae05ee4a0b/go.mod h1:Kp54d3kbM4eGPEmJW7fcRWYUk6emXy+F5TEu5czFcH8= github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.1 h1:ca2z5OXgnbBPQRxpwXwBLJsUA1+cAp5ncfW4Ssvd6eY= github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.1/go.mod h1:NZv/qKYGFRnkjOYBouajnDfFoZ+WDa6H2KNmSf1dnKc= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7 h1:9wh1G+WbXwPVqf0cfSRSgwIcaXTQgvYezylEAfwmrbw= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7/go.mod h1:yaDOAZF6MNB+NGYpxGCUc+owIdKrjvFW0JODdTcQ3V0= -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-data-streams v0.1.2 h1:g/UmFJa/E1Zmc7NO20ob5SijxQen51DhnqTLr2f7BEc= github.com/smartcontractkit/chainlink-data-streams v0.1.2/go.mod h1:lxY97sDlDorQAmLGFo6x1tl8SQ2E7adsS0/wU8+mmTc= github.com/smartcontractkit/chainlink-evm v0.3.2 h1:cdwDu0peeoK0jCzUV9FQkOiCeKJqG2SBohJO3P50dd4= @@ -1110,10 +1108,10 @@ github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250717121125-23 github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250717121125-2350c82883e2/go.mod h1:jo+cUqNcHwN8IF7SInQNXDZ8qzBsyMpnLdYbDswviFc= github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250729142306-508e798f6a5d h1:pTYIcsWHTMG5fAcbRUA8Qk5yscXKdSpopQ0DUEOjPik= github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250729142306-508e798f6a5d/go.mod h1:2JTBNp3FlRdO/nHc4dsc9bfxxMClMO1Qt8sLJgtreBY= -github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20250722175102-6dcdf5122683 h1:Qjiw8yaKi42jjknW1+ox6+QHc4aJVm0uhVoKTlmZryU= -github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20250722175102-6dcdf5122683/go.mod h1:HHGeDUpAsPa0pmOx7wrByCitjQ0mbUxf0R9v+g67uCA= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20250819150450-95ef563f6e6d h1:MJS8HTB1h3w7qV+70ueWnTQlMG8mxDUV/GdQH54Rg6g= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20250819150450-95ef563f6e6d/go.mod h1:jUC52kZzEnWF9tddHh85zolKybmLpbQ1oNA4FjOHt1Q= +github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20250722225531-876fd6b94976 h1:mF3FiDUoV0QbJcks9R2y7ydqntNL1Z0VCPBJgx/Ms+0= +github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20250722225531-876fd6b94976/go.mod h1:HHGeDUpAsPa0pmOx7wrByCitjQ0mbUxf0R9v+g67uCA= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20250829155125-f4655b0b4605 h1:yVH5tLDzW2ZBUpmkHF5nci1SRSXTcU3A1VZ8iS5qudA= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20250829155125-f4655b0b4605/go.mod h1:jUC52kZzEnWF9tddHh85zolKybmLpbQ1oNA4FjOHt1Q= github.com/smartcontractkit/chainlink-protos/orchestrator v0.8.1 h1:VcFo27MBPTMB1d1Tp3q3RzJNqwErKR+z9QLQZ6KBSXo= github.com/smartcontractkit/chainlink-protos/orchestrator v0.8.1/go.mod h1:m/A3lqD7ms/RsQ9BT5P2uceYY0QX5mIt4KQxT2G6qEo= github.com/smartcontractkit/chainlink-protos/rmn/v1.6/go v0.0.0-20250131130834-15e0d4cde2a6 h1:L6KJ4kGv/yNNoCk8affk7Y1vAY0qglPMXC/hevV/IsA= @@ -1319,26 +1317,26 @@ go.opentelemetry.io/contrib/propagators/b3 v1.24.0/go.mod h1:k5wRxKRU2uXx2F8uNJ4 go.opentelemetry.io/otel v1.6.3/go.mod h1:7BgNga5fNlF/iZjG06hM3yofffp0ofKCDwSXx1GC4dI= go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.11.0 h1:HMUytBT3uGhPKYY/u/G5MR9itrlSO2SMOsSD3Tk3k7A= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.11.0/go.mod h1:hdDXsiNLmdW/9BF2jQpnHHlhFajpWCEYfM6e5m2OAZg= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.11.0 h1:C/Wi2F8wEmbxJ9Kuzw/nhP+Z9XaHYMkyDmXy6yR2cjw= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.11.0/go.mod h1:0Lr9vmGKzadCTgsiBydxr6GEZ8SsZ7Ks53LzjWG5Ar4= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.35.0 h1:QcFwRrZLc82r8wODjvyCbP7Ifp3UANaBSmhDSFjnqSc= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.35.0/go.mod h1:CXIWhUomyWBG/oY2/r/kLp6K/cmx9e/7DLpBuuGdLCA= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.35.0 h1:0NIXxOCFx+SKbhCVxwl3ETG8ClLPAa0KuKV6p3yhxP8= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.35.0/go.mod h1:ChZSJbbfbl/DcRZNc9Gqh6DYGlfjw4PvO1pEOZH1ZsE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 h1:1fTNlAIJZGWLP5FVu0fikVry1IsiUnXjf7QFvoNN3Xw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0/go.mod h1:zjPK58DtkqQFn+YUMbx0M2XV3QgKU0gS9LeGohREyK4= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0 h1:m639+BofXTvcY1q8CGs4ItwQarYtJPOWmVobfM1HpVI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0/go.mod h1:LjReUci/F4BUyv+y4dwnq3h/26iNOeC3wAIqgvTIZVo= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0 h1:xJ2qHD0C1BeYVTLLR9sX12+Qb95kfeD/byKj6Ky1pXg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0/go.mod h1:u5BF1xyjstDowA1R5QAO9JHzqK+ublenEW/dyqTjBVk= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2 h1:06ZeJRe5BnYXceSM9Vya83XXVaNGe3H1QqsvqRANQq8= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2/go.mod h1:DvPtKE63knkDVP88qpatBj81JxN+w1bqfVbsbCbj1WY= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2 h1:tPLwQlXbJ8NSOfZc4OkgU5h2A38M4c9kfHSVc4PFQGs= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2/go.mod h1:QTnxBwT/1rBIgAG1goq6xMydfYOBKU6KTiYF4fp5zL8= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.36.0 h1:zwdo1gS2eH26Rg+CoqVQpEK1h8gvt5qyU5Kk5Bixvow= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.36.0/go.mod h1:rUKCPscaRWWcqGT6HnEmYrK+YNe5+Sw64xgQTOJ5b30= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.36.0 h1:gAU726w9J8fwr4qRDqu1GYMNNs4gXrU+Pv20/N1UpB4= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.36.0/go.mod h1:RboSDkp7N292rgu+T0MgVt2qgFGu6qa1RpZDOtpL76w= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 h1:dNzwXjZKpMpE2JhmO+9HsPl42NIXFIFSUSSs0fiqra0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0/go.mod h1:90PoxvaEB5n6AOdZvi+yWJQoE95U8Dhhw2bSyRqnTD0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0 h1:JgtbA0xkWHnTmYk7YusopJFX6uleBmAuZ8n05NEh8nQ= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0/go.mod h1:179AK5aar5R3eS9FucPy6rggvU0g52cvKId8pv4+v0c= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0 h1:nRVXXvf78e00EwY6Wp0YII8ww2JVWshZ20HfTlE11AM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0/go.mod h1:r49hO7CgrxY9Voaj3Xe8pANWtr0Oq916d0XAmOoCZAQ= go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.13.0 h1:yEX3aC9KDgvYPhuKECHbOlr5GLwH6KTjLJ1sBSkkxkc= go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.13.0/go.mod h1:/GXR0tBmmkxDaCUGahvksvp66mx4yh5+cFXgSlhg0vQ= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0 h1:PB3Zrjs1sG1GBX51SXyTSoOTqcDglmsk7nT6tkKPb/k= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0/go.mod h1:U2R3XyVPzn0WX7wOIypPuptulsMcPDPs/oiSVOMVnHY= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.35.0 h1:T0Ec2E+3YZf5bgTNQVet8iTDW7oIk03tXHq+wkwIDnE= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.35.0/go.mod h1:30v2gqH+vYGJsesLWFov8u47EpYTcIQcBjKpI6pJThg= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.36.0 h1:G8Xec/SgZQricwWBJF/mHZc7A02YHedfFDENwJEdRA0= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.36.0/go.mod h1:PD57idA/AiFD5aqoxGxCvT/ILJPeHy3MjqU/NS7KogY= go.opentelemetry.io/otel/log v0.13.0 h1:yoxRoIZcohB6Xf0lNv9QIyCzQvrtGZklVbdCoyb7dls= go.opentelemetry.io/otel/log v0.13.0/go.mod h1:INKfG4k1O9CL25BaM1qLe0zIedOpvlS5Z7XgSbmN83E= go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= @@ -1354,8 +1352,8 @@ go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVW go.opentelemetry.io/otel/trace v1.6.3/go.mod h1:GNJQusJlUgZl9/TQBPKU/Y/ty+0iVB5fjhKeJGZPGFs= go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= -go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4= -go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4= +go.opentelemetry.io/proto/otlp v1.6.0 h1:jQjP+AQyTf+Fe7OKj/MfkDrmK4MNVtw2NpXsf9fefDI= +go.opentelemetry.io/proto/otlp v1.6.0/go.mod h1:cicgGehlFuNdgZkcALOCh3VE6K/u2tAjzlRhDwmVpZc= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -1813,10 +1811,10 @@ google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaE google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4 h1:Pw6WnI9W/LIdRxqK7T6XGugGbHIRl5Q7q3BssH6xk4s= google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4/go.mod h1:qbZzneIOXSq+KFAFut9krLfRLZiFLzZL5u2t8SV83EE= -google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 h1:hE3bRWtU6uceqlh4fhrSnUyjKHMKB9KrTLLG+bc0ddM= -google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463/go.mod h1:U90ffi8eUL9MwPcrJylN5+Mk2v3vuPDptd5yyNUiRR8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 h1:cJfm9zPbe1e873mHJzmQ1nwVEeRDU/T1wXDK2kUSU34= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/api v0.0.0-20250528174236-200df99c418a h1:SGktgSolFCo75dnHJF2yMvnns6jCmHFJ0vE4Vn2JKvQ= +google.golang.org/genproto/googleapis/api v0.0.0-20250528174236-200df99c418a/go.mod h1:a77HrdMjoeKbnd2jmgcWdaS++ZLZAEq3orIOAEIKiVw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 h1:fc6jSaCT0vBduLYZHYrBBNY4dsWuvgyff9noRNDdBeE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1837,8 +1835,8 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok= -google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc= +google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4= +google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=