Skip to content

Commit

Permalink
Initial Add confidence levels to CR GetLatestValue
Browse files Browse the repository at this point in the history
  • Loading branch information
ilija42 committed Jun 11, 2024
1 parent af2a46f commit 41ffc8c
Show file tree
Hide file tree
Showing 17 changed files with 71 additions and 47 deletions.
11 changes: 6 additions & 5 deletions core/capabilities/targets/mocks/chain_reader.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion core/capabilities/targets/write_target.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"github.com/smartcontractkit/chainlink-common/pkg/capabilities"
"github.com/smartcontractkit/chainlink-common/pkg/capabilities/consensus/ocr3/types"
commontypes "github.com/smartcontractkit/chainlink-common/pkg/types"
"github.com/smartcontractkit/chainlink-common/pkg/types/query/primitives"
"github.com/smartcontractkit/chainlink-common/pkg/values"
"github.com/smartcontractkit/chainlink/v2/core/logger"
)
Expand Down Expand Up @@ -114,7 +115,7 @@ func (cap *WriteTarget) Execute(ctx context.Context, request capabilities.Capabi
ReportId: inputs.ID,
}
var transmitter common.Address
if err = cap.cr.GetLatestValue(ctx, "forwarder", "getTransmitter", queryInputs, &transmitter); err != nil {
if err = cap.cr.GetLatestValue(ctx, "forwarder", "getTransmitter", queryInputs, &transmitter, primitives.Finalized); err != nil {
return nil, err
}
if transmitter != common.HexToAddress("0x0") {
Expand Down
4 changes: 2 additions & 2 deletions core/capabilities/targets/write_target_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func TestWriteTarget(t *testing.T) {
})
require.NoError(t, err)

cr.On("GetLatestValue", mock.Anything, "forwarder", "getTransmitter", mock.Anything, mock.Anything).Return(nil).Run(func(args mock.Arguments) {
cr.On("GetLatestValue", mock.Anything, "forwarder", "getTransmitter", mock.Anything, mock.Anything, mock.Anything).Return(nil).Run(func(args mock.Arguments) {
transmitter := args.Get(4).(*common.Address)
*transmitter = common.HexToAddress("0x0")
}).Once()
Expand Down Expand Up @@ -100,7 +100,7 @@ func TestWriteTarget(t *testing.T) {
Config: config,
Inputs: validInputs,
}
cr.On("GetLatestValue", mock.Anything, "forwarder", "getTransmitter", mock.Anything, mock.Anything).Return(errors.New("reader error"))
cr.On("GetLatestValue", mock.Anything, "forwarder", "getTransmitter", mock.Anything, mock.Anything, mock.Anything).Return(errors.New("reader error"))

_, err = writeTarget.Execute(ctx, req)
require.Error(t, err)
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.3
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611175326-870c047f24c0
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.3 h1:h/ijT0NiyV06VxYVgcNfsE3+8OEzT3Q0Z9au0z1BPWs=
github.com/smartcontractkit/chainlink-automation v1.0.3/go.mod h1:RjboV0Qd7YP+To+OrzHGXaxUxoSONveCoAK2TQ1INLU=
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.20240611175326-870c047f24c0 h1:FYfzU4T3t9vHJa/h4xYTvJVaxRfVFpNdaNLlcbCBWDE=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611175326-870c047f24c0/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
3 changes: 2 additions & 1 deletion core/services/relay/evm/binding.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@ import (

commontypes "github.com/smartcontractkit/chainlink-common/pkg/types"
"github.com/smartcontractkit/chainlink-common/pkg/types/query"
"github.com/smartcontractkit/chainlink-common/pkg/types/query/primitives"
)

type readBinding interface {
GetLatestValue(ctx context.Context, params, returnVal any) error
GetLatestValue(ctx context.Context, params, returnVal any, confidenceLevel primitives.ConfidenceLevel) error
QueryKey(ctx context.Context, filter query.KeyFilter, limitAndSort query.LimitAndSort, sequenceDataType any) ([]commontypes.Sequence, error)
Bind(ctx context.Context, binding commontypes.BoundContract) error
SetCodec(codec commontypes.RemoteCodec)
Expand Down
16 changes: 11 additions & 5 deletions core/services/relay/evm/chain_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,13 @@ func (cr *chainReader) Name() string { return cr.lggr.Name() }

var _ commontypes.ContractTypeProvider = &chainReader{}

func (cr *chainReader) GetLatestValue(ctx context.Context, contractName, method string, params any, returnVal any) error {
func (cr *chainReader) GetLatestValue(ctx context.Context, contractName, method string, params any, returnVal any, confidenceLevel primitives.ConfidenceLevel) error {
b, err := cr.contractBindings.GetReadBinding(contractName, method)
if err != nil {
return err
}

return b.GetLatestValue(ctx, params, returnVal)
return b.GetLatestValue(ctx, params, returnVal, confidenceLevel)
}

func (cr *chainReader) Bind(ctx context.Context, bindings []commontypes.BoundContract) error {
Expand Down Expand Up @@ -172,10 +172,16 @@ func (cr *chainReader) addMethod(
chainReaderDefinition.ChainSpecificName)
}

confirmations, err := confirmationsFromConfig(chainReaderDefinition.ConfidenceConfirmations)
if err != nil {
return err
}

cr.contractBindings.AddReadBinding(contractName, methodName, &methodBinding{
contractName: contractName,
method: methodName,
client: cr.client,
contractName: contractName,
method: methodName,
client: cr.client,
confirmationsMapping: confirmations,
})

if err := cr.addEncoderDef(contractName, methodName, method.Inputs, method.ID, chainReaderDefinition); err != nil {
Expand Down
9 changes: 5 additions & 4 deletions core/services/relay/evm/chain_reader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/stretchr/testify/require"

"github.com/smartcontractkit/chainlink-common/pkg/codec"
"github.com/smartcontractkit/chainlink-common/pkg/types/query/primitives"

clcommontypes "github.com/smartcontractkit/chainlink-common/pkg/types"
. "github.com/smartcontractkit/chainlink-common/pkg/types/interfacetests" //nolint common practice to import test mods with .
Expand Down Expand Up @@ -75,7 +76,7 @@ func TestChainReaderInterfaceTests(t *testing.T) {
rOutput := reflect.Indirect(reflect.ValueOf(output))

require.Eventually(t, func() bool {
return cr.GetLatestValue(ctx, AnyContractName, triggerWithDynamicTopic, input, output) == nil
return cr.GetLatestValue(ctx, AnyContractName, triggerWithDynamicTopic, input, output, primitives.Finalized) == nil
}, it.MaxWaitTimeForEvents(), time.Millisecond*10)

assert.Equal(t, &anyString, rOutput.FieldByName("Field").Interface())
Expand All @@ -101,7 +102,7 @@ func TestChainReaderInterfaceTests(t *testing.T) {
params := struct{ Field1, Field2, Field3 int32 }{Field1: 1, Field2: 2, Field3: 3}

require.Eventually(t, func() bool {
return cr.GetLatestValue(ctx, AnyContractName, triggerWithAllTopics, params, &latest) == nil
return cr.GetLatestValue(ctx, AnyContractName, triggerWithAllTopics, params, &latest, primitives.Finalized) == nil
}, it.MaxWaitTimeForEvents(), time.Millisecond*10)

assert.Equal(t, int32(1), latest.Field1)
Expand Down Expand Up @@ -306,8 +307,8 @@ func (it *chainReaderInterfaceTester) TriggerEvent(t *testing.T, testStruct *Tes

func (it *chainReaderInterfaceTester) GetBindings(_ *testing.T) []clcommontypes.BoundContract {
return []clcommontypes.BoundContract{
{Name: AnyContractName, Address: it.address, Pending: true},
{Name: AnySecondContractName, Address: it.address2, Pending: true},
{Name: AnyContractName, Address: it.address},
{Name: AnySecondContractName, Address: it.address2},
}
}

Expand Down
13 changes: 4 additions & 9 deletions core/services/relay/evm/event_binding.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ type eventBinding struct {
lp logpoller.LogPoller
hash common.Hash
codec commontypes.RemoteCodec
pending bool
bound bool
registerCalled bool
lock sync.Mutex
Expand Down Expand Up @@ -88,21 +87,18 @@ func (e *eventBinding) Unregister(ctx context.Context) error {
return nil
}

func (e *eventBinding) GetLatestValue(ctx context.Context, params, into any) error {
func (e *eventBinding) GetLatestValue(ctx context.Context, params, into any, confidenceLevel primitives.ConfidenceLevel) error {
if !e.bound {
return fmt.Errorf("%w: event not bound", commontypes.ErrInvalidType)
}

confs := evmtypes.Finalized
if e.pending {
confs = evmtypes.Unconfirmed
}
confirmations := e.confirmationsFrom(confidenceLevel)

if len(e.inputInfo.Args()) == 0 {
return e.getLatestValueWithoutFilters(ctx, confs, into)
return e.getLatestValueWithoutFilters(ctx, confirmations, into)
}

return e.getLatestValueWithFilters(ctx, confs, params, into)
return e.getLatestValueWithFilters(ctx, confirmations, params, into)
}

func (e *eventBinding) QueryKey(ctx context.Context, filter query.KeyFilter, limitAndSort query.LimitAndSort, sequenceDataType any) ([]commontypes.Sequence, error) {
Expand Down Expand Up @@ -141,7 +137,6 @@ func (e *eventBinding) Bind(ctx context.Context, binding commontypes.BoundContra
}

e.address = common.HexToAddress(binding.Address)
e.pending = binding.Pending
e.bound = true

if e.registerCalled {
Expand Down
2 changes: 1 addition & 1 deletion core/services/relay/evm/evm.go
Original file line number Diff line number Diff line change
Expand Up @@ -687,7 +687,7 @@ func (r *Relayer) NewMedianProvider(rargs commontypes.RelayArgs, pargs commontyp
return nil, err
}

boundContracts := []commontypes.BoundContract{{Name: "median", Pending: true, Address: contractID.String()}}
boundContracts := []commontypes.BoundContract{{Name: "median", Address: contractID.String()}}
if err = chainReaderService.Bind(context.Background(), boundContracts); err != nil {
return nil, err
}
Expand Down
33 changes: 26 additions & 7 deletions core/services/relay/evm/method_binding.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,20 @@ import (

commontypes "github.com/smartcontractkit/chainlink-common/pkg/types"
"github.com/smartcontractkit/chainlink-common/pkg/types/query"
"github.com/smartcontractkit/chainlink-common/pkg/types/query/primitives"
evmtypes "github.com/smartcontractkit/chainlink/v2/core/chains/evm/types"

evmclient "github.com/smartcontractkit/chainlink/v2/core/chains/evm/client"
)

type methodBinding struct {
address common.Address
contractName string
method string
client evmclient.Client
codec commontypes.Codec
bound bool
address common.Address
contractName string
method string
client evmclient.Client
codec commontypes.Codec
bound bool
confirmationsMapping map[primitives.ConfidenceLevel]evmtypes.Confirmations
}

var _ readBinding = &methodBinding{}
Expand All @@ -40,7 +43,7 @@ func (m *methodBinding) UnregisterAll(_ context.Context) error {
return nil
}

func (m *methodBinding) GetLatestValue(ctx context.Context, params, returnValue any) error {
func (m *methodBinding) GetLatestValue(ctx context.Context, params, returnValue any, _ primitives.ConfidenceLevel) error {
if !m.bound {
return fmt.Errorf("%w: method not bound", commontypes.ErrInvalidType)
}
Expand All @@ -56,6 +59,9 @@ func (m *methodBinding) GetLatestValue(ctx context.Context, params, returnValue
Data: data,
}

// TODO when BCI-2874 use headtracker to get block number to use here
//blockNumber := m.blockNumberFromConfidence(confidence.ConfidenceLevel)

bytes, err := m.client.CallContract(ctx, callMsg, nil)
if err != nil {
return fmt.Errorf("%w: %w", commontypes.ErrInternal, err)
Expand All @@ -73,3 +79,16 @@ func (m *methodBinding) Bind(_ context.Context, binding commontypes.BoundContrac
m.bound = true
return nil
}

// TODO when BCI-2874 use headtracker to get block number to use here
//func (m *methodBinding) blockNumberFromConfidence(confidenceLevel primitives.ConfidenceLevel) *big.Int {
// value, ok := m.confirmationsMapping[confidence]
// if ok {
// return value
// }
//
// ...
//
// // if the mapping doesn't exist, default to finalized for safety
// return ...
//}
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.3
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611175326-870c047f24c0
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.3 h1:h/ijT0NiyV06VxYVgcNfsE3+8OEzT3Q0Z9au0z1BPWs=
github.com/smartcontractkit/chainlink-automation v1.0.3/go.mod h1:RjboV0Qd7YP+To+OrzHGXaxUxoSONveCoAK2TQ1INLU=
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.20240611175326-870c047f24c0 h1:FYfzU4T3t9vHJa/h4xYTvJVaxRfVFpNdaNLlcbCBWDE=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611175326-870c047f24c0/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.3
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611175326-870c047f24c0
github.com/smartcontractkit/chainlink-testing-framework v1.30.2
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.3 h1:h/ijT0NiyV06VxYVgcNfsE3+8OEzT3Q0Z9au0z1BPWs=
github.com/smartcontractkit/chainlink-automation v1.0.3/go.mod h1:RjboV0Qd7YP+To+OrzHGXaxUxoSONveCoAK2TQ1INLU=
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.20240611175326-870c047f24c0 h1:FYfzU4T3t9vHJa/h4xYTvJVaxRfVFpNdaNLlcbCBWDE=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611175326-870c047f24c0/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.3
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240607135320-c9bc0a2ac0ce
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611175326-870c047f24c0
github.com/smartcontractkit/chainlink-testing-framework v1.30.2
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.3 h1:h/ijT0NiyV06VxYVgcNfsE3+8OEzT3Q0Z9au0z1BPWs=
github.com/smartcontractkit/chainlink-automation v1.0.3/go.mod h1:RjboV0Qd7YP+To+OrzHGXaxUxoSONveCoAK2TQ1INLU=
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.20240611175326-870c047f24c0 h1:FYfzU4T3t9vHJa/h4xYTvJVaxRfVFpNdaNLlcbCBWDE=
github.com/smartcontractkit/chainlink-common v0.1.7-0.20240611175326-870c047f24c0/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 41ffc8c

Please sign in to comment.