Skip to content

Commit

Permalink
Merge branch 'develop' of github.com:smartcontractkit/chainlink into …
Browse files Browse the repository at this point in the history
…testsecrets
  • Loading branch information
kalverra committed Aug 18, 2024
2 parents a86d995 + 6ef1d6e commit be4ae5c
Show file tree
Hide file tree
Showing 19 changed files with 155 additions and 33 deletions.
5 changes: 5 additions & 0 deletions .changeset/afraid-buckets-yell.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": minor
---

#internal Exposed Confirmed state to ChainWriter GetTransactionStatus method
5 changes: 5 additions & 0 deletions .changeset/big-dots-report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": minor
---

Updated ZK overflow detection to skip transactions with non-broadcasted attempts. Delayed detection for zkEVM using the MinAttempts config. Updated XLayer to use the same detection logic as zkEVM. #internal
5 changes: 5 additions & 0 deletions .changeset/strong-dogs-smash.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": minor
---

error handling for Treasure #added
4 changes: 2 additions & 2 deletions common/txmgr/txmgr.go
Original file line number Diff line number Diff line change
Expand Up @@ -654,8 +654,8 @@ func (b *Txm[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE]) GetTransac
}
switch tx.State {
case TxUnconfirmed, TxConfirmedMissingReceipt:
// Return unconfirmed for ConfirmedMissingReceipt since a receipt is required to determine if it is finalized
return commontypes.Unconfirmed, nil
// Return pending for ConfirmedMissingReceipt since a receipt is required to consider it as unconfirmed
return commontypes.Pending, nil
case TxConfirmed:
// Return unconfirmed for confirmed transactions because they are not yet finalized
return commontypes.Unconfirmed, nil
Expand Down
8 changes: 7 additions & 1 deletion core/chains/evm/client/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,12 @@ var arbitrum = ClientErrors{
ServiceUnavailable: regexp.MustCompile(`(: |^)502 Bad Gateway: [\s\S]*$|network is unreachable|i/o timeout`),
}

// Treasure
var treasureFatal = regexp.MustCompile(`(: |^)invalid chain id for signer(:|$)`)
var treasure = ClientErrors{
Fatal: treasureFatal,
}

var celo = ClientErrors{
TxFeeExceedsCap: regexp.MustCompile(`(: |^)tx fee \([0-9\.]+ of currency celo\) exceeds the configured cap \([0-9\.]+ [a-zA-Z]+\)$`),
TerminallyUnderpriced: regexp.MustCompile(`(: |^)gasprice is less than gas price minimum floor`),
Expand Down Expand Up @@ -270,7 +276,7 @@ var internal = ClientErrors{
TerminallyStuck: regexp.MustCompile(TerminallyStuckMsg),
}

var clients = []ClientErrors{parity, geth, arbitrum, metis, substrate, avalanche, nethermind, harmony, besu, erigon, klaytn, celo, zkSync, zkEvm, mantle, aStar, gnosis, internal}
var clients = []ClientErrors{parity, geth, arbitrum, metis, substrate, avalanche, nethermind, harmony, besu, erigon, klaytn, celo, zkSync, zkEvm, treasure, mantle, aStar, gnosis, internal}

// ClientErrorRegexes returns a map of compiled regexes for each error type
func ClientErrorRegexes(errsRegex config.ClientErrors) *ClientErrors {
Expand Down
1 change: 1 addition & 0 deletions core/chains/evm/client/errors_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,7 @@ func Test_Eth_Errors_Fatal(t *testing.T) {
{"failed to forward tx to sequencer, please try again. Error message: 'invalid sender'", true, "Mantle"},

{"client error fatal", true, "tomlConfig"},
{"invalid chain id for signer", true, "Treasure"},
}

for _, test := range tests {
Expand Down
12 changes: 10 additions & 2 deletions core/chains/evm/config/toml/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -412,8 +412,16 @@ func (c *Chain) ValidateConfig() (err error) {
err = multierr.Append(err, commonconfig.ErrInvalid{Name: "Transactions.AutoPurge.DetectionApiUrl", Value: c.Transactions.AutoPurge.DetectionApiUrl.Scheme, Msg: "must be http or https"})
}
}
case chaintype.ChainZkEvm:
// No other configs are needed
case chaintype.ChainZkEvm, chaintype.ChainXLayer:
// MinAttempts is an optional config that can be used to delay the stuck tx detection for zkEVM or XLayer
// If MinAttempts is set, BumpThreshold cannot be 0
if c.Transactions.AutoPurge.MinAttempts != nil && *c.Transactions.AutoPurge.MinAttempts != 0 {
if c.GasEstimator.BumpThreshold == nil {
err = multierr.Append(err, commonconfig.ErrMissing{Name: "GasEstimator.BumpThreshold", Msg: fmt.Sprintf("must be set if Transactions.AutoPurge.MinAttempts is set for %s", chainType)})
} else if *c.GasEstimator.BumpThreshold == 0 {
err = multierr.Append(err, commonconfig.ErrInvalid{Name: "GasEstimator.BumpThreshold", Value: 0, Msg: fmt.Sprintf("cannot be 0 if Transactions.AutoPurge.MinAttempts is set for %s", chainType)})
}
}
default:
// Bump Threshold is required because the stuck tx heuristic relies on a minimum number of bump attempts to exist
if c.GasEstimator.BumpThreshold == nil {
Expand Down
53 changes: 44 additions & 9 deletions core/chains/evm/txmgr/stuck_tx_detector.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ type stuckTxDetectorConfig interface {
}

type stuckTxDetector struct {
lggr logger.Logger
lggr logger.SugaredLogger
chainID *big.Int
chainType chaintype.ChainType
maxPrice *assets.Wei
Expand All @@ -64,7 +64,7 @@ func NewStuckTxDetector(lggr logger.Logger, chainID *big.Int, chainType chaintyp
t.DisableCompression = true
httpClient := &http.Client{Transport: t}
return &stuckTxDetector{
lggr: lggr,
lggr: logger.Sugared(lggr),
chainID: chainID,
chainType: chainType,
maxPrice: maxPrice,
Expand Down Expand Up @@ -128,7 +128,7 @@ func (d *stuckTxDetector) DetectStuckTransactions(ctx context.Context, enabledAd
switch d.chainType {
case chaintype.ChainScroll:
return d.detectStuckTransactionsScroll(ctx, txs)
case chaintype.ChainZkEvm:
case chaintype.ChainZkEvm, chaintype.ChainXLayer:
return d.detectStuckTransactionsZkEVM(ctx, txs)
default:
return d.detectStuckTransactionsHeuristic(ctx, txs, blockNum)
Expand All @@ -153,11 +153,28 @@ func (d *stuckTxDetector) FindUnconfirmedTxWithLowestNonce(ctx context.Context,
}
}

// Build list of potentially stuck tx but exclude any that are already marked for purge
// Build list of potentially stuck tx but exclude any that are already marked for purge or have non-broadcasted attempts
var stuckTxs []Tx
for _, tx := range lowestNonceTxMap {
// Attempts are loaded newest to oldest so one marked for purge will always be first
if len(tx.TxAttempts) > 0 && !tx.TxAttempts[0].IsPurgeAttempt {
if len(tx.TxAttempts) == 0 {
d.lggr.AssumptionViolationw("encountered an unconfirmed transaction without an attempt", "tx", tx)
continue
}
// Check the transaction's attempts in case any are already marked for purge or if any are not broadcasted
// We can only have one non-broadcasted attempt for a transaction at a time
// Skip purge detection until all attempts are broadcasted to avoid conflicts with the purge attempt
var foundPurgeAttempt, foundNonBroadcastAttempt bool
for _, attempt := range tx.TxAttempts {
if attempt.IsPurgeAttempt {
foundPurgeAttempt = true
break
}
if attempt.State != types.TxAttemptBroadcast {
foundNonBroadcastAttempt = true
break
}
}
if !foundPurgeAttempt && !foundNonBroadcastAttempt {
stuckTxs = append(stuckTxs, tx)
}
}
Expand Down Expand Up @@ -322,14 +339,32 @@ func (d *stuckTxDetector) detectStuckTransactionsScroll(ctx context.Context, txs
// Uses eth_getTransactionByHash to detect that a transaction has been discarded due to overflow
// Currently only used by zkEVM but if other chains follow the same behavior in the future
func (d *stuckTxDetector) detectStuckTransactionsZkEVM(ctx context.Context, txs []Tx) ([]Tx, error) {
txReqs := make([]rpc.BatchElem, len(txs))
minAttempts := 0
if d.cfg.MinAttempts() != nil {
minAttempts = int(*d.cfg.MinAttempts())
}
// Check transactions have MinAttempts to ensure it has enough time to return results for getTransactionByHash
// zkEVM has a significant delay between broadcasting a transaction and getting a proper result from the RPC
var filteredTx []Tx
for _, tx := range txs {
if len(tx.TxAttempts) >= minAttempts {
filteredTx = append(filteredTx, tx)
}
}

// No transactions to process
if len(filteredTx) == 0 {
return filteredTx, nil
}

txReqs := make([]rpc.BatchElem, len(filteredTx))
txHashMap := make(map[common.Hash]Tx)
txRes := make([]*map[string]interface{}, len(txs))
txRes := make([]*map[string]interface{}, len(filteredTx))

// Build batch request elems to perform
// Does not need to be separated out into smaller batches
// Max number of transactions to check is equal to the number of enabled addresses which is a relatively small amount
for i, tx := range txs {
for i, tx := range filteredTx {
latestAttemptHash := tx.TxAttempts[0].Hash
var result map[string]interface{}
txReqs[i] = rpc.BatchElem{
Expand Down
56 changes: 55 additions & 1 deletion core/chains/evm/txmgr/stuck_tx_detector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,30 @@ func TestStuckTxDetector_FindPotentialStuckTxs(t *testing.T) {
require.NoError(t, err)
require.Len(t, stuckTxs, 0)
})

t.Run("excludes transactions with a in-progress attempt", func(t *testing.T) {
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
etx := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress)
attempt := cltest.NewLegacyEthTxAttempt(t, etx.ID)
attempt.TxFee.Legacy = assets.NewWeiI(2)
attempt.State = txmgrtypes.TxAttemptInProgress
require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt))
stuckTxs, err := stuckTxDetector.FindUnconfirmedTxWithLowestNonce(ctx, []common.Address{fromAddress})
require.NoError(t, err)
require.Len(t, stuckTxs, 0)
})

t.Run("excludes transactions with an insufficient funds attempt", func(t *testing.T) {
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
etx := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress)
attempt := cltest.NewLegacyEthTxAttempt(t, etx.ID)
attempt.TxFee.Legacy = assets.NewWeiI(2)
attempt.State = txmgrtypes.TxAttemptInsufficientFunds
require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt))
stuckTxs, err := stuckTxDetector.FindUnconfirmedTxWithLowestNonce(ctx, []common.Address{fromAddress})
require.NoError(t, err)
require.Len(t, stuckTxs, 0)
})
}

func TestStuckTxDetector_DetectStuckTransactionsHeuristic(t *testing.T) {
Expand Down Expand Up @@ -271,8 +295,9 @@ func TestStuckTxDetector_DetectStuckTransactionsZkEVM(t *testing.T) {
enabled: true,
}
blockNum := int64(100)
stuckTxDetector := txmgr.NewStuckTxDetector(lggr, testutils.FixtureChainID, chaintype.ChainZkEvm, assets.NewWei(assets.NewEth(100).ToInt()), autoPurgeCfg, feeEstimator, txStore, ethClient)

t.Run("returns empty list if no stuck transactions identified", func(t *testing.T) {
stuckTxDetector := txmgr.NewStuckTxDetector(lggr, testutils.FixtureChainID, chaintype.ChainZkEvm, assets.NewWei(assets.NewEth(100).ToInt()), autoPurgeCfg, feeEstimator, txStore, ethClient)
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
tx := mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, 1, blockNum, tenGwei)
attempts := tx.TxAttempts[0]
Expand All @@ -292,6 +317,7 @@ func TestStuckTxDetector_DetectStuckTransactionsZkEVM(t *testing.T) {
})

t.Run("returns stuck transactions discarded by chain", func(t *testing.T) {
stuckTxDetector := txmgr.NewStuckTxDetector(lggr, testutils.FixtureChainID, chaintype.ChainZkEvm, assets.NewWei(assets.NewEth(100).ToInt()), autoPurgeCfg, feeEstimator, txStore, ethClient)
// Insert tx that will be mocked as stuck
_, fromAddress1 := cltest.MustInsertRandomKey(t, ethKeyStore)
mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress1, 1, blockNum, tenGwei)
Expand All @@ -316,6 +342,34 @@ func TestStuckTxDetector_DetectStuckTransactionsZkEVM(t *testing.T) {
// Expect only 1 tx to return as stuck due to nil eth_getTransactionByHash response
require.Len(t, txs, 1)
})

t.Run("skips stuck tx detection for transactions that do not have enough attempts", func(t *testing.T) {
autoPurgeCfg.minAttempts = ptr(uint32(2))
stuckTxDetector := txmgr.NewStuckTxDetector(lggr, testutils.FixtureChainID, chaintype.ChainZkEvm, assets.NewWei(assets.NewEth(100).ToInt()), autoPurgeCfg, feeEstimator, txStore, ethClient)
// Insert tx with enough attempts for detection
_, fromAddress1 := cltest.MustInsertRandomKey(t, ethKeyStore)
etx1 := mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress1, 1, blockNum, tenGwei)
attempt := cltest.NewLegacyEthTxAttempt(t, etx1.ID)
attempt.TxFee.Legacy = assets.NewWeiI(2)
attempt.State = txmgrtypes.TxAttemptBroadcast
require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt))

// Insert tx that will be skipped for too few attempts
_, fromAddress2 := cltest.MustInsertRandomKey(t, ethKeyStore)
mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress2, 1, blockNum, tenGwei)

// Return nil response for a tx and a normal response for the other
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = nil // Return nil to signal discarded tx
}).Once()

txs, err := stuckTxDetector.DetectStuckTransactions(ctx, []common.Address{fromAddress1, fromAddress2}, blockNum)
require.NoError(t, err)
require.Len(t, txs, 1)
})
}

