Skip to content

Commit a8a0df5

Browse files
committed
take a step towards chain accessing for executor
1 parent 83c793c commit a8a0df5

File tree

18 files changed

+142
-130
lines changed

18 files changed

+142
-130
lines changed

cmd/executor/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/smartcontractkit/chainlink-ccv/integration/pkg/contracttransmitter"
2929
"github.com/smartcontractkit/chainlink-ccv/integration/pkg/cursechecker"
3030
"github.com/smartcontractkit/chainlink-ccv/integration/pkg/destinationreader"
31+
"github.com/smartcontractkit/chainlink-ccv/pkg/chainaccess"
3132
"github.com/smartcontractkit/chainlink-ccv/protocol"
3233
"github.com/smartcontractkit/chainlink-ccv/protocol/common/logging"
3334
"github.com/smartcontractkit/chainlink-common/pkg/beholder"
@@ -156,7 +157,7 @@ func main() {
156157
//
157158
// Initialize executor components
158159
// ------------------------------------------------------------------------------------------------
159-
contractTransmitters := make(map[protocol.ChainSelector]executor.ContractTransmitter)
160+
contractTransmitters := make(map[protocol.ChainSelector]chainaccess.ContractTransmitter)
160161
destReaders := make(map[protocol.ChainSelector]executor.DestinationReader)
161162
rmnReaders := make(map[protocol.ChainSelector]ccvcommon.RMNRemoteReader)
162163
for strSel, chain := range blockchainInfo {

executor/interfaces.go

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
v1 "github.com/smartcontractkit/chainlink-ccv/indexer/pkg/api/handlers/v1"
88
"github.com/smartcontractkit/chainlink-ccv/indexer/pkg/common"
9+
"github.com/smartcontractkit/chainlink-ccv/pkg/chainaccess"
910
"github.com/smartcontractkit/chainlink-ccv/protocol"
1011
"github.com/smartcontractkit/chainlink-common/pkg/services"
1112
)
@@ -50,13 +51,6 @@ type Executor interface {
5051
CheckValidMessage(ctx context.Context, message protocol.Message) error
5152
}
5253

53-
// ContractTransmitter is an interface for transmitting messages to destination chains
54-
// it should be implemented by chain-specific transmitters.
55-
type ContractTransmitter interface {
56-
// ConvertAndWriteMessageToChain converts and transmits message to chain
57-
ConvertAndWriteMessageToChain(ctx context.Context, report AbstractAggregatedReport) error
58-
}
59-
6054
type LeaderElector interface {
6155
// GetReadyTimestamp to determine when a message is ready to be executed by this executor
6256
// We need chain selector as well as messageID because messageID is hashed and we cannot use it to get message information.
@@ -71,12 +65,8 @@ type LeaderElector interface {
7165
// When integrating with non-evms, the implementer only needs to add support for a single chain.
7266
type DestinationReader interface {
7367
services.Service
74-
// GetCCVSForMessage return cross-chain verifications for selected message
75-
GetCCVSForMessage(ctx context.Context, message protocol.Message) (CCVAddressInfo, error)
76-
// GetMessageSuccess returns true if message has on-chain success state.
77-
GetMessageSuccess(ctx context.Context, message protocol.Message) (bool, error)
78-
// GetRMNCursedSubjects returns the full list of cursed subjects for the chain. These can be Bytes16 ChainSelectors or the GlobalCurseSubject.
79-
GetRMNCursedSubjects(ctx context.Context) ([]protocol.Bytes16, error)
68+
// Embed chainaccess.DestinationReader to get the base functionality.
69+
chainaccess.DestinationReader
8070
// GetExecutionAttempts returns the full list of execution attempts for a given message within the executable window.
8171
GetExecutionAttempts(ctx context.Context, message protocol.Message) ([]ExecutionAttempt, error)
8272
}

executor/pkg/executor/cl_executor.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/smartcontractkit/chainlink-ccv/common"
1414
"github.com/smartcontractkit/chainlink-ccv/executor"
1515
"github.com/smartcontractkit/chainlink-ccv/integration/pkg/executionchecker"
16+
"github.com/smartcontractkit/chainlink-ccv/pkg/chainaccess"
1617
"github.com/smartcontractkit/chainlink-ccv/protocol"
1718
"github.com/smartcontractkit/chainlink-common/pkg/logger"
1819
"github.com/smartcontractkit/chainlink-common/pkg/services"
@@ -30,7 +31,7 @@ type ChainlinkExecutor struct {
3031
services.StateMachine
3132
services.Service
3233
lggr logger.Logger
33-
contractTransmitters map[protocol.ChainSelector]executor.ContractTransmitter
34+
contractTransmitters map[protocol.ChainSelector]chainaccess.ContractTransmitter
3435
destinationReaders map[protocol.ChainSelector]executor.DestinationReader
3536
executionChecker *executionchecker.AttemptCheckerService
3637
curseChecker common.CurseChecker
@@ -41,7 +42,7 @@ type ChainlinkExecutor struct {
4142

4243
func NewChainlinkExecutor(
4344
lggr logger.Logger,
44-
contractTransmitters map[protocol.ChainSelector]executor.ContractTransmitter,
45+
contractTransmitters map[protocol.ChainSelector]chainaccess.ContractTransmitter,
4546
destinationReaders map[protocol.ChainSelector]executor.DestinationReader,
4647
curseChecker common.CurseChecker,
4748
verifierResultReader executor.VerifierResultReader,
@@ -208,7 +209,7 @@ func (cle *ChainlinkExecutor) HandleMessage(ctx context.Context, message protoco
208209
}
209210

210211
// Create the aggregated report and transmit it to the chain.
211-
aggregatedReport := executor.AbstractAggregatedReport{
212+
aggregatedReport := protocol.AbstractAggregatedReport{
212213
CCVS: orderedCCVOfframps,
213214
CCVData: orderedverifierResults,
214215
Message: message,
@@ -231,7 +232,7 @@ func (cle *ChainlinkExecutor) HandleMessage(ctx context.Context, message protoco
231232
return false, nil
232233
}
233234

234-
func (cle *ChainlinkExecutor) getVerifierResultsAndQuorum(ctx context.Context, message protocol.Message, messageID protocol.Bytes32) ([]protocol.VerifierResult, executor.CCVAddressInfo, error) {
235+
func (cle *ChainlinkExecutor) getVerifierResultsAndQuorum(ctx context.Context, message protocol.Message, messageID protocol.Bytes32) ([]protocol.VerifierResult, protocol.CCVAddressInfo, error) {
235236
destinationChain, sourceSelector := message.DestChainSelector, message.SourceChainSelector
236237

237238
// Fetch CCV data from the indexer and CCV info from the destination reader concurrently.
@@ -265,7 +266,7 @@ func (cle *ChainlinkExecutor) getVerifierResultsAndQuorum(ctx context.Context, m
265266
return nil
266267
})
267268

268-
var ccvInfo executor.CCVAddressInfo
269+
var ccvInfo protocol.CCVAddressInfo
269270
g.Go(func() error {
270271
start := time.Now().Unix()
271272
res, err := cle.destinationReaders[destinationChain].GetCCVSForMessage(
@@ -322,7 +323,7 @@ func ccvDataSourceVerifiers(ccvDatas []protocol.VerifierResult) []string {
322323
// timestamp among all CCV datas for monitoring purposes.
323324
func orderCCVData(
324325
ccvDatas []protocol.VerifierResult,
325-
receiverCCVInfo executor.CCVAddressInfo,
326+
receiverCCVInfo protocol.CCVAddressInfo,
326327
) (
327328
orderedCCVData [][]byte,
328329
orderedCCVOfframps []protocol.UnknownAddress,

executor/pkg/executor/cl_executor_test.go

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/smartcontractkit/chainlink-ccv/executor/pkg/monitoring"
1515
"github.com/smartcontractkit/chainlink-ccv/integration/pkg/cursechecker"
1616
"github.com/smartcontractkit/chainlink-ccv/internal/mocks"
17+
"github.com/smartcontractkit/chainlink-ccv/pkg/chainaccess"
1718
"github.com/smartcontractkit/chainlink-ccv/protocol"
1819
"github.com/smartcontractkit/chainlink-common/pkg/logger"
1920
)
@@ -27,7 +28,7 @@ func setupTestExecutor(
2728
address1, address2 protocol.UnknownAddress,
2829
sourceChainSelector protocol.ChainSelector,
2930
) *ChainlinkExecutor {
30-
allContractTransmitters := make(map[protocol.ChainSelector]coordinator.ContractTransmitter)
31+
allContractTransmitters := make(map[protocol.ChainSelector]chainaccess.ContractTransmitter)
3132
for chain, mockCT := range ct {
3233
allContractTransmitters[chain] = mockCT
3334
}
@@ -173,7 +174,7 @@ func Test_ChainlinkExecutor_HandleMessage_VerifierResults(t *testing.T) {
173174
name string
174175
verifierResults []protocol.VerifierResult
175176
verifierResultsErr error
176-
ccvInfo coordinator.CCVAddressInfo
177+
ccvInfo protocol.CCVAddressInfo
177178
ccvInfoErr error
178179
expectedRetry bool
179180
expectedError bool
@@ -184,7 +185,7 @@ func Test_ChainlinkExecutor_HandleMessage_VerifierResults(t *testing.T) {
184185
verifierResults: []protocol.VerifierResult{
185186
{MessageID: protocol.Bytes32{}, Message: generateFakeMessage(1, 2, 1, nil, address2), MessageCCVAddresses: []protocol.UnknownAddress{}, MessageExecutorAddress: address2},
186187
},
187-
ccvInfo: coordinator.CCVAddressInfo{},
188+
ccvInfo: protocol.CCVAddressInfo{},
188189
expectedRetry: false,
189190
expectedError: false,
190191
},
@@ -197,7 +198,7 @@ func Test_ChainlinkExecutor_HandleMessage_VerifierResults(t *testing.T) {
197198
{
198199
name: "no verifier results - should retry with error",
199200
verifierResults: []protocol.VerifierResult{},
200-
ccvInfo: coordinator.CCVAddressInfo{},
201+
ccvInfo: protocol.CCVAddressInfo{},
201202
expectedRetry: true,
202203
expectedError: true,
203204
expectedNoResultsErr: true,
@@ -207,7 +208,7 @@ func Test_ChainlinkExecutor_HandleMessage_VerifierResults(t *testing.T) {
207208
verifierResults: []protocol.VerifierResult{
208209
{MessageID: protocol.Bytes32{}, Message: generateFakeMessage(1, 2, 1, nil, address1), MessageCCVAddresses: []protocol.UnknownAddress{}, MessageExecutorAddress: address1}, // address1 doesn't match defaultExecutorAddress[2] = address2
209210
},
210-
ccvInfo: coordinator.CCVAddressInfo{},
211+
ccvInfo: protocol.CCVAddressInfo{},
211212
expectedRetry: true,
212213
expectedError: true,
213214
expectedNoResultsErr: true,
@@ -217,7 +218,7 @@ func Test_ChainlinkExecutor_HandleMessage_VerifierResults(t *testing.T) {
217218
verifierResults: []protocol.VerifierResult{
218219
{MessageID: protocol.Bytes32{}, Message: generateFakeMessage(1, 2, 1, nil, address2), MessageCCVAddresses: []protocol.UnknownAddress{}, MessageExecutorAddress: address2},
219220
},
220-
ccvInfo: coordinator.CCVAddressInfo{
221+
ccvInfo: protocol.CCVAddressInfo{
221222
OptionalCCVs: []protocol.UnknownAddress{address1},
222223
OptionalThreshold: 1,
223224
},
@@ -288,7 +289,7 @@ func Test_ChainlinkExecutor_HandleMessage_OrderCCVData(t *testing.T) {
288289
testcases := []struct {
289290
name string
290291
verifierResults []protocol.VerifierResult
291-
ccvInfo coordinator.CCVAddressInfo
292+
ccvInfo protocol.CCVAddressInfo
292293
orderCCVDataErr bool
293294
expectedRetry bool
294295
expectedError bool
@@ -298,7 +299,7 @@ func Test_ChainlinkExecutor_HandleMessage_OrderCCVData(t *testing.T) {
298299
verifierResults: []protocol.VerifierResult{
299300
{MessageID: protocol.Bytes32{}, Message: generateFakeMessage(1, 2, 1, address1, address2), MessageCCVAddresses: []protocol.UnknownAddress{address1}, VerifierDestAddress: address1, CCVData: []byte("data1"), MessageExecutorAddress: address2},
300301
},
301-
ccvInfo: coordinator.CCVAddressInfo{
302+
ccvInfo: protocol.CCVAddressInfo{
302303
OptionalCCVs: []protocol.UnknownAddress{address1},
303304
OptionalThreshold: 1,
304305
},
@@ -310,7 +311,7 @@ func Test_ChainlinkExecutor_HandleMessage_OrderCCVData(t *testing.T) {
310311
verifierResults: []protocol.VerifierResult{
311312
{MessageID: protocol.Bytes32{}, Message: generateFakeMessage(1, 2, 1, address1, address2), MessageCCVAddresses: []protocol.UnknownAddress{address1}, VerifierDestAddress: address1, CCVData: []byte("data1"), MessageExecutorAddress: address2},
312313
},
313-
ccvInfo: coordinator.CCVAddressInfo{
314+
ccvInfo: protocol.CCVAddressInfo{
314315
RequiredCCVs: []protocol.UnknownAddress{address2}, // address2 not in verifier results
315316
OptionalCCVs: []protocol.UnknownAddress{address1},
316317
OptionalThreshold: 0,
@@ -376,7 +377,7 @@ func Test_ChainlinkExecutor_HandleMessage_ConvertAndWrite(t *testing.T) {
376377
convertAndWriteErr error
377378
expectedRetry bool
378379
expectedError bool
379-
expectedReportCheck func(*testing.T, coordinator.AbstractAggregatedReport) bool
380+
expectedReportCheck func(*testing.T, protocol.AbstractAggregatedReport) bool
380381
}{
381382
{
382383
name: "ConvertAndWriteMessageToChain succeeds - should complete",
@@ -395,7 +396,7 @@ func Test_ChainlinkExecutor_HandleMessage_ConvertAndWrite(t *testing.T) {
395396
convertAndWriteErr: nil,
396397
expectedRetry: false,
397398
expectedError: false,
398-
expectedReportCheck: func(t *testing.T, report coordinator.AbstractAggregatedReport) bool {
399+
expectedReportCheck: func(t *testing.T, report protocol.AbstractAggregatedReport) bool {
399400
return len(report.CCVS) == 1 &&
400401
len(report.CCVData) == 1 &&
401402
string(report.CCVData[0]) == "data1"
@@ -415,7 +416,7 @@ func Test_ChainlinkExecutor_HandleMessage_ConvertAndWrite(t *testing.T) {
415416
dr[1].EXPECT().GetRMNCursedSubjects(mock.Anything).Return([]protocol.Bytes16{}, nil).Once()
416417
dr[1].EXPECT().GetMessageSuccess(mock.Anything, mock.Anything).Return(false, nil).Once()
417418
dr[1].EXPECT().GetExecutionAttempts(mock.Anything, mock.Anything).Return([]coordinator.ExecutionAttempt{}, nil).Once()
418-
dr[1].EXPECT().GetCCVSForMessage(mock.Anything, mock.Anything).Return(coordinator.CCVAddressInfo{
419+
dr[1].EXPECT().GetCCVSForMessage(mock.Anything, mock.Anything).Return(protocol.CCVAddressInfo{
419420
OptionalCCVs: []protocol.UnknownAddress{address1},
420421
OptionalThreshold: 1,
421422
}, nil).Maybe()
@@ -429,7 +430,7 @@ func Test_ChainlinkExecutor_HandleMessage_ConvertAndWrite(t *testing.T) {
429430
}, nil).Maybe()
430431

431432
if tc.expectedReportCheck != nil {
432-
ct[1].EXPECT().ConvertAndWriteMessageToChain(mock.Anything, mock.MatchedBy(func(report coordinator.AbstractAggregatedReport) bool {
433+
ct[1].EXPECT().ConvertAndWriteMessageToChain(mock.Anything, mock.MatchedBy(func(report protocol.AbstractAggregatedReport) bool {
433434
return tc.expectedReportCheck(t, report)
434435
})).Return(tc.convertAndWriteErr).Once()
435436
} else {
@@ -473,7 +474,7 @@ func Test_orderCCVData(t *testing.T) {
473474
testcases := []struct {
474475
name string
475476
ccvDatas []protocol.VerifierResult
476-
receiverCCVInfo coordinator.CCVAddressInfo
477+
receiverCCVInfo protocol.CCVAddressInfo
477478
expectedOrderedData [][]byte
478479
expectedOfframps []protocol.UnknownAddress
479480
expectedTimestamp int64
@@ -483,7 +484,7 @@ func Test_orderCCVData(t *testing.T) {
483484
{
484485
name: "happy path",
485486
ccvDatas: []protocol.VerifierResult{reqData1, reqData2, optData1, optData2, optData3, otherData},
486-
receiverCCVInfo: coordinator.CCVAddressInfo{
487+
receiverCCVInfo: protocol.CCVAddressInfo{
487488
RequiredCCVs: []protocol.UnknownAddress{reqAddr1, reqAddr2},
488489
OptionalCCVs: []protocol.UnknownAddress{optAddr1, optAddr2, optAddr3},
489490
OptionalThreshold: 2,
@@ -496,7 +497,7 @@ func Test_orderCCVData(t *testing.T) {
496497
{
497498
name: "missing required ccv",
498499
ccvDatas: []protocol.VerifierResult{reqData1, optData1, optData2, optData3},
499-
receiverCCVInfo: coordinator.CCVAddressInfo{
500+
receiverCCVInfo: protocol.CCVAddressInfo{
500501
RequiredCCVs: []protocol.UnknownAddress{reqAddr1, reqAddr2},
501502
OptionalCCVs: []protocol.UnknownAddress{optAddr1, optAddr2, optAddr3},
502503
OptionalThreshold: 2,
@@ -507,7 +508,7 @@ func Test_orderCCVData(t *testing.T) {
507508
{
508509
name: "insufficient optional ccvs",
509510
ccvDatas: []protocol.VerifierResult{reqData1, reqData2, optData1},
510-
receiverCCVInfo: coordinator.CCVAddressInfo{
511+
receiverCCVInfo: protocol.CCVAddressInfo{
511512
RequiredCCVs: []protocol.UnknownAddress{reqAddr1, reqAddr2},
512513
OptionalCCVs: []protocol.UnknownAddress{optAddr1, optAddr2, optAddr3},
513514
OptionalThreshold: 2,
@@ -518,7 +519,7 @@ func Test_orderCCVData(t *testing.T) {
518519
{
519520
name: "optional threshold is 0",
520521
ccvDatas: []protocol.VerifierResult{reqData1, reqData2, optData1, optData2, optData3},
521-
receiverCCVInfo: coordinator.CCVAddressInfo{
522+
receiverCCVInfo: protocol.CCVAddressInfo{
522523
RequiredCCVs: []protocol.UnknownAddress{reqAddr1, reqAddr2},
523524
OptionalCCVs: []protocol.UnknownAddress{optAddr1, optAddr2, optAddr3},
524525
OptionalThreshold: 0,
@@ -531,7 +532,7 @@ func Test_orderCCVData(t *testing.T) {
531532
{
532533
name: "no required ccvs",
533534
ccvDatas: []protocol.VerifierResult{reqData1, reqData2, optData1, optData2, optData3},
534-
receiverCCVInfo: coordinator.CCVAddressInfo{
535+
receiverCCVInfo: protocol.CCVAddressInfo{
535536
RequiredCCVs: []protocol.UnknownAddress{},
536537
OptionalCCVs: []protocol.UnknownAddress{optAddr1, optAddr2, optAddr3},
537538
OptionalThreshold: 2,
@@ -544,7 +545,7 @@ func Test_orderCCVData(t *testing.T) {
544545
{
545546
name: "only takes up to threshold of optional ccvs",
546547
ccvDatas: []protocol.VerifierResult{reqData1, reqData2, optData1, optData2, optData3},
547-
receiverCCVInfo: coordinator.CCVAddressInfo{
548+
receiverCCVInfo: protocol.CCVAddressInfo{
548549
RequiredCCVs: []protocol.UnknownAddress{reqAddr1, reqAddr2},
549550
OptionalCCVs: []protocol.UnknownAddress{optAddr1, optAddr2, optAddr3},
550551
OptionalThreshold: 2,
@@ -557,7 +558,7 @@ func Test_orderCCVData(t *testing.T) {
557558
{
558559
name: "correct timestamp calculation",
559560
ccvDatas: []protocol.VerifierResult{reqData1, reqData2, optData1, optData2, optData3},
560-
receiverCCVInfo: coordinator.CCVAddressInfo{
561+
receiverCCVInfo: protocol.CCVAddressInfo{
561562
RequiredCCVs: []protocol.UnknownAddress{reqAddr1, reqAddr2}, // timestamps 10, 20. max is 20
562563
OptionalCCVs: []protocol.UnknownAddress{optAddr1, optAddr3, optAddr2}, // timestamps 5, 15, 25
563564
OptionalThreshold: 2,

executor/types.go

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package executor
22

33
import (
4-
"encoding/json"
54
"fmt"
65
"math/big"
76

@@ -13,30 +12,6 @@ var (
1312
NtpServer = "time.google.com"
1413
)
1514

16-
type AbstractAggregatedReport struct {
17-
CCVS []protocol.UnknownAddress
18-
CCVData [][]byte
19-
Message protocol.Message
20-
}
21-
22-
// MarshalJSON implements the json.Marshaler interface for AbstractAggregatedReport.
23-
// CCVS and CCVData are marshaled as hex strings.
24-
func (a AbstractAggregatedReport) MarshalJSON() ([]byte, error) {
25-
ccvData := make([]protocol.ByteSlice, len(a.CCVData))
26-
for i, data := range a.CCVData {
27-
ccvData[i] = protocol.ByteSlice(data)
28-
}
29-
return json.Marshal(struct {
30-
CCVS []protocol.UnknownAddress `json:"ccvs"`
31-
CCVData []protocol.ByteSlice `json:"ccv_data"`
32-
Message protocol.Message `json:"message"`
33-
}{
34-
CCVS: a.CCVS,
35-
CCVData: ccvData,
36-
Message: a.Message,
37-
})
38-
}
39-
4015
// ContractAddresses is a map of contract names across all chain selectors and their address.
4116
// Currently only one contract per chain per name is supported.
4217
type ContractAddresses map[string]map[uint64]string
@@ -48,15 +23,9 @@ type MessageWithCCVData struct {
4823
VerifiedTimestamp int64
4924
}
5025

51-
type CCVAddressInfo struct {
52-
RequiredCCVs []protocol.UnknownAddress `json:"required_ccvs"`
53-
OptionalCCVs []protocol.UnknownAddress `json:"optional_ccvs"`
54-
OptionalThreshold uint8 `json:"optional_threshold"`
55-
}
56-
5726
// ExecutionAttempt represents a chain-agnostic on-chain attempt.
5827
type ExecutionAttempt struct {
59-
Report AbstractAggregatedReport
28+
Report protocol.AbstractAggregatedReport
6029
TransactionGasLimit *big.Int
6130
}
6231

integration/pkg/constructors/executor.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"github.com/smartcontractkit/chainlink-ccv/integration/pkg/contracttransmitter"
2020
"github.com/smartcontractkit/chainlink-ccv/integration/pkg/cursechecker"
2121
"github.com/smartcontractkit/chainlink-ccv/integration/pkg/destinationreader"
22+
"github.com/smartcontractkit/chainlink-ccv/pkg/chainaccess"
2223
"github.com/smartcontractkit/chainlink-ccv/protocol"
2324
"github.com/smartcontractkit/chainlink-common/pkg/logger"
2425
"github.com/smartcontractkit/chainlink-evm/pkg/chains/legacyevm"
@@ -82,7 +83,7 @@ func NewExecutorCoordinator(
8283
return nil, fmt.Errorf("failed to initialize executor monitoring: %w", err)
8384
}
8485

85-
transmitters := make(map[protocol.ChainSelector]executor.ContractTransmitter)
86+
transmitters := make(map[protocol.ChainSelector]chainaccess.ContractTransmitter)
8687
destReaders := make(map[protocol.ChainSelector]executor.DestinationReader)
8788
rmnReaders := make(map[protocol.ChainSelector]ccvcommon.RMNRemoteReader)
8889
for sel, chain := range relayers {

0 commit comments

Comments
 (0)