Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Configurable Client Errors #12760

Merged
merged 35 commits into from
Apr 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
a2c86d1
Implement client errors
DylanTinianov Apr 9, 2024
5c99f42
Test client errors
DylanTinianov Apr 9, 2024
b5e3184
Set client errors
DylanTinianov Apr 9, 2024
0063c0f
changeset
DylanTinianov Apr 9, 2024
2ce6450
Fix race conditions
DylanTinianov Apr 9, 2024
16eec30
Fix config tests
DylanTinianov Apr 10, 2024
7518403
Enable client errors
DylanTinianov Apr 10, 2024
1203fdb
remove global map
DylanTinianov Apr 10, 2024
ba56f27
Move errors to NodePool
DylanTinianov Apr 11, 2024
b09ba3a
Rename errors
DylanTinianov Apr 11, 2024
7a27e19
Update chains-evm.toml
DylanTinianov Apr 11, 2024
5d786a2
Fix test data
DylanTinianov Apr 11, 2024
71ef74a
Fix and generate docs
DylanTinianov Apr 11, 2024
0b30073
generate testdata
DylanTinianov Apr 16, 2024
3d143af
changeset
DylanTinianov Apr 16, 2024
3998333
update changeset
DylanTinianov Apr 16, 2024
52fb2c0
update testdata
DylanTinianov Apr 16, 2024
c98cfcf
Merge branch 'develop' into BCI-1176-configurable-client-errors
DylanTinianov Apr 16, 2024
467d477
generate docs
DylanTinianov Apr 16, 2024
2c93ba7
Update errors.go
DylanTinianov Apr 16, 2024
3ccc438
Merge branch 'develop' into BCI-1176-configurable-client-errors
DylanTinianov Apr 16, 2024
f0a3d14
remove variable
DylanTinianov Apr 16, 2024
037757a
Merge branch 'develop' into BCI-1176-configurable-client-errors
DylanTinianov Apr 17, 2024
d2a8284
Merge branch 'develop' into BCI-1176-configurable-client-errors
DylanTinianov Apr 17, 2024
acc6613
Refactor ClientErrors
DylanTinianov Apr 17, 2024
c2c4702
Pass client errors
DylanTinianov Apr 18, 2024
094889a
update client errors
DylanTinianov Apr 18, 2024
f2a2108
Update config
DylanTinianov Apr 18, 2024
488ccca
Fix config
DylanTinianov Apr 18, 2024
97dcadf
Update config tests
DylanTinianov Apr 18, 2024
a6c715c
update golden files
DylanTinianov Apr 18, 2024
68f2771
Update config-multi-chain-effective.toml
DylanTinianov Apr 22, 2024
7963a4d
Add regex to toml
DylanTinianov Apr 22, 2024
da96549
Merge branch 'develop' of https://github.com/smartcontractkit/chainli…
DylanTinianov Apr 23, 2024
d07b27b
Update lovely-jeans-confess.md
DylanTinianov Apr 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/lovely-jeans-confess.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"chainlink": minor
---