func TestStuckTxDetector_DetectStuckTransactionsScroll(t *testing.T) {
Expand Down
14 changes: 8 additions & 6 deletions core/chains/evm/txmgr/txmgr_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -681,7 +681,7 @@ func TestTxm_GetTransactionStatus(t *testing.T) {
require.Equal(t, commontypes.Unknown, state)
})

t.Run("returns unconfirmed for unconfirmed state", func(t *testing.T) {
t.Run("returns pending for unconfirmed state", func(t *testing.T) {
idempotencyKey := uuid.New().String()
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
nonce := evmtypes.Nonce(0)
Expand All @@ -700,7 +700,7 @@ func TestTxm_GetTransactionStatus(t *testing.T) {
require.NoError(t, err)
state, err := txm.GetTransactionStatus(ctx, idempotencyKey)
require.NoError(t, err)
require.Equal(t, commontypes.Unconfirmed, state)
require.Equal(t, commontypes.Pending, state)
})

t.Run("returns unconfirmed for confirmed state", func(t *testing.T) {
Expand Down Expand Up @@ -761,7 +761,7 @@ func TestTxm_GetTransactionStatus(t *testing.T) {
require.Equal(t, commontypes.Finalized, state)
})

t.Run("returns unconfirmed for confirmed missing receipt state", func(t *testing.T) {
t.Run("returns pending for confirmed missing receipt state", func(t *testing.T) {
idempotencyKey := uuid.New().String()
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
nonce := evmtypes.Nonce(0)
Expand All @@ -780,7 +780,7 @@ func TestTxm_GetTransactionStatus(t *testing.T) {
require.NoError(t, err)
state, err := txm.GetTransactionStatus(ctx, idempotencyKey)
require.NoError(t, err)
require.Equal(t, commontypes.Unconfirmed, state)
require.Equal(t, commontypes.Pending, state)
})

t.Run("returns fatal for fatal error state with terminally stuck error", func(t *testing.T) {
Expand All @@ -804,7 +804,8 @@ func TestTxm_GetTransactionStatus(t *testing.T) {
require.NoError(t, err)
state, err := txm.GetTransactionStatus(ctx, idempotencyKey)
require.Equal(t, commontypes.Fatal, state)
require.Error(t, err, evmclient.TerminallyStuckMsg)
require.Error(t, err)
require.Equal(t, evmclient.TerminallyStuckMsg, err.Error())

// Test a terminally stuck client error returns Fatal
nonce = evmtypes.Nonce(1)
Expand All @@ -825,7 +826,8 @@ func TestTxm_GetTransactionStatus(t *testing.T) {
require.NoError(t, err)
state, err = txm.GetTransactionStatus(ctx, idempotencyKey)
require.Equal(t, commontypes.Fatal, state)
require.Error(t, err, evmclient.TerminallyStuckMsg)
require.Error(t, err)
require.Equal(t, terminallyStuckClientError, err.Error())
})

t.Run("returns failed for fatal error state with other error", func(t *testing.T) {
Expand Down
2 changes: 1 addition & 1 deletion core/scripts/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ require (
github.com/prometheus/client_golang v1.17.0
github.com/shopspring/decimal v1.4.0
github.com/smartcontractkit/chainlink-automation v1.0.4
github.com/smartcontractkit/chainlink-common v0.2.2-0.20240815090511-4586e672b8e4
github.com/smartcontractkit/chainlink-common v0.2.2-0.20240816202716-6930d109fd82

Check failure on line 25 in core/scripts/go.mod

View workflow job for this annotation

GitHub Actions / Validate go.mod dependencies

err: dependency not on default branch
github.com/smartcontractkit/chainlink/v2 v2.0.0-00010101000000-000000000000
github.com/smartcontractkit/libocr v0.0.0-20240717100443-f6226e09bee7
github.com/spf13/cobra v1.8.0
Expand Down
4 changes: 2 additions & 2 deletions core/scripts/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1186,8 +1186,8 @@ github.com/smartcontractkit/chainlink-automation v1.0.4 h1:iyW181JjKHLNMnDleI8um
github.com/smartcontractkit/chainlink-automation v1.0.4/go.mod h1:u4NbPZKJ5XiayfKHD/v3z3iflQWqvtdhj13jVZXj/cM=
github.com/smartcontractkit/chainlink-ccip v0.0.0-20240806144315-04ac101e9c95 h1:LAgJTg9Yr/uCo2g7Krp88Dco2U45Y6sbJVl8uKoLkys=
github.com/smartcontractkit/chainlink-ccip v0.0.0-20240806144315-04ac101e9c95/go.mod h1:/ZWraCBaDDgaIN1prixYcbVvIk/6HeED9+8zbWQ+TMo=
github.com/smartcontractkit/chainlink-common v0.2.2-0.20240815090511-4586e672b8e4 h1:5x4kknDjui1m1E5Ad6oXc/sFi6nPN2cQqUfSIdwr5iQ=
github.com/smartcontractkit/chainlink-common v0.2.2-0.20240815090511-4586e672b8e4/go.mod h1:Jg1sCTsbxg76YByI8ifpFby3FvVqISStHT8ypy9ocmY=
github.com/smartcontractkit/chainlink-common v0.2.2-0.20240816202716-6930d109fd82 h1:iT9xlcy7Q98F9QheClGBiU0Ig1A+0UhtFkEdKFHvX/0=
github.com/smartcontractkit/chainlink-common v0.2.2-0.20240816202716-6930d109fd82/go.mod h1:Jg1sCTsbxg76YByI8ifpFby3FvVqISStHT8ypy9ocmY=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240710121324-3ed288aa9b45 h1:NBQLtqk8zsyY4qTJs+NElI3aDFTcAo83JHvqD04EvB0=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240710121324-3ed288aa9b45/go.mod h1:LV0h7QBQUpoC2UUi6TcUvcIFm1xjP/DtEcqV8+qeLUs=
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240801131703-fd75761c982f h1:I9fTBJpHkeldFplXUy71eLIn6A6GxuR4xrABoUeD+CM=
Expand Down
1 change: 1 addition & 0 deletions core/services/relay/evm/chain_writer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ func TestChainWriter(t *testing.T) {
status commontypes.TransactionStatus
}{
{uuid.NewString(), commontypes.Unknown},
{uuid.NewString(), commontypes.Pending},
{uuid.NewString(), commontypes.Unconfirmed},
{uuid.NewString(), commontypes.Finalized},
{uuid.NewString(), commontypes.Failed},
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ require (
github.com/smartcontractkit/chain-selectors v1.0.10

Check failure on line 75 in go.mod

View workflow job for this annotation

GitHub Actions / Validate go.mod dependencies

err: dependency not on default branch
github.com/smartcontractkit/chainlink-automation v1.0.4
github.com/smartcontractkit/chainlink-ccip v0.0.0-20240806144315-04ac101e9c95
github.com/smartcontractkit/chainlink-common v0.2.2-0.20240815090511-4586e672b8e4
github.com/smartcontractkit/chainlink-common v0.2.2-0.20240816202716-6930d109fd82

Check failure on line 78 in go.mod

View workflow job for this annotation

GitHub Actions / Validate go.mod dependencies

err: dependency not on default branch
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240710121324-3ed288aa9b45
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240801131703-fd75761c982f
github.com/smartcontractkit/chainlink-feeds v0.0.0-20240710170203-5b41615da827
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1141,8 +1141,8 @@ github.com/smartcontractkit/chainlink-automation v1.0.4 h1:iyW181JjKHLNMnDleI8um
github.com/smartcontractkit/chainlink-automation v1.0.4/go.mod h1:u4NbPZKJ5XiayfKHD/v3z3iflQWqvtdhj13jVZXj/cM=
github.com/smartcontractkit/chainlink-ccip v0.0.0-20240806144315-04ac101e9c95 h1:LAgJTg9Yr/uCo2g7Krp88Dco2U45Y6sbJVl8uKoLkys=
github.com/smartcontractkit/chainlink-ccip v0.0.0-20240806144315-04ac101e9c95/go.mod h1:/ZWraCBaDDgaIN1prixYcbVvIk/6HeED9+8zbWQ+TMo=
github.com/smartcontractkit/chainlink-common v0.2.2-0.20240815090511-4586e672b8e4 h1:5x4kknDjui1m1E5Ad6oXc/sFi6nPN2cQqUfSIdwr5iQ=
github.com/smartcontractkit/chainlink-common v0.2.2-0.20240815090511-4586e672b8e4/go.mod h1:Jg1sCTsbxg76YByI8ifpFby3FvVqISStHT8ypy9ocmY=
github.com/smartcontractkit/chainlink-common v0.2.2-0.20240816202716-6930d109fd82 h1:iT9xlcy7Q98F9QheClGBiU0Ig1A+0UhtFkEdKFHvX/0=
github.com/smartcontractkit/chainlink-common v0.2.2-0.20240816202716-6930d109fd82/go.mod h1:Jg1sCTsbxg76YByI8ifpFby3FvVqISStHT8ypy9ocmY=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240710121324-3ed288aa9b45 h1:NBQLtqk8zsyY4qTJs+NElI3aDFTcAo83JHvqD04EvB0=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240710121324-3ed288aa9b45/go.mod h1:LV0h7QBQUpoC2UUi6TcUvcIFm1xjP/DtEcqV8+qeLUs=
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240801131703-fd75761c982f h1:I9fTBJpHkeldFplXUy71eLIn6A6GxuR4xrABoUeD+CM=
Expand Down
2 changes: 1 addition & 1 deletion integration-tests/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ require (
github.com/slack-go/slack v0.12.2
github.com/smartcontractkit/chain-selectors v1.0.21
github.com/smartcontractkit/chainlink-automation v1.0.4
github.com/smartcontractkit/chainlink-common v0.2.2-0.20240815090511-4586e672b8e4
github.com/smartcontractkit/chainlink-common v0.2.2-0.20240816202716-6930d109fd82

Check failure on line 36 in integration-tests/go.mod

View workflow job for this annotation

GitHub Actions / Validate go.mod dependencies

err: dependency not on default branch
github.com/smartcontractkit/chainlink-testing-framework v1.34.2
github.com/smartcontractkit/chainlink-testing-framework/grafana v0.0.0-20240405215812-5a72bc9af239
github.com/smartcontractkit/chainlink/v2 v2.0.0-00010101000000-000000000000
Expand Down
Loading

0 comments on commit be4ae5c

Please sign in to comment.