From 4c2c6a664730683dc836bfd2aca6a771dda0ada7 Mon Sep 17 00:00:00 2001 From: Awbrey Hughlett Date: Thu, 30 May 2024 01:43:14 -0500 Subject: [PATCH] Change Confirmations to Confidence (#12987) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Change Confirmations to Confidence `Confidence` is a different approach to mapping a chain agnostic concept of confidence that an event or transaction can or should be acted on. `Confidence` is intended to map to defined levels of confirmations on EVM chains and other states on other chains. Only two levels of `Confidence` exist by default to define the boundaries: `Highest` and `Lowest`. This creates an inclusive range for all chain configurable `Confidence` levels and can be treated as % confidence that an event or transaction can or should be acted on. * go mod tidy * go tidy * update latest common --------- Co-authored-by: Blaž Hrastnik --- core/chains/evm/logpoller/orm_test.go | 26 +++------- core/chains/evm/logpoller/parser.go | 44 +++++++++++++---- core/chains/evm/logpoller/parser_test.go | 40 ++++++++++++--- core/scripts/go.mod | 2 +- core/scripts/go.sum | 4 +- core/services/relay/evm/chain_reader.go | 51 ++++++++++++++++---- core/services/relay/evm/chain_reader_test.go | 16 +++--- core/services/relay/evm/event_binding.go | 17 ++++++- core/services/relay/evm/types/types.go | 3 ++ go.mod | 2 +- go.sum | 4 +- integration-tests/go.mod | 2 +- integration-tests/go.sum | 4 +- integration-tests/load/go.mod | 2 +- integration-tests/load/go.sum | 4 +- 15 files changed, 156 insertions(+), 65 deletions(-) diff --git a/core/chains/evm/logpoller/orm_test.go b/core/chains/evm/logpoller/orm_test.go index b2f01360844..ce56c799226 100644 --- a/core/chains/evm/logpoller/orm_test.go +++ b/core/chains/evm/logpoller/orm_test.go @@ -619,7 +619,7 @@ func TestORM_IndexedLogs(t *testing.T) { logpoller.NewAddressFilter(addr), logpoller.NewEventSigFilter(eventSig), filtersForTopics(topicIdx, topicValues), - query.Confirmation(primitives.Unconfirmed), + query.Confidence(primitives.Unconfirmed), }, } } @@ -705,7 +705,7 @@ func TestORM_IndexedLogs(t *testing.T) { logpoller.NewEventByTopicFilter(1, []primitives.ValueComparator{ {Value: logpoller.EvmWord(2).Hex(), Operator: primitives.Gte}, }), - query.Confirmation(primitives.Unconfirmed), + query.Confidence(primitives.Unconfirmed), }, } @@ -724,7 +724,7 @@ func TestORM_IndexedLogs(t *testing.T) { logpoller.NewEventByTopicFilter(topicIdx, []primitives.ValueComparator{ {Value: logpoller.EvmWord(max).Hex(), Operator: primitives.Lte}, }), - query.Confirmation(primitives.Unconfirmed), + query.Confidence(primitives.Unconfirmed), }, } } @@ -885,7 +885,7 @@ func TestORM_DataWords(t *testing.T) { logpoller.NewEventByWordFilter(eventSig, wordIdx, []primitives.ValueComparator{ {Value: logpoller.EvmWord(word2).Hex(), Operator: primitives.Lte}, }), - query.Confirmation(primitives.Unconfirmed), + query.Confidence(primitives.Unconfirmed), }, } } @@ -952,7 +952,7 @@ func TestORM_DataWords(t *testing.T) { logpoller.NewEventByWordFilter(eventSig, 0, []primitives.ValueComparator{ {Value: logpoller.EvmWord(1).Hex(), Operator: primitives.Gte}, }), - query.Confirmation(primitives.Unconfirmed), + query.Confidence(primitives.Unconfirmed), }, } @@ -1668,18 +1668,6 @@ func TestSelectLogsCreatedAfter(t *testing.T) { } filter := func(timestamp time.Time, confs evmtypes.Confirmations, topicIdx int, topicVals []common.Hash) query.KeyFilter { - var queryConfs primitives.ConfirmationLevel - - switch confs { - case evmtypes.Finalized: - queryConfs = primitives.Finalized - case evmtypes.Unconfirmed: - queryConfs = primitives.Unconfirmed - default: - fmt.Println("default") - queryConfs = primitives.ConfirmationLevel(confs) - } - filters := []query.Expression{ logpoller.NewAddressFilter(address), logpoller.NewEventSigFilter(event), @@ -1703,7 +1691,7 @@ func TestSelectLogsCreatedAfter(t *testing.T) { filters = append(filters, []query.Expression{ query.Timestamp(uint64(timestamp.Unix()), primitives.Gt), - query.Confirmation(queryConfs), + logpoller.NewConfirmationsFilter(confs), }...) return query.KeyFilter{ @@ -1982,7 +1970,7 @@ func TestSelectLogsDataWordBetween(t *testing.T) { logpoller.NewEventByWordFilter(eventSig, 1, []primitives.ValueComparator{ {Value: logpoller.EvmWord(word).Hex(), Operator: primitives.Gte}, }), - query.Confirmation(primitives.Unconfirmed), + query.Confidence(primitives.Unconfirmed), }, } } diff --git a/core/chains/evm/logpoller/parser.go b/core/chains/evm/logpoller/parser.go index 1fe9bcde7d5..2e17c92ed60 100644 --- a/core/chains/evm/logpoller/parser.go +++ b/core/chains/evm/logpoller/parser.go @@ -13,7 +13,6 @@ import ( "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" ) @@ -58,19 +57,17 @@ func (v *pgDSLParser) Block(p primitives.Block) { ) } -func (v *pgDSLParser) Confirmations(p primitives.Confirmations) { - switch p.ConfirmationLevel { +func (v *pgDSLParser) Confidence(p primitives.Confidence) { + switch p.ConfidenceLevel { case primitives.Finalized: + // the highest level of confidence maps to finalized v.expression = v.nestedConfQuery(true, 0) case primitives.Unconfirmed: - // Unconfirmed in the evm relayer is an alias to the case of 0 confirmations - // set the level to the number 0 and fallthrough to the default case - p.ConfirmationLevel = primitives.ConfirmationLevel(0) - - fallthrough + v.expression = v.nestedConfQuery(false, 0) default: - // the default case passes the confirmation level as a number directly to a subquery - v.expression = v.nestedConfQuery(false, uint64(evmtypes.Confirmations(p.ConfirmationLevel))) + v.err = errors.New("unrecognized confidence level; use confidence to confirmations mappings instead") + + return } } @@ -191,6 +188,16 @@ func (v *pgDSLParser) VisitEventTopicsByValueFilter(p *eventByTopicFilter) { } } +func (v *pgDSLParser) VisitConfirmationsFilter(p *confirmationsFilter) { + switch p.Confirmations { + case evmtypes.Finalized: + // the highest level of confidence maps to finalized + v.expression = v.nestedConfQuery(true, 0) + default: + v.expression = v.nestedConfQuery(false, uint64(p.Confirmations)) + } +} + func makeComp(comp primitives.ValueComparator, args *queryArgs, field, subfield, pattern string) (string, error) { cmp, err := cmpOpToString(comp.Operator) if err != nil { @@ -500,3 +507,20 @@ func (f *eventByTopicFilter) Accept(visitor primitives.Visitor) { v.VisitEventTopicsByValueFilter(f) } } + +type confirmationsFilter struct { + Confirmations evmtypes.Confirmations +} + +func NewConfirmationsFilter(confirmations evmtypes.Confirmations) query.Expression { + return query.Expression{Primitive: &confirmationsFilter{ + Confirmations: confirmations, + }} +} + +func (f *confirmationsFilter) Accept(visitor primitives.Visitor) { + switch v := visitor.(type) { + case *pgDSLParser: + v.VisitConfirmationsFilter(f) + } +} diff --git a/core/chains/evm/logpoller/parser_test.go b/core/chains/evm/logpoller/parser_test.go index a95f7fa7ae7..521aec14d8c 100644 --- a/core/chains/evm/logpoller/parser_test.go +++ b/core/chains/evm/logpoller/parser_test.go @@ -137,8 +137,8 @@ func TestDSLParser(t *testing.T) { query.Timestamp(10, primitives.Eq), query.TxHash(common.HexToHash("0x84").String()), query.Block(99, primitives.Neq), - query.Confirmation(primitives.Finalized), - query.Confirmation(primitives.Unconfirmed), + query.Confidence(primitives.Finalized), + query.Confidence(primitives.Unconfirmed), } limiter := query.NewLimitAndSort(query.CursorLimit("10-0x42-20", query.CursorPrevious, 20)) @@ -167,7 +167,8 @@ func TestDSLParser(t *testing.T) { t.Run("finalized", func(t *testing.T) { parser := &pgDSLParser{} chainID := big.NewInt(1) - expressions := []query.Expression{query.Confirmation(primitives.Finalized)} + + expressions := []query.Expression{query.Confidence(primitives.Finalized)} limiter := query.LimitAndSort{} result, args, err := parser.buildQuery(chainID, expressions, limiter) @@ -185,7 +186,8 @@ func TestDSLParser(t *testing.T) { t.Run("unconfirmed", func(t *testing.T) { parser := &pgDSLParser{} chainID := big.NewInt(1) - expressions := []query.Expression{query.Confirmation(primitives.Unconfirmed)} + + expressions := []query.Expression{query.Confidence(primitives.Unconfirmed)} limiter := query.LimitAndSort{} result, args, err := parser.buildQuery(chainID, expressions, limiter) @@ -199,6 +201,30 @@ func TestDSLParser(t *testing.T) { assertArgs(t, args, 2) }) + + t.Run("exact confirmations", func(t *testing.T) { + parser := &pgDSLParser{} + chainID := big.NewInt(1) + + expressions := []query.Expression{NewConfirmationsFilter(25)} + limiter := query.LimitAndSort{} + + result, args, err := parser.buildQuery(chainID, expressions, limiter) + expected := "SELECT evm.logs.* " + + "FROM evm.logs " + + "WHERE evm_chain_id = :evm_chain_id " + + "AND block_number <= (SELECT greatest(block_number - :confs_0, 0) FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)" + + require.NoError(t, err) + assert.Equal(t, expected, result) + + confirmations, ok := args.args["confs_0"] + + require.True(t, ok) + require.Equal(t, uint64(25), confirmations) + + assertArgs(t, args, 2) + }) }) t.Run("query for event by word", func(t *testing.T) { @@ -256,6 +282,7 @@ func TestDSLParser(t *testing.T) { parser := &pgDSLParser{} chainID := big.NewInt(1) + expressions := []query.Expression{ {BoolExpression: query.BoolExpression{ Expressions: []query.Expression{ @@ -263,7 +290,7 @@ func TestDSLParser(t *testing.T) { {BoolExpression: query.BoolExpression{ Expressions: []query.Expression{ query.TxHash(common.HexToHash("0x84").Hex()), - query.Confirmation(primitives.Unconfirmed), + query.Confidence(primitives.Unconfirmed), }, BoolOperator: query.OR, }}, @@ -298,6 +325,7 @@ func TestDSLParser(t *testing.T) { parser := &pgDSLParser{} chainID := big.NewInt(1) + expressions := []query.Expression{ {BoolExpression: query.BoolExpression{ Expressions: []query.Expression{ @@ -307,7 +335,7 @@ func TestDSLParser(t *testing.T) { query.TxHash(common.HexToHash("0x84").Hex()), {BoolExpression: query.BoolExpression{ Expressions: []query.Expression{ - query.Confirmation(primitives.Unconfirmed), + query.Confidence(primitives.Unconfirmed), wordFilter, }, BoolOperator: query.AND, diff --git a/core/scripts/go.mod b/core/scripts/go.mod index e701ac2d8b1..f9537449089 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -21,7 +21,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.20240528141639-92c521695f6f + github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528165711-19b9064a1d7e 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 diff --git a/core/scripts/go.sum b/core/scripts/go.sum index 7aa05229ee2..8788867bc8f 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -1185,8 +1185,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.20240528141639-92c521695f6f h1:k9F/a9kF1kknZ04mYTMstHHZ9DgOIifGRkRgm2T+sEc= -github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528141639-92c521695f6f/go.mod h1:DUZccDEW98n+J1mhdWGO7wr/Njad9p9Fzks839JN7Rs= +github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528165711-19b9064a1d7e h1:+lMjCyABWYAEr0ueTKheYHe9YbUx27UP+zpUOi+7Jz4= +github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528165711-19b9064a1d7e/go.mod h1:DUZccDEW98n+J1mhdWGO7wr/Njad9p9Fzks839JN7Rs= 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= diff --git a/core/services/relay/evm/chain_reader.go b/core/services/relay/evm/chain_reader.go index ad646249b7a..bd769e05f37 100644 --- a/core/services/relay/evm/chain_reader.go +++ b/core/services/relay/evm/chain_reader.go @@ -2,6 +2,7 @@ package evm import ( "context" + "errors" "fmt" "reflect" "strings" @@ -12,12 +13,14 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/codec" "github.com/smartcontractkit/chainlink-common/pkg/types/query" + "github.com/smartcontractkit/chainlink-common/pkg/types/query/primitives" commonservices "github.com/smartcontractkit/chainlink-common/pkg/services" commontypes "github.com/smartcontractkit/chainlink-common/pkg/types" evmclient "github.com/smartcontractkit/chainlink/v2/core/chains/evm/client" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/logpoller" + evmtypes "github.com/smartcontractkit/chainlink/v2/core/chains/evm/types" "github.com/smartcontractkit/chainlink/v2/core/logger" "github.com/smartcontractkit/chainlink/v2/core/services" "github.com/smartcontractkit/chainlink/v2/core/services/relay/evm/types" @@ -207,17 +210,23 @@ func (cr *chainReader) addEvent(contractName, eventName string, a abi.ABI, chain return err } + confirmations, err := confirmationsFromConfig(chainReaderDefinition.ConfidenceConfirmations) + if err != nil { + return err + } + eb := &eventBinding{ - contractName: contractName, - eventName: eventName, - lp: cr.lp, - hash: event.ID, - inputInfo: inputInfo, - inputModifier: inputModifier, - codecTopicInfo: codecTopicInfo, - topics: make(map[string]topicDetail), - eventDataWords: chainReaderDefinition.GenericDataWordNames, - id: wrapItemType(contractName, eventName, false) + uuid.NewString(), + contractName: contractName, + eventName: eventName, + lp: cr.lp, + hash: event.ID, + inputInfo: inputInfo, + inputModifier: inputModifier, + codecTopicInfo: codecTopicInfo, + topics: make(map[string]topicDetail), + eventDataWords: chainReaderDefinition.GenericDataWordNames, + id: wrapItemType(contractName, eventName, false) + uuid.NewString(), + confirmationsMapping: confirmations, } cr.contractBindings.AddReadBinding(contractName, eventName, eb) @@ -328,3 +337,25 @@ func setupEventInput(event abi.Event, def types.ChainReaderDefinition) ([]abi.Ar return filterArgs, types.NewCodecEntry(inputArgs, nil, nil), indexArgNames } + +func confirmationsFromConfig(values map[string]int) (map[primitives.ConfidenceLevel]evmtypes.Confirmations, error) { + mappings := map[primitives.ConfidenceLevel]evmtypes.Confirmations{ + primitives.Unconfirmed: evmtypes.Unconfirmed, + primitives.Finalized: evmtypes.Finalized, + } + + if values == nil { + return mappings, nil + } + + for key, mapped := range values { + mappings[primitives.ConfidenceLevel(key)] = evmtypes.Confirmations(mapped) + } + + if mappings[primitives.Finalized] != evmtypes.Finalized && + mappings[primitives.Finalized] > mappings[primitives.Unconfirmed] { + return nil, errors.New("finalized confidence level should map to -1 or a higher value than 0") + } + + return mappings, nil +} diff --git a/core/services/relay/evm/chain_reader_test.go b/core/services/relay/evm/chain_reader_test.go index fc62022f8b5..4b1d76199a2 100644 --- a/core/services/relay/evm/chain_reader_test.go +++ b/core/services/relay/evm/chain_reader_test.go @@ -192,11 +192,13 @@ func (it *chainReaderInterfaceTester) Setup(t *testing.T) { OutputModifications: codec.ModifiersConfig{ &codec.RenameModifierConfig{Fields: map[string]string{"NestedStruct.Inner.IntVal": "I"}}, }, + ConfidenceConfirmations: map[string]int{"0.0": 0, "1.0": -1}, }, EventWithFilterName: { - ChainSpecificName: "Triggered", - ReadType: types.Event, - EventInputFields: []string{"Field"}, + ChainSpecificName: "Triggered", + ReadType: types.Event, + EventInputFields: []string{"Field"}, + ConfidenceConfirmations: map[string]int{"0.0": 0, "1.0": -1}, }, triggerWithDynamicTopic: { ChainSpecificName: triggerWithDynamicTopic, @@ -205,11 +207,13 @@ func (it *chainReaderInterfaceTester) Setup(t *testing.T) { InputModifications: codec.ModifiersConfig{ &codec.RenameModifierConfig{Fields: map[string]string{"FieldHash": "Field"}}, }, + ConfidenceConfirmations: map[string]int{"0.0": 0, "1.0": -1}, }, triggerWithAllTopics: { - ChainSpecificName: triggerWithAllTopics, - ReadType: types.Event, - EventInputFields: []string{"Field1", "Field2", "Field3"}, + ChainSpecificName: triggerWithAllTopics, + ReadType: types.Event, + EventInputFields: []string{"Field1", "Field2", "Field3"}, + ConfidenceConfirmations: map[string]int{"0.0": 0, "1.0": -1}, }, MethodReturningSeenStruct: { ChainSpecificName: "returnSeen", diff --git a/core/services/relay/evm/event_binding.go b/core/services/relay/evm/event_binding.go index 98903f1463d..f7f628f6bd7 100644 --- a/core/services/relay/evm/event_binding.go +++ b/core/services/relay/evm/event_binding.go @@ -39,8 +39,9 @@ type eventBinding struct { // eventDataWords maps a generic name to a word index // key is a predefined generic name for evm log event data word // for eg. first evm data word(32bytes) of USDC log event is value so the key can be called value - eventDataWords map[string]uint8 - id string + eventDataWords map[string]uint8 + id string + confirmationsMapping map[primitives.ConfidenceLevel]evmtypes.Confirmations } type topicDetail struct { @@ -397,11 +398,23 @@ func (e *eventBinding) remapPrimitive(key string, expression query.Expression) ( } return logpoller.NewEventByTopicFilter(e.topics[key].Index, primitive.ValueComparators), nil + case *primitives.Confidence: + return logpoller.NewConfirmationsFilter(e.confirmationsFrom(primitive.ConfidenceLevel)), nil default: return expression, nil } } +func (e *eventBinding) confirmationsFrom(confidence primitives.ConfidenceLevel) evmtypes.Confirmations { + value, ok := e.confirmationsMapping[confidence] + if ok { + return value + } + + // if the mapping doesn't exist, default to finalized for safety + return evmtypes.Finalized +} + func wrapInternalErr(err error) error { if err == nil { return nil diff --git a/core/services/relay/evm/types/types.go b/core/services/relay/evm/types/types.go index 08eaba3fe1a..294f7a029c9 100644 --- a/core/services/relay/evm/types/types.go +++ b/core/services/relay/evm/types/types.go @@ -62,6 +62,9 @@ type chainReaderDefinitionFields struct { // key is a predefined generic name for evm log event data word // for eg. first evm data word(32bytes) of USDC log event is value so the key can be called value GenericDataWordNames map[string]uint8 `json:"genericDataWordNames,omitempty"` + // ConfidenceConfirmations is a mapping between a ConfidenceLevel and the confirmations associated. Confidence levels + // should be valid float values. + ConfidenceConfirmations map[string]int `json:"confidenceConfirmations,omitempty"` } func (d *ChainReaderDefinition) MarshalText() ([]byte, error) { diff --git a/go.mod b/go.mod index 4fa1db6752c..58cf2d797df 100644 --- a/go.mod +++ b/go.mod @@ -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.20240528141639-92c521695f6f + github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528165711-19b9064a1d7e 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 diff --git a/go.sum b/go.sum index 2dccf09b867..2085e3c3fd6 100644 --- a/go.sum +++ b/go.sum @@ -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.20240528141639-92c521695f6f h1:k9F/a9kF1kknZ04mYTMstHHZ9DgOIifGRkRgm2T+sEc= -github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528141639-92c521695f6f/go.mod h1:DUZccDEW98n+J1mhdWGO7wr/Njad9p9Fzks839JN7Rs= +github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528165711-19b9064a1d7e h1:+lMjCyABWYAEr0ueTKheYHe9YbUx27UP+zpUOi+7Jz4= +github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528165711-19b9064a1d7e/go.mod h1:DUZccDEW98n+J1mhdWGO7wr/Njad9p9Fzks839JN7Rs= 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= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index af47d8d1089..3d6814244c9 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -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.20240528141639-92c521695f6f + github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528165711-19b9064a1d7e github.com/smartcontractkit/chainlink-testing-framework v1.28.17 github.com/smartcontractkit/chainlink-vrf v0.0.0-20231120191722-fef03814f868 github.com/smartcontractkit/chainlink/v2 v2.0.0-00010101000000-000000000000 diff --git a/integration-tests/go.sum b/integration-tests/go.sum index 371ed469c78..4340728e653 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -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.20240528141639-92c521695f6f h1:k9F/a9kF1kknZ04mYTMstHHZ9DgOIifGRkRgm2T+sEc= -github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528141639-92c521695f6f/go.mod h1:DUZccDEW98n+J1mhdWGO7wr/Njad9p9Fzks839JN7Rs= +github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528165711-19b9064a1d7e h1:+lMjCyABWYAEr0ueTKheYHe9YbUx27UP+zpUOi+7Jz4= +github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528165711-19b9064a1d7e/go.mod h1:DUZccDEW98n+J1mhdWGO7wr/Njad9p9Fzks839JN7Rs= 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= diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index ff68838c574..5762df219e4 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -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.20240528141639-92c521695f6f + github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528165711-19b9064a1d7e github.com/smartcontractkit/chainlink-testing-framework v1.28.17 github.com/smartcontractkit/chainlink/integration-tests v0.0.0-20240214231432-4ad5eb95178c github.com/smartcontractkit/chainlink/v2 v2.9.0-beta0.0.20240216210048-da02459ddad8 diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index 14ef7bc8792..c0ca0e3049c 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -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.20240528141639-92c521695f6f h1:k9F/a9kF1kknZ04mYTMstHHZ9DgOIifGRkRgm2T+sEc= -github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528141639-92c521695f6f/go.mod h1:DUZccDEW98n+J1mhdWGO7wr/Njad9p9Fzks839JN7Rs= +github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528165711-19b9064a1d7e h1:+lMjCyABWYAEr0ueTKheYHe9YbUx27UP+zpUOi+7Jz4= +github.com/smartcontractkit/chainlink-common v0.1.7-0.20240528165711-19b9064a1d7e/go.mod h1:DUZccDEW98n+J1mhdWGO7wr/Njad9p9Fzks839JN7Rs= 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=