#nops : Enable configurable client error regexes for error classification
#added : New toml configuration options for [EVM.NodePool.Errors] to pass regexes on NonceTooLow, NonceTooHigh, ReplacementTransactionUnderpriced, LimitReached, TransactionAlreadyInMempool, TerminallyUnderpriced, InsufficientEth, TxFeeExceedsCap, L2FeeTooLow, L2FeeTooHigh, L2Full, TransactionAlreadyMined, Fatal, and ServiceUnavailable.
3 changes: 3 additions & 0 deletions common/client/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import (
"sync"
"time"

"github.com/smartcontractkit/chainlink/v2/core/chains/evm/config"

"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"

Expand Down Expand Up @@ -45,6 +47,7 @@ type NodeConfig interface {
SyncThreshold() uint32
NodeIsSyncingEnabled() bool
FinalizedBlockPollInterval() time.Duration
Errors() config.ClientErrors
}

type ChainConfig interface {
Expand Down
6 changes: 6 additions & 0 deletions common/client/node_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

clientMocks "github.com/smartcontractkit/chainlink/v2/common/client/mocks"
"github.com/smartcontractkit/chainlink/v2/common/types"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/config"
)

type testNodeConfig struct {
Expand All @@ -18,6 +19,7 @@ type testNodeConfig struct {
syncThreshold uint32
nodeIsSyncingEnabled bool
finalizedBlockPollInterval time.Duration
errors config.ClientErrors
}

func (n testNodeConfig) PollFailureThreshold() uint32 {
Expand All @@ -44,6 +46,10 @@ func (n testNodeConfig) FinalizedBlockPollInterval() time.Duration {
return n.finalizedBlockPollInterval
}

func (n testNodeConfig) Errors() config.ClientErrors {
return n.errors
}

type testNode struct {
*node[types.ID, Head, NodeClient[types.ID, Head]]
}
Expand Down
17 changes: 11 additions & 6 deletions core/chains/evm/client/chain_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import (
"math/big"
"time"

evmconfig "github.com/smartcontractkit/chainlink/v2/core/chains/evm/config"

"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
Expand Down Expand Up @@ -38,8 +40,9 @@ type chainClient struct {
RPCClient,
rpc.BatchElem,
]
logger logger.SugaredLogger
chainType config.ChainType
logger logger.SugaredLogger
chainType config.ChainType
clientErrors evmconfig.ClientErrors
}

func NewChainClient(
Expand All @@ -51,6 +54,7 @@ func NewChainClient(
sendonlys []commonclient.SendOnlyNode[*big.Int, RPCClient],
chainID *big.Int,
chainType config.ChainType,
clientErrors evmconfig.ClientErrors,
) Client {
multiNode := commonclient.NewMultiNode(
lggr,
Expand All @@ -63,13 +67,14 @@ func NewChainClient(
chainType,
"EVM",
func(tx *types.Transaction, err error) commonclient.SendTxReturnCode {
return ClassifySendError(err, logger.Sugared(logger.Nop()), tx, common.Address{}, chainType.IsL2())
return ClassifySendError(err, clientErrors, logger.Sugared(logger.Nop()), tx, common.Address{}, chainType.IsL2())
},
0, // use the default value provided by the implementation
)
return &chainClient{
multiNode: multiNode,
logger: logger.Sugared(lggr),
multiNode: multiNode,
logger: logger.Sugared(lggr),
clientErrors: clientErrors,
}
}

Expand Down Expand Up @@ -208,7 +213,7 @@ func (c *chainClient) SendTransaction(ctx context.Context, tx *types.Transaction

func (c *chainClient) SendTransactionReturnCode(ctx context.Context, tx *types.Transaction, fromAddress common.Address) (commonclient.SendTxReturnCode, error) {
err := c.SendTransaction(ctx, tx)
returnCode := ClassifySendError(err, c.logger, tx, fromAddress, c.IsL2())
returnCode := ClassifySendError(err, c.clientErrors, c.logger, tx, fromAddress, c.IsL2())
return returnCode, err
}

Expand Down
2 changes: 1 addition & 1 deletion core/chains/evm/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ func (client *client) HeaderByHash(ctx context.Context, h common.Hash) (*types.H

func (client *client) SendTransactionReturnCode(ctx context.Context, tx *types.Transaction, fromAddress common.Address) (commonclient.SendTxReturnCode, error) {
err := client.SendTransaction(ctx, tx)
returnCode := ClassifySendError(err, client.logger, tx, fromAddress, client.pool.ChainType().IsL2())
returnCode := ClassifySendError(err, nil, client.logger, tx, fromAddress, client.pool.ChainType().IsL2())
return returnCode, err
}

Expand Down
2 changes: 1 addition & 1 deletion core/chains/evm/client/config_builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func TestClientConfigBuilder(t *testing.T) {
require.Equal(t, *finalityTagEnabled, chainCfg.FinalityTagEnabled())

// let combiler tell us, when we do not have sufficient data to create evm client
_ = client.NewEvmClient(nodePool, chainCfg, logger.Test(t), big.NewInt(10), nodes)
_ = client.NewEvmClient(nodePool, chainCfg, nil, logger.Test(t), big.NewInt(10), nodes)
}

func TestNodeConfigs(t *testing.T) {
Expand Down
Loading
Loading