Skip to content

Commit

Permalink
remove shared secret from transmission protocol (#13501)
Browse files Browse the repository at this point in the history
  • Loading branch information
ettec authored and JoKacar committed Jun 11, 2024
1 parent 580bc28 commit 509b817
Show file tree
Hide file tree
Showing 15 changed files with 62 additions and 83 deletions.
5 changes: 5 additions & 0 deletions .changeset/pink-ants-reply.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": minor
---

#internal remove shared secret from transmission schedule
8 changes: 1 addition & 7 deletions core/capabilities/remote/target/request/client_request.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,7 @@ func NewClientRequest(ctx context.Context, lggr logger.Logger, req commoncap.Cap
return nil, fmt.Errorf("failed to marshal capability request: %w", err)
}

tc, err := transmission.ExtractTransmissionConfig(req.Config)
if err != nil {
return nil, fmt.Errorf("failed to extract transmission config from request config: %w", err)
}

peerIDToTransmissionDelay, err := transmission.GetPeerIDToTransmissionDelay(remoteCapabilityDonInfo.Members, localDonInfo.Config.SharedSecret,
messageID, tc)
peerIDToTransmissionDelay, err := transmission.GetPeerIDToTransmissionDelay(remoteCapabilityDonInfo.Members, req)
if err != nil {
return nil, fmt.Errorf("failed to get peer ID to transmission delay: %w", err)
}
Expand Down
8 changes: 1 addition & 7 deletions core/capabilities/transmission/local_target_capability.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,7 @@ func (l *LocalTargetCapability) Execute(ctx context.Context, req capabilities.Ca
return l.TargetCapability.Execute(ctx, req)
}

tc, err := ExtractTransmissionConfig(req.Config)
if err != nil {
return nil, fmt.Errorf("failed to extract transmission config from request config: %w", err)
}

peerIDToTransmissionDelay, err := GetPeerIDToTransmissionDelay(l.don.Members, l.don.Config.SharedSecret,
req.Metadata.WorkflowID+req.Metadata.WorkflowExecutionID, tc)
peerIDToTransmissionDelay, err := GetPeerIDToTransmissionDelay(l.don.Members, req)
if err != nil {
return nil, fmt.Errorf("failed to get peer ID to transmission delay map: %w", err)
}
Expand Down
15 changes: 3 additions & 12 deletions core/capabilities/transmission/local_target_capability_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package transmission
import (
"context"
"crypto/rand"
"encoding/hex"
"testing"
"time"

Expand Down Expand Up @@ -44,11 +43,6 @@ func TestScheduledExecutionStrategy_LocalDON(t *testing.T) {
},
)

// The combination of this key and the metadata above
// will yield the permutation [3, 2, 0, 1]
key, err := hex.DecodeString("fb13ca015a9ec60089c7141e9522de79")
require.NoError(t, err)

testCases := []struct {
name string
position int
Expand All @@ -67,7 +61,7 @@ func TestScheduledExecutionStrategy_LocalDON(t *testing.T) {
name: "position 1; oneAtATime",
position: 1,
schedule: "oneAtATime",
low: 200 * time.Millisecond,
low: 100 * time.Millisecond,
high: 300 * time.Millisecond,
},
{
Expand All @@ -82,7 +76,7 @@ func TestScheduledExecutionStrategy_LocalDON(t *testing.T) {
position: 3,
schedule: "oneAtATime",
low: 100 * time.Millisecond,
high: 200 * time.Millisecond,
high: 300 * time.Millisecond,
},
{
name: "position 0; allAtOnce",
Expand Down Expand Up @@ -128,7 +122,7 @@ func TestScheduledExecutionStrategy_LocalDON(t *testing.T) {
Config: m,
Metadata: capabilities.RequestMetadata{
WorkflowID: "mock-workflow-id",
WorkflowExecutionID: "mock-execution-id",
WorkflowExecutionID: "mock-execution-id-1",
},
}

Expand All @@ -140,9 +134,6 @@ func TestScheduledExecutionStrategy_LocalDON(t *testing.T) {
}
don := capabilities.DON{
Members: ids,
Config: capabilities.DONConfig{
SharedSecret: [16]byte(key),
},
}
peerID := ids[tc.position]
localTargetCapability := NewLocalTargetCapability(log, peerID, don, mt)
Expand Down
34 changes: 22 additions & 12 deletions core/capabilities/transmission/transmission.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ import (
"fmt"
"time"

"golang.org/x/crypto/sha3"
"github.com/pkg/errors"

"github.com/smartcontractkit/libocr/permutation"
ragep2ptypes "github.com/smartcontractkit/libocr/ragep2p/types"

"github.com/smartcontractkit/chainlink-common/pkg/capabilities"
"github.com/smartcontractkit/chainlink-common/pkg/values"
p2ptypes "github.com/smartcontractkit/chainlink/v2/core/services/p2p/types"
"github.com/smartcontractkit/chainlink/v2/core/services/p2p/types"

"golang.org/x/crypto/sha3"
)

var (
Expand All @@ -25,7 +27,7 @@ type TransmissionConfig struct {
DeltaStage time.Duration
}

func ExtractTransmissionConfig(config *values.Map) (TransmissionConfig, error) {
func extractTransmissionConfig(config *values.Map) (TransmissionConfig, error) {
var tc struct {
DeltaStage string
Schedule string
Expand All @@ -47,19 +49,29 @@ func ExtractTransmissionConfig(config *values.Map) (TransmissionConfig, error) {
}

// GetPeerIDToTransmissionDelay returns a map of PeerID to the time.Duration that the node with that PeerID should wait
// before transmitting. If a node is not in the map, it should not transmit. The sharedSecret is shared by nodes in the
// same DON and used to generate a deterministic schedule for the transmission delays.
func GetPeerIDToTransmissionDelay(donPeerIDs []ragep2ptypes.PeerID, sharedSecret [16]byte, transmissionID string, tc TransmissionConfig) (map[p2ptypes.PeerID]time.Duration, error) {
// before transmitting the capability request. If a node is not in the map, it should not transmit.
func GetPeerIDToTransmissionDelay(donPeerIDs []types.PeerID, req capabilities.CapabilityRequest) (map[types.PeerID]time.Duration, error) {
tc, err := extractTransmissionConfig(req.Config)
if err != nil {
return nil, fmt.Errorf("failed to extract transmission config from request: %w", err)
}

if req.Metadata.WorkflowID == "" || req.Metadata.WorkflowExecutionID == "" {
return nil, errors.New("workflow ID and workflow execution ID must be set in request metadata")
}

transmissionID := req.Metadata.WorkflowID + req.Metadata.WorkflowExecutionID

donMemberCount := len(donPeerIDs)
key := transmissionScheduleSeed(sharedSecret, transmissionID)
key := transmissionScheduleSeed(transmissionID)
schedule, err := createTransmissionSchedule(tc.Schedule, donMemberCount)
if err != nil {
return nil, err
}

picked := permutation.Permutation(donMemberCount, key)

peerIDToTransmissionDelay := map[p2ptypes.PeerID]time.Duration{}
peerIDToTransmissionDelay := map[types.PeerID]time.Duration{}
for i, peerID := range donPeerIDs {
delay := delayFor(i, schedule, picked, tc.DeltaStage)
if delay != nil {
Expand Down Expand Up @@ -96,11 +108,9 @@ func createTransmissionSchedule(scheduleType string, N int) ([]int, error) {
return nil, fmt.Errorf("unknown schedule type %s", scheduleType)
}

func transmissionScheduleSeed(sharedSecret [16]byte, transmissionID string) [16]byte {
func transmissionScheduleSeed(transmissionID string) [16]byte {
hash := sha3.NewLegacyKeccak256()
hash.Write(sharedSecret[:])
hash.Write([]byte(transmissionID))

var key [16]byte
copy(key[:], hash.Sum(nil))
return key
Expand Down
31 changes: 15 additions & 16 deletions core/capabilities/transmission/transmission_test.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package transmission

import (
"encoding/hex"
"fmt"
"testing"
"time"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/smartcontractkit/chainlink-common/pkg/capabilities"
"github.com/smartcontractkit/chainlink-common/pkg/values"
p2ptypes "github.com/smartcontractkit/chainlink/v2/core/services/p2p/types"
)
Expand All @@ -26,7 +26,6 @@ func Test_GetPeerIDToTransmissionDelay(t *testing.T) {
testCases := []struct {
name string
peerName string
sharedSecret string
schedule string
deltaStage string
workflowExecutionID string
Expand All @@ -35,21 +34,19 @@ func Test_GetPeerIDToTransmissionDelay(t *testing.T) {
{
"TestOneAtATime",
"one",
"fb13ca015a9ec60089c7141e9522de79",
"oneAtATime",
"100ms",
"mock-execution-id",
map[string]time.Duration{
"one": 300 * time.Millisecond,
"two": 200 * time.Millisecond,
"two": 100 * time.Millisecond,
"three": 0 * time.Millisecond,
"four": 100 * time.Millisecond,
"four": 200 * time.Millisecond,
},
},
{
"TestAllAtOnce",
"one",
"fb13ca015a9ec60089c7141e9522de79",
"allAtOnce",
"100ms",
"mock-execution-id",
Expand All @@ -63,33 +60,35 @@ func Test_GetPeerIDToTransmissionDelay(t *testing.T) {
{
"TestOneAtATimeWithDifferentExecutionID",
"one",
"fb13ca015a9ec60089c7141e9522de79",
"oneAtATime",
"100ms",
"mock-execution-id2",
map[string]time.Duration{
"one": 0 * time.Millisecond,
"two": 300 * time.Millisecond,
"two": 200 * time.Millisecond,
"three": 100 * time.Millisecond,
"four": 200 * time.Millisecond,
"four": 300 * time.Millisecond,
},
},
}

for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
sharedSecret, err := hex.DecodeString(tc.sharedSecret)
require.NoError(t, err)

m, err := values.NewMap(map[string]any{
transmissionCfg, err := values.NewMap(map[string]any{
"schedule": tc.schedule,
"deltaStage": tc.deltaStage,
})
require.NoError(t, err)
transmissionCfg, err := ExtractTransmissionConfig(m)
require.NoError(t, err)

peerIdToDelay, err := GetPeerIDToTransmissionDelay(ids, [16]byte(sharedSecret), "mock-workflow-id"+tc.workflowExecutionID, transmissionCfg)
capabilityRequest := capabilities.CapabilityRequest{
Config: transmissionCfg,
Metadata: capabilities.RequestMetadata{
WorkflowID: "mock-workflow-id",
WorkflowExecutionID: tc.workflowExecutionID,
},
}

peerIdToDelay, err := GetPeerIDToTransmissionDelay(ids, capabilityRequest)
require.NoError(t, err)

assert.Equal(t, tc.expectedDelays["one"], peerIdToDelay[peer1])
Expand Down
2 changes: 1 addition & 1 deletion core/scripts/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ require (
github.com/prometheus/client_golang v1.17.0
github.com/shopspring/decimal v1.3.1
github.com/smartcontractkit/chainlink-automation v1.0.4
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611144925-2baf0f2a3fef
github.com/smartcontractkit/chainlink-vrf v0.0.0-20240222010609-cd67d123c772
github.com/smartcontractkit/chainlink/v2 v2.0.0-00010101000000-000000000000
github.com/smartcontractkit/libocr v0.0.0-20240419185742-fd3cab206b2c
Expand Down
4 changes: 2 additions & 2 deletions core/scripts/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1212,8 +1212,8 @@ github.com/smartcontractkit/chain-selectors v1.0.10 h1:t9kJeE6B6G+hKD0GYR4kGJSCq
github.com/smartcontractkit/chain-selectors v1.0.10/go.mod h1:d4Hi+E1zqjy9HqMkjBE5q1vcG9VGgxf5VxiRHfzi2kE=
github.com/smartcontractkit/chainlink-automation v1.0.4 h1:iyW181JjKHLNMnDleI8umfIfVVlwC7+n5izbLSFgjw8=
github.com/smartcontractkit/chainlink-automation v1.0.4/go.mod h1:u4NbPZKJ5XiayfKHD/v3z3iflQWqvtdhj13jVZXj/cM=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce h1:/CjY8L4lVJh9E8NKg3bdAgsxj+zKg9XYtXR71ZWWMXo=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce/go.mod h1:L32xvCpk84Nglit64OhySPMP1tM3TTBK7Tw0qZl7Sd4=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611144925-2baf0f2a3fef h1:70N67MKSMYwhGfVMC0Ekfc3yQmFvw3FhXe61M2KZdW4=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611144925-2baf0f2a3fef/go.mod h1:L32xvCpk84Nglit64OhySPMP1tM3TTBK7Tw0qZl7Sd4=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240524214833-c362c2ebbd2d h1:5tgMC5Gi2UAOKZ+m28W8ubjLeR0pQCAcrz6eQ0rW510=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240524214833-c362c2ebbd2d/go.mod h1:0UNuO3nDt9MFsZPaHJBEUolxVkN0iC69j1ccDp95e8k=
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240220203239-09be0ea34540 h1:xFSv8561jsLtF6gYZr/zW2z5qUUAkcFkApin2mnbYTo=
Expand Down
20 changes: 3 additions & 17 deletions core/services/workflows/delegate.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package workflows

import (
"context"
"encoding/hex"
"fmt"

"github.com/google/uuid"
Expand Down Expand Up @@ -38,8 +37,8 @@ func (d *Delegate) BeforeJobDeleted(spec job.Job) {}
func (d *Delegate) OnDeleteJob(context.Context, job.Job) error { return nil }

// ServicesForSpec satisfies the job.Delegate interface.
func (d *Delegate) ServicesForSpec(ctx context.Context, spec job.Job) ([]job.ServiceCtx, error) {
dinfo, err := initializeDONInfo(d.logger)
func (d *Delegate) ServicesForSpec(_ context.Context, spec job.Job) ([]job.ServiceCtx, error) {
dinfo, err := initializeDONInfo()
if err != nil {
d.logger.Errorw("could not add initialize don info", err)
}
Expand All @@ -62,17 +61,7 @@ func (d *Delegate) ServicesForSpec(ctx context.Context, spec job.Job) ([]job.Ser
return []job.ServiceCtx{engine}, nil
}

func initializeDONInfo(lggr logger.Logger) (*capabilities.DON, error) {
var key [16]byte

// TODO: fetch the key and DONInfo from the registry
keyString := "44fb5c1ee8ee48846c808a383da3aba3"
k, err := hex.DecodeString(keyString)
if err != nil {
lggr.Errorf("could not decode key %s: %w", keyString, err)
}
key = [16]byte(k)

func initializeDONInfo() (*capabilities.DON, error) {
p2pStrings := []string{
"12D3KooWBCF1XT5Wi8FzfgNCqRL76Swv8TRU3TiD4QiJm8NMNX7N",
"12D3KooWG1AyvwmCpZ93J8pBQUE1SuzrjDXnT4BeouncHR3jWLCG",
Expand All @@ -97,9 +86,6 @@ func initializeDONInfo(lggr logger.Logger) (*capabilities.DON, error) {
return &capabilities.DON{
ID: "00010203",
Members: p2pIDs,
Config: capabilities.DONConfig{
SharedSecret: key,
},
}, nil
}

Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ require (
github.com/shopspring/decimal v1.3.1
github.com/smartcontractkit/chain-selectors v1.0.10
github.com/smartcontractkit/chainlink-automation v1.0.4
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611144925-2baf0f2a3fef
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240524214833-c362c2ebbd2d
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240220203239-09be0ea34540
github.com/smartcontractkit/chainlink-feeds v0.0.0-20240522213638-159fb2d99917
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1171,8 +1171,8 @@ github.com/smartcontractkit/chain-selectors v1.0.10 h1:t9kJeE6B6G+hKD0GYR4kGJSCq
github.com/smartcontractkit/chain-selectors v1.0.10/go.mod h1:d4Hi+E1zqjy9HqMkjBE5q1vcG9VGgxf5VxiRHfzi2kE=
github.com/smartcontractkit/chainlink-automation v1.0.4 h1:iyW181JjKHLNMnDleI8umfIfVVlwC7+n5izbLSFgjw8=
github.com/smartcontractkit/chainlink-automation v1.0.4/go.mod h1:u4NbPZKJ5XiayfKHD/v3z3iflQWqvtdhj13jVZXj/cM=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce h1:/CjY8L4lVJh9E8NKg3bdAgsxj+zKg9XYtXR71ZWWMXo=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce/go.mod h1:L32xvCpk84Nglit64OhySPMP1tM3TTBK7Tw0qZl7Sd4=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611144925-2baf0f2a3fef h1:70N67MKSMYwhGfVMC0Ekfc3yQmFvw3FhXe61M2KZdW4=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611144925-2baf0f2a3fef/go.mod h1:L32xvCpk84Nglit64OhySPMP1tM3TTBK7Tw0qZl7Sd4=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240524214833-c362c2ebbd2d h1:5tgMC5Gi2UAOKZ+m28W8ubjLeR0pQCAcrz6eQ0rW510=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240524214833-c362c2ebbd2d/go.mod h1:0UNuO3nDt9MFsZPaHJBEUolxVkN0iC69j1ccDp95e8k=
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240220203239-09be0ea34540 h1:xFSv8561jsLtF6gYZr/zW2z5qUUAkcFkApin2mnbYTo=
Expand Down
2 changes: 1 addition & 1 deletion integration-tests/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ require (
github.com/shopspring/decimal v1.3.1
github.com/slack-go/slack v0.12.2
github.com/smartcontractkit/chainlink-automation v1.0.4
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611144925-2baf0f2a3fef
github.com/smartcontractkit/chainlink-testing-framework v1.30.3
github.com/smartcontractkit/chainlink-vrf v0.0.0-20231120191722-fef03814f868
github.com/smartcontractkit/chainlink/v2 v2.0.0-00010101000000-000000000000
Expand Down
4 changes: 2 additions & 2 deletions integration-tests/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1512,8 +1512,8 @@ github.com/smartcontractkit/chain-selectors v1.0.10 h1:t9kJeE6B6G+hKD0GYR4kGJSCq
github.com/smartcontractkit/chain-selectors v1.0.10/go.mod h1:d4Hi+E1zqjy9HqMkjBE5q1vcG9VGgxf5VxiRHfzi2kE=
github.com/smartcontractkit/chainlink-automation v1.0.4 h1:iyW181JjKHLNMnDleI8umfIfVVlwC7+n5izbLSFgjw8=
github.com/smartcontractkit/chainlink-automation v1.0.4/go.mod h1:u4NbPZKJ5XiayfKHD/v3z3iflQWqvtdhj13jVZXj/cM=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce h1:/CjY8L4lVJh9E8NKg3bdAgsxj+zKg9XYtXR71ZWWMXo=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce/go.mod h1:L32xvCpk84Nglit64OhySPMP1tM3TTBK7Tw0qZl7Sd4=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611144925-2baf0f2a3fef h1:70N67MKSMYwhGfVMC0Ekfc3yQmFvw3FhXe61M2KZdW4=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611144925-2baf0f2a3fef/go.mod h1:L32xvCpk84Nglit64OhySPMP1tM3TTBK7Tw0qZl7Sd4=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240524214833-c362c2ebbd2d h1:5tgMC5Gi2UAOKZ+m28W8ubjLeR0pQCAcrz6eQ0rW510=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240524214833-c362c2ebbd2d/go.mod h1:0UNuO3nDt9MFsZPaHJBEUolxVkN0iC69j1ccDp95e8k=
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240220203239-09be0ea34540 h1:xFSv8561jsLtF6gYZr/zW2z5qUUAkcFkApin2mnbYTo=
Expand Down
2 changes: 1 addition & 1 deletion integration-tests/load/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ require (
github.com/rs/zerolog v1.30.0
github.com/slack-go/slack v0.12.2
github.com/smartcontractkit/chainlink-automation v1.0.4
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611144925-2baf0f2a3fef
github.com/smartcontractkit/chainlink-testing-framework v1.30.3
github.com/smartcontractkit/chainlink/integration-tests v0.0.0-20240214231432-4ad5eb95178c
github.com/smartcontractkit/chainlink/v2 v2.9.0-beta0.0.20240216210048-da02459ddad8
Expand Down
4 changes: 2 additions & 2 deletions integration-tests/load/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1502,8 +1502,8 @@ github.com/smartcontractkit/chain-selectors v1.0.10 h1:t9kJeE6B6G+hKD0GYR4kGJSCq
github.com/smartcontractkit/chain-selectors v1.0.10/go.mod h1:d4Hi+E1zqjy9HqMkjBE5q1vcG9VGgxf5VxiRHfzi2kE=
github.com/smartcontractkit/chainlink-automation v1.0.4 h1:iyW181JjKHLNMnDleI8umfIfVVlwC7+n5izbLSFgjw8=
github.com/smartcontractkit/chainlink-automation v1.0.4/go.mod h1:u4NbPZKJ5XiayfKHD/v3z3iflQWqvtdhj13jVZXj/cM=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce h1:/CjY8L4lVJh9E8NKg3bdAgsxj+zKg9XYtXR71ZWWMXo=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce/go.mod h1:L32xvCpk84Nglit64OhySPMP1tM3TTBK7Tw0qZl7Sd4=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611144925-2baf0f2a3fef h1:70N67MKSMYwhGfVMC0Ekfc3yQmFvw3FhXe61M2KZdW4=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611144925-2baf0f2a3fef/go.mod h1:L32xvCpk84Nglit64OhySPMP1tM3TTBK7Tw0qZl7Sd4=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240524214833-c362c2ebbd2d h1:5tgMC5Gi2UAOKZ+m28W8ubjLeR0pQCAcrz6eQ0rW510=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240524214833-c362c2ebbd2d/go.mod h1:0UNuO3nDt9MFsZPaHJBEUolxVkN0iC69j1ccDp95e8k=
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240220203239-09be0ea34540 h1:xFSv8561jsLtF6gYZr/zW2z5qUUAkcFkApin2mnbYTo=
Expand Down

0 comments on commit 509b817

Please sign in to comment.